From eab00f88d2e4f867ff0df6814609a0e29a7fadec Mon Sep 17 00:00:00 2001 From: Ruben Lopez Ruiz <24.lopezr@gmail.com> Date: Thu, 14 Sep 2023 09:38:11 +0200 Subject: [PATCH 1/3] ETL Geometry v8 --- Configuration/Geometry/README.md | 3 +- .../GeometryDD4hepExtended2026D105Reco_cff.py | 59 + .../GeometryDD4hepExtended2026D105_cff.py | 17 + .../GeometryExtended2026D105Reco_cff.py | 59 + .../python/GeometryExtended2026D105_cff.py | 15 + .../Geometry/python/dict2026Geometry.py | 29 + .../python/upgradeWorkflowComponents.py | 12 + .../StandardSequences/python/GeometryConf.py | 2 + DataFormats/ForwardDetId/interface/ETLDetId.h | 33 +- DataFormats/ForwardDetId/src/ETLDetId.cc | 3 +- .../dd4hep/cmsExtendedGeometry2026D105.xml | 124 + .../cmsExtendedGeometry2026D105XML_cfi.py | 128 + Geometry/MTDCommonData/data/etl/v8/etl.xml | 4072 +++++++++++++++++ .../data/mtdParameters/v5/mtdParameters.xml | 16 + .../mtdParameters/v5/mtdStructureTopology.xml | 34 + .../MTDCommonData/interface/MTDTopologyMode.h | 11 +- .../MTDCommonData/src/ETLNumberingScheme.cc | 46 +- Geometry/MTDCommonData/src/MTDTopologyMode.cc | 2 + .../src/MTDParametersFromDD.cc | 6 +- .../plugins/CmsMTDConstruction.cc | 7 +- .../plugins/CmsMTDConstruction.h | 1 + .../plugins/DDCmsMTDConstruction.cc | 26 +- .../src/CmsMTDStringToEnum.cc | 5 +- .../MTDNumberingBuilder/src/MTDTopology.cc | 39 +- Geometry/MTDSimData/data/v5/mtdProdCuts.xml | 45 + Geometry/MTDSimData/data/v5/mtdsens.xml | 22 + .../src/ETLDetLayerGeometryBuilder.cc | 2 + RecoMTD/DetLayers/src/MTDDetLayerGeometry.cc | 4 +- .../FastTimingCommon/src/ETLDeviceSim.cc | 2 +- 29 files changed, 4785 insertions(+), 39 deletions(-) create mode 100644 Configuration/Geometry/python/GeometryDD4hepExtended2026D105Reco_cff.py create mode 100644 Configuration/Geometry/python/GeometryDD4hepExtended2026D105_cff.py create mode 100644 Configuration/Geometry/python/GeometryExtended2026D105Reco_cff.py create mode 100644 Configuration/Geometry/python/GeometryExtended2026D105_cff.py create mode 100644 Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D105.xml create mode 100644 Geometry/CMSCommonData/python/cmsExtendedGeometry2026D105XML_cfi.py create mode 100644 Geometry/MTDCommonData/data/etl/v8/etl.xml create mode 100644 Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml create mode 100644 Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml create mode 100644 Geometry/MTDSimData/data/v5/mtdProdCuts.xml create mode 100644 Geometry/MTDSimData/data/v5/mtdsens.xml diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md index 5a03ee30622ac..c299a92059323 100644 --- a/Configuration/Geometry/README.md +++ b/Configuration/Geometry/README.md @@ -111,6 +111,7 @@ Fast Timing system: * I14: Same as I13, updated sensor structure, disc z location and passive materials * I15: Same as I14, addition of notch and revision of envelope * I16: Starting from I15, revised BTL with complete passive material description, it needs Tracker T31 or newer +* I17: Same as I16, ETL v8 added, BTL with one crystal thickness (type) only The script also handles the common and forward elements of the geometry: * O4: detailed cavern description, changes for modified CALO region for endcap part, no overlaps inside the Muon System @@ -145,4 +146,4 @@ Several detector combinations have been generated: * D102 = T35+C17+M11+I16+O9+F8 * D103 = T34+C21+M11+I16+O9+F8 * D104 = T35+C22+M11+I16+O9+F8 - +* D105 = T32+C18+M10+I17+O9+F8 diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D105Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D105Reco_cff.py new file mode 100644 index 0000000000000..b8378ca30614b --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D105Reco_cff.py @@ -0,0 +1,59 @@ +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.GeometryDD4hepExtended2026D105_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = True + +# calo +from Geometry.CaloEventSetup.HGCalTopology_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_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ZdcGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = False + diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D105_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D105_cff.py new file mode 100644 index 0000000000000..6a59004b7209b --- /dev/null +++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D105_cff.py @@ -0,0 +1,17 @@ +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.GeometryDD4hep_cff import * +DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D105.xml") + +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_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.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/GeometryExtended2026D105Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D105Reco_cff.py new file mode 100644 index 0000000000000..4b2725ec2be78 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D105Reco_cff.py @@ -0,0 +1,59 @@ +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.GeometryExtended2026D105_cff import * + +# tracker +from Geometry.CommonTopologies.globalTrackingGeometry_cfi import * +from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import * +from Geometry.TrackerGeometryBuilder.trackerParameters_cff import * +from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import * +from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import * +trackerGeometry.applyAlignment = True + +# calo +from Geometry.CaloEventSetup.HGCalTopology_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_cff import * +from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import * +from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import * + +# forward +from Geometry.ForwardGeometry.ZdcGeometry_cfi import * + +# timing +from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import * +from Geometry.MTDGeometryBuilder.mtdParameters_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * +from Geometry.MTDNumberingBuilder.mtdTopology_cfi import * +from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import * +from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import * +mtdGeometry.applyAlignment = False + diff --git a/Configuration/Geometry/python/GeometryExtended2026D105_cff.py b/Configuration/Geometry/python/GeometryExtended2026D105_cff.py new file mode 100644 index 0000000000000..ec9939d2a8250 --- /dev/null +++ b/Configuration/Geometry/python/GeometryExtended2026D105_cff.py @@ -0,0 +1,15 @@ +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.cmsExtendedGeometry2026D105XML_cfi import * +from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import * +from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_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.MuonNumbering.muonGeometryConstants_cff import * +from Geometry.MuonNumbering.muonOffsetESProducer_cff import * +from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import * diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index 8aed8994859d3..47f87d45aa57b 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -1030,6 +1030,34 @@ ], "era" : "phase2_timing, phase2_timing_layer, phase2_etlV4", }, + "I17" : { + 1 : [ + 'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v2/btl.xml', + 'Geometry/MTDCommonData/data/etl/v8/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml', + ], + 3 : [ + 'Geometry/MTDSimData/data/v5/mtdsens.xml' + ], + 4 : [ + 'Geometry/MTDSimData/data/v5/mtdProdCuts.xml' + ], + "sim" : [ + 'from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *', + ], + "reco" :[ + 'from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *', + 'from Geometry.MTDGeometryBuilder.mtdParameters_cff import *', + 'from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *', + 'from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *', + 'from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *', + 'from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *', + 'mtdGeometry.applyAlignment = False' + ], + "era" : "phase2_timing, phase2_timing_layer, phase2_etlV4", + }, } allDicts = [ commonDict, trackerDict, caloDict, muonDict, forwardDict, timingDict ] @@ -1051,6 +1079,7 @@ ("O9","T35","C17","M11","F8","I16") : "D102", ("O9","T34","C21","M11","F8","I16") : "D103", ("O9","T35","C22","M11","F8","I16") : "D104", + ("O9","T32","C18","M10","F8","I17") : "D105", } 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", "D35", "D41", "D43", "D44", "D45", "D46", "D48", "D47", "D50", "D51", "D52", "D53", "D54", "D55", "D56", "D57", "D58", "D59", "D61", "D62", "D63", "D64", "D65", "D66", "D67", "D69", "D71", "D72", "D73", "D74", "D75", "D78", "D79", "D87", "D89", "D90", "D49", "D60", "D68", "D70", "D76", "D77", "D80", "D81", "D82", "D83", "D84", "D85"]) diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 783967ba3c456..ce1a81e0be489 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -71,6 +71,8 @@ '2026D103PU', '2026D104', '2026D104PU', + '2026D105', + '2026D105PU', ] # pre-generation of WF numbers @@ -2823,6 +2825,16 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Era' : 'Phase2C17I13M9', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], }, +<<<<<<< HEAD +======= + '2026D105' : { + 'Geom' : 'Extended2026D104', + 'HLTmenu': '@relval2026', + 'GT' : 'auto:phase2_realistic_T25', + 'Era' : 'Phase2C17I13M9', + 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], + }, +>>>>>>> 5bd8a0ba0d1 (ETL Geometry v8) } # standard PU sequences diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py index 1f7a48dcb6797..4cab55281885c 100644 --- a/Configuration/StandardSequences/python/GeometryConf.py +++ b/Configuration/StandardSequences/python/GeometryConf.py @@ -93,4 +93,6 @@ 'DD4hepExtended2026D103' : 'DD4hepExtended2026D103,DD4hepExtended2026D103Reco', 'Extended2026D104' : 'Extended2026D104,Extended2026D104Reco', 'DD4hepExtended2026D104' : 'DD4hepExtended2026D104,DD4hepExtended2026D104Reco', + 'Extended2026D105' : 'Extended2026D105,Extended2026D105Reco', + 'DD4hepExtended2026D105' : 'DD4hepExtended2026D105,DD4hepExtended2026D105Reco', } diff --git a/DataFormats/ForwardDetId/interface/ETLDetId.h b/DataFormats/ForwardDetId/interface/ETLDetId.h index 4c7ff33e2a505..5e1f508e0bdcd 100644 --- a/DataFormats/ForwardDetId/interface/ETLDetId.h +++ b/DataFormats/ForwardDetId/interface/ETLDetId.h @@ -10,6 +10,7 @@ bit 15-5 : module sequential number bit 4-3 : module type (unused so far) + bit 2-1 : sensor */ class ETLDetId : public MTDDetId { @@ -24,6 +25,8 @@ class ETLDetId : public MTDDetId { static constexpr uint32_t kETLmoduleMask = 0x7FF; static constexpr uint32_t kETLmodTypeOffset = 3; static constexpr uint32_t kETLmodTypeMask = 0x3; + static constexpr uint32_t kETLsensorOffset = 1; + static constexpr uint32_t kETLsensorMask = 0x3; static constexpr int kETLv1maxRing = 11; static constexpr int kETLv1maxModule = 176; @@ -48,7 +51,7 @@ class ETLDetId : public MTDDetId { static constexpr uint32_t kSoff = 4; - enum class EtlLayout { tp = 1, v4 = 2, v5 = 3 }; + enum class EtlLayout { tp = 1, v4 = 2, v5 = 3, v8 = 4 }; // ---------- Constructors, enumerated types ---------- @@ -77,6 +80,7 @@ class ETLDetId : public MTDDetId { } /** Construct and fill only the det and sub-det fields. */ + // pre v8 ETLDetId(uint32_t zside, uint32_t ring, uint32_t module, uint32_t modtyp) : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) { id_ |= (MTDType::ETL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset | @@ -84,6 +88,14 @@ class ETLDetId : public MTDDetId { (modtyp & kETLmodTypeMask) << kETLmodTypeOffset; id_ |= kETLformatV2; } + // v8 + ETLDetId(uint32_t zside, uint32_t ring, uint32_t module, uint32_t modtyp, uint32_t sensor) + : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) { + id_ |= (MTDType::ETL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset | + (ring & kRodRingMask) << kRodRingOffset | (module & kETLmoduleMask) << kETLmoduleOffset | + (modtyp & kETLmodTypeMask) << kETLmodTypeOffset | (sensor & kETLsensorMask) << kETLsensorOffset; + id_ |= kETLformatV2; + } /** ETL TDR Construct and fill only the det and sub-det fields. */ @@ -91,6 +103,7 @@ class ETLDetId : public MTDDetId { return (sector + discside * kSoff + 2 * kSoff * disc); } + // pre v8 ETLDetId(uint32_t zside, uint32_t disc, uint32_t discside, uint32_t sector, uint32_t module, uint32_t modtyp) : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) { id_ |= (MTDType::ETL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset | @@ -98,6 +111,21 @@ class ETLDetId : public MTDDetId { (module & kETLmoduleMask) << kETLmoduleOffset | (modtyp & kETLmodTypeMask) << kETLmodTypeOffset; id_ |= kETLformatV2; } + // v8 + ETLDetId(uint32_t zside, + uint32_t disc, + uint32_t discside, + uint32_t sector, + uint32_t module, + uint32_t modtyp, + uint32_t sensor) + : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) { + id_ |= (MTDType::ETL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset | + (encodeSector(disc, discside, sector) & kRodRingMask) << kRodRingOffset | + (module & kETLmoduleMask) << kETLmoduleOffset | (modtyp & kETLmodTypeMask) << kETLmodTypeOffset | + (sensor & kETLsensorMask) << kETLsensorOffset; + id_ |= kETLformatV2; + } // ---------- Common methods ---------- @@ -107,6 +135,9 @@ class ETLDetId : public MTDDetId { /** Returns ETL module type number. */ inline int modType() const { return (id_ >> kETLmodTypeOffset) & kETLmodTypeMask; } + /** Returns ETL module sensor number. */ + inline int sensor() const { return (id_ >> kETLsensorOffset) & kETLsensorMask; } + ETLDetId geographicalId() const { return id_; } // --------- Methods for the TDR ETL model only ----------- diff --git a/DataFormats/ForwardDetId/src/ETLDetId.cc b/DataFormats/ForwardDetId/src/ETLDetId.cc index 18030360a8b73..e0ce3d86b0ecb 100644 --- a/DataFormats/ForwardDetId/src/ETLDetId.cc +++ b/DataFormats/ForwardDetId/src/ETLDetId.cc @@ -8,6 +8,7 @@ std::ostream& operator<<(std::ostream& os, const ETLDetId& id) { << " Ring : " << id.mtdRR() << " " << " Disc/Side/Sector = " << id.nDisc() << " " << id.discSide() << " " << id.sector() << std::endl << " Module : " << id.module() << std::endl - << " Module type : " << id.modType() << std::endl; + << " Module type : " << id.modType() << std::endl + << " Sensor : " << id.sensor() << std::endl; return os; } diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D105.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D105.xml new file mode 100644 index 0000000000000..c580b6bdd2a41 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D105.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D105XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D105XML_cfi.py new file mode 100644 index 0000000000000..4e6187394d0a7 --- /dev/null +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D105XML_cfi.py @@ -0,0 +1,128 @@ +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/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v7/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/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/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v2/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/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/v2/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon/2021/v1/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/v2/hcalRecNumbering.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v17/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalcell/v17/hgcalcell.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v17/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v17/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v17/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v17/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v17/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v17/hgcalConsData.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/2026/v3/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v8/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml', + 'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2026/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v2/btl.xml', + 'Geometry/MTDCommonData/data/etl/v8/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv15.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v5/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv15.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v5/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/MTDCommonData/data/etl/v8/etl.xml b/Geometry/MTDCommonData/data/etl/v8/etl.xml new file mode 100644 index 0000000000000..96f27ac18c585 --- /dev/null +++ b/Geometry/MTDCommonData/data/etl/v8/etl.xml @@ -0,0 +1,4072 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1, 13, 35, 65, 99, 137, 179, 223, 271, 321, 371, 413, 453, 493, 531, + 569, 609, 649, 697, 747, 795, 841, 885, 925, 961, 993, 1019, 1033 + + + + 1, 15, 41, 73, 109, 149, 193, 239, 287, 337, 385, 425, 465, 503, 541, + 581, 621, 663, 713, 763, 811, 855, 897, 935, 969, 999, 1021, 1033 + + + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 12, 14, 16, 16, 14, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 12, 14, 16, 16, 14, 12, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + + + 1, 19, 45, 77, 113, 153, 197, 243, 291, 341, 387, 427, 467, 507, 545, + 585, 625, 669, 719, 767, 813, 859, 901, 939, 973, 1001, 1021, 1027 + + + + 1, 7, 27, 55, 89, 127, 169, 213, 259, 307, 357, 401, 441, 481, 519, + 559, 599, 639, 685, 735, 783, 829, 873, 913, 949, 981, 1007, 1025 + + + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 12, 14, 14, 16, 14, 12, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12, 14, 16, 14, 14, 12, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ([x_offset]), ([y_start_front]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_front]+[DeltaY_ServiceModule]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+2*[DeltaY_ServiceModule]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+2*[DeltaY_ServiceModule]+[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X6]/2), ([y_start_front]+3*[DeltaY_ServiceModule]+[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+3*[DeltaY_ServiceModule]+[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+4*[DeltaY_ServiceModule]+[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+4*[DeltaY_ServiceModule]+2*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X3]/2), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid] +[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+5*[DeltaY_ServiceModule]+2*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+6*[DeltaY_ServiceModule]+2*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+6*[DeltaY_ServiceModule]+3*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+7*[DeltaY_ServiceModule]+3*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+8*[DeltaY_ServiceModule]+3*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+8*[DeltaY_ServiceModule]+4*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+9*[DeltaY_ServiceModule]+4*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+9*[DeltaY_ServiceModule]+4*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+10*[DeltaY_ServiceModule]+4*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+10*[DeltaY_ServiceModule]+5*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+11*[DeltaY_ServiceModule]+5*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+12*[DeltaY_ServiceModule]+5*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+12*[DeltaY_ServiceModule]+6*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+13*[DeltaY_ServiceModule]+6*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+14*[DeltaY_ServiceModule]+6*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+14*[DeltaY_ServiceModule]+7*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+15*[DeltaY_ServiceModule]+7*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+16*[DeltaY_ServiceModule]+7*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+16*[DeltaY_ServiceModule]+8*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+17*[DeltaY_ServiceModule]+8*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+2*[ServiceHybrid_X6]+2*[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+17*[DeltaY_ServiceModule]+8*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+18*[DeltaY_ServiceModule]+8*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+18*[DeltaY_ServiceModule]+9*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+19*[DeltaY_ServiceModule]+9*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+2*[Module_X]+2*[DeltaX]), ([y_start_front]+20*[DeltaY_ServiceModule]+9*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+5*[Module_X]+5*[DeltaX]), ([y_start_front]+20*[DeltaY_ServiceModule]+10*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+21*[DeltaY_ServiceModule]+10*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+21*[DeltaY_ServiceModule]+10*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+22*[DeltaY_ServiceModule]+10*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+22*[DeltaY_ServiceModule]+11*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+23*[DeltaY_ServiceModule]+11*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+7*[Module_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+23*[DeltaY_ServiceModule]+11*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+24*[DeltaY_ServiceModule]+11*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+24*[DeltaY_ServiceModule]+12*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+25*[DeltaY_ServiceModule]+12*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_front]+25*[DeltaY_ServiceModule]+12*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+26*[DeltaY_ServiceModule]+12*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+26*[DeltaY_ServiceModule]+13*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+9*[Module_X]+9*[DeltaX]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+9*[Module_X]+9*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+9*[Module_X]+9*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+27*[DeltaY_ServiceModule]+13*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+28*[DeltaY_ServiceModule]+13*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+28*[DeltaY_ServiceModule]+14*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_front]+29*[DeltaY_ServiceModule]+14*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_front]+29*[DeltaY_ServiceModule]+14*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+30*[DeltaY_ServiceModule]+14*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+30*[DeltaY_ServiceModule]+15*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_front]+31*[DeltaY_ServiceModule]+15*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+7*[Module_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+31*[DeltaY_ServiceModule]+15*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+32*[DeltaY_ServiceModule]+15*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+32*[DeltaY_ServiceModule]+16*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_front]+33*[DeltaY_ServiceModule]+16*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+33*[DeltaY_ServiceModule]+16*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+5*[Module_X]+5*[DeltaX]), ([y_start_front]+34*[DeltaY_ServiceModule]+16*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+2*[Module_X]+2*[DeltaX]), ([y_start_front]+34*[DeltaY_ServiceModule]+17*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+35*[DeltaY_ServiceModule]+17*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+36*[DeltaY_ServiceModule]+17*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+36*[DeltaY_ServiceModule]+18*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+37*[DeltaY_ServiceModule]+18*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+2*[ServiceHybrid_X6]+2*[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+37*[DeltaY_ServiceModule]+18*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+38*[DeltaY_ServiceModule]+18*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+38*[DeltaY_ServiceModule]+19*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+39*[DeltaY_ServiceModule]+19*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+40*[DeltaY_ServiceModule]+19*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+40*[DeltaY_ServiceModule]+20*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+41*[DeltaY_ServiceModule]+20*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+42*[DeltaY_ServiceModule]+20*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+42*[DeltaY_ServiceModule]+21*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_front]+43*[DeltaY_ServiceModule]+21*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+44*[DeltaY_ServiceModule]+21*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+44*[DeltaY_ServiceModule]+22*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+45*[DeltaY_ServiceModule]+22*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+45*[DeltaY_ServiceModule]+22*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+46*[DeltaY_ServiceModule]+22*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+46*[DeltaY_ServiceModule]+23*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+47*[DeltaY_ServiceModule]+23*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+48*[DeltaY_ServiceModule]+23*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+48*[DeltaY_ServiceModule]+24*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_front]+49*[DeltaY_ServiceModule]+24*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+50*[DeltaY_ServiceModule]+24*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+50*[DeltaY_ServiceModule]+25*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_front]+51*[DeltaY_ServiceModule]+25*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[DeltaX_Service6_Service7]), ([y_start_front]+51*[DeltaY_ServiceModule]+25*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+52*[DeltaY_ServiceModule]+25*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+52*[DeltaY_ServiceModule]+26*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_front]+53*[DeltaY_ServiceModule]+26*[Module_Y]), ([ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_front]+54*[DeltaY_ServiceModule]+26*[Module_Y]), ([Module_translation_z]) + + + + + + + + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-[DeltaY_ServiceModule]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-[DeltaY_ServiceModule]-[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-2*[DeltaY_ServiceModule]-[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-2*[DeltaY_ServiceModule]-[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-3*[DeltaY_ServiceModule]-[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-3*[DeltaY_ServiceModule]-2*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-4*[DeltaY_ServiceModule]-2*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-5*[DeltaY_ServiceModule]-2*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-5*[DeltaY_ServiceModule]-3*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-6*[DeltaY_ServiceModule]-3*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-6*[DeltaY_ServiceModule]-3*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-7*[DeltaY_ServiceModule]-3*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-7*[DeltaY_ServiceModule]-4*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_back]-8*[DeltaY_ServiceModule]-4*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-8*[DeltaY_ServiceModule]-4*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-9*[DeltaY_ServiceModule]-4*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-9*[DeltaY_ServiceModule]-5*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-10*[DeltaY_ServiceModule]-5*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-11*[DeltaY_ServiceModule]-5*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-11*[DeltaY_ServiceModule]-6*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-12*[DeltaY_ServiceModule]-6*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-13*[DeltaY_ServiceModule]-6*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-13*[DeltaY_ServiceModule]-7*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_back]-14*[DeltaY_ServiceModule]-7*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-15*[DeltaY_ServiceModule]-7*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-15*[DeltaY_ServiceModule]-8*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-16*[DeltaY_ServiceModule]-8*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-16*[DeltaY_ServiceModule]-8*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-17*[DeltaY_ServiceModule]-8*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-17*[DeltaY_ServiceModule]-9*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-18*[DeltaY_ServiceModule]-9*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-19*[DeltaY_ServiceModule]-9*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+3*[Module_X]+3*[DeltaX]), ([y_start_back]-19*[DeltaY_ServiceModule]-10*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+4*[Module_X]+4*[DeltaX]), ([y_start_back]-20*[DeltaY_ServiceModule]-10*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+4*[Module_X]+4*[DeltaX]+2*[ServiceHybrid_X3]+2*[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-20*[DeltaY_ServiceModule]-10*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+4*[Module_X]+4*[DeltaX]), ([y_start_back]-21*[DeltaY_ServiceModule]-10*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_back]-21*[DeltaY_ServiceModule]-11*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-22*[DeltaY_ServiceModule]-11*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-22*[DeltaY_ServiceModule]-11*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_back]-23*[DeltaY_ServiceModule]-11*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([Module_X]/2+7*[Module_X]+7*[DeltaX]), ([y_start_back]-23*[DeltaY_ServiceModule]-12*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-24*[DeltaY_ServiceModule]-12*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-24*[DeltaY_ServiceModule]-12*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-25*[DeltaY_ServiceModule]-12*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-25*[DeltaY_ServiceModule]-13*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-26*[DeltaY_ServiceModule]-13*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-26*[DeltaY_ServiceModule]-13*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-27*[DeltaY_ServiceModule]-13*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-27*[DeltaY_ServiceModule]-14*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-28*[DeltaY_ServiceModule]-14*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ( [x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-28*[DeltaY_ServiceModule]-14*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-29*[DeltaY_ServiceModule]-14*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-29*[DeltaY_ServiceModule]-15*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]), ([y_start_back]-30*[DeltaY_ServiceModule]-15*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+8*[Module_X]+8*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-30*[DeltaY_ServiceModule]-15*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([Module_X]/2+7*[Module_X]+7*[DeltaX]), ([y_start_back]-31*[DeltaY_ServiceModule]-15*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_back]-31*[DeltaY_ServiceModule]-16*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]), ([y_start_back]-32*[DeltaY_ServiceModule]-16*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+7*[Module_X]+7*[DeltaX]+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-32*[DeltaY_ServiceModule]-16*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+6*[Module_X]+6*[DeltaX]), ([y_start_back]-33*[DeltaY_ServiceModule]-16*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ( [x_offset]+4*[Module_X]+4*[DeltaX]), ([y_start_back]-33*[DeltaY_ServiceModule]-17*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]+4*[Module_X]+4*[DeltaX]), ([y_start_back]-34*[DeltaY_ServiceModule]-17*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+4*[Module_X]+4*[DeltaX]+2*[ServiceHybrid_X3]+2*[DeltaX]+[DeltaX_Service3_Service7]), ([y_start_back]-34*[DeltaY_ServiceModule]-17*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]+3*[Module_X]+3*[DeltaX]), ([y_start_back]-35*[DeltaY_ServiceModule]-17*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-35*[DeltaY_ServiceModule]-18*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-36*[DeltaY_ServiceModule]-18*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-37*[DeltaY_ServiceModule]-18*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-37*[DeltaY_ServiceModule]-19*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-38*[DeltaY_ServiceModule]-19*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[ServiceHybrid_X3]+[DeltaX]+[DeltaX_Service3_Service6]), ([y_start_back]-38*[DeltaY_ServiceModule]-19*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-39*[DeltaY_ServiceModule]-19*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-39*[DeltaY_ServiceModule]-20*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[DeltaX_Service6_Service7]), ([y_start_back]-40*[DeltaY_ServiceModule]-20*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-41*[DeltaY_ServiceModule]-20*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-41*[DeltaY_ServiceModule]-21*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service6]+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-42*[DeltaY_ServiceModule]-21*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-43*[DeltaY_ServiceModule]-21*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-43*[DeltaY_ServiceModule]-22*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-44*[DeltaY_ServiceModule]-22*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-45*[DeltaY_ServiceModule]-22*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-45*[DeltaY_ServiceModule]-23*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2), ([y_start_back]-46*[DeltaY_ServiceModule]-23*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X6]/2+[ServiceHybrid_X6]+[DeltaX]+[DeltaX_Service6_Service7]), ([y_start_back]-46*[DeltaY_ServiceModule]-23*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-47*[DeltaY_ServiceModule]-23*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-47*[DeltaY_ServiceModule]-24*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-48*[DeltaY_ServiceModule]-24*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-48*[DeltaY_ServiceModule]-24*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-49*[DeltaY_ServiceModule]-24*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-49*[DeltaY_ServiceModule]-25*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X7]/2), ([y_start_back]-50*[DeltaY_ServiceModule]-25*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-51*[DeltaY_ServiceModule]-25*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-51*[DeltaY_ServiceModule]-26*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-52*[DeltaY_ServiceModule]-26*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2+[DeltaX_Service3_Service7]), ([y_start_back]-52*[DeltaY_ServiceModule]-26*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-53*[DeltaY_ServiceModule]-26*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([x_offset]), ([y_start_back]-53*[DeltaY_ServiceModule]-27*[Module_Y]), (-1*[Module_translation_z]) + + + + + + + + + + + + + ([xoffset_servicehybrid]+[ServiceHybrid_X3]/2), ([y_start_back]-54*[DeltaY_ServiceModule]-27*[Module_Y]), (-1*[ServiceHybrid_translation_z]) + + + + + + + + diff --git a/Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml b/Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml new file mode 100644 index 0000000000000..c9517bff4792c --- /dev/null +++ b/Geometry/MTDCommonData/data/mtdParameters/v5/mtdParameters.xml @@ -0,0 +1,16 @@ + + + + + + 4, 4, 4, 24 + + + 0, 0, 0, 0, 0, 10, 40, 80, 1, 16, 1, 1 + + + 0, 0, 0, 0, 12, 24, 6, 12, 16, 16, 1, 1 + + + + diff --git a/Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml b/Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml new file mode 100644 index 0000000000000..f4d6d1b45ef36 --- /dev/null +++ b/Geometry/MTDCommonData/data/mtdParameters/v5/mtdStructureTopology.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDCommonData/interface/MTDTopologyMode.h b/Geometry/MTDCommonData/interface/MTDTopologyMode.h index 6b418a17ca2bf..e53c86152e13c 100644 --- a/Geometry/MTDCommonData/interface/MTDTopologyMode.h +++ b/Geometry/MTDCommonData/interface/MTDTopologyMode.h @@ -19,7 +19,8 @@ namespace MTDTopologyMode { barphiflat = 4, btlv1etlv4 = 5, btlv1etlv5 = 6, - btlv2etlv5 = 7 + btlv2etlv5 = 7, + btlv2etlv8 = 8 }; Mode MTDStringToEnumParser(const std::string&); @@ -27,7 +28,7 @@ namespace MTDTopologyMode { /** Returns BTLDetId::CrysLayout as a function of topology mode (to accomodate TDR/post TDR ETL scenarios). **/ inline BTLDetId::CrysLayout crysLayoutFromTopoMode(const int& topoMode) { - if (topoMode < 0 || topoMode > static_cast(Mode::btlv2etlv5)) { + if (topoMode < 0 || topoMode > static_cast(Mode::btlv2etlv8)) { throw cms::Exception("UnknownMTDtopoMode") << "Unknown MTD topology mode " << topoMode; } else if (topoMode <= static_cast(BTLDetId::CrysLayout::barphiflat)) { return static_cast(topoMode); @@ -41,14 +42,16 @@ namespace MTDTopologyMode { /** Returns ETLDetId::EtlLayout as a function of topology mode **/ inline ETLDetId::EtlLayout etlLayoutFromTopoMode(const int& topoMode) { - if (topoMode < 0 || topoMode > static_cast(Mode::btlv2etlv5)) { + if (topoMode < 0 || topoMode > static_cast(Mode::btlv2etlv8)) { throw cms::Exception("UnknownMTDtopoMode") << "Unknown MTD topology mode " << topoMode; } else if (topoMode <= static_cast(BTLDetId::CrysLayout::barphiflat)) { return ETLDetId::EtlLayout::tp; } else if (topoMode == static_cast(Mode::btlv1etlv4)) { return ETLDetId::EtlLayout::v4; - } else { + } else if (topoMode == static_cast(Mode::btlv1etlv5) or topoMode == static_cast(Mode::btlv2etlv5)) { return ETLDetId::EtlLayout::v5; + } else { + return ETLDetId::EtlLayout::v8; } } diff --git a/Geometry/MTDCommonData/src/ETLNumberingScheme.cc b/Geometry/MTDCommonData/src/ETLNumberingScheme.cc index a7a9ee875f70a..fd076d0cb0b42 100644 --- a/Geometry/MTDCommonData/src/ETLNumberingScheme.cc +++ b/Geometry/MTDCommonData/src/ETLNumberingScheme.cc @@ -32,12 +32,15 @@ uint32_t ETLNumberingScheme::getUnitID(const MTDBaseNumber& baseNumber) const { return 0; } + const bool prev8(baseNumber.getLevelName(2).find("Sensor") != std::string::npos); + const uint32_t modCopy(baseNumber.getCopyNumber(2)); + uint32_t sensor = 0; + if (!prev8) { + sensor = baseNumber.getCopyNumber(1); + } - const std::string_view& ringName(baseNumber.getLevelName(3)); // name of ring volume int modtyp(0); - std::string_view baseName = ringName.substr(ringName.find(':') + 1); - int ringCopy(::atoi(baseName.data() + 4)); uint32_t discN, sectorS, sectorN; discN = (baseNumber.getLevelName(4).find("Disc1") != std::string::npos) ? 0 : 1; @@ -45,7 +48,7 @@ uint32_t ETLNumberingScheme::getUnitID(const MTDBaseNumber& baseNumber) const { sectorN = baseNumber.getCopyNumber(3); ETLDetId tmpId; - ringCopy = static_cast(tmpId.encodeSector(discN, sectorS, sectorN)); + int ringCopy = static_cast(tmpId.encodeSector(discN, sectorS, sectorN)); modtyp = (baseNumber.getLevelName(2).find("_Left") != std::string::npos) ? 1 : 2; @@ -100,20 +103,37 @@ uint32_t ETLNumberingScheme::getUnitID(const MTDBaseNumber& baseNumber) const { // all inputs are fine. Go ahead and decode - ETLDetId thisETLdetid(zside, ringCopy, modCopy, modtyp); - const uint32_t intindex = thisETLdetid.rawId(); + // Different for v8 and pre v8 ETL geometries + uint32_t intindex = 0; + uint32_t altintindex = 0; + if (prev8) { + ETLDetId thisETLdetid(zside, ringCopy, modCopy, modtyp); + intindex = thisETLdetid.rawId(); +#ifdef EDM_ML_DEBUG + edm::LogInfo("MTDGeom") << "ETL Numbering scheme: " + << " ring = " << ringCopy << " zside = " << zside << " module = " << modCopy + << " modtyp = " << modtyp << " Raw Id = " << intindex; +#endif + + ETLDetId altETLdetid(zside, discN, sectorS, sectorN, modCopy, modtyp); + altintindex = altETLdetid.rawId(); + } else { + ETLDetId thisETLdetid(zside, ringCopy, modCopy, modtyp, sensor); + intindex = thisETLdetid.rawId(); #ifdef EDM_ML_DEBUG - edm::LogInfo("MTDGeom") << "ETL Numbering scheme: " - << " ring = " << ringCopy << " zside = " << zside << " module = " << modCopy - << " modtyp = " << modtyp << " Raw Id = " << intindex << thisETLdetid; + edm::LogInfo("MTDGeom") << "ETL Numbering scheme: " + << " ring = " << ringCopy << " zside = " << zside << " module = " << modCopy + << " modtyp = " << modtyp << " sensor = " << sensor << " Raw Id = " << intindex; #endif - ETLDetId altETLdetid(zside, discN, sectorS, sectorN, modCopy, modtyp); - const uint32_t altintindex = altETLdetid.rawId(); + + ETLDetId altETLdetid(zside, discN, sectorS, sectorN, modCopy, modtyp, sensor); + altintindex = altETLdetid.rawId(); + } + if (intindex != altintindex) { edm::LogWarning("MTDGeom") << "Incorrect alternative construction \n" - << "disc = " << discN << " disc side = " << sectorS << " sector = " << sectorN << "\n" - << altETLdetid; + << "disc = " << discN << " disc side = " << sectorS << " sector = " << sectorN << "\n"; } return intindex; diff --git a/Geometry/MTDCommonData/src/MTDTopologyMode.cc b/Geometry/MTDCommonData/src/MTDTopologyMode.cc index 42519f952e34e..66b520adf6def 100644 --- a/Geometry/MTDCommonData/src/MTDTopologyMode.cc +++ b/Geometry/MTDCommonData/src/MTDTopologyMode.cc @@ -21,6 +21,8 @@ namespace MTDTopologyMode { output = Mode::btlv1etlv5; } else if (value == prefix + "btlv2etlv5") { output = Mode::btlv2etlv5; + } else if (value == prefix + "btlv2etlv8") { + output = Mode::btlv2etlv8; } else { throw cms::Exception("MTDTopologyModeError") << "the value " << value << " is not defined."; } diff --git a/Geometry/MTDGeometryBuilder/src/MTDParametersFromDD.cc b/Geometry/MTDGeometryBuilder/src/MTDParametersFromDD.cc index 199903fc63b91..b4a07b3367468 100644 --- a/Geometry/MTDGeometryBuilder/src/MTDParametersFromDD.cc +++ b/Geometry/MTDGeometryBuilder/src/MTDParametersFromDD.cc @@ -59,7 +59,8 @@ bool MTDParametersFromDD::build(const DDCompactView* cvp, PMTDParameters& ptp) { throw cms::Exception("MTDParametersFromDD") << "Not found " << attribute.c_str() << " but needed."; } - if (MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v5) { + if (MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v5 || + MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v8) { std::array etlLayout{{ "StartCopyNo_Front_Left", "StartCopyNo_Front_Right", @@ -133,7 +134,8 @@ bool MTDParametersFromDD::build(const cms::DDCompactView* cvp, PMTDParameters& p throw cms::Exception("MTDParametersFromDD") << "Not found " << attribute.c_str() << " but needed."; } - if (MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v5) { + if (MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v5 || + MTDTopologyMode::etlLayoutFromTopoMode(topoMode) == ETLDetId::EtlLayout::v8) { std::array etlLayout{{ "StartCopyNo_Front_Left", "StartCopyNo_Front_Right", diff --git a/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.cc b/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.cc index a2568ad712468..12c61a3f9e09a 100644 --- a/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.cc +++ b/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.cc @@ -209,7 +209,7 @@ GeometricTimingDet* CmsMTDConstruction::buildSubdet(FilteredView& subdet->setGeographicalID(BTLDetId(0, 0, 0, 0, 0)); } else if (thisDet == GeometricTimingDet::ETL) { const uint32_t side = subdet->translation().z() > 0 ? 1 : 0; - subdet->setGeographicalID(ETLDetId(side, 0, 0, 0)); + subdet->setGeographicalID(ETLDetId(side, 0, 0, 0, 0)); } else { throw cms::Exception("CmsMTDConstruction") << " ERROR - I was expecting a SubDet, I got a " << fv.name(); } @@ -250,5 +250,10 @@ bool CmsMTDConstruction::isBTLV2(FilteredView& fv) { return (fv.name().substr(0, 9) == "BTLModule"); } +template +bool CmsMTDConstruction::isETLpreV8(FilteredView& fv) { + return (fv.name().find("EModule") != std::string::npos); +} + template class CmsMTDConstruction; template class CmsMTDConstruction; diff --git a/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.h b/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.h index d35b202b0b355..c1bb036a21d85 100644 --- a/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.h +++ b/Geometry/MTDNumberingBuilder/plugins/CmsMTDConstruction.h @@ -31,6 +31,7 @@ class CmsMTDConstruction { void baseNumberFromHistory(const DDGeoHistory& gh); bool isBTLV2(FilteredView&); + bool isETLpreV8(FilteredView&); protected: CmsMTDStringToEnum theCmsMTDStringToEnum; diff --git a/Geometry/MTDNumberingBuilder/plugins/DDCmsMTDConstruction.cc b/Geometry/MTDNumberingBuilder/plugins/DDCmsMTDConstruction.cc index 88afeda6f29a1..5aaa56179fb83 100644 --- a/Geometry/MTDNumberingBuilder/plugins/DDCmsMTDConstruction.cc +++ b/Geometry/MTDNumberingBuilder/plugins/DDCmsMTDConstruction.cc @@ -60,6 +60,16 @@ std::unique_ptr DDCmsMTDConstruction::construct(const DDComp CmsMTDStringToEnum theCmsMTDStringToEnum; // temporary workaround to distinguish BTL scenarios ordering without introducing a dependency on MTDTopologyMode auto isBTLV2 = false; + // temporary workaround to distinguish ETL scenarios ordering without introducing a dependency on MTDTopologyMode + const bool prev8(fv.name().find("EModule") != std::string::npos); + + // Specify ETL end component + GeometricTimingDet::GeometricTimingEnumType ETLEndComponent; + if (prev8) { + ETLEndComponent = GeometricTimingDet::ETLSensor; + } else { + ETLEndComponent = GeometricTimingDet::ETLSensor; + } auto check_root = theCmsMTDStringToEnum.type(ExtractStringFromDD::getString(attribute, &fv)); if (check_root != GeometricTimingDet::MTD) { @@ -118,7 +128,7 @@ std::unique_ptr DDCmsMTDConstruction::construct(const DDComp } else { limit = num + 1; } - } else if ((thisNode == GeometricTimingDet::ETLModule) && limit == 0) { + } else if ((thisNode == ETLEndComponent) && limit == 0) { limit = num; } if (num != limit && limit > 0) { @@ -130,7 +140,7 @@ std::unique_ptr DDCmsMTDConstruction::construct(const DDComp #endif theCmsMTDConstruction.buildBTLModule(fv, layer.back()); limit = num; - } else if (thisNode == GeometricTimingDet::ETLModule) { + } else if (thisNode == ETLEndComponent) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("MTDNumbering") << "Registered in GeometricTimingDet as type " << thisNode; #endif @@ -254,6 +264,16 @@ std::unique_ptr DDCmsMTDConstruction::construct(const cms::D CmsMTDConstruction theCmsMTDConstruction; // temporary workaround to distinguish BTL scenarios ordering without introducing a dependency on MTDTopologyMode auto isBTLV2 = false; + // temporary workaround to distinguish ETL scenarios ordering without introducing a dependency on MTDTopologyMode + const bool prev8(fv.name().find("EModule") != std::string::npos); + + // Specify ETL end component + GeometricTimingDet::GeometricTimingEnumType ETLEndComponent; + if (prev8) { + ETLEndComponent = GeometricTimingDet::ETLSensor; + } else { + ETLEndComponent = GeometricTimingDet::ETLSensor; + } std::vector subdet; std::vector layer; @@ -291,7 +311,7 @@ std::unique_ptr DDCmsMTDConstruction::construct(const cms::D } } theCmsMTDConstruction.buildBTLModule(fv, layer.back()); - } else if (thisNode == GeometricTimingDet::ETLModule) { + } else if (thisNode == ETLEndComponent) { #ifdef EDM_ML_DEBUG edm::LogVerbatim("DD4hep_MTDNumbering") << "Registered in GeometricTimingDet as type " << thisNode; #endif diff --git a/Geometry/MTDNumberingBuilder/src/CmsMTDStringToEnum.cc b/Geometry/MTDNumberingBuilder/src/CmsMTDStringToEnum.cc index ab24050d9b2d7..725a4f85d4512 100644 --- a/Geometry/MTDNumberingBuilder/src/CmsMTDStringToEnum.cc +++ b/Geometry/MTDNumberingBuilder/src/CmsMTDStringToEnum.cc @@ -14,7 +14,10 @@ CmsMTDStringToEnum::Impl::Impl() { map_.emplace("EndcapTimingLayer", GeometricTimingDet::ETL); map_.emplace("Disc1Timing", GeometricTimingDet::ETLDisc); map_.emplace("Disc2Timing", GeometricTimingDet::ETLDisc); - map_.emplace("EModule", GeometricTimingDet::ETLModule); + map_.emplace("SensorM", GeometricTimingDet::ETLModule); // pre v8 geometry + map_.emplace("Module_", GeometricTimingDet::ETLModule); + map_.emplace("EModule", GeometricTimingDet::ETLSensor); // pre v8 geometry + map_.emplace("LGAD_ac", GeometricTimingDet::ETLSensor); } GeometricTimingDet::GeometricTimingEnumType CmsMTDStringToEnum::type(std::string const& s) const { diff --git a/Geometry/MTDNumberingBuilder/src/MTDTopology.cc b/Geometry/MTDNumberingBuilder/src/MTDTopology.cc index f766a23df5913..82616fbae7063 100644 --- a/Geometry/MTDNumberingBuilder/src/MTDTopology.cc +++ b/Geometry/MTDNumberingBuilder/src/MTDTopology.cc @@ -1,5 +1,6 @@ #include "Geometry/MTDNumberingBuilder/interface/MTDTopology.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/MTDCommonData/interface/MTDTopologyMode.h" MTDTopology::MTDTopology(const int& topologyMode, const ETLValues& etl) : mtdTopologyMode_(topologyMode), etlVals_(etl) {} @@ -12,8 +13,10 @@ bool MTDTopology::orderETLSector(const GeomDet*& gd1, const GeomDet*& gd2) { return det1.mtdRR() < det2.mtdRR(); } else if (det1.modType() != det2.modType()) { return det1.modType() < det2.modType(); - } else { + } else if (det1.module() != det2.module()) { return det1.module() < det2.module(); + } else { + return det1.sensor() < det2.sensor(); } } @@ -26,9 +29,18 @@ size_t MTDTopology::hshiftETL(const uint32_t detid, const int horizontalShift) c } int hsh = horizontalShift > 0 ? 1 : -1; + int sensor = start_mod.sensor(); int module = start_mod.module(); uint32_t modtyp = start_mod.modType(); uint32_t discside = start_mod.discSide(); + int geomDetIndex; + + // distinguish numbering in prev8 / v8 geometries + if (getMTDTopologyMode() == static_cast(MTDTopologyMode::Mode::btlv2etlv8)) { + geomDetIndex = 2 * (module - 1) + sensor; + } else { + geomDetIndex = module; + } // ilayout number coincides at present with disc face, use this @@ -40,11 +52,11 @@ size_t MTDTopology::hshiftETL(const uint32_t detid, const int horizontalShift) c size_t nmodOffset = (modtyp == 1) ? 0 : etlVals_[discside].start_copy_[iLeft].back() - 1; for (size_t iloop = 0; iloop < etlVals_[discside].start_copy_[iHome].size() - 1; iloop++) { - if (module >= etlVals_[discside].start_copy_[iHome][iloop] && - module < etlVals_[discside].start_copy_[iHome][iloop + 1]) { - if (module + hsh >= etlVals_[discside].start_copy_[iHome][iloop] && - module + hsh < etlVals_[discside].start_copy_[iHome][iloop + 1]) { - return module + hsh - 1 + nmodOffset; + if (geomDetIndex >= etlVals_[discside].start_copy_[iHome][iloop] && + geomDetIndex < etlVals_[discside].start_copy_[iHome][iloop + 1]) { + if (geomDetIndex + hsh >= etlVals_[discside].start_copy_[iHome][iloop] && + geomDetIndex + hsh < etlVals_[discside].start_copy_[iHome][iloop + 1]) { + return geomDetIndex + hsh - 1 + nmodOffset; } break; } @@ -64,9 +76,18 @@ size_t MTDTopology::vshiftETL(const uint32_t detid, const int verticalShift, siz } int vsh = verticalShift > 0 ? 1 : -1; + int sensor = start_mod.sensor(); int module = start_mod.module(); uint32_t modtyp = start_mod.modType(); uint32_t discside = start_mod.discSide(); + int geomDetIndex; + + // distinguish numbering in prev8 / v8 geometries + if (getMTDTopologyMode() == static_cast(MTDTopologyMode::Mode::btlv2etlv8)) { + geomDetIndex = 2 * (module - 1) + sensor; + } else { + geomDetIndex = module; + } // ilayout number coincides at present with disc face, use this @@ -81,8 +102,8 @@ size_t MTDTopology::vshiftETL(const uint32_t detid, const int verticalShift, siz size_t iBin(etlVals_[discside].start_copy_[iHome].size()); // never allowed for (size_t iloop = 0; iloop < etlVals_[discside].start_copy_[iHome].size() - 1; iloop++) { - if (module >= etlVals_[discside].start_copy_[iHome][iloop] && - module < etlVals_[discside].start_copy_[iHome][iloop + 1]) { + if (geomDetIndex >= etlVals_[discside].start_copy_[iHome][iloop] && + geomDetIndex < etlVals_[discside].start_copy_[iHome][iloop + 1]) { iBin = iloop; break; } @@ -108,7 +129,7 @@ size_t MTDTopology::vshiftETL(const uint32_t detid, const int verticalShift, siz // determine the position of the other type corresponding to the same column of the home type - int vpos = etlVals_[discside].offset_[iHome][iBin] + module - etlVals_[discside].start_copy_[iHome][iBin] + 1; + int vpos = etlVals_[discside].offset_[iHome][iBin] + geomDetIndex - etlVals_[discside].start_copy_[iHome][iBin] + 1; if (vpos <= etlVals_[discside].offset_[iOther][iBinOther]) { closest = etlVals_[discside].start_copy_[iOther][iBinOther]; } else if (vpos > etlVals_[discside].offset_[iOther][iBinOther] + diff --git a/Geometry/MTDSimData/data/v5/mtdProdCuts.xml b/Geometry/MTDSimData/data/v5/mtdProdCuts.xml new file mode 100644 index 0000000000000..eaf8a7d6249a6 --- /dev/null +++ b/Geometry/MTDSimData/data/v5/mtdProdCuts.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/MTDSimData/data/v5/mtdsens.xml b/Geometry/MTDSimData/data/v5/mtdsens.xml new file mode 100644 index 0000000000000..eca7e09ec4651 --- /dev/null +++ b/Geometry/MTDSimData/data/v5/mtdsens.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/RecoMTD/DetLayers/src/ETLDetLayerGeometryBuilder.cc b/RecoMTD/DetLayers/src/ETLDetLayerGeometryBuilder.cc index aec6258a1063b..d207aa6f212b6 100644 --- a/RecoMTD/DetLayers/src/ETLDetLayerGeometryBuilder.cc +++ b/RecoMTD/DetLayers/src/ETLDetLayerGeometryBuilder.cc @@ -29,6 +29,8 @@ pair, vector > ETLDetLayerGeometryBuilder::buildLay nSector *= ETLDetId::kETLv4maxSector; } else if (etlL == ETLDetId::EtlLayout::v5) { nSector *= ETLDetId::kETLv5maxSector; + } else if (etlL == ETLDetId::EtlLayout::v8) { + nSector *= ETLDetId::kETLv5maxSector; } else { throw cms::Exception("MTDDetLayers") << "Not implemented scenario " << mtdTopologyMode; } diff --git a/RecoMTD/DetLayers/src/MTDDetLayerGeometry.cc b/RecoMTD/DetLayers/src/MTDDetLayerGeometry.cc index 8fa5b760bb57c..5472945566382 100644 --- a/RecoMTD/DetLayers/src/MTDDetLayerGeometry.cc +++ b/RecoMTD/DetLayers/src/MTDDetLayerGeometry.cc @@ -75,7 +75,7 @@ void MTDDetLayerGeometry::addBTLLayers(const vector& dtlayers) { DetId MTDDetLayerGeometry::makeDetLayerId(const DetLayer* detLayer) const { if (detLayer->subDetector() == GeomDetEnumerators::TimingEndcap) { ETLDetId id(detLayer->basicComponents().front()->geographicalId().rawId()); - return ETLDetId(id.mtdSide(), 0, 0, 0); + return ETLDetId(id.mtdSide(), 0, 0, 0, 0); // Constructor of new geometry is compatible with prev8 } else if (detLayer->subDetector() == GeomDetEnumerators::TimingBarrel) { BTLDetId id(detLayer->basicComponents().front()->geographicalId().rawId()); return BTLDetId(id.mtdSide(), 0, 0, 0, 0); @@ -105,7 +105,7 @@ const DetLayer* MTDDetLayerGeometry::idToLayer(const DetId& id) const { if (detId.mtdSubDetector() == 2) { // 2 is ETL ETLDetId etlId(detId.rawId()); - idout = ETLDetId(etlId.mtdSide(), 0, 0, 0); + idout = ETLDetId(etlId.mtdSide(), 0, 0, 0, 0); } else if (detId.mtdSubDetector() == 1) { // 1 is BTL BTLDetId btlId(detId.rawId()); idout = BTLDetId(btlId.mtdSide(), 0, 0, 0, 0); diff --git a/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc b/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc index f7fbf2dc31c52..4582efbd3e7d2 100644 --- a/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc +++ b/SimFastTiming/FastTimingCommon/src/ETLDeviceSim.cc @@ -45,7 +45,7 @@ void ETLDeviceSim::getHitsResponse(const std::vectoridToDet(geoId); if (thedet == nullptr) { throw cms::Exception("ETLDeviceSim") << "GeographicalID: " << std::hex << geoId.rawId() << " (" << detId.rawId() From e926ce48ca90ae669495b5936bf5da53863ae237 Mon Sep 17 00:00:00 2001 From: Ruben Lopez Ruiz <24.lopezr@gmail.com> Date: Thu, 7 Dec 2023 12:26:06 +0100 Subject: [PATCH 2/3] Fix code issues --- Configuration/PyReleaseValidation/python/relval_2026.py | 1 + .../PyReleaseValidation/python/upgradeWorkflowComponents.py | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Configuration/PyReleaseValidation/python/relval_2026.py b/Configuration/PyReleaseValidation/python/relval_2026.py index bcf582d061fc3..7dc42987a84b3 100644 --- a/Configuration/PyReleaseValidation/python/relval_2026.py +++ b/Configuration/PyReleaseValidation/python/relval_2026.py @@ -36,6 +36,7 @@ numWFIB.extend([26434.0]) #2026D102 numWFIB.extend([26834.0]) #2026D103 numWFIB.extend([27234.0]) #2026D104 +numWFIB.extend([27634.0]) #2026D105 #Additional sample for short matrix and IB #CloseByPGun for HGCAL diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index ce1a81e0be489..2c6a90476ee20 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -2825,8 +2825,6 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Era' : 'Phase2C17I13M9', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], }, -<<<<<<< HEAD -======= '2026D105' : { 'Geom' : 'Extended2026D104', 'HLTmenu': '@relval2026', @@ -2834,7 +2832,6 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Era' : 'Phase2C17I13M9', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], }, ->>>>>>> 5bd8a0ba0d1 (ETL Geometry v8) } # standard PU sequences From c58482d5008dfb75baa21bc81b09f4c42f1824f9 Mon Sep 17 00:00:00 2001 From: Ruben Lopez Ruiz <24.lopezr@gmail.com> Date: Thu, 7 Dec 2023 19:33:12 +0100 Subject: [PATCH 3/3] Fix code issues --- .../PyReleaseValidation/python/upgradeWorkflowComponents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index 2c6a90476ee20..44ae7298482c0 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -2826,7 +2826,7 @@ def condition(self, fragment, stepList, key, hasHarvest): 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], }, '2026D105' : { - 'Geom' : 'Extended2026D104', + 'Geom' : 'Extended2026D105', 'HLTmenu': '@relval2026', 'GT' : 'auto:phase2_realistic_T25', 'Era' : 'Phase2C17I13M9',