CbmRoot
Loading...
Searching...
No Matches
CbmL1StsTrackFinder.cxx
Go to the documentation of this file.
1/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Ivan Kisel, Sergey Gorbunov, Volker Friese, Denis Bertini [committer] */
4
5/*
6 *====================================================================
7 *
8 * CBM Level 1 Reconstruction
9 *
10 * Authors: I.Kisel, S.Gorbunov
11 *
12 * e-mail : ikisel@kip.uni-heidelberg.de
13 *
14 *====================================================================
15 *
16 * CbmL1StsTrackFinder source file
17 *
18 *====================================================================
19 */
20#include "CbmL1StsTrackFinder.h"
21
22#include "CbmEvent.h"
23#include "CbmKfUtil.h"
24#include "CbmStsHit.h"
25#include "CbmStsTrack.h"
26#include "FairHit.h"
27#include "FairMCPoint.h"
28#include "FairRootManager.h"
29#include "TClonesArray.h"
30#include "TDatabasePDG.h"
31
32#include <iostream>
33#include <vector>
34
35using std::vector;
36
38
39 // ----- Default constructor -------------------------------------------
41{
42 fName = "STS Track Finder L1";
43}
44// -------------------------------------------------------------------------
45
46
47// ----- Destructor ----------------------------------------------------
49// -------------------------------------------------------------------------
50
51
52// ----- Public method Init --------------------------------------------
54// -------------------------------------------------------------------------
55
56
57// ----- Copy tracks to output array -----------------------------------
59{
60 CbmL1* L1 = CbmL1::Instance();
61 if (!L1) return 0;
62
63 Int_t trackIndex = fTracks->GetEntriesFast();
64 Int_t nTracks = 0;
65 LOG(debug) << "Copy L1 tracks : " << L1->fvRecoTracks.size() << " tracks in L1";
66 for (vector<CbmL1Track>::iterator it = L1->fvRecoTracks.begin(); it != L1->fvRecoTracks.end(); ++it) {
67 CbmL1Track& T = *it;
68 new ((*fTracks)[trackIndex]) CbmStsTrack();
69 nTracks++;
70 if (event) event->AddData(ECbmDataType::kStsTrack, trackIndex);
71 CbmStsTrack* t = dynamic_cast<CbmStsTrack*>(fTracks->At(trackIndex++));
72 t->SetFlag(0);
75 t->SetChiSq(T.GetChiSq());
76 t->SetNDF(T.GetNdf());
77 t->SetChiSqTime(T.GetChiSqTime());
78 t->SetNdfTime(T.GetNdfTime());
79 t->SetPidHypo(T.GetQp() >= 0 ? 211 : -211);
80 t->SetStartTime(T.Tpv.GetTime());
81 t->SetStartTimeError(T.Tpv.GetTimeError());
82 t->SetFirstHitTime(T.GetTime());
83 t->SetFirstHitTimeError(T.GetTimeError());
84 t->SetLastHitTime(T.TLast.GetTime());
85 t->SetLastHitTimeError(T.TLast.GetTimeError());
86
87 for (vector<int>::iterator ih = it->Hits.begin(); ih != it->Hits.end(); ++ih) {
88 CbmL1HitId& h = L1->fvExternalHits[*ih];
89 if (h.detId == 0) {
90 t->AddMvdHit(h.hitId);
91 }
92 else if (h.detId == 1) {
93 t->AddStsHit(h.hitId);
94 }
95 }
96 }
97
98 return nTracks;
99}
100// -------------------------------------------------------------------------
101
102
103// ----- Public method DoFind ------------------------------------------
105{
106
107 if (!fTracks) {
108 LOG(error) << "-E- CbmL1StsTrackFinder::DoFind: "
109 << "Track array missing! ";
110 return -1;
111 }
112
113 CbmL1* L1 = CbmL1::Instance();
114 if (!L1) return 0;
115
116 L1->Reconstruct();
117 int ntracks = CopyL1Tracks();
118
119 return ntracks;
120}
121// -------------------------------------------------------------------------
122
123
124// ----- Track finding in one event ------------------------------------
126{
127
128 CbmL1* l1 = CbmL1::Instance();
129 if (!l1) return 0;
130
131 l1->Reconstruct(event);
132 int nTracks = CopyL1Tracks(event);
133
134 return nTracks;
135}
136// -------------------------------------------------------------------------
137
138
139// -------------------------------------------------------------------------
140void SetDefaultParticlePDG(int pdg = 211)
141{
144 CbmL1* l1 = CbmL1::Instance();
145 if (!l1 || !l1->fpAlgo) {
146 LOG(fatal) << "L1 instance doesn't exist or is not initialised";
147 return;
148 }
149 auto* p = TDatabasePDG::Instance()->GetParticle(pdg);
150 if (!p) {
151 LOG(fatal) << "Particle with pdg " << pdg << " doesn't exist";
152 return;
153 }
154 l1->fpAlgo->SetDefaultParticleMass(p->Mass());
155}
156// -------------------------------------------------------------------------
void SetDefaultParticlePDG(int pdg=211)
ClassImp(CbmL1StsTrackFinder) CbmL1StsTrackFinder
Data class for a reconstructed hit in the STS.
Data class for STS tracks.
Generates beam ions for transport simulation.
Class characterising one event by a collection of links (indices) to data objects,...
Definition CbmEvent.h:34
Int_t FindTracks(CbmEvent *event)
Int_t CopyL1Tracks(CbmEvent *event=nullptr)
Definition CbmL1.h:109
static CbmL1 * Instance()
Pointer to CbmL1 instance.
Definition CbmL1.h:171
void Reconstruct(CbmEvent *event=nullptr)
Definition CbmL1.cxx:588
ca::Vector< CbmL1HitId > fvExternalHits
Array of hits.
Definition CbmL1.h:484
ca::Framework * fpAlgo
Pointer to the L1 track finder algorithm.
Definition CbmL1.h:425
ca::Vector< CbmL1Track > fvRecoTracks
Reconstructed tracks container.
Definition CbmL1.h:429
TClonesArray * fTracks
void AddMvdHit(int32_t hitIndex)
Definition CbmStsTrack.h:55
void AddStsHit(int32_t hitIndex)
Definition CbmStsTrack.h:61
void SetLastHitTimeError(double error)
Definition CbmTrack.h:96
void SetStartTimeError(double error)
Definition CbmTrack.h:92
void SetNdfTime(int32_t ndf)
Definition CbmTrack.h:84
void SetLastHitTime(double time)
Definition CbmTrack.h:95
void SetFirstHitTime(double time)
Definition CbmTrack.h:93
void SetChiSqTime(double chiSq)
Definition CbmTrack.h:83
void SetFirstHitTimeError(double error)
Definition CbmTrack.h:94
void SetPidHypo(int32_t pid)
Definition CbmTrack.h:79
void SetFlag(int32_t flag)
Definition CbmTrack.h:80
void SetParamFirst(const FairTrackParam *par)
Definition CbmTrack.h:86
void SetChiSq(double chiSq)
Definition CbmTrack.h:81
void SetStartTime(double time)
Definition CbmTrack.h:91
void SetNDF(int32_t ndf)
Definition CbmTrack.h:82
void SetParamLast(const FairTrackParam *par)
Definition CbmTrack.h:87
void SetDefaultParticleMass(fscal mass)
Sets a default particle mass for the track fit.
cbm::algo::kf::TrackParamD ConvertTrackParam(const FairTrackParam &par)
copy fair track param to Ca track param
Definition CbmKfUtil.cxx:12