Rearranged PMA modules D. Stefan, R. Sulej, T. Yang Review recommendation: modularization different tracking flows were living in a single module, tracking functionality was also included in the module code tracking functionality extracted to algorithm classes two specialized modules instead of one implemented some other recommendations done while moving code Code tested, this is the second part of review recommendations implemented, would like to merge with develop. 1
Review recommendation: modularization different tracking flows were living in a single module, tracking functionality was also included in the module code tracking functionality extracted to algorithm classes PMAlgTrackingBase for common things: input data, output of reconstruction, basic PMA algorithms and tracking functionality (actually only helper for isochron tracks is common for two derived algs) PMAlgTracker : set of methods for matching 2D clusters and building/extending/stiching tracks PMAlgFitter : more input data (PFParticles and associations), and simple methods to create trajectory fits to track-like objects and segment fits to initial parts of shower-like objects vertexing functionality avalilable to both algorithms, now used only by „ full ” tracking algorithm (where it is free to decide on track breaking); need to add more simple way of using it with „ fit only ” algorithm (where it could do a good job of fitting many tracks from a single vertex) but need convention on particle-interaction vertex in input data products… two specialized modules implemented PMAlgTrackMaker_module to work on 2D clusters at input and do the complete event topology reconstruction (3D tracks, 3D vertices, particle hierarchy) PMAlgTrajFitter_module to create only 3D trajectory fits for the elsewhere prepared topology (particles associated to their 2D clusters are the input) only relevant data products registered less complicated configuration no „ if-elses ” in the module flow some other recommendations done while moving code FHiCL parameter set validation in all PMA algorithms and modules no allocated memory out of produce() methods, algorithms are local to produce() minor cosmetics, e.g.: use art::InputTag instead of std::string labels, use std::make_unique instead of std::unique_ptr constructors 2
Configuration changes # NEW (added algorithm config) # NEW (more clear way to configure em-like tagged clusters) # REMOVED (parameters moved from modules to algorithms) # REMOVED (parameters no longer needed) standard_pmalgtrackmaker: { module_type: "PMAlgTrackMaker" ProjectionMatchingAlg: @local::standard_projectionmatchingalg PMAlgTracking: @local::standard_pmalgtracker PMAlgVertexing: @local::standard_pmavertexalg # # RunVertexing: false # find vertices, join with tracks, reoptimize track-vertex structure SaveOnlyBranchingVtx: false # use true to save only vertices interconnecting many tracks, otherwise # vertex is added to the front of each track SavePmaNodes: false # save track nodes (only for algorithm development purposes) # # MakePFPs: false # PFParticles are always created for „ full tracking ” and never for „ fit-only ” # (then input PFPs are used and reconstructed trajectories are assigned to them) # CluMatchingAlg: 1 # two modules are now used instead of flow options in one module HitModuleLabel: "hits" # unclustered hits are used for tracks validation ClusterModuleLabel: "cluster" # cluster module label, these clusters are used for track building EmClusterModuleLabel: "" # EM-like clusters, will be excluded from tracking if provided # # MinSeedSize1stPass: 20 # min. cluster size used to start building a track in the 1st pass # MinSeedSize2ndPass: 4 # ..and in the 2nd pass: differentiate to speed up finding long tracks # w/o checking large number of possibilities, then use as small size # as reasonnable for used clustering algorithm to complete the search # in the second pass # FlipToBeam: false # set the track direction to increasing Z values # FlipDownward: false # set the track direction to decreasing Y values (like cosmic rays) # AutoFlip_dQdx: false # set the track direction to increasing dQ/dx (overrides FlipToBeam # and FlipDownward if significant rise of dQ/dx at the track end) # MergeWithinTPC: false # merge witnin single TPC; finds tracks best matching by angle, with limits: # MergeTransverseShift: 2.0 # - max. transverse displacement [cm] between tracks # MergeAngle: 2.0 # - max. angle [degree] between tracks (nearest segments) # StitchBetweenTPCs: true # stitch between TPCs; finds tracks best matching by angle, with limits: # StitchDistToWall: 3.0 # - max. track endpoint distance [cm] to TPC boundary # StitchTransverseShift: 3.0 # - max. transverse displacement [cm] between tracks # StitchAngle: 10.0 # - max. angle [degree] between tracks (nearest segments) # MatchT0inAPACrossing: false # match T0 of APA-crossing tracks, TPC stitching limits are used, but track # parts are not stitched into a single recob::Track 3 }
Configuration changes # NEW (fit-only algorithm): # Trajectory fit using PMA. # Input: clusters associated to PFParticles. # Output: 3D trajectories associated to PFParticles. # Simply use all clusters associated to each PFParticle and fit 3D trajectories (no pattern recognition at all, # no corrections to input objects, etc). Resulting trajectories are associated to existing PFPs. standard_pmalgtrajfitter: { module_type: "PMAlgTrajFitter" ProjectionMatchingAlg: @local::standard_projectionmatchingalg PMAlgFitting: @local::standard_pmalgfitter PMAlgVertexing: @local::standard_pmavertexalg # SaveOnlyBranchingVtx: false # use true to save only vertices interconnecting many tracks, otherwise # vertex is added to the front of each track SavePmaNodes: false # save track nodes (only for algorithm development purposes) # HitModuleLabel: "hits" # tag of unclustered hits, which were used to produce PFPs and clusters PfpModuleLabel: "pandora" # tag of the input PFParticles and associated clusters } 4
Configuration changes # NEW (added algorithm config) standard_pmalgtracker: { MinSeedSize1stPass: 20 # min. cluster size used to start building a track in the 1st pass MinSeedSize2ndPass: 4 # ..and in the 2nd pass: differentiate to speed up finding long tracks # w/o checking large number of possibilities, then use as small size # as reasonnable for used clustering algorithm to complete the search # in the second pass # RunVertexing: false # find vertices, join with tracks, reoptimize track-vertex structure # FlipToBeam: false # set the track direction to increasing Z values FlipDownward: false # set the track direction to decreasing Y values (like cosmic rays) AutoFlip_dQdx: false # set the track direction to increasing dQ/dx (overrides FlipToBeam # and FlipDownward if significant rise of dQ/dx at the track end) # MergeWithinTPC: false # merge witnin single TPC; finds tracks best matching by angle, with limits: MergeTransverseShift: 2.0 # - max. transverse displacement [cm] between tracks MergeAngle: 2.0 # - max. angle [degree] between tracks (nearest segments) # StitchBetweenTPCs: true # stitch between TPCs; finds tracks best matching by angle, with limits: StitchDistToWall: 3.0 # - max. track endpoint distance [cm] to TPC boundary StitchTransverseShift: 3.0 # - max. transverse displacement [cm] between tracks StitchAngle: 10.0 # - max. angle [degree] between tracks (nearest segments) # MatchT0inAPACrossing: false # match T0 of APA-crossing tracks, TPC stitching limits are used, but track # parts are not stitched into a single recob::Track } standard_pmalgfitter: { TrackingOnlyPdg: [0] # PDG list to select which PFParticles should be reconstructed; # all PFP's are used if the list is empty or starts with 0 TrackingSkipPdg: [11] # PDG list to select which PFParticles should NOT be reconstructed, # e.g. skip EM showers; no skipping if the list is empty or starts with 0 # RunVertexing: false # find vertices, join with tracks, reoptimize track-vertex structure } 5
Recommend
More recommend