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();
	}
}
Exemple #4
0
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);
}
Exemple #5
0
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);

}
Exemple #6
0
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);
}
Exemple #7
0
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);
  }
}
Exemple #9
0
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;


  }

}
Exemple #10
0
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;
}
Exemple #12
0
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");
  }
  */

}
Exemple #13
0
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
}