89 t->SetBranchStatus(
"*",0);
90 t->SetBranchStatus(
"evt",1);
91 t->SetBranchStatus(varname,1);
94 t->SetBranchAddress(
"evt",&ev);
95 t->SetBranchAddress(varname,&var);
97 std::map<int, int> sigcnt;
98 std::map<int, int> bgcnt;
99 std::map<int, int> bgcnt2;
101 std::vector<pair<double, int> > sigvals;
102 std::vector<pair<double, int> > bgvals;
104 int Nsigval =
els.GetN(), Nbgval =
elb.GetN();
105 double min = 1e9,
max=-1e9;
108 for (i=0;i<
els.GetN();++
i)
110 t->GetEntry(
els.GetEntry(i));
111 sigvals.push_back(std::make_pair(var, ev));
112 if (var>max) max = var;
113 if (var<min) min = var;
117 for (i=0;i<
elb.GetN();++
i)
119 t->GetEntry(
elb.GetEntry(i));
120 bgvals.push_back(std::make_pair(var, ev));
121 if (var>max) max = var;
122 if (var<min) min = var;
128 sort(sigvals.begin(), sigvals.end());
129 sort(bgvals.begin(), bgvals.end());
131 double pos=
min, step = (max-
min)/500., bestqal=0, bestcutl=0, bestqar=0, bestcutr=0;
132 int bestsig=0, bestbg=0;
138 for (pos=min+step; pos<
max; pos+=step)
140 while ( sigvals[i].first<=pos && i<Nsigval) sigcnt[sigvals[i++].second]+=1;
141 while ( bgvals[j].first<=pos && j<Nbgval) bgcnt[bgvals[j++].second]+=1;
148 bestsig = sigcnt.size();
149 bestbg = bgcnt.size();
153 cout <<varname<<
" qa(l)="<<bestqal<<
" S="<<bestsig <<
" B="<<bestbg;
155 i=sigvals.size()-1, j=bgvals.size()-1;
159 for (pos=max-step; pos>
min; pos-=step)
161 while ( sigvals[i].first>=pos && i>=0) sigcnt[sigvals[i--].second]+=1;
162 while ( bgvals[j].first>=pos && j>=0) bgcnt[bgvals[j--].second]+=1;
169 bestsig = sigcnt.size();
170 bestbg = bgcnt.size();
173 cout <<
" qa(r)="<<bestqar<<
" S="<<bestsig <<
" B="<<bestbg<<endl;
176 t->SetBranchStatus(
"*",1);
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)