MiniballSort
Loading...
Searching...
No Matches
Converter.cc
Go to the documentation of this file.
1// An abstract class for the MBS or MIDAS data conversion
2#include "Converter.hh"
3
4MiniballConverter::MiniballConverter( std::shared_ptr<MiniballSettings> myset ) {
5
6 // We need to do initialise, but only after Settings are added
7 set = myset;
8
10 my_tm_stp_hsb = 0;
11
12 ctr_febex_hit.resize( set->GetNumberOfFebexSfps() );
13 ctr_febex_pause.resize( set->GetNumberOfFebexSfps() );
14 ctr_febex_resume.resize( set->GetNumberOfFebexSfps() );
15 ctr_febex_sync.resize( set->GetNumberOfFebexSfps() );
16
17 first_data.resize( set->GetNumberOfFebexSfps(), true );
18
19 tm_stp_read.resize( set->GetNumberOfFebexSfps(), 0 );
20 tm_stp_febex.resize( set->GetNumberOfFebexSfps() );
21 tm_stp_febex_ch.resize( set->GetNumberOfFebexSfps() );
22
23 // Start counters at zero
24 for( unsigned int i = 0; i < set->GetNumberOfFebexSfps(); ++i ) {
25
26 ctr_febex_hit[i].resize( set->GetNumberOfFebexBoards() );
27 ctr_febex_pause[i].resize( set->GetNumberOfFebexBoards() );
28 ctr_febex_resume[i].resize( set->GetNumberOfFebexBoards() );
29 ctr_febex_sync[i].resize( set->GetNumberOfFebexBoards() );
30
31 tm_stp_febex[i].resize( set->GetNumberOfFebexBoards(), 0 );
32 tm_stp_febex_ch[i].resize( set->GetNumberOfFebexBoards() );
33
34 for( unsigned int j = 0; j < set->GetNumberOfFebexBoards(); ++j )
35 tm_stp_febex_ch[i][j].resize( set->GetNumberOfFebexBoards(), 0 );
36
37 }
38
39 // Default that we do not have a source or EBIS only run
40 flag_source = false;
41 flag_ebis = false;
42
43 // No progress bar by default
44 _prog_ = false;
45
46 // Histogrammer options
47 //TH1::AddDirectory(kFALSE);
48
49 // Intialise the hist list
50 histlist = new TList();
51
52}
53
55
56 // Reset check on first data item per SFP
57 for( unsigned int i = 0; i < set->GetNumberOfFebexSfps(); ++i ) {
58
59 first_data[i] = true;
60
61 }
62
63}
64
66
67 // Start counters at zero
68 for( unsigned int i = 0; i < set->GetNumberOfFebexSfps(); ++i ) {
69
70 // Start counters at zero
71 for( unsigned int j = 0; j < set->GetNumberOfFebexBoards(); ++j ) {
72
73 first_data[i] = true;
74
75 ctr_febex_hit[i][j] = 0; // hits on each module
76 ctr_febex_pause[i][j] = 0;
77 ctr_febex_resume[i][j] = 0;
78 ctr_febex_sync[i][j] = 0;
79
80 tm_stp_febex[i][j] = 0;
81 for( unsigned int k = 0; k < set->GetNumberOfFebexBoards(); ++k )
82 tm_stp_febex_ch[i][j][k] = 0;
83
84 }
85
86 }
87
88 jump_ctr = 0; // timestamp jumps (jumps more than 300s in same board)
89 warp_ctr = 0; // timestamp warps (goes back in time, wrong board ID)
90 mash_ctr = 0; // timestamp mashes (mangled bits, with 16-bit shift)
91 data_ctr = 0; // total data items
92 reject_ctr = 0; // rejected buffers
93
94 buffer_full = false; // first buffer not yet assumed to be full
95
96 // Flags for FEBEX data items
97 flag_febex_data0 = false;
98 flag_febex_data1 = false;
99 flag_febex_data2 = false;
100 flag_febex_data3 = false;
101 flag_febex_trace = false;
102
103 // clear the data vectors
104 std::vector<std::shared_ptr<MiniballDataPackets>>().swap(data_vector);
105 std::vector<std::pair<unsigned long,double>>().swap(data_map);
106
107 return;
108
109}
110
111void MiniballConverter::SetOutput( std::string output_file_name ){
112
113 // Open output file
114 output_file = new TFile( output_file_name.data(), "recreate", "FEBEX raw data file" );
115
116 return;
117
118};
119
120
122
123 // Create Root tree
124 const int splitLevel = 0; // don't split branches = 0, full splitting = 99
125 const int bufsize = 256000;
126 sorted_tree = new TTree( "mb_sort", "Time sorted, calibrated Miniball data" );
127 mbsinfo_tree = new TTree( "mbsinfo", "mbsinfo" );
128 write_packet = std::make_shared<MiniballDataPackets>();
129 mbsinfo_packet = std::make_shared<MBSInfoPackets>();
130 sorted_tree->Branch( "data", "MiniballDataPackets", write_packet.get(), bufsize, splitLevel );
131 mbsinfo_tree->Branch( "mbsinfo", "MBSInfoPackets", mbsinfo_packet.get(), bufsize, 0 );
132
133 sorted_tree->SetDirectory( output_file->GetDirectory("/") );
134 mbsinfo_tree->SetDirectory( output_file->GetDirectory("/") );
135
136 dgf_data = std::make_shared<DgfData>();
137 adc_data = std::make_shared<AdcData>();
138 febex_data = std::make_shared<FebexData>();
139 info_data = std::make_shared<InfoData>();
140
141 dgf_data->ClearData();
142 adc_data->ClearData();
143 febex_data->ClearData();
144 info_data->ClearData();
145
146 return;
147
148}
149
151
152 std::string hname, htitle;
153 std::string dirname, maindirname, subdirname;
154
155 // Maximum ADC value depends on MBS or MIDAS
156 if( mbs_data ) qmax_default = 8388608;
157 else qmax_default = 4294967296;
158
159 // Make directories - just one DAQ type for now, no sub directories
160 // if you do add a directory here, please use a trailing slash
161 maindirname = "";
162
163 // Resize vectors
164 hfebex_qshort.resize( set->GetNumberOfFebexSfps() );
165 hfebex_qint.resize( set->GetNumberOfFebexSfps() );
166 hfebex_cal.resize( set->GetNumberOfFebexSfps() );
167 hfebex_mwd.resize( set->GetNumberOfFebexSfps() );
168 hfebex_hit.resize( set->GetNumberOfFebexSfps() );
169 hfebex_pause.resize( set->GetNumberOfFebexSfps() );
170 hfebex_resume.resize( set->GetNumberOfFebexSfps() );
171 hfebex_sync.resize( set->GetNumberOfFebexSfps() );
172
173 // Loop over FEBEX SFPs
174 for( unsigned int i = 0; i < set->GetNumberOfFebexSfps(); ++i ) {
175
176 hfebex_qshort[i].resize( set->GetNumberOfFebexBoards() );
177 hfebex_qint[i].resize( set->GetNumberOfFebexBoards() );
178 hfebex_cal[i].resize( set->GetNumberOfFebexBoards() );
179 hfebex_mwd[i].resize( set->GetNumberOfFebexBoards() );
180 hfebex_hit[i].resize( set->GetNumberOfFebexBoards() );
181 hfebex_pause[i].resize( set->GetNumberOfFebexBoards() );
182 hfebex_resume[i].resize( set->GetNumberOfFebexBoards() );
183 hfebex_sync[i].resize( set->GetNumberOfFebexBoards() );
184
185 // Loop over each FEBEX board
186 for( unsigned int j = 0; j < set->GetNumberOfFebexBoards(); ++j ) {
187
188 hfebex_qshort[i][j].resize( set->GetNumberOfFebexChannels() );
189 hfebex_qint[i][j].resize( set->GetNumberOfFebexChannels() );
190 hfebex_cal[i][j].resize( set->GetNumberOfFebexChannels() );
191 hfebex_mwd[i][j].resize( set->GetNumberOfFebexChannels() );
192
193 dirname = maindirname + "sfp_" + std::to_string(i);
194 dirname += "/board_" + std::to_string(j);
195
196 if( !output_file->GetDirectory( dirname.data() ) )
197 output_file->mkdir( dirname.data() );
198 output_file->cd( dirname.data() );
199
200 // Loop over channels of each FEBEX board
201 for( unsigned int k = 0; k < set->GetNumberOfFebexChannels(); ++k ) {
202
203 // Uncalibrated energy - 16-bit value
204 hname = "febex_" + std::to_string(i);
205 hname += "_" + std::to_string(j);
206 hname += "_" + std::to_string(k);
207 hname += "_qshort";
208
209 htitle = "Raw FEBEX spectra for SFP " + std::to_string(i);
210 htitle += ", board " + std::to_string(j);
211 htitle += ", channel " + std::to_string(k);
212 htitle += ";Charge value;Counts";
213
214 hfebex_qshort[i][j][k] = new TH1F( hname.data(), htitle.data(), 16384, 0, (unsigned long long)1<<16 );
215 histlist->Add(hfebex_qshort[i][j][k]);
216
217 // Uncalibrated energy 32-bit value
218 hname = "febex_" + std::to_string(i);
219 hname += "_" + std::to_string(j);
220 hname += "_" + std::to_string(k);
221 hname += "_qint";
222
223 htitle = "Raw FEBEX spectra for SFP " + std::to_string(i);
224 htitle += ", board " + std::to_string(j);
225 htitle += ", channel " + std::to_string(k);
226 htitle += ";Charge value;Counts";
227
228 hfebex_qint[i][j][k] = new TH1F( hname.data(), htitle.data(), 16384, 0, qmax_default );
229 histlist->Add(hfebex_qint[i][j][k]);
230
231 // Calibrated energy
232 hname = "febex_" + std::to_string(i);
233 hname += "_" + std::to_string(j);
234 hname += "_" + std::to_string(k);
235 hname += "_cal";
236
237 htitle = "Calibrated FEBEX spectra for SFP " + std::to_string(i);
238 htitle += ", board " + std::to_string(j);
239 htitle += ", channel " + std::to_string(k);
240 htitle += ";Energy (keV);Counts per 0.5 keV";
241
242 // Assume gamma-ray spectrum
243 unsigned int ebins = 8000;
244 float emin = -0.25;
245 float emax = 4000.0 + emin; // 4 MeV range
246
247 // Check if we have particles with low gain preamps (heavy ions, Coulex)
248 if( ( cal->FebexType(i,j,k) == "Qshort" && cal->FebexGain(i,j,k) > 5 )
249 || ( cal->FebexType(i,j,k) == "Qint" && cal->FebexGain(i,j,k) > 0.0005 ) ) {
250
251 ebins = 8000.0;
252 emin = -125.0;
253 emax = 2000000.0 + emin; // 2 GeV range
254
255 }
256
257 // Check if we have particles with high gain preamps (light ions, transfer)
258 else if( ( cal->FebexType(i,j,k) == "Qshort" && cal->FebexGain(i,j,k) > 0.1 )
259 || ( cal->FebexType(i,j,k) == "Qint" && cal->FebexGain(i,j,k) > 0.00001 ) ) {
260
261 ebins = 8000.0;
262 emin = -12.5;
263 emax = 200000.0 + emin; // 200 MeV range
264
265 }
266
267 hfebex_cal[i][j][k] = new TH1F( hname.data(), htitle.data(),
268 ebins, emin, emax );
269 histlist->Add(hfebex_cal[i][j][k]);
270
271 // MWD energy
272 hname = "febex_" + std::to_string(i);
273 hname += "_" + std::to_string(j);
274 hname += "_" + std::to_string(k);
275 hname += "_mwd";
276
277 htitle = "MWD FEBEX spectra for SFP " + std::to_string(i);
278 htitle += ", board " + std::to_string(j);
279 htitle += ", channel " + std::to_string(k);
280 htitle += ";Energy (keV);Counts per 0.5 keV";
281
282 hfebex_mwd[i][j][k] = new TH1F( hname.data(), htitle.data(), 32768, -0.25, 16383.75 );
283 histlist->Add(hfebex_mwd[i][j][k]);
284
285 } // k - channel
286
287 // Hit ID vs timestamp
288 hname = "hfebex_hit_" + std::to_string(i);
289 hname += "_" + std::to_string(j);
290 htitle = "Profile of ts versus hit_id in SFP " + std::to_string(i);
291 htitle += ", board " + std::to_string(j);
292 hfebex_hit[i][j] = new TProfile( hname.data(), htitle.data(), 10800, 0., 108000., "" );
293 histlist->Add(hfebex_hit[i][j]);
294
295 // Pause events vs timestamp
296 hname = "hfebex_pause_" + std::to_string(i);
297 hname += "_" + std::to_string(j);
298 htitle = "Profile of ts versus pause events in SFP " + std::to_string(i);
299 htitle += ", board " + std::to_string(j);
300 hfebex_pause[i][j] = new TProfile( hname.data(), htitle.data(), 1000, 0., 10000., "" );
301 histlist->Add(hfebex_pause[i][j]);
302
303 // Resume events vs timestamp
304 hname = "hfebex_resume_" + std::to_string(i);
305 hname += "_" + std::to_string(j);
306 htitle = "Profile of ts versus resume events in SFP " + std::to_string(i);
307 htitle += ", board " + std::to_string(j);
308 hfebex_resume[i][j] = new TProfile( hname.data(), htitle.data(), 1000, 0., 10000., "" );
309 histlist->Add(hfebex_resume[i][j]);
310
311 // External sync trigger vs timestamp
312 hname = "hfebex_sync_" + std::to_string(i);
313 hname += "_" + std::to_string(j);
314 htitle = "Profile of external sync trigger ts versus hit_id";
315 hfebex_sync[i][j] = new TProfile( hname.data(), htitle.data(), 10800, 0., 108000., "" );
316 histlist->Add(hfebex_sync[i][j]);
317
318
319 } // j - board
320
321 } // i - SFP
322
323 // Resize vectors for DGFs and ADCs
324 hdgf_qshort.resize( set->GetNumberOfDgfModules() );
325 hdgf_cal.resize( set->GetNumberOfDgfModules() );
326 hadc_qshort.resize( set->GetNumberOfAdcModules() );
327 hadc_cal.resize( set->GetNumberOfAdcModules() );
328
329 // Loop over DGF modules
330 for( unsigned int i = 0; i < set->GetNumberOfDgfModules(); ++i ) {
331
332 hdgf_qshort[i].resize( set->GetNumberOfDgfChannels() );
333 hdgf_cal[i].resize( set->GetNumberOfDgfChannels() );
334
335 for( unsigned int j = 0; j < set->GetNumberOfDgfChannels(); ++j ) {
336
337 // New directory
338 dirname = maindirname + "dgf_" + std::to_string(i);
339 if( !output_file->GetDirectory( dirname.data() ) )
340 output_file->mkdir( dirname.data() );
341 output_file->cd( dirname.data() );
342
343 // Uncalibrated energy 16-bit value
344 hname = "dgf_" + std::to_string(i);
345 hname += "_" + std::to_string(j);
346 hname += "_qshort";
347
348 htitle = "Raw DGF spectra for module " + std::to_string(i);
349 htitle += ", channel " + std::to_string(j);
350 htitle += ";Charge value;Counts";
351
352 hdgf_qshort[i][j] = new TH1F( hname.data(), htitle.data(), 16384, 0, 65536 );
353 histlist->Add(hdgf_qshort[i][j]);
354
355 // Calibrated energy
356 hname = "dgf_" + std::to_string(i);
357 hname += "_" + std::to_string(j);
358 hname += "_cal";
359
360 htitle = "Calibrated DGF spectra for module " + std::to_string(i);
361 htitle += ", channel " + std::to_string(j);
362 htitle += ";Energy (keV);Counts per 0.5 keV";
363
364 // Assume gamma-ray spectrum
365 unsigned int ebins = 8000;
366 float emin = -0.25;
367 float emax = 4000.0 + emin; // 4 MeV range
368
369 hdgf_cal[i][j] = new TH1F( hname.data(), htitle.data(), ebins, emin, emax );
370 histlist->Add(hdgf_cal[i][j]);
371
372 } // j - channels
373
374 } // i - DGF
375
376 // Loop over ADC modules
377 for( unsigned int i = 0; i < set->GetNumberOfAdcModules(); ++i ) {
378
379 hadc_qshort[i].resize( set->GetMaximumNumberOfAdcChannels() );
380 hadc_cal[i].resize( set->GetMaximumNumberOfAdcChannels() );
381
382 // New directory
383 dirname = maindirname + "adc_" + std::to_string(i);
384 if( !output_file->GetDirectory( dirname.data() ) )
385 output_file->mkdir( dirname.data() );
386 output_file->cd( dirname.data() );
387
388 for( unsigned int j = 0; j < set->GetMaximumNumberOfAdcChannels(); ++j ) {
389
390 // Uncalibrated energy 16-bit value
391 hname = "adc_" + std::to_string(i);
392 hname += "_" + std::to_string(j);
393 hname += "_qshort";
394
395 htitle = "Raw ADC spectra for module " + std::to_string(i);
396 htitle += ", channel " + std::to_string(j);
397 htitle += ";Charge value;Counts";
398
399 hadc_qshort[i][j] = new TH1F( hname.data(), htitle.data(), 8192, 0, 8192 );
400 histlist->Add(hadc_qshort[i][j]);
401
402 // Calibrated energy
403 hname = "adc_" + std::to_string(i);
404 hname += "_" + std::to_string(j);
405 hname += "_cal";
406
407 htitle = "Calibrated ADC spectra for module " + std::to_string(i);
408 htitle += ", channel " + std::to_string(j);
409 htitle += ";Energy (keV);Counts per 0.5 keV";
410
411 // Assume particle spectrum
412 unsigned int ebins = 6000;
413 float emin = -1e3;
414 float emax = 1.2e6 + emin; // 1.2 GeV range
415
416 hadc_cal[i][j] = new TH1F( hname.data(), htitle.data(), ebins, emin, emax );
417 histlist->Add(hadc_cal[i][j]);
418
419 } // j - channels
420
421 } // i - ADC
422
423
424 // Hit time plot
425 output_file->cd( maindirname.data() );
426 hhit_time = new TH1F( "hhit_time", "Hit time distribution", 3200, -16000, 16000 );
427 histlist->Add(hhit_time);
428
429 // Write once
430 output_file->Write();
431
432 return;
433
434}
435
436// Reset histograms in the DataSpy
438
439 // Loop over the hist list
440 TIter next( histlist->MakeIterator() );
441 while( TObject *obj = next() ) {
442
443 if( obj->InheritsFrom( "TH2" ) )
444 ( (TH2*)obj )->Reset("ICESM");
445 else if( obj->InheritsFrom( "TH1" ) )
446 ( (TH1*)obj )->Reset("ICESM");
447
448 }
449
450}
451
453
454 // Make the index for the MBS info tree
455 mbsinfo_tree->BuildIndex( "mbsinfo.GetEventID()" );
456
457 return;
458
459}
460
461bool MiniballConverter::TimeComparator( const std::shared_ptr<MiniballDataPackets> &lhs,
462 const std::shared_ptr<MiniballDataPackets> &rhs ) {
463
464 return lhs->GetTime() < rhs->GetTime();
465
466}
467
468bool MiniballConverter::MapComparator( const std::pair<unsigned long,double> &lhs,
469 const std::pair<unsigned long,double> &rhs ) {
470
471 return lhs.second < rhs.second;
472
473}
474
476
477 // Sort the data vector as we go along
478 std::sort( data_vector.begin(), data_vector.end(), TimeComparator );
479
480}
481
483
484 // Sort the data vector as we go along
485 std::sort( data_map.begin(), data_map.end(), MapComparator );
486
487}
488
489unsigned long long int MiniballConverter::SortTree( bool do_sort ){
490
491 // Reset the sorted tree so it's empty before we start
492 sorted_tree->Reset();
493
494 // Get number of data packets
495 long long int n_ents = data_vector.size(); // std::vector method
496
497 // Check we have entries and build time-ordered index
498 if( n_ents && do_sort ) {
499 std::cout << "Time ordering " << n_ents << " data items..." << std::endl;
500 SortDataMap();
501 }
502 else if( n_ents == 0 ) return 0;
503
504 // Loop on t_raw entries and fill t
505 std::cout << "Writing time-ordered data items to the output tree..." << std::endl;
506 for( long long int i = 0; i < n_ents; ++i ) {
507
508 // Get the data item back from the vector
509 unsigned long idx = data_map[i].first;
510 write_packet->SetData( data_vector[idx] );
511
512 // Fill the sorted tree
513 sorted_tree->Fill();
514
515 // Progress bar
516 bool update_progress = false;
517 if( n_ents < 200 )
518 update_progress = true;
519 else if( i % (n_ents/100) == 0 || i+1 == n_ents )
520 update_progress = true;
521
522 if( update_progress ) {
523
524 // Percent complete
525 float percent = (float)(i+1)*100.0/(float)n_ents;
526
527 // Progress bar in GUI
528 if( _prog_ ) {
529
530 prog->SetPosition( percent );
531 gSystem->ProcessEvents();
532
533 }
534
535 // Progress bar in terminal
536 std::cout << " " << std::setw(6) << std::setprecision(4);
537 std::cout << percent << "% \r";
538 std::cout.flush();
539
540 } // progress bar
541
542 } // i
543
544 return n_ents;
545
546}
547
548
std::shared_ptr< FebexData > febex_data
Definition Converter.hh:166
static bool TimeComparator(const std::shared_ptr< MiniballDataPackets > &lhs, const std::shared_ptr< MiniballDataPackets > &rhs)
Definition Converter.cc:461
std::vector< std::vector< TProfile * > > hfebex_hit
Definition Converter.hh:193
std::vector< std::vector< TProfile * > > hfebex_resume
Definition Converter.hh:195
std::vector< std::vector< std::vector< long long int > > > tm_stp_febex_ch
Definition Converter.hh:213
std::vector< std::vector< std::vector< TH1F * > > > hfebex_qint
Definition Converter.hh:202
std::vector< std::vector< TProfile * > > hfebex_pause
Definition Converter.hh:194
unsigned long int jump_ctr
Definition Converter.hh:187
std::vector< std::vector< std::vector< TH1F * > > > hfebex_mwd
Definition Converter.hh:205
std::shared_ptr< MiniballDataPackets > write_packet
Definition Converter.hh:163
std::vector< std::vector< TH1F * > > hdgf_cal
Definition Converter.hh:199
std::vector< std::vector< unsigned long int > > ctr_febex_sync
Definition Converter.hh:186
std::shared_ptr< MiniballCalibration > cal
Definition Converter.hh:220
unsigned long int data_ctr
Definition Converter.hh:188
std::shared_ptr< DgfData > dgf_data
Definition Converter.hh:164
std::vector< std::vector< std::vector< TH1F * > > > hfebex_cal
Definition Converter.hh:204
std::shared_ptr< MiniballSettings > set
Definition Converter.hh:217
std::vector< std::shared_ptr< MiniballDataPackets > > data_vector
Definition Converter.hh:170
std::vector< std::vector< TH1F * > > hadc_cal
Definition Converter.hh:201
std::vector< std::vector< unsigned long int > > ctr_febex_resume
Definition Converter.hh:185
std::shared_ptr< InfoData > info_data
Definition Converter.hh:167
std::vector< std::pair< unsigned long, double > > data_map
Definition Converter.hh:171
std::vector< std::vector< TH1F * > > hdgf_qshort
Definition Converter.hh:198
std::vector< long long int > tm_stp_read
Definition Converter.hh:211
std::shared_ptr< AdcData > adc_data
Definition Converter.hh:165
std::vector< std::vector< long long int > > tm_stp_febex
Definition Converter.hh:212
std::vector< std::vector< unsigned long int > > ctr_febex_pause
Definition Converter.hh:184
std::shared_ptr< TGProgressBar > prog
Definition Converter.hh:224
unsigned long int reject_ctr
Definition Converter.hh:189
std::vector< std::vector< unsigned long int > > ctr_febex_hit
Definition Converter.hh:183
unsigned long long int SortTree(bool do_sort=true)
Definition Converter.cc:489
std::vector< std::vector< TH1F * > > hadc_qshort
Definition Converter.hh:200
unsigned long long qmax_default
Definition Converter.hh:159
unsigned long my_tm_stp_msb
Definition Converter.hh:122
unsigned long int mash_ctr
Definition Converter.hh:187
unsigned long int warp_ctr
Definition Converter.hh:187
void SetOutput(std::string output_file_name)
Definition Converter.cc:111
std::vector< bool > first_data
Definition Converter.hh:210
unsigned long my_tm_stp_hsb
Definition Converter.hh:123
MiniballConverter(std::shared_ptr< MiniballSettings > myset)
Definition Converter.cc:4
std::vector< std::vector< TProfile * > > hfebex_sync
Definition Converter.hh:196
static bool MapComparator(const std::pair< unsigned long, double > &lhs, const std::pair< unsigned long, double > &rhs)
Definition Converter.cc:468
std::vector< std::vector< std::vector< TH1F * > > > hfebex_qshort
Definition Converter.hh:203
std::shared_ptr< MBSInfoPackets > mbsinfo_packet
Definition Converter.hh:162
std::shared_ptr< MiniballSettings > myset
Definition mb_sort.cc:123