diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md index e3dae2f3d5a3f..31899907e468d 100644 --- a/Configuration/Geometry/README.md +++ b/Configuration/Geometry/README.md @@ -1,3 +1,5 @@ +The Run 3 geometry is automatically created using the script [generate2021Geometry.py](./scripts/generate2021Geometry.py). + The Phase2 geometries are automatically created using the script [generate2026Geometry.py](./scripts/generate2026Geometry.py). Different versions of various subdetectors can be combined. The available versions are: diff --git a/Configuration/Geometry/python/dict2021Geometry.py b/Configuration/Geometry/python/dict2021Geometry.py index 9a2846643844b..faa2da8128569 100644 --- a/Configuration/Geometry/python/dict2021Geometry.py +++ b/Configuration/Geometry/python/dict2021Geometry.py @@ -1,4 +1,4 @@ -maxsections = 5 +maxSections = 5 commonDict = { "abbrev" : "O", @@ -30,7 +30,7 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", + "era" : "run3_common, stage2L1Trigger_2021", } } @@ -239,7 +239,6 @@ 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *', 'trackerGeometry.applyAlignment = cms.bool(False)', ], - "era" : "phase2_tracker, trackingPhase2PU140", } } @@ -299,7 +298,7 @@ 'from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import *', 'from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, hcalHardcodeConditions, hcalSkipPacker", + "era" : "run3_HB", } } @@ -348,7 +347,7 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "run3_GEM", }, } @@ -492,12 +491,11 @@ "reco" :[ ], - "era" : "run3_common, phase2_timing, phase2_timing_layer", }, } allDicts = [ commonDict, trackerDict, caloDict, muonDict, forwardDict, ppsDict ] detectorVersionDict = { - ("O1","T1","C1","M1","F1", "P1") : "2021", + ("O1","T1","C1","M1","F1","P1") : "2021", } diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index f9265a896a6cf..f1307be7da79d 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -1,4 +1,4 @@ -maxsections = 5 +maxSections = 5 commonDict = { "abbrev" : "O", @@ -29,7 +29,7 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", + "era" : "phase2_common, phase2_trigger", }, "O3" : { 1 : [ @@ -56,7 +56,7 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", + "era" : "phase2_common, phase2_trigger", }, "O4" : { 1 : [ @@ -83,8 +83,8 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", - }, + "era" : "phase2_common, phase2_trigger", + }, "O5" : { 1 : [ 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', @@ -110,8 +110,8 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", - }, + "era" : "phase2_common, phase2_trigger", + }, "O6" : { 1 : [ 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', @@ -137,8 +137,8 @@ 5 : [ 'Geometry/CMSCommonData/data/FieldParameters.xml', ], - "era" : "run2_common, run3_common, phase2_common", - }, + "era" : "phase2_common, phase2_trigger", + }, } trackerDict = { @@ -502,7 +502,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions", }, "C6" : { 1 : [ @@ -588,7 +588,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, hcalSkipPacker, phase2_hfnose", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hfnose", }, "C8" : { 1 : [ @@ -661,7 +661,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10", }, "C9" : { 1 : [ @@ -734,7 +734,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, phase2_hgcalV11, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10, phase2_hgcalV11", }, "C10" : { 1 : [ @@ -819,7 +819,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, phase2_hgcalV11, phase2_hfnose, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10, phase2_hgcalV11, phase2_hfnose", }, "C11" : { 1 : [ @@ -892,7 +892,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12", }, "C12" : { 1 : [ @@ -977,7 +977,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12, phase2_hfnose, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12, phase2_hfnose", }, "C13" : { 1 : [ @@ -1051,7 +1051,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_hgcalV9, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12, hcalHardcodeConditions, hcalSkipPacker", + "era" : "phase2_ecal, phase2_hcal, phase2_hgcal, phase2_hgcalV9, hcalHardcodeConditions, phase2_hgcalV10, phase2_hgcalV11, phase2_hgcalV12, phase2_hfnose", }, } @@ -1103,7 +1103,7 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "phase2_muon, phase2_GEM", }, "M3" : { 1 : [ @@ -1148,7 +1148,7 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "phase2_muon, phase2_GEM", }, "M4" : { 1 : [ @@ -1195,7 +1195,7 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "phase2_muon, phase2_GEM", }, "M5" : { 1 : [ @@ -1288,7 +1288,7 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "phase2_muon, phase2_GEM", }, "M7" : { 1 : [ @@ -1334,9 +1334,8 @@ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *', 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *', ], - "era" : "phase2_muon, run3_GEM", + "era" : "phase2_muon, phase2_GEM", }, - } forwardDict = { @@ -1472,7 +1471,6 @@ 'from Geometry.ForwardGeometry.ForwardGeometry_cfi import *', ] }, - } timingDict = { diff --git a/Configuration/Geometry/python/generateGeometry.py b/Configuration/Geometry/python/generateGeometry.py new file mode 100644 index 0000000000000..0df7f5edfdff6 --- /dev/null +++ b/Configuration/Geometry/python/generateGeometry.py @@ -0,0 +1,235 @@ +from __future__ import print_function +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, RawTextHelpFormatter, RawDescriptionHelpFormatter +import sys, os, operator +from pprint import pprint +import filecmp + +# convenience definition +# (from ConfigArgParse) +class ArgumentDefaultsRawHelpFormatter( + ArgumentDefaultsHelpFormatter, + RawTextHelpFormatter, + RawDescriptionHelpFormatter): + """HelpFormatter that adds default values AND doesn't do line-wrapping""" +pass + +class GeometryGenerator(object): + def __init__(self, scriptName, detectorVersionDefault, detectorPrefix, detectorYear, maxSections, allDicts, detectorVersionDict, deprecatedDets = None, deprecatedSubdets = None): + self.scriptName = scriptName + self.detectorVersionDefault = detectorVersionDefault + self.detectorPrefix = detectorPrefix + self.detectorYear = detectorYear + self.maxSections = maxSections + self.allDicts = allDicts + self.detectorVersionDict = detectorVersionDict + self.deprecatedDets = deprecatedDets + self.deprecatedSubdets = deprecatedSubdets + + def generateGeom(self, detectorTuple, args): + detectorVersion = self.detectorPrefix+str(args.detectorVersionManual) + # reverse dict search if overall D# specified + if args.v_detector>0: + detectorVersion = self.detectorPrefix+str(args.v_detector) + if detectorVersion in self.detectorVersionDict.values(): + detectorTuple = self.detectorVersionDict.keys()[self.detectorVersionDict.values().index(detectorVersion)] + else: + print("Unknown detector "+detectorVersion) + sys.exit(1) + elif detectorTuple in self.detectorVersionDict.keys(): + detectorVersion = self.detectorVersionDict[detectorTuple] + else: + if not args.doTest: print("Detector "+str(detectorTuple)+" not found in dictionary, using "+("default" if args.detectorVersionManual==self.detectorVersionDefault else "provided")+" version number "+str(detectorVersion)) + + # check for deprecation + if self.deprecatedDets is not None and detectorVersion in self.deprecatedDets: + print("Error: "+detectorVersion+" is deprecated and cannot be used.") + sys.exit(1) + if self.deprecatedSubdets is not None: + for subdet in detectorTuple: + if subdet in self.deprecatedSubdets: + print("Error: "+subdet+" is deprecated and cannot be used.") + sys.exit(1) + + # create output files + xmlName = "cmsExtendedGeometry"+self.detectorYear+detectorVersion+"XML_cfi.py" + xmlDD4hepName = "cmsExtendedGeometry"+self.detectorYear+detectorVersion+".xml" + simName = "GeometryExtended"+self.detectorYear+detectorVersion+"_cff.py" + recoName = "GeometryExtended"+self.detectorYear+detectorVersion+"Reco_cff.py" + + # check directories + CMSSWBASE = os.getenv("CMSSW_BASE") + CMSSWRELBASE = os.getenv("CMSSW_RELEASE_BASE") + if CMSSWBASE is None: CMSSWBASE = "" + xmlDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","python") + xmlDD4hepDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","data","dd4hep") + simrecoDir = os.path.join(CMSSWBASE,"src","Configuration","Geometry","python") + if args.doTest: + if not os.path.isdir(xmlDir): + xmlDir = os.path.join(CMSSWRELBASE,"src","Geometry","CMSCommonData","python") + xmlDD4hepDir = os.path.join(CMSSWRELBASE,"src","Geometry","CMSCommonData","data","dd4hep") + else: + mvCommands = "" + if not os.path.isdir(xmlDir): + mvCommands += "mv "+xmlName+" "+xmlDir+"/\n" + else: + xmlName = os.path.join(xmlDir,xmlName) + if not os.path.isdir(xmlDD4hepDir): + mvCommands += "mv "+xmlDD4hepName+" "+xmlDD4hepDir+"/\n" + else: + xmlDD4hepName = os.path.join(xmlDD4hepDir,xmlDD4hepName) + if not os.path.isdir(simrecoDir): + mvCommands += "mv "+simName+" "+simrecoDir+"/\n" + mvCommands += "mv "+recoName+" "+simrecoDir+"/\n" + else: + simName = os.path.join(simrecoDir,simName) + recoName = os.path.join(simrecoDir,recoName) + if len(mvCommands)>0: + print("Warning: some geometry packages not checked out.\nOnce they are available, please execute the following commands manually:\n"+mvCommands) + + # open files + xmlFile = open(xmlName,'w') + xmlDD4hepFile = open(xmlDD4hepName,'w') + simFile = open(simName,'w') + recoFile = open(recoName,'w') + + # common preamble + preamble = "import FWCore.ParameterSet.Config as cms"+"\n"+"\n" + preamble += "# This config was generated automatically using "+self.scriptName+"\n" + preamble += "# If you notice a mistake, please update the generating script, not just this config"+"\n"+"\n" + + # create XML config + xmlFile.write(preamble) + # extra preamble + xmlFile.write("XMLIdealGeometryESSource = cms.ESSource(\"XMLIdealGeometryESSource\","+"\n") + xmlFile.write(" geomXMLFiles = cms.vstring("+"\n") + for section in range(1,self.maxSections+1): + # midamble + if section==2: + xmlFile.write(" )+"+"\n"+" cms.vstring("+"\n") + for iDict,aDict in enumerate(self.allDicts): + if section in aDict[detectorTuple[iDict]].keys(): + xmlFile.write('\n'.join([ " '"+aLine+"'," for aLine in aDict[detectorTuple[iDict]][section] ])+"\n") + # postamble + xmlFile.write(" ),"+"\n"+" rootNodeName = cms.string('cms:OCMS')"+"\n"+")"+"\n") + xmlFile.close() + + # create DD4hep XML config + xmlDD4hepFile.write("\n"+ + "\n"+ + " \n"+ + " \n"+ + "\n"+ + " \n") + for section in range(1,self.maxSections+1): + # midamble + for iDict,aDict in enumerate(self.allDicts): + if section in aDict[detectorTuple[iDict]].keys(): + xmlDD4hepFile.write('\n'.join([ " " for aLine in aDict[detectorTuple[iDict]][section] ])+"\n") + # postamble + xmlDD4hepFile.write(" \n"+ + ""+"\n") + xmlDD4hepFile.close() + + # create sim config + simFile.write(preamble) + # always need XML + simFile.write("from Geometry.CMSCommonData."+os.path.basename(xmlName).replace(".py","")+" import *"+"\n") + for iDict,aDict in enumerate(self.allDicts): + if "sim" in aDict[detectorTuple[iDict]].keys(): + simFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["sim"] ])+"\n") + simFile.close() + + # create reco config + recoFile.write(preamble) + # always need sim + recoFile.write("from Configuration.Geometry."+os.path.basename(simName).replace(".py","")+" import *"+"\n\n") + for iDict,aDict in enumerate(self.allDicts): + if "reco" in aDict[detectorTuple[iDict]].keys(): + recoFile.write("# "+aDict["name"]+"\n") + recoFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["reco"] ])+"\n\n") + recoFile.close() + + from Configuration.StandardSequences.GeometryConf import GeometryConf + if not args.doTest: # todo: include these in unit test somehow + # specify Era customizations + # must be checked manually in: + # Configuration/StandardSequences/python/Eras.py + # Configuration/Eras/python/ + # Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py (workflow definitions) + eraLine = "" + eraLineItems = [] + for iDict,aDict in enumerate(self.allDicts): + if "era" in aDict[detectorTuple[iDict]].keys(): + eraLineItems.append(aDict[detectorTuple[iDict]]["era"]) + eraLine += ", ".join([ eraLineItem for eraLineItem in eraLineItems ]) + print("The Era for this detector should contain:") + print(eraLine) + + # specify GeometryConf + if not 'Extended'+self.detectorYear+detectorVersion in GeometryConf.keys(): + print("Please add this line in Configuration/StandardSequences/python/GeometryConf.py:") + print(" 'Extended"+self.detectorYear+detectorVersion+"' : 'Extended"+self.detectorYear+detectorVersion+",Extended"+self.detectorYear+detectorVersion+"Reco',") + + errorList = [] + + if args.doTest: + # tests for Configuration/Geometry + simFile = os.path.join(simrecoDir,simName) + if not os.path.isfile(simFile): + errorList.append(simName+" missing") + elif not filecmp.cmp(simName,simFile): + errorList.append(simName+" differs") + recoFile = os.path.join(simrecoDir,recoName) + if not os.path.isfile(recoFile): + errorList.append(recoName+" missing") + elif not filecmp.cmp(recoName,recoFile): + errorList.append(recoName+" differs") + # test for Configuration/StandardSequences + if not 'Extended'+self.detectorYear+detectorVersion in GeometryConf.keys(): + errorList.append('Extended'+self.detectorYear+detectorVersion+" missing from GeometryConf") + # test for Geometry/CMSCommonData + xmlFile = os.path.join(xmlDir,xmlName) + if not os.path.isfile(xmlFile): + errorList.append(xmlName+" missing") + elif not filecmp.cmp(xmlName,xmlFile): + errorList.append(xmlName+" differs") + # test for dd4hep xml + xmlDD4hepFile = os.path.join(xmlDD4hepDir,xmlDD4hepName) + if not os.path.exists(xmlDD4hepFile): + errorList.append(xmlDD4hepName+" differs") + elif not filecmp.cmp(xmlDD4hepName,xmlDD4hepFile): + errorList.append(xmlDD4hepName+" differs") + return errorList + + def run(self): + # define options + parser = ArgumentParser(formatter_class=ArgumentDefaultsRawHelpFormatter) + for aDict in self.allDicts: + parser.add_argument("-"+aDict["abbrev"], "--"+aDict["name"], dest="v_"+aDict["name"], default=aDict["default"], type=int, help="version for "+aDict["name"]) + parser.add_argument("-V", "--version", dest="detectorVersionManual", default=self.detectorVersionDefault, type=int, help="manual detector version number") + parser.add_argument("-D", "--detector", dest="v_detector", default=0, type=int, help="version for whole detector, ignored if 0, overrides subdet versions otherwise") + parser.add_argument("-l", "--list", dest="doList", default=False, action="store_true", help="list known detector versions and exit") + parser.add_argument("-t", "--test", dest="doTest", default=False, action="store_true", help="enable unit test mode") + args = parser.parse_args() + + # check options + if args.doList and not args.doTest: + pprint(sorted(self.detectorVersionDict.items(),key=operator.itemgetter(1))) + sys.exit(0) + elif args.doTest: + # list of errors + errorList = [] + # run all known possibilities + for detectorTuple in self.detectorVersionDict: + errorTmp = self.generateGeom(detectorTuple,args) + errorList.extend(errorTmp) + if len(errorList)>0: + print('\n'.join([anError for anError in errorList])) + sys.exit(1) + else: + sys.exit(0) + else: + detectorTuple = tuple([aDict["abbrev"]+str(getattr(args,"v_"+aDict["name"])) for aDict in self.allDicts]) + self.generateGeom(detectorTuple,args) + sys.exit(0) + diff --git a/Configuration/Geometry/scripts/generate2021Geometry.py b/Configuration/Geometry/scripts/generate2021Geometry.py index d1435814d5e53..c128370fb0cda 100644 --- a/Configuration/Geometry/scripts/generate2021Geometry.py +++ b/Configuration/Geometry/scripts/generate2021Geometry.py @@ -1,196 +1,9 @@ -from __future__ import print_function -from optparse import OptionParser -import sys, os, operator -from pprint import pprint -import filecmp - from Configuration.Geometry.dict2021Geometry import * +from Configuration.Geometry.generateGeometry import * -# define global -detectorVersionDefault = 2021 - -def generateGeom(detectorTuple, options): - doTest = bool(options.doTest) - - detectorVersion = str(options.detectorVersionManual) - # reverse dict search if overall D# specified - if options.v_detector>0: - detectorVersion = str(options.v_detector) - if detectorVersion in detectorVersionDict.values(): - detectorTuple = detectorVersionDict.keys()[detectorVersionDict.values().index(detectorVersion)] - else: - print("Unknown detector "+detectorVersion) - sys.exit(1) - elif detectorTuple in detectorVersionDict.keys(): - detectorVersion = detectorVersionDict[detectorTuple] - else: - if not doTest: print("Detector "+str(detectorTuple)+" not found in dictionary, using "+("default" if options.detectorVersionManual==detectorVersionDefault else "provided")+" version number "+str(detectorVersion)) - - # create output files - xmlName = "cmsExtendedGeometry"+detectorVersion+"XML_cfi.py" - xmlDD4hepName = "cmsExtendedGeometry"+detectorVersion+".xml" - simName = "GeometryExtended"+detectorVersion+"_cff.py" - recoName = "GeometryExtended"+detectorVersion+"Reco_cff.py" - - # check directories - CMSSWBASE = os.getenv("CMSSW_BASE") - CMSSWRELBASE = os.getenv("CMSSW_RELEASE_BASE") - if CMSSWBASE is None: CMSSWBASE = "" - xmlDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","python") - xmlDD4hepDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","data","dd4hep") - simrecoDir = os.path.join(CMSSWBASE,"src","Configuration","Geometry","python") - if doTest: - if not os.path.isdir(xmlDir): - xmlDir = os.path.join(CMSSWRELBASE,"src","Geometry","CMSCommonData","python") - xmlDD4hepDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","data","dd4hep") - else: - mvCommands = "" - if not os.path.isdir(xmlDir): - mvCommands += "mv "+xmlName+" "+xmlDir+"/\n" - else: - xmlName = os.path.join(xmlDir,xmlName) - if not os.path.isdir(xmlDD4hepDir): - mvCommands += "mv "+xmlDD4hepName+" "+xmlDD4hepDir+"/\n" - else: - xmlDD4hepName = os.path.join(xmlDD4hepDir,xmlDD4hepName) - if not os.path.isdir(simrecoDir): - mvCommands += "mv "+simName+" "+simrecoDir+"/\n" - mvCommands += "mv "+recoName+" "+simrecoDir+"/\n" - else: - simName = os.path.join(simrecoDir,simName) - recoName = os.path.join(simrecoDir,recoName) - if len(mvCommands)>0: - print("Warning: some geometry packages not checked out.\nOnce they are available, please execute the following commands manually:\n"+mvCommands) - - # open files - xmlFile = open(xmlName,'w') - xmlDD4hepFile = open(xmlDD4hepName,'w') - simFile = open(simName,'w') - recoFile = open(recoName,'w') - - # common preamble - preamble = "import FWCore.ParameterSet.Config as cms"+"\n"+"\n" - preamble += "# This config was generated automatically using generate2021Geometry.py"+"\n" - preamble += "# If you notice a mistake, please update the generating script, not just this config"+"\n"+"\n" - - # create XML config - xmlFile.write(preamble) - # extra preamble - xmlFile.write("XMLIdealGeometryESSource = cms.ESSource(\"XMLIdealGeometryESSource\","+"\n") - xmlFile.write(" geomXMLFiles = cms.vstring("+"\n") - for section in range(1,maxsections+1): - # midamble - if section==2: - xmlFile.write(" )+"+"\n"+" cms.vstring("+"\n") - for iDict,aDict in enumerate(allDicts): - if section in aDict[detectorTuple[iDict]].keys(): - xmlFile.write('\n'.join([ " '"+aLine+"'," for aLine in aDict[detectorTuple[iDict]][section] ])+"\n") - # postamble - xmlFile.write(" ),"+"\n"+" rootNodeName = cms.string('cms:OCMS')"+"\n"+")"+"\n") - xmlFile.close() - - # create DD4hep XML config - xmlDD4hepFile.write("\n"+ - "\n"+ - " \n"+ - " \n"+ - "\n"+ - " \n") - for section in range(1,maxsections+1): - # midamble - for iDict,aDict in enumerate(allDicts): - if section in aDict[detectorTuple[iDict]].keys(): - xmlDD4hepFile.write('\n'.join([ " " for aLine in aDict[detectorTuple[iDict]][section] ])+"\n") - # postamble - xmlDD4hepFile.write(" \n"+ - ""+"\n") - xmlDD4hepFile.close() - - # create sim config - simFile.write(preamble) - # always need XML - simFile.write("from Geometry.CMSCommonData."+os.path.basename(xmlName).replace(".py","")+" import *"+"\n") - for iDict,aDict in enumerate(allDicts): - if "sim" in aDict[detectorTuple[iDict]].keys(): - simFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["sim"] ])+"\n") - simFile.close() - - # create reco config - recoFile.write(preamble) - # always need sim - recoFile.write("from Configuration.Geometry."+os.path.basename(simName).replace(".py","")+" import *"+"\n\n") - for iDict,aDict in enumerate(allDicts): - if "reco" in aDict[detectorTuple[iDict]].keys(): - recoFile.write("# "+aDict["name"]+"\n") - recoFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["reco"] ])+"\n\n") - recoFile.close() - - from Configuration.StandardSequences.GeometryConf import GeometryConf - if not doTest: # todo: include these in unit test somehow - # specify Era customizations - # must be checked manually in: - # Configuration/StandardSequences/python/Eras.py - # Configuration/Eras/python/ - # Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py (workflow definitions) - eraLine = "" - eraLineItems = [] - for iDict,aDict in enumerate(allDicts): - if "era" in aDict[detectorTuple[iDict]].keys(): - eraLineItems.append(aDict[detectorTuple[iDict]]["era"]) - eraLine += ", ".join([ eraLineItem for eraLineItem in eraLineItems ]) - print("The Era for this detector should contain:") - print(eraLine) - - # specify GeometryConf - if not 'Extended'+detectorVersion in GeometryConf.keys(): - print("Please add this line in Configuration/StandardSequences/python/GeometryConf.py:") - print(" 'Extended"+detectorVersion+"' : 'Extended"+detectorVersion+",Extended"+detectorVersion+"Reco',") +if __name__ == "__main__": + # create geometry generator object w/ 2021 content and run it + generator2021 = GeometryGenerator("generate2021Geometry.py",2021,"","",maxSections,allDicts,detectorVersionDict) + generator2021.run() - errorList = [] - if doTest: - # tests for Configuration/Geometry - if not filecmp.cmp(simName,os.path.join(simrecoDir,simName)): - errorList.append(simName+" differs"); - if not filecmp.cmp(recoName,os.path.join(simrecoDir,recoName)): - errorList.append(recoName+" differs"); - # test for Configuration/StandardSequences - if not 'Extended'+detectorVersion in GeometryConf.keys(): - errorList.append('Extended'+detectorVersion+" missing from GeometryConf") - # test for Geometry/CMSCommonData - if not filecmp.cmp(xmlName,os.path.join(xmlDir,xmlName)): - errorList.append(xmlName+" differs"); - return errorList - -if __name__ == "__main__": - # define options - parser = OptionParser() - for aDict in allDicts: - parser.add_option("-"+aDict["abbrev"],"--"+aDict["name"],dest="v_"+aDict["name"],default=aDict["default"],help="version for "+aDict["name"]+" (default = %default)") - parser.add_option("-V","--version",dest="detectorVersionManual",default=detectorVersionDefault,help="manual detector version number (default = %default)") - parser.add_option("-D","--detector",dest="v_detector",default=0,help="version for whole detector, ignored if 0, overrides subdet versions otherwise (default = %default)") - parser.add_option("-l","--list",dest="doList",default=False,action="store_true",help="list known detector versions and exit (default = %default)") - parser.add_option("-t","--test",dest="doTest",default=False,action="store_true",help="enable unit test mode (default = %default)") - (options, args) = parser.parse_args() - - # check options - if options.doList and not options.doTest: - pprint(sorted(detectorVersionDict.items(),key=operator.itemgetter(1))) - sys.exit(0) - elif options.doTest: - # list of errors - errorList = [] - # run all known possibilities - for detectorTuple in detectorVersionDict: - errorTmp = generateGeom(detectorTuple,options) - errorList.extend(errorTmp) - if len(errorList)>0: - print('\n'.join([anError for anError in errorList])) - sys.exit(1) - else: - sys.exit(0) - else: - detectorTuple = tuple([aDict["abbrev"]+str(getattr(options,"v_"+aDict["name"])) for aDict in allDicts]) - generateGeom(detectorTuple,options) - sys.exit(0) - diff --git a/Configuration/Geometry/scripts/generate2026Geometry.py b/Configuration/Geometry/scripts/generate2026Geometry.py index 8cec21e25e221..56fcdca08366f 100644 --- a/Configuration/Geometry/scripts/generate2026Geometry.py +++ b/Configuration/Geometry/scripts/generate2026Geometry.py @@ -1,180 +1,7 @@ -from __future__ import print_function -from optparse import OptionParser -import sys, os, operator -from pprint import pprint -import filecmp - from Configuration.Geometry.dict2026Geometry import * +from Configuration.Geometry.generateGeometry import * -# define global -detectorVersionDefault = 999 - -def generateGeom(detectorTuple, options): - doTest = bool(options.doTest) - - detectorVersion = "D"+str(options.detectorVersionManual) - # reverse dict search if overall D# specified - if options.v_detector>0: - detectorVersion = "D"+str(options.v_detector) - if detectorVersion in detectorVersionDict.values(): - detectorTuple = detectorVersionDict.keys()[detectorVersionDict.values().index(detectorVersion)] - else: - print("Unknown detector "+detectorVersion) - sys.exit(1) - elif detectorTuple in detectorVersionDict.keys(): - detectorVersion = detectorVersionDict[detectorTuple] - else: - if not doTest: print("Detector "+str(detectorTuple)+" not found in dictionary, using "+("default" if options.detectorVersionManual==detectorVersionDefault else "provided")+" version number "+str(detectorVersion)) - - # check for deprecation - if detectorVersion in deprecatedDets: - print("Error: "+detectorVersion+" is deprecated and cannot be used.") - sys.exit(1) - for subdet in detectorTuple: - if subdet in deprecatedSubdets: - print("Error: "+subdet+" is deprecated and cannot be used.") - sys.exit(1) - - # create output files - xmlName = "cmsExtendedGeometry2026"+detectorVersion+"XML_cfi.py" - simName = "GeometryExtended2026"+detectorVersion+"_cff.py" - recoName = "GeometryExtended2026"+detectorVersion+"Reco_cff.py" - - # check directories - CMSSWBASE = os.getenv("CMSSW_BASE") - CMSSWRELBASE = os.getenv("CMSSW_RELEASE_BASE") - if CMSSWBASE is None: CMSSWBASE = "" - xmlDir = os.path.join(CMSSWBASE,"src","Geometry","CMSCommonData","python") - simrecoDir = os.path.join(CMSSWBASE,"src","Configuration","Geometry","python") - if doTest: - if not os.path.isdir(xmlDir): - xmlDir = os.path.join(CMSSWRELBASE,"src","Geometry","CMSCommonData","python") - else: - mvCommands = "" - if not os.path.isdir(xmlDir): - mvCommands += "mv "+xmlName+" "+xmlDir+"/\n" - else: - xmlName = os.path.join(xmlDir,xmlName) - if not os.path.isdir(simrecoDir): - mvCommands += "mv "+simName+" "+simrecoDir+"/\n" - mvCommands += "mv "+recoName+" "+simrecoDir+"/\n" - else: - simName = os.path.join(simrecoDir,simName) - recoName = os.path.join(simrecoDir,recoName) - if len(mvCommands)>0: - print("Warning: some geometry packages not checked out.\nOnce they are available, please execute the following commands manually:\n"+mvCommands) - - # open files - xmlFile = open(xmlName,'w') - simFile = open(simName,'w') - recoFile = open(recoName,'w') - - # common preamble - preamble = "import FWCore.ParameterSet.Config as cms"+"\n"+"\n" - preamble += "# This config was generated automatically using generate2026Geometry.py"+"\n" - preamble += "# If you notice a mistake, please update the generating script, not just this config"+"\n"+"\n" - - # create XML config - xmlFile.write(preamble) - # extra preamble - xmlFile.write("XMLIdealGeometryESSource = cms.ESSource(\"XMLIdealGeometryESSource\","+"\n") - xmlFile.write(" geomXMLFiles = cms.vstring("+"\n") - for section in range(1,maxsections+1): - # midamble - if section==2: - xmlFile.write(" )+"+"\n"+" cms.vstring("+"\n") - for iDict,aDict in enumerate(allDicts): - if section in aDict[detectorTuple[iDict]].keys(): - xmlFile.write('\n'.join([ " '"+aLine+"'," for aLine in aDict[detectorTuple[iDict]][section] ])+"\n") - # postamble - xmlFile.write(" ),"+"\n"+" rootNodeName = cms.string('cms:OCMS')"+"\n"+")"+"\n") - xmlFile.close() - - # create sim config - simFile.write(preamble) - # always need XML - simFile.write("from Geometry.CMSCommonData."+os.path.basename(xmlName).replace(".py","")+" import *"+"\n") - for iDict,aDict in enumerate(allDicts): - if "sim" in aDict[detectorTuple[iDict]].keys(): - simFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["sim"] ])+"\n") - simFile.close() - - # create reco config - recoFile.write(preamble) - # always need sim - recoFile.write("from Configuration.Geometry."+os.path.basename(simName).replace(".py","")+" import *"+"\n\n") - for iDict,aDict in enumerate(allDicts): - if "reco" in aDict[detectorTuple[iDict]].keys(): - recoFile.write("# "+aDict["name"]+"\n") - recoFile.write('\n'.join([ aLine for aLine in aDict[detectorTuple[iDict]]["reco"] ])+"\n\n") - recoFile.close() - - from Configuration.StandardSequences.GeometryConf import GeometryConf - if not doTest: # todo: include these in unit test somehow - # specify Era customizations - # must be checked manually in: - # Configuration/StandardSequences/python/Eras.py - # Configuration/Eras/python/ - # Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py (workflow definitions) - eraLine = "" - eraLineItems = [] - for iDict,aDict in enumerate(allDicts): - if "era" in aDict[detectorTuple[iDict]].keys(): - eraLineItems.append(aDict[detectorTuple[iDict]]["era"]) - eraLine += ", ".join([ eraLineItem for eraLineItem in eraLineItems ]) - print("The Era for this detector should contain:") - print(eraLine) - - # specify GeometryConf - if not 'Extended2026'+detectorVersion in GeometryConf.keys(): - print("Please add this line in Configuration/StandardSequences/python/GeometryConf.py:") - print(" 'Extended2026"+detectorVersion+"' : 'Extended2026"+detectorVersion+",Extended2026"+detectorVersion+"Reco',") - - errorList = [] - - if doTest: - # tests for Configuration/Geometry - if not filecmp.cmp(simName,os.path.join(simrecoDir,simName)): - errorList.append(simName+" differs"); - if not filecmp.cmp(recoName,os.path.join(simrecoDir,recoName)): - errorList.append(recoName+" differs"); - # test for Configuration/StandardSequences - if not 'Extended2026'+detectorVersion in GeometryConf.keys(): - errorList.append('Extended2026'+detectorVersion+" missing from GeometryConf") - # test for Geometry/CMSCommonData - if not filecmp.cmp(xmlName,os.path.join(xmlDir,xmlName)): - errorList.append(xmlName+" differs"); - return errorList - if __name__ == "__main__": - # define options - parser = OptionParser() - for aDict in allDicts: - parser.add_option("-"+aDict["abbrev"],"--"+aDict["name"],dest="v_"+aDict["name"],default=aDict["default"],help="version for "+aDict["name"]+" (default = %default)") - parser.add_option("-V","--version",dest="detectorVersionManual",default=detectorVersionDefault,help="manual detector version number (default = %default)") - parser.add_option("-D","--detector",dest="v_detector",default=0,help="version for whole detector, ignored if 0, overrides subdet versions otherwise (default = %default)") - parser.add_option("-l","--list",dest="doList",default=False,action="store_true",help="list known detector versions and exit (default = %default)") - parser.add_option("-t","--test",dest="doTest",default=False,action="store_true",help="enable unit test mode (default = %default)") - (options, args) = parser.parse_args() - - # check options - if options.doList and not options.doTest: - pprint(sorted(detectorVersionDict.items(),key=operator.itemgetter(1))) - sys.exit(0) - elif options.doTest: - # list of errors - errorList = [] - # run all known possibilities - for detectorTuple in detectorVersionDict: - errorTmp = generateGeom(detectorTuple,options) - errorList.extend(errorTmp) - if len(errorList)>0: - print('\n'.join([anError for anError in errorList])) - sys.exit(1) - else: - sys.exit(0) - else: - detectorTuple = tuple([aDict["abbrev"]+str(getattr(options,"v_"+aDict["name"])) for aDict in allDicts]) - generateGeom(detectorTuple,options) - sys.exit(0) - + # create geometry generator object w/ 2026 content and run it + generator2026 = GeometryGenerator("generate2026Geometry.py",999,"D","2026",maxSections,allDicts,detectorVersionDict,deprecatedDets,deprecatedSubdets) + generator2026.run() diff --git a/Configuration/Geometry/test/BuildFile.xml b/Configuration/Geometry/test/BuildFile.xml index 5da56db040113..23d2cc2bad224 100644 --- a/Configuration/Geometry/test/BuildFile.xml +++ b/Configuration/Geometry/test/BuildFile.xml @@ -1,4 +1,4 @@ - - - - + + + + diff --git a/Configuration/Geometry/test/TestDriver.cpp b/Configuration/Geometry/test/TestDriver.cpp deleted file mode 100644 index b2991bd18ae57..0000000000000 --- a/Configuration/Geometry/test/TestDriver.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "FWCore/Utilities/interface/TestHelper.h" - -RUNTEST() diff --git a/Configuration/Geometry/test/runtests.sh b/Configuration/Geometry/test/runtests.sh deleted file mode 100755 index 5a9a11d276af4..0000000000000 --- a/Configuration/Geometry/test/runtests.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -python $CMSSW_BASE/src/Configuration/Geometry/scripts/generate2026Geometry.py -t -python $CMSSW_BASE/src/Configuration/Geometry/scripts/generate2021Geometry.py -t diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D35.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D35.xml index 9c80ced7c6f5e..52eaa3881d51f 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D35.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D35.xml @@ -4,122 +4,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D41.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D41.xml index ff2376cc689b8..d03e5e816b5c2 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D41.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D41.xml @@ -4,121 +4,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D43.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D43.xml index 443b066c30e93..d27f22760dd11 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D43.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D43.xml @@ -4,122 +4,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D44.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D44.xml new file mode 100644 index 0000000000000..30770072d2449 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D44.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D45.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D45.xml index c3dedc04f74a0..2a60418e6fc84 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D45.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D45.xml @@ -4,121 +4,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D46.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D46.xml index 082fc61ff4674..66d5d31a66a34 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D46.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D46.xml @@ -4,121 +4,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D47.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D47.xml index da8229e30f03c..db82e96da8bb6 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D47.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D47.xml @@ -4,128 +4,127 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D48.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D48.xml index 4164bcfa3f30b..1a0e3701d418f 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D48.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D48.xml @@ -4,121 +4,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml index 36841cfe944bb..53d9c1fd76da0 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D49.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml index 8d3311865262b..8a724dae0e8ce 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D50.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D51.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D51.xml index 7f2c63befe4be..1d220cd6572e0 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D51.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D51.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D53.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D53.xml new file mode 100644 index 0000000000000..bf11ed9ed8639 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D53.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D54.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D54.xml index ad86d19727948..b688796327772 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D54.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D54.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D55.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D55.xml index 49d72c7f969c9..87ccf291c63a7 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D55.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D55.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D56.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D56.xml index cbcf818efb52b..40a37cfbf7c33 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D56.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D56.xml @@ -4,123 +4,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D57.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D57.xml index 8cad963dcb2eb..9dc681ecd127e 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D57.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D57.xml @@ -4,123 +4,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D58.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D58.xml index 4f3e569e2edaa..c0b39d3f6ef83 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D58.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D58.xml @@ -4,130 +4,128 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D59.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D59.xml new file mode 100644 index 0000000000000..39cf53d894750 --- /dev/null +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D59.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +