diff --git a/macro/rich/run/run_qa.C b/macro/rich/run/run_qa.C index de4172d08ff6cc7a1a00e1bd1fa5d9868d5a39a1..e97bc1d997921e47c861b7b60809318d0eb2aafe 100644 --- a/macro/rich/run/run_qa.C +++ b/macro/rich/run/run_qa.C @@ -10,6 +10,7 @@ #include "CbmRichGeoTest.h" #include "CbmRichMatchRings.h" #include "CbmRichRecoQa.h" +#include "CbmRichUrqmdTest.h" // #include "CbmRichRingFinderQa.h" // #include "CbmRichTrackProjQa.h" #include "CbmSetup.h" @@ -140,6 +141,12 @@ void run_qa(TString traFile = "", TString parFile = "", TString digiFile = "", T // run->AddTask(geoTest); // ------------------------------------------------------------------------ + // ----- RICH UrqmdTest ----------------------------------------------- + // CbmRichUrqmdTest* urqmdTest = new CbmRichUrqmdTest(); + // urqmdTest->SetOutputDir(resultDir.Data()); + // run->AddTask(urqmdTest); + // ------------------------------------------------------------------------ + // ----- Lit Tracking Qa ---------------------------------------------- // CbmLitTrackingQa* trackingQa = new CbmLitTrackingQa(); // trackingQa->SetMinNofPointsSts(4); diff --git a/reco/detectors/rich/qa/CbmRichGeoOpt.cxx b/reco/detectors/rich/qa/CbmRichGeoOpt.cxx index 7de1ec5aee1fec41ff6dfb69fd26656fbd04ffe0..4d2e4e0ca167811500c87959b0af6eab9441ab2e 100644 --- a/reco/detectors/rich/qa/CbmRichGeoOpt.cxx +++ b/reco/detectors/rich/qa/CbmRichGeoOpt.cxx @@ -559,7 +559,7 @@ void CbmRichGeoOpt::RingParameters() CbmRichRing* ring = (CbmRichRing*) fRichRings->At(iR); if (NULL == ring) continue; CbmTrackMatchNew* ringMatch = (CbmTrackMatchNew*) fRichRingMatches->At(iR); - if (NULL == ringMatch) { + if (NULL == ringMatch || ringMatch->GetNofLinks() < 1) { // H_NofRings->SetBinContent(8,H_NofRings->GetBinCenter(8)+1); continue; } diff --git a/reco/detectors/rich/qa/CbmRichGeoTest.cxx b/reco/detectors/rich/qa/CbmRichGeoTest.cxx index 3e1d5d4eda23f550ccdf679b99c33bafcd3220c8..e824815ef1ea8706134165b23f6241af3d994efd 100644 --- a/reco/detectors/rich/qa/CbmRichGeoTest.cxx +++ b/reco/detectors/rich/qa/CbmRichGeoTest.cxx @@ -68,7 +68,7 @@ using namespace std; using namespace Cbm; -CbmRichGeoTest::CbmRichGeoTest() : FairTask("RichGeoTestQa") {} +CbmRichGeoTest::CbmRichGeoTest() : FairTask("CbmRichGeoTestQa") {} CbmRichGeoTest::~CbmRichGeoTest() {} @@ -98,7 +98,7 @@ InitStatus CbmRichGeoTest::Init() void CbmRichGeoTest::Exec(Option_t* /*option*/) { fEventNum++; - cout << "CbmRichGeoTest, event No. " << fEventNum << endl; + LOG(info) << "CbmRichGeoTest, event No. " << fEventNum; ProcessMc(); RingParameters(); @@ -194,6 +194,9 @@ void CbmRichGeoTest::InitHistograms() fHM->Create2<TH2D>("fhPYEl" + t, "fhPYEl" + t + ";Rapidity;P [GeV/c];Yield", 25, 0., 4., 25, 0., 10.); } + fHM->Create1<TH1D>("fhMcMomPi", "fhMcMomPi;p [GeV/c];Yield", 50, 0., 10.); + fHM->Create2<TH2D>("fhMcPtyPi", "fhMcPtyPi;Rapidity;P_{t} [GeV/c];Yield", 25, 0., 4., 25, 0., 3.); + // Numbers in dependence on XY position onto the photodetector. fHM->Create3<TH3D>("fhNofHitsXYZ", "fhNofHitsXYZ;X [cm];Y [cm];# hits/ring", nBinsX, xMin, xMax, nBinsY, yMin, yMax, 50, 0., 50); @@ -348,7 +351,7 @@ void CbmRichGeoTest::RingParameters() const CbmRichRing* ring = static_cast<CbmRichRing*>(fRichRings->At(iR)); if (ring == nullptr) continue; const CbmTrackMatchNew* ringMatch = static_cast<CbmTrackMatchNew*>(fRichRingMatches->At(iR)); - if (ringMatch == nullptr) continue; + if (ringMatch == nullptr || ringMatch->GetNofLinks() < 1) continue; int mcEventId = ringMatch->GetMatchedLink().GetEntry(); int mcTrackId = ringMatch->GetMatchedLink().GetIndex(); const CbmMCTrack* mcTrack = static_cast<CbmMCTrack*>(fMcTracks->Get(fileId, mcEventId, mcTrackId)); @@ -792,15 +795,15 @@ void CbmRichGeoTest::DrawHist() TH1D* fhNofHitsEllipseFitEff = Cbm::DivideH1(fHM->H1("fhNofHitsEllipseFit"), fHM->H1("fhNofHitsAll")); c->cd(2); DrawH1(fhNofHitsCircleFitEff); - TLatex* circleFitEffTxt = - new TLatex(15, 0.5, CalcEfficiency(fHM->H1("fhNofHitsCircleFit"), fHM->H1("fhNofHitsAll")).c_str()); - cout << "Circle fit efficiency:" << circleFitEffTxt << "%" << endl; + auto circleEff = CalcEfficiency(fHM->H1("fhNofHitsCircleFit"), fHM->H1("fhNofHitsAll")); + TLatex* circleFitEffTxt = new TLatex(15, 0.5, circleEff.c_str()); + LOG(info) << "Circle fit efficiency:" << circleEff << "%"; circleFitEffTxt->Draw(); c->cd(3); DrawH1(fhNofHitsEllipseFitEff); - TLatex* ellipseFitEffTxt = - new TLatex(15, 0.5, CalcEfficiency(fHM->H1("fhNofHitsEllipseFit"), fHM->H1("fhNofHitsAll")).c_str()); - cout << "Ellipse fit efficiency:" << ellipseFitEffTxt << "%" << endl; + auto ellipseFitEff = CalcEfficiency(fHM->H1("fhNofHitsEllipseFit"), fHM->H1("fhNofHitsAll")); + TLatex* ellipseFitEffTxt = new TLatex(15, 0.5, ellipseFitEff.c_str()); + LOG(info) << "Ellipse fit efficiency:" << ellipseFitEff << "%"; ellipseFitEffTxt->Draw(); } @@ -830,7 +833,7 @@ void CbmRichGeoTest::DrawHist() { fHM->CreateCanvas("richgeo_acc_eff_el_mom", "richgeo_acc_eff_el_mom", 800, 800); string effEl = CalcEfficiency(fHM->H1Clone("fhMomElAcc"), fHM->H1Clone("fhMomElMc")); - cout << "Geometrical acceptance electrons:" << effEl << "%" << endl; + LOG(info) << "Geometrical acceptance electrons:" << effEl << "%"; DrawH1({pxEff}, {"e^{#pm} (" + effEl + "%)"}, kLinear, kLinear, true, 0.6, 0.55, 0.88, 0.65); } @@ -1111,17 +1114,20 @@ void CbmRichGeoTest::DrawPmtPoint(const string& coordOpt, const vector<int>& ids void CbmRichGeoTest::Finish() { - DrawHist(); if (fDrawPmts) { DrawPmts(); } TDirectory* oldir = gDirectory; TFile* outFile = FairRootManager::Instance()->GetOutFile(); if (outFile != nullptr) { - outFile->cd(); + outFile->mkdir(GetName()); + outFile->cd(GetName()); fHM->WriteToFile(); } - gDirectory->cd(oldir->GetPath()); + + DrawHist(); fHM->SaveCanvasToImage(fOutputDir, "png"); + fHM->Clear(); + gDirectory->cd(oldir->GetPath()); } string CbmRichGeoTest::CalcEfficiency(TH1* histRec, TH1* histAcc) diff --git a/reco/detectors/rich/qa/CbmRichRecoQa.cxx b/reco/detectors/rich/qa/CbmRichRecoQa.cxx index 71a791b48a5643bdbf0ea9621ed2908cd4112b89..c2a91aa68660c3a73743abe9539bd70c6baee3ac 100644 --- a/reco/detectors/rich/qa/CbmRichRecoQa.cxx +++ b/reco/detectors/rich/qa/CbmRichRecoQa.cxx @@ -176,7 +176,7 @@ void CbmRichRecoQa::RingTrackMismatchSource() int stsId = globalTrack->GetStsTrackIndex(); if (stsId < 0) continue; const CbmTrackMatchNew* stsTrackMatch = static_cast<const CbmTrackMatchNew*>(fStsTrackMatches->At(stsId)); - if (stsTrackMatch == nullptr) continue; + if (stsTrackMatch == nullptr || stsTrackMatch->GetNofLinks() < 1) continue; auto stsMatchedLink = stsTrackMatch->GetMatchedLink(); const CbmMCTrack* mcTrack = static_cast<CbmMCTrack*>(fMcTracks->Get(stsMatchedLink)); if (!IsMcPrimaryElectron(mcTrack)) continue; @@ -224,7 +224,7 @@ void CbmRichRecoQa::RingTrackMismatchSource() fHM->H1("fhMismatchSrc")->Fill(3); fHM->H1("fhMismatchSrcMomStsRich")->Fill(mom); const CbmTrackMatchNew* richRingMatch = static_cast<const CbmTrackMatchNew*>(fRichRingMatches->At(richId)); - if (richRingMatch == nullptr) continue; + if (richRingMatch == nullptr || richRingMatch->GetNofLinks() < 1) continue; auto richMcTrackLink = richRingMatch->GetMatchedLink(); const CbmRichRing* ring = static_cast<const CbmRichRing*>(fRichRings->At(richId)); if (nullptr == ring) continue; @@ -257,7 +257,7 @@ bool CbmRichRecoQa::WasRingFound(const CbmLink& mcTrackLink) const CbmRichRing* ring = static_cast<const CbmRichRing*>(fRichRings->At(iR)); if (ring == nullptr) continue; const CbmTrackMatchNew* richRingMatch = static_cast<const CbmTrackMatchNew*>(fRichRingMatches->At(iR)); - if (richRingMatch == nullptr) continue; + if (richRingMatch == nullptr || richRingMatch->GetNofLinks() < 1) continue; auto richMcTrackLink = richRingMatch->GetMatchedLink(); if (richMcTrackLink == mcTrackLink) return true; } @@ -273,7 +273,7 @@ bool CbmRichRecoQa::WasRingMatched(const CbmLink& mcTrackLink) int richId = globalTrack->GetRichRingIndex(); if (richId < 0) continue; const CbmTrackMatchNew* richRingMatch = static_cast<const CbmTrackMatchNew*>(fRichRingMatches->At(richId)); - if (richRingMatch == nullptr) continue; + if (richRingMatch == nullptr || richRingMatch->GetNofLinks() < 1) continue; auto richMcTrackLink = richRingMatch->GetMatchedLink(); if (richMcTrackLink == mcTrackLink) { return true; @@ -306,11 +306,11 @@ void CbmRichRecoQa::FillRingTrackDistance() if (stsId < 0 || richId < 0) continue; const CbmTrackMatchNew* stsTrackMatch = static_cast<const CbmTrackMatchNew*>(fStsTrackMatches->At(stsId)); - if (stsTrackMatch == nullptr) continue; + if (stsTrackMatch == nullptr || stsTrackMatch->GetNofLinks() < 1) continue; auto stsMcMatchedLink = stsTrackMatch->GetMatchedLink(); const CbmTrackMatchNew* richRingMatch = static_cast<const CbmTrackMatchNew*>(fRichRingMatches->At(richId)); - if (richRingMatch == nullptr) continue; + if (richRingMatch == nullptr || richRingMatch->GetNofLinks() < 1) continue; auto richMcTrackLink = richRingMatch->GetMatchedLink(); const CbmRichRing* ring = static_cast<const CbmRichRing*>(fRichRings->At(richId)); if (nullptr == ring) continue; @@ -359,6 +359,34 @@ void CbmRichRecoQa::FillRingTrackDistance() } } +void CbmRichRecoQa::DrawMismatchSrc() +{ + gStyle->SetPaintTextFormat("4.1f"); + fHM->CreateCanvas("richqa_mismatch_src", "richqa_mismatch_src", 1000, 800); + double nofMcEl = fHM->H1("fhMismatchSrc")->GetBinContent(1); + fHM->Scale("fhMismatchSrc", 100. / nofMcEl); + DrawH1(fHM->H1("fhMismatchSrc"), kLinear, kLog, "hist text"); + fHM->H1("fhMismatchSrc")->SetMarkerSize(1.9); + + vector<string> labels{"MC", + "STS", + "STS-Acc RICH", + "STS-RICH", + "STS-RICH true", + "STS-NoRICH", + "STS-NoRICH RF", + "STS-NoRICH RM", + "STS-NoRICH NoRF", + "STS-NoRICH NoPrj", + "STS-RICH wrong", + "STS-RICH wrong RF", + "STS-RICH wrong RM"}; + + for (size_t i = 0; i < labels.size(); i++) { + fHM->H1("fhMismatchSrc")->GetXaxis()->SetBinLabel(i + 1, labels[i].c_str()); + } + fHM->H1("fhMismatchSrc")->GetXaxis()->SetLabelSize(0.03); +} void CbmRichRecoQa::DrawHist() { @@ -393,34 +421,6 @@ void CbmRichRecoQa::DrawHist() kLinear, kLog, true, 0.5, 0.85, 0.99, 0.99, "hist"); } - { - gStyle->SetPaintTextFormat("4.1f"); - fHM->CreateCanvas("richqa_mismatch_src", "richqa_mismatch_src", 1000, 800); - double nofMcEl = fHM->H1("fhMismatchSrc")->GetBinContent(1); - fHM->Scale("fhMismatchSrc", 100. / nofMcEl); - DrawH1(fHM->H1("fhMismatchSrc"), kLinear, kLog, "hist text"); - fHM->H1("fhMismatchSrc")->SetMarkerSize(1.9); - - vector<string> labels {"MC", - "STS", - "STS-Acc RICH", - "STS-RICH", - "STS-RICH true", - "STS-NoRICH", - "STS-NoRICH RF", - "STS-NoRICH RM", - "STS-NoRICH NoRF", - "STS-NoRICH NoPrj", - "STS-RICH wrong", - "STS-RICH wrong RF", - "STS-RICH wrong RM"}; - - for (size_t i = 0; i < labels.size(); i++) { - fHM->H1("fhMismatchSrc")->GetXaxis()->SetBinLabel(i + 1, labels[i].c_str()); - } - fHM->H1("fhMismatchSrc")->GetXaxis()->SetLabelSize(0.03); - } - { fHM->CreateCanvas("richqa_mismatch_src_mom", "richqa_mismatch_src_mom", 1000, 800); vector<string> labels {"MC", @@ -548,6 +548,8 @@ bool CbmRichRecoQa::IsMcPion(const CbmMCTrack* mctrack) void CbmRichRecoQa::Finish() { + DrawMismatchSrc(); + TDirectory* oldir = gDirectory; TFile* outFile = FairRootManager::Instance()->GetOutFile(); if (outFile != nullptr) { @@ -558,7 +560,7 @@ void CbmRichRecoQa::Finish() DrawHist(); fHM->SaveCanvasToImage(fOutputDir); - + fHM->Clear(); gDirectory->cd(oldir->GetPath()); } @@ -576,6 +578,7 @@ void CbmRichRecoQa::DrawFromFile(const string& fileName, const string& outputDir TFile* file = new TFile(fileName.c_str()); fHM->ReadFromFile(file); + DrawMismatchSrc(); DrawHist(); fHM->SaveCanvasToImage(fOutputDir); diff --git a/reco/detectors/rich/qa/CbmRichRecoQa.h b/reco/detectors/rich/qa/CbmRichRecoQa.h index 4e5a731d1f413c40f97f1cab5906d107c5f7b4c1..23366c426452ca1ddcc426fb845822d65e99dc61 100644 --- a/reco/detectors/rich/qa/CbmRichRecoQa.h +++ b/reco/detectors/rich/qa/CbmRichRecoQa.h @@ -87,6 +87,11 @@ private: */ void RingTrackMismatchSource(); + /** + * \brief Draw MismatchSrc histogram and canvas. + */ + void DrawMismatchSrc(); + /** * \brief Draw histograms. */ diff --git a/reco/detectors/rich/qa/CbmRichUrqmdTest.cxx b/reco/detectors/rich/qa/CbmRichUrqmdTest.cxx index 8a9c401646e453e44227b3fc11ff0c9ef6fe0247..4146849220d3a14f8c23495a488e8c4ad55b65e1 100644 --- a/reco/detectors/rich/qa/CbmRichUrqmdTest.cxx +++ b/reco/detectors/rich/qa/CbmRichUrqmdTest.cxx @@ -71,7 +71,7 @@ void CbmRichUrqmdTest::Exec(Option_t* /*option*/) { fEventNum++; - cout << "CbmRichUrqmdTest, event No. " << fEventNum << endl; + LOG(info) << "CbmRichUrqmdTest, event No. " << fEventNum; FillRichRingNofHits(); NofRings(); @@ -170,7 +170,7 @@ void CbmRichUrqmdTest::NofRings() const CbmRichRing* ring = static_cast<CbmRichRing*>(fRichRings->At(iR)); if (ring == nullptr) continue; const CbmTrackMatchNew* ringMatch = static_cast<CbmTrackMatchNew*>(fRichRingMatches->At(iR)); - if (ringMatch == nullptr) continue; + if (ringMatch == nullptr || ringMatch->GetNofLinks() < 1) continue; auto matchedLink = ringMatch->GetMatchedLink(); const CbmMCTrack* mcTrack = static_cast<CbmMCTrack*>(fMcTracks->Get(matchedLink)); @@ -606,7 +606,7 @@ void CbmRichUrqmdTest::Finish() DrawHist(); fHM->SaveCanvasToImage(fOutputDir); - + fHM->Clear(); gDirectory->cd(oldir->GetPath()); }