// histograms filled and drawn in a loop void hsum() { // // To see the output of this macro, click begin_html <a href="gif/hsum.gif" >here</a> end_html // Simple example illustrating how to use the C++ interpreter // to fill histograms in a loop and show the graphics results //Author: Rene Brun TCanvas *c1 = new TCanvas("c1","The HSUM example",200,10,600,400); c1->SetGrid(); gBenchmark->Start("hsum"); // Create some histograms. auto total = new TH1F("total","This is the total distribution",100,-4,4); auto main = new TH1F("main","Main contributor",100,-4,4); auto s1 = new TH1F("s1","This is the first signal",100,-4,4); auto s2 = new TH1F("s2","This is the second signal",100,-4,4); total->Sumw2(); // store the sum of squares of weights total->SetMarkerStyle(21); total->SetMarkerSize(0.7); main->SetFillColor(16); s1->SetFillColor(42); s2->SetFillColor(46); TSlider *slider = 0; // Fill histograms randomly gRandom->SetSeed(); const Int_t kUPDATE = 500; Float_t xs1, xs2, xmain; for ( Int_t i=0; i<10000; i++) { xmain = gRandom->Gaus(-1,1.5); xs1 = gRandom->Gaus(-0.5,0.5); xs2 = gRandom->Landau(1,0.15); main->Fill(xmain); s1->Fill(xs1,0.3); s2->Fill(xs2,0.2); total->Fill(xmain); total->Fill(xs1,0.3); total->Fill(xs2,0.2); if (i && (i%kUPDATE) == 0) { if (i == kUPDATE) { total->Draw("e1p"); main->Draw("same"); s1->Draw("same"); s2->Draw("same"); c1->Update(); slider = new TSlider("slider", "test",4.2,0,4.6,total->GetMaximum(),38); slider->SetFillColor(46); } if (slider) slider->SetRange(0,Float_t(i)/10000.); c1->Modified(); c1->Update(); } } slider->SetRange(0,1); total->Draw("sameaxis"); // to redraw axis hidden by the fill area c1->Modified(); gBenchmark->Show("hsum"); }
TH1F *getH(TString name,int bins, float xmin, float xmax, int color = kBlue) { // histcounter++; // TString name = "hist"+TString::Itoa(histcounter,10); auto h = new TH1F(name,name,bins,xmin,xmax); h->SetLineColor(color); h->SetMarkerColor(color); h->Sumw2(); return h; }
void checkvertex(TString datafilename, TString mcfilename) { TFile *fmc = new TFile(mcfilename); auto ntmc = (TTree *)fmc->Get("nt"); TFile *fdt = new TFile(datafilename); auto ntdt = (TTree *)fdt->Get("nt"); auto vdt0 = new TH1F("vdt0","Data no weighting",30,-15,15); vdt0->Sumw2(); auto vmc0 = new TH1F("vmc0","MC no weighting",30,-15,15); vmc0->Sumw2(); ntdt->Project("vdt0","vz","weight*(jtpt2>120 && jtpt2>30)"); ntmc->Project("vmc0","vz","pthatweight*(jtpt2>120 && jtpt2>30 && pthatsample>30)"); vdt0->Scale(1/vdt0->Integral()); vmc0->Scale(1/vmc0->Integral()); plotylog = false; Draw({vdt0,vmc0}); auto vdt = new TH1F("vdt","Data weighted",30,-15,15); vdt->Sumw2(); auto vmc = new TH1F("vmc","MC weighted",30,-15,15); vmc->Sumw2(); ntdt->Project("vdt","vz","weight*(jtpt2>120 && jtpt2>30)"); ntmc->Project("vmc","vz","weight*(jtpt2>120 && jtpt2>30 && pthatsample>30)"); vdt->Scale(1/vdt->Integral()); vmc->Scale(1/vmc->Integral()); SetMC({vmc, vmc0}); SetData({vdt,vdt0}); SetInc({vmc, vmc0}); fout->cd(); vdt->Write(); vmc->Write(); vdt0->Write(); vmc0->Write(); fmc->Close(); fdt->Close(); }
CH3D(const char *a,const char* b, int c, double d, double e, int f, double g, double h,int i, double j, double k,double *w):TH3D(a,b,c,d,e,f,g,h,i,j,k),weight(w){Sumw2();};
CH2D(const char *a,const char* b, int c, double d, double e, int f, double g, double h,double *w):TH2D(a,b,c,d,e,f,g,h),weight(w){Sumw2();};
CH1D(const char *a,const char* b, int c, double d, double e,double *w):TH1D(a,b,c,d,e),weight(w){Sumw2();};