MiniballSort
Loading...
Searching...
No Matches
Histogrammer.hh
Go to the documentation of this file.
1#ifndef __HISTOGRAMMER_HH
2#define __HISTOGRAMMER_HH
3
4#include <fstream>
5#include <iostream>
6#include <iomanip>
7#include <string>
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 <TRandom.h>
16#include <TProfile.h>
17#include <TH1.h>
18#include <TH2.h>
19#include <TCutG.h>
20#include <TGProgressBar.h>
21#include <TSystem.h>
22#include <TKey.h>
23#include <TCanvas.h>
24#include <TROOT.h>
25
26// Reaction header
27#ifndef __REACTION_HH
28# include "Reaction.hh"
29#endif
30
31// Miniball Events tree
32#ifndef __MINIBALLEVTS_HH
33# include "MiniballEvts.hh"
34#endif
35
36// Settings file
37#ifndef __SETTINGS_HH
38# include "Settings.hh"
39#endif
40
42
43public:
44
45 MiniballHistogrammer( std::shared_ptr<MiniballReaction> myreact, std::shared_ptr<MiniballSettings> myset );
47
48 void MakeHists();
49 void ResetHists();
50 unsigned long FillHists();
51 void FillParticleGammaHists( std::shared_ptr<GammaRayEvt> g );
52 void FillParticleGammaHists( std::shared_ptr<GammaRayAddbackEvt> g );
53 void FillParticleElectronHists( std::shared_ptr<SpedeEvt> s );
54 void FillParticleGammaGammaHists( std::shared_ptr<GammaRayEvt> g1, std::shared_ptr<GammaRayEvt> g2 );
55 void FillParticleGammaGammaHists( std::shared_ptr<GammaRayAddbackEvt> g1, std::shared_ptr<GammaRayAddbackEvt> g2 );
56 void FillParticleElectronGammaHists( std::shared_ptr<SpedeEvt> s, std::shared_ptr<GammaRayEvt> g );
57 void FillParticleElectronGammaHists( std::shared_ptr<SpedeEvt> s, std::shared_ptr<GammaRayAddbackEvt> g );
58
59 void PlotDefaultHists();
60 void PlotPhysicsHists();
61 void SetSpyHists( std::vector<std::vector<std::string>> hists, short layout[2] );
62
63 void SetInputFile( std::vector<std::string> input_file_names );
64 void SetInputFile( std::string input_file_name );
65 void SetInputTree( TTree *user_tree );
66
67 inline void SetOutput( std::string output_file_name, bool cWrite = false ){
68 output_file = new TFile( output_file_name.data(), "recreate" );
69 MakeHists();
70 hists_ready = true;
71 if( cWrite ) output_file->Write();
72 };
73 inline void CloseOutput( ){
74 output_file->Write( nullptr, TObject::kOverwrite );
76 output_file->Close();
77 input_tree->ResetBranchAddresses();
78 delete read_evts;
79 };
80 inline void PurgeOutput(){
81 input_tree->Reset();
82 output_file->Purge(2);
83 }
84
85 inline TFile* GetFile(){ return output_file; };
86
87 inline void AddProgressBar( std::shared_ptr<TGProgressBar> myprog ){
88 prog = myprog;
89 _prog_ = true;
90 };
91
92 // Coincidence conditions (to be put in settings file eventually?)
93 inline bool PromptCoincidence( std::shared_ptr<GammaRayEvt> g, std::shared_ptr<ParticleEvt> p ){
94 return PromptCoincidence( g, p->GetTime() );
95 };
96 inline bool PromptCoincidence( std::shared_ptr<GammaRayEvt> g, unsigned long long ptime ){
97 if( (double)ptime - (double)g->GetTime() > react->GetParticleGammaPromptTime(0) &&
98 (double)ptime - (double)g->GetTime() < react->GetParticleGammaPromptTime(1) )
99 return true;
100 else return false;
101 };
102 inline bool RandomCoincidence( std::shared_ptr<GammaRayEvt> g, std::shared_ptr<ParticleEvt> p ){
103 return RandomCoincidence( g, p->GetTime() );
104 };
105 inline bool RandomCoincidence( std::shared_ptr<GammaRayEvt> g, unsigned long long ptime ){
106 if( (double)ptime - (double)g->GetTime() > react->GetParticleGammaRandomTime(0) &&
107 (double)ptime - (double)g->GetTime() < react->GetParticleGammaRandomTime(1) )
108 return true;
109 else return false;
110 };
111 inline bool PromptCoincidence( std::shared_ptr<GammaRayAddbackEvt> g, std::shared_ptr<ParticleEvt> p ){
112 return PromptCoincidence( g, p->GetTime() );
113 };
114 inline bool PromptCoincidence( std::shared_ptr<SpedeEvt> s, std::shared_ptr<ParticleEvt> p ){
115 return PromptCoincidence( s, p->GetTime() );
116 };
117 inline bool PromptCoincidence( std::shared_ptr<SpedeEvt> s, unsigned long long ptime ){
118 if( (double)ptime - (double)s->GetTime() > react->GetParticleElectronPromptTime(0) &&
119 (double)ptime - (double)s->GetTime() < react->GetParticleElectronPromptTime(1) )
120 return true;
121 else return false;
122 };
123 inline bool RandomCoincidence( std::shared_ptr<SpedeEvt> s, std::shared_ptr<ParticleEvt> p ){
124 return RandomCoincidence( s, p->GetTime() );
125 };
126 inline bool RandomCoincidence( std::shared_ptr<SpedeEvt> s, unsigned long long ptime ){
127 if( (double)ptime - (double)s->GetTime() > react->GetParticleElectronRandomTime(0) &&
128 (double)ptime - (double)s->GetTime() < react->GetParticleElectronRandomTime(1) )
129 return true;
130 else return false;
131 };
132 inline bool PromptCoincidence( std::shared_ptr<GammaRayEvt> g1, std::shared_ptr<GammaRayEvt> g2 ){
133 if( (double)g1->GetTime() - (double)g2->GetTime() > react->GetGammaGammaPromptTime(0) &&
134 (double)g1->GetTime() - (double)g2->GetTime() < react->GetGammaGammaPromptTime(1) )
135 return true;
136 else return false;
137 };
138 inline bool RandomCoincidence( std::shared_ptr<GammaRayEvt> g1, std::shared_ptr<GammaRayEvt> g2 ){
139 if( (double)g1->GetTime() - (double)g2->GetTime() > react->GetGammaGammaRandomTime(0) &&
140 (double)g1->GetTime() - (double)g2->GetTime() < react->GetGammaGammaRandomTime(1) )
141 return true;
142 else return false;
143 };
144 inline bool PromptCoincidence( std::shared_ptr<SpedeEvt> s1, std::shared_ptr<SpedeEvt> s2 ){
145 if( (double)s1->GetTime() - (double)s2->GetTime() > react->GetElectronElectronPromptTime(0) &&
146 (double)s1->GetTime() - (double)s2->GetTime() < react->GetElectronElectronPromptTime(1) )
147 return true;
148 else return false;
149 };
150 inline bool RandomCoincidence( std::shared_ptr<SpedeEvt> s1, std::shared_ptr<SpedeEvt> s2 ){
151 if( (double)s1->GetTime() - (double)s2->GetTime() > react->GetElectronElectronRandomTime(0) &&
152 (double)s1->GetTime() - (double)s2->GetTime() < react->GetElectronElectronRandomTime(1) )
153 return true;
154 else return false;
155 };
156 inline bool PromptCoincidence( std::shared_ptr<ParticleEvt> p1, std::shared_ptr<ParticleEvt> p2 ){
157 if( (double)p1->GetTime() - (double)p2->GetTime() > react->GetParticleParticlePromptTime(0) &&
158 (double)p1->GetTime() - (double)p2->GetTime() < react->GetParticleParticlePromptTime(1) )
159 return true;
160 else return false;
161 };
162 inline bool RandomCoincidence( std::shared_ptr<ParticleEvt> p1, std::shared_ptr<ParticleEvt> p2 ){
163 if( (double)p1->GetTime() - (double)p2->GetTime() > react->GetParticleParticleRandomTime(0) &&
164 (double)p1->GetTime() - (double)p2->GetTime() < react->GetParticleParticleRandomTime(1) )
165 return true;
166 else return false;
167 };
168 inline bool PromptCoincidence( std::shared_ptr<BeamDumpEvt> g1, std::shared_ptr<BeamDumpEvt> g2 ){
169 if( (double)g1->GetTime() - (double)g2->GetTime() > react->GetGammaGammaPromptTime(0) &&
170 (double)g1->GetTime() - (double)g2->GetTime() < react->GetGammaGammaPromptTime(1) )
171 return true;
172 else return false;
173 };
174 inline bool RandomCoincidence( std::shared_ptr<BeamDumpEvt> g1, std::shared_ptr<BeamDumpEvt> g2 ){
175 if( (double)g1->GetTime() - (double)g2->GetTime() > react->GetGammaGammaRandomTime(0) &&
176 (double)g1->GetTime() - (double)g2->GetTime() < react->GetGammaGammaRandomTime(1) )
177 return true;
178 else return false;
179 };
180 inline bool PromptCoincidence( std::shared_ptr<SpedeEvt> s, std::shared_ptr<GammaRayEvt> g ){
181 if( (double)s->GetTime() - (double)g->GetTime() > react->GetGammaElectronPromptTime(0) &&
182 (double)s->GetTime() - (double)g->GetTime() < react->GetGammaElectronPromptTime(1) )
183 return true;
184 else return false;
185 };
186 inline bool PromptCoincidence( std::shared_ptr<GammaRayEvt> g, std::shared_ptr<SpedeEvt> s ){
187 return PromptCoincidence( s, g );
188 };
189 inline bool RandomCoincidence( std::shared_ptr<SpedeEvt> s, std::shared_ptr<GammaRayEvt> g ){
190 if( (double)s->GetTime() - (double)g->GetTime() > react->GetGammaElectronRandomTime(0) &&
191 (double)s->GetTime() - (double)g->GetTime() < react->GetGammaElectronRandomTime(1) )
192 return true;
193 else return false;
194 };
195 inline bool RandomCoincidence( std::shared_ptr<GammaRayEvt> g, std::shared_ptr<SpedeEvt> s ){
196 return RandomCoincidence( s, g );
197 };
198 inline bool OnBeam( std::shared_ptr<GammaRayEvt> g ){
199 if( (double)g->GetTime() - (double)read_evts->GetEBIS() >= 0 &&
200 (double)g->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOnTime() ) return true;
201 else return false;
202 };
203 inline bool OnBeam( std::shared_ptr<SpedeEvt> s ){
204 if( (double)s->GetTime() - (double)read_evts->GetEBIS() >= 0 &&
205 (double)s->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOnTime() ) return true;
206 else return false;
207 };
208 inline bool OnBeam( std::shared_ptr<ParticleEvt> p ){
209 if( (double)p->GetTime() - (double)read_evts->GetEBIS() >= 0 &&
210 (double)p->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOnTime() ) return true;
211 else return false;
212 };
213 inline bool OffBeam( std::shared_ptr<GammaRayEvt> g ){
214 if( (double)g->GetTime() - (double)read_evts->GetEBIS() >= react->GetEBISOnTime() &&
215 (double)g->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOffTime() ) return true;
216 else return false;
217 };
218 inline bool OffBeam( std::shared_ptr<ParticleEvt> p ){
219 if( (double)p->GetTime() - (double)read_evts->GetEBIS() >= react->GetEBISOnTime() &&
220 (double)p->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOffTime() ) return true;
221 else return false;
222 };
223 inline bool OffBeam( std::shared_ptr<SpedeEvt> s ){
224 if( (double)s->GetTime() - (double)read_evts->GetEBIS() >= react->GetEBISOnTime() &&
225 (double)s->GetTime() - (double)read_evts->GetEBIS() < react->GetEBISOffTime() ) return true;
226 else return false;
227 };
228 inline bool T1Cut(){
229 if( (double)read_evts->GetEBIS() - (double)read_evts->GetT1() >= react->GetT1MinTime() &&
230 (double)read_evts->GetEBIS() - (double)read_evts->GetT1() < react->GetT1MaxTime() ) return true;
231 else return false;
232 }
233
234 // Particle energy vs angle cuts
235 inline bool TransferCut( std::shared_ptr<ParticleEvt> p ){
236 double xval = p->GetEnergy();
237 double yval = p->GetDeltaEnergy();
238 if( react->GetTransferX() == "dE" ) xval = p->GetDeltaEnergy();
239 else if( react->GetTransferX() == "E" ) xval = p->GetEnergy();
240 else if( react->GetTransferX() == "theta" ) xval = react->GetParticleTheta(p) * TMath::RadToDeg();
241 if( react->GetTransferY() == "dE" ) yval = p->GetDeltaEnergy();
242 else if( react->GetTransferY() == "E" ) yval = p->GetEnergy();
243 else if( react->GetTransferY() == "theta" ) yval = react->GetParticleTheta(p) * TMath::RadToDeg();
244 return react->GetTransferCut()->IsInside( xval , yval );
245 }
246 inline bool EjectileCut( std::shared_ptr<ParticleEvt> p ){
247 return react->GetEjectileCut()->IsInside( react->GetParticleTheta(p) * TMath::RadToDeg(), p->GetEnergy() );
248 }
249 inline bool RecoilCut( std::shared_ptr<ParticleEvt> p ){
250 return react->GetRecoilCut()->IsInside( react->GetParticleTheta(p) * TMath::RadToDeg(), p->GetEnergy() );
251 }
252 inline bool TwoParticleCut( std::shared_ptr<ParticleEvt> p1, std::shared_ptr<ParticleEvt> p2 ){
253 if( EjectileCut(p1) && RecoilCut(p2) && PromptCoincidence( p1, p2 ) &&
254 TMath::Abs( react->GetParticleVector(p1).DeltaPhi( react->GetParticleVector(p2) ) ) < 1.5*TMath::Pi() &&
255 TMath::Abs( react->GetParticleVector(p1).DeltaPhi( react->GetParticleVector(p2) ) ) > 0.5*TMath::Pi() )
256 return true;
257 else return false;
258 }
259
260private:
261
262 // Reaction
263 std::shared_ptr<MiniballReaction> react;
264
265 // Settings file
266 std::shared_ptr<MiniballSettings> set;
267
268 // Input tree
269 TChain *input_tree;
271 std::shared_ptr<GammaRayEvt> gamma_evt, gamma_evt2;
272 std::shared_ptr<GammaRayAddbackEvt> gamma_ab_evt, gamma_ab_evt2;
273 std::shared_ptr<ParticleEvt> particle_evt, particle_evt2;
274 std::shared_ptr<BeamDumpEvt> bd_evt, bd_evt2;
275 std::shared_ptr<SpedeEvt> spede_evt, spede_evt2;
276 std::shared_ptr<IonChamberEvt> ic_evt;
277
278 // Output file
280
281 // Progress bar
282 bool _prog_;
283 std::shared_ptr<TGProgressBar> prog;
284
285 // Check if histograms are made
286 bool hists_ready = false;
287
288 // List of histograms for reset later
289 TList *histlist;
290
291 // Canvas and hist lists for the spy
292 std::vector<std::vector<std::string>> spyhists;
293 short spylayout[2];
294 std::unique_ptr<TCanvas> c1, c2;
295 bool spymode = false;
296
297 // Counters
298 unsigned long n_entries;
299
300 // Random number
301 TRandom rand;
302
303 //------------//
304 // Histograms //
305 //------------//
306
307 // Histogram limits
308 unsigned int GBIN = 6000; // number of bins in gamma spectra
309 float GMIN = -0.5; // lower limit of energy in gamma spectra
310 float GMAX = 5999.5; // upper limit of energy in gamma spectra
311 unsigned int EBIN = 2000; // number of bins in electron spectra
312 float EMIN = -0.5; // lower limit of energy in electron spectra
313 float EMAX = 1999.5; // upper limit of energy in electron spectra
314 unsigned int PBIN = 2000; // number of bins in particle spectra
315 float PMIN = 0.0; // lower limit of energy in particle spectra
316 float PMAX = 2000e3; // upper limit of energy in particle spectra
317 unsigned int TBIN; // number of bins in time difference histograms
318 float TMIN; // lower limit of time difference
319 float TMAX; // upper limit of time difference
320 unsigned int T1BIN = 2000; // number of bins in T1 time difference histograms
321 float T1MIN = 0; // lower limit of T1 time difference
322 float T1MAX = 20e9; // upper limit of T1 time difference
323
324 // EBIS
325 TH1F *ebis_td_particle = nullptr, *ebis_td_gamma = nullptr;
326
327 // Gamma-rays with and without addback
328 TH1F *gE_singles = nullptr, *gE_singles_ebis = nullptr;
329 TH1F *gE_singles_ebis_on = nullptr, *gE_singles_ebis_off = nullptr;
330 TH1F *aE_singles = nullptr, *aE_singles_ebis = nullptr;
331 TH1F *aE_singles_ebis_on = nullptr, *aE_singles_ebis_off = nullptr;
332 TH1F *gE_singles_dc = nullptr, *gE_singles_dc_ebis = nullptr;
333 TH1F *aE_singles_dc = nullptr, *aE_singles_dc_ebis = nullptr;
334 TH2F *gE_singles_vs_crystal = nullptr;
335 TH2F *aE_singles_vs_crystal = nullptr;
336 TH2F *gamma_xy_map_forward = nullptr, *gamma_xy_map_backward = nullptr;
337 TH2F *gamma_xz_map_left = nullptr, *gamma_xz_map_right = nullptr;
338 TH2F *gamma_theta_phi_map = nullptr;
339
340 // Electron singles
341 TH1F *eE_singles = nullptr, *eE_singles_ebis = nullptr;
342 TH1F *eE_singles_ebis_on = nullptr, *eE_singles_ebis_off = nullptr;
343 TH2F *electron_xy_map = nullptr;
344
345 // Gamma-ray coincidence matrices with and without addback
346 TH1F *gamma_gamma_td = nullptr, *gamma_gamma_td_prompt = nullptr, *gamma_gamma_td_random = nullptr;
347 TH2F *gE_gE = nullptr, *gE_gE_ebis_on = nullptr;
348 TH2F *aE_aE = nullptr, *aE_aE_ebis_on = nullptr;
349
350 // Electron coincidence matrices
352 TH2F *eE_eE = nullptr, *eE_eE_ebis_on = nullptr;
353
354 // Gamma-Electron coincidence matrices
356 TH2F *gE_eE = nullptr, *gE_eE_ebis_on = nullptr;
357 TH2F *aE_eE = nullptr, *aE_eE_ebis_on = nullptr;
358
359 // Particles
360 TH2F *pE_theta = nullptr, *pE_theta_coinc = nullptr;
361 TH2F *pE_theta_ejectile = nullptr, *pE_theta_recoil = nullptr;
362 TH2F *pE_theta_1p_ejectile = nullptr, *pE_theta_1p_recoil = nullptr;
363 TH2F *pE_theta_2p_ejectile = nullptr, *pE_theta_2p_recoil = nullptr;
364 std::vector<TH2F*> pE_dE, pE_dE_coinc, pE_dE_cut;
365 std::vector<TH2F*> pE_theta_sec, pE_theta_coinc_sec;
367 std::vector<std::vector<TH2F*>> pE_dE_sec, pE_dE_coinc_sec, pE_dE_cut_sec;
368 TProfile *pBeta_theta_ejectile = nullptr, *pBeta_theta_recoil = nullptr;
371 TH2F *particle_theta_phi_map = nullptr;
372
373 // Particle-gamma coincidences with and without addback
375 TH2F *gamma_particle_E_vs_td = nullptr;
376 std::vector<TH1F*> gamma_particle_td_sec;
377 std::vector<TH2F*> gamma_particle_E_vs_td_sec;
378 TH1F *gE_prompt = nullptr, *gE_prompt_1p = nullptr, *gE_prompt_2p = nullptr;
379 TH1F *gE_random = nullptr, *gE_random_1p = nullptr, *gE_random_2p = nullptr;
380 TH1F *aE_prompt = nullptr, *aE_prompt_1p = nullptr, *aE_prompt_2p = nullptr;
381 TH1F *aE_random = nullptr, *aE_random_1p = nullptr, *aE_random_2p = nullptr;
382
383 // Particle-electron coincidences
385 TH1F *eE_prompt = nullptr, *eE_prompt_1p = nullptr, *eE_prompt_2p = nullptr;
386 TH1F *eE_random = nullptr, *eE_random_1p = nullptr, *eE_random_2p = nullptr;
387
388 // Doppler-corrected gamma-rays without addback
390 TH1F *gE_recoil_dc_none = nullptr, *gE_recoil_dc_ejectile = nullptr, *gE_recoil_dc_recoil = nullptr;
393 TH1F *gE_2p_dc_none = nullptr, *gE_2p_dc_ejectile = nullptr, *gE_2p_dc_recoil = nullptr;
398 TH2F *gE_2p_dc_none_t1 = nullptr, *gE_2p_dc_ejectile_t1 = nullptr, *gE_2p_dc_recoil_t1 = nullptr;
414 TH2F *ggE_recoil_dc_none = nullptr, *ggE_recoil_dc_ejectile = nullptr, *ggE_recoil_dc_recoil = nullptr;
415
416 // Doppler-corrected gamma-rays with addback
418 TH1F *aE_recoil_dc_none = nullptr, *aE_recoil_dc_ejectile = nullptr, *aE_recoil_dc_recoil = nullptr;
421 TH1F *aE_2p_dc_none = nullptr, *aE_2p_dc_ejectile = nullptr, *aE_2p_dc_recoil = nullptr;
426 TH2F *aE_2p_dc_none_t1 = nullptr, *aE_2p_dc_ejectile_t1 = nullptr, *aE_2p_dc_recoil_t1 = nullptr;
442 TH2F *aaE_recoil_dc_none = nullptr, *aaE_recoil_dc_ejectile = nullptr, *aaE_recoil_dc_recoil = nullptr;
443
444 // Segment phi determination
445 std::vector<TH2F*> gE_vs_phi_dc_ejectile;
446 std::vector<TH2F*> gE_vs_phi_dc_recoil;
447
448 // Electron energy versus cos(theta)
449 TH2F *eE_costheta_ejectile = nullptr, *eE_costheta_recoil = nullptr;
450
451 // Doppler-corrected electrons
453 TH1F *eE_recoil_dc_none = nullptr, *eE_recoil_dc_ejectile = nullptr, *eE_recoil_dc_recoil = nullptr;
456 TH1F *eE_2p_dc_none = nullptr, *eE_2p_dc_ejectile = nullptr, *eE_2p_dc_recoil = nullptr;
465 TH2F *egE_recoil_dc_none = nullptr, *egE_recoil_dc_ejectile = nullptr, *egE_recoil_dc_recoil = nullptr;
467 TH2F *eaE_recoil_dc_none = nullptr, *eaE_recoil_dc_ejectile = nullptr, *eaE_recoil_dc_recoil = nullptr;
468
469 // Beam-dump histograms
470 TH1F *bdE_singles = nullptr;
471 std::vector<TH1F*> bdE_singles_det;
472 TH1F *bd_bd_td = nullptr;
473 TH2F *bdE_bdE = nullptr;
474
475 // IonChamber histograms
476 TH1F *ic_dE = nullptr, *ic_E = nullptr;
477 TH2F *ic_dE_E = nullptr;
478
479};
480
481#endif
unsigned long GetT1()
unsigned long GetEBIS()
TH2F * aE_vs_crystal_1p_ejectile_dc_ejectile
TH2F * aE_vs_crystal_ejectile_dc_recoil
TH2F * gE_vs_costheta_ejectile_dc_ejectile
TH2F * gE_1p_ejectile_dc_ejectile_t1
std::vector< TH2F * > pE_theta_recoil_sec
bool OnBeam(std::shared_ptr< SpedeEvt > s)
bool RandomCoincidence(std::shared_ptr< GammaRayEvt > g, std::shared_ptr< SpedeEvt > s)
std::shared_ptr< SpedeEvt > spede_evt2
TH2F * gE_vs_theta_1p_recoil_dc_none
TH2F * gE_vs_theta_ejectile_dc_ejectile
TH2F * gE_vs_crystal_recoil_dc_none
bool PromptCoincidence(std::shared_ptr< GammaRayAddbackEvt > g, std::shared_ptr< ParticleEvt > p)
MiniballEvts * read_evts
TH2F * aE_vs_theta_recoil_dc_ejectile
void SetOutput(std::string output_file_name, bool cWrite=false)
std::vector< TH1F * > gamma_particle_td_sec
TH2F * aE_vs_theta_1p_ejectile_dc_ejectile
std::vector< std::vector< TH2F * > > pE_dE_cut_sec
TH2F * gE_vs_crystal_2p_dc_ejectile
TH2F * gE_vs_crystal_1p_ejectile_dc_none
TH2F * aE_vs_crystal_recoil_dc_recoil
TH2F * gE_vs_costheta2_recoil_dc_none
bool RandomCoincidence(std::shared_ptr< SpedeEvt > s, std::shared_ptr< ParticleEvt > p)
TH2F * aE_vs_theta_ejectile_dc_recoil
std::shared_ptr< TGProgressBar > prog
bool RandomCoincidence(std::shared_ptr< SpedeEvt > s1, std::shared_ptr< SpedeEvt > s2)
TH2F * aE_vs_theta_recoil_dc_recoil
TH2F * gE_vs_crystal_1p_recoil_dc_recoil
std::vector< TH2F * > pE_dE
void FillParticleGammaHists(std::shared_ptr< GammaRayEvt > g)
TH2F * aE_vs_theta_1p_recoil_dc_ejectile
std::shared_ptr< GammaRayEvt > gamma_evt
TH2F * aE_vs_costheta_recoil_dc_none
std::shared_ptr< BeamDumpEvt > bd_evt
unsigned long FillHists()
TH2F * aE_vs_crystal_ejectile_dc_ejectile
std::shared_ptr< GammaRayAddbackEvt > gamma_ab_evt2
TH2F * gE_vs_theta_1p_ejectile_dc_recoil
TH2F * gE_vs_theta_1p_recoil_dc_recoil
TH2F * gE_vs_crystal_ejectile_dc_none
bool OffBeam(std::shared_ptr< SpedeEvt > s)
bool EjectileCut(std::shared_ptr< ParticleEvt > p)
TH2F * aE_vs_crystal_1p_ejectile_dc_none
TH2F * eE_vs_theta_ejectile_dc_recoil
std::shared_ptr< IonChamberEvt > ic_evt
TH2F * gE_vs_costheta_recoil_dc_none
bool TransferCut(std::shared_ptr< ParticleEvt > p)
bool PromptCoincidence(std::shared_ptr< SpedeEvt > s, std::shared_ptr< ParticleEvt > p)
std::vector< std::vector< std::string > > spyhists
TH2F * gE_vs_crystal_1p_recoil_dc_none
std::shared_ptr< ParticleEvt > particle_evt
TH2F * eE_vs_theta_recoil_dc_ejectile
std::shared_ptr< SpedeEvt > spede_evt
bool PromptCoincidence(std::shared_ptr< SpedeEvt > s1, std::shared_ptr< SpedeEvt > s2)
std::vector< TH1F * > bdE_singles_det
std::vector< TH2F * > gamma_particle_E_vs_td_sec
TH2F * eE_vs_theta_1p_ejectile_dc_recoil
TH2F * gE_vs_crystal_1p_recoil_dc_ejectile
std::vector< TH2F * > pE_theta_coinc_sec
bool OffBeam(std::shared_ptr< ParticleEvt > p)
TH2F * aE_vs_costheta2_ejectile_dc_none
std::vector< std::vector< TH2F * > > pE_dE_sec
TH2F * aE_vs_theta_1p_ejectile_dc_recoil
TH2F * aE_vs_crystal_recoil_dc_ejectile
TH2F * gE_vs_costheta_ejectile_dc_none
TH2F * gE_vs_crystal_ejectile_dc_recoil
TH2F * aE_vs_crystal_1p_ejectile_dc_recoil
TH2F * eE_vs_theta_1p_recoil_dc_recoil
TH2F * gE_vs_costheta_recoil_dc_ejectile
std::vector< TH2F * > gE_vs_phi_dc_recoil
TH2F * aE_vs_crystal_1p_recoil_dc_recoil
TProfile * pBeta_theta_recoil
std::unique_ptr< TCanvas > c2
bool TwoParticleCut(std::shared_ptr< ParticleEvt > p1, std::shared_ptr< ParticleEvt > p2)
TH2F * eE_vs_ejectile_dc_recoil_segment
TH2F * aE_vs_costheta_recoil_dc_recoil
void SetSpyHists(std::vector< std::vector< std::string > > hists, short layout[2])
TH2F * aE_vs_theta_ejectile_dc_none
bool PromptCoincidence(std::shared_ptr< GammaRayEvt > g, unsigned long long ptime)
bool PromptCoincidence(std::shared_ptr< GammaRayEvt > g, std::shared_ptr< ParticleEvt > p)
TH2F * gE_vs_theta_1p_ejectile_dc_ejectile
std::vector< TH2F * > gE_vs_phi_dc_ejectile
TH2F * aE_vs_crystal_2p_dc_ejectile
TH2F * aE_vs_costheta_ejectile_dc_ejectile
bool RandomCoincidence(std::shared_ptr< BeamDumpEvt > g1, std::shared_ptr< BeamDumpEvt > g2)
TH2F * eE_vs_theta_recoil_dc_recoil
TH2F * eE_vs_theta_ejectile_dc_ejectile
TH2F * eE_vs_recoil_dc_recoil_segment
TH2F * aE_vs_crystal_recoil_dc_none
TH2F * eE_vs_theta_1p_recoil_dc_none
bool OffBeam(std::shared_ptr< GammaRayEvt > g)
TH2F * gE_vs_crystal_recoil_dc_ejectile
std::shared_ptr< GammaRayAddbackEvt > gamma_ab_evt
TH2F * eE_vs_theta_1p_ejectile_dc_none
bool PromptCoincidence(std::shared_ptr< GammaRayEvt > g, std::shared_ptr< SpedeEvt > s)
TH2F * eE_vs_ejectile_dc_ejectile_segment
unsigned long n_entries
TH2F * eE_vs_theta_1p_recoil_dc_ejectile
TH2F * aE_vs_crystal_ejectile_dc_none
TH2F * aE_vs_costheta_recoil_dc_ejectile
bool OnBeam(std::shared_ptr< ParticleEvt > p)
TH2F * gE_vs_costheta2_ejectile_dc_none
std::shared_ptr< GammaRayEvt > gamma_evt2
TH2F * gE_vs_costheta_ejectile_dc_recoil
TH2F * aE_vs_theta_1p_recoil_dc_recoil
TH2F * gE_vs_theta_recoil_dc_ejectile
bool RandomCoincidence(std::shared_ptr< GammaRayEvt > g, unsigned long long ptime)
TH2F * gE_vs_crystal_1p_ejectile_dc_recoil
TH2F * aE_vs_crystal_1p_recoil_dc_ejectile
bool RandomCoincidence(std::shared_ptr< GammaRayEvt > g, std::shared_ptr< ParticleEvt > p)
std::unique_ptr< TCanvas > c1
bool RandomCoincidence(std::shared_ptr< SpedeEvt > s, unsigned long long ptime)
TH2F * gE_vs_theta_ejectile_dc_none
TH2F * eE_vs_theta_1p_ejectile_dc_ejectile
bool PromptCoincidence(std::shared_ptr< ParticleEvt > p1, std::shared_ptr< ParticleEvt > p2)
std::vector< TH2F * > pE_dE_coinc
TH2F * aE_vs_theta_1p_recoil_dc_none
TH2F * gE_vs_theta_ejectile_dc_recoil
std::shared_ptr< MiniballSettings > set
TH2F * gE_vs_crystal_1p_ejectile_dc_ejectile
TH2F * gE_vs_theta_1p_ejectile_dc_none
TH2F * aE_vs_crystal_1p_recoil_dc_none
TH2F * aE_vs_theta_1p_ejectile_dc_none
TH2F * aE_vs_costheta2_recoil_dc_none
TH2F * gE_vs_crystal_recoil_dc_recoil
TH2F * eE_vs_recoil_dc_none_segment
TH2F * eE_vs_ejectile_dc_none_segment
std::shared_ptr< BeamDumpEvt > bd_evt2
TH2F * aE_vs_theta_ejectile_dc_ejectile
TH2F * gE_vs_theta_recoil_dc_recoil
TH2F * aE_1p_ejectile_dc_ejectile_t1
bool RecoilCut(std::shared_ptr< ParticleEvt > p)
void FillParticleGammaGammaHists(std::shared_ptr< GammaRayEvt > g1, std::shared_ptr< GammaRayEvt > g2)
TH2F * gE_vs_crystal_ejectile_dc_ejectile
TH2F * eE_vs_recoil_dc_ejectile_segment
std::vector< std::vector< TH2F * > > pE_dE_coinc_sec
std::shared_ptr< MiniballReaction > react
TH2F * gE_vs_theta_1p_recoil_dc_ejectile
TH2F * aE_vs_costheta_ejectile_dc_recoil
std::shared_ptr< ParticleEvt > particle_evt2
void SetInputTree(TTree *user_tree)
bool RandomCoincidence(std::shared_ptr< ParticleEvt > p1, std::shared_ptr< ParticleEvt > p2)
MiniballHistogrammer(std::shared_ptr< MiniballReaction > myreact, std::shared_ptr< MiniballSettings > myset)
void SetInputFile(std::vector< std::string > input_file_names)
bool PromptCoincidence(std::shared_ptr< GammaRayEvt > g1, std::shared_ptr< GammaRayEvt > g2)
bool RandomCoincidence(std::shared_ptr< SpedeEvt > s, std::shared_ptr< GammaRayEvt > g)
void FillParticleElectronGammaHists(std::shared_ptr< SpedeEvt > s, std::shared_ptr< GammaRayEvt > g)
TH2F * gE_vs_costheta_recoil_dc_recoil
void FillParticleElectronHists(std::shared_ptr< SpedeEvt > s)
TH2F * eE_vs_theta_ejectile_dc_none
std::vector< TH2F * > pE_theta_ejectile_sec
bool PromptCoincidence(std::shared_ptr< BeamDumpEvt > g1, std::shared_ptr< BeamDumpEvt > g2)
std::vector< TH2F * > pE_theta_sec
bool OnBeam(std::shared_ptr< GammaRayEvt > g)
std::vector< TH2F * > pE_dE_cut
TH2F * aE_vs_costheta_ejectile_dc_none
bool RandomCoincidence(std::shared_ptr< GammaRayEvt > g1, std::shared_ptr< GammaRayEvt > g2)
void AddProgressBar(std::shared_ptr< TGProgressBar > myprog)
bool PromptCoincidence(std::shared_ptr< SpedeEvt > s, std::shared_ptr< GammaRayEvt > g)
bool PromptCoincidence(std::shared_ptr< SpedeEvt > s, unsigned long long ptime)
TProfile * pBeta_theta_ejectile
std::shared_ptr< MiniballSettings > myset
Definition mb_sort.cc:123
std::shared_ptr< MiniballReaction > myreact
Definition mb_sort.cc:130