Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-25 09:01:41

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