MUSIC unknown
Analysis for the MUSIC active-target ionization chamber
Loading...
Searching...
No Matches
Constants.cpp
Go to the documentation of this file.
1#include "Constants.hpp"
2
3Int_t TargetGasA(TargetGas gas) {
4 switch (gas) {
5 case kHELIUM:
6 return 4;
7 }
8 return 0;
9}
10
12 switch (gas) {
13 case kHELIUM:
14 return 1.0;
15 }
16 return 0.0;
17}
18
20 // Deliberately not a working experiment: a dataset that wants a cross
21 // section has to state its own gas and beam. Zero pressure makes a dataset
22 // that forgot fail loudly rather than report a wrong number.
25
26 BEAM_A = 0;
27 BEAM_Z = 0;
28 BEAM_ELEMENT = "";
29
30 TALYS_MODELS.clear();
31
32 BEAM_SIM_FILE = "";
33
34 XS_STRIP_MIN = 3;
35 XS_STRIP_MAX = 15;
36 EFFECTIVE_ENERGY = kTRUE;
37 EPOCHS.clear();
38
39 CHANNELS.clear();
40}
41
44
47 POST_WINDOW_STRIPS.clear();
49
52
55
56 REAC_JUMP_NSIGMA = 1.0;
57 REAC_JUMP_MAX = 2.0;
58 END_STRIP_MAX = 1.0;
59
60 PILEUP_THRESHOLD = 1.75;
61 NOISE_THRESHOLD = 0.85;
62
63 REJECT_NOISE = kTRUE;
64 NOISE_THRESH_PY = 0.4;
66
67 REJECT_PILEUP = kTRUE;
68 PILEUP_THRESH_PY = 1.3;
70
71 REGION_CUT_REDRAW = kFALSE;
72 AN_REGION_NSIGMA = 2.0;
73 AA_REGION_NSIGMA = 2.0;
76 AN_RIDGE_NSIGMA_HI = 15.0;
79 BOTH_MULT_MAX = -1; // disabled by default
80 BOTH_MULT_COUNT_TO = 16; // whole trace unless narrowed
81 REJECT_OFFBEAM = kFALSE;
82 OFFBEAM_DIST = 0.3;
84 PARITY_ASYM_MAX = 0.0;
86
87 TRIGGER_NSIGMA = 5.0;
88 TRIGGER_CFD_FRAC = 0.30;
89 PLATEAU_POST = 3;
91 SEED_HALF_BINS = 40;
92
93 SAVGOL_HALF = 2;
94
96
97 X_LO = 1;
98 X_HI = 16;
99
100 GATE_STRIP_X = 1;
101 GATE_STRIP_Y = 2;
102 GATE_NSIGMA_X = 3.5;
103 GATE_NSIGMA_Y = 3.5;
104 GATE_MIN = 0.0;
105 GATE_MAX = 3.0;
106 GATE_BINS = 240;
107
108 X_DISPLAY_MIN = 14;
109 X_DISPLAY_MAX = 26;
110 XBINS = 1500;
111 Y_DISPLAY_MIN = 0;
112 Y_DISPLAY_MAX = 20;
113 YBINS = 1500;
114
115 SAMPLE_MAX_POINTS = 2000000;
116
117 RERUN_SIM = kFALSE;
119
120 REQUIRE_SMOOTHNESS = kTRUE;
121 REQUIRE_GATE_S3_S4 = kFALSE;
122 REQUIRE_GATE_S5_S6 = kFALSE;
123 SKIP_SAVGOL_PLOTS = kFALSE;
126}
127
129 // Data source
130 USE_SOLARIS_DATA = kFALSE;
133 N_CHUNKS = -1;
134
135 // Hardware layout
136 N_BOARDS = 4;
137 N_CHANNELS = 16;
139
140 // Timing
142 TIMING_MAX_ENERGY = 16384;
144 TIMING_THRESH_DT_US = 150.0;
151 TIMING_DO_BOARD_SYNC = kFALSE;
152 TIMING_DO_SORT = kFALSE;
153
154 REJECT_FLAGGED_EVENTS = kFALSE;
155
164
165 IGNORE_SHORT_STRIPS = kFALSE;
166 IGNORE_STRIP_0 = kFALSE;
167 IGNORE_STRIP_17 = kFALSE;
168
169 HAS_CATHODE = kTRUE;
170 HAS_GRID = kTRUE;
171 HAS_STRIP0 = kTRUE;
172 HAS_STRIP17 = kTRUE;
173
174 SKIP_EXISTING = kTRUE;
175 SAVE_PLOTS = kTRUE;
176
177 SKIP_CALIBRATION = kFALSE;
178
180
182
183 REFERENCE_CHANNEL = "Grid";
186
187 USE_GPU_ACCELERATION = kTRUE;
189
192 BEAM_GATE_NSIGMA_X = 3.0;
193 BEAM_GATE_NSIGMA_Y = 3.0;
197 TOTAL_E_MIN_NORMED = 10.0;
198 TOTAL_E_MAX_NORMED = 400.0;
199
200 STRIP_SUM_SCATTER_CONFIG.SetDefaults();
201 CROSS_SECTION_CONFIG.SetDefaults();
202
203 STRIP_E_MIN_ADC = 0.0;
204 STRIP_E_MAX_ADC = 4096.0;
205 TOTAL_E_MIN_ADC = 0.0;
206 TOTAL_E_MAX_ADC = 60000.0;
207
208 GRID_MIN_ADC = 0.0;
209 GRID_MAX_ADC = 16384.0;
210
213
214 STRIP0_MAX_ADC = 16384.0;
215 STRIP17_MAX_ADC = 16384.0;
216 CATHODE_MAX_ADC = 16384.0;
217
218 LEFT_EVEN_MAX_ADC = 16384.0;
219 LEFT_ODD_MAX_ADC = 16384.0;
220 RIGHT_EVEN_MAX_ADC = 16384.0;
221 RIGHT_ODD_MAX_ADC = 16384.0;
222}
223
224namespace Constants {
225
226// The epoch currently being processed, or null outside epoch work (and for
227// datasets that declare none). Every accessor below falls back to the flat cfg
228// block when it is null, so behaviour without epochs is unchanged.
229static const RunEpoch *gActiveEpoch = nullptr;
230
231void SetActiveEpoch(const RunEpoch *epoch) { gActiveEpoch = epoch; }
232const RunEpoch *GetActiveEpoch() { return gActiveEpoch; }
233
234const RunEpoch *EpochForRun(Int_t run) {
235 // Only untagged epochs are addressable by run number. A tagged epoch exists
236 // precisely because its run numbers collide with another era's, so answering
237 // from the number alone would be a coin flip; those are addressed by tag.
238 for (Int_t e = 0; e < Int_t(cfg.EPOCHS.size()); e++) {
239 const RunEpoch &ep = cfg.EPOCHS[e];
240 if (ep.file_tag.Length() > 0)
241 continue;
242 for (Int_t r = 0; r < Int_t(ep.runs.size()); r++)
243 if (ep.runs[r] == run)
244 return &ep;
245 }
246 return nullptr;
247}
248
249RunEpoch MakeEpoch(const TString &name, const std::vector<Int_t> &runs) {
250 RunEpoch ep;
251 ep.name = name;
252 ep.runs = runs;
253 ep.source = cfg.USE_SOLARIS_DATA ? kSolaris : kCoMPASS;
254 ep.n_boards = cfg.N_BOARDS;
255 ep.n_channels = cfg.N_CHANNELS;
256 ep.channel_map =
257 !cfg.channelMap64.empty() ? cfg.channelMap64 : cfg.channelMap;
258 ep.timing_ref_board = cfg.TIMING_REF_BOARD;
259 ep.timing_ref_board_channels = cfg.TIMING_REF_BOARD_CHANNELS;
260 ep.do_board_sync = cfg.TIMING_DO_BOARD_SYNC;
261 ep.do_sort = cfg.TIMING_DO_SORT;
262 ep.event_time_window_us = cfg.EVENT_TIME_WINDOW_US;
263 ep.reference_channel = cfg.REFERENCE_CHANNEL;
264 ep.reference_channel_min_adc = cfg.REFERENCE_CHANNEL_MIN_ADC;
265 ep.reference_channel_max_adc = cfg.REFERENCE_CHANNEL_MAX_ADC;
266 ep.dedup_strategy = cfg.DEDUP_STRATEGY;
267 ep.has_cathode = cfg.HAS_CATHODE;
268 ep.strip_e_min_adc = cfg.STRIP_E_MIN_ADC;
269 ep.strip_e_max_adc = cfg.STRIP_E_MAX_ADC;
270 ep.cathode_max_adc = cfg.CATHODE_MAX_ADC;
271 ep.grid_max_adc = cfg.GRID_MAX_ADC;
272 ep.strip0_max_adc = cfg.STRIP0_MAX_ADC;
273 ep.strip17_max_adc = cfg.STRIP17_MAX_ADC;
274 ep.left_even_max_adc = cfg.LEFT_EVEN_MAX_ADC;
275 ep.left_odd_max_adc = cfg.LEFT_ODD_MAX_ADC;
276 ep.right_even_max_adc = cfg.RIGHT_EVEN_MAX_ADC;
277 ep.right_odd_max_adc = cfg.RIGHT_ODD_MAX_ADC;
278 return ep;
279}
280
281std::vector<Int_t> RunRange(Int_t first, Int_t last) {
282 std::vector<Int_t> runs;
283 for (Int_t r = first; r <= last; r++)
284 runs.push_back(r);
285 return runs;
286}
287
288// Runs for a binary that runs with no active epoch: the enabled epochs named
289// in CROSS_SECTION_CONFIG.EPOCHS, or all enabled epochs when that is empty.
290// Computed once; the config does not change after static init.
291static const std::vector<Int_t> &EpochUnionRuns() {
292 static std::vector<Int_t> runs;
293 static Bool_t built = kFALSE;
294 if (built)
295 return runs;
296 built = kTRUE;
297 const std::vector<TString> &want = cfg.CROSS_SECTION_CONFIG.EPOCHS;
298 for (Int_t w = 0; w < Int_t(want.size()); w++) {
299 Bool_t found = kFALSE;
300 for (Int_t e = 0; e < Int_t(cfg.EPOCHS.size()) && !found; e++)
301 found = cfg.EPOCHS[e].name == want[w];
302 if (!found)
303 std::cerr << "WARNING: CROSS_SECTION_CONFIG.EPOCHS names \"" << want[w]
304 << "\" but no such epoch is declared." << std::endl;
305 }
306 for (Int_t e = 0; e < Int_t(cfg.EPOCHS.size()); e++) {
307 const RunEpoch &ep = cfg.EPOCHS[e];
308 if (!ep.enabled)
309 continue;
310 Bool_t wanted = want.empty();
311 for (Int_t w = 0; w < Int_t(want.size()) && !wanted; w++)
312 wanted = ep.name == want[w];
313 if (wanted)
314 runs.insert(runs.end(), ep.runs.begin(), ep.runs.end());
315 }
316 return runs;
317}
318
320 return gActiveEpoch ? gActiveEpoch->n_boards : cfg.N_BOARDS;
321}
323 return gActiveEpoch ? gActiveEpoch->n_channels : cfg.N_CHANNELS;
324}
326 return gActiveEpoch ? gActiveEpoch->timing_ref_board : cfg.TIMING_REF_BOARD;
327}
328const std::vector<UShort_t> &ActiveTimingRefBoardChannels() {
329 return gActiveEpoch ? gActiveEpoch->timing_ref_board_channels
330 : cfg.TIMING_REF_BOARD_CHANNELS;
331}
333 return gActiveEpoch ? gActiveEpoch->do_board_sync : cfg.TIMING_DO_BOARD_SYNC;
334}
335Bool_t ActiveDoSort() {
336 return gActiveEpoch ? gActiveEpoch->do_sort : cfg.TIMING_DO_SORT;
337}
339 return gActiveEpoch ? gActiveEpoch->has_cathode : cfg.HAS_CATHODE;
340}
342 return gActiveEpoch ? (gActiveEpoch->source == kSolaris)
343 : cfg.USE_SOLARIS_DATA;
344}
346 return gActiveEpoch ? gActiveEpoch->event_time_window_us
347 : cfg.EVENT_TIME_WINDOW_US;
348}
349const TString &ActiveReferenceChannel() {
350 return gActiveEpoch ? gActiveEpoch->reference_channel : cfg.REFERENCE_CHANNEL;
351}
353 return gActiveEpoch ? gActiveEpoch->reference_channel_min_adc
354 : cfg.REFERENCE_CHANNEL_MIN_ADC;
355}
357 return gActiveEpoch ? gActiveEpoch->reference_channel_max_adc
358 : cfg.REFERENCE_CHANNEL_MAX_ADC;
359}
361 return gActiveEpoch ? gActiveEpoch->dedup_strategy : cfg.DEDUP_STRATEGY;
362}
364 return gActiveEpoch ? gActiveEpoch->strip_e_min_adc : cfg.STRIP_E_MIN_ADC;
365}
367 return gActiveEpoch ? gActiveEpoch->strip_e_max_adc : cfg.STRIP_E_MAX_ADC;
368}
370 return gActiveEpoch ? gActiveEpoch->cathode_max_adc : cfg.CATHODE_MAX_ADC;
371}
373 return gActiveEpoch ? gActiveEpoch->grid_max_adc : cfg.GRID_MAX_ADC;
374}
376 return gActiveEpoch ? gActiveEpoch->strip0_max_adc : cfg.STRIP0_MAX_ADC;
377}
379 return gActiveEpoch ? gActiveEpoch->strip17_max_adc : cfg.STRIP17_MAX_ADC;
380}
382 return gActiveEpoch ? gActiveEpoch->left_even_max_adc : cfg.LEFT_EVEN_MAX_ADC;
383}
385 return gActiveEpoch ? gActiveEpoch->left_odd_max_adc : cfg.LEFT_ODD_MAX_ADC;
386}
388 return gActiveEpoch ? gActiveEpoch->right_even_max_adc
389 : cfg.RIGHT_EVEN_MAX_ADC;
390}
392 return gActiveEpoch ? gActiveEpoch->right_odd_max_adc : cfg.RIGHT_ODD_MAX_ADC;
393}
394
395const std::vector<Int_t> &ActiveRunNumbers() {
396 if (gActiveEpoch)
397 return gActiveEpoch->runs;
398 if (cfg.RUN_NUMBERS.empty() && !cfg.EPOCHS.empty())
399 return EpochUnionRuns();
400 return cfg.RUN_NUMBERS;
401}
402const TString &ActiveFileTag() {
403 static const TString kNone = "";
404 return gActiveEpoch ? gActiveEpoch->file_tag : kNone;
405}
406Int_t ActiveMaxFiles() { return gActiveEpoch ? gActiveEpoch->max_files : -1; }
407
408const std::map<std::pair<Int_t, Int_t>, TString> &ActiveChannelMap() {
409 if (gActiveEpoch && !gActiveEpoch->channel_map.empty())
410 return gActiveEpoch->channel_map;
411 if (!cfg.channelMap64.empty())
412 return cfg.channelMap64;
413 if (!cfg.channelMap.empty())
414 return cfg.channelMap;
415 std::cerr << "FATAL: neither channelMap nor channelMap64 is configured."
416 << std::endl;
417 std::abort();
418}
419
420} // namespace Constants
Double_t TargetGasAtomsPerMolecule(TargetGas gas)
Atoms of the reacting species per molecule of fill gas.
Definition Constants.cpp:11
Int_t TargetGasA(TargetGas gas)
Mass number of the target nucleus in a fill gas.
Definition Constants.cpp:3
The dataset configuration, and how it is layered.
TargetGas
The fill gas the beam reacts in.
@ kHELIUM
Helium fill.
DedupStrategy
How to resolve more than one hit on the same channel within an event.
@ kLARGEST_ENERGY
Keep the highest-energy hit.
@ kCoMPASS
CAEN CoMPASS.
Definition RunEpoch.hpp:14
@ kSolaris
SOLARIS DAQ.
Definition RunEpoch.hpp:15
Double_t PULSE_HISTORY_OWN_LO
Looser window for the long ends of the chain whose kernel is being fitted; the tight one above applie...
Double_t REFERENCE_CHANNEL_MIN_ADC
Double_t TIMING_MIN_ENERGY
Timing.
Double_t STRIP_DE_MIN_NORMED
Double_t PULSE_HISTORY_APPLY_MAX_US
Bool_t HAS_STRIP0
Double_t GRID_MIN_ADC
Double_t TIMING_SHIFT_COARSE_STEP_US
Double_t LEFT_ODD_MAX_ADC
UShort_t TIMING_REF_BOARD
Double_t TIMING_THRESH_DT_US
Double_t PULSE_HISTORY_OWN_HI
Double_t STRIP17_MAX_ADC
Double_t CATHODE_MAX_ADC
Double_t TIMING_MAX_ENERGY
Double_t PULSE_HISTORY_BEAM_LO
Bool_t HAS_CATHODE
Double_t STRIP_DE_OVERVIEW_MAX_NORMED
Double_t BEAM_GATE_NSIGMA_X
n-sigma of the per-strip beam gate in the beam calibration: strip s is gated by the ellipse on the (s...
Int_t N_BOARDS
Hardware layout.
StripSumScatterConfig STRIP_SUM_SCATTER_CONFIG
Bool_t HAS_STRIP17
Bool_t SKIP_CALIBRATION
Bool_t REJECT_FLAGGED_EVENTS
Double_t PULSE_HISTORY_BEAM_HI
Double_t STRIP_DE_MAX_NORMED
Double_t RIGHT_EVEN_MAX_ADC
Double_t TIMING_MAX_ABS_SHIFT_S
Bool_t TIMING_DO_SORT
Double_t EVENT_TIME_WINDOW_US
Bool_t IGNORE_STRIP_0
Int_t SOL_N_SPLIT_WORKERS
Bool_t USE_SOLARIS_DATA
Data source.
Bool_t TIMING_DO_BOARD_SYNC
Double_t STRIP_E_MIN_ADC
DedupStrategy DEDUP_STRATEGY
TString REFERENCE_CHANNEL
Double_t CATHODE_E_MAX_NORMED
Double_t SOL_SPLIT_CHUNK_SECONDS
Int_t TIMING_SHIFT_MIN_NPTS
Double_t TOTAL_E_MAX_NORMED
Int_t SAVE_SAMPLE_TRACES
Number of sample traces to save during event build and normed summary passes (0 = disabled).
Int_t MAX_FUSED_WORKERS
Double_t STRIP_DE_OVERVIEW_MIN_NORMED
Double_t TIMING_OVERLAP_MARGIN_S
Double_t STRIP_E_MAX_ADC
Double_t TOTAL_E_MIN_ADC
Int_t PULSE_HISTORY_AMP_BINS
Kernel bands in the previous pulse's amplitude, in units of the channel's beam peak: 1 is one kernel ...
Double_t REFERENCE_CHANNEL_MAX_ADC
Double_t RIGHT_ODD_MAX_ADC
Bool_t SAVE_PLOTS
Double_t LEFT_EVEN_MAX_ADC
Bool_t IGNORE_STRIP_17
Double_t BEAM_GATE_NSIGMA_Y
Bool_t SKIP_EXISTING
Long64_t PULSE_HISTORY_MIN_EVENTS
Double_t TOTAL_E_MIN_NORMED
Int_t TIMING_SHIFT_MAX_SCAN_CANDIDATES
Double_t GRID_MAX_ADC
CrossSectionConfig CROSS_SECTION_CONFIG
Int_t MAX_GPU_CONCURRENT_SORTS
Double_t STRIP0_MAX_ADC
Bool_t IGNORE_SHORT_STRIPS
Double_t TOTAL_E_MAX_ADC
Double_t TIMING_SHIFT_FINE_STEP_US
Double_t TIMING_SHIFT_FINE_HALF_WIDTH_US
std::vector< RunEpoch > EPOCHS
Bool_t USE_GPU_ACCELERATION
Bool_t PULSE_HISTORY_CORRECTION
Pole-zero pulse-history correction on the raw hits, before event building (see PulseHistory....
DedupStrategy ActiveDedupStrategy()
How repeated hits on one slot are resolved.
const RunEpoch * GetActiveEpoch()
The currently active epoch, or null when none is set.
UShort_t ActiveTimingRefBoard()
Board the others are timing-aligned against.
RunEpoch MakeEpoch(const TString &name, const std::vector< Int_t > &runs)
Build an epoch prefilled from the flat configuration block.
Int_t ActiveMaxFiles()
Cap on subfiles processed per run for the active epoch.
Double_t ActiveReferenceChannelMaxAdc()
Upper energy gate on the seed channel, in ADC.
Double_t ActiveStrip17MaxAdc()
Strip 17 full scale, in ADC.
const TString & ActiveReferenceChannel()
Channel whose hits seed events.
Double_t ActiveLeftEvenMaxAdc()
Left-side ceiling for even strips, in ADC.
Double_t ActiveStripEMaxAdc()
Upper bound of the per-strip energy range, in ADC.
Bool_t ActiveDoBoardSync()
Whether to run the multi-board timing alignment.
Double_t ActiveEventTimeWindowUs()
Coincidence window for event building, in microseconds.
Bool_t ActiveDoSort()
Whether to time-sort hits before event building.
Double_t ActiveStripEMinAdc()
Lower bound of the per-strip energy range, in ADC.
Double_t ActiveRightEvenMaxAdc()
Right-side ceiling for even strips, in ADC.
const std::vector< Int_t > & ActiveRunNumbers()
Runs of the active epoch, or the flat RUN_NUMBERS when none is set.
const std::map< std::pair< Int_t, Int_t >, TString > & ActiveChannelMap()
The channel map in force.
Double_t ActiveLeftOddMaxAdc()
Left-side ceiling for odd strips, in ADC.
Double_t ActiveStrip0MaxAdc()
Strip 0 full scale, in ADC.
Double_t ActiveRightOddMaxAdc()
Right-side ceiling for odd strips, in ADC.
Double_t ActiveCathodeMaxAdc()
Cathode full scale, in ADC.
const std::vector< UShort_t > & ActiveTimingRefBoardChannels()
Reference channel per board, for the alignment.
Double_t ActiveReferenceChannelMinAdc()
Lower energy gate on the seed channel, in ADC.
const RunEpoch * EpochForRun(Int_t run)
The epoch owning a run number.
Int_t ActiveNBoards()
Boards in the active epoch's setup.
const TString & ActiveFileTag()
Output-name prefix of the active epoch.
Bool_t ActiveHasCathode()
Whether this era instrumented the cathode.
Double_t ActiveGridMaxAdc()
Grid full scale, in ADC.
const DatasetConfig & cfg
The active dataset's configuration, flat block.
Int_t ActiveNChannels()
Channels per board.
std::vector< Int_t > RunRange(Int_t first, Int_t last)
Consecutive run numbers, for MakeEpoch().
void SetActiveEpoch(const RunEpoch *epoch)
Set the epoch the Active*() accessors read from.
Bool_t ActiveUseSolarisData()
Whether this era's data is SOLARIS rather than CoMPASS.
Int_t XS_STRIP_MIN
Reaction strips to report a cross section for.
std::vector< TString > EPOCHS
Epochs whose runs feed the cross-section chain (strip-sum-scatter, compute-regions,...
Double_t GAS_PRESSURE_TORR
At the pressure the gas was actually at rather than the nominal one.
TString BEAM_SIM_FILE
Simulated unreacted beam, read for the energy at each strip.
Int_t BEAM_A
Beam mass number, for the lab-to-centre-of-mass conversion; its Z and element symbol name it to a rea...
Bool_t EFFECTIVE_ENERGY
Report each strip at its effective centre-of-mass energy (Szegedi et al.
std::vector< TalysModel > TALYS_MODELS
Hauser-Feshbach predictions from TALYS.
std::vector< CrossSectionChannel > CHANNELS
The reaction channels measured on this dataset.
One acquisition period of a dataset.
Definition RunEpoch.hpp:37
Double_t cathode_max_adc
Cathode full scale.
Definition RunEpoch.hpp:88
std::vector< Int_t > runs
Run numbers belonging to this epoch.
Definition RunEpoch.hpp:51
Bool_t has_cathode
Whether this era instrumented the cathode.
Definition RunEpoch.hpp:80
UShort_t timing_ref_board
Definition RunEpoch.hpp:65
Double_t right_odd_max_adc
Definition RunEpoch.hpp:95
Bool_t do_sort
Time-sort hits before event building.
Definition RunEpoch.hpp:69
Double_t left_even_max_adc
Left-side ceiling, even strips.
Definition RunEpoch.hpp:92
TString name
Epoch name, used in logs and plot paths.
Definition RunEpoch.hpp:38
Double_t right_even_max_adc
Right-side ceiling, even strips.
Definition RunEpoch.hpp:94
std::vector< UShort_t > timing_ref_board_channels
Channels on the reference board used to align the others against it.
Definition RunEpoch.hpp:67
Double_t grid_max_adc
Grid full scale.
Definition RunEpoch.hpp:89
Double_t strip0_max_adc
Strip 0 full scale.
Definition RunEpoch.hpp:90
Double_t event_time_window_us
Coincidence window, in microseconds, for grouping hits into one event.
Definition RunEpoch.hpp:71
Double_t strip_e_max_adc
Upper bound of the per-strip energy range.
Definition RunEpoch.hpp:87
TString file_tag
Prefix for this epoch's output files and plot directories.
Definition RunEpoch.hpp:49
Bool_t enabled
Whether this epoch participates in the analysis.
Definition RunEpoch.hpp:40
Double_t strip17_max_adc
Strip 17 full scale.
Definition RunEpoch.hpp:91
DedupStrategy dedup_strategy
How repeated hits on a slot resolve.
Definition RunEpoch.hpp:77
Double_t left_odd_max_adc
Left-side ceiling, odd strips.
Definition RunEpoch.hpp:93
Double_t reference_channel_min_adc
Lower energy gate on the seed channel.
Definition RunEpoch.hpp:74
Bool_t do_board_sync
Run the multi-board timing alignment.
Definition RunEpoch.hpp:68
Double_t strip_e_min_adc
Lower bound of the per-strip energy range.
Definition RunEpoch.hpp:86
std::map< std::pair< Int_t, Int_t >, TString > channel_map
Board and channel to detector-element name, e.g. "Grid", "de_l_03".
Definition RunEpoch.hpp:60
Int_t n_boards
Boards in this era's setup.
Definition RunEpoch.hpp:57
TString reference_channel
Channel whose hits seed events, e.g. "Grid".
Definition RunEpoch.hpp:72
RunSource source
Acquisition system for this era.
Definition RunEpoch.hpp:39
Double_t reference_channel_max_adc
Upper energy gate on the seed channel.
Definition RunEpoch.hpp:76
Int_t n_channels
Channels per board.
Definition RunEpoch.hpp:58
Double_t PARITY_ASYM_MAX
Reject events whose even strips and odd strips disagree by more than this fraction,...
Double_t X_DISPLAY_MIN
Display-only windows for the strip-sum scatters (a.u.): the histograms are built over the fixed Scatt...
AnRegionMode AN_REGION_MODE
std::map< Int_t, Int_t > POST_WINDOW_STRIPS
Definition Constants.hpp:67
Int_t POST_TRIGGER_SUM_STRIPS
Strips summed onto the scatter y-axis after the trigger strip: y spans reac+1 .
Definition Constants.hpp:65
Bool_t REQUIRE_STRIP_16_BELOW_BEAM
Double_t REAC_JUMP_NSIGMA
Minimum jump at the reaction strip for a tag, in sigma of the measured strip-to-strip beam noise (Str...
Definition Constants.hpp:80
Int_t MAX_STRIP_SUM_WORKERS
Cap on worker threads for the scatter fill.
Definition Constants.hpp:69
Bool_t PLOT_PARITY_REJECTED_GRID
Diagnostic only: when set, run an extra pass over the events (gated by PARITY_ASYM_MAX > 0) that fill...
Bool_t ALT_DECODE_REGION_TRACES
Also render the selected region traces under the OTHER decode (long-side-only <-> L+R sum) from the s...
PureBeamGate PURE_BEAM_GATE
Definition Constants.hpp:55
Double_t REQUIRE_SMOOTHNESS_MAX_STEP
Definition Constants.hpp:75
Bool_t REQUIRE_BEAM_UPSTREAM_OF_REAC
Tolerance in sigma of each strip's measured beam spread (StripSumScatter::StripSigma).
Double_t AN_REGION_NSIGMA
compute-regions: the (a,n) region is the reaction component's AN_REGION_NSIGMA Mahalanobis ellipse fr...
Double_t BEAM_UPSTREAM_NSIGMA
Int_t REQUIRE_SMOOTHNESS_END_STRIP
Definition Constants.hpp:74
Int_t BOTH_MULT_MAX
Both-ends multiplicity cut: reject an event when more than MAX strips in 1..COUNT_TO had BOTH ends fi...
Bool_t REGION_CUT_REDRAW
Redraw the regions for this reaction strip even if saved ones exist, and overwrite only that strip's ...
Definition Constants.hpp:98