Skip to content
Snippets Groups Projects
tracker_reconstruction.py 4.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • from Gaudi.Configuration import *
    
    from GaudiKernel.DataObjectHandleBase import DataObjectHandleBase
    from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc
    
    detector_name = "topside"
    if "JUGGLER_DETECTOR" in os.environ :
      detector_name = str(os.environ["JUGGLER_DETECTOR"])
    
    # todo add checks
    input_sim_file  = str(os.environ["JUGGLER_SIM_FILE"])
    output_rec_file = str(os.environ["JUGGLER_REC_FILE"])
    n_events = str(os.environ["JUGGLER_N_EVENTS"])
    
    geo_service  = GeoSvc("GeoSvc", detectors=["{}.xml".format(detector_name)])
    podioevent   = EICDataSvc("EventDataSvc", inputs=[input_sim_file], OutputLevel=DEBUG)
    
    from Configurables import PodioInput
    from Configurables import Jug__Digi__ExampleCaloDigi as ExampleCaloDigi
    from Configurables import Jug__Digi__UFSDTrackerDigi as UFSDTrackerDigi
    from Configurables import Jug__Reco__TrackerHitReconstruction as TrackerHitReconstruction
    from Configurables import Jug__Reco__TrackerSourceLinker as TrackerSourceLinker
    from Configurables import Jug__Reco__TrackParamTruthInit as TrackParamTruthInit
    from Configurables import Jug__Reco__TrackFindingAlgorithm as TrackFindingAlgorithm
    from Configurables import Jug__Reco__ParticlesFromTrackFit as ParticlesFromTrackFit
    from Configurables import Jug__Base__InputCopier_dd4pod__Geant4ParticleCollection_dd4pod__Geant4ParticleCollection_ as MCCopier
    from Configurables import Jug__Base__InputCopier_dd4pod__CalorimeterHitCollection_dd4pod__CalorimeterHitCollection_ as CalCopier
    from Configurables import Jug__Base__InputCopier_dd4pod__TrackerHitCollection_dd4pod__TrackerHitCollection_ as TrkCopier
    
    
    podioinput = PodioInput("PodioReader", 
                            collections=["mcparticles","SiTrackerBarrelHits"])#, OutputLevel=DEBUG)
    
    ## copiers to get around input --> output copy bug. Note the "2" appended to the output collection.
    copier = MCCopier("MCCopier", inputCollection="mcparticles", outputCollection="mcparticles2",OutputLevel=DEBUG) 
    trkcopier = TrkCopier("TrkCopier", inputCollection="SiTrackerBarrelHits", outputCollection="SiTrackerBarrelHits2",OutputLevel=DEBUG) 
    #caldigi = ExampleCaloDigi(inputHitCollection="FAEC_ShHits",outputHitCollection="RawFAECShowerHits")
    #ufsd_digi = UFSDTrackerDigi("ufsd_digi", inputHitCollection="SiVertexBarrelHits",outputHitCollection="VertexRawHits",timeResolution=8)
    ufsd_digi = UFSDTrackerDigi("ufsd_digi", inputHitCollection="SiTrackerBarrelHits",outputHitCollection="SiTrackerBarrelRawHits",timeResolution=8)
    
    trackpartruth = TrackParamTruthInit("trk_par_init",inputMCParticles="mcparticles",outputInitialTrackParameters="InitTrackParams",OutputLevel=DEBUG)
    
    trackerhit = TrackerHitReconstruction("trk_hit_reco",inputHitCollection="SiTrackerBarrelRawHits",outputHitCollection="TrackerBarrelRecHits",OutputLevel=DEBUG)
    sourcelinker = TrackerSourceLinker("trk_srclinker",inputHitCollection="TrackerBarrelRecHits",outputSourceLinks="BarrelTrackSourceLinks",OutputLevel=DEBUG)
    trk_find_alg = TrackFindingAlgorithm("trk_find_alg",inputSourceLinks="BarrelTrackSourceLinks",inputInitialTrackParameters= "InitTrackParams", outputTrajectories="trajectories",OutputLevel=DEBUG)
    
    parts_from_fit = ParticlesFromTrackFit("parts_from_fit",inputTrajectories="trajectories",outputParticles="ReconstructedParticles",OutputLevel=DEBUG)
    
    
    #types = []
    ## this printout is useful to check that the type information is passed to python correctly
    #print("---------------------------------------\n")
    #print("---\n# List of input and output types by class")
    #for configurable in sorted([ PodioInput, EICDataSvc, PodioOutput,
    #                             TrackerHitReconstruction,ExampleCaloDigi, 
    #                             UFSDTrackerDigi, TrackerSourceLinker,
    #                             PodioOutput],
    #                           key=lambda c: c.getType()):
    #    print("\"{}\":".format(configurable.getType()))
    #    props = configurable.getDefaultProperties()
    #    for propname, prop in sorted(props.items()):
    #        print(" prop name: {}".format(propname))
    #        if isinstance(prop, DataObjectHandleBase):
    #            types.append(prop.type())
    #            print("  {}: \"{}\"".format(propname, prop.type()))
    #print("---")
    
    out = PodioOutput("out", filename=output_rec_file)
    out.outputCommands = ["keep *", 
            "drop BarrelTrackSourceLinks", 
            "drop InitTrackParams",
            "drop trajectories",
            "drop outputSourceLinks",
            "drop outputInitialTrackParameters"
            ]
    
    ApplicationMgr(
        TopAlg = [podioinput, 
    
                  #copier, trkcopier,
    
                  ufsd_digi, trackerhit, 
                  sourcelinker, trackpartruth, 
                  trk_find_alg, parts_from_fit,
                  out
                  ],
        EvtSel = 'NONE',
        EvtMax   = n_events,
        ExtSvc = [podioevent,geo_service],
        OutputLevel=DEBUG
     )