CbmRoot
CbmRecoSts.cxx
Go to the documentation of this file.
1 
6 #include "CbmRecoSts.h"
7 
8 #include <TClonesArray.h>
9 #include <TGeoBBox.h>
10 #include <TGeoPhysicalNode.h>
11 #include <iomanip>
12 
13 #include "CbmAddress.h"
14 #include "CbmDigiManager.h"
15 #include "CbmEvent.h"
16 #include "CbmStsDigi.h"
17 #include "CbmStsModule.h"
18 #include "CbmStsParSetModule.h"
19 #include "CbmStsParSetSensor.h"
20 #include "CbmStsParSetSensorCond.h"
21 #include "CbmStsParSim.h"
22 #include "CbmStsRecoModule.h"
23 #include "CbmStsSetup.h"
24 #include <FairField.h>
25 #include <FairRun.h>
26 #include <FairRuntimeDb.h>
27 
28 using std::fixed;
29 using std::left;
30 using std::right;
31 using std::setprecision;
32 using std::setw;
33 using std::vector;
34 
35 
37 
38 
39  // ----- Constructor ---------------------------------------------------
41  Bool_t writeClusters,
42  Bool_t runParallel)
43  : FairTask("RecoSts", 1)
44  , fMode(mode)
45  , fWriteClusters(writeClusters)
46  , fRunParallel(runParallel) {}
47 // -------------------------------------------------------------------------
48 
49 
50 // ----- Destructor ----------------------------------------------------
52 // -------------------------------------------------------------------------
53 
54 
55 // ----- Initialise the cluster finding modules ------------------------
57 
58  assert(fSetup);
59  for (Int_t iModule = 0; iModule < fSetup->GetNofModules(); iModule++) {
60 
61  // --- Setup module and sensor
62  CbmStsModule* setupModule = fSetup->GetModule(iModule);
63  assert(setupModule);
64  Int_t moduleAddress = Int_t(setupModule->GetAddress());
65  assert(setupModule->GetNofDaughters() == 1);
66  CbmStsElement* setupSensor = setupModule->GetDaughter(0);
67  assert(setupSensor);
68  Int_t sensorAddress = Int_t(setupSensor->GetAddress());
69 
70  // --- Module parameters
71  const CbmStsParModule& modPar =
73  : fParSetModule->GetParModule(moduleAddress));
74 
75  // --- Sensor parameters
76  const CbmStsParSensor& sensPar =
78  : fParSetSensor->GetParSensor(sensorAddress));
79 
80  // --- Sensor conditions
81  const CbmStsParSensorCond& sensCond =
83  : fParSetCond->GetParSensor(sensorAddress));
84 
85  // --- Calculate and set average Lorentz shift
86  // --- This will be used in hit finding for correcting the position.
87  Double_t lorentzF = 0.;
88  Double_t lorentzB = 0.;
89  if (fParSim->LorentzShift()) {
90 
91  TGeoBBox* shape =
92  dynamic_cast<TGeoBBox*>(setupSensor->GetPnode()->GetShape());
93  assert(shape);
94  Double_t dZ = 2. * shape->GetDZ(); // Sensor thickness
95 
96  // Get the magnetic field in the sensor centre
97  Double_t by = 0.;
98  if (FairRun::Instance()->GetField()) {
99  Double_t local[3] = {0., 0., 0.}; // sensor centre in local C.S.
100  Double_t global[3]; // sensor centre in global C.S.
101  setupSensor->GetPnode()->GetMatrix()->LocalToMaster(local, global);
102  Double_t field[3] = {0., 0., 0.}; // magnetic field components
103  FairRun::Instance()->GetField()->Field(global, field);
104  by = field[1] / 10.; // kG->T
105  } //? field present
106 
107  // Calculate average Lorentz shift on sensor sides.
108  // This is needed in hit finding for correcting the cluster position.
109  auto lorentzShift = LorentzShift(sensCond, dZ, by);
110  lorentzF = lorentzShift.first;
111  lorentzB = lorentzShift.second;
112  } //? Lorentz-shift correction
113 
114  // --- Create reco module
115  CbmStsRecoModule* recoModule =
116  new CbmStsRecoModule(setupModule, modPar, sensPar, lorentzF, lorentzB);
117  auto result = fModules.insert({moduleAddress, recoModule});
118  assert(result.second);
119  fModuleIndex.push_back(recoModule);
120  }
121 
122  return fModules.size();
123 }
124 // -------------------------------------------------------------------------
125 
126 
127 // ----- Task execution ------------------------------------------------
128 void CbmRecoSts::Exec(Option_t*) {
129 
130  // --- Clear output array
131  fHits->Delete();
132 
133  // --- Reset output array
134  fClusters->Delete();
135 
136  // --- Time-slice mode: process entire array
137  if (fMode == kCbmRecoTimeslice) ProcessData(nullptr);
138 
139  // --- Event mode: loop over events
140  else {
141  assert(fEvents);
142  Int_t nEvents = fEvents->GetEntriesFast();
143  LOG(info) << setw(20) << left << GetName() << ": Processing time slice "
144  << fNofTimeslices << " with " << nEvents
145  << (nEvents == 1 ? " event" : " events");
146  for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
147  CbmEvent* event = dynamic_cast<CbmEvent*>(fEvents->At(iEvent));
148  assert(event);
149  ProcessData(event);
150  } //# events
151  } //? event mode
152 
153  fNofTimeslices++;
154 }
155 // -------------------------------------------------------------------------
156 
157 
158 // ----- End-of-run action ---------------------------------------------
160 
161  std::cout << std::endl;
162  LOG(info) << "=====================================";
163  LOG(info) << GetName() << ": Run summary";
164  LOG(info) << "Time slices : " << fNofTimeslices;
165 
166  // --- Time-slice mode
167  if (fMode == kCbmRecoTimeslice) {
168  LOG(info) << "Digis / TSlice : "
169  << fNofDigis / Double_t(fNofTimeslices);
170  LOG(info) << "Digis used / TSlice : "
171  << fNofDigisUsed / Double_t(fNofTimeslices);
172  LOG(info) << "Digis ignored / TSlice : "
173  << fNofDigisIgnored / Double_t(fNofTimeslices);
174  LOG(info) << "Clusters / TSlice : "
175  << fNofClusters / Double_t(fNofTimeslices);
176  LOG(info) << "Hits / TSlice : "
177  << fNofHits / Double_t(fNofTimeslices);
178  LOG(info) << "Digis per cluster : " << fNofDigisUsed / fNofClusters;
179  LOG(info) << "Clusters per hit : " << fNofClusters / fNofHits;
180  LOG(info) << "Time per TSlice : "
181  << fTimeTot / Double_t(fNofTimeslices) << " s ";
182 
183  } //? time-slice mode
184 
185  // --- Event-by-event mode
186  else {
187  LOG(info) << "Events : " << fNofEvents;
188  LOG(info) << "Digis / event : " << fNofDigis / Double_t(fNofEvents);
189  LOG(info) << "Digis used / event : "
190  << fNofDigisUsed / Double_t(fNofEvents);
191  LOG(info) << "Digis ignored / event : "
192  << fNofDigisIgnored / Double_t(fNofEvents);
193  LOG(info) << "Clusters / event : "
194  << fNofClusters / Double_t(fNofEvents);
195  LOG(info) << "Digis per cluster : " << fNofDigisUsed / fNofClusters;
196  LOG(info) << "Time per event : " << fTimeTot / Double_t(fNofEvents)
197  << " s ";
198  } //? event mode
199 
200  fTimeTot /= Double_t(fNofEvents);
201  fTime1 /= Double_t(fNofEvents);
202  fTime2 /= Double_t(fNofEvents);
203  fTime3 /= Double_t(fNofEvents);
204  fTime4 /= Double_t(fNofEvents);
205  LOG(info) << "Time Reset : " << fixed << setprecision(1) << setw(6)
206  << 1000. * fTime1 << " ms (" << setprecision(1) << setw(4)
207  << 100. * fTime1 / fTimeTot << " %)";
208  LOG(info) << "Time Distribute : " << fixed << setprecision(1) << setw(6)
209  << 1000. * fTime2 << " ms (" << setprecision(1)
210  << 100. * fTime2 / fTimeTot << " %)";
211  LOG(info) << "Time Reconstruct : " << fixed << setprecision(1) << setw(6)
212  << 1000. * fTime3 << " ms (" << setprecision(1) << setw(4)
213  << 100. * fTime3 / fTimeTot << " %)";
214  LOG(info) << "Time Output : " << fixed << setprecision(1) << setw(6)
215  << 1000. * fTime4 << " ms (" << setprecision(1) << setw(4)
216  << 100. * fTime4 / fTimeTot << " %)";
217  LOG(info) << "=====================================";
218 }
219 // -------------------------------------------------------------------------
220 
221 
222 // ----- Initialisation ------------------------------------------------
223 InitStatus CbmRecoSts::Init() {
224 
225  // --- Something for the screen
226  std::cout << std::endl;
227  LOG(info) << "==========================================================";
228  LOG(info) << GetName() << ": Initialising ";
229 
230  // --- Check IO-Manager
231  FairRootManager* ioman = FairRootManager::Instance();
232  assert(ioman);
233 
234  // --- Digi Manager
236  fDigiManager->Init();
237 
238  // --- In event mode: get input array (CbmEvent)
239  if (fMode == kCbmRecoEvent) {
240  LOG(info) << GetName() << ": Using event-by-event mode";
241  fEvents = dynamic_cast<TClonesArray*>(ioman->GetObject("Event"));
242  if (!fEvents) {
243  LOG(warn) << GetName()
244  << ": Event mode selected but no event array found!";
245  return kFATAL;
246  } //? Event branch not present
247  } //? Event mode
248  else
249  LOG(info) << GetName() << ": Using time-based mode";
250 
251  // --- Check input array (StsDigis)
253  LOG(fatal) << GetName() << ": No StsDigi branch in input!";
254 
255  // --- Register output array
256  fClusters = new TClonesArray("CbmStsCluster", 1);
257  ioman->Register("StsCluster",
258  "Clusters in STS",
259  fClusters,
260  IsOutputBranchPersistent("StsCluster"));
261 
262  // --- Register output array
263  fHits = new TClonesArray("CbmStsHit", 1);
264  ioman->Register(
265  "StsHit", "Hits in STS", fHits, IsOutputBranchPersistent("StsHit"));
266 
267  // --- Simulation settings
268  assert(fParSim);
269  LOG(info) << GetName() << ": Sim settings " << fParSim->ToString();
270 
271  // --- Module parameters
272  assert(fParSetModule);
273  LOG(info) << GetName() << ": Module parameters " << fParSetModule->ToString();
274 
275  // --- Sensor parameters
276  assert(fParSetSensor);
277  LOG(info) << GetName() << ": Sensor parameters " << fParSetModule->ToString();
278 
279  // --- Sensor conditions
280  assert(fParSetCond);
281  //assert(fParSetCond->IsSet());
282  LOG(info) << GetName() << ": Sensor conditions " << fParSetCond->ToString();
283 
284  // --- Initialise STS setup
286  fSetup->Init(nullptr);
287  //fSetup->SetSensorParameters(fParSetSensor);
288 
289  // --- Create reconstruction modules
290  UInt_t nModules = CreateModules();
291  LOG(info) << GetName() << ": Created " << nModules << " modules";
292 
293  LOG(info) << GetName() << ": Initialisation successful.";
294  LOG(info) << "==========================================================";
295 
296  return kSUCCESS;
297 }
298 // -------------------------------------------------------------------------
299 
300 
301 // ----- Calculate the mean Lorentz shift in a sensor ------------------
302 std::pair<Double_t, Double_t>
304  Double_t dZ,
305  Double_t bY) {
306 
307  Double_t vBias = conditions.GetVbias(); // Bias voltage
308  Double_t vFd = conditions.GetVfd(); // Full-depletion voltage
309  Double_t eField = (vBias + vFd) / dZ; // Electric field
310 
311  // --- Integrate in 1000 steps over the sensor thickness
312  Int_t nSteps = 1000;
313  Double_t deltaZ = dZ / nSteps;
314  Double_t dxMeanE = 0.;
315  Double_t dxMeanH = 0.;
316  for (Int_t j = 0; j <= nSteps; j++) {
317  eField -= 2 * vFd / dZ * deltaZ / dZ; // Electric field [V/cm]
318  Double_t muHallE = conditions.GetHallMobility(eField, 0);
319  Double_t muHallH = conditions.GetHallMobility(eField, 1);
320  dxMeanE += muHallE * (dZ - Double_t(j) * deltaZ);
321  dxMeanH += muHallH * Double_t(j) * deltaZ;
322  }
323  dxMeanE /= Double_t(nSteps);
324  dxMeanH /= Double_t(nSteps);
325  Double_t shiftF = dxMeanE * bY * 1.e-4;
326  Double_t shiftB = dxMeanH * bY * 1.e-4;
327  // The factor 1.e-4 is because bZ is in T = Vs/m**2, but muHall is in
328  // cm**2/(Vs) and z in cm.
329 
330  return {shiftF, shiftB};
331 }
332 // -------------------------------------------------------------------------
333 
334 
335 // ----- Process one time slice or event -------------------------------
337 
338  // --- Reset all modules
339  fTimer.Start();
340  Int_t nDigisGood = 0;
341  Int_t nDigisIgnored = 0;
342  Int_t nClusters = 0;
343  Int_t nHits = 0;
344 
345  // #pragma omp parallel for schedule(static) if(fParallelism_enabled)
346  for (UInt_t it = 0; it < fModuleIndex.size(); it++) {
347  fModuleIndex[it]->Reset();
348  }
349  fTimer.Stop();
350  Double_t time1 = fTimer.RealTime(); // Time for resetting
351 
352  // --- Number of input digis
353  fTimer.Start();
354  Int_t nDigis = (event ? event->GetNofData(ECbmDataType::kStsDigi)
356 
357 
358  // --- Distribute digis to modules
359  Int_t digiIndex = -1;
360  //#pragma omp parallel for schedule(static) if(fParallelism_enabled)
361  for (Int_t iDigi = 0; iDigi < nDigis; iDigi++) {
362  digiIndex =
363  (event ? event->GetIndex(ECbmDataType::kStsDigi, iDigi) : iDigi);
364  const CbmStsDigi* digi = fDigiManager->Get<const CbmStsDigi>(digiIndex);
365  assert(digi);
366 
367  // Check system ID. There are pulser digis in which will be ignored here.
368  Int_t systemId = CbmAddress::GetSystemId(digi->GetAddress());
369  if (systemId != ToIntegralType(ECbmModuleId::kSts)) {
370  nDigisIgnored++;
371  continue;
372  }
373 
374  // Get proper reco module
375  Int_t moduleAddress =
377  auto it = fModules.find(moduleAddress);
378  if (it == fModules.end()) {
379  LOG(warn) << "Unknown module address: "
380  << CbmStsAddress::ToString(moduleAddress);
381  ;
382  }
383  assert(it != fModules.end());
384  CbmStsRecoModule* module = it->second;
385  assert(module);
386  module->AddDigiToQueue(digi, digiIndex);
387  }
388  fTimer.Stop();
389  Double_t time2 = fTimer.RealTime(); // Time for digi distribution
390 
391 
392  // --- Execute reconstruction in the modules
393  fTimer.Start();
394  // #pragma omp parallel for schedule(static) if(fParallelism_enabled)
395  for (UInt_t it = 0; it < fModuleIndex.size(); it++) {
396  assert(fModuleIndex[it]);
397  fModuleIndex[it]->Reconstruct();
398  }
399  fTimer.Stop();
400  Double_t time3 = fTimer.RealTime(); // Time for reconstruction
401 
402 
403  // --- Collect clusters and hits from modules
404  // Here, the hits (and optionally clusters) are copied to the
405  // TClonesArrays in the ROOT tree. This is surely not the last word
406  // in terms of framework. It thus cannot be considered optimised.
407  // The output shall eventually be tailored to provide the proper
408  // input for further reconstruction (track finding).
409  fTimer.Start();
410  ULong64_t offsetClustersF = 0;
411  ULong64_t offsetClustersB = 0;
412  for (UInt_t it = 0; it < fModuleIndex.size(); it++) {
413 
414  const vector<CbmStsCluster>& moduleClustersF =
415  fModuleIndex[it]->GetClustersF();
416  offsetClustersF = fClusters->GetEntriesFast();
417  for (auto& cluster : moduleClustersF) {
418  UInt_t index = fClusters->GetEntriesFast();
419  new ((*fClusters)[index]) CbmStsCluster(cluster);
420  if (event) event->AddData(ECbmDataType::kStsCluster, index);
421  nClusters++;
422  } //# front-side clusters in module
423 
424  const vector<CbmStsCluster>& moduleClustersB =
425  fModuleIndex[it]->GetClustersB();
426  offsetClustersB = fClusters->GetEntriesFast();
427  for (auto& cluster : moduleClustersB) {
428  UInt_t index = fClusters->GetEntriesFast();
429  new ((*fClusters)[index]) CbmStsCluster(cluster);
430  if (event) event->AddData(ECbmDataType::kStsCluster, index);
431  nClusters++;
432  } //# back-side clusters in module
433 
434  const vector<CbmStsHit>& moduleHits = fModuleIndex[it]->GetHits();
435  for (auto& hit : moduleHits) {
436  UInt_t index = fHits->GetEntriesFast();
437  CbmStsHit* out = new ((*fHits)[index]) CbmStsHit(hit);
438  out->SetFrontClusterId(out->GetFrontClusterId() + offsetClustersF);
439  out->SetBackClusterId(out->GetBackClusterId() + offsetClustersB);
440  if (event) event->AddData(ECbmDataType::kStsHit, index);
441  nHits++;
442  } //# hits in module
443  }
444  fTimer.Stop();
445  Double_t time4 = fTimer.RealTime(); // Time for data I/O
446 
447  // --- Bookkeeping
448  Double_t realTime = time1 + time2 + time3 + time4;
449  fNofEvents++;
450  fNofDigis += nDigis;
451  fNofDigisUsed += nDigisGood;
452  fNofDigisIgnored += nDigisIgnored;
453  fNofClusters += nClusters;
454  fNofHits += nHits;
455  fTimeTot += realTime;
456  fTime1 += time1;
457  fTime2 += time2;
458  fTime3 += time3;
459  fTime4 += time4;
460 
461  // --- Screen log
462  if (event) {
463  LOG(info) << setw(20) << left << GetName() << "[" << fixed
464  << setprecision(4) << realTime << " s] : Event " << right
465  << setw(6) << event->GetNumber() << ", digis: " << nDigis
466  << ", ignored: " << nDigisIgnored << ", clusters: " << nClusters
467  << ", hits " << nHits;
468  } //? event mode
469  else {
470  LOG(info) << setw(20) << left << GetName() << "[" << fixed
471  << setprecision(4) << realTime << " s] : TSlice " << right
472  << setw(6) << fNofTimeslices << ", digis: " << nDigis
473  << ", ignored: " << nDigisIgnored << ", clusters: " << nClusters
474  << ", hits " << nHits;
475  }
476 }
477 // -------------------------------------------------------------------------
478 
479 
480 // ----- Connect parameter container -----------------------------------
482  FairRuntimeDb* db = FairRun::Instance()->GetRuntimeDb();
483  fParSim = dynamic_cast<CbmStsParSim*>(db->getContainer("CbmStsParSim"));
484  fParSetModule =
485  dynamic_cast<CbmStsParSetModule*>(db->getContainer("CbmStsParSetModule"));
486  fParSetSensor =
487  dynamic_cast<CbmStsParSetSensor*>(db->getContainer("CbmStsParSetSensor"));
488  fParSetCond = dynamic_cast<CbmStsParSetSensorCond*>(
489  db->getContainer("CbmStsParSetSensorCond"));
490 }
491 // -------------------------------------------------------------------------
CbmStsRecoModule::AddDigiToQueue
void AddDigiToQueue(const CbmStsDigi *digi, Int_t digiIndex)
Add a digi to the processing queue.
Definition: CbmStsRecoModule.cxx:57
CbmRecoSts::fNofEvents
Int_t fNofEvents
Number of events processed.
Definition: CbmRecoSts.h:255
CbmStsElement::GetAddress
Int_t GetAddress() const
Definition: CbmStsElement.h:65
CbmRecoSts::Exec
virtual void Exec(Option_t *opt)
Task execution.
Definition: CbmRecoSts.cxx:128
ECbmDataType::kStsHit
@ kStsHit
CbmRecoSts::~CbmRecoSts
virtual ~CbmRecoSts()
Destructor
Definition: CbmRecoSts.cxx:51
CbmStsParSetSensor.h
ECbmDataType::kStsDigi
@ kStsDigi
CbmStsCluster
Data class for STS clusters.
Definition: CbmStsCluster.h:31
CbmStsParSensorCond::GetHallMobility
Double_t GetHallMobility(Double_t eField, Int_t chargeType) const
Hall mobility.
Definition: CbmStsParSensorCond.cxx:90
kCbmRecoEvent
@ kCbmRecoEvent
Definition: CbmRecoSts.h:34
CbmRecoSts::Init
virtual InitStatus Init()
Initialisation.
Definition: CbmRecoSts.cxx:223
CbmRecoSts::fParSetModule
CbmStsParSetModule * fParSetModule
Module parameters.
Definition: CbmRecoSts.h:233
CbmRecoSts::fNofDigisIgnored
Double_t fNofDigisIgnored
Total number of ignored digis.
Definition: CbmRecoSts.h:258
CbmStsSetup.h
CbmRecoSts::fModules
std::map< UInt_t, CbmStsRecoModule * > fModules
Definition: CbmRecoSts.h:268
CbmRecoSts::fEvents
TClonesArray * fEvents
Definition: CbmRecoSts.h:225
CbmDigiManager::Init
InitStatus Init()
Initialisation.
Definition: CbmDigiManager.cxx:71
CbmRecoSts::fUserParModule
CbmStsParModule * fUserParModule
Definition: CbmRecoSts.h:239
CbmRecoSts::fSetup
CbmStsSetup * fSetup
Output hit array.
Definition: CbmRecoSts.h:231
CbmRecoSts::CbmRecoSts
CbmRecoSts(ECbmRecoMode mode=kCbmRecoTimeslice, Bool_t writeClusters=kFALSE, Bool_t runParallel=kFALSE)
Constructor.
ClassImp
ClassImp(CbmRecoSts) CbmRecoSts
Definition: CbmRecoSts.cxx:36
CbmStsRecoModule
Class for reconstruction in one STS module.
Definition: CbmStsRecoModule.h:44
CbmStsParSensorCond
Parameters for operating conditions of a STS sensor.
Definition: CbmStsParSensorCond.h:28
CbmStsSetup::Instance
static CbmStsSetup * Instance()
Definition: CbmStsSetup.cxx:293
CbmStsHit::GetFrontClusterId
Int_t GetFrontClusterId() const
Definition: CbmStsHit.h:93
CbmDigiManager::GetNofDigis
static Int_t GetNofDigis(ECbmModuleId systemId)
Definition: CbmDigiManager.cxx:62
CbmRecoSts::fNofClusters
Double_t fNofClusters
Total number of clusters produced.
Definition: CbmRecoSts.h:259
CbmStsHit::SetBackClusterId
void SetBackClusterId(Int_t index)
Set the index of the backside cluster To keep track of the input during matching.
Definition: CbmStsHit.h:105
CbmStsParSim::ToString
std::string ToString() const
String output.
Definition: CbmStsParSim.cxx:47
CbmRecoSts::fModuleIndex
std::vector< CbmStsRecoModule * > fModuleIndex
Definition: CbmRecoSts.h:269
CbmStsParSetModule::GetParModule
const CbmStsParModule & GetParModule(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetModule.cxx:49
CbmDigiManager::IsPresent
static Bool_t IsPresent(ECbmModuleId systemId)
Presence of a digi branch.
Definition: CbmDigiManager.cxx:112
CbmStsParSetModule.h
CbmRecoSts::CreateModules
UInt_t CreateModules()
Instantiate reconstruction modules @value Number of modules created.
Definition: CbmRecoSts.cxx:56
CbmStsElement::GetPnode
TGeoPhysicalNode * GetPnode() const
Definition: CbmStsElement.h:106
CbmDigiManager::Instance
static CbmDigiManager * Instance()
Static instance.
Definition: CbmDigiManager.h:93
CbmStsParSetSensorCond.h
CbmStsParSim.h
CbmRecoSts::fParSetSensor
CbmStsParSetSensor * fParSetSensor
Sensor parameters.
Definition: CbmRecoSts.h:234
CbmStsParSetModule::ToString
std::string ToString() const
Info to string.
Definition: CbmStsParSetModule.cxx:65
CbmEvent.h
CbmStsHit
data class for a reconstructed 3-d hit in the STS
Definition: CbmStsHit.h:31
CbmStsParSetSensorCond
Parameters container for CbmStsParSensorCond.
Definition: CbmStsParSetSensorCond.h:30
CbmRecoSts::fNofDigis
Double_t fNofDigis
Total number of digis processed.
Definition: CbmRecoSts.h:256
CbmStsModule
Class representing an instance of a readout unit in the CBM-STS.
Definition: CbmStsModule.h:31
CbmStsParSensor
Constructional parameters of a STS sensor.
Definition: CbmStsParSensor.h:38
CbmStsDigi.h
CbmRecoSts::fTime2
Double_t fTime2
Time for distributing data.
Definition: CbmRecoSts.h:263
CbmStsParSetSensorCond::ToString
std::string ToString()
Info to string.
Definition: CbmStsParSetSensorCond.cxx:209
CbmStsParSetSensor::GetParSensor
const CbmStsParSensor & GetParSensor(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetSensor.cxx:49
CbmRecoSts::ProcessData
void ProcessData(CbmEvent *event=nullptr)
Process one time slice or event.
Definition: CbmRecoSts.cxx:336
CbmRecoSts::fNofHits
Double_t fNofHits
Total number of clusters produced.
Definition: CbmRecoSts.h:260
CbmRecoSts::fNofTimeslices
Int_t fNofTimeslices
ROOT timer.
Definition: CbmRecoSts.h:254
CbmStsParSetSensor
Parameters container for CbmStsParSensor.
Definition: CbmStsParSetSensor.h:30
CbmRecoSts::Finish
virtual void Finish()
End-of-run action.
Definition: CbmRecoSts.cxx:159
kStsModule
@ kStsModule
Definition: CbmStsAddress.h:21
CbmDigiManager::Get
const Digi * Get(Int_t index) const
Get a digi object.
Definition: CbmDigiManager.h:52
CbmStsParModule
Parameters for one STS module.
Definition: CbmStsParModule.h:28
CbmRecoSts.h
CbmRecoSts::fTimeTot
Double_t fTimeTot
Total execution time.
Definition: CbmRecoSts.h:261
CbmRecoSts::fTimer
TStopwatch fTimer
Definition: CbmRecoSts.h:253
CbmStsHit::SetFrontClusterId
void SetFrontClusterId(Int_t index)
Set the index of the frontside cluster To keep track of the input during matching.
Definition: CbmStsHit.h:99
CbmStsRecoModule.h
CbmRecoSts::fTime1
Double_t fTime1
Time for resetting modules.
Definition: CbmRecoSts.h:262
CbmRecoSts::fTime3
Double_t fTime3
Time for reconstruction.
Definition: CbmRecoSts.h:264
CbmRecoSts::LorentzShift
std::pair< Double_t, Double_t > LorentzShift(const CbmStsParSensorCond &conditions, Double_t dZ, Double_t bY)
Average Lorentz Shift in a sensor.
Definition: CbmRecoSts.cxx:303
kCbmRecoTimeslice
@ kCbmRecoTimeslice
Definition: CbmRecoSts.h:34
CbmStsSetup::Init
Bool_t Init(const char *geometryFile=nullptr)
Initialise the setup.
Definition: CbmStsSetup.cxx:201
CbmRecoSts::fHits
TClonesArray * fHits
Output cluster array.
Definition: CbmRecoSts.h:228
CbmStsDigi
Data class for a single-channel message in the STS.
Definition: CbmStsDigi.h:29
CbmRecoSts::fTime4
Double_t fTime4
Time for output results.
Definition: CbmRecoSts.h:265
CbmStsSetup::GetModule
CbmStsModule * GetModule(Int_t index) const
Get a module from the module array.
Definition: CbmStsSetup.h:68
CbmStsDigi::GetAddress
Int_t GetAddress() const
Definition: CbmStsDigi.h:53
CbmRecoSts::fNofDigisUsed
Double_t fNofDigisUsed
Total number of used digis.
Definition: CbmRecoSts.h:257
CbmRecoSts::fParSetCond
CbmStsParSetSensorCond * fParSetCond
Sensor conditions.
Definition: CbmRecoSts.h:235
CbmRecoSts::fParSim
CbmStsParSim * fParSim
Instance of STS setup.
Definition: CbmRecoSts.h:232
shape
UInt_t shape
Definition: CbmMvdSensorDigiToHitTask.cxx:73
CbmStsHit::GetBackClusterId
Int_t GetBackClusterId() const
Definition: CbmStsHit.h:69
CbmAddress.h
CbmDigiManager.h
CbmStsParSim::LorentzShift
Bool_t LorentzShift() const
Check whether Lorentz shift is applied.
Definition: CbmStsParSim.h:76
ToIntegralType
constexpr auto ToIntegralType(T enumerator) -> typename std::underlying_type< T >::type
Definition: CbmDefs.h:24
CbmStsElement::GetDaughter
CbmStsElement * GetDaughter(Int_t index) const
Definition: CbmStsElement.cxx:120
CbmStsElement::GetNofDaughters
Int_t GetNofDaughters() const
Definition: CbmStsElement.h:95
CbmRecoSts::fUserParSensorCond
CbmStsParSensorCond * fUserParSensorCond
Definition: CbmRecoSts.h:241
CbmStsParSim
Settings for STS simulation (digitizer)
Definition: CbmStsParSim.h:25
CbmRecoSts
Task class for local reconstruction in the STS.
Definition: CbmRecoSts.h:54
CbmRecoSts::SetParContainers
virtual void SetParContainers()
Define the needed parameter containers.
Definition: CbmRecoSts.cxx:481
CbmEvent
Class characterising one event by a collection of links (indices) to data objects,...
Definition: CbmEvent.h:30
CbmStsParSetModule
Parameters container for CbmStsParModule.
Definition: CbmStsParSetModule.h:30
CbmStsParSensorCond::GetVbias
Double_t GetVbias() const
Bias voltage.
Definition: CbmStsParSensorCond.h:101
CbmRecoSts::fUserParSensor
CbmStsParSensor * fUserParSensor
Definition: CbmRecoSts.h:240
CbmRecoSts::fMode
ECbmRecoMode fMode
Time-slice or event.
Definition: CbmRecoSts.h:244
ECbmRecoMode
ECbmRecoMode
Definition: CbmRecoSts.h:34
CbmStsModule.h
CbmStsAddress::GetMotherAddress
Int_t GetMotherAddress(Int_t address, Int_t level)
Construct the address of an element from the address of a descendant element.
Definition: CbmStsAddress.cxx:168
ECbmModuleId::kSts
@ kSts
Silicon Tracking System.
CbmRecoSts::fClusters
TClonesArray * fClusters
Interface to digi branch.
Definition: CbmRecoSts.h:227
CbmStsSetup::GetNofModules
Int_t GetNofModules() const
Definition: CbmStsSetup.h:82
CbmStsParSensorCond::GetVfd
Double_t GetVfd() const
Definition: CbmStsParSensorCond.h:107
CbmStsElement
Class representing an element of the STS setup.
Definition: CbmStsElement.h:32
CbmStsParSetSensorCond::GetParSensor
const CbmStsParSensorCond & GetParSensor(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetSensorCond.cxx:57
CbmStsAddress::ToString
std::string ToString(Int_t address)
String output.
Definition: CbmStsAddress.cxx:221
ECbmDataType::kStsCluster
@ kStsCluster
CbmRecoSts::fDigiManager
CbmDigiManager * fDigiManager
Input array of events.
Definition: CbmRecoSts.h:226
CbmAddress::GetSystemId
static Int_t GetSystemId(UInt_t address)
Definition: CbmAddress.h:43