8 #include "TEventList.h" 
    9 #include "TDirectory.h" 
   14 #include "TObjArray.h" 
   33         gStyle->SetPadTopMargin(0.12);
 
   34         gStyle->SetPadBottomMargin(0.12);
 
   35         gStyle->SetPadLeftMargin(0.17);
 
   36         gStyle->SetPadRightMargin(0.02);
 
   38         gStyle->SetLabelSize(0.075,
"X");
 
   39         gStyle->SetLabelSize(0.065,
"Y");
 
   41         gStyle->SetStatY(0.87);
 
   42         gStyle->SetStatX(0.98);
 
   43         gStyle->SetStatW(0.4);
 
   44         gStyle->SetStatH(0.12);
 
   45         gStyle->SetOptStat(0);
 
   47         gStyle->SetTitleH(0.1);
 
   48         gStyle->SetTitleX(0.15);
 
   49         gStyle->SetTitleOffset(1.1,
"x");
 
   50         gStyle->SetTitleXSize(0.076);
 
   51         gStyle->SetNdivisions(505);
 
   59         t->SetBranchStatus(
"*",1);
 
   61         t->SetBranchStatus(
"*",0);
 
   62         t->SetBranchStatus(
"evt",1);
 
   64         TEventList *el=(TEventList*)gDirectory->Get(
"el");
 
   67         t->SetBranchAddress(
"evt",&ev);
 
   71         for (
int i=0;
i<el->GetN();++
i)
 
   73                 t->GetEntry(el->GetEntry(
i));
 
   76         t->SetBranchStatus(
"*",1);
 
   83         int n=h1->GetNbinsX();
 
   84         double sum1=0, sum2=0;
 
   85         double int1 = h1->Integral();
 
   86         double int2 = h2->Integral();
 
   90         while (h1->GetBinCenter(i)<
cut)
 
   92                 sum1 += h1->GetBinContent(i)/int1;
 
   93                 sum2 += h2->GetBinContent(i++)/int2;    
 
   99         low  = t->GetMinimum(var);
 
  100         high = t->GetMaximum(var);
 
  103         double miss = (1.-frac)/2;
 
  107         t->Draw(
">>el",ccut);
 
  108         t->SetEventList(&el);
 
  110         double llow  = t->GetMinimum(var);
 
  111         double lhigh = t->GetMaximum(var);
 
  113         TH1F 
htemp(
"htemp",
"",500,llow, lhigh);
 
  114         t->Project(
"htemp",var);
 
  117         double integ = htemp.Integral();
 
  121         while (sum<miss) sum+=htemp.GetBinContent(i++)/integ;
 
  122         low = htemp.GetBinCenter(i-2);
 
  125         while (sum<miss) sum+=htemp.GetBinContent(i--)/integ;
 
  126         high = htemp.GetBinCenter(i+2);
 
  133         double sigl, sigh, bgl, bgh;
 
  141         lt.SetTextSize(0.06);
 
  144         lt2.SetTextSize(0.06);
 
  145         lt2.SetTextColor(kBlue+2);
 
  153         double eff=
countEvents(t, 
"mode==900&&tag&&"+precut+
"&&"+newcut);
 
  156         double seff=
countEvents(t, 
"mode!=900&&tag&&"+precut+
"&&"+newcut);
 
  160         TString sigcut = 
"mode!=900&&tag&&"+precut;
 
  161         TString bgcut = 
"mode==900&&tag&&"+precut;
 
  166         if (sigl>bgl) sigl=bgl;
 
  167         if (sigh<bgh) sigh=bgh;
 
  169         if (var==
"dtht") sigh=0.5;
 
  171         TH1F *
h1=
new TH1F(
"h1",title,200,sigl,sigh);
 
  172         TH1F *
h2=
new TH1F(
"h2",title,200,sigl,sigh);
 
  177         t->Project(
"h1",var, sigcut);
 
  178         t->Project(
"h2",var, bgcut);
 
  182         h1->Scale(1.0/h1->Integral());
 
  183         h2->Scale(1.0/h2->Integral());
 
  184         h1->SetTitleSize(0.05);
 
  186         double maxi = h1->GetMaximum();
 
  187         if (h2->GetMaximum()>maxi ) maxi = h2->GetMaximum();
 
  189         h1->SetMaximum(maxi);
 
  190         h2->SetMaximum(maxi);
 
  192         h1->DrawNormalized();
 
  193         h2->DrawNormalized(
"same");
 
  195         double axmin = h1->GetXaxis()->GetXmin(),axmax = h1->GetXaxis()->GetXmax(); 
 
  197         l.DrawLine(val,0, val, maxi*0.9);
 
  198         if (val2!=-999) l.DrawLine(val2,0, val2, maxi*0.9);
 
  201         lt.DrawLatex(axmin+(axmax-axmin)*0.53,0.53*maxi,TString::Format(
"#epsilon_{bg} = %5.2f%%",100*eff));
 
  202         lt2.DrawLatex(axmin+(axmax-axmin)*0.53,0.65*maxi,TString::Format(
"#epsilon_{sig} = %5.2f%%",100*seff));
 
  204         TLegend *leg1 = 
new TLegend(0.67,0.7,0.98,0.88);
 
  205         leg1->AddEntry(
"h1",
"signal",
"l");
 
  206         leg1->AddEntry(
"h2",
"BG",
"l");
 
  217         TFile *
f=
new TFile(
"data/M55_ndpm.root",
"READ");
 
  219         TTree *
t=(TTree*)f->Get(
"ndpm");
 
  221         TCanvas *
c1=
new TCanvas(
"c1",
"c1",10,10,1600,400);
 
  223         TObjArray* branches = t->GetListOfBranches();
 
  225         TString bgcut = 
"mode==900 && tag";
 
  301         drawHistos(t, var1,name1, 
"1",cut1,val1,val11);
 
  305         drawHistos(t, var3,name3, cut1+
"&&"+cut2,cut3,val3);
 
  307         drawHistos(t, var4,name4, cut1+
"&&"+cut2+
"&&"+cut3,cut4,val4);
 
  312         cout<<100*preEff<<endl;
 
int countEvents(TTree *t, TString ccut)
void drawHistos(TTree *t, TString var, TString title, TString precut, TString newcut, double val, double val2=-999.)
Double_t val[nBoxes][nFEBox]
void findLimits(TTree *t, TString var, TString ccut, double &low, double &high, double frac=0.98)
double suppression(TH1 *h1, TH1 *h2, double cut)
std::map< int, int > evcnt