FairRoot/PandaRoot
PndT0CandidateDetermination.cxx
Go to the documentation of this file.
2 
3 #include <iostream>
4 
5 // Root includes
6 // framework includes
7 #include "FairRootManager.h"
8 #include "FairTimeStamp.h"
9 
10 
11 
13  FairTask("PndT0CandidateDeterminationTask")
14 {
15  fPersistence = kTRUE;
16  fRunContinuous = kTRUE;
17  fOutBranchName = "T0Candidates";
18  fInBranch = inputBranch;
19  fBlockedTime = 4;
20  fStartTime = -10;
21 }
22 
24 {
25 }
26 
27 
28 
29 // ----- Public method Init --------------------------------------------
31 {
32  FairRootManager* ioman = FairRootManager::Instance();
33 
34  if ( ! ioman )
35  {
36  std::cout << "-E- PndT0CandidateDetermination::Init: "
37  << "RootManager not instantiated!" << std::endl;
38  return kFATAL;
39  }
40 
41 
42  fInArray = (TClonesArray*)ioman->GetObject(fInBranch.Data());
43 
44  if ( ! fInArray )
45  {
46  std::cout << "-W- PndT0CandidateDetermination::Init: "
47  << "No input branch found!" << std::endl;
48  return kERROR;
49  }
50 
51  fOutArray = ioman->Register(fOutBranchName.Data(), "FairTimeStamp", "EventDetermination", fPersistence);
52 
53  return kSUCCESS;
54 }
55 
56 
57 // ----- Public method Exec --------------------------------------------
59 {
60  // Declare some variables
61 
62  FairTimeStamp *inStamp;
63  double time;
64 
65  // Reset output array
66  fOutArray->Clear();
67  if (fInArray->GetEntriesFast()==0) return;
68 
69  if(fRunContinuous==kFALSE){ // --- for Event based Simulation
70  inStamp = (FairTimeStamp*) fInArray->At(0);
71  new ((*fOutArray)[fOutArray->GetEntries()]) FairTimeStamp(*(inStamp));
72  }
73  else{ // for time based simulation or continuous read out
74 
75  for (int j = 0; j < fInArray->GetEntriesFast(); j++){
76  inStamp = (FairTimeStamp*) fInArray->At(j);
77  time = inStamp->GetTimeStamp();
78  if (time >= fStartTime){ // check if timeStamp can trigger a new T0
79 
80  new ((*fOutArray)[fOutArray->GetEntries()]) FairTimeStamp(*(inStamp));
81  fStartTime = time+fBlockedTime; // set new StartTime for potential T0s.
82  }
83 
84  }
85 
86  }
87 }
88 
89 
91 
92  if(fRunContinuous==kTRUE){
93  // read in next to last "event" and write out the missing data
94 
95  FairRootManager* ioman = FairRootManager::Instance();
96  fInArray = (TClonesArray*)ioman->GetObject(fInBranch.Data());
97 
98  Exec("0");
99  FairRootManager::Instance()->SetLastFill();
100 
101  }
102  //fOutArray->Delete();
103 }
104 
105 
107 
PndT0CandidateDetermination(TString inputBranch)
ClassImp(PndT0CandidateDetermination)