FairRoot/PandaRoot
PndEmcReadProto192Data.cxx
Go to the documentation of this file.
1 /*******************************************
2  * PndEmcReadProto192Data is a Fairtask to read
3  * Data from the Proto60 and create PndEmcHits
4  *
5  * author: Christian Hammann <chammann@hiskp.uni-bonn.de>
6  * Date: 8.1.2010
7  *
8  * ******************************************/
9 
10 #include "PndEmcReadProto192Data.h"
11 #include "FairRootManager.h"
12 #include "FairRuntimeDb.h"
13 #include "FairRun.h"
14 #include "TParticle.h"
15 #include "PndEmcMapper.h"
16 #include "PndEmcMultiWaveform.h"
17 
18 PndEmcReadProto192Data::PndEmcReadProto192Data(TTree *prototree, TTree *taggertree, Bool_t StoreHits, Int_t debuglevel)
19  :lProto192Tree(prototree),lTaggerTree(taggertree),lStoreHits(StoreHits),lDebug(debuglevel),IsInit(kFALSE),signal(256),lTaggerTreeOffset(0),lEventNumOverflow(0) {
20  for(Int_t i = 0; i<64;i++){
21  lIndexMap[i]=0;
22  lWaveformMap[i]=1;
23  }
24 };
25 
27 
28  FairRootManager* ioman = FairRootManager::Instance();
29  if ( ! ioman ) {
30  printf("-E- PndEmcHitProducer::Init: RootManager not instantiated!\n");
31  return kFATAL;
32  }
33 
34  lWaveArray = new TClonesArray("PndEmcMultiWaveform");
35  ioman->Register("EmcMultiWaveform","Emc",lWaveArray,lStoreHits);
36 
39 
40 
41  printf("PndEmcReadProto192Data: Init successfull\n");
42 
44  lProto192Tree->SetBranchAddress("UnpackEvent.",&lProto192Event);
46 
47  if(lTaggerTree !=NULL){
48  lTaggerArray = new TClonesArray("TParticle");
49  ioman->Register("BeamPhotons","Emc",lTaggerArray,lStoreHits);
50  lTaggerTree->SetBranchAddress("BeamPhotons",&lTaggerArray);
51  lTaggerTree->SetBranchAddress("EventNumber",&lTaggerEventNum);
52  }
53 
54  IsInit = kTRUE;
55  return kSUCCESS;
56 }
57 
59 
60  // Get run and runtime database
61  FairRun* run = FairRun::Instance();
62  if ( ! run ) Fatal("SetParContainers", "No analysis run");
63 
64  FairRuntimeDb* db = run->GetRuntimeDb();
65  if ( ! db ) Fatal("SetParContainers", "No runtime database");
66 
67  // Get Emc digitisation parameter container
68  lDigiPar = (PndEmcDigiPar*) db->getContainer("PndEmcDigiPar");
69 
70  // Get Emc geometry parameter container
71  lGeoPar = (PndEmcGeoPar*) db->getContainer("PndEmcGeoPar");
72 
73 
74  lGeoPassivePar = (PndGeoPassivePar *)db->getContainer("PndGeoPassivePar");
75  lBaseParSet = (FairBaseParSet *)db->getContainer("FairBaseParSet");
76 
77  if(lDigiPar != NULL){
78  printf("Got PndEmcDigiPar from database\n");
79  lDigiPar->Print();
80  } else {
81  printf("could not get PndEmcDigiPar from database\n");
82  abort();
83  }
84 
85 
86 }
87 
89  for(Int_t i = 0; i<64;i++){
90  lIndexMap[i]=map[i];
91  }
92 }
93 
95  for(Int_t i = 0; i<64;i++){
96  lWaveformMap[i]=map[i];
97  }
98 }
99 
101  if(!IsInit){
102  printf("Not Initialised! You have to call Init() first.\n");
103  return;
104  }
105 
106  TClonesArray &WaveArrayRef = *lWaveArray;
107 // printf("Size of Wavearray: %i ",WaveArrayRef.GetEntries());
108  WaveArrayRef.Delete();
109  lProto192Tree->GetEntry(lProto192EventNum);
110  PndEmcMultiWaveform *waveform;
111  std::map<Long_t, PndEmcMultiWaveform *> wavemap;
112  std::map<Long_t, PndEmcMultiWaveform *>::iterator it;
113  Long_t detid;
114  for(Int_t channel =0; channel < 64; channel++){
115  detid = lIndexMap[channel];
116  if(detid!=0){
117  it = wavemap.find(detid);
118  if(it != wavemap.end()){
119  waveform = (*it).second;
120  }else{
121  waveform = new (WaveArrayRef[WaveArrayRef.GetEntriesFast()]) PndEmcMultiWaveform(1,detid,256,channel);
122  wavemap.insert(std::pair<Long_t,PndEmcMultiWaveform*>(detid,waveform));
123  }
124  for(Int_t i = 0; i<256;i++){
125  signal[i]= lProto192Event->waveform[channel][i];
126  }
127  waveform->SetWaveform(signal,256,lWaveformMap[channel]);
128  }
129  }
130  if(lTaggerTree != NULL){
132  if(cbevent>0){
133  lTaggerTree->GetEntry(cbevent-1);
134  if(lTaggerEventNum != cbevent){
135  printf("-E- PndEmcReadProto192Data: No Matching Tagger Event found for event %li\n",cbevent);
136  }
137  }
138  if(lProto192Event->rawData[0]==65535){
139  lEventNumOverflow+=65536;
140  }
141  }
142 // delete lProto192Event;
143 // lProto192Event= NULL;
145 }
146 
std::vector< Double_t > signal
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Int_t run
Definition: autocutx.C:47
Int_t i
Definition: run_full.C:25
PndTransMap * map
Definition: sim_emc_apd.C:99
void SetMapperVersion(Int_t mapperVersion)
Definition: PndEmcGeoPar.h:21
void InitEmcMapper()
virtual void Exec(Option_t *opt)
void SetWaveform(const std::vector< Double_t > &signal, Int_t length, Int_t Waveform)
TProtoUnpackEvent * lProto192Event
Int_t waveform[ConfiguredProtoChannels][256]
parameter set of Emc digitisation
Definition: PndEmcDigiPar.h:12
Class to hold multiple waveforms from one Emc Hit / ADC readout.
PndGeoPassivePar * lGeoPassivePar
PndEmcReadProto192Data(TTree *prototree, TTree *taggertree=NULL, Bool_t StoreHits=kTRUE, Int_t debuglevel=0)