diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md index d8c4a70fe1a53..1285d15242412 100644 --- a/Configuration/Geometry/README.md +++ b/Configuration/Geometry/README.md @@ -29,6 +29,7 @@ Fast Timing system: * I9: Same as I7 but with ETL in the position defined in O3 * I10: Same as I9 w/ material adjustments * I11: Same as I10, xml reorganized, comparison base for new ETL and DD4hep migration +* I12: Starting from I11, new ETL layout from MTD TDR The script also handles the common and forward elements of the geometry: * O2: detailed cavern description @@ -50,5 +51,6 @@ Several detector combinations have been generated: * D50 = T15+C9+M4+I11+O4+F2 * D51 = T17+C9+M4+I10+O4+F2 * D52 = T18+C9+M4+I10+O4+F2 +* D53 = T15+C9+M4+I12+O4+F2 D35 is the MTD TDR baseline, D41 is the L1T TDR baseline, and D49 is the HLT TDR baseline. diff --git a/Configuration/Geometry/python/GeometryExtended2026D53Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D53Reco_cff.py new file mode 100644 index 0000000000000..7b1d819720a65 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D53Reco_cff.py @@ -0,0 +1,60 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Configuration.Geometry.GeometryExtended2026D53_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cfi import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = cms.bool(False) + +# calo +from Geometry.CaloEventSetup.HGCalV9Topology_cfi import * +from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import * +from Geometry.CaloEventSetup.CaloTopology_cfi import * +from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import * +CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder", + SelectedCalos = cms.vstring("HCAL", + "ZDC", + "EcalBarrel", + "TOWER", + "HGCalEESensitive", + "HGCalHESiliconSensitive", + "HGCalHEScintillatorSensitive" + ) +) +from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import * +from Geometry.HcalEventSetup.HcalGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import * +from Geometry.HcalEventSetup.CaloTowerTopology_cfi import * +from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import * +from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import * +from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import * +from Geometry.EcalMapping.EcalMapping_cfi import * +from Geometry.EcalMapping.EcalMappingRecord_cfi import * + +# muon +from Geometry.MuonNumbering.muonNumberingInitialization_cfi import * +from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import * +from Geometry.GEMGeometryBuilder.gemGeometry_cfi import * +from Geometry.GEMGeometryBuilder.me0Geometry_cfi import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ForwardGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cfi import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cfi import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = cms.bool(False) + diff --git a/Configuration/Geometry/python/GeometryExtended2026D53_cff.py b/Configuration/Geometry/python/GeometryExtended2026D53_cff.py new file mode 100644 index 0000000000000..55d08c00f8834 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D53_cff.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +from Geometry.CMSCommonData.cmsExtendedGeometry2026D53XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cfi import * +from SLHCUpgradeSimulations.Geometry.fakeConditions_phase2TkT14_cff import * +from Geometry.EcalCommonData.ecalSimulationParameters_cff import * +from Geometry.HcalCommonData.hcalDDDSimConstants_cff import * +from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import * +from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cfi import * diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index 5944c209d23de..1a41905995cff 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -1072,6 +1072,34 @@ ], "era" : "phase2_timing, phase2_timing_layer", }, + "I12" : { + 1 : [ + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/btl/v1/btlStructureTopology.xml', + 'Geometry/MTDCommonData/data/etl/v4/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v1/mtdParameters.xml', + ], + 3 : [ + 'Geometry/MTDSimData/data/v2/mtdsens.xml' + ], + 4 : [ + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml' + ], + "sim" : [ + 'from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cfi import *', + ], + "reco" :[ + 'from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *', + 'from Geometry.MTDGeometryBuilder.mtdParameters_cfi import *', + 'from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cfi import *', + 'from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *', + 'from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *', + 'from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *', + 'mtdGeometry.applyAlignment = cms.bool(False)' + ], + "era" : "phase2_timing, phase2_timing_layer", + }, } allDicts = [ commonDict, trackerDict, caloDict, muonDict, forwardDict, timingDict ] @@ -1089,6 +1117,7 @@ ("O4","T15","C9","M4","F2","I11") : "D50", ("O4","T17","C9","M4","F2","I10") : "D51", ("O4","T18","C9","M4","F2","I10") : "D52", + ("O4","T15","C9","M4","F2","I12") : "D53", } deprecatedDets = set([ "D1", "D2", "D3", "D5", "D6" , "D7", "D4", "D8" , "D9", "D12", "D13", "D15", "D10", "D11", "D14", "D16", "D17", "D18", "D19", "D20", "D21", "D22", "D23", "D24", "D25", "D26", "D27", "D28", "D29", "D30", "D31", "D32", "D33", "D34", "D36", "D37", "D38", "D39", "D40", "D42" ]) diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py index 20d4045c74edf..dfc495b0e2d6c 100644 --- a/Configuration/StandardSequences/python/GeometryConf.py +++ b/Configuration/StandardSequences/python/GeometryConf.py @@ -40,4 +40,5 @@ 'Extended2026D50' : 'Extended2026D50,Extended2026D50Reco', 'Extended2026D51' : 'Extended2026D51,Extended2026D51Reco', 'Extended2026D52' : 'Extended2026D52,Extended2026D52Reco', + 'Extended2026D53' : 'Extended2026D53,Extended2026D53Reco', } diff --git a/DataFormats/ForwardDetId/interface/ETLDetId.h b/DataFormats/ForwardDetId/interface/ETLDetId.h index a8bddce19c321..d61e0926b45db 100644 --- a/DataFormats/ForwardDetId/interface/ETLDetId.h +++ b/DataFormats/ForwardDetId/interface/ETLDetId.h @@ -15,10 +15,23 @@ class ETLDetId : public MTDDetId { public: static const uint32_t kETLmoduleOffset = 7; - static const uint32_t kETLmoduleMask = 0xFF; + static const uint32_t kETLmoduleMask = 0x1FF; static const uint32_t kETLmodTypeOffset = 5; static const uint32_t kETLmodTypeMask = 0x3; + static constexpr int kETLv1maxRing = 11; + static constexpr int kETLv1maxModule = 176; + + /// constants for the TDR ETL model + static const uint32_t kETLnDiscOffset = 3; + static const uint32_t kETLnDiscMask = 0x1; + static const uint32_t kETLdiscSideOffset = 2; + static const uint32_t kETLdiscSideMask = 0x1; + static const uint32_t kETLquarterMask = 0x3; + + static constexpr int kETLv2maxRing = 16; + static constexpr int kETLv2maxModule = 292; + // ---------- Constructors, enumerated types ---------- /** Construct a null id */ @@ -45,10 +58,26 @@ class ETLDetId : public MTDDetId { /** Returns ETL module number. */ inline int module() const { return (id_ >> kETLmoduleOffset) & kETLmoduleMask; } - /** Returns ETL crystal type number. */ + /** Returns ETL module type number. */ inline int modType() const { return (id_ >> kETLmodTypeOffset) & kETLmodTypeMask; } ETLDetId geographicalId() const; + + // --------- Methods for the TDR ETL model only ----------- + // meaningless for TP model + + // starting from 1 + inline int quarter() const { return ((((id_ >> kRodRingOffset) & kRodRingMask) - 1) & kETLquarterMask) + 1; } + + // 0 = front, 1 = back + inline int discSide() const { + return ((((id_ >> kRodRingOffset) & kRodRingMask) - 1) >> kETLdiscSideOffset) & kETLdiscSideMask; + } + + // starting from 1 + inline int nDisc() const { + return (((((id_ >> kRodRingOffset) & kRodRingMask) - 1) >> kETLnDiscOffset) & kETLnDiscMask) + 1; + } }; std::ostream& operator<<(std::ostream&, const ETLDetId&); diff --git a/DataFormats/ForwardDetId/src/ETLDetId.cc b/DataFormats/ForwardDetId/src/ETLDetId.cc index 366d1bd99be5a..24abbcf4d13a6 100644 --- a/DataFormats/ForwardDetId/src/ETLDetId.cc +++ b/DataFormats/ForwardDetId/src/ETLDetId.cc @@ -10,7 +10,8 @@ std::ostream& operator<<(std::ostream& os, const ETLDetId& id) { os << (MTDDetId&)id; os << " ETL " << std::endl << " Side : " << id.mtdSide() << std::endl - << " Ring : " << id.mtdRR() << std::endl + << " Ring : " << id.mtdRR() << " " + << " Disc/Side/Quarter = " << id.nDisc() << " " << id.discSide() << " " << id.quarter() << std::endl << " Module : " << id.module() << std::endl << " Module type : " << id.modType() << std::endl; return os; diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D53XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D53XML_cfi.py new file mode 100644 index 0000000000000..4d864ab1e5f2d --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D53XML_cfi.py @@ -0,0 +1,129 @@ +import FWCore.ParameterSet.Config as cms + +# This config was generated automatically using generate2026Geometry.py +# If you notice a mistake, please update the generating script, not just this config + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v1/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/CMSCommonData/data/cms/2026/v3/cms.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v2/caloBase.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v3/muonBase.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613_MB_2019_04/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613_MB_2019_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613_MB_2019_04/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613_MB_2019_04/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker613/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/TiltedTracker613_MB_2019_04/trackerRecoMaterial.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/TiltedTracker404/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v1/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/hcalRecNumbering.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v1/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v11/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v10/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v11/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v11/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v9/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v9/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v11/hgcalCons.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2021/v2/muonYoke.xml', + 'Geometry/MuonCommonData/data/csc/2021/v1/csc.xml', + 'Geometry/MuonCommonData/data/mfshield/2017/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/mf/2026/v2/mf.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v2/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Dev/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v1/mfshield.xml', + 'Geometry/MuonCommonData/data/me0/TDR_Dev/v2/me0.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2017/v1/forwardshield.xml', + 'Geometry/ForwardCommonData/data/brmrotations.xml', + 'Geometry/ForwardCommonData/data/PostLS2/brm.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/btl/v1/btlStructureTopology.xml', + 'Geometry/MTDCommonData/data/etl/v4/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v1/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv9.xml', + 'Geometry/MuonSimData/data/PhaseII/ME0EtaPart/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v7/GEMSpecs.xml', + 'Geometry/ForwardCommonData/data/brmsens.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv9.xml', + 'Geometry/MuonSimData/data/PhaseII/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtd-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml similarity index 100% rename from Geometry/MTDCommonData/data/dd4hep/cms-mtd-geometry.xml rename to Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml diff --git a/Geometry/MTDCommonData/data/dd4hep/cms-mtdD53-geometry.xml b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD53-geometry.xml new file mode 100644 index 0000000000000..50eafbfe2be44 --- /dev/null +++ b/Geometry/MTDCommonData/data/dd4hep/cms-mtdD53-geometry.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDCommonData/data/etl/v4/etl.xml b/Geometry/MTDCommonData/data/etl/v4/etl.xml new file mode 100644 index 0000000000000..21f9b38a62901 --- /dev/null +++ b/Geometry/MTDCommonData/data/etl/v4/etl.xml @@ -0,0 +1,2856 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -111.93*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+[DeltaX_ServiceModule])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+[DeltaX_ServiceModule])*cm, (13.1925+[DeltaY_ServiceLong_ServiceShort]+[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (-111.93+2*[DeltaX_ServiceModule])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+2*[DeltaX_ServiceModule]+[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+3*[DeltaX_ServiceModule]+[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+4*[DeltaX_ServiceModule]+[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+4*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+5*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+5*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, (13.1925+[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+2*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (-111.93+6*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+6*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+7*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+8*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+8*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+9*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 13.0925*cm, 0.*cm + + + + + + + + + + + + + + (-111.93+10*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+10*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+11*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+11*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+3*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (-111.93+12*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+12*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+13*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+13*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+3*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (-111.93+14*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+14*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+15*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+16*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+16*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+17*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-111.93+18*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+18*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, (2.2925+[SensorModuledy]+[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+19*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, (16.2+[SensorModuledy]+[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-111.93+20*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, (2.2925+4*[SensorModuledy]+4*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+20*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+21*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (13.1925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-111.93+22*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, ( 2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+22*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, ( 2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+23*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, (13.1925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-111.93+24*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, ( 2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+24*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, ( 2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (-111.93+25*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, (13.1925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-111.93+26*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, ( 2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + + + + -113.555*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+[DeltaX_ServiceModule])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+[DeltaX_ServiceModule]+[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+2*[DeltaX_ServiceModule]+[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+3*[DeltaX_ServiceModule]+[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+3*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+4*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+4*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, (13.1925+[ServiceHybrid_Y]+2*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+5*[DeltaX_ServiceModule]+2*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+5*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+6*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 13.0925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+7*[DeltaX_ServiceModule]+3*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+7*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+8*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+9*[DeltaX_ServiceModule]+4*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+9*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+10*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+10*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+11*[DeltaX_ServiceModule]+5*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+11*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+12*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+12*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+13*[DeltaX_ServiceModule]+6*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+13*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+14*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+15*[DeltaX_ServiceModule]+7*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+15*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+16*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+17*[DeltaX_ServiceModule]+8*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+17*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+18*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (-113.555+19*[DeltaX_ServiceModule]+9*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+19*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (2.2925+4*[SensorModuledy]+4*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+20*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (13.1925+4*[SensorModuledy]+4*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+20*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (13.1925+4*[SensorModuledy]+4*[DeltaY]+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+21*[DeltaX_ServiceModule]+10*[SensorModuledx])*cm, (2.2925+5*[SensorModuledy]+5*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+21*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, (2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+22*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, (13.1925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + + (-113.555+23*[DeltaX_ServiceModule]+11*[SensorModuledx])*cm, (2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+23*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, (2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+24*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, (13.1925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (-113.555+25*[DeltaX_ServiceModule]+12*[SensorModuledx])*cm, (2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+25*[DeltaX_ServiceModule]+13*[SensorModuledx])*cm, (2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (-113.555+26*[DeltaX_ServiceModule]+13*[SensorModuledx])*cm, (13.1925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + + + + 111.93*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-[DeltaX_ServiceModule])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-[DeltaX_ServiceModule])*cm, (13.1925+[DeltaY_ServiceLong_ServiceShort]+[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (111.93-2*[DeltaX_ServiceModule])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-2*[DeltaX_ServiceModule]-[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-3*[DeltaX_ServiceModule]-[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-4*[DeltaX_ServiceModule]-[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-4*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-5*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-5*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, (13.1925+[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+2*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (111.93-6*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-6*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-7*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-8*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-8*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-9*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 13.0925*cm, 0.*cm + + + + + + + + + + + + + + (111.93-10*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-10*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-11*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-11*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+3*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (111.93-12*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-12*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-13*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-13*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+[DeltaY_ServiceLong_ServiceShort]+3*[DeltaY])*cm, 0*cm + + + + + + + + + + + + + (111.93-14*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-14*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-15*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-16*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-16*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-17*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (111.93-18*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 2.2925*cm, 0.178*cm + + + + + + + + + + + + + (111.93-18*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, (2.2925+[SensorModuledy]+[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-19*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, (16.2+[SensorModuledy]+[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (111.93-20*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, (2.2925+4*[SensorModuledy]+4*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-20*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-21*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (13.1925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (111.93-22*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, ( 2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-22*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, ( 2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-23*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, (13.1925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (111.93-24*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, ( 2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-24*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, ( 2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + (111.93-25*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, (13.1925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (111.93-26*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, ( 2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.178*cm + + + + + + + + + + + + + + + + 113.555*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-[DeltaX_ServiceModule])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-[DeltaX_ServiceModule]-[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-2*[DeltaX_ServiceModule]-[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-3*[DeltaX_ServiceModule]-[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-3*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-4*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-4*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, (13.1925+[ServiceHybrid_Y]+2*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (113.555-5*[DeltaX_ServiceModule]-2*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-5*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-6*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 13.0925*cm, 0.*cm + + + + + + + + + + + + + (113.555-7*[DeltaX_ServiceModule]-3*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-7*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-8*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-9*[DeltaX_ServiceModule]-4*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-9*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-10*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-10*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (113.555-11*[DeltaX_ServiceModule]-5*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-11*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-12*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-12*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, (13.1925+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (113.555-13*[DeltaX_ServiceModule]-6*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-13*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-14*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-15*[DeltaX_ServiceModule]-7*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-15*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-16*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-17*[DeltaX_ServiceModule]-8*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-17*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-18*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, 13.1925*cm, 0.*cm + + + + + + + + + + + + + (113.555-19*[DeltaX_ServiceModule]-9*[SensorModuledx])*cm, 2.2925*cm, -0.178*cm + + + + + + + + + + + + + (113.555-19*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (2.2925+4*[SensorModuledy]+4*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-20*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (13.1925+4*[SensorModuledy]+4*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (113.555-20*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (13.1925+4*[SensorModuledy]+4*[DeltaY]+2*[ServiceHybrid_Y]+3*[DeltaY]+[DeltaY_ServiceLong_ServiceShort])*cm, 0.*cm + + + + + + + + + + + + + (113.555-21*[DeltaX_ServiceModule]-10*[SensorModuledx])*cm, (2.2925+5*[SensorModuledy]+5*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-21*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, (2.2925+6*[SensorModuledy]+6*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-22*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, (13.1925+6*[SensorModuledy]+6*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + + (113.555-23*[DeltaX_ServiceModule]-11*[SensorModuledx])*cm, (2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-23*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, (2.2925+7*[SensorModuledy]+7*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-24*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, (13.1925+7*[SensorModuledy]+7*[DeltaY])*cm, 0.*cm + + + + + + + + + + + + + (113.555-25*[DeltaX_ServiceModule]-12*[SensorModuledx])*cm, (2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-25*[DeltaX_ServiceModule]-13*[SensorModuledx])*cm, (2.2925+8*[SensorModuledy]+8*[DeltaY])*cm, -0.178*cm + + + + + + + + + + + + + (113.555-26*[DeltaX_ServiceModule]-13*[SensorModuledx])*cm, (13.1925+8*[SensorModuledy]+8*[DeltaY])*cm, 0.*cm + + + + + + + + + diff --git a/Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml b/Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml new file mode 100644 index 0000000000000..29416f4aae673 --- /dev/null +++ b/Geometry/MTDCommonData/data/mtdMaterial/v2/mtdMaterial.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDCommonData/plugins/BuildFile.xml b/Geometry/MTDCommonData/plugins/BuildFile.xml new file mode 100644 index 0000000000000..68c97743eca7b --- /dev/null +++ b/Geometry/MTDCommonData/plugins/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Geometry/MTDCommonData/plugins/DDMTDLinear.cc b/Geometry/MTDCommonData/plugins/DDMTDLinear.cc new file mode 100644 index 0000000000000..ee8774745bf7e --- /dev/null +++ b/Geometry/MTDCommonData/plugins/DDMTDLinear.cc @@ -0,0 +1,116 @@ +#include "DetectorDescription/Core/interface/DDAlgorithm.h" +#include "DetectorDescription/Core/interface/DDAlgorithmFactory.h" +#include "DetectorDescription/Core/interface/DDCompactView.h" +#include "DetectorDescription/Core/interface/DDCurrentNamespace.h" +#include "DetectorDescription/Core/interface/DDLogicalPart.h" +#include "DetectorDescription/Core/interface/DDName.h" +#include "DetectorDescription/Core/interface/DDRotationMatrix.h" +#include "DetectorDescription/Core/interface/DDSplit.h" +#include "DetectorDescription/Core/interface/DDTransform.h" +#include "DetectorDescription/Core/interface/DDTranslation.h" +#include "DetectorDescription/Core/interface/DDTypes.h" +#include "DataFormats/Math/interface/GeantUnits.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/PluginManager/interface/PluginFactory.h" + +#include +#include + +using namespace geant_units::operators; +using namespace angle_units::operators; + +class DDMTDLinear : public DDAlgorithm { +public: + DDMTDLinear() + : m_n(1), m_startCopyNo(1), m_incrCopyNo(1), m_theta(0.), m_phi(0.), m_delta(0.), m_phi_obj(0.), m_theta_obj(0.) {} + + void initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments& mArgs, + const DDStringArguments& sArgs, + const DDStringVectorArguments& vsArgs) override; + + void execute(DDCompactView& cpv) override; + +private: + int m_n; //Number of copies + int m_startCopyNo; //Start Copy number + int m_incrCopyNo; //Increment in Copy number + double m_theta; //Theta + double m_phi; //Phi dir[Theta,Phi] ... unit-std::vector in direction Theta, Phi + double m_delta; //Delta - distance between two subsequent positions along dir[Theta,Phi] + double m_phi_obj; //Phi angle to rotate volumes (indipendent from m_phi traslation direction) + double m_theta_obj; //Theta angle to rotate volumes + std::vector m_base; //Base values - a 3d-point where the offset is calculated from + //base is optional, if omitted base=(0,0,0) + std::pair m_childNmNs; //Child name + //Namespace of the child +}; + +void DDMTDLinear::initialize(const DDNumericArguments& nArgs, + const DDVectorArguments& vArgs, + const DDMapArguments&, + const DDStringArguments& sArgs, + const DDStringVectorArguments&) { + m_n = int(nArgs["N"]); + m_startCopyNo = int(nArgs["StartCopyNo"]); + m_incrCopyNo = int(nArgs["IncrCopyNo"]); + m_theta = nArgs["Theta"]; + m_phi = nArgs["Phi"]; + m_delta = nArgs["Delta"]; + m_base = vArgs["Base"]; + m_phi_obj = nArgs["Phi_obj"]; + m_theta_obj = nArgs["Theta_obj"]; + + LogDebug("DDAlgorithm") << "DDMTDLinear: Parameters for position" + << "ing:: n " << m_n << " Direction Theta, Phi, Offset, Delta " << convertRadToDeg(m_theta) + << " " << convertRadToDeg(m_phi) << " " + << " " << convertRadToDeg(m_delta) << " Base " << m_base[0] << ", " << m_base[1] << ", " + << m_base[2] << "Objects placement Phi_obj, Theta_obj " << convertRadToDeg(m_phi_obj) << " " + << convertRadToDeg(m_theta_obj); + + m_childNmNs = DDSplit(sArgs["ChildName"]); + if (m_childNmNs.second.empty()) + m_childNmNs.second = DDCurrentNamespace::ns(); + + DDName parentName = parent().name(); + LogDebug("DDAlgorithm") << "DDMTDLinear: Parent " << parentName << "\tChild " << m_childNmNs.first << " NameSpace " + << m_childNmNs.second; +} + +void DDMTDLinear::execute(DDCompactView& cpv) { + DDName mother = parent().name(); + DDName ddname(m_childNmNs.first, m_childNmNs.second); + int copy = m_startCopyNo; + + DDTranslation direction(sin(m_theta) * cos(m_phi), sin(m_theta) * sin(m_phi), cos(m_theta)); + + DDTranslation basetr(m_base[0], m_base[1], m_base[2]); + + //rotation is in xy plane + double thetaZ = m_theta_obj - 0.5_pi; + double phiZ = m_phi_obj; + double thetaX = m_theta_obj; + double thetaY = m_theta_obj; + double phiX = m_phi_obj; + double phiY = m_phi_obj + 0.5_pi; + + DDRotation rotation = DDRotation("Rotation"); + + if (!rotation) { + LogDebug("DDAlgorithm") << "DDMTDLinear: Creating a new " + << "rotation for " << ddname; + + rotation = DDrot("Rotation", DDcreateRotationMatrix(thetaX, phiX, thetaY, phiY, thetaZ, phiZ)); + } + + for (int i = 0; i < m_n; ++i) { + DDTranslation tran = basetr + (double(i) * m_delta) * direction; + cpv.position(ddname, mother, copy, tran, rotation); + LogDebug("DDAlgorithm") << "DDMTDLinear: " << m_childNmNs.second << ":" << m_childNmNs.first << " number " << copy + << " positioned in " << mother << " at " << tran << " with " << rotation; + copy += m_incrCopyNo; + } +} + +DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDMTDLinear, "mtd:DDMTDLinear"); diff --git a/Geometry/MTDCommonData/src/ETLNumberingScheme.cc b/Geometry/MTDCommonData/src/ETLNumberingScheme.cc index 9f6c163ff1c4f..c0c4efb16e7f1 100644 --- a/Geometry/MTDCommonData/src/ETLNumberingScheme.cc +++ b/Geometry/MTDCommonData/src/ETLNumberingScheme.cc @@ -3,7 +3,7 @@ #include -//#define EDM_ML_DEBUG +#define EDM_ML_DEBUG ETLNumberingScheme::ETLNumberingScheme() : MTDNumberingScheme() { #ifdef EDM_ML_DEBUG @@ -30,12 +30,27 @@ uint32_t ETLNumberingScheme::getUnitID(const MTDBaseNumber& baseNumber) const { return 0; } + // Discriminate pre-TDR and TDR scenarios + + const bool preTDR = (baseNumber.getLevelName(3).find("Ring") != std::string::npos); + const uint32_t modCopy(baseNumber.getCopyNumber(2)); const std::string& ringName(baseNumber.getLevelName(3)); // name of ring volume - const int modtyp(0); + int modtyp(0); std::string baseName = ringName.substr(ringName.find(":") + 1); - const int ringCopy(::atoi(baseName.c_str() + 4)); + int ringCopy(::atoi(baseName.c_str() + 4)); + + if (!preTDR) { + uint32_t discN = (baseNumber.getLevelName(4).find("Disk1") != std::string::npos) ? 0 : 1; + uint32_t quarterS = (baseNumber.getLevelName(3).find("Front") != std::string::npos) ? 0 : 1; + uint32_t quarterN = baseNumber.getCopyNumber(3); + const uint32_t quarterOffset = 4; + + ringCopy = quarterN + quarterS * quarterOffset + 2 * quarterOffset * discN; + + modtyp = (baseNumber.getLevelName(2).find("_2") != std::string::npos) ? 2 : 1; + } // Side choice: up to scenario D38 is given by level 7 (HGCal v9) int nSide(7); @@ -58,21 +73,23 @@ uint32_t ETLNumberingScheme::getUnitID(const MTDBaseNumber& baseNumber) const { // error checking - if (modtyp != 0) { + if ((modtyp != 0 && preTDR) || (modtyp == 0 && !preTDR)) { edm::LogWarning("MTDGeom") << "ETLNumberingScheme::getUnitID(): " << "****************** Bad module name = " << modtyp << ", Volume Name = " << baseNumber.getLevelName(4); return 0; } - if (1 > modCopy || 176 < modCopy) { + if ((preTDR && (1 > modCopy || ETLDetId::kETLv1maxModule < modCopy)) || + (!preTDR && (1 > modCopy || ETLDetId::kETLv2maxModule < modCopy))) { edm::LogWarning("MTDGeom") << "ETLNumberingScheme::getUnitID(): " << "****************** Bad module copy = " << modCopy << ", Volume Number = " << baseNumber.getCopyNumber(4); return 0; } - if (1 > ringCopy || 11 < ringCopy) { + if ((preTDR && (1 > ringCopy || ETLDetId::kETLv1maxRing < ringCopy)) || + (!preTDR && (1 > ringCopy || ETLDetId::kETLv2maxRing < ringCopy))) { edm::LogWarning("MTDGeom") << "ETLNumberingScheme::getUnitID(): " << "****************** Bad ring copy = " << ringCopy << ", Volume Number = " << baseNumber.getCopyNumber(3); diff --git a/Geometry/MTDCommonData/test/testMTDinDD4hep.py b/Geometry/MTDCommonData/test/testMTDinDD4hep.py index b6c4e3c7c721b..23bb6c4da17f4 100644 --- a/Geometry/MTDCommonData/test/testMTDinDD4hep.py +++ b/Geometry/MTDCommonData/test/testMTDinDD4hep.py @@ -8,7 +8,7 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtd-geometry.xml'), + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), appendToDataLabel = cms.string('MTD') ) diff --git a/Geometry/MTDGeometryBuilder/test/python/testMTDGeometry.py b/Geometry/MTDGeometryBuilder/test/python/testMTDGeometry.py index 898c88f28c3da..b9e7b4ddb28b4 100644 --- a/Geometry/MTDGeometryBuilder/test/python/testMTDGeometry.py +++ b/Geometry/MTDGeometryBuilder/test/python/testMTDGeometry.py @@ -39,7 +39,7 @@ ) process.DDDetectorESProducer = cms.ESSource("DDDetectorESProducer", - confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtd-geometry.xml'), + confGeomXMLFiles = cms.FileInPath('Geometry/MTDCommonData/data/dd4hep/cms-mtdD50-geometry.xml'), appendToDataLabel = cms.string('MTD') ) diff --git a/Geometry/MTDSimData/data/v2/mtdProdCuts.xml b/Geometry/MTDSimData/data/v2/mtdProdCuts.xml new file mode 100644 index 0000000000000..2f81b2c6da5d3 --- /dev/null +++ b/Geometry/MTDSimData/data/v2/mtdProdCuts.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDSimData/data/v2/mtdsens.xml b/Geometry/MTDSimData/data/v2/mtdsens.xml new file mode 100644 index 0000000000000..3cb2a2f8291c9 --- /dev/null +++ b/Geometry/MTDSimData/data/v2/mtdsens.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + +