8 #include "TEventList.h"
9 #include "TDirectory.h"
14 #include "TObjArray.h"
38 int n=h1->GetNbinsX();
39 double sum1=0, sum2=0;
40 double bestr=0, bestl=0;
41 double int1 = h1->Integral();
42 double int2 = h2->Integral();
43 double bestcutl=-999.;
50 double cur1 = h1->GetBinContent(
i)/int1;
51 double cur2 = h2->GetBinContent(
i)/int2;
55 double vall = 0, valr=0;
57 if ((sum1+fac2*sum2)>0) vall=sum1/
sqrt(fac2*sum2+sum1);
58 if ((1.-sum1+fac2*(1.-sum2))>0) valr=(1.-sum1)/
sqrt(1.-sum1+fac2*(1.-sum2));
60 if (valr>bestr) { bestr=valr; bestcutr = h1->GetBinCenter(
i);}
61 if (vall>bestl) { bestl=vall; bestcutl = h1->GetBinCenter(
i);}
77 t->SetBranchStatus(
"*",1);
79 t->SetBranchStatus(
"*",0);
80 t->SetBranchStatus(
"evt",1);
82 TEventList *el=(TEventList*)gDirectory->Get(
"el");
85 t->SetBranchAddress(
"evt",&ev);
89 for (
int i=0;
i<el->GetN();++
i)
91 t->GetEntry(el->GetEntry(
i));
94 t->SetBranchStatus(
"*",1);
101 int n=ht1.GetNbinsX();
104 h1.Scale(1.0/h1.Integral());
105 h2.Scale(1.0/h2.Integral());
110 for (
int i=1;
i<=
n;++
i)
112 sum+=
fabs(h1.GetBinContent(
i));
118 double bestEff(TH1*
h1, TH1*
h2,
double &bestcut,
double supr2=0.8,
double fac2=1.)
120 int n=h1->GetNbinsX();
121 double sum1=0, sum2=0;
122 double bestr=0, bestl=0;
123 double int1 = h1->Integral();
124 double int2 = h2->Integral();
125 double bestcutl=-999.;
126 double bestcutr=999.;
133 sum1 += h1->GetBinContent(i)/int1;
134 sum2 += h2->GetBinContent(i++)/int2;
137 bestcutr = h1->GetBinCenter(i-1);
145 sum1 += h1->GetBinContent(i)/int1;
146 sum2 += h2->GetBinContent(i--)/int2;
150 bestcutl = h1->GetBinCenter(i-1);
163 int n=h1->GetNbinsX();
164 double sum1=0, sum2=0;
165 double bestr=0, bestl=0;
166 double int1 = h1->Integral();
167 double int2 = h2->Integral();
168 double bestcutl=-999.;
169 double bestcutr=999.;
176 sum1 += h1->GetBinContent(i)/int1;
177 sum2 += h2->GetBinContent(i++)/int2;
180 bestcutr = h1->GetBinCenter(i-1);
188 sum1 += h1->GetBinContent(i)/int1;
189 sum2 += h2->GetBinContent(i--)/int2;
193 bestcutl = h1->GetBinCenter(i-1);
207 low = t->GetMinimum(var);
208 high = t->GetMaximum(var);
211 double miss = (1.-frac)/2;
215 t->Draw(
">>el",ccut);
216 t->SetEventList(&el);
218 double llow = t->GetMinimum(var);
219 double lhigh = t->GetMaximum(var);
221 TH1F
htemp(
"htemp",
"",500,llow, lhigh);
222 t->Project(
"htemp",var);
225 double integ = htemp.Integral();
229 while (sum<miss) sum+=htemp.GetBinContent(i++)/integ;
230 low = htemp.GetBinCenter(i-2);
233 while (sum<miss) sum+=htemp.GetBinContent(i--)/integ;
234 high = htemp.GetBinCenter(i+2);
242 gStyle->SetTitleY(0.993);
243 gStyle->SetTitleH(0.07);
244 gStyle->SetPadTopMargin(0.08);
245 gStyle->SetTitleBorderSize(0);
246 gStyle->SetOptStat(0);
252 double sigl, sigh, bgl, bgh;
254 TFile *
f=
new TFile(
"M"+pre+
"_"+ntp+
".root",
"READ");
256 TTree *
t=(TTree*)f->Get(ntp);
258 TCanvas *
c1=
new TCanvas(
"c1",
"c1",10,10,1800,600);
261 TObjArray* branches = t->GetListOfBranches();
263 TString bgcut =
"!("+sigcut+
")";
264 TString bstring = precut+
" "+sigcut;
273 TEventList el1(
"el1");
274 t->Draw(
">>el1",precut);
275 t->SetEventList(&el1);
302 for(i=0; i<=branches->GetLast(); ++
i)
305 TBranch* branch = (TBranch*)branches->UncheckedAt(i);
306 vars[
i]=branch->GetName();
309 if (
vars[i]==
"evt")
continue;
310 if (
vars[i]==
"mode")
continue;
311 if (
vars[i].Contains(
"dec"))
continue;
312 if (
vars[i].BeginsWith(
"t") &&
vars[i]!=
"thr")
continue;
317 if (sigl>bgl) sigl=bgl;
318 if (sigh<bgh) sigh=bgh;
321 if (sigl==sigh)
continue;
322 TH1F
h1(
"h1",
"",200,sigl,sigh);
323 TH1F
h2(
"h2",
"",200,sigl,sigh);
326 t->Project(
"h1",
vars[i],sigcut);
327 t->Project(
"h2",
vars[i], bgcut);
329 if (h1.GetEntries()<3 || h2.GetEntries()<3)
continue;
334 cout <<
vars[
i]<<
" "<<flush;
347 cout <<
"\n\nBEST 12 vars:"<<endl<<endl;
349 std::vector<int> myidx (
idx,
idx+MAX);
351 std::sort(myidx.begin(), myidx.end(),
mycompare);
358 lt.SetTextSize(0.06);
369 if (sigl>bgl) sigl=bgl;
370 if (sigh<bgh) sigh=bgh;
372 TH1F
h1(
"h1",
vars[i],200,sigl,sigh);
373 TH1F
h2(
"h2",
vars[i],200,sigl,sigh);
376 t->Project(
"h1",
vars[i], sigcut);
377 t->Project(
"h2",
vars[i], bgcut);
379 h1.Scale(1.0/h1.Integral());
380 h2.Scale(1.0/h2.Integral());
381 h1.SetTitleSize(0.05);
384 double maxi = h1.GetMaximum();
385 if (h2.GetMaximum()>maxi ) maxi = h2.GetMaximum();
391 h2.DrawNormalized(
"same");
393 double axmin = h1.GetXaxis()->GetXmin(),axmax = h1.GetXaxis()->GetXmax();
395 l.DrawLine(
cut[i],0,
cut[i], maxi*0.9);
397 lt.DrawLatex(axmin+(axmax-axmin)*0.6,1.01*maxi,TString::Format(
"sig = %6.4f",
signi[i]));
415 cout <<
"SIG EVT : "<<nsig<<
" "<<
"BG EVT : "<<nbg<<endl;
416 cout <<
"SIG EFF : "<<nsig/
N0_sig<<
" "<<
"BG EFF : "<< nbg/
N0_bg<<endl;
friend F32vec4 sqrt(const F32vec4 &a)
std::map< int, int > evcnt
double bestSignificance(TH1 *h1, TH1 *h2, double &bestcut, double fac2=1.)
friend F32vec4 fabs(const F32vec4 &a)
void findLimits(TTree *t, TString var, TString ccut, double &low, double &high, double frac=0.98)
int cutfinder(TString pre, TString ntp, TString sigcut, TString precut="", double n0s=50., double n0b=200., double supr=0.9)
double bestSuppression(TH1 *h1, TH1 *h2, double &bestcut, double eff=0.9)
double bestEff(TH1 *h1, TH1 *h2, double &bestcut, double supr2=0.8, double fac2=1.)
double diffQA(TH1F &ht1, TH1F &ht2)
int countEvents(TTree *t, TString ccut)
bool mycompare(int i, int j)