From 6d9dd2acc845948fd86bee021359e12df5fc58f4 Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Tue, 5 Dec 2023 14:54:38 +0100 Subject: [PATCH] Add event based CI tests for MVD QA Add CbmMvdQa to the reconstruction test to create residuals for the MVD. Small fixes in CbmMvdQa to get the task running again. Attach tracks only of requested. Fix issue when writting the output. --- analysis/detectors/mvd/qa/CbmMvdQa.cxx | 96 +++++++++++++++++--------- macro/mvd/qa/CMakeLists.txt | 14 ++-- macro/mvd/qa/mvd_qa4_reco_event.C | 2 - 3 files changed, 70 insertions(+), 42 deletions(-) diff --git a/analysis/detectors/mvd/qa/CbmMvdQa.cxx b/analysis/detectors/mvd/qa/CbmMvdQa.cxx index 411296cf92..29af627019 100644 --- a/analysis/detectors/mvd/qa/CbmMvdQa.cxx +++ b/analysis/detectors/mvd/qa/CbmMvdQa.cxx @@ -119,13 +119,29 @@ InitStatus CbmMvdQa::Init() fBadTracks = new TClonesArray("CbmStsTrack", 5000); ioman->Register("BadTracks", "sts", fBadTracks, IsOutputBranchPersistent("BadTracks")); - fStsTrackMatches = (TClonesArray*) ioman->GetObject("StsTrackMatch"); - fStsTrackArray = (TClonesArray*) ioman->GetObject("StsTrack"); - fGlobalTrackArray = (TClonesArray*) ioman->GetObject("GlobalTrack"); + if (useTrackQa) { + fStsTrackMatches = (TClonesArray*) ioman->GetObject("StsTrackMatch"); + fStsTrackArray = (TClonesArray*) ioman->GetObject("StsTrack"); + fGlobalTrackArray = (TClonesArray*) ioman->GetObject("GlobalTrack"); - if (!fStsTrackArray) { Fatal("CbmMvdQa: StsTrackArray not found (!)", " That's bad. "); } + if (!fStsTrackArray) { + Fatal("CbmMvdQa: StsTrackArray not found (!)", " That's bad. "); + } + + // fPrimVtx = (CbmVertex*) ioman->GetObject("PrimaryVertex"); + // Get pointer to PrimaryVertex object from IOManager if it exists + // The old name for the object is "PrimaryVertex" the new one + // "PrimaryVertex." Check first for the new name + fPrimVtx = dynamic_cast<CbmVertex*>(ioman->GetObject("PrimaryVertex.")); + if (nullptr == fPrimVtx) { + fPrimVtx = dynamic_cast<CbmVertex*>(ioman->GetObject("PrimaryVertex")); + } + if (nullptr == fPrimVtx) { + // LOG(fatal) << "No primary vertex"; + } + } - fMcPoints = (TClonesArray*) ioman->GetObject("MvdPileUpMC"); // PileUp Mc points + fMcPoints = (TClonesArray*) ioman->GetObject("MvdPoint"); // PileUp Mc points fMvdDigis = (TClonesArray*) ioman->GetObject("MvdDigi"); fMvdCluster = (TClonesArray*) ioman->GetObject("MvdCluster"); fMvdHits = (TClonesArray*) ioman->GetObject("MvdHit"); @@ -135,16 +151,6 @@ InitStatus CbmMvdQa::Init() if (fMvdHits->GetEntriesFast() != fMvdHitMatchArray->GetEntriesFast()) LOG(error) << "MvdHit and MvdHitMatch Arrays do not have the same size"; - // fPrimVtx = (CbmVertex*) ioman->GetObject("PrimaryVertex"); - // Get pointer to PrimaryVertex object from IOManager if it exists - // The old name for the object is "PrimaryVertex" the new one - // "PrimaryVertex." Check first for the new name - fPrimVtx = dynamic_cast<CbmVertex*>(ioman->GetObject("PrimaryVertex.")); - if (nullptr == fPrimVtx) { fPrimVtx = dynamic_cast<CbmVertex*>(ioman->GetObject("PrimaryVertex")); } - if (nullptr == fPrimVtx) { - // LOG(fatal) << "No primary vertex"; - } - fListMCTracks = (TClonesArray*) ioman->GetObject("MCTrack"); if (!fMcPoints) { @@ -549,7 +555,9 @@ void CbmMvdQa::ExecMCQa() for (Int_t i = 0; i < nrMcPoints; ++i) { CbmMvdPoint* curMc = (CbmMvdPoint*) fMcPoints->At(i); - if (curMc->GetZ() < fFirstMvdPos + 1) { fMC2F[0]->Fill(curMc->GetX(), curMc->GetY()); } + if (curMc->GetZ() < fFirstMvdPos + 1) { + fMC2F[0]->Fill(curMc->GetX(), curMc->GetY()); + } } } // ------------------------------------------------------------------------- @@ -578,7 +586,8 @@ void CbmMvdQa::ExecDigiQa() Double_t lab[3] = {0., 0., 0.}; if (curSens->GetDetectorID() == curDigi->GetDetectorId()) { curSens->PixelToTop(curDigi->GetPixelX(), curDigi->GetPixelY(), lab); - if (curSens->GetZ() < 6) fDigi2F[1]->Fill(lab[0], lab[1]); + if (curSens->GetZ() < 6) + fDigi2F[1]->Fill(lab[0], lab[1]); else if (curSens->GetZ() < 11) fDigi2F[2]->Fill(lab[0], lab[1]); else if (curSens->GetZ() < 16) @@ -586,7 +595,9 @@ void CbmMvdQa::ExecDigiQa() else fDigi2F[4]->Fill(lab[0], lab[1]); - if (lab[0] > -2 && lab[0] <= -0.5 && lab[1] >= -1.5 && lab[1] <= 1.5) { fDigi2F[0]->Fill(lab[0], lab[1]); } + if (lab[0] > -2 && lab[0] <= -0.5 && lab[1] >= -1.5 && lab[1] <= 1.5) { + fDigi2F[0]->Fill(lab[0], lab[1]); + } } } } @@ -667,7 +678,8 @@ void CbmMvdQa::ExecTrackQa() stsTrack = (CbmStsTrack*) fStsTrackArray->At(glTrack->GetStsTrackIndex()); trackMatch = (CbmTrackMatchNew*) fStsTrackMatches->At(glTrack->GetStsTrackIndex()); mcMatchId = trackMatch->GetMatchedLink().GetIndex(); - if (mcMatchId > -1) mcTrack = (CbmMCTrack*) fListMCTracks->At(mcMatchId); + if (mcMatchId > -1) + mcTrack = (CbmMCTrack*) fListMCTracks->At(mcMatchId); else continue; @@ -690,7 +702,8 @@ void CbmMvdQa::ExecTrackQa() if (hasHitFirst) { if (mcP < 1.5) { fnrTrackslowP++; - if (mcP >= 1) fhigh++; + if (mcP >= 1) + fhigh++; else if (mcP >= 0.5) fmid++; else @@ -749,22 +762,27 @@ void CbmMvdQa::ExecTrackQa() if (glQP >= 0) { fTracks1F[22]->Fill(glX); - if (mcP >= 1) fTracks1F[26]->Fill(glX); + if (mcP >= 1) + fTracks1F[26]->Fill(glX); else fTracks1F[27]->Fill(glX); } if (glQP < 0) { fTracks1F[23]->Fill(glX); - if (mcP >= 1) fTracks1F[28]->Fill(glX); + if (mcP >= 1) + fTracks1F[28]->Fill(glX); else fTracks1F[29]->Fill(glX); } - if (ChiSqOverNDF > 1) fTracks1F[24]->Fill(glX); + if (ChiSqOverNDF > 1) + fTracks1F[24]->Fill(glX); else fTracks1F[25]->Fill(glX); } - if (ChiSqOverNDF > 1) { fTracks1F[20]->Fill(sqrt((glX * glX) + (glY * glY))); } + if (ChiSqOverNDF > 1) { + fTracks1F[20]->Fill(sqrt((glX * glX) + (glY * glY))); + } else { fTracks1F[21]->Fill(sqrt((glX * glX) + (glY * glY))); } @@ -779,7 +797,8 @@ void CbmMvdQa::ExecTrackQa() if (trueOverAll == 1.) fTracks2F[4]->Fill(mcP, mcP - glP); } - if (hasHitFirst) fTracks2F[5]->Fill(mcP, mcP - glP); + if (hasHitFirst) + fTracks2F[5]->Fill(mcP, mcP - glP); else fTracks2F[6]->Fill(mcP, mcP - glP); @@ -788,7 +807,8 @@ void CbmMvdQa::ExecTrackQa() if (ChiSqOverNDF <= 1) fTracks2F[8]->Fill(hitFirst[0], hitFirst[1]); if (mcP < 1.5) { fTracks2F[9]->Fill(0.1, 0.1); - if (mcP >= 1) fTracks2F[11]->Fill(1.25, 0.1); + if (mcP >= 1) + fTracks2F[11]->Fill(1.25, 0.1); else if (mcP >= 0.5) fTracks2F[11]->Fill(0.75, 0.1); else @@ -801,7 +821,8 @@ void CbmMvdQa::ExecTrackQa() if (hasHitFirstTrue) { if (mcP < 1.5) { fTracks2F[9]->Fill(0.1, 0.70); - if (mcP >= 1) fTracks2F[11]->Fill(1.25, 0.7); + if (mcP >= 1) + fTracks2F[11]->Fill(1.25, 0.7); else if (mcP >= 0.5) fTracks2F[11]->Fill(0.75, 0.7); else @@ -847,7 +868,9 @@ Bool_t CbmMvdQa::HasHitFirstTrue(Int_t MCtrackID, CbmStsTrack* stsTrack) const CbmMvdPoint* point = nullptr; for (Int_t iHit = 0; iHit < nrOfMvdHits; iHit++) { CbmMatch* mvdMatch = (CbmMatch*) fMvdHitMatchArray->At(stsTrack->GetMvdHitIndex(iHit)); - if (mvdMatch) { nrOfLinks = mvdMatch->GetNofLinks(); } + if (mvdMatch) { + nrOfLinks = mvdMatch->GetNofLinks(); + } else { continue; // any kind of error in the matching } @@ -859,7 +882,9 @@ Bool_t CbmMvdQa::HasHitFirstTrue(Int_t MCtrackID, CbmStsTrack* stsTrack) } else mcTrackId = point->GetTrackID(); - if (mcTrackId == MCtrackID && point->GetZOut() < fFirstMvdPos + 1) { return kTRUE; } + if (mcTrackId == MCtrackID && point->GetZOut() < fFirstMvdPos + 1) { + return kTRUE; + } } } @@ -875,7 +900,9 @@ void CbmMvdQa::GetFirstMCPos(CbmStsTrack* stsTrack, Float_t* pos) const CbmMvdPoint* point = nullptr; for (Int_t iHit = 0; iHit < nrOfMvdHits; iHit++) { CbmMatch* mvdMatch = (CbmMatch*) fMvdHitMatchArray->At(stsTrack->GetMvdHitIndex(iHit)); - if (mvdMatch) { nrOfLinks = mvdMatch->GetNofLinks(); } + if (mvdMatch) { + nrOfLinks = mvdMatch->GetNofLinks(); + } else { continue; // any kind of error in the matching } @@ -926,7 +953,9 @@ void CbmMvdQa::SetMatches(Int_t MCtrackID, CbmStsTrack* stsTrack) } else mcTrackId = point->GetTrackID(); - if (mcTrackId == MCtrackID) { hasTrack = kTRUE; } + if (mcTrackId == MCtrackID) { + hasTrack = kTRUE; + } } if (!hasTrack) falseCounter++; } @@ -941,14 +970,15 @@ void CbmMvdQa::SetMatches(Int_t MCtrackID, CbmStsTrack* stsTrack) //----------------------------------------------------------------------------------------- void CbmMvdQa::Finish() { - foutFile->cd(); + + // foutFile->cd(); if (useMcQa) FinishMCQa(); if (useDigiQa) FinishDigiQa(); if (useHitQa) FinishHitQa(); if (useTrackQa) FinishTrackQa(); - foutFile->Write(); + // foutFile->Write(); } //----------------------------------------------------------------------------------------- diff --git a/macro/mvd/qa/CMakeLists.txt b/macro/mvd/qa/CMakeLists.txt index cbecc2c9df..96f0d9dc5f 100644 --- a/macro/mvd/qa/CMakeLists.txt +++ b/macro/mvd/qa/CMakeLists.txt @@ -56,13 +56,13 @@ SET_TESTS_PROPERTIES(mvd_qa3_digitize_event PROPERTIES FIXTURES_SETUP fixture_mvd_qa4_reco_event ) -#GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/mvd/qa/mvd_qa4_reco_event.C) -#add_test(mvd_qa4_reco_event ${CBMROOT_BINARY_DIR}/macro/mvd/qa/mvd_qa4_reco_event.sh) -#SET_TESTS_PROPERTIES(mvd_qa4_reco_event PROPERTIES -# TIMEOUT "300" -# PASS_REGULAR_EXPRESSION "Test Passed;All ok" -# FIXTURES_REQUIRED fixture_mvd_qa4_reco_event -#) +GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/mvd/qa/mvd_qa4_reco_event.C) +add_test(mvd_qa4_reco_event ${CBMROOT_BINARY_DIR}/macro/mvd/qa/mvd_qa4_reco_event.sh) +SET_TESTS_PROPERTIES(mvd_qa4_reco_event PROPERTIES + TIMEOUT "300" + PASS_REGULAR_EXPRESSION "Test Passed;All ok" + FIXTURES_REQUIRED fixture_mvd_qa4_reco_event +) Install(FILES mvd_qa1_transUrqmd.C mvd_qa2_transDelta.C mvd_qa3_digitize.C mvd_qa4_reco.C DESTINATION share/cbmroot/macro/mvd diff --git a/macro/mvd/qa/mvd_qa4_reco_event.C b/macro/mvd/qa/mvd_qa4_reco_event.C index a19f599813..9e4ad9c2e9 100644 --- a/macro/mvd/qa/mvd_qa4_reco_event.C +++ b/macro/mvd/qa/mvd_qa4_reco_event.C @@ -99,14 +99,12 @@ void mvd_qa4_reco_event(const char* setup = "sis100_electron") mvd_hit->SetMode(ECbmRecoMode::EventByEvent); fRun->AddTask(mvd_hit); -/* CbmMatchRecoToMC* match = new CbmMatchRecoToMC(); fRun->AddTask(match); CbmMvdQa* qaTask = new CbmMvdQa("CbmMvdQa"); qaTask->SetUseHitQa(); fRun->AddTask(qaTask); -*/ //---------------------------------------------------------------------------- // ----- Parameter database ----------------------------------------------- FairRuntimeDb* rtdb = fRun->GetRuntimeDb(); -- GitLab