MiniballSort
Loading...
Searching...
No Matches
EventBuilder.hh
Go to the documentation of this file.
1#ifndef __EVENTBUILDER_HH
2#define __EVENTBUILDER_HH
3
4#include <fstream>
5#include <iostream>
6#include <string>
7#include <sstream>
8#include <vector>
9#include <memory>
10
11#include <TFile.h>
12#include <TTree.h>
13#include <TMath.h>
14#include <TChain.h>
15#include <TH1.h>
16#include <TH2.h>
17#include <TProfile.h>
18#include <TVector2.h>
19#include <TVector3.h>
20#include <TGProgressBar.h>
21#include <TSystem.h>
22#include <TKey.h>
23#include <TCanvas.h>
24#include <TROOT.h>
25
26// Settings header
27#ifndef __SETTINGS_HH
28# include "Settings.hh"
29#endif
30
31// Calibration header
32#ifndef __CALIBRATION_HH
33# include "Calibration.hh"
34#endif
35
36// Data packets header
37#ifndef __DATAPACKETS_HH
38# include "DataPackets.hh"
39#endif
40
41// Miniball Events tree
42#ifndef __MINIBALLEVTS_HH
43# include "MiniballEvts.hh"
44#endif
45
46
47
49
50public:
51
52 MiniballEventBuilder( std::shared_ptr<MiniballSettings> myset );
54
55 void SetInputFile( std::string input_file_name );
56 void SetInputTree( TTree *user_tree );
57 void SetMBSInfoTree( TTree *user_tree );
58 void SetOutput( std::string output_file_name, bool cWrite = false );
59 void StartFile();
60 void Initialise();
61 void MakeEventHists();
62 void ResetHists();
63
64 inline void AddCalibration( std::shared_ptr<MiniballCalibration> mycal ){
65 cal = mycal;
66 overwrite_cal = true;
67 };
68 inline void AddProgressBar( std::shared_ptr<TGProgressBar> myprog ){
69 prog = myprog;
70 _prog_ = true;
71 };
72
73 unsigned long BuildEvents();
74
75 // Resolve multiplicities and coincidences etc
76 void GammaRayFinder();
77 void ParticleFinder();
78 void BeamDumpFinder();
79 void SpedeFinder();
80 void IonChamberFinder();
81
82 inline TFile* GetFile(){ return output_file; };
83 inline TTree* GetTree(){ return output_tree; };
84 inline void CloseOutput(){
85 std::cout << "Writing output file...\r";
86 std::cout.flush();
87 output_file->Write( nullptr, TObject::kOverwrite );
88 std::cout << "Writing output file... Done!" << std::endl << std::endl;
89 output_tree->ResetBranchAddresses();
91 output_file->Close();
92 input_tree->ResetBranchAddresses();
93 mbsinfo_tree->ResetBranchAddresses();
94 input_file->Close();
95 delete in_data;
96 delete mbs_info;
97 log_file.close(); //?? to close or not to close?
98 };
99 inline void PurgeOutput(){
100 input_tree->Reset();
101 mbsinfo_tree->Reset();
102 output_file->Purge(2);
103 }
104
105
106private:
107
114 std::shared_ptr<DgfData> dgf_data;
115 std::shared_ptr<AdcData> adc_data;
116 std::shared_ptr<FebexData> febex_data;
117 std::shared_ptr<InfoData> info_data;
118
122 std::unique_ptr<MiniballEvts> write_evts;
123 std::shared_ptr<GammaRayEvt> gamma_evt;
124 std::shared_ptr<GammaRayAddbackEvt> gamma_ab_evt;
125 std::shared_ptr<ParticleEvt> particle_evt;
126 std::shared_ptr<SpedeEvt> spede_evt;
127 std::shared_ptr<BeamDumpEvt> bd_evt;
128 std::shared_ptr<IonChamberEvt> ic_evt;
129
130 // Do calibration
131 std::shared_ptr<MiniballCalibration> cal;
133
134 // Settings file
135 std::shared_ptr<MiniballSettings> set;
136
137 // Progress bar
138 bool _prog_;
139 std::shared_ptr<TGProgressBar> prog;
140
141 // Check if histograms are made
142 bool hists_ready = false;
143
144 // List of histograms for reset later
145 TList *histlist;
146
147 // Log file
148 std::ofstream log_file;
149
150 // Flag to know we've opened a file on disk
152
153 // Build window which comes from the settings file
155
156 // Flags
158 std::vector<std::vector<bool>> flag_pause, flag_resume;
160
161 // Time variables
163 unsigned long long time_prev, time_min, time_max, time_first;
164 unsigned long long ebis_time, ebis_prev;
165 unsigned long long t1_time, t1_prev;
166 unsigned long long sc_time, sc_prev;
167 unsigned long long laser_time;
170 std::vector<unsigned long long> pulser_time, pulser_prev;
171 std::vector<std::vector<unsigned long long>> pause_time, resume_time;
172 std::vector<std::vector<unsigned long long>> sync_time;
173 std::vector<std::vector<unsigned long long>> febex_dead_time;
174 std::vector<std::vector<unsigned long long>> febex_time_start, febex_time_stop;
175 std::vector<std::vector<std::vector<unsigned long long>>> febex_time_ch;
176
177 // Data variables - generic
178 unsigned char mysfp;
179 unsigned char myboard;
180 unsigned char mydgf;
181 unsigned char myadc;
182 unsigned char mych;
183 unsigned long long mytime;
185 unsigned long long myeventid;
186 unsigned long long preveventid;
187 unsigned long long myeventtime;
188 float myenergy;
189 bool mythres;
190 bool mypileup;
192 bool mylaser;
193
194
195 // Miniball specific variables
196 std::vector<float> mb_en_list;
197 std::vector<unsigned long long> mb_ts_list;
198 std::vector<unsigned char> mb_clu_list;
199 std::vector<unsigned char> mb_cry_list;
200 std::vector<unsigned char> mb_seg_list;
201
202 // CD detector specific variables
203 std::vector<float> cd_en_list;
204 std::vector<unsigned long long> cd_ts_list;
205 std::vector<unsigned char> cd_det_list;
206 std::vector<unsigned char> cd_sec_list;
207 std::vector<unsigned char> cd_side_list;
208 std::vector<unsigned char> cd_strip_list;
209
210 // PAD detector specific variables
211 std::vector<float> pad_en_list;
212 std::vector<unsigned long long> pad_ts_list;
213 std::vector<unsigned char> pad_det_list;
214 std::vector<unsigned char> pad_sec_list;
215
216
217 // Beam dump detector specific variables
218 std::vector<float> bd_en_list;
219 std::vector<unsigned long long> bd_ts_list;
220 std::vector<unsigned char> bd_det_list;
221
222 // Spede detector specific variables
223 std::vector<float> spede_en_list;
224 std::vector<unsigned long long> spede_ts_list;
225 std::vector<unsigned char> spede_seg_list;
226
227 // IonChamber detector specific variables
228 std::vector<float> ic_en_list;
229 std::vector<unsigned long long> ic_ts_list;
230 std::vector<unsigned char> ic_id_list;
231
232
233 // Counters
236 unsigned long n_ebis, n_t1, n_sc, n_rilis;
237 std::vector<unsigned long> n_sfp, n_dgf, n_adc, n_pulser;
238 std::vector<std::vector<unsigned long>> n_board, n_sync;
239 std::vector<std::vector<unsigned long>> n_pause, n_resume;
240 unsigned long n_miniball, n_cd, n_pad, n_spede, n_bd, n_ic;
241 unsigned long repeat_ctr;
242
243
244 // Timing histograms
249
250 // Miniball histograms
253 std::vector<std::vector<TH2F*>> mb_en_core_seg;
254 std::vector<std::vector<TH2F*>> mb_en_core_seg_ebis_on;
255
256 // CD histograms
257 std::vector<std::vector<TH2F*>> cd_pn_mult;
258 std::vector<std::vector<TH2F*>> cd_pen_id, cd_nen_id;
259 std::vector<std::vector<TH1F*>> cd_pn_td, cd_pp_td, cd_nn_td;
260 std::vector<std::vector<TH2F*>> cd_pn_1v1, cd_pn_1v2, cd_pn_2v1, cd_pn_2v2;
261
262 // Pad histograms
263 std::vector<std::vector<TH2F*>> cd_ppad_mult;
264 std::vector<std::vector<TH1F*>> cd_ppad_td;
265 std::vector<TH2F*> pad_en_id;
266
267 // Ion chamber histograms
268 TH2F *ic_dE_E;
269 TH1F *ic_dE, *ic_E;
270 TH1F *ic_td;
271
272};
273
274#endif
275
unsigned long spede_ctr
std::shared_ptr< ParticleEvt > particle_evt
std::shared_ptr< TGProgressBar > prog
std::vector< unsigned char > spede_seg_list
list of Spede segment IDs
std::vector< unsigned long long > spede_ts_list
list of Spede timestamps for ElectronFinder
std::vector< unsigned char > cd_strip_list
list of CD strip IDs
unsigned long long preveventid
previous MBS event id
void AddCalibration(std::shared_ptr< MiniballCalibration > mycal)
unsigned long long ebis_time
TFile * input_file
Input tree.
bool mythres
above threshold?
std::vector< std::vector< TH2F * > > mb_en_core_seg
bool mylaser
laser pattern bit
std::shared_ptr< MiniballCalibration > cal
std::vector< std::vector< unsigned long > > n_resume
std::vector< std::vector< unsigned long long > > febex_dead_time
std::vector< std::vector< TH2F * > > cd_pn_1v2
std::vector< unsigned char > ic_id_list
list of IonChamber layer IDs
void SetInputFile(std::string input_file_name)
MiniballEventBuilder(std::shared_ptr< MiniballSettings > myset)
std::vector< float > mb_en_list
list of Miniball energies for GammaRayFinder
std::shared_ptr< GammaRayEvt > gamma_evt
void StartFile()
called for every file
unsigned long long myeventtime
MBS event time.
std::shared_ptr< FebexData > febex_data
unsigned long BuildEvents()
std::vector< std::vector< TH2F * > > cd_pen_id
std::vector< unsigned char > cd_sec_list
list of CD sector IDs
std::vector< std::vector< TH2F * > > cd_pn_1v1
std::vector< unsigned long long > cd_ts_list
list of CD timestamps for ParticleFinder
unsigned long long time_max
std::vector< unsigned char > cd_det_list
list of CD detector IDs
unsigned long n_spede
std::vector< unsigned char > pad_det_list
list of PAD detector IDs
std::vector< std::vector< unsigned long long > > pause_time
std::vector< unsigned char > bd_det_list
list of beam dump detector IDs
unsigned long repeat_ctr
void SetMBSInfoTree(TTree *user_tree)
unsigned long n_miniball
unsigned long long sc_time
std::vector< std::vector< TH2F * > > mb_en_core_seg_ebis_on
std::shared_ptr< AdcData > adc_data
unsigned long n_info_data
std::vector< std::vector< bool > > flag_resume
MiniballDataPackets * in_data
std::vector< std::vector< unsigned long long > > sync_time
unsigned char mydgf
DGF module number.
unsigned long gamma_ab_ctr
unsigned long long mytime
absolute timestamp
std::shared_ptr< DgfData > dgf_data
std::vector< std::vector< TH2F * > > cd_ppad_mult
unsigned char myboard
febex board number
std::vector< unsigned char > pad_sec_list
list of PAD sector IDs
std::vector< std::vector< TH2F * > > cd_pn_mult
std::vector< unsigned char > mb_cry_list
list of crystal IDs
std::vector< TH2F * > pad_en_id
bool flag_close_event
length of build window in ns
unsigned long long t1_prev
std::vector< std::vector< unsigned long long > > febex_time_start
std::vector< float > ic_en_list
list of IonChamber energies for IonChamberFinder
std::vector< std::vector< TH2F * > > cd_pn_2v1
std::vector< unsigned long long > pulser_time
std::vector< unsigned long > n_adc
std::vector< std::vector< unsigned long > > n_board
bool mypileup
pileup flag?
unsigned long n_rilis
unsigned long gamma_ctr
std::vector< float > spede_en_list
list of Spede energies for ElectronFinder
std::shared_ptr< GammaRayAddbackEvt > gamma_ab_evt
std::shared_ptr< InfoData > info_data
std::vector< unsigned long long > mb_ts_list
list of Miniball timestamps for GammaRayFinder
bool myclipped
clipped flag?
std::shared_ptr< BeamDumpEvt > bd_evt
unsigned long hit_ctr
unsigned char mysfp
sfp number
std::vector< std::vector< bool > > flag_pause
std::vector< float > bd_en_list
list of beam dump energies for BeamDumpFinder
unsigned long n_dgf_data
long myhittime
hit time with respect to event time
void Initialise()
called for every event
void PurgeOutput()
Closes the output files from this class.
unsigned long long t1_time
unsigned long long time_prev
std::vector< std::vector< TH1F * > > cd_nn_td
unsigned char myadc
ADC module number.
void SetInputTree(TTree *user_tree)
std::vector< unsigned char > cd_side_list
list of CD side IDs; 0 = p, 1 = n
std::shared_ptr< MiniballSettings > set
unsigned long long ebis_prev
std::vector< std::vector< TH1F * > > cd_pp_td
std::vector< unsigned long long > pad_ts_list
list of PAD timestamps for ParticleFinder
std::vector< std::vector< TH2F * > > cd_pn_2v2
std::unique_ptr< MiniballEvts > write_evts
std::shared_ptr< IonChamberEvt > ic_evt
unsigned long long time_min
MBSInfoPackets * mbs_info
unsigned long n_adc_data
std::vector< unsigned long > n_sfp
unsigned char mych
channel number
unsigned long long myeventid
MBS event id.
unsigned long n_entries
std::vector< std::vector< unsigned long > > n_pause
std::vector< std::vector< TH2F * > > cd_nen_id
unsigned long long sc_prev
float myenergy
calibrated energy
std::shared_ptr< SpedeEvt > spede_evt
std::vector< unsigned long > n_pulser
std::vector< unsigned long long > pulser_prev
std::vector< unsigned long long > bd_ts_list
list of beam dump timestamps for BeamDumpFinder
std::vector< unsigned long long > ic_ts_list
list of IonChamber timestamps for IonChamberFinder
std::vector< unsigned char > mb_seg_list
list of segment IDs
TFile * output_file
Outputs.
std::vector< float > pad_en_list
list of PAD energies for ParticleFinder
std::ofstream log_file
Log file for recording the results of the MiniballEventBuilder.
std::vector< unsigned char > mb_clu_list
list of cluster IDs
std::vector< std::vector< unsigned long > > n_sync
std::vector< float > cd_en_list
list of CD energies for ParticleFinder
void AddProgressBar(std::shared_ptr< TGProgressBar > myprog)
std::vector< std::vector< unsigned long long > > resume_time
void SetOutput(std::string output_file_name, bool cWrite=false)
unsigned long long time_first
unsigned long n_mbs_entries
std::vector< std::vector< TH1F * > > cd_ppad_td
std::vector< std::vector< std::vector< unsigned long long > > > febex_time_ch
unsigned long n_febex_data
std::vector< std::vector< unsigned long long > > febex_time_stop
std::vector< std::vector< TH1F * > > cd_pn_td
unsigned long long laser_time
std::vector< unsigned long > n_dgf
std::shared_ptr< MiniballSettings > myset
Definition mb_sort.cc:123
std::shared_ptr< MiniballCalibration > mycal
Definition mb_sort.cc:126