FairRoot/PandaRoot
PndGapEventBuilderTask.cxx
Go to the documentation of this file.
2 
3 #include <iostream>
4 
5 // Root includes
6 #include "TROOT.h"
7 #include "TString.h"
8 #include "TClonesArray.h"
9 #include "TParticlePDG.h"
10 
11 // framework includes
12 #include "FairRootManager.h"
13 #include "FairRun.h"
14 #include "FairRuntimeDb.h"
15 #include "FairRunAna.h"
16 #include "FairTimeStamp.h"
17 
19  FairTask("Pnd Gap Event Builder"), fTimeGap(10), fMainBranchName(), fPersistence(kTRUE), fEntryNr(0)
20 {
21 }
22 
24 {
25 }
26 
28 {
29  //FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb(); //[R.K. 01/2017] unused variable?
30 // fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
31 }
32 
34 {
35  InitStatus stat=kSUCCESS;
36  return stat;
37 }
38 
39 // ----- Public method Init --------------------------------------------
41 {
42  FairRootManager* ioman = FairRootManager::Instance();
43 
44  if ( ! ioman )
45  {
46  std::cout << "-E- PndGapEventBuilderTask::Init: "
47  << "RootManager not instantiated!" << std::endl;
48  return kFATAL;
49  }
50 
51  TString outputName = fMainBranchName;
52  outputName.Append("_event");
53  fMainHitArray = (TClonesArray*) FairRootManager::Instance()->GetObject(fMainBranchName);
54  std::cout << "ClassName of HitArray: " << fMainHitArray->ClassName() << std::endl;
55  fMainEventHitArray = ioman->Register(outputName.Data(), fMainHitArray->GetClass()->GetName(), "EventData", fPersistence);
56 
57  for (size_t i = 0; i < fAddBranches.size(); i++){
58  outputName = fAddBranches[i].first;
59  fAddHitArray.push_back((TClonesArray*)ioman->GetObject(outputName.Data()));
60  outputName.Append("_event");
61  fAddEventHitArray.push_back(ioman->Register(outputName.Data(), fAddHitArray[i]->GetClass()->GetName(), "EventData", fPersistence));
62  }
63 
64  fStartFunctor = new StopTime();
65  fStopFunctor= new StopTime();
66  fTimeGapFunctor = new TimeGap();
67 
68  std::cout << "-I- PndGapEventBuilderTask: Initialisation successfull" << std::endl;
69  fInitDone = kTRUE;
70  return kSUCCESS;
71 }
72 
73 
74 // ----- Public method Exec --------------------------------------------
76 {
77  fMainHitArray->Delete();
78  fMainEventHitArray->Delete();
79  for (size_t i = 0; i < fAddHitArray.size(); i++){
80  fAddEventHitArray[i]->Delete();
81  }
82 
83 
84 
85  fMainHitArray = FairRootManager::Instance()->GetData(fMainBranchName, fTimeGapFunctor, fTimeGap);
86 
87  if (++fEntryNr % 1000 == 0 && fVerbose > 0) {
88  std::cout << "-I- PndGapEventBuilderTask:Exec " << fEntryNr << std::endl;
89  }
90 
91 
92  fMainEventHitArray->AbsorbObjects(fMainHitArray);
93 
94 
95 
96  if (fMainEventHitArray->GetEntriesFast() > 0 && fAddHitArray.size() > 0){
97 
98  FairTimeStamp* data = (FairTimeStamp*)fMainEventHitArray->At(0);
99  Double_t startTime = data->GetTimeStamp() - 10;
100  if (startTime < 0) startTime = 0;
101 
102  data = (FairTimeStamp*)fMainEventHitArray->At(fMainEventHitArray->GetEntriesFast() - 1);
103  Double_t stopTime = data->GetTimeStamp();
104 
105  for (size_t i = 0; i < fAddHitArray.size(); i++){
106  TClonesArray* tempArray = FairRootManager::Instance()->GetData(fAddBranches[i].first, fStartFunctor, startTime, fStopFunctor, stopTime + fAddBranches[i].second);
107  fAddEventHitArray[i]->AbsorbObjects(tempArray);
108  }
109  }
110 
111 }
112 
114 {
115 // fMainEventHitArray->Delete();
116 }
117 
118 
120 
int fVerbose
Definition: poormantracks.C:24
Int_t i
Definition: run_full.C:25
ClassImp(PndGapEventBuilderTask)
std::vector< TClonesArray * > fAddEventHitArray
std::vector< std::pair< TString, Double_t > > fAddBranches
std::vector< TClonesArray * > fAddHitArray
virtual void Exec(Option_t *opt)
Double_t