From 78202b9d466643d4f23b608588ea4687b30470c5 Mon Sep 17 00:00:00 2001 From: Nicholas Styles Date: Thu, 21 Feb 2019 17:40:49 +0100 Subject: [PATCH 1/3] Porting over InDetTrackingGeometryXML changes from step 3 layouts with layout translation removed. Some issues - some code just commented out (needs to be revisited, but is not relevant for step 2.2). --- .../InDetTrackingGeometryXML/CMakeLists.txt | 5 +- .../BarrelBuilderXML.h | 1 + .../EndcapBuilderXML.h | 2 +- .../LayerProviderXML.h | 2 +- .../XMLGeoTemplates.h | 20 ++- .../InDetTrackingGeometryXML/XMLReaderSvc.h | 8 +- ...redSLHC_InDetTrackingGeometryXMLBuilder.py | 26 +++- .../python/XMLReaderJobProperties.py | 49 ++++--- .../src/BarrelBuilderXML.cxx | 44 +++++- .../src/EndcapBuilderXML.cxx | 30 ++-- .../src/LayerProviderXML.cxx | 7 +- .../src/StaveBuilderXML.cxx | 11 +- .../src/XMLReaderSvc.cxx | 130 ++++++++++++++++-- .../python/SLHC_Setup_XML.py | 3 +- 14 files changed, 270 insertions(+), 68 deletions(-) diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/CMakeLists.txt b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/CMakeLists.txt index ef7d6db9d62..05f60a1c646 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/CMakeLists.txt +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/CMakeLists.txt @@ -21,8 +21,9 @@ atlas_depends_on_subdirs( PUBLIC PRIVATE InnerDetector/InDetDetDescr/InDetReadoutGeometry InnerDetector/InDetDetDescr/InDetTrackingGeometryUtils - Tools/PathResolver - DetectorDescription/GeoModelXml + Tools/PathResolver + DetectorDescription/GeoModelXml + DetectorDescription/GeoModel/GeoModelInterfaces Tracking/TrkDetDescr/TrkGeometry Tracking/TrkDetDescr/TrkGeometryAlpine ) diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/BarrelBuilderXML.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/BarrelBuilderXML.h index 263880c432c..3e932a97aff 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/BarrelBuilderXML.h +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/BarrelBuilderXML.h @@ -87,6 +87,7 @@ namespace InDet { size_t m_barrelLayerBinsZ; //!< Barrel bins for the material in z size_t m_barrelLayerBinsPhi; //!< Barrel bins for the material in phi bool m_customMaterial; + bool m_impMatDescription; }; } diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/EndcapBuilderXML.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/EndcapBuilderXML.h index 48c4bb0d00e..dfc97b17da0 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/EndcapBuilderXML.h +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/EndcapBuilderXML.h @@ -86,6 +86,7 @@ namespace InDet { bool m_pixelCase; // flag for pixel/sct ServiceHandle m_xmlReader; ToolHandle m_moduleProvider; + size_t m_endcapLayerBinsR; //!< Endcap bins for the material in r size_t m_endcapLayerBinsPhi; //!< Endcap bins for the material in phi @@ -96,4 +97,3 @@ namespace InDet { } #endif //ENDCAPBUILDERXML_H - diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/LayerProviderXML.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/LayerProviderXML.h index 430ac908a75..4ac36a8be38 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/LayerProviderXML.h +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/LayerProviderXML.h @@ -79,7 +79,7 @@ namespace InDet { std::ofstream m_dumpfileRZ; std::string m_identification; bool m_doPix, m_doSCT; - int m_startLayer, m_endLayer; + int m_startLayer, m_endLayer, m_startEndcap, m_endEndcap; ServiceHandle m_xmlReader; ToolHandle m_pixBarrelBuilder; ToolHandle m_sctBarrelBuilder; diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLGeoTemplates.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLGeoTemplates.h index 98e3507a5c4..e677e858244 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLGeoTemplates.h +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLGeoTemplates.h @@ -21,8 +21,7 @@ namespace InDet { inline void Print() { std::cout << "-----Trk Material Template '" << name << "' Thickness = " << thickness <<" [mm]"<< std::endl; for(unsigned int i=0;i0){ std::cout << " Alpine modules parameters:" << std::endl; std::cout << " #modules = " << alp_pos.size() << " type = '" << alp_type - << " tilt = " << alp_tilt << " [rad] angle = " << alp_angle << " [rad] rshift = " << alp_rshift <<" [degree] radial tilt = "<< alp_radialTilt << std::endl; + << " tilt = " << alp_tilt << " [rad] angle = " << alp_angle << " [rad] rshift = " << alp_rshift + << " [mm] z offset = " << alp_zoffset << " [mm] r offset = " << alp_roffset << " [mm] radial tilt = " + << alp_radialTilt << " [rad] "<< std::endl; } } @@ -144,6 +151,7 @@ namespace InDet { double b_stereoO; double b_stereoSep; double b_rshift; + double b_zoffset; bool double_sided; bool b_sameAngle; std::string b_type; @@ -159,6 +167,8 @@ namespace InDet { double alp_tilt; double alp_angle; double alp_rshift; + double alp_zoffset; + double alp_roffset; double alp_radialTilt; // Cylindrical envelop double active_halflength; diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLReaderSvc.h b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLReaderSvc.h index 933a33076c9..f73461b03ce 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLReaderSvc.h +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/InDetTrackingGeometryXML/XMLReaderSvc.h @@ -67,7 +67,8 @@ namespace InDet { inline unsigned int nbOfPixelEndcapLayers() const { return m_tmp_pixEndcapLayer.size(); } inline unsigned int nbOfSCTBarrelLayers() const { return m_tmp_sctBarrelLayer.size(); } inline unsigned int nbOfSCTEndcapLayers() const { return m_tmp_sctEndcapLayer.size(); } - + inline std::string slhcVersion() const { return m_xml_SLHCVersion; } + // Stave building helpers double getHalfPlainLength(InDet::StaveTmp *staveTmp) const; double getZStep(InDet::StaveTmp *staveTmp) const; @@ -94,6 +95,7 @@ namespace InDet { void openDictFile(std::ofstream& file,std::string filename) const; void closeDictFile(std::ofstream& file) const; void writePixBarrelDict(std::ofstream& file); + void writePixInnerEndcapDict(std::ofstream& file); void writePixEndcapDict(std::ofstream& file); void writeSctBarrelDict(std::ofstream& file); void writeSctEndcapDict(std::ofstream& file); @@ -112,6 +114,7 @@ namespace InDet { std::string m_xml_sctStaves; std::string m_xml_sctBarrelLayers; std::string m_xml_sctEndcapLayers; + std::string m_xml_SLHCVersion; std::vector< MaterialTmp *> m_tmp_material; std::vector< ComponentTmp *> m_tmp_component; @@ -124,9 +127,8 @@ namespace InDet { std::vector< BarrelLayerTmp *> m_tmp_sctBarrelLayer; std::vector< EndcapLayerTmp *> m_tmp_sctEndcapLayer; - bool m_doPix, m_doSCT, m_isGMX, m_createDict, m_readXMLfromDB; + bool m_doPix, m_doSCT, m_isGMX, m_createDict, m_readXMLfromDB; }; } #endif //INDETTRACKINGGEOMETRY_XMLREADERSVC - diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/ConfiguredSLHC_InDetTrackingGeometryXMLBuilder.py b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/ConfiguredSLHC_InDetTrackingGeometryXMLBuilder.py index 716d8e5abb7..8634dfe0589 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/ConfiguredSLHC_InDetTrackingGeometryXMLBuilder.py +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/ConfiguredSLHC_InDetTrackingGeometryXMLBuilder.py @@ -1,5 +1,3 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - ###################################################### # ConfiguredSLHC_InDetTrackingGeometryXML module # @@ -66,11 +64,12 @@ class ConfiguredSLHC_InDetTrackingGeometryXMLBuilder( InDet__StagedTrackingGeome isRingLayout = XMLReaderFlags.isRingLayout() splitBarrelLayers = XMLReaderFlags.splitBarrelLayers() InnerLayers = XMLReaderFlags.InnerLayerIndices() + InnerDisks = XMLReaderFlags.InnerDiskIndices() doPix = XMLReaderFlags.doPix() doSCT = XMLReaderFlags.doSCT() readXMLfromDB = XMLReaderFlags.readXMLfromDB() - print "TrackingXML endcap layer ",isRingLayout," ",splitBarrelLayers," ",InnerLayers + print "TrackingXML endcap layer ",isRingLayout," ",splitBarrelLayers," ",InnerLayers, " - ", InnerDisks # PIXEL building from InDetTrackingGeometryXML.InDetTrackingGeometryXMLConf import InDet__LayerProviderXML @@ -115,6 +114,7 @@ class ConfiguredSLHC_InDetTrackingGeometryXMLBuilder( InDet__StagedTrackingGeome startLayer = 0 + startEndcap = 0 if splitBarrelLayers: endLayer = InnerLayers[-1] # Pixel layer provider @@ -128,7 +128,16 @@ class ConfiguredSLHC_InDetTrackingGeometryXMLBuilder( InDet__StagedTrackingGeome PixelFirstLayerProvider.ModuleProvider = InDetModuleProvider PixelFirstLayerProvider.PixelBarrelBuilder = InDetBarrelBuilder PixelFirstLayerProvider.PixelEndcapBuilder = InDetEndcapBuilder - #####startLayer += 1 + + if (len(InnerDisks)>0): + endEndcap = InnerDisks[-1] + PixelFirstLayerProvider.startEndcap = startEndcap + PixelFirstLayerProvider.endEndcap = endEndcap + startEndcap = endEndcap + 1 + else: + PixelFirstLayerProvider.startEndcap = startLayer + PixelFirstLayerProvider.endEndcap = endLayer + startLayer = endLayer + 1 ToolSvc += PixelFirstLayerProvider PixelFirstLayerBinning = 2 @@ -147,6 +156,14 @@ class ConfiguredSLHC_InDetTrackingGeometryXMLBuilder( InDet__StagedTrackingGeome PixelLayerProvider.doSCT = False PixelLayerProvider.startLayer = startLayer PixelLayerProvider.endLayer = 4 + + if (len(InnerDisks)>0): + PixelLayerProvider.startEndcap = startEndcap + PixelLayerProvider.endEndcap = 32 + else: + PixelLayerProvider.startEndcap = startLayer + PixelLayerProvider.endEndcap = 4 + PixelLayerProvider.ModuleProvider = InDetModuleProvider PixelLayerProvider.PixelBarrelBuilder = InDetBarrelBuilder PixelLayerProvider.PixelEndcapBuilder = InDetEndcapBuilder @@ -299,6 +316,7 @@ class ConfiguredSLHC_InDetTrackingGeometryXMLBuilder( InDet__StagedTrackingGeome # add to SvcMgr ServiceMgr += AtlasEnvelopeSvc + # the tracking geometry builder InDet__StagedTrackingGeometryBuilder.__init__(self,namePrefix+name,\ BeamPipeBuilder = BeamPipeBuilder,\ diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/XMLReaderJobProperties.py b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/XMLReaderJobProperties.py index 39a5fcc6cc6..73f27ac22dc 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/XMLReaderJobProperties.py +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/python/XMLReaderJobProperties.py @@ -1,5 +1,3 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - # ------------------------------------------------------------------------------------- # XMLReader jobproperties @@ -44,7 +42,7 @@ class isGMX(JobProperty): class addBCL(JobProperty): statusOn = True allowedTypes = ['bool'] - StoredValue = False + StoredValue = False class splitBarrelLayers(JobProperty): statusOn = True allowedTypes = ['bool'] @@ -57,6 +55,10 @@ class InnerLayerIndices(JobProperty): statusOn = True allowedTypes = ['list'] StoredValue = [] +class InnerDiskIndices(JobProperty): + statusOn = True + allowedTypes = ['list'] + StoredValue = [] class Initialized(JobProperty): statusOn = True allowedTypes = ['bool'] @@ -92,29 +94,32 @@ class XMLReaderFlags_JobProperties(JobPropertyContainer): self.splitBarrelLayers = False self.isRingLayout = False self.InnerLayerIndices = [] + self.InnerDiskIndices = [] - if "ECRing" in self.PixelEndcapLayout(): - self.isRingLayout = True + if "ECRing" in self.PixelEndcapLayout(): # + self.isRingLayout = True # - if "Alpine4" in self.PixelBarrelLayout(): - self.isRingLayout = True - self.splitBarrelLayers = True - if "Alpine4" in self.PixelEndcapLayout(): - self.InnerLayerIndices = [0] + if "Alpine4" in self.PixelBarrelLayout():# + self.isRingLayout = True # + self.splitBarrelLayers = True # + if "Alpine4" in self.PixelEndcapLayout():# + self.InnerLayerIndices = [0]# - if "ExtBrl" in self.PixelBarrelLayout(): - self.splitBarrelLayers = True - self.InnerLayerIndices = [0,1] + if "ExtBrl" in self.PixelBarrelLayout():# + self.splitBarrelLayers = True # + self.InnerLayerIndices = [0,1] # - if "InclBrl" in self.PixelBarrelLayout(): - self.splitBarrelLayers = True - self.InnerLayerIndices = [0,1] - from InDetSLHC_Example.SLHC_JobProperties import SLHC_Flags - if (SLHC_Flags.LayoutOption == "InclinedQuads"): - self.splitBarrelLayers = False + if "InclBrl" in self.PixelBarrelLayout():# + self.splitBarrelLayers = True # + self.InnerLayerIndices = [0,1] # + from InDetSLHC_Example.SLHC_JobProperties import SLHC_Flags# + if (SLHC_Flags.LayoutOption == "InclinedQuads"): # + self.splitBarrelLayers = False # + if (SLHC_Flags.LayoutOption == "InclinedAlternative"): # + self.InnerDiskIndices = [0,29] # - self.Initialized = True - self.readXMLfromDB = False + self.Initialized = True # + self.readXMLfromDB = False # if kwargs.has_key("readXMLfromDB"): self.readXMLfromDB = kwargs["readXMLfromDB"] def dump(self): @@ -124,6 +129,7 @@ class XMLReaderFlags_JobProperties(JobPropertyContainer): print "splitBarrel : ", self.splitBarrelLayers() print "isRingLayout : ", self.isRingLayout() print "InnerLayer : ", self.InnerLayerIndices() + print "InnerDisk : ", self.InnerDiskIndices() print "DB-CLOB : ", self.readXMLfromDB() jobproperties.add_Container(XMLReaderFlags_JobProperties) @@ -139,6 +145,7 @@ jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(addBCL) jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(splitBarrelLayers) jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(isRingLayout) jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(InnerLayerIndices) +jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(InnerDiskIndices) jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(Initialized) jobproperties.XMLReaderFlags_JobProperties.add_JobProperty(readXMLfromDB) diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/BarrelBuilderXML.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/BarrelBuilderXML.cxx index 7279bd1d46f..877c5b84e84 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/BarrelBuilderXML.cxx +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/BarrelBuilderXML.cxx @@ -24,6 +24,12 @@ #include // Amg #include "GeoPrimitives/GeoPrimitives.h" +// +#include "TrkGeometry/HomogeneousLayerMaterial.h" +#include "TrkGeometry/MaterialProperties.h" +#include "TrkGeometry/MaterialLayer.h" +#include "InDetReadoutGeometry/SiDetectorElement.h" +#include "GeoModelInterfaces/IGeoModelSvc.h" namespace Trk { typedef std::pair< SharedObject, Amg::Vector3D > SurfaceOrderPosition; @@ -37,7 +43,8 @@ InDet::BarrelBuilderXML::BarrelBuilderXML(const std::string& t, const std::strin m_moduleProvider("InDet::SiModuleProvider/SiModuleProvider"), m_barrelLayerBinsZ(100), m_barrelLayerBinsPhi(1), - m_customMaterial(false) + m_customMaterial(false), + m_impMatDescription(false) { declareInterface(this); @@ -48,6 +55,7 @@ InDet::BarrelBuilderXML::BarrelBuilderXML(const std::string& t, const std::strin declareProperty("BarrelLayerBinsZ", m_barrelLayerBinsZ); declareProperty("BarrelLayerBinsPhi", m_barrelLayerBinsPhi); declareProperty("CustomMaterial", m_customMaterial); + declareProperty("ImpMatDescription", m_impMatDescription); } InDet::BarrelBuilderXML::~BarrelBuilderXML() @@ -65,6 +73,15 @@ StatusCode InDet::BarrelBuilderXML::initialize() return StatusCode::FAILURE; } + const IGeoModelSvc* geoModel=0; + StatusCode sc = service("GeoModelSvc", geoModel); + if(sc.isFailure()) return sc; + //Adding check to tell whether to run with the improved material description + //Only works on specific geoTags 19-00-03 (not yet added) and 20-00-03 + if( geoModel->atlasVersion() == "ATLAS-P2-ITK-20-00-03" ) { + ATH_MSG_INFO(geoModel->atlasVersion() << ": running with improved material description for the inclined region"); + m_impMatDescription = true; + } return StatusCode::SUCCESS; } @@ -395,6 +412,7 @@ Trk::CylinderLayer *InDet::BarrelBuilderXML::createActiveCylinderLayer(unsigned firstElementsInPhi = currentElements; prevElementsInPhi = currentElements; } else { +// std::cout << prevElementsInPhi setPhiNeighbors(prevElementsInPhi,currentElements); prevElementsInPhi = currentElements; } @@ -499,10 +517,8 @@ void InDet::BarrelBuilderXML::createCylinderBarrelModules(unsigned int ilayer, u Trk::TrkDetElementBase* elem = 0; Trk::TrkDetElementBase* prevElemInEta = 0; - // start loop over eta modules for (int iz = 0; iz < nmodules; iz++) { - ATH_MSG_DEBUG("Building module " << iz << " for stave " << istave); elem = (Trk::TrkDetElementBase*) CylinderDetElement(ilayer, staveTmp, istave+1, iz+1); if(elem==0) { @@ -511,7 +527,9 @@ void InDet::BarrelBuilderXML::createCylinderBarrelModules(unsigned int ilayer, u } // Set neighbors in eta - if(prevElemInEta) m_moduleProvider->setEtaNeighbours(elem,prevElemInEta); + if(prevElemInEta) { + m_moduleProvider->setEtaNeighbours(elem,prevElemInEta); + } cElements.push_back(elem); prevElemInEta = elem; @@ -654,6 +672,23 @@ Trk::BinnedArray* InDet::BarrelBuilderXML::getBinnedArray1D1D(Trk: for ( ; Elem_Iter != cElements.end(); Elem_Iter++) { const Trk::Surface* moduleSurface = &((*Elem_Iter)->surface()); + //Check if modules are inclined TODO: ADD BOOL to only do this check + //incase of hacked version... + if(m_impMatDescription && moduleSurface->normal().z() != 0.){ + const InDetDD::SiDetectorElement *detEle = dynamic_cast( *Elem_Iter ) ; + if(detEle) { + Amg::Vector3D versor(0.,0.,1.); + double length = detEle->length()*0.5*sin(fabs(acos(moduleSurface->normal().dot(versor)))); + double center = detEle->center().z(); + ATH_MSG_DEBUG("Binning --> " << center-length << "/" <setMaterialLayer(*materialLayer); + ATH_MSG_DEBUG("Surface with material layer... " << materialLayer->layerIndex().value()); + } + } + Amg::Vector3D orderPosition((*Elem_Iter)->center()); // register the module surface Trk::SharedObject sharedSurface(moduleSurface, true); @@ -666,7 +701,6 @@ Trk::BinnedArray* InDet::BarrelBuilderXML::getBinnedArray1D1D(Trk: << " z = " << moduleSurface->center().z() << " r = " << sqrt(pow(moduleSurface->center().x(),2)+pow(moduleSurface->center().y(),2))); } - // create 2D-dimensional BinnedArray Trk::BinnedArray* currentBinnedArray = new Trk::BinnedArray1D1D(surfaces,&steerBinUtility,&subBinUtility); ATH_MSG_DEBUG("Creating the binned array for the sensitive detector elements with SteerBinUtility :"); diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/EndcapBuilderXML.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/EndcapBuilderXML.cxx index 2df60554ccd..3e0f2b3e8b7 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/EndcapBuilderXML.cxx +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/EndcapBuilderXML.cxx @@ -93,6 +93,9 @@ void InDet::EndcapBuilderXML::createActiveLayers(unsigned int itmpl, int side, i // Check Layer type - if it's disc, build everything if(layerTmp->isDisc) { + int layer_pos = layerTmp->layer_pos; + if(layer_pos=0 && layer_pos>endLayer) return; createActiveDiscLayers(itmpl, side, v_layers); } else { // if it's rings, check if ring layer has to be built: @@ -164,9 +167,14 @@ void InDet::EndcapBuilderXML::createActiveLayers(unsigned int itmpl, int side, i float phiLowBound = 99999; float phiHighBound = -99999; for (unsigned int cEl = 0 ; cEl outerR or radius < innerR) + continue; + float centerphi = centersOnModule.at(cEl).phi(); if( centerphi < phiLowBound ) phiLowBound = centerphi; if( centerphi > phiHighBound ) phiHighBound = centerphi; +// std::cout << "--> testing: (phi,r) = (" << centersOnModule.at(cEl).phi() << ", " << radius << ") - min: " << phiLowBound << ", max = " << phiHighBound << std::endl; } double halfPhiStep = TMath::Pi()/nsectors; phiLowBound -= halfPhiStep; @@ -431,7 +439,7 @@ Trk::TrkDetElementBase* InDet::EndcapBuilderXML::createDiscDetElement(int itmpl, Identifier idwafer(0); IdentifierHash idhash(0); - + ATH_MSG_DEBUG("brl_ec= " << brl_ec << " disc = " << ilayer << " iphi= " << iphi << " ieta = " << ieta ); m_moduleProvider->setIdentifier(m_pixelCase,idwafer,idhash,brl_ec,ilayer,iphi,ieta,0); @@ -458,7 +466,9 @@ Trk::TrkDetElementBase* InDet::EndcapBuilderXML::createDiscDetElement(int itmpl, Trk::TrkDetElementBase* planElement = (Trk::TrkDetElementBase *) m_moduleProvider->getDetElement(idwafer,idhash, moduleTmp, centerOnModule, transform, m_pixelCase, isBarrel, isOuterMost, debug, useDisc, ring_rmin, ring_rmax, stereoO); - + + if (!planElement) ATH_MSG_WARNING("Inside createDiscDetElement() --> Null pointer for the Planar Detector Element."); + // std::cout << "1 - Module Id = " << brl_ec << " - " << ilayer << " - " << iphi << " - " << ieta << std::endl; // std::cout << "2 - Module Pos = " << planElement->surface().center().perp() << " - " << planElement->surface().center().z() << " - " << planElement->surface().center().phi() << std::endl; @@ -466,13 +476,13 @@ Trk::TrkDetElementBase* InDet::EndcapBuilderXML::createDiscDetElement(int itmpl, planElement->surface().center().perp()*sin(planElement->surface().center().phi()), planElement->surface().center().z()); -// std::cout << " --> Endcap Element: " << std::endl; -// std::cout << " --> brl_ec = " << brl_ec << " layer_disc = " << ilayer << " iphi = " << iphi << " ieta = " << ieta << " side = 0" << std::endl; -// std::cout << " --> Surface Center = " << planElement->surface().center() << std::endl; -// std::cout << " --> Surface Phi = " << planElement->surface().center().phi() << " Eta = "<< planElement->surface().center().eta() << std::endl; - - if (!planElement) ATH_MSG_WARNING("Inside createDiscDetElement() --> Null pointer for the Planar Detector Element."); +// std::cout << " --> Endcap Element: " << std::endl; +// std::cout << " --> brl_ec = " << brl_ec << " layer_disc = " << ilayer << " iphi = " << iphi << " ieta = " << ieta << " side = 0" << std::endl; +// std::cout << " --> Surface Center = " << planElement->surface().center() << std::endl; +// std::cout << " --> Surface Center = " << std::sqrt(std::pow(planElement->surface().center().x(),2)*std::pow(planElement->surface().center().y(),2))<< std::endl; +// std::cout << " --> Surface Phi = " << planElement->surface().center().phi() << " Eta = "<< planElement->surface().center().eta() << std::endl; + // Add outer stereo layer // each element points to the other face if(layerTmp->double_sided) { @@ -591,6 +601,10 @@ Trk::BinnedArray* InDet::EndcapBuilderXML::getBinnedArray1D1D(Trk: surfaces.push_back(surfaceOrder); ATH_MSG_DEBUG("Surface " << (*moduleSurface)); + ATH_MSG_DEBUG("phi = " << moduleSurface->center().phi() << " Eta = " << moduleSurface->center().eta() + << " z = " << moduleSurface->center().z() + << " r = " << sqrt(pow(moduleSurface->center().x(),2)+pow(moduleSurface->center().y(),2))); + //ATH_MSG_DEBUG("TransformHit = " << Amg::toString(Amg::CLHEPTransformToEigen((*Elem_Iter)->transformHit()))); ATH_MSG_DEBUG("phi = " << centersOnModule.at(cEl).phi() << " Eta = " << centersOnModule.at(cEl).eta() << " z = " << centersOnModule.at(cEl).z() diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/LayerProviderXML.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/LayerProviderXML.cxx index 24bee0f92c8..3549876290b 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/LayerProviderXML.cxx +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/LayerProviderXML.cxx @@ -25,6 +25,8 @@ InDet::LayerProviderXML::LayerProviderXML(const std::string& t, const std::strin m_doSCT(true), m_startLayer(0), m_endLayer(-1), + m_startEndcap(0), + m_endEndcap(-1), m_xmlReader("InDet::XMLReaderSvc/InDetXMLReaderSvc","InDetXMLReaderSvc"), m_pixBarrelBuilder("InDet::BarrelBuilderXML/PixelsBarrelBuilder"), m_sctBarrelBuilder("InDet::BarrelBuilderXML/SCTBarrelBuilder"), @@ -45,6 +47,8 @@ InDet::LayerProviderXML::LayerProviderXML(const std::string& t, const std::strin declareProperty("doSCT", m_doSCT); declareProperty("startLayer", m_startLayer); declareProperty("endLayer", m_endLayer); + declareProperty("startEndcap", m_startEndcap); + declareProperty("endEndcap", m_endEndcap); m_surfcoll = 0; m_SiSurface = 0; m_ndumpRZ = 0; @@ -261,7 +265,8 @@ void InDet::LayerProviderXML::createPixelEndcap(std::vector< const Trk::Layer* > for(unsigned int itmp=0;itmp layers; - m_pixEndcapBuilder->createActiveLayers(itmp,side,m_startLayer,m_endLayer,layers); + //m_pixEndcapBuilder->createActiveLayers(itmp,side,m_startEndcap,m_endEndcap,layers); + m_pixEndcapBuilder->createActiveLayers(itmp,side,m_startLayer,m_endLayer,layers); if(layers.size()==0) { if(m_startLayer==0 && m_endLayer==-1) ATH_MSG_WARNING("PixelEndcap Disc for active layer: " << itmp << " was not created"); continue; diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/StaveBuilderXML.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/StaveBuilderXML.cxx index 109dcc95405..fc7fbe8d561 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/StaveBuilderXML.cxx +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/StaveBuilderXML.cxx @@ -135,7 +135,8 @@ Trk::AlpineStave *InDet::StaveBuilderXML::createStave(InDet::StaveTmp *staveTmp, // Compute transform double dR = staveTmp->b_rshift; // module center translation w.r.t layer radius double xshift = 0.; // shift along x-axis - double zpos = zstart_plain+zstep*imod; + double zoffset = (iphi%2==0) ? 0.5*staveTmp->b_zoffset : -0.5*staveTmp->b_zoffset; + double zpos = zstart_plain+zstep*imod + zoffset; double tilt = ztiltstave + staveTmp->b_tilt; // tilt around z-axis double stereo = 0.; // stereo angle double rot = 0.; // module angle w.r.t stave plane - none on the central module z=0 @@ -338,10 +339,12 @@ Trk::AlpineStave *InDet::StaveBuilderXML::createStave(InDet::StaveTmp *staveTmp, << ilayer << " iphi = " << iphi << " phi = " << phi << " ieta = " << ieta ); // Transformation - double zpos = zoffsetstave - staveTmp->alp_pos[i] - Dz; + double zoffset = (iphi%2==0) ? 0.5*staveTmp->alp_zoffset : -0.5*staveTmp->alp_zoffset; + double zpos = zoffsetstave - staveTmp->alp_pos[i] - Dz + zoffset; double tilt = ztiltstave + staveTmp->alp_tilt ; // stave tilt around z-axis double rot = alpha; // module angle w.r.t stave plan - dR += staveTmp->alp_rshift; // module center translation w.r.t layer radius + double roffset = (iphi%2==0) ? 0.5*staveTmp->alp_roffset : -0.5*staveTmp->alp_roffset; + dR += staveTmp->alp_rshift + roffset; // module center translation w.r.t layer radius double stereo = 0.; // stereo angle double xshift = 0.; // shift along x-axis @@ -370,7 +373,7 @@ Trk::AlpineStave *InDet::StaveBuilderXML::createStave(InDet::StaveTmp *staveTmp, << ilayer << " iphi = " << iphi << " phi = " << phi << " ieta = " << ieta ); // Transformation - zpos = zoffsetstave + staveTmp->alp_pos[i] + Dz; + zpos = zoffsetstave + staveTmp->alp_pos[i] + Dz + zoffset; rot = -alpha; // module angle w.r.t stave plane transform = m_moduleProvider->getTransform(R,dR,xshift,zpos,tilt,stereo,rot,phi); diff --git a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/XMLReaderSvc.cxx b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/XMLReaderSvc.cxx index ed0ee27842a..89102fdcf58 100644 --- a/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/XMLReaderSvc.cxx +++ b/InnerDetector/InDetDetDescr/InDetTrackingGeometryXML/src/XMLReaderSvc.cxx @@ -1,7 +1,6 @@ -/* - XMLReaderSvc.cxx - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ +/////////////////////////////////////////////////////////////////// +// XMLReaderSvc.cxx, (c) ATLAS Detector software +/////////////////////////////////////////////////////////////////// #include "InDetTrackingGeometryXML/XMLReaderSvc.h" #include "TrkGeometry/LayerMaterialProperties.h" @@ -21,6 +20,7 @@ InDet::XMLReaderSvc::XMLReaderSvc(const std::string& name,ISvcLocator* svc) : m_xml_sctStaves("SCTStaves.xml"), m_xml_sctBarrelLayers("SCTBarrelLayers.xml"), m_xml_sctEndcapLayers("SCTEndcapLayers.xml"), + m_xml_SLHCVersion("SLHC"), m_doPix(true), m_doSCT(true), m_isGMX(false), @@ -37,6 +37,7 @@ InDet::XMLReaderSvc::XMLReaderSvc(const std::string& name,ISvcLocator* svc) : declareProperty("XML_SCTStaves", m_xml_sctStaves); declareProperty("XML_SCTBarrelLayers", m_xml_sctBarrelLayers); declareProperty("XML_SCTEndcapLayers", m_xml_sctEndcapLayers); + declareProperty("XML_SLHCVersion", m_xml_SLHCVersion); declareProperty("doPix", m_doPix); declareProperty("doSCT", m_doSCT); declareProperty("isGMX", m_isGMX); @@ -69,6 +70,11 @@ StatusCode InDet::XMLReaderSvc::initialize() return StatusCode::FAILURE; } else ATH_MSG_INFO("XML helper initialized"); + + // WARNING: read components BEFORE materials + ATH_MSG_INFO("Reading Material templates"); + parseFile(m_xml_materials.c_str(),"Materials","Component"); + parseFile(m_xml_materials.c_str(),"Materials","Material"); if(m_doPix) { // WARNING: read front-end chips BEFORE modules @@ -110,7 +116,7 @@ StatusCode InDet::XMLReaderSvc::initialize() if(m_createDict) { writeDictionary(m_dictionaryFileName); } - + return StatusCode::SUCCESS; } @@ -200,8 +206,7 @@ void InDet::XMLReaderSvc::parseMaterialXML(DOMNode* node) X0inv += fraction/comp->X0; L0inv += fraction/comp->L0; A += fraction*comp->A; - Z += fraction*comp->Z; - rho += fraction*comp->density; + Z += fraction*comp->Z; rho += fraction*comp->density; // note: approximation for X0 computation when data is missing // X0 = 716.4/[Z(Z+1).ln(287/sqrt(Z))] g.cm-3 @@ -342,6 +347,7 @@ void InDet::XMLReaderSvc::parseModuleXML(DOMNode* node) XMLCh* TAG_sensthickness = transcode("sensorThickness"); XMLCh* TAG_chipthickness = transcode("chipThickness"); XMLCh* TAG_hybdthickness = transcode("hybridThickness"); + XMLCh* TAG_sp3Dthickness = transcode("support3DThickness"); ModuleTmp *module = new ModuleTmp; @@ -364,6 +370,7 @@ void InDet::XMLReaderSvc::parseModuleXML(DOMNode* node) } else if( XMLString::equals(currentElement->getTagName(), TAG_chipthickness)) module->thickness += atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_hybdthickness)) module->thickness += atof(getString(currentNode)); + else if( XMLString::equals(currentElement->getTagName(), TAG_sp3Dthickness)) module->thickness += atof(getString(currentNode)); } // End of loop on module node elements if(module->chip_type.size()==0) return; @@ -402,6 +409,7 @@ void InDet::XMLReaderSvc::parseStaveXML(DOMNode* node, std::vector< InDet::Stave XMLCh* TAG_b_stereoO = transcode("BarrelModuleStereoAngleOuter"); XMLCh* TAG_b_stereoSep = transcode("BarrelModuleStereoSeparation"); XMLCh* TAG_b_rshift = transcode("BarrelModuleRShift"); + XMLCh* TAG_b_zoffset = transcode("BarrelModuleZOffset"); XMLCh* TAG_trans_tilt = transcode("TransitionModuleTilt"); XMLCh* TAG_trans_angle = transcode("TransitionModuleAngle"); XMLCh* TAG_trans_type = transcode("TransitionModuleType"); @@ -412,6 +420,8 @@ void InDet::XMLReaderSvc::parseStaveXML(DOMNode* node, std::vector< InDet::Stave XMLCh* TAG_alp_angle = transcode("MountainModuleAngle"); XMLCh* TAG_alp_type = transcode("MountainModuleType"); XMLCh* TAG_alp_rshift = transcode("MountainModuleRShift"); + XMLCh* TAG_alp_zoffset = transcode("MountainModuleZOffset"); + XMLCh* TAG_alp_roffset = transcode("MountainModuleROffset"); XMLCh* TAG_alp_radialTilt = transcode("MountainModuleRadialTilt"); XMLCh* TAG_material = transcode("StaveMaterial"); XMLCh* TAG_length = transcode("StaveSupportLength"); @@ -440,6 +450,7 @@ void InDet::XMLReaderSvc::parseStaveXML(DOMNode* node, std::vector< InDet::Stave else if( XMLString::equals(currentElement->getTagName(), TAG_b_stereoO)) stave->b_stereoO = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_b_stereoSep)) stave->b_stereoSep = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_b_rshift)) stave->b_rshift = atof(getString(currentNode)); + else if( XMLString::equals(currentElement->getTagName(), TAG_b_zoffset)) stave->b_zoffset = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_trans_tilt)) stave->trans_tilt = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_trans_angle)) stave->trans_angle = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_trans_type)) stave->trans_type = getString(currentNode); @@ -450,6 +461,8 @@ void InDet::XMLReaderSvc::parseStaveXML(DOMNode* node, std::vector< InDet::Stave else if( XMLString::equals(currentElement->getTagName(), TAG_alp_type)) stave->alp_type = getString(currentNode); else if( XMLString::equals(currentElement->getTagName(), TAG_alp_pos)) stave->alp_pos = getVectorDouble(currentNode); else if( XMLString::equals(currentElement->getTagName(), TAG_alp_rshift)) stave->alp_rshift = atof(getString(currentNode)); + else if( XMLString::equals(currentElement->getTagName(), TAG_alp_zoffset)) stave->alp_zoffset = atof(getString(currentNode)); + else if( XMLString::equals(currentElement->getTagName(), TAG_alp_roffset)) stave->alp_roffset = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_alp_radialTilt)) stave->alp_radialTilt = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_length)) stave->support_halflength = atof(getString(currentNode)); else if( XMLString::equals(currentElement->getTagName(), TAG_material)) stave->support_material = getString(currentNode); @@ -928,6 +941,7 @@ void InDet::XMLReaderSvc::writeDictionary(std::string filename) } openDictFile(file,filename); writePixBarrelDict(file); + if(m_xml_SLHCVersion == "SLHC_InclinedAlternative") writePixInnerEndcapDict(file); writePixEndcapDict(file); if (m_doSCT and !m_isGMX) { @@ -941,6 +955,9 @@ void InDet::XMLReaderSvc::writeDictionary(std::string filename) void InDet::XMLReaderSvc::openDictFile(std::ofstream& file,std::string filename) const { file.open(filename); + + std::string xmlvers_for_dictionary = m_xml_SLHCVersion; + file << "\n\ \n\ -\n\ +\n\ \n\