diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmCuts.h b/analysis/PWGDIL/dielectron/lmvm/LmvmCuts.h index 5302ca3699a1a8783f8e7de4a67b444734ddcfe9..ff1383d03c74aa9165c6d1364b4ab5025a7b7921 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmCuts.h +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmCuts.h @@ -84,7 +84,7 @@ public: // Analysis cuts double fPtCut = 0.2; double fAngleCut = 1.; - double fChi2PrimCut = 3.; + double fChi2PrimCut = 3.0; double fGammaCut = 0.025; double fStCutAngle = 2.3; double fStCutPP = 2.9; diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.cxx b/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.cxx index 456a0bccc63276e8f14c8623caf74338c5b085eb..4db42c028bdc85bc67c1a5f3718d7cb161d4a189 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.cxx +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.cxx @@ -37,12 +37,11 @@ using namespace std; using namespace Cbm; LmvmDraw::LmvmDraw() {} -void LmvmDraw::DrawHistFromFile(const string& fileName, const string& outputDir, bool useMvd, bool drawSig) +void LmvmDraw::DrawHistFromFile(const string& fileName, const string& outputDir, bool useMvd) { SetDefaultDrawStyle(); fOutputDir = outputDir; fUseMvd = useMvd; - fDrawSignificance = drawSig; /// Save old global file and folder pointer to avoid messing with FairRoot TFile* oldFile = gFile; @@ -120,6 +119,7 @@ TH1D* LmvmDraw::CreateSignificanceH1(TH1D* s, TH1D* bg, const string& name, cons double sumBg = bg->Integral(1, i, "width"); double sign = (sumSignal + sumBg != 0.) ? sumSignal / std::sqrt(sumSignal + sumBg) : 0.; hsig->SetBinContent(i, sign); + hsig->GetYaxis()->SetTitle("Significance"); } } // "left" - reject left part of the histogram. value < cut -> reject @@ -129,6 +129,7 @@ TH1D* LmvmDraw::CreateSignificanceH1(TH1D* s, TH1D* bg, const string& name, cons double sumBg = bg->Integral(i, nBins, "width"); double sign = (sumSignal + sumBg != 0.) ? sumSignal / std::sqrt(sumSignal + sumBg) : 0.; hsig->SetBinContent(i, sign); + hsig->GetYaxis()->SetTitle("Significance"); } } return hsig; @@ -182,16 +183,18 @@ void LmvmDraw::DrawCutEffH1(const string& hist, const string& option) if (option == "right") { for (int iB = 1; iB <= nBins; iB++) { eff->SetBinContent(iB, fH.H1(hist, src)->Integral(1, iB, "width") / integralTotal); + eff->GetYaxis()->SetTitle("Cut Efficiency"); } } else if (option == "left") { for (int iB = nBins; iB >= 1; iB--) { eff->SetBinContent(iB, fH.H1(hist, src)->Integral(iB, nBins, "width") / integralTotal); + eff->GetYaxis()->SetTitle("Cut Efficiency"); } } effHist.push_back(eff); } - DrawH1(effHist, fH.fSrcLatex, kLinear, kLog, true, 0.8, 0.8, 0.99, 0.99, "hist"); + DrawH1(effHist, fH.fSrcLatex, kLinear, kLinear, true, 0.8, 0.8, 0.99, 0.99, "hist"); } @@ -328,36 +331,35 @@ void LmvmDraw::DrawSrcH1(const string& hName, ELmvmAnaStep step, bool doScale) void LmvmDraw::Draw1DCut(const string& hist, const string& sigOption, double cut) { - int w = 800; + int w = 2400; int h = 800; - if (fDrawSignificance) w = 2400; - TCanvas* c = fH.fHM.CreateCanvas(("lmvm_" + hist).c_str(), ("lmvm_" + hist).c_str(), w, h); - if (fDrawSignificance) { - c->Divide(3, 1); - c->cd(1); - } + TCanvas* c = fH.fHM.CreateCanvas(("lmvm_cuts/lmvm_" + hist).c_str(), ("lmvm_cuts/lmvm_" + hist).c_str(), w, h); + c->Divide(3, 1); + + c->cd(1); DrawSrcH1(hist); if (cut != -999999.) { TLine* cutLine = new TLine(cut, 0.0, cut, 1.0); cutLine->SetLineWidth(2); cutLine->Draw(); } - if (fDrawSignificance) { - c->cd(2); - DrawCutEffH1(hist, sigOption); - c->cd(3); - TH1D* sign = - CreateSignificanceH1(fH.H1(hist, ELmvmSrc::Signal), fH.H1(hist, ELmvmSrc::Bg), hist + "_significance", sigOption); - DrawH1(sign, kLinear, kLinear, "hist"); - } + c->cd(2); + DrawCutEffH1(hist, sigOption); + + c->cd(3); + TH1D* sign = + CreateSignificanceH1(fH.H1(hist, ELmvmSrc::Signal), fH.H1(hist, ELmvmSrc::Bg), hist + "_significance", sigOption); + DrawH1(sign, kLinear, kLinear, "hist"); } void LmvmDraw::DrawCuts() { - Draw1DCut("hRichAnn", "left", -0.4); // CbmLitGlobalElectronId::GetInstance().GetRichAnnCut() - Draw1DCut("hTrdAnn", "left", 0.85); // CbmLitGlobalElectronId::GetInstance().GetTrdAnnCut() + Draw1DCut("hAnnRich", "left", -0.4); // CbmLitGlobalElectronId::GetInstance().GetRichAnnCut() + Draw1DCut("hAnnTrd", "left", 0.1); // CbmLitGlobalElectronId::GetInstance().GetTrdAnnCut() + Draw2DCut("hAnnRichVsMom"); Draw2DCut("hTofM2"); + DrawTofM2Cut(); Draw1DCut("hChi2PrimVertex", "right", fCuts.fChi2PrimCut); //Draw1DCut("hPt", "left", fCuts.fPtCut); @@ -379,6 +381,7 @@ void LmvmDraw::DrawCuts() } } + void LmvmDraw::DrawSrcBgPairs(ELmvmAnaStep step, bool inPercent, bool drawAnaStep) { TH2D* h = fH.H2Clone("hSrcBgPairsEpEm", step); @@ -443,9 +446,30 @@ void LmvmDraw::Draw2DCutTriangle(double xCr, double yCr) } } +void LmvmDraw::DrawTofM2Cut() +{ + vector<TLine*> lines {new TLine(0., 0.01, 1.3, 0.01), new TLine(1.3, 0.01, 2.5, 0.022)}; // set by hand + TCanvas* c = fH.fHM.CreateCanvas("lmvm_cuts/lmvm_hTofM2_zoom", "lmvm_cuts/lmvm_hTofM2_zoom", 1600, 800); + c->Divide(2, 1); + int hi = 1; + for (ELmvmSrc src : {ELmvmSrc::Signal, ELmvmSrc::Bg}) { + TH2D* hist = fH.H2Clone("hTofM2", src); + c->cd(hi); + hist->GetXaxis()->SetRangeUser(0., 2.5); + hist->GetYaxis()->SetRangeUser(-0.08, 0.05); + DrawH2(hist); + DrawTextOnPad(fH.fSrcLatex[static_cast<int>(src)], 0.6, 0.89, 0.7, 0.99); + for (size_t i = 0; i < lines.size(); i++) { + lines[i]->SetLineWidth(2.); + lines[i]->Draw(); + } + hi++; + } +} + void LmvmDraw::Draw2DCut(const string& hist, double cutCrossX, double cutCrossY) { - TCanvas* c = fH.fHM.CreateCanvas(("lmvm_" + hist).c_str(), ("lmvm_" + hist).c_str(), 1000, 1500); + TCanvas* c = fH.fHM.CreateCanvas(("lmvm_cuts/lmvm_" + hist).c_str(), ("lmvm_cuts/lmvm_" + hist).c_str(), 1000, 1500); c->Divide(2, 3); vector<TH1*> projX, projY; vector<string> latex; @@ -797,7 +821,7 @@ void LmvmDraw::SetAnalysisStepAxis(TH1* h) void LmvmDraw::DrawMvdCutQa() { if (!fUseMvd) return; - TCanvas* c = fH.fHM.CreateCanvas("lmvm_mvdCutQa", "lmvm_mvd1cut_qa", 1600, 800); + TCanvas* c = fH.fHM.CreateCanvas("lmvm_cuts/lmvm_mvdCutQa", "lmvm_cuts/lmvm_mvd1cut_qa", 1600, 800); c->Divide(2, 1); int i = 1; for (const string& num : {"1", "2"}) { diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.h b/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.h index feafb024af5b8e47ac25ad0dfa79d3721081f70b..1ac829f5b59f00b8568c0e9aa43ac40de66f9867 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.h +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmDraw.h @@ -40,14 +40,12 @@ public: * \param[in] useMvd draw histograms related to the MVD detector? * \param[in] drawSig Do you want to draw significance histograms? **/ - void DrawHistFromFile(const std::string& fileName, const std::string& outputDir = "", bool useMvd = true, - bool drawSig = true); + void DrawHistFromFile(const std::string& fileName, const std::string& outputDir = "", bool useMvd = true); private: Int_t fNofEvents = 0; // number of events of current job bool fUseMvd = false; // do you want to draw histograms related to the MVD detector? - bool fDrawSignificance = false; // do you want to draw significance histograms of 1D cuts? LmvmCuts fCuts; // electron identification and analysis cuts @@ -98,6 +96,7 @@ private: void Draw1DCut(const std::string& hist, const std::string& sigOption, double cut = -999999.); void Draw2DCut(const std::string& hist, double cutCrossX = -999999., double cutCrossY = -999999.); + void DrawTofM2Cut(); void DrawCuts(); void DrawSrcBgPairs(ELmvmAnaStep step, bool inPercent, bool drawAnaStep = true); diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.cxx b/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.cxx index b57627d709c13e3cf2abbe1a823658264202b465..747228bcea49c2b2b40420116349ef6ef47941f1 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.cxx +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.cxx @@ -110,13 +110,13 @@ void LmvmDrawAll::CreateMeanHistAll() for (auto step : fHMean.fAnaSteps) { for (auto src : {ELmvmSrc::Bg, ELmvmSrc::Eta, ELmvmSrc::Pi0}) { - CreateMeanHist<TH1D>(fHMean.GetName("hMinv", src, step), nofEvents, 20); + CreateMeanHist<TH1D>(fHMean.GetName("hMinv", src, step), nofEvents, fRebMinv); CreateMeanHist<TH2D>(fHMean.GetName("hMinvPt", src, step), nofEvents); } for (const string& comb : {"PM", "PP", "MM"}) { for (const string& ev : {"sameEv", "mixedEv"}) { - CreateMeanHist<TH1D>(fHMean.GetName("hMinvComb" + comb + "_" + ev, step), nofEvents, 20); + CreateMeanHist<TH1D>(fHMean.GetName("hMinvComb" + comb + "_" + ev, step), nofEvents, fRebMinv); } } } @@ -137,8 +137,8 @@ T* LmvmDrawAll::GetCocktailMinv(const string& name, ELmvmAnaStep step) T* sHist = dynamic_cast<T*>(H(signal)->GetObject(nameFull)->Clone()); int nofEvents = (int) H(signal)->H1("hEventNumber")->GetEntries(); sHist->Scale(1. / nofEvents); - if (name != "hMinvPt") { // TODO: find another solution for this; rebin here has to be exactly the same as before - sHist->Rebin(20); + if (name != "hMinvPt") { + sHist->Rebin(fRebMinv); sHist->Scale(1. / binWidth); } if (cocktail == nullptr) cocktail = sHist; @@ -174,7 +174,7 @@ void LmvmDrawAll::DrawMinv(ELmvmAnaStep step) for (ELmvmSignal signal : fHMean.fSignals) { TH1D* sHist = H(signal)->H1Clone("hMinv", ELmvmSrc::Signal, step); sHist->Scale(1. / H(signal)->H1("hEventNumber")->GetEntries()); - sHist->Rebin(20); // TODO urgent: find solution to rebin w. same value as before! + sHist->Rebin(fRebMinv); sHist->Scale(1. / binWidth); sHists[static_cast<int>(signal)] = sHist; } @@ -411,6 +411,27 @@ void LmvmDrawAll::DrawMinvCombSignalAndBg() DrawH1(hists, legend, kLinear, kLinear, true, 0.8, 0.6, 0.99, 0.99, "HIST"); } + //Draw Combinatorial Signal from N+-same (without mixed geom. mean) // TODO: without mixed: needed or delete? + { + TCanvas* c = fHMean.fHM.CreateCanvas("lmvmAll_minvCombPMSignal", "lmvmAll_minvCombPMSignal", 1800, 1800); + c->Divide(3, 3); + int i = 1; + for (auto step : fHMean.fAnaSteps) { + if (step < ELmvmAnaStep::ElId) continue; + c->cd(i++); + TH1D* pmSame = fHMean.H1Clone("hMinvCombPM_sameEv", step); + TH1D* combPMSignalAsm = fHMean.H1Clone("hMinvCombPMSignal", step); + TH1D* combBgAsm = fHMean.H1Clone("hMinvCombBg", step); + TH1D* cocktail = GetCocktailMinvH1(step); + pmSame->SetMaximum(3e-1); + pmSame->SetMinimum(4e-8); + DrawH1({pmSame, combBgAsm, combPMSignalAsm, cocktail}, + {"N_{same}^{+-}", "B_{c}", "Signal (N_{same}^{+-} - B_{c})", "Cocktail"}, kLinear, kLog, true, 0.8, 0.8, + 0.99, 0.99, "hist"); + fHMean.DrawAnaStepOnPad(step); + } + } + //Draw Combinatorial Signal from N+-same { TCanvas* c = fHMean.fHM.CreateCanvas("lmvmAll_minvCombPMSignalAsm", "lmvmAll_minvCombPMSignalAsm", 1800, 1800); @@ -423,6 +444,8 @@ void LmvmDrawAll::DrawMinvCombSignalAndBg() TH1D* combPMSignalAsm = fHMean.H1Clone("hMinvCombPMSignalAsm", step); TH1D* combBgAsm = fHMean.H1Clone("hMinvCombBgAsm", step); TH1D* cocktail = GetCocktailMinvH1(step); + pmSame->SetMaximum(3e-1); + pmSame->SetMinimum(4e-8); DrawH1({pmSame, combBgAsm, combPMSignalAsm, cocktail}, {"N_{same}^{+-}", "B_{c} (asm)", "Signal (N_{same}^{+-} - B_{c})", "Cocktail"}, kLinear, kLog, true, 0.8, 0.8, 0.99, 0.99, "hist"); @@ -442,6 +465,8 @@ void LmvmDrawAll::DrawMinvCombSignalAndBg() sbg->Add(GetCocktailMinvH1(step)); TH1D* combBgAsm = fHMean.H1Clone("hMinvCombBgAsm", step); TH1D* sBgSignalAsm = fHMean.H1Clone("hMinvSBgSignalAsm", step); + sbg->SetMaximum(3e-1); + sbg->SetMinimum(4e-8); TH1D* cocktail = GetCocktailMinvH1(step); DrawH1({sbg, combBgAsm, sBgSignalAsm, cocktail}, {"Cocktail + BG", "B_{c} (asm)", "Signal (Cocktail+BG - B_{c})", "Cocktail"}, kLinear, kLog, true, 0.8, @@ -449,6 +474,29 @@ void LmvmDrawAll::DrawMinvCombSignalAndBg() fHMean.DrawAnaStepOnPad(step); } } + + + //Draw Combinatorial Signal from Cocktail+BG (without mixed geom. mean) // TODO: without mixed: needed or delete? + { + TCanvas* c = fHMean.fHM.CreateCanvas("lmvmAll_minvSbgSignal", "lmvmAll_minvSbgSignal", 1800, 1800); + c->Divide(3, 3); + int i = 1; + for (auto step : fHMean.fAnaSteps) { + if (step < ELmvmAnaStep::ElId) continue; + c->cd(i++); + TH1D* sbg = fHMean.H1Clone("hMinv_bg", step); + sbg->Add(GetCocktailMinvH1(step)); + TH1D* combBgAsm = fHMean.H1Clone("hMinvCombBg", step); + TH1D* sBgSignalAsm = fHMean.H1Clone("hMinvSBgSignal", step); + sbg->SetMaximum(3e-1); + sbg->SetMinimum(4e-8); + TH1D* cocktail = GetCocktailMinvH1(step); + DrawH1({sbg, combBgAsm, sBgSignalAsm, cocktail}, + {"Cocktail + BG", "B_{c}", "Signal (Cocktail+BG - B_{c})", "Cocktail"}, kLinear, kLog, true, 0.8, 0.8, + 0.99, 0.99, "hist"); + fHMean.DrawAnaStepOnPad(step); + } + } } void LmvmDrawAll::DrawSBgVsMinv() @@ -531,13 +579,22 @@ void LmvmDrawAll::CalcCombBGHistos() } } + // calculate comb. signal from same events data (S = N^{+-}_{same} - B_{C}) // TODO: without mixed: needed? + TH1D* hCombPMSignal = fHMean.CreateHByClone<TH1D>("hMinvCombPM_sameEv", "hMinvCombPMSignal", step); + hCombPMSignal->Add(fHMean.H1("hMinvCombBg", step), -1.); + // calculate assembled comb. signal from same (<= 0.3 GeV) and mixed (> 0.3 GeV) events data // from 'N+-same', Signal (N^{+-}_{same} - B_{C}) //fh_mean_combSignalNpm_assemb_minv TH1D* hCombPMSignalAsm = fHMean.CreateHByClone<TH1D>("hMinvCombPM_sameEv", "hMinvCombPMSignalAsm", step); hCombPMSignalAsm->Add(fHMean.H1("hMinvCombBgAsm", step), -1.); - // from 'Cocktail + BG' + // from 'Cocktail + BG + TH1D* hBCSignal = fHMean.CreateHByClone<TH1D>("hMinv_bg", "hMinvSBgSignal", step); + hBCSignal->Add(GetCocktailMinvH1(step)); + hBCSignal->Add(fHMean.H1("hMinvCombBg", step), -1.); + + // from 'Cocktail + BG' (S = Coc+BG - B_{C}) // TODO: without mixed: needed? //fh_mean_combSignalBCoc_assemb_minv TH1D* hBCSignalAsm = fHMean.CreateHByClone<TH1D>("hMinv_bg", "hMinvSBgSignalAsm", step); hBCSignalAsm->Add(GetCocktailMinvH1(step)); @@ -750,7 +807,7 @@ LmvmSBgResultData LmvmDrawAll::CalculateSBgResult(ELmvmSignal signal, ELmvmAnaSt void LmvmDrawAll::SaveCanvasToImage() { cout << "Images output dir:" << fOutputDir << endl; - fHMean.fHM.SaveCanvasToImage(fOutputDir, "png;eps"); // fHM[0]->SaveCanvasToImage(fOutputDir, "eps;png"); + fHMean.fHM.SaveCanvasToImage(fOutputDir, "png"); // fHM[0]->SaveCanvasToImage(fOutputDir, "eps;png"); } ClassImp(LmvmDrawAll); diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.h b/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.h index 56415b5205882100be261486a21e222b4fbe40ae..4a2871b6916b646f2b1fd2c6bb0d8fadcdebe432 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.h +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmDrawAll.h @@ -37,6 +37,8 @@ private: std::vector<LmvmHist*> fH; LmvmHist fHMean; + int fRebMinv = 40; // Rebin for minv histograms + std::string fOutputDir; // output directory for figures LmvmHist* H(ELmvmSignal signal); diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx b/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx index e0e9100507163609434634bf979a6a586cc2eadf..3e09d218f3639d2190cdcb3dc90ad04acf7660f0 100644 --- a/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx +++ b/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx @@ -91,8 +91,9 @@ void LmvmTask::InitHists() fH.CreateH1("hEventNumber", "", "", 1, 0, 1.); fH.CreateH1("hEventNumberMixed", "", "", 1, 0, 1.); - fH.CreateH1("hRichAnn", fH.fSrcNames, "RICH ANN output", ax, 100, -1.1, 1.1); - fH.CreateH1("hTrdAnn", fH.fSrcNames, "Likelihood output", ax, 100, -.1, 1.1); // TODO: change back to "TRD ANN" + fH.CreateH1("hAnnRich", fH.fSrcNames, "RICH ANN output", ax, 100, -1.1, 1.1); + fH.CreateH2("hAnnRichVsMom", fH.fSrcNames, "P [GeV/c]", "RICH ANN output", ax, 100, 0., 6., 100, -1.1, 1.1); + fH.CreateH1("hAnnTrd", fH.fSrcNames, "Likelihood output", ax, 100, -.1, 1.1); // TODO: change back to "TRD ANN" fH.CreateH2("hTofM2", fH.fSrcNames, "P [GeV/c]", "m^{2} [GeV/c^{2}]^{2}", ax, 100, 0., 4., 500, -0.1, 1.0); fH.CreateH1("hChi2Sts", fH.fSrcNames, "#chi^{2}", ax, 200, 0., 20.); fH.CreateH1("hChi2PrimVertex", fH.fSrcNames, "#chi^{2}_{prim}", ax, 200, 0., 20.); @@ -115,16 +116,16 @@ void LmvmTask::InitHists() 2.); // [0.5]-correct, [1.5]-wrong fH.CreateH1("hMvdMcDist", {"1", "2"}, fH.fSrcNames, "Track-Hit distance [cm]", ax, 100, 0., 10.); - fH.CreateH1("hMinv", fH.fSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", ax, 2000, 0., 2.); - fH.CreateH1("hMinvCombPM", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e+e-} [GeV/c^{2}]", ax, 2000, 0., 2.); - fH.CreateH1("hMinvCombPP", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e+e+} [GeV/c^{2}]", ax, 2000, 0., 2.); - fH.CreateH1("hMinvCombMM", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e-e-} [GeV/c^{2}]", ax, 2000, 0., 2.); + fH.CreateH1("hMinv", fH.fSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", ax, 2500, 0., 2.5); + fH.CreateH1("hMinvCombPM", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e+e-} [GeV/c^{2}]", ax, 2500, 0., 2.5); + fH.CreateH1("hMinvCombPP", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e+e+} [GeV/c^{2}]", ax, 2500, 0., 2.5); + fH.CreateH1("hMinvCombMM", {"sameEv", "mixedEv"}, fH.fAnaStepNames, "M_{e-e-} [GeV/c^{2}]", ax, 2500, 0., 2.5); fH.CreateH1("hMinvBgMatch", {"trueMatch", "trueMatchEl", "trueMatchNotEl", "mismatch"}, fH.fAnaStepNames, - "M_{ee} [GeV/c^{2}]", ax, 2000, 0., 2.); - fH.CreateH1("hMinvBgSource", fH.fBgPairSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", ax, 2000, 0., 2.); + "M_{ee} [GeV/c^{2}]", ax, 2000, 0., 2.5); + fH.CreateH1("hMinvBgSource", fH.fBgPairSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", ax, 2500, 0., 2.5); - fH.CreateH2("hMinvPt", fH.fSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", "P_{t} [GeV/c]", ax, 100, 0., 2., 20, 0., - 2.); + fH.CreateH2("hMinvPt", fH.fSrcNames, fH.fAnaStepNames, "M_{ee} [GeV/c^{2}]", "P_{t} [GeV/c]", ax, 100, 0., 2., 25, 0., + 2.5); fH.CreateH1("hMomPairSignal", fH.fAnaStepNames, "P [GeV/c]", ax, 100, 0., 15.); fH.CreateH2("hPtYPairSignal", fH.fAnaStepNames, "Rapidity", "P_{t} [GeV/c]", ax, 40, 0., 4., 20, 0., 2.); @@ -574,7 +575,7 @@ void LmvmTask::FillCands() void LmvmTask::CombinatorialPairs() { size_t nCand = fCandsTotal.size(); - for (size_t iC1 = 0; iC1 < nCand; iC1++) { + for (size_t iC1 = 0; iC1 < nCand - 1; iC1++) { const auto& cand1 = fCandsTotal[iC1]; for (size_t iC2 = iC1 + 1; iC2 < nCand; iC2++) { @@ -957,8 +958,9 @@ void LmvmTask::DifferenceSignalAndBg() fH.FillH1("hChi2PrimVertex", cand.fMcSrc, cand.fChi2Prim, fW); if (!cand.fIsChi2Prim) continue; - fH.FillH1("hRichAnn", cand.fMcSrc, cand.fRichAnn, fW); - fH.FillH1("hTrdAnn", cand.fMcSrc, cand.fTrdAnn, fW); + fH.FillH1("hAnnRich", cand.fMcSrc, cand.fRichAnn, fW); + fH.FillH2("hAnnRichVsMom", cand.fMcSrc, cand.fMomentum.Mag(), cand.fRichAnn, fW); + fH.FillH1("hAnnTrd", cand.fMcSrc, cand.fTrdAnn, fW); fH.FillH2("hTofM2", cand.fMcSrc, cand.fMomentum.Mag(), cand.fMass2, fW); fH.FillH2("hTrdLike_El", cand.fMcSrc, cand.fMomentum.Mag(), cand.fTrdLikeEl, fW); fH.FillH2("hTrdLike_Pi", cand.fMcSrc, cand.fMomentum.Mag(), cand.fTrdLikePi, fW); diff --git a/macro/analysis/dielectron/batch_job.py b/macro/analysis/dielectron/batch_job.py index 23282b2c5bb28afd6f9d3e93601302e51ed539a0..42d42f206210322cb26d85e30a92fb04db70fe18 100755 --- a/macro/analysis/dielectron/batch_job.py +++ b/macro/analysis/dielectron/batch_job.py @@ -10,7 +10,7 @@ def main(): plutoParticle = sys.argv[3] cbmrootConfigPath = "/lustre/nyx/cbm/users/criesen/build/config.sh" macroDir = "/lustre/nyx/cbm/users/criesen/cbmroot/macro/analysis/dielectron/" - nofEvents = 500 + nofEvents = 1000 taskId = os.environ.get('SLURM_ARRAY_TASK_ID') jobId = os.environ.get('SLURM_ARRAY_JOB_ID') @@ -48,7 +48,7 @@ def main(): #os.system((". /{} -a; {}").format(cbmrootConfigPath, traCmd)) #os.system((". /{} -a; {}").format(cbmrootConfigPath, digiCmd)) #os.system((". /{} -a; {}").format(cbmrootConfigPath, recoCmd)) - os.system((". /{} -a; {}").format(cbmrootConfigPath, qaCmd)) + #os.system((". /{} -a; {}").format(cbmrootConfigPath, qaCmd)) os.system((". /{} -a; {}").format(cbmrootConfigPath, anaCmd)) def getPlutoPath(colSystem, colEnergy, plutoParticle, taskId): diff --git a/macro/analysis/dielectron/draw_all.py b/macro/analysis/dielectron/draw_all.py index 1c57c45021138b055e1d88d7c86b619785b9dce2..ef19322f7c8180fd63fb91a309a52fb924bac1d2 100755 --- a/macro/analysis/dielectron/draw_all.py +++ b/macro/analysis/dielectron/draw_all.py @@ -8,7 +8,6 @@ def main(): dataDirOut = dataDir + "/results/" macroDir = "/lustre/cbm/users/criesen/cbmroot/macro/analysis/dielectron/" useMvd = True - drawSig = True if os.path.exists(dataDirOut): shutil.rmtree(dataDirOut) @@ -20,7 +19,7 @@ def main(): resultDirAna = resultDir + "/lmvm/" inRootAna = dataDir + plutoParticle + "/analysis.all.root" - os.system(('root -l -b -q {}/draw_analysis.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\"\)').format(macroDir, inRootAna, resultDirAna, useMvd, drawSig)) + os.system(('root -l -b -q {}/draw_analysis.C\(\\"{}\\",\\"{}\\",\\"{}\\"\)').format(macroDir, inRootAna, resultDirAna, useMvd)) resultDirLitqa = resultDir + "/litqa/" inRootLitqa = dataDir + plutoParticle + "/litqa.all.root" @@ -32,7 +31,7 @@ def main(): allOmega = dataDir + "/omegaepem/analysis.all.root" allPhi = dataDir + "/phi/analysis.all.root" allOmegaD = dataDir + "/omegadalitz/analysis.all.root" - resultDirAll = dataDirOut + "/lmvm_all/" + resultDirAll = dataDirOut + "/all/" os.system(('root -l -b -q {}/draw_analysis_all.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\"\)').format(macroDir, allInmed, allQgp, allOmega, allPhi, allOmegaD, resultDirAll, useMvd)) diff --git a/macro/analysis/dielectron/draw_analysis.C b/macro/analysis/dielectron/draw_analysis.C index e04cc2eb900ca65a71bb1e03a6868ced02bfb44f..75fa8071ec68af7caaed9970b3380f376e07fabd 100644 --- a/macro/analysis/dielectron/draw_analysis.C +++ b/macro/analysis/dielectron/draw_analysis.C @@ -4,13 +4,12 @@ //#include <experimental/filesystem> -void draw_analysis(const string& histRootFile = "/home/aghoehne/soft/cbm/data/output/phi/analysis.all.root", - const string& resultDir = "/home/aghoehne/soft/cbm/data/output/results/", Bool_t useMvd = true, - Bool_t drawSignificance = true) +void draw_analysis(const string& histRootFile = "/home/aghoehne/soft/cbm/data/output/phi/analysis.1.root", + const string& resultDir = "/home/aghoehne/soft/cbm/data/output/results/", Bool_t useMvd = true) { gSystem->mkdir(resultDir.c_str(), true); LmvmDraw* draw = new LmvmDraw(); - draw->DrawHistFromFile(histRootFile, resultDir, useMvd, drawSignificance); + draw->DrawHistFromFile(histRootFile, resultDir, useMvd); } diff --git a/macro/analysis/dielectron/run_local.py b/macro/analysis/dielectron/run_local.py index eebaf8d39d037c137d13714c3033fe6a2b2f66b1..7eea67966c3e9badae5af6ad9917de1480188ddc 100755 --- a/macro/analysis/dielectron/run_local.py +++ b/macro/analysis/dielectron/run_local.py @@ -9,7 +9,7 @@ def main(): cbmrootConfigPath = "/home/aghoehne/soft/cbm/build/config.sh" urqmdFile = "/home/aghoehne/soft/cbm/data/input/urqmd.auau.8gev.centr.00001.root" plutoFile = "/home/aghoehne/soft/cbm/data/input/pluto.auau.8gev.phi.epem.0001.root" - dataDir = "/home/aghoehne/soft/cbm/data/output/phi" + dataDir = "/home/aghoehne/soft/cbm/data/output/phi/" runId = "1" geoSetup = "sis100_electron" diff --git a/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx b/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx index 3c2833fb2871e953d15e0c7f2693e9bd53c92b47..829bc4fcd047396b5e918dba878056d4824e4ebc 100644 --- a/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx +++ b/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx @@ -18,6 +18,7 @@ #include "utils/CbmRichUtil.h" #include "FairRootManager.h" +#include <Logger.h> #include "TClonesArray.h" #include "TMath.h" @@ -57,6 +58,8 @@ void CbmLitGlobalElectronId::Init() fTrdTracks = (TClonesArray*) ioman->GetObject("TrdTrack"); fTofHits = (TClonesArray*) ioman->GetObject("TofHit"); } + LOG(info) << "fRichAnnCut = " << fRichAnnCut; + LOG(info) << "fTrdAnnCut = " << fTrdAnnCut; } Bool_t CbmLitGlobalElectronId::IsRichElectron(Int_t globalTrackIndex, Double_t momentum) @@ -107,8 +110,8 @@ Bool_t CbmLitGlobalElectronId::IsTofElectron(Int_t globalTrackIndex, Double_t mo Double_t mass2 = GetTofM2(globalTrackIndex, momentum, eventTime); if (mass2 == -1.) return false; - if (momentum >= 1.25) { - if (mass2 < (0.013 * momentum - 0.003)) { return true; } + if (momentum >= 1.3) { + if (mass2 < (0.010 * momentum - 0.003)) { return true; } } else { if (mass2 < 0.01) {