FairRoot/PandaRoot
PndMapSorterTask.cxx
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence version 3 (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 // -------------------------------------------------------------------------
9 // ----- PndMapSorterTaskT source file -----
10 // -------------------------------------------------------------------------
11 
12 #include "PndMapSorterTask.h"
13 
14 #include "FairLink.h" // for FairLink
15 #include "FairRootManager.h" // for FairRootManager
16 #include "FairTimeStamp.h" // for FairTimeStamp
17 
18 #include <iosfwd> // for ostream
19 #include "TClass.h" // for TClass
20 #include "TClonesArray.h" // for TClonesArray
21 
22 #include <iostream> // for operator<<, cout, ostream, etc
23 #include <vector> // for vector
24 
26 {
27  return kSUCCESS;
28 }
29 
30 // ----- Public method Init --------------------------------------------
32 {
33 
34  FairRootManager* ioman = FairRootManager::Instance();
35  if ( ! ioman ) {
36  std::cout << "-E- PndMapSorterTaskT::Init: "
37  << "RootManager not instantiated!" << std::endl;
38  return kFATAL;
39  }
40 
41  // Create and register output array
42  fInputArray = (TClonesArray*)FairRootManager::Instance()->GetObject(fInputBranch);
43  if (fInputArray == 0){
44  std::cout << "InputBranch " << fInputBranch << " not available!" << std::endl;
45  }
46 
47  if(fVerbose>1) { Info("Init","Registering this branch: %s/%s",fFolder.Data(),fOutputBranch.Data()); }
48  fOutputArray = ioman->Register(fOutputBranch, fInputArray->GetClass()->GetName(), fFolder, fPersistance);
49 
51 
52  SetVerbose(2);
53 
54 
55  return kSUCCESS;
56 }
57 // -------------------------------------------------------------------------
58 
59 // ----- Public method Exec --------------------------------------------
60 void PndMapSorterTask::Exec(Option_t*)
61 {
62 
63  // fInputArray = FairRootManager::Instance()->GetTClonesArray(fInputBranch);
64  if (fVerbose > 1 && fEntryNr % 10 == 0 ) {
65  std::cout << "-I- PndMapSorterTask: " << fEntryNr << " Size PixelArray: " << fInputArray->GetEntriesFast() << std::endl;
66  }
67  Double_t timeOfLast = 0;
68  for (int i = 0; i < fInputArray->GetEntriesFast(); i++) {
69  FairTimeStamp* myData = (FairTimeStamp*)fInputArray->At(i);
70  myData->SetEntryNr(FairLink(0, fEntryNr, fInputBranch, i));
71  if (fVerbose > 2) {
72  std::cout << "Sorter filled with: ";
73  myData->Print();
74  std::cout<< std::endl;
75  }
76  fSorter->AddElement(myData, myData->GetTimeStamp());
77  timeOfLast = myData->GetTimeStamp();
78  }
79  if (fVerbose > 2) { fSorter->print(); }
80 
81  fSorter->WriteOutData(timeOfLast);
82  std::vector<FairTimeStamp*> sortedData = fSorter->GetOutputData();
83 
84 
85  // fOutputArray = FairRootManager::Instance()->GetEmptyTClonesArray(fOutputBranch);
86  // std::cout << "SortedData size: " << sortedData.size() << std::endl;
87  for (int i = 0; i < sortedData.size(); i++) {
88  AddNewDataToTClonesArray(sortedData[i]);
89  }
91  fEntryNr++;
92 }
93 
94 
96 {
97  //FairRootManager* ioman = FairRootManager::Instance();
98  //TClonesArray* myArray = ioman->GetTClonesArray(fOutputBranch);
99  (*fOutputArray)[fOutputArray->GetEntries()] = data->Clone();
100  delete(data);
101 }
102 
103 // -------------------------------------------------------------------------
104 
106 {
107  fOutputArray->Delete();
108 }
109 
111 {
112  //fInputArray = FairRootManager::Instance()->GetTClonesArray(fInputBranch);
113  if (fVerbose > 2) { std::cout << "-I- PndMapSorterTaskT::FinishTask Size InputArray: " << fInputArray->GetEntriesFast() << std::endl; }
114  for (int i = 0; i < fInputArray->GetEntriesFast(); i++) {
115  FairTimeStamp* myDigi = (FairTimeStamp*) fInputArray->At(i);
116  fSorter->AddElement(myDigi, ((FairTimeStamp*)myDigi)->GetTimeStamp());
117  }
118  fSorter->print();
119  fSorter->WriteOutAll();
120  std::vector<FairTimeStamp*> sortedData = fSorter->GetOutputData();
121 
122  std::cout << "PndMapSorterTask::FinishTask sortedData.size(): " << sortedData.size() << std::endl;
123 
124  for (int i = 0; i < sortedData.size(); i++) {
125  if (fVerbose > 2) {
126  std::cout << i << " FinishTask : ";
127  sortedData[i]->Print();
128  std::cout << std::endl;
129  }
130 
131  AddNewDataToTClonesArray(sortedData[i]);
132  }
134  if (fVerbose > 2) {
135  fSorter->print();
136  }
137  FairRootManager::Instance()->SetLastFill();
138 }
139 
int fVerbose
Definition: poormantracks.C:24
virtual void FinishEvent()
Int_t i
Definition: run_full.C:25
TClonesArray * fInputArray
PndMapSorter * fSorter
virtual void AddElement(FairTimeStamp *digi, double timestamp)
Double_t
virtual InitStatus ReInit()
virtual void FinishTask()
virtual void print(std::ostream &out=std::cout)
ClassImp(PndAnaContFact)
virtual std::vector< FairTimeStamp * > GetOutputData()
drchit SetVerbose(iVerbose)
TClonesArray * fOutputArray
virtual void AddNewDataToTClonesArray(FairTimeStamp *data)
virtual void Exec(Option_t *opt)
virtual InitStatus Init()