CbmRoot
Loading...
Searching...
No Matches
reco/offline/steer/TaskFactory.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer] */
4
10#include "TaskFactory.h"
11
13#include "CbmBuildEventsIdeal.h"
15#include "CbmFsdHitProducer.h"
16#include "CbmKF.h"
17#include "CbmL1.h"
18#include "CbmL1StsTrackFinder.h"
20#include "CbmMuchFindHitsGem.h"
21#include "CbmMuchGeoScheme.h"
22#include "CbmMvdClusterfinder.h"
23#include "CbmMvdHitfinder.h"
24#include "CbmPVFinderKF.h"
25#include "CbmPsdHitProducer.h"
26#include "CbmRecoSts.h"
27#include "CbmRecoT0.h"
28#include "CbmRichHitProducer.h"
29#include "CbmRichReconstruction.h"
30#include "CbmSetup.h"
31#include "CbmStsFindTracks.h"
36#include "CbmTrdClusterFinder.h"
37#include "CbmTrdHitProducer.h"
39
40#include <TSystem.h>
41
42
43namespace cbm::reco::offline
44{
45
46
47 // ----- Constructor ----------------------------------------------------
48 TaskFactory::TaskFactory(Run* run) : fRun(run) {}
49 // --------------------------------------------------------------------------
50
51
52 // ----- CA tracking ----------------------------------------------------
54 {
55 assert(fRun);
56
57 // --- Tracking geometry interface
58 auto interface = new CbmTrackingDetectorInterfaceInit();
59 fRun->AddTask(interface);
60
61 // --- Kalman Filter
62 auto kf = new CbmKF();
63 fRun->AddTask(kf);
64
65 // --- CA Track Finder
66 auto ca = new CbmL1("CA Track Finder");
67 fRun->AddTask(ca);
68
69 // --- Track finder steering class
70 auto trackFinder = new CbmL1StsTrackFinder();
71
72 // --- Track finder task
73 FairTask* findTracks = nullptr;
75 findTracks = new CbmStsFindTracks(0, trackFinder, true);
76 else
77 findTracks = new CbmStsFindTracksEvents(trackFinder, true);
78 fRun->AddTask(findTracks);
79 }
80 // --------------------------------------------------------------------------
81
82
83 // ----- Event building from digis --------------------------------------
85 {
86 assert(fRun);
88 throw std::out_of_range("Undefined event builder type");
89
90 // --- Ideal digi event builder (using MC truth information)
92 FairTask* evBuildRaw = new CbmBuildEventsIdeal();
93 fRun->AddTask(evBuildRaw);
94 } //? Ideal event builder
95
96 // --- Real digi event builder
97 // TODO: This should be replaced by the newer algorithm algo/evbuild/EventBuilder
98 else {
99
100 const cbm::reco::offline::Config& config = fRun->GetConfig();
101 ECbmModuleId triggerDetector = config.f_evbuild_trigDet;
102
103 if (!fRun->IsDataPresent(triggerDetector)) throw std::runtime_error("No input data for trigger detector");
104
105 // --- Task
107
108 // --- Mode
109 evBuildRaw->SetEventOverlapMode(config.f_evbuild_ovlapmode);
110
111 // --- Reference detector
112 switch (triggerDetector) {
122 default: throw std::out_of_range("Event builder: Undefined trigger detector"); break;
123 }
124
125 // --- Make BMON (default reference detector) a selected detector (with default parameters)
126 if (triggerDetector != ECbmModuleId::kBmon) evBuildRaw->AddDetector(kRawEventBuilderDetBmon);
127
128 // --- Remove detectors of which there are no input data
135
136 // --- Timeslice parameters
137 evBuildRaw->SetTsParameters(0.0, 1.e7, 0.0);
138
139 // --- Use CbmMuchDigi instead of CbmMuchBeamtimeDigi
140 // TODO: Seems legacy.
141 evBuildRaw->ChangeMuchBeamtimeDigiFlag(kFALSE);
142
143 // --- Set trigger parameters
144 evBuildRaw->SetTriggerMinNumber(triggerDetector, config.f_evbuild_trigNumMin);
145 evBuildRaw->SetTriggerMaxNumber(triggerDetector, config.f_evbuild_trigNumMax);
146 evBuildRaw->SetTriggerWindow(triggerDetector, config.f_evbuild_trigWinMin, config.f_evbuild_trigWinMax);
147
148 fRun->AddTask(evBuildRaw);
149
150 } //? Real event builder
151 }
152 // --------------------------------------------------------------------------
153
154
155 // ----- LIT Global Tracking --------------------------------------------
164 // --------------------------------------------------------------------------
165
166
167 // ----- MUCH reconstruction --------------------------------------------
169 {
170 assert(fRun);
172
173 // --- Parameter file name
174 TString geoTag;
175 if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kMuch, geoTag)) {
176 Int_t muchFlag = (geoTag.Contains("mcbm") ? 1 : 0);
177 TString parFile = gSystem->Getenv("VMCWORKDIR");
178 parFile += "/parameters/much/much_" + geoTag(0, 4) + "_digi_sector.root";
179
180 auto muchGeoScheme = CbmMuchGeoScheme::Instance();
181 if (!muchGeoScheme->IsInitialized()) {
182 muchGeoScheme->Init(parFile, muchFlag);
183 }
184
185 FairTask* muchReco = new CbmMuchFindHitsGem(parFile.Data(), muchFlag);
186 fRun->AddTask(muchReco);
187 }
188 }
189 // --------------------------------------------------------------------------
190
191
192 // ----- MVD reconstruction ---------------------------------------------
194 {
195 assert(fRun);
197
198 // The real eventbuilder currently doesn't support the MVD detector
200 return;
201 }
202
203 CbmMvdClusterfinder* mvdCluster = new CbmMvdClusterfinder("MVD Cluster Finder", 0, 0);
206 }
207 else {
208 mvdCluster->SetMode(ECbmRecoMode::Timeslice);
209 }
210 fRun->AddTask(mvdCluster);
211
212 CbmMvdHitfinder* mvdHit = new CbmMvdHitfinder("MVD Hit Finder", 0, 0);
213 mvdHit->UseClusterfinder(kTRUE);
216 }
217 else {
219 }
220 fRun->AddTask(mvdHit);
221 }
222 // --------------------------------------------------------------------------
223
224
225 // ----- Primary Vertex Finding -----------------------------------------
227 {
228 assert(fRun);
229 CbmPrimaryVertexFinder* pvFinder = new CbmPVFinderKF();
230 CbmFindPrimaryVertex* findVertex = new CbmFindPrimaryVertex(pvFinder);
231 fRun->AddTask(findVertex);
232 }
233 // --------------------------------------------------------------------------
234
235
236 // ----- RICH hit finding -----------------------------------------------
238 {
239 assert(fRun);
241
242 CbmRichHitProducer* richHitProd = new CbmRichHitProducer();
243 fRun->AddTask(richHitProd);
244 }
245 // --------------------------------------------------------------------------
246
247
248 // ----- RICH reconstruction --------------------------------------------
250 {
251 assert(fRun);
253
255 fRun->AddTask(richReco);
256 }
257 // --------------------------------------------------------------------------
258
259
260 // ----- STS reconstruction ---------------------------------------------
262 {
263 assert(fRun);
265
266 CbmRecoSts* stsReco = new CbmRecoSts(fRun->GetConfig().f_glb_mode);
268 fRun->AddTask(stsReco);
269 }
270 // --------------------------------------------------------------------------
271
272
273 // ----- TOF reconstruction ---------------------------------------------
275 {
276 assert(fRun);
278
279 CbmTofSimpClusterizer* tofCluster = new CbmTofSimpClusterizer("TOF Simple Clusterizer", 0);
280 tofCluster->SetOutputBranchPersistent("TofHit", kTRUE);
281 tofCluster->SetOutputBranchPersistent("TofDigiMatch", kTRUE);
282 fRun->AddTask(tofCluster);
283 }
284 // --------------------------------------------------------------------------
285
286
287 // ----- PSD reconstruction ---------------------------------------------
289 {
290 assert(fRun);
292
293 CbmPsdHitProducer* psdHit = new CbmPsdHitProducer();
294 fRun->AddTask(psdHit);
295 }
296 // --------------------------------------------------------------------------
297
298
299 // ----- FSD reconstruction ---------------------------------------------
301 {
302 assert(fRun);
304
305 CbmFsdHitProducer* fsdHit = new CbmFsdHitProducer();
306 fRun->AddTask(fsdHit);
307 }
308 // --------------------------------------------------------------------------
309
310
311 // ----- Event building from tracks -------------------------------------
313 {
314 assert(fRun);
315 auto eventBuilder = new CbmBuildEventsFromTracksReal();
316 fRun->AddTask(eventBuilder);
317 }
318 // --------------------------------------------------------------------------
319
320
321 // ----- TRD PID --------------------------------------------------------
323 {
324 assert(fRun);
326
327 CbmTrdSetTracksPidLike* trdPid = new CbmTrdSetTracksPidLike("TRDLikelihood", "TRDLikelihood");
328 trdPid->SetUseMCInfo(kTRUE);
329 trdPid->SetUseMomDependence(kTRUE);
330 fRun->AddTask(trdPid);
331 }
332 // --------------------------------------------------------------------------
333
334
335 // ----- TRD reconstruction ---------------------------------------------
337 {
338 assert(fRun);
340
341 CbmTrdClusterFinder* trdCluster = new CbmTrdClusterFinder();
343 trdCluster->SetTimeBased(kFALSE);
344 else
345 trdCluster->SetTimeBased(kTRUE);
346 trdCluster->SetNeighbourEnable(true, false);
348 trdCluster->SetRowMerger(true);
349 fRun->AddTask(trdCluster);
350
351 CbmTrdHitProducer* trdHit = new CbmTrdHitProducer();
352 fRun->AddTask(trdHit);
353 }
354 // --------------------------------------------------------------------------
355
356
357 // ----- Bmon reconstruction ----------------------------------------------
359 {
360 assert(fRun);
361 CbmRecoT0* recoBmon = new CbmRecoT0();
362 fRun->AddTask(recoBmon);
363 }
364 // --------------------------------------------------------------------------
365
366} // namespace cbm::reco::offline
static const RawEventBuilderDetector kRawEventBuilderDetSts
Pre-defined detector types.
static const RawEventBuilderDetector kRawEventBuilderDetTrd2D
static const RawEventBuilderDetector kRawEventBuilderDetBmon
static const RawEventBuilderDetector kRawEventBuilderDetFsd
static const RawEventBuilderDetector kRawEventBuilderDetTrd
static const RawEventBuilderDetector kRawEventBuilderDetPsd
static const RawEventBuilderDetector kRawEventBuilderDetRich
static const RawEventBuilderDetector kRawEventBuilderDetTof
static const RawEventBuilderDetector kRawEventBuilderDetMuch
ECbmModuleId
Definition CbmDefs.h:39
@ kMvd
Micro-Vertex Detector.
@ kTrd
Transition Radiation Detector.
@ kTof
Time-of-flight Detector.
@ kPsd
Projectile spectator detector.
@ kSts
Silicon Tracking System.
@ kTrd2d
TRD-FASP Detector (FIXME)
@ kMuch
Muon detection system.
@ kFsd
Forward spectator detector.
@ kRich
Ring-Imaging Cherenkov Detector.
Hit Producer for FSD.
CBM task for global track reconstruction.
Class for producing RICH hits directly from MCPoints.
FairTask to produce TrdCluster objects from TrdHit objects.
FairTask to produce TrdHit objects from TrdCluster objects.
Definition CbmKF.h:34
Definition CbmL1.h:109
void SetMergerType(const string &mergerType)
void SetTrackingType(const string &trackingType)
static CbmMuchGeoScheme * Instance()
void SetMode(ECbmRecoMode mode)
Set execution mode.
void SetMode(ECbmRecoMode mode)
Set execution mode.
void UseClusterfinder(Bool_t clusterfinderFlag)
Implementation of the primary vertex finder using KF utility.
Task class for local reconstruction in the STS.
Definition CbmRecoSts.h:54
void SetUseGpuReco(bool useGPU)
Task class for reconstruction of the event t0.
Definition CbmRecoT0.h:50
Class for producing RICH hits directly from MCPoints.
Main class for running event reconstruction in the RICH detector.
static CbmSetup * Instance()
Definition CbmSetup.cxx:160
Task class for finding STS tracks in an event.
void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd)
void SetEventOverlapMode(EOverlapModeRaw mode)
void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn=kFALSE)
void RemoveDetector(RawEventBuilderDetector selDet)
void SetReferenceDetector(RawEventBuilderDetector refDet, std::vector< bool > select={})
void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
void AddDetector(RawEventBuilderDetector selDet)
Simple Cluster building and hit producing for CBM ToF using Digis as input.
static void SetTimeBased(Bool_t set=kTRUE)
static void SetRowMerger(Bool_t set=kTRUE)
static void SetMinimumChargeTH(Float_t th)
static void SetNeighbourEnable(Bool_t col=kTRUE, Bool_t row=kFALSE)
void SetUseMomDependence(Bool_t use=kTRUE)
void SetUseMCInfo(Bool_t use=kTRUE)
void AddTask(FairTask *task)
Add a task to the run.
bool IsDataPresent(ECbmModuleId detector) const
Presence of input digi data.
const Config & GetConfig() const
Settings object.
void RegisterTrackEventBuilder()
Local reconstruction for FSD.
void RegisterTrdReco()
Event building from tracks.
void RegisterFsdReco()
Local reconstruction for PSD.
void RegisterMvdReco()
Local reconstruction for MUCH.
TaskFactory(Run *steer=nullptr)
Constructor.
void RegisterPvFinder()
Local reconstruction for MVD.
void RegisterTofReco()
Local reconstruction for STS.
void RegisterStsReco()
Local reconstruction for RICH.
void RegisterGlobalTracking()
Event building from digis.
void RegisterTrdPid()
Local reconstruction for TRD.
void RegisterPsdReco()
Local reconstruction for TOF.
void RegisterRichHitFinder()
Primary vertex finding.
TODO: SZh 8.11.2022: add selection of parameterisation.
Definition CaBranch.h:14