// ----------------------------------------------------------------------
void drawPidTables(const char *qual = "mvaTmMuon") {

  PidTable a;
  std::vector<string> charge; 
  charge.push_back("Plus"); 
  charge.push_back("Minus"); 

  std::vector<string> sample; 
  sample.push_back("pion"); 
  sample.push_back("kaon"); 
  sample.push_back("proton"); 

  std::vector<string> ssample; 
  ssample.push_back("#pi"); 
  ssample.push_back("K"); 
  ssample.push_back("p"); 

  string name; 

  double xbins[] = {0., 1.4, 2.4};
  double ybins[] = {0., 4., 5., 7., 10., 15., 20., 50.}; 
  TH2D *h2 = new TH2D("h2", "", 2, xbins, 7, ybins); 
  h2->SetMinimum(0.0); 
  h2->SetMaximum(0.001); 
  
  gStyle->SetOptStat(0); 

  for (int is = 0; is < sample.size(); ++is) {
    for (int iq = 0; iq < charge.size(); ++iq) {

      shrinkPad(0.15, 0.15, 0.2); 
      a.clear(); 
      name = Form("%s%sFakeRate-%s.dat", sample[is].c_str(), charge[iq].c_str(), qual); 
      h2->Reset();
      setTitles(h2, Form("|#eta(%s^{%s} )|", ssample[is].c_str(), (iq==0?"+":"-")), Form("p_{T}(%s^{%s} )", ssample[is].c_str(), (iq==0?"+":"-"))); 

      a.readFromFile(name.c_str()); 
      a.eff2d(h2); 
      h2->Draw("colztext");
      c0->SaveAs(Form("%s%sFakeRate-%s.pdf", sample[is].c_str(), charge[iq].c_str(), qual)); 
    }
  }


}
// ----------------------------------------------------------------------
void mkPidTables(const char *filename) {

  TFile *f1 = TFile::Open(filename);

  PidTable a("fakeTemplate.dat");
  PidTable b;

  double mean(0.), sf(0.); 

  std::vector<string> charge; 
  charge.push_back("Plus"); 
  charge.push_back("Minus"); 
  
  for (int iq = 0; iq < charge.size(); ++iq) {

    a.flush(); 
    b.flush(); 
    b.readFromHist(f1, Form("pass_pion_%s", charge[iq].c_str()), Form("all_pion_%s", charge[iq].c_str())); 
    a.fillEff(b); 
    a.dumpToFile(Form("pion%sFakeRate-tightMuon.dat", charge[iq].c_str())); 
    mean = a.getMean(); 
    sf = 0.311; 
    a.scale(sf); 
    a.dumpToFile(Form("pion%sFakeRate-mvaTmMuon.dat", charge[iq].c_str())); 
  

    a.flush(); 
    b.flush(); 
    b.readFromHist(f1, Form("pass_kaon_%s", charge[iq].c_str()), Form("all_kaon_%s", charge[iq].c_str())); 
    a.fillEff(b); 
    a.dumpToFile(Form("kaon%sFakeRate-tightMuon.dat", charge[iq].c_str())); 
    sf = 0.311; 
    a.scale(sf); 
    a.dumpToFile(Form("kaon%sFakeRate-mvaTmMuon.dat", charge[iq].c_str())); 
    
    a.flush(); 
    b.flush(); 
    b.readFromHist(f1, Form("pass_pion_%s", charge[iq].c_str()), Form("all_pion_%s", charge[iq].c_str())); 
    a.fillEff(b); 
    mean = a.getMean(); 
    sf = 0.00015/mean; 
    a.scale(sf); 
    a.dumpToFile(Form("proton%sFakeRate-tightMuon.dat", charge[iq].c_str())); 

    sf = 0.311;
    a.scale(sf); 
    a.dumpToFile(Form("proton%sFakeRate-mvaTmMuon.dat", charge[iq].c_str())); 
  }
}
// ----------------------------------------------------------------------
void mkPidTables(const char *filename) {

  TFile *f1 = TFile::Open(filename);

  PidTable a("fakeTemplate.dat");
  PidTable b;

  double mean(0.), sf(0.); 

  a.flush(); 
  b.flush(); 
  b.readFromHist(f1, "pass_pion", "all_pion"); 
  a.fillEff(b); 
  a.dumpToFile("pionFakeRate-tightMuon.dat"); 
  mean = a.getMean(); 
  sf = 0.311; 
  a.scale(sf); 
  a.dumpToFile("pionFakeRate-mvaTmMuon.dat"); 
  

  a.flush(); 
  b.flush(); 
  b.readFromHist(f1, "pass_kaon", "all_kaon"); 
  a.fillEff(b); 
  a.dumpToFile("kaonFakeRate-tightMuon.dat"); 
  sf = 0.311; 
  a.scale(sf); 
  a.dumpToFile("kaonFakeRate-mvaTmMuon.dat"); 

  a.flush(); 
  b.flush(); 
  b.readFromHist(f1, "pass_pion", "all_pion"); 
  a.fillEff(b); 
  mean = a.getMean(); 
  sf = 0.00015/mean; 
  a.scale(sf); 
  a.dumpToFile("protonFakeRate-tightMuon.dat"); 

  sf = 0.311;
  a.scale(sf); 
  a.dumpToFile("protonFakeRate-mvaTmMuon.dat"); 
  
}
예제 #4
0
/*
+-----------------+------------------------------------------------------------+
| FUNCION         | init                                                       |
+-----------------+------------------------------------------------------------+
| DESCRIPCION     | Inicia las estructuras y memoria compartida                |
|                 |                                                            | 
+-----------------+------------------------------------------------------------+
*/
int init()
{
    int	ret;
    int	cont;
	int	max_entries;
	char aux_str1[100];
	char aux_str2[100];

    /* Configura las señales de terminacion */
	signal(SIGINT, shut_down);
    signal(SIGTERM, shut_down);

    /* Obtiene el nombre del archivo de log */
	Cfg.GetItem("TimeOutDaemon", "LogName", aux_str1);
    LogAlarm.Open(aux_str1);

    /* Setea el nivel de log */
	Cfg.GetItem("TimeOutDaemon", "LogLevel", aux_str1);
    LogAlarm.SetLevel(atoi(aux_str1));

	/* Loguea hora de comienzo */
    LogAlarm.Put( 0,"TimeOutDaemon::init(): Comienzo [%s] - %s", NUM_VERSION, currentTimeLog()); 

    /* Obtiene la cantidad maxima de entradas en la cola */
	Cfg.GetItem("TimeOutDaemon", "MaxEntries", aux_str1);
    max_entries=atoi(aux_str1);

    /* Obtiene la cantidad maxima de entradas en la tabla de PIDs */
	Cfg.GetItem("PIDTable", "ShMemID", aux_str1);
    Cfg.GetItem("PIDTable", "MaxEntries", aux_str2);

    /* Abre tabla de PIDs */
	LogAlarm.Put(0, "TimeOutDaemon::init(): Abre tabla de PIDs [%s] [%s]\n", aux_str1, aux_str2);
    while (PTable.Open(atoi(aux_str1), atoi(aux_str2))==NOOK)
    {
		if (PTable.GetErrno()!=ENOENT)
		{
			LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d)!!\n", PTable.GetErrno());
			exit(1);
		}
    }
    
	/* Pone el pid en la tabla */
	LogAlarm.Put(0, "TimeOutDaemon::init(): Adding PID to PID table...\n");
    ret=PTable.PutPid(getpid());
    if (ret==NOOK)
    {
		LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d)!!\n", PTable.GetErrno());
		exit(1);
    }

    /* Obtiene los identificadores y permisos de la cola de timeout */
	Cfg.GetItem("TimeOutDaemon", "ShMemID", aux_str1);
    Cfg.GetItem("TimeOutDaemon", "ShMemPerms", aux_str2);

    /* Crea cola de timeout */
    LogAlarm.Put(0, "TimeOutDaemon::init(): Creando area de memoria compartida para la Timeout_Queue\n");  
    ret=timeout_queue.Create(atoi(aux_str1), max_entries, atoi(aux_str2));
    if (ret==NOOK)
    {
		LogAlarm.Put(0, "TimeOutDaemon::init(): Error (%d) al crear area para la Timeout_Queue \n", timeout_queue.GetErrno());
    }

    /* Obtiene identificador de la cola de eventos */
	Cfg.GetItem("VisaDaemon", "QueueID", aux_str1);
    
	/* Abre cola de eventos */
	LogAlarm.Put(0, "TimeOutDaemon::init(): Abriendo cola de eventos...\n");
    ret= EQueue.Open(atoi(aux_str1));
    if (ret==NOOK)
	{
		LogAlarm.Put(1, "TimeOutDaemon::init(): Error (%d) al abrir cola de eventos!!\n", EQueue.GetErrno());
		return NOOK;
	}

    return OK;
}
예제 #5
0
void efficiencyL0_01(std::string fullPath, bool doOverview = true)
{
    const std::string outpdf("efficiencyL0_01plot");
    const int fVerbose(0);
    setTDRStyle();
    gStyle->SetOptStat(112211);
    gStyle->SetPalette(1);
    // Canvas
    if (doOverview)
	c = new TCanvas("c1","c1",1400,1200);
    else
	c = new TCanvas("c1","c1",600,600);
    const unsigned int nPadX = doOverview ? 3 : 1;
    const unsigned int nPadY = doOverview ? 2 : 1;
    c->Divide(nPadX,nPadY);
    const unsigned int nPads=nPadX*nPadY;
    // Open file
    TFile *f = TFile::Open(fullPath.c_str());
    if (f==0)
    {
	cout << "File " << fullPath << " not found -- exiting" << endl;
	return;
    }
    if(fVerbose>0)
	cout << "Succesfully opened file " << fullPath << endl;
    // Get TTrees
    TTree* tree = (TTree*) f->Get("events");
    if (tree==0)
    {
	cout << "Tree events not found -- exiting" << endl;
	return;
    }
    if(fVerbose>0) cout << "Got TTree evemts with " << tree->GetEntries() << " entries" << endl;

    // General cuts
    std::string cutacc = "genL0vtxR>1&&genL0vtxR<35&&TMath::Abs(genL0vtxZ)<100";

    // Do plots
    int canvasCdCounter(0), canvasPageCounter(0);
    const int nbinseta(5);
    const int nbinspt(5);
    const double etamax(2.6);
    const double ptmax(40.);
    //const double ptbins[] = {0,1,3,5,10,15,40};
    const double ptbins[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,5,6,8,10,40};
    const int ptbins_size = (sizeof(ptbins)/sizeof(double));
    std::vector<double> ptbinvec(ptbins,ptbins+ptbins_size);
    //const double etabins[] = {0.0,0.5,1.0,1.4,1.8,2.2};
    const double etabins[] = {0.0,0.5,1.0,1.5,2.0,2.5,3.0};
    const int etabins_size = (sizeof(etabins)/sizeof(double));
    std::vector<double> etabinvec(etabins,etabins+etabins_size);
    //const int nbinseta(2);
    //const double etamax(2.4);
    //const int nbinspt(1);
    const bool etabetrag(true);

    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    doPlot2d((TPad*)c->cd(canvasCdCounter),tree,"h1", "genL0pt:TMath::Abs(genL0eta)", cutacc.c_str(), etabinvec, ptbinvec,"Generated #Lambda","|#eta(#Lambda)|","p_{T}(#Lambda)","","GeV/c");
    setTH2params((TPad*)c->cd(canvasCdCounter),(TH2F*)gDirectory->GetList()->FindObject("h1"),true);

    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    doPlot2d((TPad*)c->cd(canvasCdCounter),tree,"h2", "genL0pt:TMath::Abs(genL0eta)", (cutacc+(cutacc.size()>0?"&&":"")+"L0matched==1").c_str(), etabinvec, ptbinvec,"Generated #Lambda, found in reco","|#eta(#Lambda)|","p_{T}(#Lambda)","","GeV/c");
    setTH2params((TPad*)c->cd(canvasCdCounter),(TH2F*)gDirectory->GetList()->FindObject("h2"),true);

#ifdef DOPIDTABLE
    // now we make a pidTable out of this
    PidTable *pid = new PidTable(1);
    pid->readFromHist(gDirectory, "h2", "h1");
    pid->dumpToFile("pid_lambda0.dat");
#endif

    // make a clone for the ratio
    {
	TH2F *hratio = (TH2F*)gDirectory->GetList()->FindObject("h2")->Clone("h2Dratio");
    }
    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    doPlotRatio2d((TPad*)c->cd(canvasCdCounter),"#Lambda reco efficiency","h1","h2Dratio");

    // Now we do a 1D histo for each x-bin
    //plot1Dfrom2DforeachXbin((TH2F*)gDirectory->GetList()->FindObject("h1"));
    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    plot1Dfrom2DforeachXbin((TPad*)c->cd(canvasCdCounter),"h2Dratio");

    // 1D ratio plots
    const double ptbinsratio[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,5,6,8,12,16,40};
    const int ptbinsratio_size = (sizeof(ptbinsratio)/sizeof(double));
    std::vector<double> ptbinratiovec(ptbinsratio,ptbinsratio+ptbinsratio_size);
    const double etabinsratio[] = {0,0.2};
    const int etabinsratio_size = (sizeof(etabinsratio)/sizeof(double));
    std::vector<double> etabinratiovec(etabinsratio,etabinsratio+etabinsratio_size);

    std::string cutaccEta = (cutacc.size()>0?cutacc+"&&":"")+ "TMath::Abs(genL0eta)<2.5";
    std::string cutaccPt = (cutacc.size()>0?cutacc+"&&":"")+ "genL0pt>2&&genL0pt<40";

    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    doRatioPlot((TPad*)c->cd(canvasCdCounter),tree,tree,"hpt","genL0pt","genL0pt",cutaccEta.c_str(), (cutaccEta+(cutaccEta.size()>0?"&&":"")+"L0matched==1").c_str(),ptbinratiovec,"#Lambda reco efficiency for |#eta|<2.5","p_{T}","GeV/c");
    canvaspager(c,outpdf,nPads,canvasCdCounter,canvasPageCounter);
    doRatioPlot((TPad*)c->cd(canvasCdCounter),tree,tree,"heta","TMath::Abs(genL0eta)","TMath::Abs(genL0eta)",cutaccPt.c_str(), (cutaccPt+(cutaccPt.size()>0?"&&":"")+"L0matched==1").c_str(),25,0,2.5,"#Lambda reco efficiency for 2<p_{T}<40","|#eta|","");

    // finalize current page
    c->SaveAs((outpdf + toString(canvasPageCounter) + ".pdf").c_str());
}