Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:10:09

0001 #!/usr/bin/env python3
0002 
0003 import os
0004 import json
0005 
0006 import acts
0007 from acts import MaterialMapJsonConverter
0008 from acts.examples.odd import getOpenDataDetector
0009 from acts.examples import (
0010     GenericDetector,
0011     AlignedDetector,
0012     WhiteBoard,
0013     AlgorithmContext,
0014     ProcessCode,
0015     CsvTrackingGeometryWriter,
0016     ObjTrackingGeometryWriter,
0017     JsonSurfacesWriter,
0018     JsonMaterialWriter,
0019     JsonFormat,
0020 )
0021 
0022 
0023 def runGeometry(
0024     trackingGeometry,
0025     decorators,
0026     outputDir,
0027     events=1,
0028     outputObj=True,
0029     outputCsv=True,
0030     outputJson=True,
0031 ):
0032     for ievt in range(events):
0033         eventStore = WhiteBoard(name=f"EventStore#{ievt}", level=acts.logging.INFO)
0034         ialg = 0
0035 
0036         context = AlgorithmContext(ialg, ievt, eventStore)
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=os.path.join(outputDir, "csv"),
0050                 writePerEvent=True,
0051             )
0052             writer.write(context)
0053 
0054         if outputObj:
0055             writer = ObjTrackingGeometryWriter(
0056                 level=acts.logging.INFO, outputDir=os.path.join(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=os.path.join(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=os.path.join(outputDir, "geometry-map"),
0086                 writeFormat=JsonFormat.Json,
0087             )
0088 
0089             jmw.write(trackingGeometry)
0090 
0091 
0092 if "__main__" == __name__:
0093     detector, trackingGeometry, decorators = AlignedDetector.create()
0094     # detector, trackingGeometry, decorators = GenericDetector.create()
0095     # detector, trackingGeometry, decorators = getOpenDataDetector()
0096 
0097     runGeometry(trackingGeometry, decorators, outputDir=os.getcwd())
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)