void Graph2Randoms() { TCanvas * c = new TCanvas("c"); TFile *fileFudge = new TFile("~/analysis/run354/EffoutWithFudge.root"); TH1F * h = (TH1F*) gDirectory->Get("ShadowBarRandomBackGround"); Double_t error[71]; for (int i=1; i<71; i++) { error[i]=sqrt(h->GetBinContent(i))/10; } c->cd(1); h->Scale(1.0/10.0); h->SetError(error); h->Draw(); TFile *fileNoFudge = new TFile("~/analysis/run355/Effout.root"); TH1F * h2 = (TH1F*) gDirectory->Get("ShadowBarRandomBackGround"); c->cd(1); h2->SetLineColor(kRed); h2->Draw("sameE1"); }
AliGenerator* MbPythiaTuneATLAS_Flat() { AliGenPythia* pythia = MbPythiaTuneATLAS(); comment = comment.Append("; flat multiplicity distribution"); // set high multiplicity trigger // this weight achieves a flat multiplicity distribution Double_t cont[] = {0, 0.234836, 0.103484, 0.00984802, 0.0199906, 0.0260018, 0.0208481, 0.0101477, 0.00146998, -0.00681513, -0.0114928, -0.0113352, -0.0102012, -0.00895238, -0.00534961, -0.00261648, -0.000819048, 0.00130816, 0.00177978, 0.00373838, 0.00566255, 0.00628156, 0.00687458, 0.00668017, 0.00702917, 0.00810848, 0.00876167, 0.00832783, 0.00848518, 0.0107709, 0.0106849, 0.00933702, 0.00912525, 0.0106553, 0.0102785, 0.0101756, 0.010962, 0.00957103, 0.00970448, 0.0117133, 0.012271, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0.0113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Double_t err[] = {0, 0.00168216, 0.000743548, 0.00103125, 0.00108605, 0.00117101, 0.00124577, 0.00129119, 0.00128341, 0.00121421, 0.00112431, 0.00100588, 0.000895078, 0.000790314, 0.000711673, 0.000634547, 0.000589133, 0.000542763, 0.000509552, 0.000487375, 0.000468906, 0.000460196, 0.000455806, 0.00044843, 0.000449317, 0.00045007, 0.000458016, 0.000461167, 0.000474742, 0.00050161, 0.00051637, 0.000542336, 0.000558854, 0.000599169, 0.000611982, 0.000663855, 0.000696322, 0.000722825, 0.000771686, 0.000838023, 0.000908317, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; TH1F *weight = new TH1F("newweight","newweight",120,-0.5,119.5); weight->SetContent(cont); weight->SetError(err); Int_t limit = weight->GetRandom(); pythia->SetTriggerChargedMultiplicity(limit, 1.4); comment = comment.Append(Form("; multiplicity threshold set to %d in |eta| < 1.4", limit)); return pythia; }
//___________________________________________________________________________ Double_t* IfitBin(TH1F* dataInput, TH1F* sigTemplate, TH1F* bkgTemplate, int fit_data=1) { cout << "Input files are " << dataInput->GetName() << "\t" << sigTemplate->GetName() << "\t" << bkgTemplate->GetName() << endl; TCanvas *c1 = new TCanvas("HF1", "Histos1", 0, 0, 600, 600); dataCollBin.clear(); sigCollBin.clear(); bkgCollBin.clear(); Double_t* fitted = new Double_t[8]; fitted[0] = fitted[1] = fitted[2] = fitted[3] = fitted[4] = fitted[5] = fitted[6] = fitted[7] = 0.0; TH1F *hsum = new TH1F(); float ntemplate = 1.; float sigfrac = 0.1; TH1F *hsum_norm = new TH1F(); TH1F *hdata; TH1F *hsig = (TH1F*)sigTemplate->Clone(); hsig->SetName("hsig"); hsig->Rebin(6); TH1F *hbkg = (TH1F*)bkgTemplate->Clone(); hbkg->SetName("hbkg"); hbkg->Rebin(6); float ndata=0; if ( fit_data>0 ) { hdata = (TH1F*)dataInput->Clone(); hdata -> SetName("hdata"); ndata = hdata->Integral(); }else { hsum = (TH1F*)hsig->Clone(); hsum->Add(hbkg,1); cout << "For histogram " << sigTemplate->GetName() << " and " << bkgTemplate->GetName() << " sum = " << hsum->Integral() << endl; if (hsum->Integral()>1.) ntemplate = hsum->Integral(); sigfrac = hsig->Integral()/ntemplate; hsum_norm = (TH1F*)hsum->Clone(); hsum_norm->Scale(1./hsum->Integral()); hdata = (TH1F*)hsum_norm->Clone(); hdata -> SetName("hdata"); ndata=ntemplate; hdata->FillRandom(hsum_norm, ndata); } if(ndata==0) { printf(" --- no events in the fit \n"); return fitted; } printf(" --------- before the fit ------------- \n"); printf("Nsig %2.3f, Nbg %2.3f, Ntemplate %3.3f \n", hsig->Integral(), hbkg->Integral(), ntemplate); // printf("Purity %2.3f, init size %4.3f, test sample size %4d\n", hsig->Integral()/hsum->Integral(), hsum->Integral(), ndata); printf(" -------------------------------------- \n"); hdata->Rebin(6); int nbins = hdata->GetNbinsX(); hsig->Scale(1./hsig->Integral()); hbkg->Scale(1./hbkg->Integral()); for (int ibin=1; ibin<=nbins; ibin++) { dataCollBin.push_back(hdata->GetBinContent(ibin)); sigCollBin.push_back(hsig->GetBinContent(ibin)); bkgCollBin.push_back(hbkg->GetBinContent(ibin)); } printf( " ----- Got %d, %d, %d events for fit ----- \n ", dataCollBin.size(), sigCollBin.size(), bkgCollBin.size() ); if ( dataCollBin.size() != sigCollBin.size() || sigCollBin.size()!=bkgCollBin.size() ) { printf(" error ... inconsistent hit collection size \n"); return fitted; } //-------------------------------------------------- //init parameters for fit Double_t vstart[10] = {1., 1.}; vstart[0] = sigfrac*ndata; vstart[1] = (1-sigfrac)*ndata; TMinuit *gMinuit = new TMinuit(NPARBIN); gMinuit->Command("SET STR 1"); gMinuit->SetFCN(fcnBin); Double_t arglist[10]; Int_t ierflg = 0; arglist[0] = 1; gMinuit->mnexcm("SET ERR", arglist ,1,ierflg); arglist[0] = 1; gMinuit->mnexcm("SET PRINT", arglist ,1,ierflg); Double_t step[] = { 0.1, 0.1,}; gMinuit->mnparm(0, "Signal yield" , vstart[0], step[0], 0., ndata*2. , ierflg); gMinuit->mnparm(1, "background yield" , vstart[1], step[1], 0., ndata*2. , ierflg); printf(" --------------------------------------------------------- \n"); printf(" Now ready for minimization step \n --------------------------------------------------------- \n"); arglist[0] = 2000; // number of iteration arglist[1] = 1.; gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg); printf (" -------------------------------------------- \n"); printf("Finished. ierr = %d \n", ierflg); infoBin.clear(); infoBin_err.clear(); double para[NPARBIN+1],errpara[NPARBIN+1]; if ( ierflg == 0 ) { for(int j=0; j<=NPARBIN-1;j++) { gMinuit->GetParameter(j, para[j],errpara[j]); para[NPARBIN] = dataCollBin.size(); infoBin.push_back(para[j]); infoBin_err.push_back(errpara[j]); printf("Parameter (yeild) %d = %f +- %f\n",j,para[j],errpara[j]); } printf(" fitted yield %2.3f \n", (para[0]+para[1])/ndata ); infoBin.push_back(sigCollBin.size()); } else { printf(" *********** Fit failed! ************\n"); gMinuit->GetParameter(0, para[0],errpara[0]); gMinuit->GetParameter(1, para[1],errpara[1]); para[0]=0.; errpara[0]=0.; } // Print results Double_t amin,edm,errdef; Int_t nvpar,nparx,icstat; gMinuit->mnstat(amin,edm,errdef,nvpar,nparx,icstat); gMinuit->mnprin(1,amin); gMinuit->mnmatu(1); printf(" ========= happy ending !? =========================== \n"); printf("FCN = %3.3f \n", amin); double yerr[20]; for(int i=0;i<20;i++){ yerr[i] = 0.; } hsig->Scale(para[0]); hbkg->Scale(para[1]); TH1F *hfit = (TH1F*)hsig->Clone(); hfit->Add(hbkg); hsig->SetLineColor(1); hsig->SetFillColor(5); hsig->SetFillStyle(3001); hbkg->SetLineWidth(2); // plot c1->Draw(); //gPad->SetLogy(); hdata->SetLineColor(1); hdata->SetNdivisions(505,"XY"); hdata->SetXTitle("Iso_{ECAL}+Iso_{HCAL}+Iso_{TRK} (GeV)"); hdata->SetYTitle("Entries"); hdata->SetTitle(""); hdata->SetMarkerStyle(8); hdata->SetMinimum(0.); hdata->SetMaximum(hdata->GetMaximum()*1.5); hdata->Draw("p e"); hsig->Draw("hist same"); hbkg->SetMarkerStyle(0); hbkg->SetFillColor(8); hbkg->SetLineWidth(1); hbkg->SetFillStyle(3013); hbkg->SetError(yerr); hbkg->Draw("hist same"); hfit->SetMarkerStyle(0); hfit->SetLineColor(1); hfit->SetLineWidth(2); hfit->SetError(yerr); hfit->Draw("hist same"); double chi2ForThisBin=0; int nbinForThisBin=0; chi2NbinsHisto(hfit, hdata, chi2ForThisBin, nbinForThisBin); TPaveText *pavetex = new TPaveText(0.43, 0.87, 0.90, 0.92,"NDCBR"); pavetex->SetBorderSize(0); pavetex->SetFillColor(0); pavetex->SetFillStyle(0); pavetex->SetLineWidth(3); pavetex->SetTextAlign(12); pavetex->SetTextSize(0.03); pavetex->AddText(Form("#chi^{2}/NDF=%.1f/%d",chi2ForThisBin, nbinForThisBin)); pavetex->Draw(); char text[1000]; TLegend *tleg = new TLegend(0.43, 0.60, 0.90, 0.87); tleg->SetHeader(dataInput->GetTitle()); tleg->SetTextSize(0.03); tleg->SetFillColor(0); tleg->SetShadowColor(0); tleg->SetBorderSize(0); sprintf(text,"Data %5.1f events",hdata->Integral()); tleg->AddEntry(hdata,text,"pl"); sprintf(text,"Fitted %5.1f events",hfit->Integral()); tleg->AddEntry(hfit,text,"l"); sprintf(text,"SIG %5.1f #pm %5.1f events",para[0], errpara[0]); tleg->AddEntry(hsig,text,"f"); sprintf(text,"BKG %5.1f #pm %5.1f events",para[1], errpara[1]); tleg->AddEntry(hbkg,text,"f"); tleg->Draw(); gPad->RedrawAxis(); cout << dataInput->GetName() << endl; char fname[300]; sprintf(fname,"plots/Ifit_%s.eps",dataInput->GetName()); c1->SaveAs(fname); sprintf(fname,"plots/Ifit_%s.gif",dataInput->GetName()); c1->SaveAs(fname); printf("----- fit results with signal projection ----------- \n"); // ftemplate->Close(); int purityMaxBin = hsig->FindBin(5.0)-1; Double_t scale_signal = hsig->Integral(1,purityMaxBin)/hsig->Integral(); Double_t scale_background = hbkg->Integral(1,purityMaxBin)/hbkg->Integral(); fitted[0] = para[0]; fitted[1] = errpara[0]; fitted[2] = para[1]; fitted[3] = errpara[1]; // for integral up to 5 GeV fitted[4] = para[0]*scale_signal; fitted[5] = errpara[0]*scale_signal; fitted[6] = para[1]*scale_background; fitted[7] = errpara[1]*scale_background; return fitted; }