int main( int argc, char * argv[]) { if( argc < 3) { std::cout << "usage : tupleMaker input-filenames output-filename <Unweight>" << std::endl; return 1; } std::string lastarg = std::string( argv[argc-1] ); int lastargisfilename = 0; if (lastarg.length() > 1 ){ lastargisfilename =1; } if (!lastargisfilename){ if( argc < 5) { std::cout << "usage : tupleMaker input-filenames output-filename <Unweight> <PDF reweight>" << std::endl; return 1; } } // // read in some control parameters // bool Unweight = 0; bool PDF_reweight = 0; if (!lastargisfilename){ Unweight = atoi( argv[argc-2] ); PDF_reweight = atoi( argv[argc-1] ); std::cout<<"Unweight = "<<Unweight<<" PDF reweight = "<<PDF_reweight<<std::endl; if(PDF_reweight==1) { std::cout<<"========================================================================================================"<<std::endl; std::cout<<"Need to make sure you have right PDF text files resbos_P/resbos_weights_PDF_*.dat"<<std::endl; std::cout<<"========================================================================================================"<<std::endl; } } // get input and output file names std::vector<std::string> in_files; int nInputs = argc-(2-lastargisfilename); if(PDF_reweight) nInputs = argc-(3-lastargisfilename); for( int i = 1; i < nInputs;++i) { in_files.push_back( std::string( argv[i] ) ); std::cout<<"Input file: "<<std::string(argv[i])<<std::endl; } int nOutput = argc-(2-lastargisfilename); if(PDF_reweight) nOutput = argc-(3-lastargisfilename); std::string out_filename = std::string( argv[nOutput] ); std::cout<<"Output file: "<<out_filename<<std::endl; // setup outputfile TFile * of = new TFile(out_filename.c_str(),"RECREATE"); if( of == 0) { std::cout << "Couldn't open output file : " << out_filename << std::endl; return 1; } Output * output = new Output(); output->Reset(); // initialise random number generator TRandom2 random; random.SetSeed(19742005); // loop over files Double_t StandardWeight =0; int nfiles = in_files.size(); if (Unweight){ std::cout << "All events will have weight one" << std::endl; std::cout << "Multiple files are merged using pass/fail based on the weight of events in the first file -- Standard Weight as shown below" << std::endl; } if (!Unweight) std::cout << "Unweighted events, Weights from generator are maintained"<< std::endl; // // read event weights for different PDF files // std::ifstream f_weights[45]; vector<float> pdfwgts; pdfwgts.resize(45); if(PDF_reweight) { char name[50]; for(int i=0; i<44; i++) { sprintf(name, "%s%d%s", "resbos_P/resbos_weights_PDF_", i+1, ".dat"); f_weights[i].open(name, std::ios::in); if( !f_weights[i] ) std::cout<<"Could not find the weight file "<<name<<std::endl; } } #ifdef __USE_PDFS_RESBOS__ Unweight = true; /// { std::ifstream tmp_file; tmp_file.open( "weights_00.hep" , std::ios::in ); if( tmp_file ) { int num ; double wgt ; while( tmp_file >> num >> wgt ) { if( wgt > StandardWeight ) StandardWeight = wgt; } tmp_file.close(); } } /// for( int i = 0 ; i < 45 ; i++ ) { TString name; name.Form( "weights_%02i.hep" , i ); f_weights[i].open( name.Data() , std::ios::in ); if( !f_weights[i] ) std::cout<<"Could not find the weight file "<<name<<std::endl; } #endif for(int i =0; i < nfiles; ++i) { // open file std::cout << "Processing file: " << in_files[i].c_str() << std::endl; std::ifstream f((in_files[i]).c_str()); if( !f ) { std::cout << "couldn't open file : " << in_files[i] << std::endl; return 1; } bool finished_file = false; // this loops over events while( ! finished_file ) { int evn; double evt_wt; double Q2,that,uhat,x1,x2,flav1,flav2 ; #ifdef __USE_PDFS__ f >> evn >> evt_wt >> Q2 >> that >> uhat >> x1 >> x2 >> flav1 >> flav2; #else f >> evn >> evt_wt; #endif if(evn % 100000==0) std::cout<<"Processing event: "<<evn<<std::endl; if( evn == 0 ) { finished_file = true; continue; } #ifdef __USE_PDFS_RESBOS__ for( int j = 0 ; j<45 ; j++ ) { double evn_tmp , wgt_tmp; f_weights[j] >> evn_tmp >> wgt_tmp; if( evn_tmp != evn ) { cout << " WRONG EVENT NUMBER!!!! " << j << " " << evn_tmp << " " << evn << endl; return 1; } if( j == 0 ) evt_wt = wgt_tmp; if( evt_wt > 0 && pdfwgts[j] > 0 ) pdfwgts[j] = wgt_tmp / evt_wt; else pdfwgts[j] = 1.0; if( pdfwgts[j] < 0 ) pdfwgts[j] = 0.0; } #endif float vx,vy,vz; f>> vx >> vy >>vz; bool finished_particles = false; if( !f.eof()) { if (StandardWeight == 0. && Unweight){ StandardWeight = evt_wt; std::cout << "Standard Weight = " << StandardWeight << std::endl; } } else { finished_file = true; } Bool_t keeper = kTRUE; if (Unweight){ Double_t weight_ratio= TMath::Abs(evt_wt/StandardWeight); if (weight_ratio > 1.){ std::cout << "This event has a weight = " << weight_ratio <<" times the value of Standard Weight" << std::endl; } if (random.Rndm() > weight_ratio) keeper = kFALSE; } if (Unweight) evt_wt = TMath::Abs(evt_wt) / evt_wt ; // // read event weight for each PDF set // double weight_PDF[44]; if(PDF_reweight) { for(int j=0; j<44; j++) (f_weights[j]) >> weight_PDF[i]; } // save PDF information into the root file // output->setPDFWeights(weight_PDF); if (keeper) { if(PDF_reweight) output->NewEvent( evn, evt_wt, 0 , vx,vy,vz, weight_PDF, 44); else { output->NewEvent( evn, evt_wt, 0 , vx,vy,vz , Q2 , x1 , x2 , flav1 , flav2 , pdfwgts ); } } //bool doFlip = false; //doFlip = ( random.Rndm() > 0.5); // this loops over particles in an event while( ! finished_particles && !f.eof()) { int id; f >> id; if( id == 0 ) finished_particles = true; else { float px,py,pz,E; f>> px >> py >> pz >> E; int origin, udk; f >> origin >> udk; //std::cout << id << " " << px << " " << py << " " << pz << " " << E << std::endl; // do the occaisional CP inversion // flip W+ -> W-, e+->e-, nu -> nu-bar and invert all momenta //if( doFlip ) { // id is isajet ids // if( id != 10 ) id = -id; // photon == anti-photon // px = -px; // py = -py; // pz = -pz; //} if(keeper) output->AddParticle( id, px,py,pz,E,origin); } } if (keeper){ output->Fill(); } if( f.eof()) finished_file = true; } f.close(); } output->Write(); of = output->Tree()->GetCurrentFile(); of->Close(); return 0; };
void plotFeedDown(int ntest=1, int centL=0,int centH=100) { // B cross-section TFile *inf = new TFile("output_pp_Bmeson_5TeV_y1.root"); // TFile *inf = new TFile("outputBplus_D_pp_rap24.root"); // TFile *inf = new TFile("outputBplus_pp.root"); TH1D *hBPtMax = (TH1D*)inf->Get("hmaxall"); TH1D *hBPtMin = (TH1D*)inf->Get("hminall"); TH1D *hBPt = (TH1D*)inf->Get("hpt"); hBPt->SetName("hBPt"); hBPtMax->SetName("hBPtMax"); hBPtMin->SetName("hBPtMin"); TH1D *hBMaxRatio = (TH1D*)hBPt->Clone("hBMaxRatio"); hBMaxRatio->Divide(hBPtMax); TH1D *hBMinRatio = (TH1D*)hBPt->Clone("hBMinRatio"); hBMinRatio->Divide(hBPtMin); hBPt->Rebin(1); // D cross-section // TFile *infD = new TFile("outputD0_D_pp.root"); TFile *infD = new TFile("output_pp_d0meson_5TeV_y1.root"); TH1D *hDPtMax = (TH1D*)infD->Get("hmaxall"); TH1D *hDPtMin = (TH1D*)infD->Get("hminall"); TH1D *hDPt = (TH1D*)infD->Get("hpt"); hDPt->SetName("hDPt"); hDPtMax->SetName("hDPtMax"); hDPtMin->SetName("hDPtMin"); hDPt->Rebin(1); // ratio of B->D0: not correct85% from PYTHIA //hBPt->Scale(0.85); hBPt->Scale(0.598); // c->D (55.7%) hDPt->Scale(0.557); TFile *inf2 = new TFile("/data/HeavyFlavourRun2/BtoDPythia/treefile_merged.root"); // TFile *inf2 = new TFile("test.root"); TTree *hi = (TTree*) inf2->Get("ana/hi"); hi->SetAlias("yD","log((sqrt(1.86484*1.86484+pt*pt*cosh(eta)*cosh(eta))+pt*sinh(eta))/sqrt(1.86484*1.86484+pt*pt))"); hi->SetAlias("yB","log((sqrt(5.3*5.3+pt*pt*cosh(eta)*cosh(eta))+pt*sinh(eta))/sqrt(5.3*5.3+pt*pt))"); hi->SetAlias("yJ","log((sqrt(3.09692*3.09692+pt*pt*cosh(eta)*cosh(eta))+pt*sinh(eta))/sqrt(3.09692*3.09692+pt*pt))"); // 6.5, 8, 10, 13, 30 /* TH1D *hBNoCut = (TH1D*)hBPt->Clone("hBNoCut"); TH1D *hBHasD = (TH1D*)hBPt->Clone("hBHasD"); hi->Draw("pt>>hBHasD","(abs(pdg)>500&&abs(pdg)<600&&abs(yB)<2.4)&&Sum$(abs(pdg)==421&&abs(yD)<2)>0"); hi->Draw("pt>>hBNoCut","(abs(pdg)>500&&abs(pdg)<600&&abs(yB)<2.4)"); ; hBNoCut->Divide(hBHasD); hBPt->Divide(hBNoCut); */ // 0-100% int npoint = 7; double ptBins_npjpsi[8] = {1,3,6.5,8,10,13,30,300}; double raa_npjpsi[7];// = {1,0.6, 0.52,0.43,0.43,0.34,0.5}; double raaStat_npjpsi[7];// = {1,0.4,0.12,0.08,0.09,0.07,0.5}; double raaSyst_npjpsi[7];// = {0,0,0.06,0.05,0.05,0.04,0}; /* 0-10, 10-20, 20-30, 30-40, 40-50, 50-100 double nonPromptJpsiRAA_2012[] = {0.,0.38,0.43,0.48,0.52,0.65,0.69}; double nonPromptJpsiRAAError_2012[] = {0.,0.02,0.03,0.03,0.04,0.06,0.07}; double nonPromptJpsiRAAErrorSyst_2012[] = {0.,0.04,0.05,0.05,0.06,0.07,0.07}; */ if (centL==0&¢H==100) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=0.6; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=0.4; // prelim raa_npjpsi[2]=0.52; raaStat_npjpsi[2]=0.12; raaSyst_npjpsi[2]=0.06; // np jpsi pas raa_npjpsi[3]=0.43; raaStat_npjpsi[3]=0.08; raaSyst_npjpsi[3]=0.05; // np jpsi pas raa_npjpsi[4]=0.43; raaStat_npjpsi[4]=0.09; raaSyst_npjpsi[4]=0.05; // np jpsi pas raa_npjpsi[5]=0.34; raaStat_npjpsi[5]=0.07; raaSyst_npjpsi[5]=0.04; // np jpsi pas raa_npjpsi[6]=0.5; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.25; // b-jet } if (centL==0&¢H==10) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.38; raaStat_npjpsi[2]=0.02; raaSyst_npjpsi[2]=0.04; // np jpsi pas raa_npjpsi[3]=0.38; raaStat_npjpsi[3]=0.02; raaSyst_npjpsi[3]=0.04; // np jpsi pas raa_npjpsi[4]=0.38; raaStat_npjpsi[4]=0.02; raaSyst_npjpsi[4]=0.04; // np jpsi pas raa_npjpsi[5]=0.38; raaStat_npjpsi[5]=0.02; raaSyst_npjpsi[5]=0.04; // np jpsi pas raa_npjpsi[6]=0.39; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.20; // b-jet } if (centL==10&¢H==20) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.43; raaStat_npjpsi[2]=0.03; raaSyst_npjpsi[2]=0.05; // np jpsi pas raa_npjpsi[3]=0.43; raaStat_npjpsi[3]=0.03; raaSyst_npjpsi[3]=0.05; // np jpsi pas raa_npjpsi[4]=0.43; raaStat_npjpsi[4]=0.03; raaSyst_npjpsi[4]=0.05; // np jpsi pas raa_npjpsi[5]=0.43; raaStat_npjpsi[5]=0.03; raaSyst_npjpsi[5]=0.05; // np jpsi pas raa_npjpsi[6]=0.47; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.24; // b-jet } if (centL==20&¢H==30) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.48; raaStat_npjpsi[2]=0.03; raaSyst_npjpsi[2]=0.05; // np jpsi pas raa_npjpsi[3]=0.48; raaStat_npjpsi[3]=0.03; raaSyst_npjpsi[3]=0.05; // np jpsi pas raa_npjpsi[4]=0.48; raaStat_npjpsi[4]=0.03; raaSyst_npjpsi[4]=0.05; // np jpsi pas raa_npjpsi[5]=0.48; raaStat_npjpsi[5]=0.03; raaSyst_npjpsi[5]=0.05; // np jpsi pas raa_npjpsi[6]=0.47; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.24; // b-jet } if (centL==30&¢H==40) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.52; raaStat_npjpsi[2]=0.04; raaSyst_npjpsi[2]=0.06; // np jpsi pas raa_npjpsi[3]=0.52; raaStat_npjpsi[3]=0.04; raaSyst_npjpsi[3]=0.06; // np jpsi pas raa_npjpsi[4]=0.52; raaStat_npjpsi[4]=0.04; raaSyst_npjpsi[4]=0.06; // np jpsi pas raa_npjpsi[5]=0.52; raaStat_npjpsi[5]=0.04; raaSyst_npjpsi[5]=0.06; // np jpsi pas raa_npjpsi[6]=0.61; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.30; // b-jet } if (centL==40&¢H==50) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.65; raaStat_npjpsi[2]=0.06; raaSyst_npjpsi[2]=0.07; // np jpsi pas raa_npjpsi[3]=0.65; raaStat_npjpsi[3]=0.06; raaSyst_npjpsi[3]=0.07; // np jpsi pas raa_npjpsi[4]=0.65; raaStat_npjpsi[4]=0.06; raaSyst_npjpsi[4]=0.07; // np jpsi pas raa_npjpsi[5]=0.65; raaStat_npjpsi[5]=0.06; raaSyst_npjpsi[5]=0.07; // np jpsi pas raa_npjpsi[6]=0.61; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.30; // b-jet } if (centL==50&¢H==100) { raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.69; raaStat_npjpsi[2]=0.07; raaSyst_npjpsi[2]=0.07; // np jpsi pas raa_npjpsi[3]=0.69; raaStat_npjpsi[3]=0.07; raaSyst_npjpsi[3]=0.07; // np jpsi pas raa_npjpsi[4]=0.69; raaStat_npjpsi[4]=0.07; raaSyst_npjpsi[4]=0.07; // np jpsi pas raa_npjpsi[5]=0.69; raaStat_npjpsi[5]=0.07; raaSyst_npjpsi[5]=0.07; // np jpsi pas raa_npjpsi[6]=0.70; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.35; // b-jet } if (centL==0&¢H==20) { //averaged by ncoll raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.4; raaStat_npjpsi[2]=0.03; raaSyst_npjpsi[2]=0.05; // np jpsi pas raa_npjpsi[3]=0.4; raaStat_npjpsi[3]=0.03; raaSyst_npjpsi[3]=0.05; // np jpsi pas raa_npjpsi[4]=0.4; raaStat_npjpsi[4]=0.03; raaSyst_npjpsi[4]=0.05; // np jpsi pas raa_npjpsi[5]=0.4; raaStat_npjpsi[5]=0.03; raaSyst_npjpsi[5]=0.05; // np jpsi pas raa_npjpsi[6]=0.42; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.21; // b-jet } if (centL==10&¢H==30) { //averaged by ncoll raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.45; raaStat_npjpsi[2]=0.03; raaSyst_npjpsi[2]=0.05; // np jpsi pas raa_npjpsi[3]=0.45; raaStat_npjpsi[3]=0.03; raaSyst_npjpsi[3]=0.05; // np jpsi pas raa_npjpsi[4]=0.45; raaStat_npjpsi[4]=0.03; raaSyst_npjpsi[4]=0.05; // np jpsi pas raa_npjpsi[5]=0.45; raaStat_npjpsi[5]=0.03; raaSyst_npjpsi[5]=0.05; // np jpsi pas raa_npjpsi[6]=0.47; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.24; // b-jet } if (centL==30&¢H==50) { //averaged by ncoll raa_npjpsi[0]=1.0; raaStat_npjpsi[0]=0.0; raaSyst_npjpsi[0]=1.0; // no measurement raa_npjpsi[1]=1.0; raaStat_npjpsi[1]=0.0; raaSyst_npjpsi[1]=1.0; // no measurement raa_npjpsi[2]=0.57; raaStat_npjpsi[2]=0.06; raaSyst_npjpsi[2]=0.07; // np jpsi pas raa_npjpsi[3]=0.57; raaStat_npjpsi[3]=0.06; raaSyst_npjpsi[3]=0.07; // np jpsi pas raa_npjpsi[4]=0.57; raaStat_npjpsi[4]=0.06; raaSyst_npjpsi[4]=0.07; // np jpsi pas raa_npjpsi[5]=0.57; raaStat_npjpsi[5]=0.06; raaSyst_npjpsi[5]=0.07; // np jpsi pas raa_npjpsi[6]=0.61; raaStat_npjpsi[6]=0.0; raaSyst_npjpsi[6]=0.30; // b-jet } TH1D *hNPJpsiRAA = new TH1D("hNPJpsiRAA","",npoint,ptBins_npjpsi); for (int i=1;i<=npoint;i++) { hNPJpsiRAA->SetBinContent(i,raa_npjpsi[i-1]); hNPJpsiRAA->SetBinError(i,sqrt(raaSyst_npjpsi[i-1]*raaSyst_npjpsi[i-1]+raaStat_npjpsi[i-1]*raaStat_npjpsi[i-1])); } TCanvas *cJpsiRAA = new TCanvas("cJpsiRAA","",600,600); cJpsiRAA->SetLogx(); TExec *setex2 = new TExec("setex2","gStyle->SetErrorX(0.5)"); setex2->Draw(); hNPJpsiRAA->SetXTitle("Non-prompt J/psi R_{AA} (GeV/c)"); hNPJpsiRAA->SetXTitle("Non-prompt J/psi p_{T} (GeV/c)"); hNPJpsiRAA->SetYTitle("R_{AA}"); hNPJpsiRAA->Draw("e1"); TCanvas *c = new TCanvas("c","",600,600); TH2D *hJpsi= new TH2D("hJpsi","",hBPt->GetNbinsX(),hBPt->GetBinLowEdge(1),hBPt->GetBinLowEdge(hBPt->GetNbinsX()+1), 299*4,1,300); TH2D *hD= new TH2D("hD","",hBPt->GetNbinsX(),hBPt->GetBinLowEdge(1),hBPt->GetBinLowEdge(hBPt->GetNbinsX()+1), 299*4,1,300); hi->Draw("pt:BPt>>hJpsi","pdg==443&&BPt>0&&abs(yJ)<1"); hi->Draw("pt:BPt>>hD","abs(pdg)==421&&BPt>0&&abs(yD)<1"); hJpsi->Sumw2(); hD->Sumw2(); reweighthisto(hBPt,hD); reweighthisto(hBPt,hJpsi); hJpsi->ProjectionY()->Draw("hist"); hD->SetLineColor(4); hD->SetMarkerColor(4); hD->ProjectionY()->Draw("hist same"); hBPt->Draw("hist same"); hJpsi->SetXTitle("B p_{T} (GeV/c)"); hJpsi->SetYTitle("J/#psi p_{T} (GeV/c)"); hD->SetXTitle("B p_{T} (GeV/c)"); hD->SetYTitle("D^{0} p_{T} (GeV/c)"); TCanvas *c2= new TCanvas("c2","B RAA band",600,600); TRandom2 rnd; // hJpsi ->ProjectionX()->Draw("hist"); TH2D *hRAATmp = new TH2D("hRAATmp","",97,3,100,100,0,2); hRAATmp->SetXTitle("B p_{T} (GeV/c)"); hRAATmp->SetYTitle("R_{AA}"); hRAATmp->Draw(); TCanvas *c3= new TCanvas("c3","D RAA band",600,600); TH2D *hDRAATmp = new TH2D("hDRAATmp","",47,3,50,100,0,2); hDRAATmp->SetXTitle("D^{0} p_{T} (GeV/c)"); hDRAATmp->SetYTitle("R_{AA}"); hDRAATmp->Draw(); TCanvas *c4= new TCanvas("c4","B->D fraction band",600,600); TH2D *hBtoDTmp = new TH2D("hBtoDTmp","",47,3,50,100,0,2); hBtoDTmp->SetXTitle("D^{0} p_{T} (GeV/c)"); hBtoDTmp->SetYTitle("Non-prompt D fraction"); hBtoDTmp->Draw(); TH1D *hDFromBPt= (TH1D*)hD->ProjectionY()->Clone("hDFromBPt"); TH1D *hDFromBPtFraction= (TH1D*)hD->ProjectionY()->Clone("hDFromBPtFraction"); hDFromBPtFraction->Divide(hDPt); TH1D *hDFromBPtMax= (TH1D*)hD->ProjectionY()->Clone("hDFromBPtMax"); TH1D *hDFromBPtMin= (TH1D*)hD->ProjectionY()->Clone("hDFromBPtMin"); setHist(hDFromBPtMax,-1e10); setHist(hDFromBPtMin,1e10); for (int i=0;i<ntest;i++) { if (i%10==0) cout <<i<<endl; TH1D *hRAASample = (TH1D*)hNPJpsiRAA->Clone(Form( "hRAASample_%d",i)); for (int j=1;j<=hRAASample->GetNbinsX();j++) { double RAA = (rnd.Rndm()*2-1)*hNPJpsiRAA->GetBinError(j)+hNPJpsiRAA->GetBinContent(j); hRAASample->SetBinContent(j,RAA); } TH2D *hJpsiClone = (TH2D*)hJpsi->Clone(Form("hJpsiClone_%d",i)); reweighthisto(hBPt,hJpsiClone,hRAASample,1); TH1D *hBRAA = hJpsiClone->ProjectionX(Form("hBRAA_%d",i)); c2->cd(); hBRAA->Divide(hBPt); hBRAA->SetLineWidth(3); hBRAA->SetLineColor(kGray); hBRAA->Rebin(4); hBRAA->Scale(1./4.); hBRAA->Draw("hist c same"); delete hJpsiClone; TH2D *hDClone = (TH2D*)hD->Clone(Form("hDClone_%d",i)); reweighthisto(hBPt,hDClone,hBRAA,0,1); TH1D *hDRAA = hDClone->ProjectionY(Form("hDRAA_%d",i)); getMaximum(hDFromBPtMax,hDRAA); getMinimum(hDFromBPtMin,hDRAA); c3->cd(); hDRAA->Divide(hDFromBPt); hDRAA->SetLineWidth(3); hDRAA->SetLineColor(kGray); hDRAA->Draw("hist c same"); c4->cd(); TH1D *hBtoDFrac = hDClone->ProjectionY(Form("hBtoDFrac_%d",i)); hBtoDFrac->Divide(hDPt); hBtoDFrac->SetLineWidth(3); hBtoDFrac->SetLineColor(kGray); hBtoDFrac->Draw("hist same"); delete hDClone; // delete hBRAA; // delete hDRAA; } TFile *outf = new TFile(Form("BtoD-%d-%d.root",centL,centH),"recreate"); TH1D *hDFromBPtCentral=(TH1D*)hDFromBPtMax->Clone("hDFromBPtCentral"); hDFromBPtCentral->Add(hDFromBPtMin); hDFromBPtCentral->Scale(1./2); hNPJpsiRAA->Write(); hDFromBPtMax->Write(); hDFromBPtMin->Write(); hDFromBPtCentral->Write(); hDFromBPt->Write(); hJpsi->Write(); hD->Write(); hDFromBPtFraction->Write(); outf->Write(); }