Skip to content
Snippets Groups Projects
Commit 098a2521 authored by Sergey Gorbunov's avatar Sergey Gorbunov Committed by Florian Uhlig
Browse files

LIT tracker: improve TOF merging

parent 98c73a16
No related branches found
No related tags found
1 merge request!1085LIT tracker: improve TOF merging
Pipeline #20920 passed
...@@ -213,7 +213,7 @@ HitToTrackMergerPtr CbmLitToolFactory::CreateHitToTrackMerger(const std::string& ...@@ -213,7 +213,7 @@ HitToTrackMergerPtr CbmLitToolFactory::CreateHitToTrackMerger(const std::string&
nhMerger->SetLinePropagator(CreateTrackPropagator("line")); nhMerger->SetLinePropagator(CreateTrackPropagator("line"));
nhMerger->SetFilter(CreateTrackUpdate("kalman")); nhMerger->SetFilter(CreateTrackUpdate("kalman"));
nhMerger->SetPDG(211); nhMerger->SetPDG(211);
nhMerger->SetChiSqCut(50.); //13.86); nhMerger->SetChiSqCut(-1.); //50.); //13.86);
return HitToTrackMergerPtr(nhMerger); return HitToTrackMergerPtr(nhMerger);
} }
else if (name == "tof_all_hits") { else if (name == "tof_all_hits") {
......
...@@ -609,27 +609,16 @@ void CbmLitFindGlobalTracks::RunTrackReconstruction() ...@@ -609,27 +609,16 @@ void CbmLitFindGlobalTracks::RunTrackReconstruction()
void CbmLitFindGlobalTracks::SelectTracksForTofMerging() void CbmLitFindGlobalTracks::SelectTracksForTofMerging()
{ {
// The aim of this procedure is to select only those tracks // Select tracks for merging with TOF.
// which have at least one hit in the last station group. // Currently all tracks are selected, no matter if they have hits in TRD / MUCH or not.
// Only those tracks will be propagated further and merged // The only requirement is the numerical quality of the covariance matrix. -- Sergey Gorbunov
// with TOF hits.
Int_t nofStations = CbmLitTrackingGeometryConstructor::Instance()->GetNofMuchTrdStations();
// Int_t stationCut = nofStations - 4;
// TODO: Fix this issue in a better way. This is done only as an ugly fix
// FU 19.09.13
Int_t stationCut = nofStations - 3;
for (TrackPtrIterator it = fLitOutputTracks.begin(); it != fLitOutputTracks.end(); it++) { for (TrackPtrIterator it = fLitOutputTracks.begin(); it != fLitOutputTracks.end(); it++) {
CbmLitTrack* track = *it; CbmLitTrack* track = *it;
if (track->GetQuality() == kLITBAD) { continue; } if (track->GetQuality() == kLITBAD) { continue; }
const CbmLitHit* hit = track->GetHit(track->GetNofHits() - 1);
if (hit->GetStation() >= stationCut) {
// OK select this track for further merging with TOF
track->SetQuality(kLITGOODMERGE); track->SetQuality(kLITGOODMERGE);
} }
} }
}
void CbmLitFindGlobalTracks::PrintStopwatchStatistics() void CbmLitFindGlobalTracks::PrintStopwatchStatistics()
{ {
......
...@@ -131,10 +131,10 @@ public: ...@@ -131,10 +131,10 @@ public:
{ {
std::vector<litfloat> covFirst(fParamFirst.GetCovMatrix()); std::vector<litfloat> covFirst(fParamFirst.GetCovMatrix());
std::vector<litfloat> covLast(fParamLast.GetCovMatrix()); std::vector<litfloat> covLast(fParamLast.GetCovMatrix());
for (Int_t i = 0; i < 21; i++) { // don't check the time error, because time can be unmeasured -- S.Gorbunov
for (Int_t i = 0; i < 15; i++) {
if (std::abs(covFirst[i]) > 10000. || std::abs(covLast[i]) > 10000.) { return false; } if (std::abs(covFirst[i]) > 10000. || std::abs(covLast[i]) > 10000.) { return false; }
} }
if (GetNofHits() < 1) { return false; }
return true; return true;
} }
......
...@@ -75,11 +75,16 @@ LitStatus CbmLitNearestHitTofMerger::DoMerge(HitPtrVector& hits, TrackPtrVector& ...@@ -75,11 +75,16 @@ LitStatus CbmLitNearestHitTofMerger::DoMerge(HitPtrVector& hits, TrackPtrVector&
if (zParamMap.find(hit->GetZ()) == zParamMap.end()) { // This should never happen if (zParamMap.find(hit->GetZ()) == zParamMap.end()) { // This should never happen
std::cout << "-E- CbmLitNearestHitTofMerger::DoMerge: Z position " << hit->GetZ() std::cout << "-E- CbmLitNearestHitTofMerger::DoMerge: Z position " << hit->GetZ()
<< " not found in map. Something is wrong.\n"; << " not found in map. Something is wrong.\n";
assert(0);
} }
CbmLitTrackParam tpar(zParamMap[hit->GetZ()]); CbmLitTrackParam tpar(zParamMap[hit->GetZ()]);
litfloat chi = 0.; litfloat chi = 1.e10;
fFilter->Update(&tpar, hit, chi); fFilter->Update(&tpar, hit, chi);
if (chi < fChiSqCut && chi < minChiSq) { // Check if hit is inside validation gate and closer to the track.
// Check if hit is inside validation gate.
if (fChiSqCut >= 0. && chi >= fChiSqCut) { continue; }
if (chi < minChiSq) { // Check if hit is closer to the track.
minChiSq = chi; minChiSq = chi;
minHit = hit; minHit = hit;
minPar = tpar; minPar = tpar;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment