void CvTradeRoute::setSourceCity(const IDInfo& kCity) { if (getSourceCity() != kCity) { setActiveDirty(); const IDInfo& kOldCity = getSourceCity(); m_kSourceCity = kCity; CvCity* pCity = ::getCity(getSourceCity()); FAssert(pCity != NULL); if (pCity != NULL) { pCity->updateExport(getYield()); } pCity = ::getCity(kOldCity); FAssert(pCity != NULL); if (pCity != NULL) { pCity->updateExport(getYield()); } setActiveDirty(); } }
void CvTradeRoute::setDestinationCity(const IDInfo& kCity) { if (getDestinationCity() != kCity) { setActiveDirty(); const IDInfo& kOldCity = getDestinationCity(); m_kDestinationCity = kCity; CvCity* pCity = ::getCity(getDestinationCity()); FAssert(pCity != NULL || getDestinationCity().iID == EUROPE_CITY_ID); if (pCity != NULL) { pCity->updateImport(getYield()); } pCity = ::getCity(kOldCity); FAssert(pCity != NULL || getDestinationCity().iID == EUROPE_CITY_ID); if (pCity != NULL) { pCity->updateImport(getYield()); } setActiveDirty(); } }
void CvTradeRoute::setYield(YieldTypes eYield) { if (getYield() != eYield) { YieldTypes eOldYield = getYield(); m_eYield = eYield; CvCity* pCity = ::getCity(getDestinationCity()); FAssert(pCity != NULL); if (pCity != NULL) { pCity->updateImport(getYield()); pCity->updateImport(eOldYield); } pCity = ::getCity(getSourceCity()); FAssert(pCity != NULL); if (pCity != NULL) { pCity->updateExport(getYield()); pCity->updateExport(eOldYield); } setActiveDirty(); } }
pair<float, float> getSpillage(TString dir, unsigned int cut_nolep, unsigned int veto, int mass, int njets, TString region, float lumi, bool applyEff, bool doPUw) { bool debug = 0; region = region+="=spill="; //get scale factors for DY float dySF = DYBkgScaleFactor(0,njets); dySF=1.; //correct for spillage... pair<float, float> qqwwFake = getYield(dir+"qqww", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> ggwwFake = getYield(dir+"ggww", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> ttbarFake = getYield(dir+"ttbar_powheg", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> twFake = getYield(dir+"tw", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> dyllFake = getYield(dir+"dyll", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> wzFake = getYield(dir+"wz", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> zzFake = getYield(dir+"zz", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> wgFake = getYield(dir+"wgamma",cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); pair<float, float> wg3lFake = getYield(dir+"wglll", cut_nolep, veto, mass, njets, region, lumi, false, applyEff, true, doPUw); float spillYield = qqwwFake.first+ggwwFake.first+ttbarFake.first+twFake.first+wzFake.first+zzFake.first+ dySF*dyllFake.first+ wgFake.first+wg3lFake.first; float spillError = sqrt(pow(qqwwFake.second,2)+pow(ggwwFake.second,2)+pow(ttbarFake.second,2)+pow(twFake.second,2)+ pow(wzFake.second,2)+pow(zzFake.second,2)+ pow(dySF*dyllFake.second,2)+ pow(wgFake.second,2)+pow(wg3lFake.second,2)); if (debug) { cout << "qqww: " << qqwwFake.first << " ggww: " << ggwwFake.first << " ttbar: " << ttbarFake.first << " tw: " << twFake.first << " dyll: " << dySF*dyllFake.first << " wz: " << wzFake.first << " zz: " << zzFake.first << " wgamma: " << wgFake.first << " wg3l: " << wg3lFake.first << endl; } return make_pair<float, float>(spillYield,spillError); }
pair<float, float> getZYieldInData(unsigned int cut, unsigned int veto, int mass, unsigned int njets, TString region, float lumi, float kee, TString mmee, bool useJson=false, bool applyEff=false, bool doFake=false, bool doPUw=false) { bool printAll = 0; //sample is assumed to be data float lumiSample = 0.; //get Z yields after full met float zmm = getYield(main_dir+dy_dir+"data", cut, veto, mass, njets, "=zregion=mmfs=dymvaallfs="+region, lumiSample, useJson, false, doFake, false).first; float zme = getYield(main_dir+dy_dir+"data", cut, veto, mass, njets, "=zregion=mefs=dymvaallfs="+region, lumiSample, useJson, false, doFake, false).first; float zem = getYield(main_dir+dy_dir+"data", cut, veto, mass, njets, "=zregion=emfs=dymvaallfs="+region, lumiSample, useJson, false, doFake, false).first; float zee = getYield(main_dir+dy_dir+"data", cut, veto, mass, njets, "=zregion=eefs=dymvaallfs="+region, lumiSample, useJson, false, doFake, false).first; float zmmofs = zmm - 0.5*(zme+zem)/kee; float zmmofs_err = sqrt( zmm + 0.25*(zme+zem)/pow(kee,2) ); float zeeofs = zee - 0.5*(zme+zem)*kee; float zeeofs_err = sqrt( zee + 0.25*(zme+zem)*pow(kee,2) ); float zofs = zmmofs+zeeofs; float zofs_err = sqrt( zmm + zee + 0.25*(zme+zem)*pow(kee+1./kee,2) ); pair<float, float> wzmm_p = getYield(main_dir+dy_dir+"wz", cut, veto, mass, njets, "=zregion=mmfs=dymvaallfs=fromZ="+region, lumi, useJson, applyEff, doFake, doPUw); pair<float, float> zzmm_p = getYield(main_dir+dy_dir+"zz", cut, veto, mass, njets, "=zregion=mmfs=dymvaallfs=fromZ="+region, lumi, useJson, applyEff, doFake, doPUw); pair<float, float> wzee_p = getYield(main_dir+dy_dir+"wz", cut, veto, mass, njets, "=zregion=eefs=dymvaallfs=fromZ="+region, lumi, useJson, applyEff, doFake, doPUw); pair<float, float> zzee_p = getYield(main_dir+dy_dir+"zz", cut, veto, mass, njets, "=zregion=eefs=dymvaallfs=fromZ="+region, lumi, useJson, applyEff, doFake, doPUw); float wzmm = wzmm_p.first; float wzmm_stat_err = wzmm_p.second; float wzmm_syst_err = 0.1*(wzmm);//assume 10% syst float wzmm_err = sqrt( pow(wzmm_stat_err,2) + pow(wzmm_syst_err,2) ); float zzmm = zzmm_p.first; float zzmm_stat_err = zzmm_p.second; float zzmm_syst_err = 0.1*(zzmm);//assume 10% syst float zzmm_err = sqrt( pow(zzmm_stat_err,2) + pow(zzmm_syst_err,2) ); float wzee = wzee_p.first; float wzee_stat_err = wzee_p.second; float wzee_syst_err = 0.1*(wzee);//assume 10% syst float wzee_err = sqrt( pow(wzee_stat_err,2) + pow(wzee_syst_err,2) ); float zzee = zzee_p.first; float zzee_stat_err = zzee_p.second; float zzee_syst_err = 0.1*(zzee);//assume 10% syst float zzee_err = sqrt( pow(zzee_stat_err,2) + pow(zzee_syst_err,2) ); float vzmm_syst_err = 0.1*(wzmm+zzmm);//assume 10% syst float vzee_syst_err = 0.1*(wzee+zzee);//assume 10% syst float vz_syst_err = 0.1*(wzmm+zzmm+wzee+zzee);//assume 10% syst float zmmofs_corr = zmmofs-wzmm-zzmm; float zmmofs_corr_err = sqrt( pow(zmmofs_err,2) + pow(wzmm_stat_err,2) + pow(zzmm_stat_err,2) + pow(vzmm_syst_err,2) ); float zeeofs_corr = zeeofs-wzee-zzee; float zeeofs_corr_err = sqrt( pow(zeeofs_err,2) + pow(wzee_stat_err,2) + pow(zzee_stat_err,2) + pow(vzee_syst_err,2) ); float zofs_corr = zofs-wzmm-zzmm-wzee-zzee; float zofs_corr_err = sqrt( pow(zofs_err,2) + pow(wzmm_stat_err,2) + pow(zzmm_stat_err,2) + pow(wzee_stat_err,2) + pow(zzee_stat_err,2) + pow(vz_syst_err,2) ); if (printAll){ cout << "k: " << kee << endl; cout << "Z(after full met): " << zmm << " " << zme << " " << zem << " " << zee << endl; cout << "OF corr mm, ee, all: " << zmmofs << "+/-" << zmmofs_err << " " << zeeofs << "+/-" << zeeofs_err << " " << zofs << "+/-" << zofs_err << endl; cout << "WZ mm, ee: " << wzmm << "+/-" << wzmm_err << " " << wzee << "+/-" << wzee_err << endl; cout << "ZZ mm, ee: " << zzmm << "+/-" << zzmm_err << " " << zzee << "+/-" << zzee_err << endl; cout << "OF+VV corr mm, ee, all: " << zmmofs_corr << "+/-" << zmmofs_corr_err << " " << zeeofs_corr << "+/-" << zeeofs_corr_err << " " << zofs_corr << "+/-" << zofs_corr_err << endl; } if (mmee=="mm") return make_pair<float, float>(zmmofs_corr,zmmofs_corr_err); else if (mmee=="ee") return make_pair<float, float>(zeeofs_corr,zeeofs_corr_err); else return make_pair<float, float>(zofs_corr,zofs_corr_err); }
void triggerturnonFast(TString trigger="HLT_DmesonPPTrackingGlobal_Dpt20_v1") { TH1D* getYield(TTree* nt, TString triggerpass, TString triggername, TString prescale, TString variable, TString varname, TString varlatex, Int_t BIN_NUM, Double_t BIN_MIN, Double_t BIN_MAX, TString addcut=""); void plotTurnOn(TH1D* hnominator, TH1D* hdenominator, TString triggerlegend, TString triggername, TString varname, TString varlatex, Int_t BIN_NUM, Double_t BIN_MIN, Double_t BIN_MAX); TString infname; infname = "/data/dmeson2015/Dntuple/ntD_BigMergeExpressHiForest_run262163-run262252_match.root"; //infname = "/data/dmeson2015/Dntuple/Dntuple_run262163_262165_262167_262172.root"; TFile* infile = new TFile(infname); TTree* root = (TTree*)infile->Get("ntDkpi"); root->AddFriend("HltTree",infname); TH1D* hpp_pt = getYield(root,"","","","Dpt","pt","p_{T} (GeV/c)",16,0,80); TH1D* hpp_pt_Hlt = getYield(root,Form("&&%s",trigger.Data()),Form("_%s",trigger.Data()),Form("*%s_Prescl",trigger.Data()),"Dpt","pt","p_{T} (GeV/c)",16,0,80); plotTurnOn(hpp_pt_Hlt,hpp_pt,trigger,Form("_%s",trigger.Data()),"pt","p_{T} (GeV/c)",16,0,80); }
void makeFakeTable(float lumi) { //bool printAll = 0; bool useJson = true; bool applyTnPSF = true; bool doPUw = true; //bool doSpillage = 1; int mass = 0; TString region = "=dphireg=dphijet=dymvacut=ptll45=lep2pt20allfs="; int jetbins[] = {0}; //int jetbins[] = {0,1,2}; int njetbins = sizeof(jetbins)/sizeof(int); for (int j=0;j<njetbins;++j) { int njets = jetbins[j]; pair<float, float> wjMC = getYield(main_dir+topww_dir+"/wjets", wwSelNoMet, noVeto, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); //pair<float, float> wjMC_mm = getYield(main_dir+wj_dir+"/wjets", wwSelNoMet, noVeto, mass, njets, region+"mmfs", lumi, useJson, applyTnPSF, false, doPUw); //pair<float, float> wjMC_em = getYield(main_dir+wj_dir+"/wjets", wwSelNoMet, noVeto, mass, njets, region+"emfs", lumi, useJson, applyTnPSF, false, doPUw); //pair<float, float> wjMC_me = getYield(main_dir+wj_dir+"/wjets", wwSelNoMet, noVeto, mass, njets, region+"mefs", lumi, useJson, applyTnPSF, false, doPUw); //pair<float, float> wjMC_ee = getYield(main_dir+wj_dir+"/wjets", wwSelNoMet, noVeto, mass, njets, region+"eefs", lumi, useJson, applyTnPSF, false, doPUw); bool doLatex = false; pair<float, float> wjdatamm = fakeBgEstimation(main_dir+wj_dir,wwSelNoMet, noVeto, mass, njets, region+"=mmfs=", lumi, useJson, applyTnPSF,doPUw); pair<float, float> wjdatame = fakeBgEstimation(main_dir+wj_dir,wwSelNoMet, noVeto, mass, njets, region+"=mefs=", lumi, useJson, applyTnPSF,doPUw); pair<float, float> wjdataem = fakeBgEstimation(main_dir+wj_dir,wwSelNoMet, noVeto, mass, njets, region+"=emfs=", lumi, useJson, applyTnPSF,doPUw); pair<float, float> wjdataee = fakeBgEstimation(main_dir+wj_dir,wwSelNoMet, noVeto, mass, njets, region+"=eefs=", lumi, useJson, applyTnPSF,doPUw); if (!doLatex) { cout << njets << "-jet bin" << endl; cout << Form("mm: %5.1f +/- %5.1f - me: %5.1f +/- %5.1f - em: %5.1f +/- %5.1f - ee: %5.1f +/- %5.1f", wjdatamm.first,wjdatamm.second, wjdatame.first,wjdatame.second, wjdataem.first,wjdataem.second, wjdataee.first,wjdataee.second) << endl; cout << Form("tot Data: %5.1f +/- %5.1f",wjdatamm.first+wjdatame.first+wjdataem.first+wjdataee.first, sqrt(pow(wjdatamm.second,2)+pow(wjdatame.second,2)+pow(wjdataem.second,2)+pow(wjdataee.second,2))) << endl; cout << Form("MC: %5.1f +/- %5.1f", wjMC.first, wjMC.second) << endl; }else { cout << Form(" %i & %5.1f $\\pm$ %5.1f & %5.1f $\\pm$ %5.1f & %5.1f $\\pm$ %5.1f & %5.1f $\\pm$ %5.1f & %5.1f $\\pm$ %5.1f \\\\", njets, wjdatamm.first,wjdatamm.second, wjdatame.first,wjdatame.second, wjdataem.first,wjdataem.second, wjdataee.first,wjdataee.second, wjdatamm.first+wjdatame.first+wjdataem.first+wjdataee.first,sqrt(pow(wjdatamm.second,2)+pow(wjdatame.second,2)+pow(wjdataem.second,2)+pow(wjdataee.second,2))) << endl; } } }
void extract(TString trigger="HLT_HIDmesonHITrackingGlobal_Dpt40_v1",double nbins=2,double minpt=2,double maxpt=2) { TH1D* getYield(TTree* nt, TTree* ntMC, TString triggerpass, TString triggername, TString prescale, TString variable, TString varname, TString varlatex, Int_t BIN_NUM, Double_t BIN_MIN, Double_t BIN_MAX, TString addcut=""); void plotTurnOn(TH1D* hnominator, TH1D* hdenominator, TString triggerlegend, TString triggername, TString varname, TString varlatex, Int_t BIN_NUM, Double_t BIN_MIN, Double_t BIN_MAX); TFile* infile = new TFile(infname); TTree* root = (TTree*)infile->Get("ntDkpi"); root->AddFriend("ntHlt"); TFile* infileMC = new TFile(infnameMC); TTree* rootMC = (TTree*)infileMC->Get("ntDkpi"); rootMC->AddFriend("ntHlt"); rootMC->AddFriend("ntGen"); if(!isPbPb) { TH1D* hpp_pt = getYield(root,rootMC,"","","","Dpt","pt","p_{T} (GeV/c)",nbins,minpt,maxpt); TH1D* hpp_pt_Hlt = getYield(root,rootMC,Form("&&%s",trigger.Data()),Form("_%s",trigger.Data()),"","Dpt","pt","p_{T} (GeV/c)",nbins,minpt,maxpt); plotTurnOn(hpp_pt_Hlt,hpp_pt,trigger,Form("_%s",trigger.Data()),"pt","p_{T} (GeV/c)",nbins,minpt,maxpt); } }
void makeSSTable(float lumi) { bool useJson = true; bool applyTnPSF = true; bool doPUw = true; int mass = 0; TString region = "=dphireg=dphijet=dymvacut=ptll45="; //int jetbins[] = {0}; int jetbins[] = {0,1,2}; int njetbins = sizeof(jetbins)/sizeof(int); for (int j=0;j<njetbins;++j) { int njets = jetbins[j]; unsigned int wwSel_noq = wwSelNoMet&~ChargeMatch; pair<float, float> ssData = getYield(main_dir+wj_dir+"data", wwSel_noq, ChargeMatch, mass, njets, region, 0., useJson, false, false, false); cout << "SS data: " << ssData.first << " +/- " << ssData.second << endl; pair<float, float> ssFake = fakeBgEstimation(main_dir+wj_dir, wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, true, true); cout << "SS fake: " << ssFake.first << " +/- " << ssFake.second << endl; pair<float, float> ssWw = getYield(main_dir+wj_dir+"qqww", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); ssWw = make_pair<float, float>(WWBkgScaleFactorCutBased(115,njets)*ssWw.first,WWBkgScaleFactorCutBased(115,njets)*ssWw.second); cout << "SS ww: " << ssWw.first << " +/- " << ssWw.second << endl; pair<float, float> ssTtbar = getYield(main_dir+wj_dir+"ttbar_powheg", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); ssTtbar = make_pair<float, float>(TopBkgScaleFactor(njets)*ssTtbar.first,TopBkgScaleFactor(njets)*ssTtbar.second); cout << "SS ttbar: " << ssTtbar.first << " +/- " << ssTtbar.second << endl; pair<float, float> ssWgamma = getYield(main_dir+wj_dir+"wgamma", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); cout << "SS wgamma: " << ssWgamma.first << " +/- " << ssWgamma.second << endl; pair<float, float> ssWglll = getYield(main_dir+wj_dir+"wglll", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); ssWglll = make_pair<float, float>(ssWglll.first,ssWglll.second); cout << "SS wglll: " << ssWglll.first << " +/- " << ssWglll.second << endl; pair<float, float> ssWz = getYield(main_dir+wj_dir+"wz", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); cout << "SS wz: " << ssWz.first << " +/- " << ssWz.second << endl; pair<float, float> ssZz = getYield(main_dir+wj_dir+"zz", wwSel_noq, ChargeMatch, mass, njets, region, lumi, useJson, applyTnPSF, false, doPUw); cout << "SS zz: " << ssZz.first << " +/- " << ssZz.second << endl; cout << "total expected: " << ssFake.first/*-spill.first*/+ssWw.first+ssTtbar.first+ssWgamma.first+ssWglll.first+ssWz.first+ssZz.first << " +/- " << sqrt(pow(ssFake.second,2)/*+pow(spill.second,2)*/+pow(ssWw.second,2)+pow(ssTtbar.second,2)+pow(ssWgamma.second,2)+pow(ssWglll.second,2)+pow(ssWz.second,2)+pow(ssZz.second,2)) << endl; } }
pair<float, float> fakeBgEstimation(TString dir, unsigned int cut, unsigned int veto, int mass, unsigned int njets=0, TString region="dphijet,minmet40", float lumi=0., bool useJson=false, bool applyEff=true, bool doPUw=false) { bool debug = 0; unsigned int cut_nolep = cut&~Lep1FullSelection; cut_nolep = cut_nolep&~Lep2FullSelection; pair<float, float> dataFake = getYield(dir+"data.root", cut_nolep, veto, mass, njets, region, 0, useJson, false, true, false); //correct for spillage... pair<float, float> spill=getSpillage(dir, cut_nolep, veto, mass, njets, region, lumi, applyEff, doPUw); float fakeYield = max(float(0.),dataFake.first-spill.first); float fakeError = sqrt(pow(dataFake.second,2)+pow(spill.second,2)); if (debug) { cout << "total estimate, bare data, spill: " << fakeYield << "+/-" << fakeError << " " << dataFake.first << "+/-" << dataFake.second << " " << spill.first << "+/-" << spill.second<< endl; } return make_pair<float, float>(fakeYield,fakeError); }
bool CvTradeRoute::checkValid(PlayerTypes ePlayer) const { CvPlayer& kPlayer = GET_PLAYER(ePlayer); if (!kPlayer.canLoadYield(getSourceCity().eOwner)) { return false; } if (!kPlayer.canLoadYield(getDestinationCity().eOwner)) { return false; } if (getDestinationCity().iID == EUROPE_CITY_ID) { if (!kPlayer.isYieldEuropeTradable(getYield())) { return false; } } return true; }
void makeDYTableFast(float lumi) { bool useJson = true; bool applyEff = true; bool doFake = false; bool doPUw = true; TString dyregion = "=leppts=ptll45=mtcut=dphicut=masscut=zvetoall=dpjallfs=mt80="; //int jetbins[] = {0}; //int jetbins[] = {0,1}; int jetbins[] = {0,1,2}; int njetbins = sizeof(jetbins)/sizeof(int); //int masses[] = {0}; //int masses[] = {140,160}; int masses[] = {0,120,140,160,180,200}; //int masses[] = {0,115,120,125,130,140,145,150,160,170,180,190,200,250,300}; int nmasses = sizeof(masses)/sizeof(int); vector<float> vsf0j; vector<float> vk0j; vector<float> vsf1j; vector<float> vk1j; vector<float> vsf2j; vector<float> vk2j; for (int j=0;j<njetbins;++j) { int njets = jetbins[j]; cout << "---------------------------------------------------------------- " << njets << "-jet bin --------------------------------------------------------------" << endl; cout << Form("| %7s | %-15s | %-15s | %-15s | %-15s | %-15s | %-15s | %-15s |","mass","MC - MM","Data - MM","MC - EE","Data - EE","MM/EE","Data - LL","Scale Factor") << endl; //compute k float zmmNoMet = getYield(main_dir+dy_dir+"data", wwSelNoZVNoMet, noVeto, 0, njets, "=zregion=mmfs=", 0., useJson, false, doFake, false).first;//FIXME: should account for pt if needed float zeeNoMet = getYield(main_dir+dy_dir+"data", wwSelNoZVNoMet, noVeto, 0, njets, "=zregion=eefs=", 0., useJson, false, doFake, false).first; float kee = sqrt(zeeNoMet/zmmNoMet);//the error is negligible //cout << "kee: " << kee << endl; for (int jj=0;jj<nmasses;++jj) { float sf = 1.0; float sf_err = 1.0; int mass = masses[jj]; if (njets==2 && doMVA) continue; doVBF=0; if (njets==2) { doVBF=1; dyregion.ReplaceAll("mt80","mt30"); if (mass>100) { dyregion.ReplaceAll("looseVBF=",""); } else { dyregion+="=looseVBF="; } } pair<float, float> dymmMC = getYield(main_dir+dy_dir+"dyll", wwSelNoZVNoMet, noVeto, mass, njets, "=mmfs=dymvacut="+dyregion, lumi, false, applyEff, doFake, doPUw); pair<float, float> dyeeMC = getYield(main_dir+dy_dir+"dyll", wwSelNoZVNoMet, noVeto, mass, njets, "=eefs=dymvacut="+dyregion, lumi, false, applyEff, doFake, doPUw); pair<float, float> dymmPred = dyBkgEstimation(wwSelNoZVNoMet, noVeto, mass, njets, dyregion, lumi, kee, "mm", useJson, applyEff, doFake, doPUw); pair<float, float> dyeePred = dyBkgEstimation(wwSelNoZVNoMet, noVeto, mass, njets, dyregion, lumi, kee, "ee", useJson, applyEff, doFake, doPUw); if ((dymmMC.first+dyeeMC.first)>0. && (dymmPred.first+dyeePred.first)>0. && dymmPred.second>0. && dyeePred.second>0.) { sf = (dymmPred.first+dyeePred.first)/(dymmMC.first+dyeeMC.first); //mc uncertainty already included in the cards sf_err = sqrt(pow(dymmPred.second,2)+pow(dyeePred.second,2))/(dymmMC.first+dyeeMC.first); } cout << Form("| %3i GeV | %5.2f +/- %-5.2f | %5.1f +/- %-5.1f | %5.2f +/- %-5.2f | %5.1f +/- %-5.1f | %5.2f +/- %-5.2f | %5.1f +/- %-5.1f |%5.2f +/- %-5.2f |", mass,dymmMC.first,dymmMC.second,dymmPred.first,dymmPred.second,dyeeMC.first,dyeeMC.second,dyeePred.first,dyeePred.second, dymmPred.first/dyeePred.first,ratioPoissErr(dymmPred.first, dymmPred.second, dyeePred.first, dyeePred.second), dymmPred.first+dyeePred.first,sqrt(pow(dymmPred.second,2)+pow(dyeePred.second,2)+pow(0.4*dymmPred.first+0.4*dyeePred.first,2)),sf,sf_err) << endl; if (njets==0) { vsf0j.push_back(sf); vk0j.push_back(1.+sf_err/sf); } else if (njets==1) { vsf1j.push_back(sf); vk1j.push_back(1.+sf_err/sf); } else { vsf2j.push_back(sf); vk2j.push_back(1.+sf_err/sf); } } cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl; } /* if (nmasses==13) { ofstream myfile; TString fname = "DYBkgScaleFactors.h"; myfile.open(fname); ostream &out = myfile; out << Form("Double_t DYBkgScaleFactor(Int_t mH, Int_t jetBin) {\n"); out << Form(" Int_t mHiggs[12] = {115,120,130,140,150,160,170,180,190,200,250,300};\n"); out << Form(" Double_t DYBkgScaleFactorWWPreselection[3] = { %7.5f,%7.5f,%7.5f };\n",vsf0j[0],vsf1j[0],vsf2j[0]); out << Form(" Double_t DYBkgScaleFactorHiggsSelection[3][12] = { \n"); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f },\n", vsf0j[1],vsf0j[2],vsf0j[3],vsf0j[4],vsf0j[5],vsf0j[6],vsf0j[7],vsf0j[8],vsf0j[9],vsf0j[10],vsf0j[11],vsf0j[12]); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f },\n", vsf1j[1],vsf1j[2],vsf1j[3],vsf1j[4],vsf1j[5],vsf1j[6],vsf1j[7],vsf1j[8],vsf1j[9],vsf1j[10],vsf1j[11],vsf1j[12]); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f } };\n", vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0],vsf2j[0]); out << Form(" if(mH == 0) return DYBkgScaleFactorWWPreselection[jetBin];\n"); out << Form(" Int_t massIndex = -1;\n"); out << Form(" for (UInt_t m=0; m < 12 ; ++m) {\n"); out << Form(" if (mH == mHiggs[m]) massIndex = m;\n"); out << Form(" }\n"); out << Form(" if (massIndex >= 0) {\n"); out << Form(" return DYBkgScaleFactorHiggsSelection[jetBin][massIndex];\n"); out << Form(" } else {\n"); out << Form(" return DYBkgScaleFactorWWPreselection[jetBin];\n"); out << Form(" }\n"); out << Form("}\n"); out << Form("Double_t DYBkgScaleFactorKappa(Int_t mH, Int_t jetBin) {\n"); out << Form(" Int_t mHiggs[12] = {115,120,130,140,150,160,170,180,190,200,250,300};\n"); out << Form(" Double_t DYBkgScaleFactorWWPreselectionKappa[3] = { %7.5f,%7.5f,%7.5f };\n",vk0j[0],vk1j[0],vk2j[0]); out << Form(" Double_t DYBkgScaleFactorHiggsSelectionKappa[3][12] = { \n"); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f },\n", vk0j[1],vk0j[2],vk0j[3],vk0j[4],vk0j[5],vk0j[6],vk0j[7],vk0j[8],vk0j[9],vk0j[10],vk0j[11],vk0j[12]); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f },\n", vk1j[1],vk1j[2],vk1j[3],vk1j[4],vk1j[5],vk1j[6],vk1j[7],vk1j[8],vk1j[9],vk1j[10],vk1j[11],vk1j[12]); out << Form(" { %7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f,%7.5f } };\n", vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0],vk2j[0]); out << Form(" if(mH == 0) return DYBkgScaleFactorWWPreselectionKappa[jetBin];\n"); out << Form(" Int_t massIndex = -1;\n"); out << Form(" for (UInt_t m=0; m < 12 ; ++m) {\n"); out << Form(" if (mH == mHiggs[m]) massIndex = m;\n"); out << Form(" }\n"); out << Form(" if (massIndex >= 0) {\n"); out << Form(" return DYBkgScaleFactorHiggsSelectionKappa[jetBin][massIndex];\n"); out << Form(" } else {\n"); out << Form(" return DYBkgScaleFactorWWPreselectionKappa[jetBin];\n"); out << Form(" }\n"); out << Form("}\n"); } */ }
float getK(TString sample, unsigned int cut, unsigned int veto, int mass, unsigned int njets, float lumiSample, bool useJson=false, bool applyEff=false, bool doFake=false, bool doPUw=false){ float zmmNoMet = getYield(sample, cut, veto, mass, njets, "=zregion=mmfs=", lumiSample, useJson, applyEff, doFake, doPUw).first;//FIXME: should account for pt if needed float zeeNoMet = getYield(sample, cut, veto, mass, njets, "=zregion=eefs=", lumiSample, useJson, applyEff, doFake, doPUw).first; return sqrt(zeeNoMet/zmmNoMet);//the error is negligible }