From a8baedf99fa47381b103898e0ab8d495377e5c41 Mon Sep 17 00:00:00 2001 From: Valentina <v.akishina@gsi.de> Date: Tue, 7 Feb 2023 13:30:24 +0100 Subject: [PATCH] L1: remove time sorting when event is present, remove zero detector hits, bug in global track - duplicated hits --- reco/L1/CbmL1.cxx | 43 +++++++++++-------- reco/L1/CbmL1ReadEvent.cxx | 3 ++ .../CbmL1GlobalTrackFinder.cxx | 10 ++--- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx index 1a54247857..eabdfb260f 100644 --- a/reco/L1/CbmL1.cxx +++ b/reco/L1/CbmL1.cxx @@ -905,25 +905,30 @@ void CbmL1::Reconstruct(CbmEvent* event) // TODO: Refactor this part, check usage --------------------------------- int nStsHits = (fUseSTS && fpStsHits ? fpStsHits->GetEntriesFast() : 0); - /// sort input hits by time - L1Vector<std::pair<double, int>> SortHits("CbmL1::SortHits"); - SortHits.reserve(nStsHits); - float start_t = 10000000000; - for (Int_t j = 0; j < nStsHits; j++) { - CbmStsHit* sh = L1_DYNAMIC_CAST<CbmStsHit*>(fpStsHits->At(j)); - double t = sh->GetTime(); - if (t < start_t) start_t = t; - SortHits.push_back(std::pair<double, int>(t, j)); + if (!event) { + /// sort input hits by time + L1Vector<std::pair<double, int>> SortHits("CbmL1::SortHits"); + SortHits.reserve(nStsHits); + for (Int_t j = 0; j < nStsHits; j++) { + CbmStsHit* sh = L1_DYNAMIC_CAST<CbmStsHit*>(fpStsHits->At(j)); + double t = sh->GetTime(); + SortHits.push_back(std::pair<double, int>(t, j)); + } + std::sort(SortHits.begin(), SortHits.end()); + if (SortHits.size() > 0) TsStart = SortHits[0].first; ///reco TS start time is set to smallest hit time + fvSortedStsHitsIndexes.clear(); + fvSortedStsHitsIndexes.reserve(SortHits.size()); + for (unsigned int i = 0; i < SortHits.size(); i++) { + int j = SortHits[i].second; + fvSortedStsHitsIndexes.push_back(j); + }; + } + else { + fvSortedStsHitsIndexes.clear(); + fvSortedStsHitsIndexes.reserve(nStsHits); + for (unsigned int i = 0; i < nStsHits; i++) + fvSortedStsHitsIndexes.push_back(i); } - TsStart = start_t; ///reco TS start time is set to smallest hit time - - std::sort(SortHits.begin(), SortHits.end()); - fvSortedStsHitsIndexes.clear(); - fvSortedStsHitsIndexes.reserve(SortHits.size()); - for (unsigned int i = 0; i < SortHits.size(); i++) { - int j = SortHits[i].second; - fvSortedStsHitsIndexes.push_back(j); - }; // ----------------------------------------------------------------------- if (!fLegacyEventMode && fPerformance) { @@ -1008,7 +1013,7 @@ void CbmL1::Reconstruct(CbmEvent* event) if (fVerbose > 1) { cout << "L1 Track finder..." << endl; } fpAlgo->CATrackFinder(); - // IdealTrackFinder(); + // IdealTrackFinder(); fTrackingTime += fpAlgo->fCATime; if (fVerbose > 1) { cout << "L1 Track finder ok" << endl; } diff --git a/reco/L1/CbmL1ReadEvent.cxx b/reco/L1/CbmL1ReadEvent.cxx index 91bf7632e4..6640dc4d36 100644 --- a/reco/L1/CbmL1ReadEvent.cxx +++ b/reco/L1/CbmL1ReadEvent.cxx @@ -1142,6 +1142,8 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int if (0x00202806 == h->GetAddress() || 0x00002806 == h->GetAddress()) continue; // TODO: Why? (S.Zharko) + if (5 == CbmTofAddress::GetSmType(h->GetAddress())) continue; + int sttof = CbmTofTrackingInterface::Instance()->GetTrackingStationIndex(h); if (sttof < 0) continue; @@ -1169,6 +1171,7 @@ void CbmL1::ReadEvent(float& TsStart, float& TsLength, float& /*TsOverlap*/, int th.y = pos.Y(); th.z = pos.Z(); + if (th.z > 400) continue; // is it still needed here? (S.Zharko) int stIdx = fpAlgo->GetParameters()->GetStationIndexActive(sttof, L1DetectorID::kTof); diff --git a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx index cf98e78395..6d5f8b2540 100644 --- a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx +++ b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx @@ -117,7 +117,6 @@ Int_t CbmL1GlobalTrackFinder::CopyL1Tracks(CbmEvent* event) t->SetStsTrackIndex(stsTrackIndex); if (event) event->AddData(ECbmDataType::kStsTrack, stsTrackIndex); CbmL1TrackToCbmStsTrack(T, track, h.Det); - track->AddStsHit(h.ExtIndex); stsTrackIndex++; } if (h.Det == 2 && hasMuchHits == false) { @@ -127,7 +126,6 @@ Int_t CbmL1GlobalTrackFinder::CopyL1Tracks(CbmEvent* event) t->SetMuchTrackIndex(muchTrackIndex); if (event) event->AddData(ECbmDataType::kMuchTrack, muchTrackIndex); CbmL1TrackToCbmMuchTrack(T, track, h.Det); - track->AddMuchHit(h.ExtIndex); muchTrackIndex++; } if (h.Det == 3 && hasTrdHits == false) { @@ -136,7 +134,6 @@ Int_t CbmL1GlobalTrackFinder::CopyL1Tracks(CbmEvent* event) t->SetTrdTrackIndex(trdTrackIndex); if (event) event->AddData(ECbmDataType::kTrdTrack, trdTrackIndex); CbmL1TrackToCbmTrdTrack(T, track, h.Det); - track->AddTrdHit(h.ExtIndex); trdTrackIndex++; } if (h.Det == 4 && hasTofHits == false) { @@ -148,9 +145,8 @@ Int_t CbmL1GlobalTrackFinder::CopyL1Tracks(CbmEvent* event) if (event) event->AddData(ECbmDataType::kTofTrack, tofTrackIndex); CbmL1TrackToCbmTofTrack(T, track, h.Det); tofTrackIndex++; - track->AddTofHit(h.ExtIndex); - if (event) event->AddData(ECbmDataType::kTofHit, h.ExtIndex); + // if (event) event->AddData(ECbmDataType::kTofHit, h.ExtIndex); } } //END create detector tracks if needed @@ -280,7 +276,7 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTrdTrack(CbmL1Track l1track, CbmTrdT // ------------------------------------------------------------------------- // ----- Public method CbmL1TrackToCbmTofTrack ------------------------------------------ -void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTofTrack(CbmL1Track l1track, CbmTofTrack* /*track*/, int systemIdT) +void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTofTrack(CbmL1Track l1track, CbmTofTrack* track, int systemIdT) { Int_t ndf = 0; @@ -291,7 +287,7 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmTofTrack(CbmL1Track l1track, CbmTofT for (vector<int>::iterator ih = T->Hits.begin(); ih != T->Hits.end(); ++ih) { CbmL1HitStore& h = L1->fvHitStore[*ih]; if (h.Det != systemIdT) continue; - // track->AddHit(h.ExtIndex, kTOFHIT); + track->AddHit(h.ExtIndex, kTOFHIT); } ndf -= 5; if (ndf <= 0) ndf = 1; -- GitLab