SND@LHC Software
Loading...
Searching...
No Matches
sndAvgSciFiFiducialCut.cxx
Go to the documentation of this file.
2
3#include "TChain.h"
4
5namespace snd::analysis_cuts {
6 avgSciFiFiducialCut::avgSciFiFiducialCut(double vertical_min_cut, double vertical_max_cut, double horizontal_min_cut, double horizontal_max_cut, TChain * ch, bool reverseCuts) : sciFiBaseCut(ch){
7
8 reversed = reverseCuts;
9
10 vertical_min = vertical_min_cut;
11 vertical_max = vertical_max_cut;
12 horizontal_min = horizontal_min_cut;
13 horizontal_max = horizontal_max_cut;
14
15 cutName = "Avg SciFi Ver channel in ["+std::to_string(vertical_min)+","+std::to_string(vertical_max)+"] Hor in ["+std::to_string(horizontal_min)+","+std::to_string(horizontal_max)+"]";
16
17 shortName = "AvgSFChan";
18 nbins = std::vector<int>{128*2, 128*2};
19 range_start = std::vector<double>{0, 0};
20 range_end = std::vector<double>{128*12, 128*12};
21 plot_var = std::vector<double>{-1, -1};
22 }
23
26
27 double avg_ver = 0.;
28 unsigned int n_ver = 0;
29 double avg_hor = 0.;
30 unsigned int n_hor = 0;
31
32 sndScifiHit * hit;
33 TIter hitIterator(scifiDigiHitCollection);
34
35 while ( (hit = (sndScifiHit*) hitIterator.Next()) ){
36 if (hit->isValid()){
37 int mat = hit->GetMat();
38 int sipm = hit->GetSiPM();
39 int channel = hit->GetSiPMChan();
40
41 int x = channel + sipm*128 + mat*4*128;
42
43 if (hit->isVertical()){
44 avg_ver += x;
45 n_ver++;
46 } else {
47 avg_hor += x;
48 n_hor++;
49 }
50 }
51 }
52
53 if ((n_ver+n_hor) == 0) {
54 plot_var[0] = -1;
55 plot_var[1] = -1;
56 return false;
57 }
58
59 if (n_ver) {
60 avg_ver /= n_ver;
61 plot_var[0] = avg_ver;
62 } else {
63 plot_var[0] = -1;
64 }
65
66 if (n_hor) {
67 avg_hor /= n_hor;
68 plot_var[1] = avg_hor;
69 } else {
70 plot_var[1] = -1;
71 }
72
73 if (n_ver == 0) return false;
74 if (n_hor == 0) return false;
75
76 if (not reversed) {
77 if (avg_hor < horizontal_min) return false;
78 if (avg_hor > horizontal_max) return false;
79 if (avg_ver < vertical_min) return false;
80 if (avg_ver > vertical_max) return false;
81 } else {
82 if ((avg_hor > horizontal_min) and (avg_hor < horizontal_max)) return false;
83 if ((avg_ver > vertical_min) and (avg_ver < vertical_max)) return false;
84 }
85 return true;
86 }
87}
Int_t GetMat()
Definition sndScifiHit.h:36
Int_t GetSiPMChan()
Definition sndScifiHit.h:38
Int_t GetSiPM()
Definition sndScifiHit.h:37
bool isValid() const
Definition sndScifiHit.h:30
bool isVertical()
Definition sndScifiHit.h:32
avgSciFiFiducialCut(double vertical_min_cut, double vertical_max_cut, double horizontal_min_cut, double horizontal_max_cut, TChain *ch, bool reverseCuts=false)
std::vector< double > plot_var
Definition sndBaseCut.h:14
std::vector< double > range_end
Definition sndBaseCut.h:13
std::vector< double > range_start
Definition sndBaseCut.h:12
std::vector< int > nbins
Definition sndBaseCut.h:11
static TClonesArray * scifiDigiHitCollection