FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndGemEventBuilderOnTracks Class Reference

#include <PndGemEventBuilderOnTracks.h>

Inheritance diagram for PndGemEventBuilderOnTracks:

Public Member Functions

 PndGemEventBuilderOnTracks ()
 
 PndGemEventBuilderOnTracks (const char *name, Int_t iVerbose=0)
 
virtual ~PndGemEventBuilderOnTracks ()
 
virtual void StoreEventData (FairRecoEventHeader *recoEvent)
 
std::vector< std::pair< double,
FairRecoEventHeader * > > 
FindEvents ()
 
std::vector< std::pair< double,
PndTrack * > > 
Modify (std::pair< double, PndTrack * > oldData, std::pair< double, PndTrack * > newData)
 
void AddNewDataToTClonesArray (FairTimeStamp *data)
 
double FindTimeForData (FairTimeStamp *data)
 
void FillDataMap (FairTimeStamp *data, double activeTime)
 
void EraseDataFromDataMap (FairTimeStamp *data)
 

Private Member Functions

virtual void SetParContainers ()
 
virtual Bool_t Init ()
 
virtual Bool_t ReInit ()
 
virtual void Print ()
 
virtual void Finish ()
 
Int_t CompareTrackToPreviousEvents (Int_t trackId, PndTrack *tempTrack)
 
 ClassDef (PndGemEventBuilderOnTracks, 1)
 

Private Attributes

TClonesArray * fGemTracks
 
TClonesArray * fGemOutTracks
 
Int_t fTNofEvents
 
Int_t fTNofTracks
 
Int_t fTNofRecoEvents
 
Double_t fGemTrackDelay
 
TStopwatch fTimer
 
Double_t fExecTime
 
std::vector< RecoEventfRecoEvents
 
std::map< FairRecoEventHeader,
double > 
fEvent_map
 
std::map< PndTrack, double > fData_map
 

Detailed Description

Definition at line 42 of file PndGemEventBuilderOnTracks.h.

Constructor & Destructor Documentation

PndGemEventBuilderOnTracks::PndGemEventBuilderOnTracks ( )

Default constructor

Definition at line 51 of file PndGemEventBuilderOnTracks.cxx.

52  : FairEventBuilder("GEMEvTrack","PndTrack","GEM",kTRUE),
53  fGemTracks (NULL),
54  fTNofEvents (0),
55  fTNofTracks (0),
56  fTNofRecoEvents(0),
57  fExecTime (0.),
58  fGemTrackDelay (0.)
59 {
60 }
PndGemEventBuilderOnTracks::PndGemEventBuilderOnTracks ( const char *  name,
Int_t  iVerbose = 0 
)

Constructor with task name

Definition at line 66 of file PndGemEventBuilderOnTracks.cxx.

References fVerbose, and iVerbose.

67  : FairEventBuilder("GEMEvTrack","PndTrack","GEM",kTRUE),
68  fGemTracks (NULL),
69  fTNofEvents (0),
70  fTNofTracks (0),
71  fTNofRecoEvents(0),
72  fExecTime (0.),
73  fGemTrackDelay (0.)
74 {
75  SetBuilderName(name);
77 }
int fVerbose
Definition: poormantracks.C:24
TString name
Int_t iVerbose
PndGemEventBuilderOnTracks::~PndGemEventBuilderOnTracks ( )
virtual

Destructor

Definition at line 83 of file PndGemEventBuilderOnTracks.cxx.

83  {
84 }

Member Function Documentation

void PndGemEventBuilderOnTracks::AddNewDataToTClonesArray ( FairTimeStamp *  data)

Definition at line 212 of file PndGemEventBuilderOnTracks.cxx.

References fVerbose.

213 {
214  FairRootManager* ioman = FairRootManager::Instance();
215  TClonesArray* myArray = ioman->GetTClonesArray(fBranchName);
216  if (fVerbose > 1) std::cout << "Data Inserted: " << *(PndTrack*)(data) << std::endl;
217  new ((*myArray)[myArray->GetEntries()]) PndTrack(*(PndTrack*)(data));
218 }
int fVerbose
Definition: poormantracks.C:24
PndGemEventBuilderOnTracks::ClassDef ( PndGemEventBuilderOnTracks  ,
 
)
private
Int_t PndGemEventBuilderOnTracks::CompareTrackToPreviousEvents ( Int_t  trackId,
PndTrack tempTrack 
)
private

Definition at line 244 of file PndGemEventBuilderOnTracks.cxx.

References CAMath::Abs(), Double_t, fRecoEvents, fVerbose, RecoEvent::meanTime, RecoEvent::nofTracks, and RecoEvent::trackIndex.

Referenced by FindEvents().

244  {
245  Double_t trackTime = tempTrack->GetTimeStamp();
246  Int_t recoEvent = -1;
247  for ( Int_t irev = 0 ; irev < fRecoEvents.size() ; irev++ ) {
248  RecoEvent iterREV = fRecoEvents[irev];
249 
250  // SHOULD BE SOMETHING MORE SERIOUS THAN "2."
251  // 26.08 - just checked the reconstructed track time difference,
252  // got a distribution with sigma of 9.49795e-01
253  // Setting to 3.0
254  if ( TMath::Abs(trackTime-iterREV.meanTime) < 3. ) {
255  if ( fVerbose && recoEvent != -1 ) {
256  cout << "track @ " << trackTime << " matches to two reco events: " << irev << " and " << recoEvent << endl;
257  }
258  else {
259  recoEvent = irev;
260  }
261  }
262  }
263 
264  // matching event found
265  if ( recoEvent != -1 ) {
266  fRecoEvents[recoEvent].meanTime = (fRecoEvents[recoEvent].meanTime*fRecoEvents[recoEvent].nofTracks+trackTime)/((Double_t)(fRecoEvents[recoEvent].nofTracks+1));
267  fRecoEvents[recoEvent].nofTracks = fRecoEvents[recoEvent].nofTracks+1;
268  fRecoEvents[recoEvent].trackIndex.push_back(trackId);
269  }
270  else {
271  RecoEvent tempREV;
272  tempREV.meanTime = trackTime;
273  tempREV.nofTracks = 1;
274  tempREV.trackIndex.push_back(trackId);
275 
276  fRecoEvents.push_back(tempREV);
277  }
278 
279  return recoEvent;
280 }
int fVerbose
Definition: poormantracks.C:24
static T Abs(const T &x)
Definition: PndCAMath.h:39
Double_t
std::vector< Int_t > trackIndex
std::vector< RecoEvent > fRecoEvents
void PndGemEventBuilderOnTracks::EraseDataFromDataMap ( FairTimeStamp *  data)

Definition at line 236 of file PndGemEventBuilderOnTracks.cxx.

References fData_map.

237 {
238  PndTrack myData = *(PndTrack*)data;
239  if (fData_map.find(myData) != fData_map.end())
240  fData_map.erase(fData_map.find(myData));
241 }
std::map< PndTrack, double > fData_map
void PndGemEventBuilderOnTracks::FillDataMap ( FairTimeStamp *  data,
double  activeTime 
)

Definition at line 230 of file PndGemEventBuilderOnTracks.cxx.

References fData_map.

231 {
232  PndTrack myData = *(PndTrack*)data;
233  fData_map[myData] = activeTime;
234 }
std::map< PndTrack, double > fData_map
std::vector< std::pair< double, FairRecoEventHeader * > > PndGemEventBuilderOnTracks::FindEvents ( )

Definition at line 90 of file PndGemEventBuilderOnTracks.cxx.

References CompareRecoEvents(), CompareTrackToPreviousEvents(), fEvent_map, fExecTime, fGemTrackDelay, fGemTracks, fRecoEvents, fTimer, fTNofEvents, fTNofRecoEvents, fTNofTracks, and fVerbose.

90  {
91  if ( fVerbose )
92  cout << endl << "======== PndGemEventBuilderOnTracks::FindEvents(Event = " << fTNofEvents << " ) ====================" << endl;
93 
94  fTimer.Start();
95 
96  fRecoEvents.clear();
97 
98  fTNofTracks += fGemTracks->GetEntries();
99 
100  PndTrack* tempTrack = NULL;
101 
102  if ( fVerbose )
103  cout << "There are " << fGemTracks->GetEntries() << " tracks." << endl;
104 
105  for ( Int_t itrack = 0 ; itrack < fGemTracks->GetEntries() ; itrack++ ) {
106  tempTrack = (PndTrack*)fGemTracks->At(itrack);
107 
108  if ( fVerbose > 1 ) {
109  cout << " " << fTNofEvents << " . " << itrack << " @ " << tempTrack->GetTimeStamp() << "ns" << endl
110  << " trying to match to one of " << fRecoEvents.size() << " reco events" << endl;
111  }
112 
113  Int_t revNo = CompareTrackToPreviousEvents(itrack,tempTrack);
114 
115  FillNewData(tempTrack,
116  tempTrack->GetTimeStamp(),
117  tempTrack->GetTimeStamp());
118 
119  }
120 
121  fTNofEvents += 1;
122 
123  fTNofRecoEvents += fRecoEvents.size();
124 
125  std::sort(fRecoEvents.begin(),fRecoEvents.end(),CompareRecoEvents);
126 
127  std::vector<std::pair<double, FairRecoEventHeader*> > result;
128  std::pair<double,FairRecoEventHeader*> singleResult;
129 
130  if ( fVerbose )
131  cout << "There are " << fRecoEvents.size() << " events." << endl;
132 
133  for ( Int_t irev = 0 ; irev < fRecoEvents.size() ; irev++ ) {
134  FairRecoEventHeader recoEvent;
135  recoEvent.SetEventTime(fRecoEvents[irev].meanTime-fGemTrackDelay,5.);
136  recoEvent.SetIdentifier(GetIdentifier());
137  SetMaxAllowedTime(recoEvent.GetEventTime());
138 
139  fEvent_map[recoEvent] = recoEvent.GetEventTime();
140 
141  singleResult.first = recoEvent.GetEventTime();
142  singleResult.second = (FairRecoEventHeader*)&fEvent_map.rbegin()->first;
143 
144  if ( fVerbose )
145  cout << "FOUND EVENT @ " << singleResult.first << endl;
146 
147  result.push_back(singleResult);
148  }
149 
150  fExecTime += fTimer.RealTime();
151  fTimer.Stop();
152 
153  return result;
154 }
int fVerbose
Definition: poormantracks.C:24
std::map< FairRecoEventHeader, double > fEvent_map
std::vector< RecoEvent > fRecoEvents
bool CompareRecoEvents(RecoEvent ev1, RecoEvent ev2)
Int_t CompareTrackToPreviousEvents(Int_t trackId, PndTrack *tempTrack)
double PndGemEventBuilderOnTracks::FindTimeForData ( FairTimeStamp *  data)

Definition at line 220 of file PndGemEventBuilderOnTracks.cxx.

References fData_map.

221 {
222  std::map<PndTrack, double>::iterator it;
223  PndTrack myData = *(PndTrack*)data;
224  it = fData_map.find(myData);
225  if (it == fData_map.end())
226  return -1;
227  else
228  return it->second;
229 }
std::map< PndTrack, double > fData_map
void PndGemEventBuilderOnTracks::Finish ( )
privatevirtual

Finish at the end of each event

Definition at line 334 of file PndGemEventBuilderOnTracks.cxx.

References Double_t, fExecTime, fTNofEvents, fTNofRecoEvents, and fTNofTracks.

334  {
335 
336  cout << "-------------------- " << GetBuilderName() << " : Summary -----------------------" << endl;
337  cout << " Events: " << setw(10) << fTNofEvents << endl;
338  cout << " Tracks: " << setw(10) << fTNofTracks << " ( " << (Double_t)fTNofTracks /((Double_t)fTNofEvents) << " per event )" << endl;
339  cout << " Reco Events: " << setw(10) << fTNofRecoEvents << endl;
340  cout << " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " << endl;
341  cout << " >>> EB >>> all time = " << fExecTime << "s" << endl;
342  cout << "---------------------------------------------------------------------" << endl;
343 }
TLorentzVector s
Definition: Pnd2DStar.C:50
Double_t
Bool_t PndGemEventBuilderOnTracks::Init ( )
privatevirtual

Intialisation

Definition at line 299 of file PndGemEventBuilderOnTracks.cxx.

References fGemTrackDelay, and fGemTracks.

299  {
300 
301  // Get input array
302  FairRootManager* ioman = FairRootManager::Instance();
303  if ( ! ioman ) Fatal("Init", "No FairRootManager");
304 
305  fGemTracks = (TClonesArray*) ioman->GetObject("GEMTrack");
306 
307  // fGemOutTracks = new TClonesArray("PndTrack",100);
308  // ioman->Register("GEMTrackQQQ", "Gem Tracks", fGemOutTracks, kTRUE);
309  // ioman->RegisterWriteoutBuffer("GEMDigi", fDataBuffer);
310  // fDataBuffer->ActivateBuffering(fTimeOrderedDigi);
311 
312  fGemTrackDelay = 4.96229;
313 
314  return kTRUE;
315 }
std::vector< std::pair< double, PndTrack * > > PndGemEventBuilderOnTracks::Modify ( std::pair< double, PndTrack * >  oldData,
std::pair< double, PndTrack * >  newData 
)

Definition at line 205 of file PndGemEventBuilderOnTracks.cxx.

206 {
207  std::vector<std::pair<double, PndTrack*> > result;
208  result.push_back(newData);
209  return result;
210 }
void PndGemEventBuilderOnTracks::Print ( )
privatevirtual

Definition at line 158 of file PndGemEventBuilderOnTracks.cxx.

References fEvent_map.

158  {
159  cout << " print " << endl;
160  cout << " fEventMap has " << fEvent_map.size() << " entries" << endl;
161  std::map<FairRecoEventHeader,double>::iterator iter;
162  for ( iter = fEvent_map.begin() ; iter != fEvent_map.end() ; iter++ ) {
163  cout << " // for time " << iter->second << " got " << iter->first.GetEventTime() << " at an address " << &iter->first << endl;
164  }
165  cout << "-------" << endl;
166 }
std::map< FairRecoEventHeader, double > fEvent_map
Bool_t PndGemEventBuilderOnTracks::ReInit ( )
privatevirtual

Reinitialisation

Definition at line 322 of file PndGemEventBuilderOnTracks.cxx.

322  {
323 
324  // Create sectorwise digi sets
325  // MakeSets();
326 
327  return kTRUE;
328 }
void PndGemEventBuilderOnTracks::SetParContainers ( )
privatevirtual

Get parameter containers

Definition at line 284 of file PndGemEventBuilderOnTracks.cxx.

References run.

284  {
285 
286  // Get run and runtime database
287  FairRunAna* run = FairRunAna::Instance();
288  if ( ! run ) Fatal("SetParContainers", "No analysis run");
289 
290  FairRuntimeDb* db = run->GetRuntimeDb();
291  if ( ! db ) Fatal("SetParContainers", "No runtime database");
292 }
Int_t run
Definition: autocutx.C:47
void PndGemEventBuilderOnTracks::StoreEventData ( FairRecoEventHeader *  recoEvent)
virtual

Definition at line 170 of file PndGemEventBuilderOnTracks.cxx.

References CAMath::Abs(), fData_map, fGemTrackDelay, and fVerbose.

170  {
171  typedef std::multimap<double, std::pair<double, FairTimeStamp*> >::iterator startTimeMapIter;
172 
173  if ( fVerbose ) {
174  cout << "* " << fData_map.size() << " in fData_map "
175  << "* " << fStartTime_map.size() << " in fStartTime_map "
176  << " TO PUT IN EVENT AT " << recoEvent->GetEventTime() << endl;
177  cout << "CHECK TRACKS WITH TimeStamps:" << endl;
178  for (startTimeMapIter jter = fStartTime_map.begin() ; jter != fStartTime_map.end(); ++jter) {
179  std::pair<double, FairTimeStamp*> datb = jter->second;
180  cout << "@@@ " << datb.second->GetTimeStamp() << endl;
181  }
182  }
183 
184  startTimeMapIter iter = fStartTime_map.begin();
185  while ( iter != fStartTime_map.end() ) {
186  std::pair<double, FairTimeStamp*> data = iter->second;
187  if ( fVerbose ) {
188  cout << " ---> check data at " << data.second->GetTimeStamp()
189  << " /// " << data.second->GetTimeStamp()-recoEvent->GetEventTime()-fGemTrackDelay << endl;
190  }
191  if ( TMath::Abs(data.second->GetTimeStamp()-recoEvent->GetEventTime()-fGemTrackDelay) < 3. ) {
192  if ( fVerbose ) cout << "WILL ADD THIS ONE" << endl;
193  FillDataToDeadTimeMap(data.second, data.first);
194 
195  startTimeMapIter save = iter;
196  save++;
197  fStartTime_map.erase(iter);
198  iter = save;
199  }
200  else
201  iter++;
202  }
203 }
int fVerbose
Definition: poormantracks.C:24
static T Abs(const T &x)
Definition: PndCAMath.h:39
std::map< PndTrack, double > fData_map

Member Data Documentation

std::map<PndTrack,double> PndGemEventBuilderOnTracks::fData_map
private
std::map<FairRecoEventHeader,double> PndGemEventBuilderOnTracks::fEvent_map
private

Definition at line 83 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Print().

Double_t PndGemEventBuilderOnTracks::fExecTime
private

Definition at line 80 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Finish().

TClonesArray* PndGemEventBuilderOnTracks::fGemOutTracks
private

Definition at line 72 of file PndGemEventBuilderOnTracks.h.

Double_t PndGemEventBuilderOnTracks::fGemTrackDelay
private

Definition at line 78 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), Init(), and StoreEventData().

TClonesArray* PndGemEventBuilderOnTracks::fGemTracks
private

Definition at line 71 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Init().

std::vector<RecoEvent> PndGemEventBuilderOnTracks::fRecoEvents
private

Definition at line 81 of file PndGemEventBuilderOnTracks.h.

Referenced by CompareTrackToPreviousEvents(), and FindEvents().

TStopwatch PndGemEventBuilderOnTracks::fTimer
private

Definition at line 79 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents().

Int_t PndGemEventBuilderOnTracks::fTNofEvents
private

Definition at line 74 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Finish().

Int_t PndGemEventBuilderOnTracks::fTNofRecoEvents
private

Definition at line 76 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Finish().

Int_t PndGemEventBuilderOnTracks::fTNofTracks
private

Definition at line 75 of file PndGemEventBuilderOnTracks.h.

Referenced by FindEvents(), and Finish().


The documentation for this class was generated from the following files: