Belle II Software development
SegmentFitValidationRun Class Reference
Inheritance diagram for SegmentFitValidationRun:
HarvestingRun HarvestingRunMixin StandardEventGenerationRun BrowseTFileOnTerminateRunMixin PostProcessingRunMixin ReadOrGenerateEventsRun PostProcessingRunMixin EmptyRun MinimalRun EmptyRun EmptyRun

Public Member Functions

 output_file_name (self)
 
 harvesting_module (self, path=None)
 
 create_argument_parser (self, **kwds)
 
 create_path (self)
 
 pickle_crops (self, harvesting_module, crops, **kwds)
 
 unpickle_crops (self)
 
 postprocess (self)
 
 adjust_path (self, path)
 
 run (self, path)
 
 name (self)
 
 configure_and_execute_from_commandline (self)
 
 execute (self)
 
 configure_from_commandline (self)
 
 configure (self, arguments)
 

Public Attributes

 pickle_crops = self.output_file_name
 

Static Public Attributes

str monte_carlo = "no"
 do not generate new events
 
bool karimaki_fit = False
 use the Riemann fit instead of the Karimaki fit
 
str flight_time_estimation = "none"
 do not estimate the flight time
 
bool flight_time_reestimation = False
 do not re-estimate the flight time
 
bool use_alpha_in_drift_length = True
 use the alpha parameter for drift length
 
 flight_time_mass_scale = float("nan")
 assume a very heavy particle for flight time calculation
 
str fit_positions = "recoPos"
 fit the reconstructed hit position for the segment fit
 
str fit_variance = "proper"
 use the drift-length variance in the segment fit
 
bool show_results = False
 By default, do not show the browsing results.
 
bool postprocess_only = False
 By default, browse the output TFile too.
 
str description = "Empty execution of basf2"
 Description of the run setup to be displayed on command line.
 
 generator_module = None
 By default, do not generate events.
 
str detector_setup = "Default"
 By default, use the default detector setup.
 
list bkg_files = []
 By default, no background overlay.
 
 components = None
 By default, do specific components.
 
bool disable_deltas = False
 By default, do not disable delta-ray generation.
 
 simulation_output = None
 By default, do no store the simulation output.
 
bool allow_input = True
 By default, this basf2 job can read events from an input ROOT TFile.
 
int n_events = 10000
 By default, process 10000 events.
 
 root_input_file = None
 By default, there is no input ROOT TFile.
 
 random_seed = None
 By default, the random-number seed is unassigned.
 
int n_processes = 0
 By default, no parallel processing.
 
int n_events_to_skip = 0
 By default, do not skip any events at the start of the input ROOT TFile.
 

Detailed Description

Harvester to read, postprocess and inspect MC events for track-segment fit validation

Definition at line 34 of file record.py.

Member Function Documentation

◆ adjust_path()

adjust_path ( self,
path )
inherited
Add the harvester to the basf2 path

Reimplemented from EmptyRun.

Definition at line 66 of file run.py.

66 def adjust_path(self, path):
67 """Add the harvester to the basf2 path"""
68 super().adjust_path(path)
69 harvesting_module = self.harvesting_module()
70 if self.output_file_name:
71 harvesting_module.output_file_name = self.output_file_name
72 harvesting_module.refiners.append(self.pickle_crops)
73 path.add_module(harvesting_module)
74 return path
75
76

◆ configure()

configure ( self,
arguments )
inherited
Save the command-line arguments as key-value pairs

Reimplemented in CDCDisplayRun, and ReadOrGenerateEventsRun.

Definition at line 73 of file minimal.py.

73 def configure(self, arguments):
74 """Save the command-line arguments as key-value pairs"""
75 # Simply translate the arguments that have
76 # the same name as valid instance arguments
77 for (key, value) in list(vars(arguments).items()):
78 if value is None:
79 continue
80 if hasattr(self, key):
81 get_logger().info("Setting %s to %s", key, value)
82 setattr(self, key, value)
83

◆ configure_and_execute_from_commandline()

configure_and_execute_from_commandline ( self)
inherited
Configure basf2 job script from command-line arguments then run it

Definition at line 45 of file minimal.py.

45 def configure_and_execute_from_commandline(self):
46 """Configure basf2 job script from command-line arguments then run it"""
47 self.configure_from_commandline()
48 self.execute()
49

◆ configure_from_commandline()

configure_from_commandline ( self)
inherited
Convert the command-line arguments to a basf2 job script

Definition at line 67 of file minimal.py.

67 def configure_from_commandline(self):
68 """Convert the command-line arguments to a basf2 job script"""
69 argument_parser = self.create_argument_parser()
70 arguments = argument_parser.parse_args()
71 self.configure(arguments)
72

◆ create_argument_parser()

create_argument_parser ( self,
** kwds )
Convert command-line arguments to basf2 argument list

Reimplemented from HarvestingRunMixin.

Definition at line 83 of file record.py.

83 def create_argument_parser(self, **kwds):
84 """Convert command-line arguments to basf2 argument list"""
85 argument_parser = super().create_argument_parser(**kwds)
86
87 argument_parser.add_argument(
88 '-m',
89 '--monte-carlo',
90 choices=["no", "medium", "full"],
91 default=self.monte_carlo,
92 dest='monte_carlo',
93 help='Amount of monte carlo information to be used in the segment generation.',
94 )
95
96 argument_parser.add_argument(
97 "-k",
98 "--karimaki",
99 dest="karimaki_fit",
100 action="store_true",
101 help='Use Karimaki fit instead of Riemann fit'
102 )
103
104 argument_parser.add_argument(
105 "-fp",
106 "--fit-pos",
107 choices=["recoPos", "rlDriftCircle", "wirePos"],
108 default=self.fit_positions,
109 dest="fit_positions",
110 help=("Choose which positional information the segment fit should be used. \n"
111 "* 'wirePos' means only the wire position\n"
112 "* 'recoPos' means only the reconstructed position\n"
113 "* 'rlDriftCircle' means only the drift circle with the right left passage\n")
114 )
115
116 argument_parser.add_argument(
117 "-fv",
118 "--fit-var",
119 choices=["unit", "driftLength", "pseudo", "proper"],
120 default=self.fit_variance,
121 dest="fit_variance",
122 help=("Choose which variance information the segment fit should be used. \n"
123 "* 'unit' means equal variance of 1\n"
124 "* 'driftLength' means inserting the drift length as variance, very improper because dimension mismatch\n"
125 "* 'pseudo' means the squared dirft length + plus the drift length variance "
126 "(correct dimension, proper lower bound)\n"
127 "* 'proper' means only the drift length variance\n")
128 )
129
130 argument_parser.add_argument(
131 "-ft",
132 "--flight-time-estimation",
133 choices=["none", "outwards", "downwards"],
134 default=self.flight_time_estimation,
135 dest="flight_time_estimation",
136 help=("Choose which estimation method for the time of flight should be use. \n"
137 "* 'none' no time of flight corrections\n"
138 "* 'outwards' means the minimal time needed to travel to the wire from the interaction point \n"
139 "* 'downwards' means the minimal time needed to travel to the wire from the y = 0 plane downwards \n")
140 )
141
142 argument_parser.add_argument(
143 "-fr",
144 "--flight-time-reestimation",
145 action="store_true",
146 dest="flight_time_reestimation",
147 help=("Switch to reestimate drift length before fitting.")
148 )
149
150 argument_parser.add_argument(
151 "-fa",
152 "--use-alpha-in-drift-length",
153 action="store_true",
154 dest="use_alpha_in_drift_length",
155 help=("Switch to serve the alpha angle to the drift length translator.")
156 )
157
158 argument_parser.add_argument(
159 "-fm",
160 "--flight-time-mass-scale",
161 type=float,
162 dest="flight_time_mass_scale",
163 help=("Mass parameter to estimate the velocity in the time of flight estimation")
164 )
165
166 return argument_parser
167

◆ create_path()

create_path ( self)
Sets up a path that plays back pregenerated events or generates events based on the properties in the base class.

Reimplemented from EmptyRun.

Definition at line 168 of file record.py.

168 def create_path(self):
169 """
170 Sets up a path that plays back pregenerated events or generates events
171 based on the properties in the base class.
172 """
173 path = super().create_path()
174
175 path.add_module("TFCDC_WireHitPreparer",
176 flightTimeEstimation=self.flight_time_estimation,
177 UseNLoops=1
178 )
179
180 path.add_module("TFCDC_ClusterPreparer")
181
182
183 if self.monte_carlo == "no":
184 # MC free - default
185 path.add_module(
186 "TFCDC_SegmentFinderFacetAutomaton",
187 # investigate=[],
188 SegmentOrientation="none",
189 )
190
191 elif self.monte_carlo == "medium":
192 # Medium MC - proper generation logic, but true facets and facet relations
193 path.add_module("TFCDC_SegmentFinderFacetAutomaton",
194 FacetFilter="truth",
195 FacetRelationFilter="truth",
196 SegmentOrientation="none",
197 # SegmentOrientation="outwards"
198 )
199
200 elif self.monte_carlo == "full":
201 # Only true monte carlo segments, but make the positions realistic
202 path.add_module("TFCDC_SegmentCreatorMCTruth",
203 reconstructedDriftLength=False,
204 reconstructedPositions=True)
205
206 else:
207 raise ValueError("Invalid degree of Monte Carlo information")
208
209 path.add_module("TFCDC_SegmentFitter",
210 inputSegments="CDCSegment2DVector",
211 karimakiFit=self.karimaki_fit,
212 fitPos=self.fit_positions,
213 fitVariance=self.fit_variance,
214 updateDriftLength=self.flight_time_reestimation,
215 useAlphaInDriftLength=self.use_alpha_in_drift_length,
216 tofMassScale=self.flight_time_mass_scale)
217
218 return path
219
220

◆ execute()

execute ( self)
inherited
Create the basf2 path then run the job

Reimplemented in ReadOrGenerateEventsRun.

Definition at line 50 of file minimal.py.

50 def execute(self):
51 """Create the basf2 path then run the job"""
52 # Create path and run #
53
54 path = self.create_path()
55 self.adjust_path(path)
56 self.run(path)
57

◆ harvesting_module()

harvesting_module ( self,
path = None )
Harvest and post-process the MC events

Reimplemented from HarvestingRunMixin.

Definition at line 76 of file record.py.

76 def harvesting_module(self, path=None):
77 """Harvest and post-process the MC events"""
78 harvesting_module = SegmentFitValidationModule(self.output_file_name)
79 if path:
80 path.add_module(harvesting_module)
81 return harvesting_module
82

◆ name()

name ( self)
inherited
provide name of this object

Definition at line 41 of file minimal.py.

41 def name(self):
42 """provide name of this object"""
43 return self.__class__.__name__
44

◆ output_file_name()

output_file_name ( self)
Get the output ROOT filename

Reimplemented from HarvestingRunMixin.

Definition at line 63 of file record.py.

63 def output_file_name(self):
64 """Get the output ROOT filename"""
65 file_name = "karimaki" if self.karimaki_fit else "riemann"
66 file_name += "-mc-" + self.monte_carlo
67 if self.flight_time_reestimation:
68 file_name += "-re"
69 if self.root_input_file:
70 file_name += "-" + os.path.split(self.root_input_file)[1]
71 else:
72 file_name += ".root"
73
74 return file_name
75

◆ pickle_crops()

pickle_crops ( self,
harvesting_module,
crops,
** kwds )
inherited
Save the raw crops as a pickle file

Definition at line 41 of file run.py.

41 def pickle_crops(self, harvesting_module, crops, **kwds):
42 """Save the raw crops as a pickle file"""
43 with open(self.output_file_name + ".pickle", "wb") as pickle_file:
44 pickle.dump(crops, pickle_file)
45

◆ postprocess()

postprocess ( self)
inherited
Post-process the crops

Reimplemented from BrowseTFileOnTerminateRunMixin.

Definition at line 51 of file run.py.

51 def postprocess(self):
52 """Post-process the crops"""
53 if self.postprocess_only:
54 harvesting_module = self.harvesting_module()
55 if self.output_file_name:
56 harvesting_module.output_file_name = self.output_file_name
57 try:
58 crops = self.unpickle_crops()
59 except FileNotFoundError:
60 print("Crops pickle file not found. Create it now.")
61 else:
62 harvesting_module.refine(crops)
63
64 super().postprocess()
65

◆ run()

run ( self,
path )
inherited
Post-process the basf2 job output

Reimplemented from EmptyRun.

Definition at line 45 of file mixins.py.

45 def run(self, path):
46 """Post-process the basf2 job output"""
47 if not self.postprocess_only:
48 super().run(path)
49
50 self.postprocess()
51

◆ unpickle_crops()

unpickle_crops ( self)
inherited
Load the raw crops from a pickle file

Definition at line 46 of file run.py.

46 def unpickle_crops(self):
47 """Load the raw crops from a pickle file"""
48 with open(self.output_file_name + ".pickle", "rb") as pickle_file:
49 return pickle.load(pickle_file)
50

Member Data Documentation

◆ allow_input

bool allow_input = True
staticinherited

By default, this basf2 job can read events from an input ROOT TFile.

Definition at line 109 of file minimal.py.

◆ bkg_files

list bkg_files = []
staticinherited

By default, no background overlay.

Definition at line 47 of file event_generation.py.

◆ components

components = None
staticinherited

By default, do specific components.

Definition at line 49 of file event_generation.py.

◆ description

str description = "Empty execution of basf2"
staticinherited

Description of the run setup to be displayed on command line.

Definition at line 33 of file minimal.py.

◆ detector_setup

str detector_setup = "Default"
staticinherited

By default, use the default detector setup.

Definition at line 45 of file event_generation.py.

◆ disable_deltas

bool disable_deltas = False
staticinherited

By default, do not disable delta-ray generation.

Definition at line 51 of file event_generation.py.

◆ fit_positions

str fit_positions = "recoPos"
static

fit the reconstructed hit position for the segment fit

Definition at line 58 of file record.py.

◆ fit_variance

str fit_variance = "proper"
static

use the drift-length variance in the segment fit

Definition at line 60 of file record.py.

◆ flight_time_estimation

str flight_time_estimation = "none"
static

do not estimate the flight time

Definition at line 49 of file record.py.

◆ flight_time_mass_scale

flight_time_mass_scale = float("nan")
static

assume a very heavy particle for flight time calculation

Definition at line 55 of file record.py.

◆ flight_time_reestimation

bool flight_time_reestimation = False
static

do not re-estimate the flight time

Definition at line 51 of file record.py.

◆ generator_module

generator_module = None
staticinherited

By default, do not generate events.

Definition at line 43 of file event_generation.py.

◆ karimaki_fit

bool karimaki_fit = False
static

use the Riemann fit instead of the Karimaki fit

Definition at line 47 of file record.py.

◆ monte_carlo

str monte_carlo = "no"
static

do not generate new events

Definition at line 45 of file record.py.

◆ n_events

n_events = 10000
staticinherited

By default, process 10000 events.

Definition at line 111 of file minimal.py.

◆ n_events_to_skip

int n_events_to_skip = 0
staticinherited

By default, do not skip any events at the start of the input ROOT TFile.

Definition at line 119 of file minimal.py.

◆ n_processes

n_processes = 0
staticinherited

By default, no parallel processing.

Definition at line 117 of file minimal.py.

◆ pickle_crops

pickle_crops = self.output_file_name
inherited

Definition at line 72 of file run.py.

◆ postprocess_only

bool postprocess_only = False
staticinherited

By default, browse the output TFile too.

Post-process the basf2 job output

Definition at line 29 of file mixins.py.

◆ random_seed

random_seed = None
staticinherited

By default, the random-number seed is unassigned.

Definition at line 115 of file minimal.py.

◆ root_input_file

root_input_file = None
staticinherited

By default, there is no input ROOT TFile.

Definition at line 113 of file minimal.py.

◆ show_results

bool show_results = False
staticinherited

By default, do not show the browsing results.

Definition at line 62 of file mixins.py.

◆ simulation_output

simulation_output = None
staticinherited

By default, do no store the simulation output.

Definition at line 53 of file event_generation.py.

◆ use_alpha_in_drift_length

bool use_alpha_in_drift_length = True
static

use the alpha parameter for drift length

Definition at line 53 of file record.py.


The documentation for this class was generated from the following file: