Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 08:03:18

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