本文整理汇总了C++中TH1D::Integral方法的典型用法代码示例。如果您正苦于以下问题:C++ TH1D::Integral方法的具体用法?C++ TH1D::Integral怎么用?C++ TH1D::Integral使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TH1D
的用法示例。
在下文中一共展示了TH1D::Integral方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mc2ibd_NE
void mc2ibd_NE(TChain *tMC, TFile *fBgnd, TCanvas *cv)
{
char str[1024];
TLatex *txt = new TLatex();
TH1D *hExp = (TH1D *) fBgnd->Get("hNEA-diff");
if (!hExp) {
printf("Histogram hNEA-diff not found in %s\n", fBgnd->GetName());
return;
}
hExp->SetTitle("Delayed event energy;MeV;Events/200 keV");
hExp->SetLineColor(kBlack);
hExp->SetLineWidth(3);
gROOT->cd();
TH1D *hMC = new TH1D("hNEMC", "Delayed event energy (MC);MeV;Events/200 keV", 45, 3, 12);
hMC->SetLineColor(kBlue);
tMC->Project(hMC->GetName(), "NeutronEnergy", cX && cY && cZ && cR && c20 && cGamma && cGammaMax && cPe);
hMC->Sumw2();
hMC->Scale(hExp->Integral(15, 45) / hMC->Integral(15,45));
cv->Clear();
hMC->Draw("hist");
hExp->DrawCopy("same");
TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89);
lg->AddEntry(hExp, "IBD", "LE");
lg->AddEntry(hMC, "MC", "L");
lg->Draw();
}
示例2: Getmean
double Getmean(TString sys1, TString sys2, float cent1, float cent2){
gROOT->SetStyle("Plain");
TFile *infile = TFile::Open(Form("glau_%s%s_ntuple_1M.root",sys1.Data(),sys2.Data()));
infile->cd();
TH2F *pEcc2B = new TH2F("pEcc2B","#epsilon_{2} vs impact paramter in 200 GeV Collisions from Glauber MC;B;#epsilon_{n}",25200,-0.5,251.5,100,0,1);
if(sys2.Contains("smeared")){
TNtuple *nt = (TNtuple*)infile->Get("nt");
nt->Project("pEcc2B","Ecc3G:B");
}
else{
TNtuple *nt = (TNtuple*)infile->Get(Form("nt_%s_%s",sys1.Data(),sys2.Data()));
nt->Project("pEcc2B","Ecc2:B");
}
TH1D* hB = (TH1D*)pEcc2B->ProjectionX("hB",0,-1);
for(int ibin=0;ibin<hB->GetNbinsX();ibin++){
if(hB->Integral(0,ibin) >= cent1 /100. * hB->Integral()){ int bin1 = ibin; break;}
}
for(int ibin=0;ibin<hB->GetNbinsX();ibin++){
if(hB->Integral(0,ibin) >= cent2 /100. * hB->Integral()){ int bin2 = ibin; break;}
}
cout<< bin1 << "\t" << bin2 << endl;
TH1D* hEcc2 = (TH1D*)pEcc2B->ProjectionY("hEcc2",bin1,bin2);
// hEcc2->Draw();
cout << hEcc2 -> GetEntries() << endl;
double mean = hEcc2->GetMean();
return mean;
}
示例3: mc2ibd_R2
void mc2ibd_R2(TChain *tMC, TFile *fBgnd, TCanvas *cv)
{
char str[1024];
TLatex *txt = new TLatex();
TH1D *hExp = (TH1D *) fBgnd->Get("hR2A-diff");
if (!hExp) {
printf("Histogram hR2A-diff not found in %s\n", fBgnd->GetName());
return;
}
hExp->SetTitle("Distance between positron and neutron, 3D case;cm;Events/4cm");
hExp->SetLineColor(kBlack);
hExp->SetLineWidth(3);
gROOT->cd();
TH1D *hMC = new TH1D("hR2MC", "Distance between positron and neutron, 3D case (MC);cm;Events/4cm", 40, 0, 160);
hMC->SetLineColor(kBlue);
tMC->Project(hMC->GetName(), "Distance", cX && cY && cZ && cRXY && c20 && cGamma && cGammaMax && cPe && cN);
hMC->Sumw2();
hMC->Scale(hExp->Integral() / hMC->Integral());
cv->Clear();
hExp->DrawCopy();
hMC->Draw("hist,same");
TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89);
lg->AddEntry(hExp, "IBD", "LE");
lg->AddEntry(hMC, "MC", "L");
lg->Draw();
}
示例4: loglikdistrib
void loglikdistrib(Int_t ntrials = 10000, Bool_t print = kFALSE)
{
// compute distribution of log likelihood value
TH1D * hmc = gStack[gPadNr][gOrder[gPadNr][0]];
TH1D * hdata = gStack[gPadNr][gMaxProcess-1];
Int_t nbins = hmc->GetNbinsX();
Double_t loglik = loglikelihood(hmc, hdata, 1, nbins);
TH1D * htest = new TH1D(*hdata);
TH1D * lldistrib = new TH1D("lldistrib", "log(Likelihood) distribution",
1000, loglik-200, loglik+200);
setopt(lldistrib);
for (Int_t n = 0; n < ntrials; n++) {
// generate poisson around theorie
for (Int_t i = 1; i <= nbins; i++) {
htest->SetBinContent(i, gRandom->Poisson(hmc->GetBinContent(i)));
}
lldistrib->Fill(loglikelihood(hmc, htest, 1, nbins));
}
TCanvas * llcanvas = new TCanvas("llcanvas", "Log(Likelihood) distribution",
40, 40, 800, 600);
setopt(llcanvas);
lldistrib->SetFillColor(kYellow);
lldistrib->Draw();
lldistrib->GetYaxis()->SetTitle("Anzahl Ereignisse");
lldistrib->GetXaxis()->SetTitle("-ln L");
// autozoom
Int_t lowbin = 1;
while (lldistrib->GetBinContent(lowbin) == 0)
lowbin++;
Int_t highbin = lldistrib->GetNbinsX();
while (lldistrib->GetBinContent(highbin) == 0)
highbin--;
lldistrib->SetAxisRange(lldistrib->GetBinLowEdge(lowbin),
lldistrib->GetBinLowEdge(highbin));
TH1D * hworse = (TH1D *) lldistrib->Clone();
for (Int_t nbin = 1; nbin < 501; nbin++) {
hworse->SetBinContent(nbin, 0);
}
hworse->SetFillColor(95);
hworse->Draw("same");
Double_t pvalue = lldistrib->Integral(501,1000) / lldistrib->Integral();
TLatex * tex = new TLatex(0.18, 0.96, Form("-ln L_{obs} = %5.2f", loglik));
tex->SetNDC();
tex->SetTextAlign(13);
tex->Draw();
tex = new TLatex(0.18, 0.86, Form("CL_{obs} = %.3f", pvalue));
tex->SetNDC();
tex->SetTextAlign(13);
tex->Draw();
TLine * l = new TLine(loglik, 0, loglik, lldistrib->GetMaximum());
l->SetLineWidth(3);
l->SetLineColor(kBlue);
l->Draw();
llcanvas->Modified();
llcanvas->Update();
if (print)
llcanvas->Print("lldistrib.pdf");
cd(gPadNr+1);
}
示例5: AfterLastEntry
// Called just after the main event loop
// Can be used to write things out, dump a summary etc
// Return non-zero to indicate a problem
int TemplateCreator::AfterLastEntry(TGlobalData* gData, const TSetupData* setup){
// Print extra info if we're debugging this module:
if(Debug()){
cout<<"-----I'm debugging TemplateCreator::AfterLastEntry()"<<endl;
}
// Print to stdout the percentage of successful fit for each channel
StringPulseIslandMap::const_iterator it;
for(it = gData->fPulseIslandToChannelMap.begin(); it != gData->fPulseIslandToChannelMap.end(); ++it){
std::string bankname = it->first;
std::string detname = setup->GetDetectorName(bankname);
TH1D* hTemplate = fTemplates[detname];
if (!hTemplate) { // if there's no template been created for this channel
continue;
}
int& n_fit_attempts = fNFitAttempts[detname]; // number of pulses we try to fit to
int& n_successful_fits = fNSuccessfulFits[detname];
std::cout << "TemplateCreator: " << detname << ": " << n_fit_attempts << " fits attempted with " << n_successful_fits << " successful (" << ((double)n_successful_fits/(double)n_fit_attempts)*100 << "%)" << std::endl;
// Normalise the template so that it has pedestal=0 and amplitude=1
// Work out the pedestal of the template from the first 5 bins
int n_bins_for_template_pedestal = 5;
double total = 0;
for (int iBin = 1; iBin <= n_bins_for_template_pedestal; ++iBin) {
total += hTemplate->GetBinContent(iBin);
}
double template_pedestal = total / n_bins_for_template_pedestal;
// std::cout << detname << ": Template Pedestal = " << template_pedestal << std::endl;
// Subtract off the pedesal
for (int iBin = 1; iBin <= hTemplate->GetNbinsX(); ++iBin) {
double old_value = hTemplate->GetBinContent(iBin);
double new_value = old_value - template_pedestal;
hTemplate->SetBinContent(iBin, new_value);
}
// Integrate over the histogram and scale to give an area of 1
double integral = std::fabs(hTemplate->Integral()); // want the absolute value for the integral because of the negative polarity pulses
hTemplate->Scale(1.0/integral);
integral = std::fabs(hTemplate->Integral());
// Save the template to the file
fTemplateArchive->SaveTemplate(hTemplate);
}
// Clean up the template archive
delete fTemplateArchive;
return 0;
}
示例6: processtree
// Takes as input a given process with corresponding luminosity, as well as sample CME, cuts, directory location, and output file name - saves corresponding histogram in root file.
void processtree(TString sample, Double_t weight, TLorentzVector CME, TString filename, TString directory, TString param, TString cut, std::clock_t start, Int_t all){
//Open File
TFile *f = new TFile(directory);
TTree *ttree = (TTree*)f->Get(sample);
TString recohistname, paramhistname;
if (all==0){
recohistname = "_recoilmassHIST";
paramhistname = "_parameterHIST";
}
if (all==1){
recohistname = "_recoilmassHIST_all";
paramhistname = "_parameterHIST_all";
}
TString histname = sample + recohistname;
TH1D *recoilmassHIST = new TH1D(histname,histname,CME.M()/2,0,CME.M());
//recoilmassHIST->SetCanExtend(kAllAxes);
ttree->Project(histname, "recoilmass", cut);
histname = sample + paramhistname;
TH1D *parameterHIST = new TH1D(histname,histname,CME.M()/2,1,-1);
//parameterHIST->SetCanExtend(kAllAxes);
ttree->Project(histname, param, cut);
//Normalize Hist
recoilmassHIST->Scale(1/recoilmassHIST->GetMaximum());
parameterHIST->Scale(1/parameterHIST->GetMaximum()) ;
//Normalize Hist
// recoilmassHIST->Scale(weight);
// parameterHIST->Scale(weight) ;
// Writes yield of each histogram for each cut to text file
ofstream myfile;
Double_t yield = recoilmassHIST->Integral();
myfile.open ("yield.txt", ios::app);
cout << "Yield for " << sample << " for Cut " << param << " is " << yield << endl;
myfile << param << " " << all << " " << sample << " " << yield << "\n"; //write to file
myfile.close();
if (recoilmassHIST->Integral() == 0){
recoilmassHIST->Fill(0);
}
if (parameterHIST->Integral() == 0){
parameterHIST->Fill(0);
}
TFile g(filename, "update");
recoilmassHIST->Write();
parameterHIST->Write();
g.Close();
}
示例7: plotTurnOn
void plotTurnOn(TTree* inttree, TString triggerpass, TString variable, TString varname, TString varlatex)
{
if(varname=="vtxprob")
{
BIN_MIN = 0;
BIN_MAX = 1;
}
else if(varname=="ffls3d")
{
BIN_MIN = 0;
BIN_MAX = 50;
}
else if(varname=="cosalpha")
{
BIN_MIN = 0.9;
BIN_MAX = 1;
}
TH1D* hAll = new TH1D(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX);
inttree->Project(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),variable,prefilter);
TH1D* hMBseed = new TH1D(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX);
inttree->Project(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),variable,Form("%s&&%s",prefilter.Data(),triggerpass.Data()));
//cout<<hAll->Integral()<<endl;
hAll->Scale(1./hAll->Integral());
hMBseed->Scale(1./hMBseed->Integral());
hAll->SetStats(0);
hMBseed->SetStats(0);
hAll->SetMaximum(hMBseed->GetMaximum()*1.3);
hAll->SetLineWidth(2);
hAll->SetLineColor(kBlue-7);
hAll->SetFillColor(kBlue-7);
hAll->SetFillStyle(3001);
hMBseed->SetLineWidth(2);
hMBseed->SetLineColor(kRed);
hMBseed->SetFillColor(kRed);
hMBseed->SetFillStyle(3004);
TCanvas* c = new TCanvas(Form("c%s_%s",triggerpass.Data(),varname.Data()),"",500,500);
hAll->Draw();
hMBseed->Draw("same");
TLatex* tex = new TLatex(0.18,0.96,triggerpass);
tex->SetNDC();
tex->SetTextFont(42);
tex->SetTextSize(0.04);
tex->Draw();
TLegend* leg = new TLegend(0.60,0.82,0.92,0.93);
leg->SetFillStyle(0);
leg->SetBorderSize(0);
leg->AddEntry(hAll,"all","f");
leg->AddEntry(hMBseed,"pass trigger","f");
leg->Draw();
c->SaveAs(Form("triggerturnonPlots/pthat%.0f/c%s_%s.pdf",pthat,triggerpass.Data(),varname.Data()));
}
示例8: getTruncatedMeanRMS
void GaussianProfile::getTruncatedMeanRMS(TH1* hist, float& mean, float& mean_error, float& rms, float& rms_error) {
int nBins = hist->GetNbinsX();
double xMin = hist->GetXaxis()->GetXmin();
double xMax = hist->GetXaxis()->GetXmax();
//double binWidth = (xMax - xMin) / (double) nBins; //WARNING: this works only if bins are of the same size
double integral = hist->Integral();
int maxBin = 0;
TF1* gaussian = new TF1("gaussian", "gaus");
fitProjection(hist, gaussian, 1.5, "RQN");
//maxBin = (int) ceil((gaussian->GetParameter(1) - xMin) / binWidth);
maxBin = hist->FindBin(gaussian->GetParameter(1));
delete gaussian;
TH1D* newHisto = new TH1D("newHisto", "", nBins, xMin, xMax);
newHisto->SetBinContent(maxBin, hist->GetBinContent(maxBin));
newHisto->SetBinError(maxBin, hist->GetBinError(maxBin));
int iBin = maxBin;
int delta_iBin = 1;
int sign = 1;
while (newHisto->Integral() < 0.99 * integral) {
iBin += sign * delta_iBin;
newHisto->SetBinContent(iBin, hist->GetBinContent(iBin));
newHisto->SetBinError(iBin, hist->GetBinError(iBin));
delta_iBin += 1;
sign *= -1;
}
rms = newHisto->GetRMS();
rms_error = newHisto->GetRMSError();
while (newHisto->Integral() < 0.99 * integral) {
iBin += sign * delta_iBin;
newHisto->SetBinContent(iBin, hist->GetBinContent(iBin));
newHisto->SetBinError(iBin, hist->GetBinError(iBin));
delta_iBin += 1;
sign *= -1;
}
mean = newHisto->GetMean();
mean_error = newHisto->GetMeanError();
delete newHisto;
}
示例9: CalcQCDNormFactor
void CalcQCDNormFactor() {
//TFile *f = TFile::Open("results/Plotter_out_2016_05_29_22h19m32.root"); // 76X Silver JSON
TFile *f = TFile::Open("results/Plotter_out_2016_06_21_15h27m59.root"); // 76X Golden JSON
TCanvas *c = (TCanvas*)f->Get("NJet/PlotSamples_Pass5Cuts_PassHLT");
THStack *s = (THStack*)c->GetListOfPrimitives()->At(1);
TH1D *data = (TH1D*)c->GetListOfPrimitives()->At(3);
double MC_integral = 0;
double QCD_count = 0;
for (int i=s->GetHists()->GetEntries()-1; i>=0; --i) {
TH1D* h = (TH1D*)s->GetHists()->At(i);
if (i==s->GetHists()->GetEntries()-1) QCD_count = h->Integral();
std::cout<<h->GetName()<<" "<<h->Integral()<<std::endl;
MC_integral += h->Integral();
}
double data_QCD_estimate = data->Integral()- (MC_integral-QCD_count);
double QCD_scale = data_QCD_estimate/QCD_count;
std::cout<<"MC: "<<MC_integral<<std::endl;
std::cout<<"Data: "<<data->Integral()<<std::endl;
std::cout<<"MC (QCD only): "<<QCD_count<<std::endl;
std::cout<<"Data (QCD only est): "<<data_QCD_estimate<<std::endl;
std::cout<<"QCD Scale: "<<QCD_scale<<std::endl;
TH1D* qcd = (TH1D*)s->GetHists()->At(s->GetHists()->GetEntries()-1);
qcd->Scale(QCD_scale);
c->Draw();
//TCanvas *c = (TCanvas*)f->Get("NJet/PlotSamples_Pass5Cuts_PassHLT_Ratio");
//
//TH1D* ratio = (TH1D*)((TVirtualPad*)c->cd(2))->GetListOfPrimitives()->At(0);
//TF1* fit = new TF1("fit","pol1", 400, 2000);
//ratio->Fit("fit","RBQ0");
//fit->SetLineColor(2);
//fit->SetLineWidth(1);
//TF1* fit_up = (TF1*)fit->Clone("fit_up");
//TF1* fit_down = (TF1*)fit->Clone("fit_down");
//fit_up ->SetParameter(0,fit->GetParameter(0)+fit->GetParError(0)*1);
//fit_down->SetParameter(0,fit->GetParameter(0)-fit->GetParError(0)*1);
//fit_up ->SetParameter(1,fit->GetParameter(1)+fit->GetParError(1)*1);
//fit_down->SetParameter(1,fit->GetParameter(1)-fit->GetParError(1)*1);
//fit_up ->SetLineColor(4); fit_up ->Draw("SAME");
//fit_down->SetLineColor(4); fit_down->Draw("SAME");
//fit->Draw("SAME");
//
//std::cout<<"Fit result:"<<std::endl;
//std::cout<<"p0: "<<fit->GetParameter(0)<<" +- "<<fit->GetParError(0)*1<<std::endl;
//std::cout<<"p1: "<<fit->GetParameter(1)<<" +- "<<fit->GetParError(1)*1<<std::endl;
//f->Close();
}
示例10: PlotWriteErrors
void PlotWriteErrors(TFile* input, TFile* output, TString output_folder, TString canvas, TString Hist, TString Opt="")
{
// Setup the canvas
TCanvas *c1= new TCanvas(canvas,canvas,800,700);
// Get the histograms from the files
TH1D *Data = (TH1D*)input->Get(Hist);
//check to make sure there are some events before setting the log scale
if(Data->Integral() == 0 ) c1->SetLogy(0);
else c1->SetLogy(1);
// Fill for histogram
Data->SetFillColor(kBlue);
Data->GetXaxis()->SetTitleSize(0.06);
Data->GetXaxis()->SetTitleOffset(0.75);
Data->GetYaxis()->SetTitleSize(0.05);
Data->GetYaxis()->SetTitleOffset(1.00);
// plot them
Data->DrawCopy("hist");
gPad->RedrawAxis();
//write canvas as png
c1->Print(TString(output_folder+canvas+".png"));
//write canvas to output file
output->cd();
c1->Write();
return;
}
示例11: getQCD
TH1D* getQCD(int rebinFact){
TString dir = "rootFiles/";
TFile* file = new TFile(dir +"qcdest.root");
TH1D* plot = (TH1D*) file->Get("muon_AbsEta_0btag");
// for(int i = 1; i <= plot->GetNbinsX(); i++){
// plot->SetBinError(i, 0.0);
// }
plot->SetFillColor(kYellow);
plot->SetLineColor(kYellow);
plot->SetMarkerStyle(1);
TH1D* copyplot = new TH1D("qcd plot", "qcd plot", 30, 0.0, 3.0);
for(int i = 1; i <= plot->GetNbinsX(); i++){
copyplot->SetBinContent(i, plot->GetBinContent(i));
//copyplot->SetBinError(i, plot->GetBinError(i));
}
copyplot->SetFillColor(kYellow);
copyplot->SetLineColor(kYellow);
copyplot->SetMarkerStyle(1);
copyplot->Scale(1./copyplot->Integral());
copyplot->Rebin(rebinFact);
//file->Close("R");
return copyplot;
//file->Close();
}
示例12: makeGaussianSignals
void makeGaussianSignals(SigData_t& m_sigdata)
{
//std::vector<TH1D *> vgsh(NUMCHAN);
std::vector<TH1D *> vcdfh(NUMCHAN);
if( m_sigdata.find("gs") == m_sigdata.end() ) {
cerr << "Gaussian signal data not found, not making CDF signal!" << endl;
return;
}
for (int ichan=0; ichan<NUMCHAN; ichan++) {
TH1D *cdfh;
TString channame(channames[ichan]);
TString name;
TH1D * gsh = m_sigdata["gs"].at(ichan);
assert(gsh) ;
#if 0
name = "Signalgs_"+channame;
gsh = (TH1D *)tch->Clone(name.Data());
assert(gsh);
gsh->SetTitle("Gaussian signal");
gsh->Reset();
TF1 *g = (TF1 *)gROOT->GetFunction("gaus");
g->SetParameters(1,gaussian_mean_mass_gev,gaussian_mass_sigma_gev);
gsh->FillRandom("gaus",100000);
// norm to 1pb signal with 1/fb integrated luminosity
double norm = 1000 * gseffxacc[ichan]/gsh->Integral(0,gsh->GetNbinsX()+1,"width");
//gsh->Scale(norm/eff_fudgefactor); // kludge: pre-undo the fudge in the next module
gsh->Scale(norm);
vgsh[ichan] = gsh;
#endif
// New CDF bump, same as Gauss but set to CDF (obs/theor)*(LHC theor) = 3.43pb
cdfh = (TH1D *)gsh->Clone("CDFbump");
cdfh->Scale(3.43);
vcdfh[ichan] = cdfh;
cdfh->Draw();
gsh->Draw("same");
} // channel loop
//m_sigdata["gs"] = vgsh;
m_sigdata["cdf"] = vcdfh;
} // makeGaussianSignals
示例13: Normalize
void Normalize(TH1D &h, double normalization, bool norm_per_avg_width) {
int nbins = h.GetNbinsX();
double low = h.GetBinLowEdge(1);
double high = h.GetBinLowEdge(nbins+1);
double width = (high-low)/nbins;
if(norm_per_avg_width) normalization *= width;
double integral = h.Integral("width");
h.Scale(normalization/integral);
}
示例14: CompareBranch
void CompareBranch(string MCfilename, string CDfilename, string MCbranchname, string CDbranchname, string xtitle, string unit, string plotname, string MCcuts, string CDcuts, string MCweight, string CDweight, double xlow, double xup, int nbins)
{
TH1D* MChist = MakeBranchPlot(MCfilename,MCbranchname,MCcuts,MCweight,xlow,xup,nbins);
TH1D* CDhist = MakeBranchPlot(CDfilename,CDbranchname,CDcuts,CDweight,xlow,xup,nbins);
MChist->Scale(1./MChist->Integral());
CDhist->Scale(1./CDhist->Integral());
MChist->SetDrawOption("B");
MChist->SetFillColor(kOrange);
MChist->SetLineColor(kOrange);
MChist->SetMaximum(MChist->GetMaximum()*1.3);
MChist->SetMinimum(0);
// Draw everything
plotmaker plotter(MChist);
plotter.SetTitle(xtitle, unit);
TCanvas* plot = plotter.Draw();
CDhist->Draw("sameE1");
plot->SaveAs((plotname+".pdf").c_str());
}
示例15: getNormalizationWeight
//--------------------------------------------------------------------------------------------------
// Get Total Number of Events in the sample
//--------------------------------------------------------------------------------------------------
Double_t getNormalizationWeight(TString filename, TString datasetName) {
// Get Normalization Weight Factor
//Get Number of Events in the Sample
TFile *file = new TFile(filename.Data(),"READ");
if (!file) {
cout << "Could not open file " << filename << endl;
return 0;
}
//TDirectory *dir = (TDirectory*)file->FindObjectAny("AnaFwkMod");
//if (!dir) {
// cout << "Could not find directory AnaFwkMod"
// << " in file " << filename << endl;
// delete file;
// return 0;
//}
TH1D *hist = (TH1D*) gROOT->FindObject("hDAllEvents");
if (!hist) {
cout << "Could not find histogram hDAllEvents in directory AnaFwkMod"
<< " in file " << filename << endl;
//delete dir;
delete file;
return 0;
}
Double_t NEvents = hist->Integral();
cout << "Original events in the sample: " << NEvents << endl;
//Get CrossSection
mithep::SimpleTable xstab("$CMSSW_BASE/src/MitPhysics/data/xs.dat");
Double_t CrossSection = xstab.Get(datasetName.Data());
Double_t Weight = CrossSection / NEvents;
// weight for data is always 1 (-1 to make a trick for fakes)
if(CrossSection < 0) Weight = -1.0;
// Only gg->H and qqH samples
if(datasetName.Contains("-gf-") ||
datasetName.Contains("-vbf-")){
// Only high mass samples
if(datasetName.Contains("h250") || datasetName.Contains("h300") || datasetName.Contains("h350") || datasetName.Contains("h400") ||
datasetName.Contains("h450") || datasetName.Contains("h500") || datasetName.Contains("h550") || datasetName.Contains("h600") ||
datasetName.Contains("h700") || datasetName.Contains("h800") || datasetName.Contains("h900") || datasetName.Contains("h1000")){
TH1D *histBeforeWeight = (TH1D*) gROOT->FindObject("hDHKFactor_1");
TH1D *histAfterWeight = (TH1D*) gROOT->FindObject("hDHKFactor_2");
cout << "Nevents before/after reweighting: " << histBeforeWeight->GetSumOfWeights() << " " <<
histAfterWeight->GetSumOfWeights() << endl;
Weight = Weight * histBeforeWeight->GetSumOfWeights() / histAfterWeight->GetSumOfWeights();
}
}
//delete dir;
delete file;
return Weight;
}