// ---------------------------------------------------------------------- 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"); }
/* +-----------------+------------------------------------------------------------+ | 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; }
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()); }