diff --git a/reco/eventbuilder/digis/CbmSeedFinderQa.cxx b/reco/eventbuilder/digis/CbmSeedFinderQa.cxx index 281b54332f38e620cdc9b728ae264ef6af838efa..842e69ec1863224118b43eb587675bb03d41f147 100644 --- a/reco/eventbuilder/digis/CbmSeedFinderQa.cxx +++ b/reco/eventbuilder/digis/CbmSeedFinderQa.cxx @@ -20,13 +20,13 @@ CbmSeedFinderQa::CbmSeedFinderQa() : fOutFolder("SeedFinderQA", "Seed finder QA" // --- Init histograms fhLinkedMCEventsPerTrigger = - new TH1F("fhLinkedMCEventsPerTrigger", "Linked MC events per trigger (=0 for pure noise)", 5, -1, 4); + new TH1F("fhLinkedMCEventsPerTrigger", "Linked MC events per trigger (=0 for pure noise)", 5, -1.5, 3.5); fhLinkedMCEventsPerTrigger->SetCanExtend(TH1::kAllAxes); - fhLinkedTriggersPerMCEvent = new TH1F("fhLinkedTriggersPerMCEvent", "Linked triggers per MC event", 5, -1, 4); + fhLinkedTriggersPerMCEvent = new TH1F("fhLinkedTriggersPerMCEvent", "Linked triggers per MC event", 5, -1.5, 3.5); fhLinkedTriggersPerMCEvent->SetCanExtend(TH1::kAllAxes); - fhMatchedTriggersPerMCEvent = new TH1F("fhMatchedTriggersPerMCEvent", "Matched triggers per MC event", 5, -1, 4); + fhMatchedTriggersPerMCEvent = new TH1F("fhMatchedTriggersPerMCEvent", "Matched triggers per MC event", 5, -1.5, 3.5); fhMatchedTriggersPerMCEvent->SetCanExtend(TH1::kAllAxes); fhCorrectDigiRatio = new TH1F("fhCorrectDigiRatio", "Correct digis per seed [pct]", 416, -2, 102); @@ -43,6 +43,9 @@ CbmSeedFinderQa::CbmSeedFinderQa() : fOutFolder("SeedFinderQA", "Seed finder QA" fhTimeOffset = new TH1F("fhTimeOffsetMatched", "tSeed - tMCMatched [ns]", 20, -5, 5); fhTimeOffset->SetCanExtend(TH1::kAllAxes); + fhTimeOffsetSingletOnly = new TH1F("fhTimeOffsetSingletOnly", "tSeed - tMCMatched [ns], one-to-one only", 20, -5, 5); + fhTimeOffsetSingletOnly->SetCanExtend(TH1::kAllAxes); + fhTimeOffsetClosest = new TH1F("fhTimeOffsetClosest", "tSeed - tMCClosest [ns]", 20, -5, 5); fhTimeOffsetClosest->SetCanExtend(TH1::kAllAxes); @@ -53,13 +56,14 @@ CbmSeedFinderQa::CbmSeedFinderQa() : fOutFolder("SeedFinderQA", "Seed finder QA" histFolder->Add(fhCorrectVsFound); histFolder->Add(fhCorrectVsFoundNoNoise); histFolder->Add(fhTimeOffset); + histFolder->Add(fhTimeOffsetSingletOnly); histFolder->Add(fhTimeOffsetClosest); histFolder->Add(fhLinkedMCEventsPerTrigger); histFolder->Add(fhLinkedTriggersPerMCEvent); histFolder->Add(fhMatchedTriggersPerMCEvent); fCanv = new CbmQaCanvas("cSummary", "", 4 * 400, 3 * 400); - fCanv->Divide2D(10); + fCanv->Divide2D(11); fOutFolder.Add(fCanv); } @@ -197,7 +201,6 @@ void CbmSeedFinderQa::FillQaMCInfo() vMatchedTriggersPerMCEvent.resize(nEvents, 0); for (uint32_t iSeed = 0; iSeed < fvEventMatchesPerTs.size(); iSeed++) { - const CbmMatch eventMatch = fvEventMatchesPerTs.at(iSeed); for (int32_t iLink = 0; iLink < eventMatch.GetNofLinks(); iLink++) { const CbmLink eventLink = eventMatch.GetLink(iLink); @@ -207,6 +210,16 @@ void CbmSeedFinderQa::FillQaMCInfo() vMatchedTriggersPerMCEvent[fEventList->GetEventIndex(matchedLink)]++; } + for (uint32_t iSeed = 0; iSeed < fvEventMatchesPerTs.size(); iSeed++) { + const CbmMatch eventMatch = fvEventMatchesPerTs.at(iSeed); + const CbmLink matchedLink = eventMatch.GetMatchedLink(); + if (vMatchedTriggersPerMCEvent[fEventList->GetEventIndex(matchedLink)] == 1) { + const double seedTime = fvSeedTimesPerTs[iSeed]; + const double timeDiff = seedTime - fEventList->GetEventTime(matchedLink.GetEntry(), matchedLink.GetFile()); + fhTimeOffsetSingletOnly->Fill(timeDiff); + } + } + for (const auto& value : vLinkedTriggersPerMCEvent) { fhLinkedTriggersPerMCEvent->Fill(value); } @@ -306,15 +319,18 @@ void CbmSeedFinderQa::WriteHistos() fhTimeOffset->DrawCopy("colz", ""); fCanv->cd(8); - fhTimeOffsetClosest->DrawCopy("colz", ""); + fhTimeOffsetSingletOnly->DrawCopy("colz", ""); fCanv->cd(9); - fhLinkedMCEventsPerTrigger->DrawCopy("colz", ""); + fhTimeOffsetClosest->DrawCopy("colz", ""); fCanv->cd(10); - fhLinkedTriggersPerMCEvent->DrawCopy("colz", ""); + fhLinkedMCEventsPerTrigger->DrawCopy("colz", ""); fCanv->cd(11); + fhLinkedTriggersPerMCEvent->DrawCopy("colz", ""); + + fCanv->cd(12); fhMatchedTriggersPerMCEvent->DrawCopy("colz", ""); FairSink* sink = FairRootManager::Instance()->GetSink(); diff --git a/reco/eventbuilder/digis/CbmSeedFinderQa.h b/reco/eventbuilder/digis/CbmSeedFinderQa.h index d572e148281a21df7a28da6a0768c4439820435c..a95fdfa07fce9571c9fdfc8c1e4aadcbcfb10710 100644 --- a/reco/eventbuilder/digis/CbmSeedFinderQa.h +++ b/reco/eventbuilder/digis/CbmSeedFinderQa.h @@ -106,6 +106,8 @@ private: TH2I* fhCorrectVsFoundNoNoise = nullptr; /// correct digis per event vs found digis per event, disregarding noise TH1F* fhTimeOffset = nullptr; /// difference between true event time and seed time TH1F* fhTimeOffsetClosest = nullptr; /// difference between seed time and closest MC event time + TH1F* fhTimeOffsetSingletOnly = + nullptr; /// difference between true event time and seed time for one-to-one matched cases CbmQaCanvas* fCanv; ///summary canvas diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx index e2249d02ab55ffe60062590b8e71c45a17a33fdd..bca3bcc80b59218f9354854a9c8f346cc70743f3 100644 --- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx +++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx @@ -57,6 +57,7 @@ void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<inType>* vIn, c for (uint32_t i = 0; i < fvSeedTimes->size(); i++) { fQa->FillQaSeedInfo(i, i, &eventMatches, fvSeedTimes->at(i)); } + fQa->FillQaMCInfo(); } return; } diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h index e85bf76969b60489d02f1eeabfe7f216e9b9b262..5c2b49b5bf740dbffcae5c7a67edfdf97803d435 100644 --- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h +++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h @@ -77,6 +77,9 @@ public: fIdealModeFileId = fileId; } + /** @brief Is ``ideal mode'' switched on? **/ + bool IsIdealMode() { return fbIdealMode; } + /** @brief Returns number of seed times currently stored in buffer. */ size_t GetNofSeeds() { return fvSeedTimes->size(); }