コード例 #1
0
ファイル: StatSample.cpp プロジェクト: hengne/d0wmass
  ///output operator
  ostream& StatSample::print_tex (ostream& os, const string title) const {
    
    bool weightMode = _weight->nevents() > 0 ?  true : false ;

    os << "" << endl;
    os << "% Efficiency table %" << endl;
    os << "" << endl;
    os << "\\begin{table}[p]" << endl;
    os << "\\begin{center}" << endl;
    os << "\\begin{tabular}{lrrr" ; 
    if (weightMode) os << "r" ;
    os << "}" << endl;
    os << "  \\hline  \\hline" << endl;
    os << "  Selection & Events & Relative  & Total  " ;
    if (weightMode) os << "& Total Corrected by Event Weights " ;
    os << "\\\\ \\hline" << endl;
    
    os << tex(eventSelection(0)->name()) << " & " ;
    os <<  nevents(0) << " & & " ;
    if (weightMode) os << " & " ;
    os << "\\\\ " << endl ; 

    for (unsigned int n = 1; n < size() ; n++) {
      
      os << tex(eventSelection(n)->name()) << " & " ;
      os <<  nevents(n) << " & ";

      if (eventSelection(n)->isWeight()) {	
	os << " $\\mathit{ " << eff(n) << " \\pm " 
	   << effErr(n) << " }$ & & " ;
	if (weightMode) os << " & " ;
      } else {	
	os << " $ " << 100.0*eff(n) << " \\pm " 
	   << 100.0*effErr(n) << " ~\\% $ & " ;
	os << " $ " << 100.0*effGlob(n) << " \\pm " 
	   << 100.0*effErrGlob(n) << "~\\% $ " ;
	if (weightMode) 
	  os << " $ " << 100.0*correctedEfficiency(n) << " \\pm " 
	     << 100.0*correctedEffErr(n) << "~\\% $ " ;
      }

      os << " \\\\ " << endl ; 
    }

    os << "  \\hline " << endl;
    os << " \\hline" << endl;
    os << " \\end{tabular}" << endl;
    os << " \\caption{" << title << " Sample " << name() << " }" << endl;
    os << " \\label{Table:" <<  title.c_str() << ":" << name() << "}" << endl;
    os << "\\end{center}" << endl;
    os << "\\end{table}" << endl; 
    os << endl;

    return os ;    
  }
コード例 #2
0
ファイル: eff.C プロジェクト: cmstas/fakeRate
// Method by name
TH1F* eff(const char* name1, const char* name2, const char* name="eff"){

  // Get a list of object and their iterator
  TList* list = gDirectory->GetList() ;
  TIterator* iter = list->MakeIterator();

  // Loop over objects, set the pointers
  TObject* obj;
  TH1F* h1=0;
  TH1F* h2=0;
  TString str1 = Form("%s",name1);
  TString str2 = Form("%s",name2);
  while(obj=iter->Next()) {
    TString objName = obj->GetName();
    if (objName == str1) h1 = (TH1F*) obj;
    if (objName == str2) h2 = (TH1F*) obj;
  }

  // quit if not found
  if (h1 == 0) {
    cout << "Histogram " << name1 << " not found" << endl;
    return 0;
  }
  if (h2 == 0) {
    cout << "Histogram " << name2 << " not found" << endl;
    return 0;
  }

  // Call the method by pointer
  TH1F* temp = eff(h1, h2, name);
  return temp;
}
コード例 #3
0
ファイル: cattrack.c プロジェクト: kanzure/brlcad
/* INGETCURVE - find constants a, b, and c, such that the curve
 * z = cosh(a*(x-c))/a + b
 * passes through (x0, z0) and (x1, z1) and has arclength delta_s
 * Appropriate first guesses for a, b, and c should be given.
 */
HIDDEN int
ingetcurve(fastf_t *pa, fastf_t *pb, fastf_t *pc, fastf_t delta_s, fastf_t *p_zero, fastf_t *p_one)
{
    int status, i, j, k;
    fastf_t adjust;

    status = MAX_REACHED;
    i=0;
    while (i++<MAX_OUT_ITS) {
	for (j=0;j<MAX_ITS;j++) {
	    adjust = eff(*pa, *pc, p_zero[X], p_one[X], delta_s);
	    if ((*pa-adjust)<=0.0) {
		*pa *= 0.5;
	    } else {
		*pa -= adjust;
	    }
	    if (adjust<F_TOL) {
		break;
	    }
	}

	for (k=0;k<MAX_ITS;k++) {
	    adjust = gee(*pa, *pc, p_zero[X], p_one[X], (p_one[Z]-p_zero[Z]));
	    *pc -= adjust;
	    if (adjust<G_TOL) {
		break;
	    }
	}

	if ((j==0)&&(k==0)) {
	    status = SOLVED;
	    break;
	}
    }
    *pb = p_zero[Z] - cosh((*pa)*(p_zero[X]-(*pc)))/(*pa);

    return status;

}
コード例 #4
0
ファイル: gatherAEff.C プロジェクト: KyeongPil-Lee/DYAnalysis
void gatherAEff(const char *inpFile=NULL) {
  std::string line;
  std::vector<std::string> lines;

  if (!inpFile) {
    std::cout << "\ninpFile=NULL\n";
    std::cout << "Creating sample input file\n";
    const char *sampleFName="aeff_sample.inp";
    std::ofstream fout(sampleFName);
    fout << "../root_files/constants/DY_j22_19789pb/acceptance_constants1D.root\n";
    fout << "../root_files/constants/DY_j22_19789pb/event_efficiency_constants1D.root\n";
    fout << "../root_files/constants/DY_j22_19789pb/scale_factors_1D_Full2012_hltEffOld_PU.root\n";
    fout.close();
    std::cout << "check the file <" << sampleFName << ">\n";
    std::cout << "1D/2D in the name does not matter\n";
    return;
  }
  else { // load input
    std::ifstream finput(inpFile);
    if (!finput) {
      std::cout << "failed to open file <" << inpFile << ">\n";
      return;
    }
    getline(finput,line); lines.push_back(line);
    std::cout << "line1=<" << line << ">\n";
    getline(finput,line); lines.push_back(line);
    std::cout << "line2=<" << line << ">\n";
    getline(finput,line); lines.push_back(line);
    std::cout << "line3=<" << line << ">\n";
    finput.close();
  }
  std::cout << dashline;

  std::string fnameAcc,fnameEff,fnameRho;
  int count=0;
  for (unsigned int i=0; i<lines.size(); ++i) {
    line=lines[i];
    AdjustDim(line);
    if (PosOk(line,"acceptance")) { fnameAcc=line; count++; }
    else if (PosOk(line,"efficiency")) { fnameEff=line; count++; }
    else if (PosOk(line,"scale_factors")) { fnameRho=line; count++; }
    else {
      std::cout << "could not identify the file <" << line << ">\n";
      return;
    }
  }
  if (count!=3) { 
    std::cout << "not all files were identified\n";
    return;
  }
  std::cout << "files were identified ok\n";
  std::cout << dashline;

  TMatrixD effM(DYTools::nMassBins,DYTools::nYBinsMax);
  TMatrixD effErrM(effM);
  TMatrixD accM(effM), accErrM(effM);
  TMatrixD rhoM(effM), rhoErrM(effM);

  if (!LoadMatrix(fnameAcc,accM,accErrM,"acceptanceMatrix","acceptanceErrMatrix") ||
      !LoadMatrix(fnameEff,effM,effErrM,"efficiencyArray","efficiencyErrArray") ||
      !LoadMatrix(fnameRho,rhoM,rhoErrM,"scaleFactor","scaleFactorErr") ) {
    std::cout << "failed to load field\n";
    return;
  }

  TString outFName;
  if (DYTools::study2D) {
    outFName="dyee_aeff_2D.root";
    TFile fout(outFName,"recreate");
    accM.Write("acceptance");
    accErrM.Write("acceptanceErr");
    effM.Write("efficiency");
    effErrM.Write("efficiencyErr");
    rhoM.Write("scaleFactor");
    rhoErrM.Write("scaleFactorErr");
    unfolding::writeBinningArrays(fout);

    for (int i=0; i<DYTools::nMassBins; ++i) {
      TString massRange=Form("_%1.0lf_%2.0lf",DYTools::massBinLimits[i],DYTools::massBinLimits[i+1]);
      TString hAccName=TString("hAcc") + massRange;
      Histo_t *hAcc=extractRapidityDependence(hAccName,"",accM,accErrM,i,0);
      TString hEffName=TString("hEff") + massRange;
      Histo_t *hEff=extractRapidityDependence(hEffName,"",effM,effErrM,i,0);
      TString hRhoName=TString("hRho") + massRange;
      Histo_t *hRho=extractRapidityDependence(hRhoName,"",rhoM,rhoErrM,i,0);
      if (!hAcc || !hEff || !hRho) {
	std::cout << "got unexpected null histo\n";
	break;
      }

      hAcc->Write();
      hEff->Write();
      hRho->Write();
    }
    fout.Close();
  }
  else { // 1D case
    outFName="dyee_aeff_1D.root";
    std::cout << "accM: rows " << accM.GetNrows() << ", cols " << accM.GetNcols() << "\n";
    TVectorD eff(DYTools::nMassBins), effErr(eff);
    TVectorD acc(eff), accErr(eff);
    TVectorD rho(eff), rhoErr(eff);

    GetMassProfile1D(accM,accErrM, acc,accErr);
    GetMassProfile1D(effM,effErrM, eff,effErr);
    GetMassProfile1D(rhoM,rhoErrM, rho,rhoErr);
    
    Histo_t *hAcc=extractMassDependence("hAcc","",accM,accErrM,0,0,0);
    Histo_t *hEff=extractMassDependence("hEff","",effM,effErrM,0,0,0);
    Histo_t *hRho=extractMassDependence("hRho","",rhoM,rhoErrM,0,0,0);

    if (!hAcc || !hEff || !hRho) {
      std::cout << "got unexpected null histo\n";
    }
    else {
      TFile fout(outFName,"recreate");
      acc.Write("acceptance");
      accErr.Write("acceptanceErr");
      eff.Write("efficiency");
      effErr.Write("efficiencyErr");
      rho.Write("scaleFactor");
      rhoErr.Write("scaleFactorErr");
      unfolding::writeBinningArrays(fout);

      hAcc->Write();
      hEff->Write();
      hRho->Write();
      fout.Close();
    }
  }
  std::cout << "file <" << outFName << "> created\n";

  return;
}
コード例 #5
0
ファイル: SSTop.C プロジェクト: fgolf/pac
void PrintSystematics(const std::string& filename, const unsigned int sr_num, const float scale_den = 1.0)
{
    const std::string sr = GetSRLabel(static_cast<ss::SignalRegion::value_type>(sr_num)); 

    // acceptance and systematic plots
    rt::TH1Container hc(filename);

    const float den = rt::Integral(hc[sr+"nGenerated"])*(scale_den);
    value_t num     = IntegralAndError(hc[sr+"nPassing"]);
    value_t eff(num.value/den, num.value/den * (rt::Integral(hc[sr+"effErrStat"])/num.value));
/*     eff.error       = eff.value * (rt::Integral(hc[sr+"effErrStat"])/num.value); */
/*     eff.error       = sqrt(eff.value*(1.0 - eff.value)/den); */
    value_t eff_per = eff;
    eff_per.value   *= 100;
    eff_per.error   *= 100;

    // systematics (percentage) 
    const float jer     = GetSyst(rt::Integral(hc[sr+"nJER"      ]), num.value);
    const float jes     = GetSyst(rt::Integral(hc[sr+"nJESUP"    ]), rt::Integral(hc[sr+"nJESDN"    ]), num.value);
    const float jes_up  = GetSyst(rt::Integral(hc[sr+"nJESUP"    ]), num.value);
    const float jes_dn  = GetSyst(rt::Integral(hc[sr+"nJESDN"    ]), num.value);
    const float beff    = GetSyst(rt::Integral(hc[sr+"nBTAUP"    ]), rt::Integral(hc[sr+"nBTADN"    ]), num.value);
    const float beff_up = GetSyst(rt::Integral(hc[sr+"nBTAUP"    ]), num.value);
    const float beff_dn = GetSyst(rt::Integral(hc[sr+"nBTADN"    ]), num.value);
    const float met     = GetSyst(rt::Integral(hc[sr+"nMETUP"    ]), rt::Integral(hc[sr+"nMETDN"    ]), num.value);
    const float met_up  = GetSyst(rt::Integral(hc[sr+"nMETUP"    ]), num.value);
    const float met_dn  = GetSyst(rt::Integral(hc[sr+"nMETDN"    ]), num.value);
    const float lep     = GetSyst(rt::Integral(hc[sr+"nLepEffUP" ]), rt::Integral(hc[sr+"nLepEffDN" ]), num.value);
    const float trig    = GetSyst(rt::Integral(hc[sr+"nTrigEffUP"]), rt::Integral(hc[sr+"nTrigEffDN"]), num.value);
    const float lumi    = 4.4;
    const float pdf     = 2.0;
    const float stat    = eff.error;
    const float total   = sqrt(pow(jes,2) + pow(jer,2) + pow(beff,2) + pow(met,2) + pow(lep,2) + pow(trig,2) + pow(lumi,2) + pow(pdf,2) + pow(stat,2));

    CTable t;
    t.useTitle();
    t.setTitle(Form("TTBar Acceptance SR %d", sr_num));
    t.setTable() (                    "value"  , "rel unc (1 + dx)"  )
        ("# generated"    , int(den)           , "NA"               )
        ("# passing"      , pm(num, "1.0f")    , "NA"               )
        ("acceptance"     , pm(eff, "1.5f")    , "NA"               )
        ("acceptance"     , pm(eff    , "1.2e"), "NA"               )
        ("acceptance (%)" , pm(eff_per, "1.5f"), "NA"               )
        ("JES        (%)" , jes                , 1.0 + 0.01*jes     )
        ("JES+       (%)" , jes_up             , 1.0 + 0.01*jes_up  )
        ("JES-       (%)" , jes_dn             , 1.0 + 0.01*jes_dn  )
        ("JER        (%)" , jer                , 1.0 + 0.01*jer     )
        ("Btag       (%)" , beff               , 1.0 + 0.01*beff    )
        ("Btag+      (%)" , beff_up            , 1.0 + 0.01*beff_up )
        ("Btag-      (%)" , beff_dn            , 1.0 + 0.01*beff_dn )
        ("MET        (%)" , met                , 1.0 + 0.01*met     )
        ("MET+       (%)" , met_up             , 1.0 + 0.01*met_up  )
        ("MET-       (%)" , met_dn             , 1.0 + 0.01*met_dn  )
        ("Trig       (%)" , trig               , 1.0 + 0.01*trig    )
        ("Lep        (%)" , lep                , 1.0 + 0.01*lep     )
        ("Lumi       (%)" , lumi               , 1.0 + 0.01*lumi    )
        ("Pdf        (%)" , pdf                , 1.0 + 0.01*pdf     )
        ("Stat       (%)" , Form("%1.2e", stat), Form("%1.2e", stat))
        ("Total      (%)" , total              , 1.0 + 0.01*total   )
        ;
    t.print();
    cout << endl;
}
コード例 #6
0
ファイル: StatSample.cpp プロジェクト: hengne/d0wmass
  ostream& StatSample::HtmlTable(ostream& os) const {
    
    bool weightMode = _weight->nevents() > 0 ?  true : false ;

    os << "<TABLE BORDERCOLORDARK=\"996633\"  BORDERCOLOR=\"CC9966\"    BORDERCOLORLIGHT=\"FFCC99\"   border=3 cellPadding=5 width=\"99%\">" << endl ;
    os << "<TBODY align=right>" << endl ;
    
    os << "<TR>" << endl ;
    os << "<TH align=left>" << endl ;
    os << "SELECTION"   ;
    os << " </TH>" << endl ;
    if (weightMode) 
      os << "<TH align=center colspan=4>" << endl ; 
    else 
      os << "<TH align=center colspan=3>" << endl ; 
    os <<  name() << endl ;
    os << "</TH>" << endl ; 
    os << "</TR>" << endl ;
      
    bool color = false ;
    
    for (unsigned int n = 0; n < size() ; n++) {
      
      if (color) {
	os << "<TR BGCOLOR=#bfefff>" << endl ; 
	color = !color ;
      } else { 
	os << "<TR>" << endl ; 
	color = !color ;
      }      
     
      os << "<TD align=left>" << endl ; 
      os <<  eventSelection(n)->name() << endl ;
      os << "</TD>" << endl ; 

      os << "<TD TITLE=\"Number of events\">" << endl ; 
      os <<  nevents(n) << endl ;
      if (n==0) {
	os << "<TD>&#160;</TD> <TD>&#160;</TD>" ;
	if (weightMode) os << "<TD>&#160;</TD> " ;
	os << endl ; 
	continue ;
      }
	
      if (eventSelection(n)->isWeight()) {
	  if (eventSelection(n)->name() == eventWeight()->name()) 
	    os << "</TD> <TD TITLE=\"Global event weight\">" << endl ; 
	  else 
	    os << "</TD> <TD TITLE=\"Average weight\">" << endl ; 
	  os << eff(n) << "&#177;" << effErr(n)<< endl ;
	  os << "</TD> <TD> &#160;</TD>";
	  if (weightMode) os << "<TD> &#160;</TD>";	  
	  os << endl ;
	  continue ;
      } 
      
      os << "</TD><TD TITLE=\"Selection efficiency\">"<< endl ;
      os << 100.0*eff(n) << "&#177;" << 100.0*effErr(n) << "%" << endl ;
      os << "</TD><TD TITLE=\"Global efficiency\">"<< endl ;
      os << 100.0*effGlob(n) << "&#177;" << 100.0*effErrGlob(n) << "%" 
	 << endl ;
      os << "</TD>" << endl ;       
      if (weightMode) {
	os << "</TD><TD TITLE=\"Global efficiency corrected by the event weight\">"<< endl ;
	os << 100.0*correctedEfficiency(n) << "&#177;" << 100.0*correctedEffErr(n) << "%" 
	   << endl ;
	os << "</TD>" << endl ;       	
      }
      os << "</TR>" << endl ; 
    }
    
    os << "</TBODY></TABLE>" << endl ;

    return os ;
  }
コード例 #7
0
ファイル: doPseudoFits.C プロジェクト: kfiekas/MitEwk13TeV
void doPseudoFits(const TString infilename,      // input file
                  const TString binname,         // name
                  const TString binfile,         // file with bin info
                  const Int_t   sigModPass,      // signal extraction method for PASS sample
                  const Int_t   bkgModPass,      // background model for PASS sample
                  const Int_t   sigModFail,      // signal extraction method for FAIL sample
                  const Int_t   bkgModFail,      // background model for FAIL sample
                  const TString outputDir,       // output directory
                  const Int_t   charge,          // 0 (no charge requirement), -1, +1
                  const TString mcfilename="")   // ROOT file containing MC events to generate templates from
{
    gBenchmark->Start("plotEff");


    //--------------------------------------------------------------------------------------------------------------
    // Settings
    //==============================================================================================================

    // signal extraction mass region
    const Double_t massLo    = 60;
    const Double_t massHi    = 120;

    // fit mass region
    const Double_t fitMassLo = massLo;
    const Double_t fitMassHi = massHi;

    gSystem->mkdir(outputDir,kTRUE);

    //
    // parse pseudodata file
    //
    TH1D* histPass = new TH1D("histPass","",Int_t(fitMassHi-fitMassLo)/BIN_SIZE_PASS,fitMassLo,fitMassHi);
    TH1D* histFail = new TH1D("histFail","",Int_t(fitMassHi-fitMassLo)/BIN_SIZE_FAIL,fitMassLo,fitMassHi);

    TString readInFile = infilename+"/"+binname;

    cout << readInFile << endl;

    ifstream ifs;
    ifs.open(readInFile.Data());
    string line;
    while(getline(ifs,line)) {
        if(line[0]=='#') continue;
        if(line[0]=='%') continue;

        Double_t mass;
        Int_t state;
        stringstream ss(line);
        ss >> mass >> state;

        if (state == 1) histPass->Fill(mass);
        else if (state == 2) histFail->Fill(mass);
    }
    ifs.close();

    cout << "histPass has " << histPass->GetEntries() << endl;
    cout << "histFail has " << histFail->GetEntries() << endl;
    cout << "total we have " << histPass->GetEntries()+histFail->GetEntries() << endl;

    //
    // get binning info
    //
    TFile *f = new TFile(binfile);
    TTree *intree = (TTree*)f->Get("Bin");
    BinInfo bin;
    intree->SetBranchAddress("Bin",&bin);
    intree->GetEntry(0);

    cout << "we should have " << bin.nEvents << endl;

    cout << bin.ptLo << " " << bin.ptHi << " " << bin.etaLo << " " << bin.etaHi << " " << bin.phiLo << " " << bin.phiHi << " " << bin.npvLo << " " << bin.npvHi << " " << bin.absEta << endl;

    //
    // Generate histogram templates from MC if necessary
    //
    if(sigModPass==2 || sigModFail==2) {
        generateHistTemplates(mcfilename, bin.ptLo, bin.ptHi, bin.etaLo, bin.etaHi, bin.phiLo, bin.phiHi, bin.npvLo, bin.npvHi, bin.absEta, 0, bin.iBin);
    }

    RooRealVar m("m","mass",fitMassLo,fitMassHi);
    m.setBins(10000);

    Int_t nflpass=0, nflfail=0;

    TFile *histfile = 0;
    if(sigModPass==2 || sigModFail==2) {
        histfile = new TFile("histTemplates.root");
        assert(histfile);
    }


    RooCategory sample("sample","");
    sample.defineType("Pass",1);
    sample.defineType("Fail",2);

    RooAbsData *dataPass=0;
    RooAbsData *dataFail=0;
    RooAbsData *dataCombined=0;

    dataPass = new RooDataHist("dataPass","dataPass",RooArgSet(m),histPass);
    dataFail = new RooDataHist("dataFail","dataFail",RooArgSet(m),histFail);

    dataCombined = new RooDataHist("dataCombined","dataCombined",RooArgList(m),
                                   RooFit::Index(sample),
                                   RooFit::Import("Pass",*((RooDataHist*)dataPass)),
                                   RooFit::Import("Fail",*((RooDataHist*)dataFail)));

    // Define signal and background models
    CSignalModel     *sigPass = 0;
    CBackgroundModel *bkgPass = 0;
    CSignalModel     *sigFail = 0;
    CBackgroundModel *bkgFail = 0;

    char hname[50];
    sprintf(hname,"pass_%i",bin.iBin);
    TH1D *h = (TH1D*)histfile->Get(hname);
    assert(h);
    sigPass = new CMCTemplateConvGaussian(m,h,kTRUE);
    //((CMCTemplateConvGaussian*)sigPass)->mean->setVal(-0.1);
    //((CMCTemplateConvGaussian*)sigPass)->sigma->setVal(0.015);
    //((CMCTemplateConvGaussian*)sigPass)->sigma->setMax(0.2);
    nflpass += 2;
    if (bkgModPass == 1) {
        bkgPass = new CExponential(m,kTRUE);
        nflpass += 1;
    }
    else if (bkgModPass == 2) {
        bkgPass = new CErfExpo(m,kTRUE);
        nflfail += 3;
        //((CErfExpo*)bkgPass)->alfa->setVal(64.);
        //((CErfExpo*)bkgPass)->alfa->setMax(80.);
        //((CErfExpo*)bkgPass)->beta->setVal(1.0);
        //((CErfExpo*)bkgPass)->beta->setMax(3.0);
        //((CErfExpo*)bkgPass)->gamma->setVal(1.0);
        //((CErfExpo*)bkgPass)->gamma->setMax(3.0);
    }
    else {
        cout << "trying to use bkg model that's not implemented!!" << endl;
    }
    char hname2[50];
    sprintf(hname2,"fail_%i",bin.iBin);
    TH1D *h2 = (TH1D*)histfile->Get(hname2);
    assert(h2);
    sigFail = new CMCTemplateConvGaussian(m,h2,kFALSE);
    //((CMCTemplateConvGaussian*)sigFail)->mean->setVal(-0.28);
    //((CMCTemplateConvGaussian*)sigFail)->sigma->setVal(0.2);
    //((CMCTemplateConvGaussian*)sigFail)->sigma->setMax(2.0);
    nflfail += 2;

    if (bkgModFail == 1) {
        bkgFail = new CExponential(m,kFALSE);
        nflfail += 1;
    }
    else if (bkgModFail == 2) {
        bkgFail = new CErfExpo(m,kFALSE);
        nflfail += 3;
        //((CErfExpo*)bkgFail)->alfa->setVal(60.);
        //((CErfExpo*)bkgFail)->alfa->setMax(80.);
        //((CErfExpo*)bkgFail)->beta->setVal(0.07);
        //((CErfExpo*)bkgFail)->beta->setMax(0.5);
        //((CErfExpo*)bkgFail)->gamma->setVal(0.02);
        //((CErfExpo*)bkgFail)->gamma->setMax(1.0);
    }
    else {
        cout << "trying to use bkg model that's not implemented!!" << endl;
    }

    // Define free parameters
    Double_t NsigMax     = histPass->Integral()+histFail->Integral();
    cout << "NsigMax " << NsigMax << endl;
    Double_t NbkgFailMax = histFail->Integral();
    cout << "NbkgFailMax " << NbkgFailMax << endl;
    Double_t NbkgPassMax = histPass->Integral();
    RooRealVar Nsig("Nsig","Signal Yield",0.80*NsigMax,0,NsigMax);
    RooRealVar eff("eff","Efficiency",0.9,0,1.0);
    //cout << "got here" << endl;
    RooRealVar NbkgPass("NbkgPass","Background count in PASS sample",10,0,NbkgPassMax);
    //cout << "chicken" << endl;
    RooRealVar NbkgFail("NbkgFail","Background count in FAIL sample",10,0.01,NbkgFailMax);
    //cout << "frog" << endl;

    RooFormulaVar NsigPass("NsigPass","eff*Nsig",RooArgList(eff,Nsig));
    RooFormulaVar NsigFail("NsigFail","(1.0-eff)*Nsig",RooArgList(eff,Nsig));
    RooAddPdf *modelPass=0, *modelFail=0;
    RooExtendPdf *esignalPass=0, *ebackgroundPass=0, *esignalFail=0, *ebackgroundFail=0;

    if(massLo!=fitMassLo || massHi!=fitMassHi) {
        m.setRange("signalRange",massLo,massHi);

        esignalPass     = new RooExtendPdf("esignalPass","esignalPass",*(sigPass->model),NsigPass,"signalRange");
        ebackgroundPass = new RooExtendPdf("ebackgroundPass","ebackgroundPass",(bkgModPass>0) ? *(bkgPass->model) : *(sigPass->model),NbkgPass,"signalRange");
        modelPass       = new RooAddPdf("modelPass","Model for PASS sample",(bkgModPass>0) ? RooArgList(*esignalPass,*ebackgroundPass) : RooArgList(*esignalPass));

        esignalFail     = new RooExtendPdf("esignalFail","esignalFail",*(sigFail->model),NsigFail,"signalRange");
        ebackgroundFail = new RooExtendPdf("ebackgroundFail","ebackgroundFail",*(bkgFail->model),NbkgFail,"signalRange");
        modelFail       = new RooAddPdf("modelFail","Model for FAIL sample", (bkgModFail>0) ? RooArgList(*esignalFail,*ebackgroundFail) : RooArgList(*esignalFail));

    } else {
        modelPass = new RooAddPdf("modelPass","Model for PASS sample",
                                  RooArgList(*(sigPass->model),*(bkgPass->model)),
                                  RooArgList(NsigPass,NbkgPass));

        modelFail = new RooAddPdf("modelFail","Model for FAIL sample",
                                  RooArgList(*(sigFail->model),*(bkgFail->model)),
                                  RooArgList(NsigFail,NbkgFail));
    }
    cout << "whale?" << endl;
    RooSimultaneous totalPdf("totalPdf","totalPdf",sample);
    totalPdf.addPdf(*modelPass,"Pass");
    totalPdf.addPdf(*modelFail,"Fail");

    RooFitResult *fitResult=0;
    fitResult = totalPdf.fitTo(*dataCombined,
                               RooFit::Extended(),
                               RooFit::Strategy(1),
                               //RooFit::Minos(RooArgSet(eff)),
                               RooFit::Save());

    // Refit w/o MINOS if MINOS errors are strange...
    if((fabs(eff.getErrorLo())<5e-5) || (eff.getErrorHi()<5e-5))
        fitResult = totalPdf.fitTo(*dataCombined, RooFit::Extended(), RooFit::Strategy(1), RooFit::Save());

    cout << eff.getVal() << " " << fabs(eff.getErrorLo()) << " " << eff.getErrorHi() << endl;
    /*
    RooPlot *mframePass = m.frame(Bins(Int_t(fitMassHi-fitMassLo)/BIN_SIZE_PASS));
    dataPass->plotOn(mframePass,MarkerStyle(kFullCircle),MarkerSize(0.8),DrawOption("ZP"));
    modelPass->plotOn(mframePass);
    modelPass->plotOn(mframePass,Components("backgroundPass"),LineStyle(kDashed),LineColor(kRed));

    RooPlot *mframeFail = m.frame(Bins(Int_t(fitMassHi-fitMassLo)/BIN_SIZE_FAIL));
    dataFail->plotOn(mframeFail,MarkerStyle(kFullCircle),MarkerSize(0.8),DrawOption("ZP"));
    modelFail->plotOn(mframeFail);
    modelFail->plotOn(mframeFail,Components("backgroundFail"),LineStyle(kDashed),LineColor(kRed));

    TCanvas *cpass = MakeCanvas("cpass","cpass",720,540);
    cpass->SetWindowPosition(cpass->GetWindowTopX()+cpass->GetBorderSize()+800,0);
    TCanvas *cfail = MakeCanvas("cfail","cfail",720,540);
    cfail->SetWindowPosition(cfail->GetWindowTopX()+cfail->GetBorderSize()+800,cpass->GetWindowTopX()+cfail->GetBorderSize()+540);

    char ylabel[50];

    //
    // Plot passing probes
    //
    sprintf(ylabel,"Events / %.1f GeV/c^{2}",(Double_t)BIN_SIZE_PASS);
    CPlot plotPass("pass",mframePass,"Passing probes","tag-probe mass [GeV/c^{2}]",ylabel);
    plotPass.Draw(cpass,kTRUE,"png");

    //
    // Plot failing probes
    //
    sprintf(ylabel,"Events / %.1f GeV/c^{2}",(Double_t)BIN_SIZE_FAIL);
    CPlot plotFail("fail",mframeFail,"Failing probes","tag-probe mass [GeV/c^{2}]",ylabel);
    plotFail.Draw(cfail,kTRUE,"png");
    */
    //
    // Write fit results
    //

    TObjString* temp=(TObjString*)readInFile.Tokenize("/.")->At(4);

    ofstream txtfile;
    char txtfname[100];
    sprintf(txtfname,"%s/%s.output",outputDir.Data(),temp->GetString().Data());
    txtfile.open(txtfname);
    assert(txtfile.is_open());
    fitResult->printStream(txtfile,RooPrintable::kValue,RooPrintable::kVerbose);
    txtfile.close();

}
コード例 #8
0
//using namespace std;
void btagefficiency(int ii, int jj)
{
    gROOT->ProcessLine(".L tdrstyle.C");
    defaultStyle();
    TFile* f1 = new TFile("/afs/cern.ch/work/y/youngjo/public/For8Tev/v20130208_V00-00-06/vallot_TTbarFullLepMGDecays.root");
	
    TTree* treeMuMu = (TTree*)f1->Get("MuMu/tree");
    TTree* treeElEl = (TTree*)f1->Get("ElEl/tree");
    TTree* treeMuEl = (TTree*)f1->Get("MuEl/tree");
	
    float binspt[] = {20,30,40,50,60,70,80,100,120,160,210,260,320,400,450};
    int nBinpt = sizeof(binspt)/sizeof(float) - 1;
    float binseta[] = {0.,0.4,0.8,1.2,1.6,2.0,2.4};
    int nBineta = sizeof(binseta)/sizeof(float) - 1;

    TCut precut_em = "ZMass > 12 && lep1_relIso03 < 0.15 && lep2_relIso03 < 0.15 && PairSign < 0 && nJet30 >= 4";
    TCut precut = precut_em + "abs(ZMass - 91.2) > 15 && MET > 30"; 
    TCut bcut =  "abs(jets_flavor) == 5";
    TCut ccut =  "abs(jets_flavor) == 4";
    TCut lcut =  "abs(jets_flavor) < 4";

    TCut etacut1 = "abs(jets_eta) <= 0.8";
    TCut etacut2 = "abs(jets_eta) > 0.8 && abs(jets_eta) <=1.6";
    TCut etacut3 = "abs(jets_eta) > 1.6";

    TCut etacutl1 = "abs(jets_eta) <= 0.5";
    TCut etacutl2 = "abs(jets_eta) > 0.5 && abs(jets_eta) <=1.0";
    TCut etacutl3 = "abs(jets_eta) > 1.0 && abs(jets_eta) <=1.5";
    TCut etacutl4 = "abs(jets_eta) > 1.5";


    TCut csvl =  "jets_bDiscriminatorCSV > 0.244";
    TCut csvm =  "jets_bDiscriminatorCSV > 0.679";
    TCut csvt =  "jets_bDiscriminatorCSV > 0.898";


    float binsDR[] = {0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0,3.2,3.5,4};
    int nBinDR = sizeof(binsDR)/sizeof(float) - 1;
    TString DR_ = "TMath::Sqrt( abs(jets_eta[csvd_jetid[2]]-jets_eta[csvd_jetid[3]])*abs(jets_eta[csvd_jetid[2]]-jets_eta[csvd_jetid[3]])+abs(TVector2::Phi_mpi_pi(jets_phi[csvd_jetid[2]]-jets_phi[csvd_jetid[3]]))*abs(TVector2::Phi_mpi_pi(jets_phi[csvd_jetid[2]]-jets_phi[csvd_jetid[3]])) )";  

    float binsCSV[] = {0.0,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0};
    int nBinCSV = sizeof(binsCSV)/sizeof(float) - 1;
    

 if(ii ==4)
 {
    TH1F* dist_b_csvd = dist(treeElEl, treeMuMu, treeMuEl, "jets_bDiscriminatorCSV", nBinCSV, binsCSV, precut, precut_em, bcut, "B flavor","b_csvd",2,"discriminator (CSV)"); 
    TH1F* dist_c_csvd = dist(treeElEl, treeMuMu, treeMuEl, "jets_bDiscriminatorCSV", nBinCSV, binsCSV, precut, precut_em, ccut, "C flavor","c_csvd",4,"discriminator (CSV)");
    TH1F* dist_l_csvd = dist(treeElEl, treeMuMu, treeMuEl, "jets_bDiscriminatorCSV", nBinCSV, binsCSV, precut, precut_em, lcut, "LF flavor","l_csvd",3,"discriminator (CSV)");

    TCanvas * c_b_csvd = new TCanvas("c_b_csvd","c_b_csvd",500,500);
    double ymax = dist_l_csvd->GetMaximum(); 
    if(ymax< dist_c_csvd->GetMaximum()) ymax=dist_c_csvd->GetMaximum();
    if(ymax< dist_b_csvd->GetMaximum()) ymax=dist_b_csvd->GetMaximum();   

    ymax=ymax*1.5;
    dist_l_csvd->SetMaximum(ymax);   
 
    dist_l_csvd->Draw("");
    dist_c_csvd->Draw("same");
    dist_b_csvd->Draw("same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(dist_b_csvd,"b-flavor","L");
    l->AddEntry(dist_c_csvd,"c-flavor","L");
    l->AddEntry(dist_l_csvd,"l-flavor","L");
    SetLegend(l);
    c_b_csvd->Print("compare_b_csvd.png");
    c_b_csvd->Print("compare_b_csvd.eps");
 }
 else if(ii ==3)
 {
    TH1F* eff_b_dr_CSVL = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, bcut, csvl, "b_dr_CSVL","CSVL",2,"#Delta R"); 
    TH1F* eff_c_dr_CSVL = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, ccut, csvl, "c_dr_CSVL","CSVL",4,"#Delta R");
    TH1F* eff_l_dr_CSVL = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, lcut, csvl, "l_dr_CSVL","CSVL",5,"#Delta R");

    TH1F* eff_b_dr_CSVM = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, bcut, csvm, "b_dr_CSVM","CSVM",2,"#Delta R"); 
    TH1F* eff_b_dr_CSVT = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, bcut, csvt, "b_dr_CSVT","CSVT",2,"#Delta R"); 

    TH1F* eff_c_dr_CSVM = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, ccut, csvm, "c_dr_CSVM","CSVM",4,"#Delta R");
    TH1F* eff_c_dr_CSVT = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, ccut, csvt, "c_dr_CSVT","CSVT",4,"#Delta R");

    TH1F* eff_l_dr_CSVM = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, lcut, csvm, "l_dr_CSVM","CSVM",5,"#Delta R");
    TH1F* eff_l_dr_CSVT = eff(treeElEl, treeMuMu, treeMuEl, DR_.Data(), nBinDR, binsDR, precut, precut_em, lcut, csvt, "l_dr_CSVT","CSVT",5,"#Delta R");

    TCanvas * c_b_dr_CSVL = new TCanvas("c_b_dr_CSVL","c_b_dr_CSVL",500,500);
    eff_b_dr_CSVL->Draw("e3");
    eff_c_dr_CSVL->Draw("e3 same");
    eff_l_dr_CSVL->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_dr_CSVL,"b-flavor","F");
    l->AddEntry(eff_c_dr_CSVL,"c-flavor","F");
    l->AddEntry(eff_l_dr_CSVL,"l-flavor","F");
    SetLegend(l);
    c_b_dr_CSVL->Print("compare_b_dr_CSVL.png");
    c_b_dr_CSVL->Print("compare_b_dr_CSVL.eps");


    TCanvas * c_b_dr_CSVM = new TCanvas("c_b_dr_CSVM","c_b_dr_CSVM",500,500);
    eff_b_dr_CSVM->Draw("e3");
    eff_c_dr_CSVM->Draw("e3 same");
    eff_l_dr_CSVM->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_dr_CSVM,"b-flavor","F");
    l->AddEntry(eff_c_dr_CSVM,"c-flavor","F");
    l->AddEntry(eff_l_dr_CSVM,"l-flavor","F");
    SetLegend(l);
    c_b_dr_CSVM->Print("compare_b_dr_CSVM.png");
    c_b_dr_CSVM->Print("compare_b_dr_CSVM.eps");

    TCanvas * c_b_dr_CSVT = new TCanvas("c_b_dr_CSVT","c_b_dr_CSVT",500,500);
    eff_b_dr_CSVT->Draw("e3");
    eff_c_dr_CSVT->Draw("e3 same");
    eff_l_dr_CSVT->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_dr_CSVT,"b-flavor","F");
    l->AddEntry(eff_c_dr_CSVT,"c-flavor","F");
    l->AddEntry(eff_l_dr_CSVT,"l-flavor","F");
    SetLegend(l);
    c_b_dr_CSVT->Print("compare_b_dr_CSVT.png");
    c_b_dr_CSVT->Print("compare_b_dr_CSVT.eps");

 }
 else if(ii ==0)
 {

    TH1F* eff_b_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, bcut, csvl, "b_pt_CSVL","CSVL",2,"p_{T}(GeV/c)"); 
    TH1F* eff_c_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, ccut, csvl, "c_pt_CSVL","CSVL",4,"p_{T}(GeV/c)");
    TH1F* eff_l_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut, csvl, "l_pt_CSVL","CSVL",5,"p_{T}(GeV/c)");

    TH1F* eff_b_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, bcut, csvm, "b_pt_CSVM","CSVM",2,"p_{T}(GeV/c)"); 
    TH1F* eff_b_pt_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, bcut, csvt, "b_pt_CSVT","CSVT",2,"p_{T}(GeV/c)"); 

    TH1F* eff_c_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, ccut, csvm, "c_pt_CSVM","CSVM",4,"p_{T}(GeV/c)");
    TH1F* eff_c_pt_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, ccut, csvt, "c_pt_CSVT","CSVT",4,"p_{T}(GeV/c)");

    TH1F* eff_l_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut, csvm, "l_pt_CSVM","CSVM",5,"p_{T}(GeV/c)");
    TH1F* eff_l_pt_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut, csvt, "l_pt_CSVT","CSVT",5,"p_{T}(GeV/c)");

    TCanvas * c_b_pt_CSVL = new TCanvas("c_b_pt_CSVL","c_b_pt_CSVL",500,500);
    eff_b_pt_CSVL->Draw("e3");
    eff_c_pt_CSVL->Draw("e3 same");
    eff_l_pt_CSVL->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_pt_CSVL,"b-flavor","F");
    l->AddEntry(eff_c_pt_CSVL,"c-flavor","F");
    l->AddEntry(eff_l_pt_CSVL,"l-flavor","F");
    SetLegend(l);
    c_b_pt_CSVL->Print("compare_b_pt_CSVL.png");
    c_b_pt_CSVL->Print("compare_b_pt_CSVL.eps");


    TCanvas * c_b_pt_CSVM = new TCanvas("c_b_pt_CSVM","c_b_pt_CSVM",500,500);
    eff_b_pt_CSVM->Draw("e3");
    eff_c_pt_CSVM->Draw("e3 same");
    eff_l_pt_CSVM->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_pt_CSVM,"b-flavor","F");
    l->AddEntry(eff_c_pt_CSVM,"c-flavor","F");
    l->AddEntry(eff_l_pt_CSVM,"l-flavor","F");
    SetLegend(l);
    c_b_pt_CSVM->Print("compare_b_pt_CSVM.png");
    c_b_pt_CSVM->Print("compare_b_pt_CSVM.eps");

    TCanvas * c_b_pt_CSVT = new TCanvas("c_b_pt_CSVT","c_b_pt_CSVT",500,500);
    eff_b_pt_CSVT->Draw("e3");
    eff_c_pt_CSVT->Draw("e3 same");
    eff_l_pt_CSVT->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_pt_CSVT,"b-flavor","F");
    l->AddEntry(eff_c_pt_CSVT,"c-flavor","F");
    l->AddEntry(eff_l_pt_CSVT,"l-flavor","F");
    SetLegend(l);
    c_b_pt_CSVT->Print("compare_b_pt_CSVT.png");
    c_b_pt_CSVT->Print("compare_b_pt_CSVT.eps");


 }
 else if(ii==2)
 {
    if(jj==0)
    {
        TH1F* eff_l1_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacutl1, csvl, "l1_pt_CSVL","CSVL",2,"p_{T}(GeV/c)"); 
        TH1F* eff_l2_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacutl2, csvl, "l2_pt_CSVL","CSVL",3,"p_{T}(GeV/c)");
        TH1F* eff_l3_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacutl3, csvl, "l3_pt_CSVL","CSVL",4,"p_{T}(GeV/c)");
        TH1F* eff_l4_pt_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacutl4, csvl, "l4_pt_CSVL","CSVL",5,"p_{T}(GeV/c)");
        
        TCanvas * c_l3_pt_CSVL = new TCanvas("c_b_pt_CSVL","c_b_pt_CSVL",500,500);
        eff_l1_pt_CSVL->SetMaximum(0.4);
        eff_l1_pt_CSVL->Draw("e3");
        eff_l2_pt_CSVL->Draw("e3 same");
        eff_l3_pt_CSVL->Draw("e3 same");
        eff_l4_pt_CSVL->Draw("e3 same");
        
        TLegend *l = new TLegend(0.42,0.76,0.89,0.87);
        l->AddEntry(eff_l1_pt_CSVL,"l-flavor  #eta #leq 0.5","F");
        l->AddEntry(eff_l2_pt_CSVL,"l-flavor 0.5 < #eta #leq 1.0","F");
        l->AddEntry(eff_l3_pt_CSVL,"l-flavor 1.0 < #eta #leq 1.5","F");
        l->AddEntry(eff_l4_pt_CSVL,"l-flavor 1.5 < #eta","F");
        SetLegend(l);
        c_l3_pt_CSVL->Print("compare_l4_pt_CSVL.png");
        c_l3_pt_CSVL->Print("compare_l4_pt_CSVL.eps");
    }
    else if(jj==1)
    {
        TH1F* eff_l1_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacut1, csvm, "l1_pt_CSVM","CSVM",2,"p_{T}(GeV/c)"); 
        TH1F* eff_l2_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacut2, csvm, "l2_pt_CSVM","CSVM",4,"p_{T}(GeV/c)");
        TH1F* eff_l3_pt_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_pt", nBinpt, binspt, precut, precut_em, lcut+etacut3, csvm, "l3_pt_CSVM","CSVM",5,"p_{T}(GeV/c)");
        
        TCanvas * c_l3_pt_CSVM = new TCanvas("c_b_pt_CSVM","c_b_pt_CSVM",500,500);
        eff_l1_pt_CSVM->SetMaximum(0.1);
        eff_l1_pt_CSVM->Draw("e3");
        eff_l2_pt_CSVM->Draw("e3 same");
        eff_l3_pt_CSVM->Draw("e3 same");
        
        TLegend *l = new TLegend(0.42,0.76,0.89,0.87);
        l->AddEntry(eff_l1_pt_CSVM,"l-flavor #eta #leq 0.8","F");
        l->AddEntry(eff_l2_pt_CSVM,"l-flavor 0.8 < #eta #leq 1.6","F");
        l->AddEntry(eff_l3_pt_CSVM,"l-flavor 1.6 < #eta","F");
        SetLegend(l);
        c_l3_pt_CSVM->Print("compare_l3_pt_CSVM.png");
        c_l3_pt_CSVM->Print("compare_l3_pt_CSVM.eps");
    }
 }
 else if(ii==1)
 {
    TH1F* eff_b_eta_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, bcut, csvl, "b_eta_CSVL","CSVL",2, "#eta"); 
    TH1F* eff_c_eta_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, ccut, csvl, "c_eta_CSVL","CSVL",4, "#eta");
    TH1F* eff_l_eta_CSVL = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, lcut, csvl, "l_eta_CSVL","CSVL",5, "#eta");

    TH1F* eff_b_eta_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, bcut, csvm, "b_eta_CSVM","CSVM",2, "#eta"); 
    TH1F* eff_b_eta_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, bcut, csvt, "b_eta_CSVT","CSVT",2, "#eta"); 

    TH1F* eff_c_eta_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, ccut, csvm, "c_eta_CSVM","CSVM",4, "#eta");
    TH1F* eff_c_eta_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, ccut, csvt, "c_eta_CSVT","CSVT",4, "#eta");

    TH1F* eff_l_eta_CSVM = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, lcut, csvm, "l_eta_CSVM","CSVM",5, "#eta");
    TH1F* eff_l_eta_CSVT = eff(treeElEl, treeMuMu, treeMuEl, "jets_eta", nBineta, binseta, precut, precut_em, lcut, csvt, "l_eta_CSVT","CSVT",5, "#eta");

    TCanvas * c_b_eta_CSVL = new TCanvas("c_b_eta_CSVL","c_b_eta_CSVL",500,500);
    eff_b_eta_CSVL->Draw("e3");
    eff_c_eta_CSVL->Draw("e3 same");
    eff_l_eta_CSVL->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_eta_CSVL,"b-flavor","F");
    l->AddEntry(eff_c_eta_CSVL,"c-flavor","F");
    l->AddEntry(eff_l_eta_CSVL,"l-flavor","F");
    SetLegend(l);
    c_b_eta_CSVL->Print("compare_b_eta_CSVL.png");
    c_b_eta_CSVL->Print("compare_b_eta_CSVL.eps");


    TCanvas * c_b_eta_CSVM = new TCanvas("c_b_eta_CSVM","c_b_eta_CSVM",500,500);
    eff_b_eta_CSVM->Draw("e3");
    eff_c_eta_CSVM->Draw("e3 same");
    eff_l_eta_CSVM->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_eta_CSVM,"b-flavor","F");
    l->AddEntry(eff_c_eta_CSVM,"c-flavor","F");
    l->AddEntry(eff_l_eta_CSVM,"l-flavor","F");
    SetLegend(l);
    c_b_eta_CSVM->Print("compare_b_eta_CSVM.png");
    c_b_eta_CSVM->Print("compare_b_eta_CSVM.eps");

    TCanvas * c_b_eta_CSVT = new TCanvas("c_b_eta_CSVT","c_b_eta_CSVT",500,500);
    eff_b_eta_CSVT->Draw("e3");
    eff_c_eta_CSVT->Draw("e3 same");
    eff_l_eta_CSVT->Draw("e3 same");

    TLegend *l = new TLegend(0.68,0.76,0.89,0.87);
    l->AddEntry(eff_b_eta_CSVT,"b-flavor","F");
    l->AddEntry(eff_c_eta_CSVT,"c-flavor","F");
    l->AddEntry(eff_l_eta_CSVT,"l-flavor","F");
    SetLegend(l);
    c_b_eta_CSVT->Print("compare_b_eta_CSVT.png");
    c_b_eta_CSVT->Print("compare_b_eta_CSVT.eps");
  }

}
コード例 #9
0
Asset* RenderTechnique::onLoad( AssetManager* manager, XeCore::XeString& name, Params& params, bool keepAlways )
{
	RenderTechnique* t = xnew RenderTechnique();
	for( ParamsElm p = params.FirstPointer(); !p.IsEmpty(); p.Next() )
	{
		if( p().Value.getType() == ParamData::tParams && p().Value.getGroupType() == "pass" )
		{
			Params& pass = p().Value.getParams();
			unsigned int tc( 0 );
			Effect* eff( 0 );
			int w( 0 ), h( 0 );
			bool fh( false ), fv( false ), rtc( true ), dome( false );
			if( pass.Exists( "textures" ) )
				pass[ "textures" ].getValue().Convert( &tc, 'd' );
			if( pass.Exists( "effectAsset" ) )
				eff = manager->get< Effect >( pass[ "effectAsset" ].getValue(), keepAlways );
			if( pass.Exists( "width" ) )
				pass[ "width" ].getValue().Convert( &w, 'i' );
			if( pass.Exists( "height" ) )
				pass[ "height" ].getValue().Convert( &h, 'i' );
			if( pass.Exists( "flipVertical" ) )
				fv = pass[ "flipVertical" ].getValue() == "true";
			if( pass.Exists( "flipHorizontal" ) )
				fh = pass[ "flipHorizontal" ].getValue() == "true";
			if( pass.Exists( "renderToCanvas" ) )
				rtc = pass[ "renderToCanvas" ].getValue() == "true";
			if( pass.Exists( "isDome" ) )
				dome = pass[ "isDome" ].getValue() == "true";
			RenderTechnique::PassElm elm = dome ? t->addPassDome( p().Key, tc, eff, w, h, rtc ) : t->addPass( p().Key, tc, eff, w, h, fh, fv, rtc );
			if( t->getPassCanvas( elm ) )
			{
				if( pass.Exists( "canvasColorFilteringLevel" ) )
				{
					int flevel( 0 );
					pass[ "canvasColorFilteringLevel" ].getValue().Convert( &flevel, 'i' );
					t->getPassCanvas( elm )->filtering( flevel );
				}
				if( pass.Exists( "canvasColorRepeating" ) )
					t->getPassCanvas( elm )->repeating( pass[ "canvasColorRepeating" ].getValue() == "true" );
				if( pass.Exists( "canvasDepthFilteringLevel" ) )
				{
					int flevel( 0 );
					pass[ "canvasDepthFilteringLevel" ].getValue().Convert( &flevel, 'i' );
					t->getPassCanvas( elm )->filteringDepth( flevel );
				}
				if( pass.Exists( "canvasDepthRepeating" ) )
					t->getPassCanvas( elm )->repeatingDepth( pass[ "canvasDepthRepeating" ].getValue() == "true" );
			}
			if( !elm.IsEmpty() && pass.Exists( "textureBinds" ) && pass[ "textureBinds" ].getType() == ParamData::tParams )
			{
				Params& tb = pass[ "textureBinds" ].getParams();
				for( ParamsElm _p = tb.FirstPointer(); !_p.IsEmpty(); _p.Next() )
				{
					if( _p().Value.getType() == ParamData::tValue )
					{
						unsigned int sc( 0 );
						XeCore::XeString* sv = _p().Key.Explode( " ", sc );
						if( sv && sc )
						{
							if( sc == 4 && sv[ 0 ] == "unit" && sv[ 2 ] == "from" )
							{
								int unit( 0 );
								sv[ 1 ].Convert( &unit, 'i' );
								if( sv[ 3 ] == "canvasAssetColorTexture" )
									t->bindPassInputTexture( elm, manager->get< Canvas >( _p().Value.getValue(), keepAlways )->getTexture(), unit );
								else
								if( sv[ 3 ] == "canvasAssetDepthTexture" )
									t->bindPassInputTexture( elm, manager->get< Canvas >( _p().Value.getValue(), keepAlways )->getTextureDepth(), unit );
								else
								if( sv[ 3 ] == "passCanvasColorTexture" )
									t->bindPassInputTexture( elm, t->getPassCanvas( t->getPass( NameID( _p().Value.getValue() ) ) )->getTexture(), unit );
								else
								if( sv[ 3 ] == "passCanvasDepthTexture" )
									t->bindPassInputTexture( elm, t->getPassCanvas( t->getPass( NameID( _p().Value.getValue() ) ) )->getTextureDepth(), unit );
								else
								if( sv[ 3 ] == "textureAsset" )
									t->bindPassInputTexture( elm, manager->get< Texture >( _p().Value.getValue(), keepAlways ), unit );
							}
							delete[] sv;
						}
					}
				}
			}
			if( pass.Exists( "properties" ) && pass[ "properties" ].getType() == ParamData::tParams )
			{
				Material* m = t->getPassMaterial( elm );
				for( ParamsElm _p = pass[ "properties" ].getParams().FirstPointer(); !_p.IsEmpty(); _p.Next() )
				{
					if( _p().Value.getType() != ParamData::tParams )
						continue;
					if( _p().Value.getGroupType() == "float" )
					{
						XeCore::XeHalfVector v;
						_p().Value.getParams()[ "x" ].getValue().Convert( &v.X, 'h' );
						m->getProperties()->setPropertyVec( _p().Key, v, 1 );
					}
					else
					if( _p().Value.getGroupType() == "vec2" )
					{
						XeCore::XeHalfVector v;
						_p().Value.getParams()[ "x" ].getValue().Convert( &v.X, 'h' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v.Y, 'h' );
						m->getProperties()->setPropertyVec( _p().Key, v, 2 );
					}
					else
					if( _p().Value.getGroupType() == "vec3" )
					{
						XeCore::XeHalfVector v;
						_p().Value.getParams()[ "x" ].getValue().Convert( &v.X, 'h' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v.Y, 'h' );
						_p().Value.getParams()[ "z" ].getValue().Convert( &v.Z, 'h' );
						m->getProperties()->setPropertyVec( _p().Key, v, 3 );
					}
					else
					if( _p().Value.getGroupType() == "vec4" )
					{
						XeCore::XeHalfVector v;
						_p().Value.getParams()[ "x" ].getValue().Convert( &v.X, 'h' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v.Y, 'h' );
						_p().Value.getParams()[ "z" ].getValue().Convert( &v.Z, 'h' );
						_p().Value.getParams()[ "w" ].getValue().Convert( &v.W, 'h' );
						m->getProperties()->setPropertyVec( _p().Key, v, 4 );
					}
					else
					if( _p().Value.getGroupType() == "int" )
					{
						XeCore::XeInteger v[ 4 ];
						_p().Value.getParams()[ "x" ].getValue().Convert( &v[ 0 ], 'i' );
						m->getProperties()->setPropertyInt( _p().Key, v, 1 );
					}
					else
					if( _p().Value.getGroupType() == "int2" )
					{
						XeCore::XeInteger v[ 4 ];
						_p().Value.getParams()[ "x" ].getValue().Convert( &v[ 0 ], 'i' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v[ 1 ], 'i' );
						m->getProperties()->setPropertyInt( _p().Key, v, 2 );
					}
					else
					if( _p().Value.getGroupType() == "int3" )
					{
						XeCore::XeInteger v[ 4 ];
						_p().Value.getParams()[ "x" ].getValue().Convert( &v[ 0 ], 'i' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v[ 1 ], 'i' );
						_p().Value.getParams()[ "z" ].getValue().Convert( &v[ 2 ], 'i' );
						m->getProperties()->setPropertyInt( _p().Key, v, 3 );
					}
					else
					if( _p().Value.getGroupType() == "int4" )
					{
						XeCore::XeInteger v[ 4 ];
						_p().Value.getParams()[ "x" ].getValue().Convert( &v[ 0 ], 'i' );
						_p().Value.getParams()[ "y" ].getValue().Convert( &v[ 1 ], 'i' );
						_p().Value.getParams()[ "z" ].getValue().Convert( &v[ 2 ], 'i' );
						_p().Value.getParams()[ "w" ].getValue().Convert( &v[ 3 ], 'i' );
						m->getProperties()->setPropertyInt( _p().Key, v, 4 );
					}
					else
					if( _p().Value.getGroupType() == "sampler2D" )
					{
						XeCore::XeInteger v;
						_p().Value.getParams()[ "unit" ].getValue().Convert( &v, 'i' );
						m->getProperties()->setPropertySampler( _p().Key, v );
					}
					else
					if( _p().Value.getGroupType() == "sampler3D" )
					{
						XeCore::XeInteger v;
						_p().Value.getParams()[ "unit" ].getValue().Convert( &v, 'i' );
						m->getProperties()->setPropertySampler( _p().Key, v );
					}
					else
					if( _p().Value.getGroupType() == "mat4" )
					{
						XeCore::XeHalfMatrix v;
						_p().Value.getParams()[ "0" ].getValue().Convert( &v.Cell[ 0 ], 'h' );
						_p().Value.getParams()[ "1" ].getValue().Convert( &v.Cell[ 1 ], 'h' );
						_p().Value.getParams()[ "2" ].getValue().Convert( &v.Cell[ 2 ], 'h' );
						_p().Value.getParams()[ "3" ].getValue().Convert( &v.Cell[ 3 ], 'h' );
						_p().Value.getParams()[ "4" ].getValue().Convert( &v.Cell[ 4 ], 'h' );
						_p().Value.getParams()[ "5" ].getValue().Convert( &v.Cell[ 5 ], 'h' );
						_p().Value.getParams()[ "6" ].getValue().Convert( &v.Cell[ 6 ], 'h' );
						_p().Value.getParams()[ "7" ].getValue().Convert( &v.Cell[ 7 ], 'h' );
						_p().Value.getParams()[ "8" ].getValue().Convert( &v.Cell[ 8 ], 'h' );
						_p().Value.getParams()[ "9" ].getValue().Convert( &v.Cell[ 9 ], 'h' );
						_p().Value.getParams()[ "10" ].getValue().Convert( &v.Cell[ 10 ], 'h' );
						_p().Value.getParams()[ "11" ].getValue().Convert( &v.Cell[ 11 ], 'h' );
						_p().Value.getParams()[ "12" ].getValue().Convert( &v.Cell[ 12 ], 'h' );
						_p().Value.getParams()[ "13" ].getValue().Convert( &v.Cell[ 13 ], 'h' );
						_p().Value.getParams()[ "14" ].getValue().Convert( &v.Cell[ 14 ], 'h' );
						_p().Value.getParams()[ "15" ].getValue().Convert( &v.Cell[ 15 ], 'h' );
						m->getProperties()->setPropertyMat( _p().Key, v, _p().Value.getParams()[ "transpose" ].getValue() == "true" ? true : false );
					}
					else
					if( _p().Value.getGroupType() == "float[]" )
					{
						if( _p().Value.getParams().Size() )
						{
							unsigned int i = 0;
							XeCore::XeArray< XeCore::XeHalf > temp( _p().Value.getParams().Size() );
							for( ParamsElm a = _p().Value.getParams().FirstPointer(); !a.IsEmpty(); a.Next(), i++ )
								a().Value.getValue().Convert( &temp[ i ], 'h' );
							m->getProperties()->setPropertyArrayHalf( _p().Key, temp.Get(), temp.Size(), 1 );
						}
					}
					else
					if( _p().Value.getGroupType() == "int[]" )
					{
						if( _p().Value.getParams().Size() )
						{
							unsigned int i = 0;
							XeCore::XeArray< XeCore::XeInteger > temp( _p().Value.getParams().Size() );
							for( ParamsElm a = _p().Value.getParams().FirstPointer(); !a.IsEmpty(); a.Next(), i++ )
								a().Value.getValue().Convert( &temp[ i ], 'i' );
							m->getProperties()->setPropertyArrayInt( _p().Key, temp.Get(), temp.Size(), 1 );
						}
					}
				}
			}
		}
	}
	if( Global::use().scenes->attach( NameID( name ), t ) )
	{
		ASSET_SET_PURE_POINTER( t );
		return( t );
	}
	else
	{
		DELETE_OBJECT( t );
		return( 0 );
	}
}