8 from .
import utilities
9 from .event_generation
import ReadOrGenerateEventsRun
15 return logging.getLogger(__name__)
19 """ Apply tracking to presimulated events or events generated on the fly """
22 description =
"Apply tracking to presimulated events or events generated on the fly."
32 'UseOnlyAxialCDCHits':
False,
33 'UseOnlyBeforeTOP':
True,
34 'UseReassignedHits':
True,
43 """Convert command-line arguments to basf2 argument list"""
46 tracking_argument_group = argument_parser.add_argument_group(
"Tracking setup arguments")
48 tracking_argument_group.add_argument(
54 help=
'Name of the finder module to be evaluated.',)
56 tracking_argument_group.add_argument(
61 help=
'Apply the fitting to the found tracks'
64 return argument_parser
67 """Sets up a path that plays back pregenerated events or generates events
68 based on the properties in the base class."""
74 if 'SetupGenfitExtrapolation' not in path:
76 path.add_module(
'SetupGenfitExtrapolation')
80 utilities.extend_path(path,
82 finder_modules_by_short_name,
83 allow_function_import=
True)
88 matching_coverage = {key: value
for key, value
in tracking_coverage.items()
89 if key
in (
'UsePXDHits',
'UseSVDHits',
'UseCDCHits',
'MinimalEfficiency',
'MinimalPurity')}
91 if "MinimalEfficiency" in tracking_coverage:
92 tracking_coverage.pop(
"MinimalEfficiency")
93 if "MinimalPurity" in tracking_coverage:
94 tracking_coverage.pop(
"MinimalPurity")
97 if 'MCRecoTracksMatcher' not in path:
99 track_finder_mc_truth_module = basf2.register_module(
'TrackFinderMCTruthRecoTracks')
102 mc_track_matcher_module = basf2.register_module(
'MCRecoTracksMatcher')
109 for module
in path.modules():
110 if 'MCRecoTracksMatcher' in module.name():
112 'mcRecoTracksStoreArrayName':
'MCRecoTracks',
113 'MinimalPurity': 0.66,
114 'prRecoTracksStoreArrayName':
"RecoTracks",
117 if 'TrackFinderMCTruthRecoTracks' in module.name():
119 'RecoTracksStoreArrayName':
'MCRecoTracks',
125 gen_fitter_module = basf2.register_module(
'DAFRecoFitter')
126 gen_fitter_module.param({
'pdgCodesToUseForFitting': [13]})
127 path.add_module(gen_fitter_module)
128 trackbuilder = basf2.register_module(
'TrackCreator', pdgCodes=[13])
129 path.add_module(trackbuilder)
134 def add_standard_finder(path):
135 """adds the standard track finding to the path"""
139 for module
in path.modules():
140 if module.type() ==
"Geometry":
141 components = utilities.get_module_param(module,
"components")
145 if 'SetupGenfitExtrapolation' not in path:
146 path.add_module(
'SetupGenfitExtrapolation', energyLossBrems=
False, noiseBrems=
False)
151 def add_cosmics_finder(path):
154 for module
in path.modules():
155 if module.type() ==
"Geometry":
156 components = utilities.get_module_param(module,
"components")
160 if 'SetupGenfitExtrapolation' not in path:
161 path.add_module(
'SetupGenfitExtrapolation', energyLossBrems=
False, noiseBrems=
False)
166 def add_standard_reconstruction(path):
167 import reconstruction
169 for module
in path.modules():
170 if module.type() ==
"Geometry":
171 components = utilities.get_module_param(module,
"components")
177 def add_cosmics_reconstruction(path):
178 import reconstruction
180 for module
in path.modules():
181 if module.type() ==
"Geometry":
182 components = utilities.get_module_param(module,
"components")
188 finder_modules_by_short_name = {
189 'MC':
'TrackFinderMCTruthRecoTracks',
190 'Reconstruction': add_standard_reconstruction,
191 'CosmicsReconstruction': add_cosmics_reconstruction,
192 'TrackFinder': add_standard_finder,
193 'CosmicsTrackFinder': add_cosmics_finder,
194 'TrackFinderVXD': tracking.add_vxd_track_finding_vxdtf2,
195 'TFCDC':
lambda path: tracking.add_cdc_track_finding(path, with_ca=
True),
196 'TFCDC_Cosmics':
lambda path: tracking.add_cdc_cr_track_finding(path),
197 'TFCDC_Global': tracking.add_cdc_track_finding,
198 'TFCDC_Ca':
lambda path: (path.add_module(
'TFCDC_WireHitPreparer',
199 flightTimeEstimation=
"outwards"),
200 path.add_module(
'TFCDC_ClusterPreparer',
201 SuperClusterDegree=3,
202 SuperClusterExpandOverApogeeGap=
True),
203 path.add_module(
'TFCDC_SegmentFinderFacetAutomaton'),
204 path.add_module(
"TFCDC_TrackFinderSegmentPairAutomaton"),
205 path.add_module(
"TFCDC_TrackCreatorSingleSegments",
206 MinimalHitsBySuperLayerId={0: 15}),
207 path.add_module(
'TFCDC_TrackExporter')),
208 'TFCDC_Axial':
lambda path: (path.add_module(
'TFCDC_WireHitPreparer',
209 flightTimeEstimation=
"outwards"),
210 path.add_module(
'TFCDC_ClusterPreparer'),
211 path.add_module(
'TFCDC_AxialTrackFinderLegendre'),
212 path.add_module(
'TFCDC_TrackExporter')),
213 'TFCDC_Segments':
lambda path: (path.add_module(
'TFCDC_WireHitPreparer',
214 flightTimeEstimation=
"outwards"),
215 path.add_module(
'TFCDC_ClusterPreparer'),
216 path.add_module(
'TFCDC_SegmentFinderFacetAutomaton'),
217 path.add_module(
'TFCDC_TrackCreatorSingleSegments',
218 MinimalHitsBySuperLayerId={sl_id: 0
for sl_id
in range(9)}),
219 path.add_module(
'TFCDC_TrackExporter')),
220 'TFCDC_MCSegments':
lambda path: (path.add_module(
'TFCDC_WireHitPreparer',
221 flightTimeEstimation=
"outwards"),
222 path.add_module(
'TFCDC_SegmentCreatorMCTruth'),
223 path.add_module(
'TFCDC_SegmentLinker',
224 segments=
"CDCSegment2DVector",
226 path.add_module(
'TFCDC_TrackCreatorSingleSegments',
227 MinimalHitsBySuperLayerId={sl_id: 0
for sl_id
in range(9)}),
228 path.add_module(
'TFCDC_TrackExporter')),
229 'FirstLoop':
lambda path: path.add_module(
'TFCDC_WireHitPreparer', UseNLoops=1.0),
234 """Generate, simulate and reconstruct events"""
236 generator_module =
'EvtGenInput'
239 """Add track reconstruction to the basf2 path"""