Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-11 07:50:49

0001 #!/usr/bin/env python3
0002 
0003 import os
0004 from pathlib import Path
0005 
0006 import acts
0007 from acts import MaterialMapJsonConverter
0008 from acts.examples.odd import getOpenDataDetector
0009 from acts.examples import (
0010     WhiteBoard,
0011     AlgorithmContext,
0012     ProcessCode,
0013     CsvTrackingGeometryWriter,
0014     ObjTrackingGeometryWriter,
0015     JsonSurfacesWriter,
0016     JsonMaterialWriter,
0017     JsonFormat,
0018 )
0019 
0020 
0021 def runGeometry(
0022     trackingGeometry,
0023     decorators,
0024     outputDir: Path,
0025     events=1,
0026     outputObj=True,
0027     outputCsv=True,
0028     outputJson=True,
0029 ):
0030     for ievt in range(events):
0031         eventStore = WhiteBoard(name=f"EventStore#{ievt}", level=acts.logging.INFO)
0032         ialg = 0
0033         ithread = 0
0034 
0035         context = AlgorithmContext(ialg, ievt, eventStore, ithread)
0036 
0037         for cdr in decorators:
0038             r = cdr.decorate(context)
0039             if r != ProcessCode.SUCCESS:
0040                 raise RuntimeError("Failed to decorate event context")
0041 
0042         if outputCsv:
0043             # if not os.path.isdir(outputDir + "/csv"):
0044             #    os.makedirs(outputDir + "/csv")
0045             writer = CsvTrackingGeometryWriter(
0046                 level=acts.logging.INFO,
0047                 trackingGeometry=trackingGeometry,
0048                 outputDir=str(outputDir / "csv"),
0049                 writePerEvent=True,
0050             )
0051             writer.write(context)
0052 
0053         if outputObj:
0054             writer = ObjTrackingGeometryWriter(
0055                 level=acts.logging.INFO, outputDir=outputDir / "obj"
0056             )
0057             writer.write(context, trackingGeometry)
0058 
0059         if outputJson:
0060             # if not os.path.isdir(outputDir + "/json"):
0061             #    os.makedirs(outputDir + "/json")
0062             writer = JsonSurfacesWriter(
0063                 level=acts.logging.INFO,
0064                 trackingGeometry=trackingGeometry,
0065                 outputDir=str(outputDir / "json"),
0066                 writePerEvent=True,
0067                 writeSensitive=True,
0068             )
0069             writer.write(context)
0070 
0071             jmConverterCfg = MaterialMapJsonConverter.Config(
0072                 processSensitives=True,
0073                 processApproaches=True,
0074                 processRepresenting=True,
0075                 processBoundaries=True,
0076                 processVolumes=True,
0077                 processNonMaterial=True,
0078                 context=context.geoContext,
0079             )
0080 
0081             jmw = JsonMaterialWriter(
0082                 level=acts.logging.VERBOSE,
0083                 converterCfg=jmConverterCfg,
0084                 fileName=str(outputDir / "geometry-map"),
0085                 writeFormat=JsonFormat.Json,
0086             )
0087 
0088             jmw.write(trackingGeometry)
0089 
0090 
0091 if "__main__" == __name__:
0092     # detector = GenericDetector()
0093     detector = getOpenDataDetector()
0094     trackingGeometry = detector.trackingGeometry()
0095     decorators = detector.contextDecorators()
0096 
0097     runGeometry(trackingGeometry, decorators, outputDir=Path.cwd())
0098 
0099     # Uncomment if you want to create the geometry id mapping for DD4hep
0100     # dd4hepIdGeoIdMap = acts.examples.dd4hep.createDD4hepIdGeoIdMap(trackingGeometry)
0101     # dd4hepIdGeoIdValueMap = {}
0102     # for key, value in dd4hepIdGeoIdMap.items():
0103     #     dd4hepIdGeoIdValueMap[key] = value.value()
0104 
0105     # with open('odd-dd4hep-geoid-mapping.json', 'w') as outfile:
0106     #    json.dump(dd4hepIdGeoIdValueMap, outfile)