From 6e6bbe88895b127ab86ffef4ce84b2b3258ee2ea Mon Sep 17 00:00:00 2001 From: Valentina <v.akishina@gsi.de> Date: Mon, 7 Nov 2022 17:17:30 +0100 Subject: [PATCH] L1: fix performance for noise and for mCBM timebased --- reco/L1/CbmL1.h | 6 ++ reco/L1/CbmL1Performance.cxx | 13 +++- reco/L1/CbmL1ReadEvent.cxx | 137 ++++++++++++++++++++++++----------- 3 files changed, 111 insertions(+), 45 deletions(-) diff --git a/reco/L1/CbmL1.h b/reco/L1/CbmL1.h index 85948b5c73..64b201f2d7 100644 --- a/reco/L1/CbmL1.h +++ b/reco/L1/CbmL1.h @@ -484,6 +484,12 @@ private: int fNpointsTrd = 0; ///< Number of MC points for TRD int fNpointsTof = 0; ///< Number of MC points for TOF + int fNpointsMvdAll = 0; ///< Number of MC points for MVD + int fNpointsStsAll = 0; ///< Number of MC points for STS + int fNpointsMuchAll = 0; ///< Number of MC points for MuCh + int fNpointsTrdAll = 0; ///< Number of MC points for TRD + int fNpointsTofAll = 0; ///< Number of MC points for TOF + L1Vector<CbmL1MCPoint> fvMCPoints = {"CbmL1::fvMCPoints"}; ///< Container of MC points L1Vector<int> fvMCPointIndexesTs = {"CbmL1::fvMCPointIndexesTs"}; ///< Indexes of MC points in TS diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index 6ecde1253e..8487f85a75 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -1935,7 +1935,8 @@ void CbmL1::InputPerformance() Float_t bestWeight = 0.f; for (Int_t iLink = 0; iLink < stsHitMatch.GetNofLinks(); iLink++) { if (stsHitMatch.GetLink(iLink).GetWeight() > bestWeight) { - link = stsHitMatch.GetLink(iLink); + link = stsHitMatch.GetLink(iLink); + if (link.GetIndex() < 0) break; bestWeight = link.GetWeight(); Int_t iFile = link.GetFile(); Int_t iEvent = link.GetEntry(); @@ -1997,6 +1998,7 @@ void CbmL1::InputPerformance() float mcWeight = -1.f; for (int iLink = 0; iLink < hm->GetNofLinks(); iLink++) { const CbmLink& link = hm->GetLink(iLink); + if (link.GetIndex() < 0) break; if (link.GetWeight() < mcWeight) continue; mcWeight = link.GetWeight(); pt = dynamic_cast<CbmMvdPoint*>(fpMvdPoints->Get(&link)); @@ -2049,6 +2051,7 @@ void CbmL1::InputPerformance() for (int iLink = 0; iLink < hm->GetNofLinks(); iLink++) { totalWeight += hm->GetLink(iLink).GetWeight(); if (hm->GetLink(iLink).GetWeight() > bestWeight) { + if (hm->GetLink(iLink).GetIndex() < 0) break; bestWeight = hm->GetLink(iLink).GetWeight(); iMCPoint = hm->GetLink(iLink).GetIndex(); link = hm->GetLink(iLink); @@ -2121,6 +2124,10 @@ void CbmL1::InputPerformance() for (int iLink = 0; iLink < hm->GetNofLinks(); iLink++) { totalWeight += hm->GetLink(iLink).GetWeight(); if (hm->GetLink(iLink).GetWeight() > bestWeight) { + if (hm->GetLink(iLink).GetIndex() < 0) { + iMCPoint = -1; + break; + } bestWeight = hm->GetLink(iLink).GetWeight(); iMCPoint = hm->GetLink(iLink).GetIndex(); link = hm->GetLink(iLink); @@ -2190,6 +2197,10 @@ void CbmL1::InputPerformance() for (int iLink = 0; iLink < hm->GetNofLinks(); iLink++) { //totalWeight += hm->GetLink(iLink).GetWeight(); if (hm->GetLink(iLink).GetWeight() > bestWeight) { + if (hm->GetLink(iLink).GetIndex() < 0) { + iMCPoint = -1; + break; + }; bestWeight = hm->GetLink(iLink).GetWeight(); iMCPoint = hm->GetLink(iLink).GetIndex(); link = hm->GetLink(iLink); diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx index 544bee882d..8c6e07cc59 100644 --- a/reco/L1/CbmL1ReadEvent.cxx +++ b/reco/L1/CbmL1ReadEvent.cxx @@ -178,8 +178,8 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kMvd>(int iHit) const int iHitExt = -(1 + iHit); // TODO: SZh 28.08.2022: this should be replaced with iHitExt = hit.extIdex const auto* hitMatch = dynamic_cast<CbmMatch*>(fpMvdHitMatches->At(iHitExt)); assert(hitMatch); - if (hitMatch->GetNofLinks() > 0 && hitMatch->GetMatchedLink().GetIndex() < fNpointsMvd) { - iPoint = hitMatch->GetMatchedLink().GetIndex(); + if (hitMatch->GetNofLinks() > 0 && hitMatch->GetLink(0).GetIndex() < fNpointsMvd) { + iPoint = hitMatch->GetLink(0).GetIndex(); } } return iPoint; @@ -211,16 +211,21 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kSts>(int iHit) const float bestWeight = 0.f; for (int iLink = 0; iLink < hitMatch.GetNofLinks(); ++iLink) { const CbmLink& link = hitMatch.GetLink(iLink); - int iFile = link.GetFile(); - int iEvent = link.GetEntry(); - int iIndex = link.GetIndex(); + + int iIndex = link.GetIndex(); + if (iIndex < 0) { + iPoint = -1; + break; + } + int iFile = link.GetFile(); + int iEvent = link.GetEntry(); if (fLegacyEventMode) { iFile = fvFileEvent.begin()->first; iEvent = fvFileEvent.begin()->second; } - auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex + fNpointsMvd, iEvent, iFile)); + auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex + fNpointsMvdAll, iEvent, iFile)); assert(itPoint != fmMCPointsLinksMap.cend()); if (link.GetWeight() > bestWeight) { @@ -242,13 +247,17 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kMuch>(int iHit) const if (hitMatchMuch) { for (int iLink = 0; iLink < hitMatchMuch->GetNofLinks(); ++iLink) { if (hitMatchMuch->GetLink(iLink).GetIndex() < fNpointsMuch) { - int iMc = hitMatchMuch->GetLink(iLink).GetIndex(); - int iIndex = iMc + fNpointsMvd + fNpointsSts; - int iFile = hitMatchMuch->GetMatchedLink().GetFile(); - int iEvent = hitMatchMuch->GetMatchedLink().GetEntry(); + int iMc = hitMatchMuch->GetLink(iLink).GetIndex(); + if (iMc < 0) { + iPoint = -1; + break; + } - auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile)); - if (itPoint == fmMCPointsLinksMap.cend()) continue; + int iFile = hitMatchMuch->GetLink(iLink).GetFile(); + int iEvent = hitMatchMuch->GetLink(iLink).GetEntry(); + + auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iMc + fNpointsMvdAll + fNpointsStsAll, iEvent, iFile)); + assert(itPoint != fmMCPointsLinksMap.cend()); iPoint = itPoint->second; } } @@ -266,9 +275,19 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kTrd>(int iHit) const if (hitMatch) { int iMC = -1; if (hitMatch->GetNofLinks() > 0) { - iMC = hitMatch->GetMatchedLink().GetIndex(); + iMC = hitMatch->GetLink(0).GetIndex(); assert(iMC >= 0 && iMC < fNpointsTrd); - iPoint = iMC + fNpointsMvd + fNpointsSts + fNpointsMuch; + + int iMc = hitMatch->GetLink(0).GetIndex(); + if (iMc < 0) return iPoint; + int iIndex = iMc + fNpointsMvdAll + fNpointsStsAll + fNpointsMuchAll; + int iFile = hitMatch->GetLink(0).GetFile(); + int iEvent = hitMatch->GetLink(0).GetEntry(); + + auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile)); + assert(itPoint != fmMCPointsLinksMap.cend()); + if (itPoint == fmMCPointsLinksMap.cend()) return iPoint; + iPoint = itPoint->second; } } return iPoint; @@ -283,10 +302,13 @@ int CbmL1::MatchHitWithMc<L1DetectorID::kTof>(int iHit) const const auto* hitMatch = dynamic_cast<const CbmMatch*>(fpTofHitMatches->At(iHit)); if (hitMatch) { for (int iLink = 0; iLink < hitMatch->GetNofLinks(); ++iLink) { - int iFile = hitMatch->GetLink(iLink).GetFile(); - int iEvent = hitMatch->GetLink(iLink).GetEntry(); - int iMc = hitMatch->GetLink(iLink).GetIndex(); - int iIndex = iMc + fNpointsMvd + fNpointsSts + fNpointsMuch + fNpointsTrd; + int iMc = hitMatch->GetLink(iLink).GetIndex(); + if (iMc < 0) return iPoint; + int iFile = hitMatch->GetLink(iLink).GetFile(); + int iEvent = hitMatch->GetLink(iLink).GetEntry(); + + assert(iMc >= 0 && iMc < fpTofPoints->Size(iFile, iEvent)); + int iIndex = iMc + fNpointsMvdAll + fNpointsStsAll + fNpointsMuchAll + fNpointsTrdAll; auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile)); if (itPoint == fmMCPointsLinksMap.cend()) { continue; } iPoint = itPoint->second; @@ -382,6 +404,23 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int fvMCPointIndexesTs.clear(); fvMCPointIndexesTs.reserve(fvMCPoints.capacity()); + fNpointsMvdAll = 0; + fNpointsStsAll = 0; + fNpointsMuchAll = 0; + fNpointsTrdAll = 0; + fNpointsTofAll = 0; + + + for (DFSET::iterator set_it = fvFileEvent.begin(); set_it != fvFileEvent.end(); ++set_it) { + Int_t iFile = set_it->first; + Int_t iEvent = set_it->second; + if (fUseMVD) fNpointsMvdAll += fpMvdPoints->Size(iFile, iEvent); + if (fUseSTS) fNpointsStsAll += fpStsPoints->Size(iFile, iEvent); + if (fUseMUCH) fNpointsMuchAll += fpMuchPoints->Size(iFile, iEvent); + if (fUseTRD) fNpointsTrdAll += fpTrdPoints->Size(iFile, iEvent); + if (fUseTOF) fNpointsTofAll += fpTofPoints->Size(iFile, iEvent); + } + for (DFSET::iterator set_it = fvFileEvent.begin(); set_it != fvFileEvent.end(); ++set_it) { Int_t iFile = set_it->first; Int_t iEvent = set_it->second; @@ -412,6 +451,8 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int assert(itTrack != fmMCTracksLinksMap.cend()); MC.ID = itTrack->second; fvMCTracks[MC.ID].Points.push_back_no_warning(fvMCPoints.size()); + + fmMCPointsLinksMap[CbmL1LinkKey(iMC, iEvent, iFile)] = fvMCPoints.size(); fvMCPoints.push_back(MC); fvMCPointIndexesTs.push_back(0); @@ -425,6 +466,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int firstStsPoint = fvMCPoints.size(); if (fUseSTS && fpStsPoints) { + Int_t nMC = fpStsPoints->Size(iFile, iEvent); double maxDeviation = 0; for (Int_t iMC = 0; iMC < nMC; iMC++) { @@ -450,7 +492,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int assert(itTrack != fmMCTracksLinksMap.cend()); MC.ID = itTrack->second; fvMCTracks[MC.ID].Points.push_back_no_warning(fvMCPoints.size()); - fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvd, iEvent, iFile)] = fvMCPoints.size(); + fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvdAll, iEvent, iFile)] = fvMCPoints.size(); fvMCPoints.push_back(MC); fvMCPointIndexesTs.push_back(0); fNpointsSts++; @@ -471,7 +513,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int const L1Station* sta = fpAlgo->GetParameters()->GetStations().begin(); for (Int_t iSt = 0; iSt < fNMuchStationsGeom; iSt++) { int iStActive = fpAlgo->GetParameters()->GetStationIndexActive(iSt, L1DetectorID::kMuch); - if (iStActive == -1) { continue; } + assert(iStActive != -1); if (MC.z > sta[iStActive].z[0] - 2.5) { MC.iStation = iStActive; } } assert(MC.iStation >= 0); @@ -479,7 +521,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int assert(itTrack != fmMCTracksLinksMap.cend()); MC.ID = itTrack->second; fvMCTracks[MC.ID].Points.push_back_no_warning(fvMCPoints.size()); - fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvd + fNpointsSts, iEvent, iFile)] = fvMCPoints.size(); + fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvdAll + +fNpointsStsAll, iEvent, iFile)] = fvMCPoints.size(); fvMCPoints.push_back(MC); fvMCPointIndexesTs.push_back(0); fNpointsMuch++; @@ -497,16 +539,16 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int const L1Station* sta = fpAlgo->GetParameters()->GetStations().begin(); for (Int_t iSt = 0; iSt < fNTrdStationsGeom; iSt++) { int iStActive = fpAlgo->GetParameters()->GetStationIndexActive(iSt, L1DetectorID::kTrd); - if (iStActive == -1) { continue; } - if (MC.z > sta[iStActive].z[0] - 4.0) { MC.iStation = iStActive; } + + assert(iStActive != -1); + if (MC.z > sta[iStActive].z[0] - 20.0) { MC.iStation = iStActive; } } - if (MC.iStation < 0) continue; assert(MC.iStation >= 0); auto itTrack = fmMCTracksLinksMap.find(CbmL1LinkKey(MC.ID, iEvent, iFile)); assert(itTrack != fmMCTracksLinksMap.cend()); MC.ID = itTrack->second; fvMCTracks[MC.ID].Points.push_back_no_warning(fvMCPoints.size()); - fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvd + fNpointsSts + fNpointsMuch, iEvent, iFile)] = + fmMCPointsLinksMap[CbmL1LinkKey(iMC + fNpointsMvdAll + fNpointsStsAll + fNpointsMuchAll, iEvent, iFile)] = fvMCPoints.size(); fvMCPoints.push_back(MC); fvMCPointIndexesTs.push_back(0); @@ -535,24 +577,27 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int fTofPointToTrack[iSt][i] = -1; } + std::vector<char> isTofPointMatched; isTofPointMatched.resize(fpTofPoints->Size(iFile, iEvent), 0); for (int iHit = 0; iHit < fpTofHits->GetEntriesFast(); iHit++) { CbmMatch* pHitMatch = L1_DYNAMIC_CAST<CbmMatch*>(fpTofHitMatches->At(iHit)); for (int iLink = 0; iLink < pHitMatch->GetNofLinks(); iLink++) { - Int_t iMC = pHitMatch->GetLink(iLink).GetIndex(); + Int_t iMC = pHitMatch->GetLink(iLink).GetIndex(); + if (iMC < 0) continue; + if (pHitMatch->GetLink(iLink).GetFile() != iFile) continue; + if (pHitMatch->GetLink(iLink).GetEntry() != iEvent) continue; isTofPointMatched[iMC] = 1; } } - for (Int_t iMC = 0; iMC < fpTofPoints->Size(iFile, iEvent); iMC++) { if (isTofPointMatched[iMC] == 0) continue; CbmL1MCPoint MC; if (!ReadMCPoint(&MC, iMC, iFile, iEvent, 4)) { auto itTrack = fmMCTracksLinksMap.find(CbmL1LinkKey(MC.ID, iEvent, iFile)); - if (itTrack == fmMCTracksLinksMap.cend()) { continue; } + assert(itTrack != fmMCTracksLinksMap.cend()); int iTrack = itTrack->second; MC.iStation = -1; @@ -569,9 +614,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int } } MC.iStation = fpAlgo->GetParameters()->GetStationIndexActive(iSta, L1DetectorID::kTof); - if (MC.iStation < 0) continue; assert(MC.iStation >= 0); - if (iSta >= 0) { if (fabs(sta[iSta].z[0] - MC.z) < TofPointToTrackdZ[iSta][iTrack]) { fTofPointToTrack[iSta][iTrack] = iMC; @@ -594,8 +637,8 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int fvMCTracks[iTrack].Points.push_back_no_warning(fvMCPoints.size()); MC.ID = iTrack; - - int iMC = fTofPointToTrack[iTofSta][iTrack] + fNpointsMvd + fNpointsSts + fNpointsMuch + fNpointsTrd; + int iMC = + fTofPointToTrack[iTofSta][iTrack] + fNpointsMvdAll + +fNpointsStsAll + fNpointsMuchAll + fNpointsTrdAll; fmMCPointsLinksMap[CbmL1LinkKey(iMC, iEvent, iFile)] = fvMCPoints.size(); fvMCPoints.push_back(MC); fvMCPointIndexesTs.push_back(0); @@ -820,7 +863,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int if (fUseMUCH && fpMuchPixelHits && (2 != fMuchUseMcHit)) { - Int_t nEnt = fpMuchPixelHits->GetEntriesFast(); + Int_t nEnt = (event ? event->GetNofData(ECbmDataType::kMuchPixelHit) : fpMuchPixelHits->GetEntriesFast()); int firstDetStrip = NStrips; @@ -828,13 +871,16 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int TmpHit th; { - CbmMuchPixelHit* h = static_cast<CbmMuchPixelHit*>(fpMuchPixelHits->At(j)); - th.ExtIndex = j; + Int_t hitIndex = 0; + hitIndex = (event ? event->GetIndex(ECbmDataType::kMuchPixelHit, j) : j); + + CbmMuchPixelHit* h = static_cast<CbmMuchPixelHit*>(fpMuchPixelHits->At(hitIndex)); + + th.ExtIndex = hitIndex; th.Det = 2; th.id = tmpHits.size(); - Int_t stationNumber = CbmMuchGeoScheme::GetStationIndex(h->GetAddress()); Int_t layerNumber = CbmMuchGeoScheme::GetLayerIndex(h->GetAddress()); @@ -850,7 +896,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int // th.iSector = 0; - th.iStripF = firstDetStrip + j; + th.iStripF = firstDetStrip + hitIndex; th.iStripB = th.iStripF; if (NStrips <= th.iStripF) { NStrips = th.iStripF + 1; } @@ -870,7 +916,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int th.u = th.x * st.frontInfo.cos_phi[0] + th.y * st.frontInfo.sin_phi[0]; th.v = th.x * st.backInfo.cos_phi[0] + th.y * st.backInfo.sin_phi[0]; } - th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kMuch>(j) : -1; + th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kMuch>(th.ExtIndex) : -1; if (1 == fMuchUseMcHit && th.iMC > -1) { th.SetHitFromPoint(fvMCPoints[th.iMC], th.iMC, fpAlgo->GetParameters()->GetStation(th.iStation)); } @@ -885,8 +931,8 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int // iMC = matchHitMatch->GetLink(iLink).GetIndex(); // Int_t iIndex = iMC + fNpointsMvd + fNpointsSts; - // Int_t iFile = matchHitMatch->GetMatchedLink().GetFile(); - // Int_t iEvent = matchHitMatch->GetMatchedLink().GetEntry(); + // Int_t iFile = matchHitMatch->GetLink(0).GetFile(); + // Int_t iEvent = matchHitMatch->GetLink(0).GetEntry(); // auto itPoint = fmMCPointsLinksMap.find(CbmL1LinkKey(iIndex, iEvent, iFile)); // if (itPoint == fmMCPointsLinksMap.cend()) continue; @@ -954,8 +1000,10 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int th.Det = 3; th.id = tmpHits.size(); + int stIdx = fpAlgo->GetParameters()->GetStationIndexActive(h->GetPlaneId(), L1DetectorID::kTrd); - if (stIdx == -1) continue; + assert(stIdx != -1); + //if (stIdx == -1) continue; th.iStation = stIdx; @@ -991,13 +1039,13 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int std::tie(th.u, th.v) = st.ConvXYtoUV<double>(th.x, th.y); - th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kTrd>(iHit) : -1; + th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kTrd>(th.ExtIndex) : -1; th.track = (th.iMC > -1) ? fvMCPoints[th.iMC].ID : -1; //int iMcTrd = -1; //if (fPerformance && fpTrdHitMatches) { // CbmMatch* trdHitMatch = L1_DYNAMIC_CAST<CbmMatch*>(fpTrdHitMatches->At(iHit)); // if (trdHitMatch->GetNofLinks() > 0) { - // iMcTrd = trdHitMatch->GetMatchedLink().GetIndex(); + // iMcTrd = trdHitMatch->GetLink(0).GetIndex(); // assert(iMcTrd >= 0 && iMcTrd < fNpointsTrd); // th.iMC = iMcTrd + fNpointsMvd + fNpointsSts + fNpointsMuch; // th.track = fvMCPoints[th.iMC].ID; @@ -1116,7 +1164,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int th.u = th.x * st.frontInfo.cos_phi[0] + th.y * st.frontInfo.sin_phi[0]; th.v = th.x * st.backInfo.cos_phi[0] + th.y * st.backInfo.sin_phi[0]; - th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kTof>(j) : -1; + th.iMC = fPerformance ? MatchHitWithMc<L1DetectorID::kTof>(th.ExtIndex) : -1; if (1 == fTofUseMcHit && th.iMC > -1) { th.SetHitFromPoint(fvMCPoints[th.iMC], th.iMC, fpAlgo->GetParameters()->GetStation(th.iStation)); @@ -1501,6 +1549,7 @@ void CbmL1::HitMatch() for (int iH = 0; iH < NHits; iH++) { CbmL1Hit& hit = fvExternalHits[iH]; + int iP = fvHitPointIndexes[iH]; if (iP >= 0) { hit.mcPointIds.push_back_no_warning(iP); -- GitLab