FairRoot/PandaRoot
PndEmcReadProtoData.cxx
Go to the documentation of this file.
1 /*******************************************
2  * PndEmcReadProtoData 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 "PndEmcReadProtoData.h"
11 #include "FairRootManager.h"
12 #include "FairRuntimeDb.h"
13 #include "FairRun.h"
14 #include "TParticle.h"
15 #include "PndEmcMapper.h"
16 
17 PndEmcReadProtoData::PndEmcReadProtoData(ReadMainzProto60 *datareader, Bool_t StoreHits, Int_t debuglevel)
18  :lDataReader(datareader),lStoreHits(StoreHits),lOnlyPrompt(kFALSE),lOnlyTagged(kFALSE),lDebug(debuglevel),IsInit(kFALSE)
19 {};
20 
22  lDataReader->Reset();
23 
24  FairRootManager* ioman = FairRootManager::Instance();
25  if ( ! ioman ) {
26  printf("-E- PndEmcHitProducer::Init: RootManager not instantiated!\n");
27  return kFATAL;
28  }
29 
30  lHitArray = new TClonesArray("PndEmcHit");
31  ioman->Register("EmcHit","Emc",lHitArray,lStoreHits);
32 
33  lDigiArray = new TClonesArray("PndEmcDigi");
34  ioman->Register("EmcDigi","Emc",lDigiArray,lStoreHits);
35 
36  lGammaArray = new TClonesArray("TParticle");
37  ioman->Register("TaggedGamma","Emc",lGammaArray,lStoreHits);
38 
39  printf("Reading info from PndEmcDigiPar\n");
40 
41 // FairRun* run = FairRun::Instance();
42 // run->GetRuntimeDb()->initContainers(0);
43 
48 
49 
50  printf("PndEmcReadProtoData: Init successfull\n");
51 
52  IsInit = kTRUE;
53  return kSUCCESS;
54 }
55 
57 
58  // Get run and runtime database
59  FairRun* run = FairRun::Instance();
60  if ( ! run ) Fatal("SetParContainers", "No analysis run");
61 
62  FairRuntimeDb* db = run->GetRuntimeDb();
63  if ( ! db ) Fatal("SetParContainers", "No runtime database");
64 
65  // Get Emc digitisation parameter container
66  lDigiPar = (PndEmcDigiPar*) db->getContainer("PndEmcDigiPar");
67 
68  // Get Emc geometry parameter container
69  lGeoPar = (PndEmcGeoPar*) db->getContainer("PndEmcGeoPar");
70 
71 
72  lGeoPassivePar = (PndGeoPassivePar *)db->getContainer("PndGeoPassivePar");
73  lBaseParSet = (FairBaseParSet *)db->getContainer("FairBaseParSet");
74 
75  if(lDigiPar != NULL){
76  printf("Got PndEmcDigiPar from database\n");
77  lDigiPar->Print();
78  } else {
79  printf("could not get PndEmcDigiPar from database\n");
80  abort();
81  }
82 
83 
84 }
85 
87  lOnlyTagged = onlyTagged;
88  return lOnlyTagged;
89 }
90 
92  lOnlyPrompt = onlyPrompt;
93  return lOnlyPrompt;
94 }
95 
96 void PndEmcReadProtoData::Exec(Option_t *){
97  if(!IsInit){
98  printf("Not Initialised! You have to call Init() first.\n");
99  return;
100  }
101 
102  TClonesArray &HitArrayRef = *lHitArray;
103  TClonesArray &DigiArrayRef = *lDigiArray;
104  TClonesArray &GammaArrayRef = *lGammaArray;
105  GammaArrayRef.Clear();
106  HitArrayRef.Clear();
107  DigiArrayRef.Clear();
108 
115  //lDataReader->PrintEvent();
116 
117  Int_t NumberOfPhotons = 0;
118  Int_t NumberOfHits = 0;
119  Int_t NumberOfDigis = 0;
120  Int_t DetectorId = 0;
121  Int_t Row = 0;
122  Int_t Col = 0;
123  for(Int_t i = 0; i<16;i++){
124  if(lTaggerTimes[i]>10 && lTaggerEnergies[i]>0){
125  NumberOfPhotons = GammaArrayRef.GetEntriesFast();
126  new (GammaArrayRef[NumberOfPhotons]) TParticle(22,0,0,0,0,0,0,0,lTaggerEnergies[i]/1000,lTaggerEnergies[i]/1000,0,0,0,lTaggerTimes[i]);
127 
128  }
129  }
130  if(!lOnlyTagged || GammaArrayRef.GetEntriesFast() > 0){
131  for(Int_t n = 0;n<60;n++){
132  if((!lOnlyPrompt || lTimes[n]>10) && lEnergies[n] > lEnergyHitThreshold * 1000){
133  NumberOfHits = HitArrayRef.GetEntriesFast();
134  if(NumberOfHits>60){
135  printf("more than 60 Hits in this event, aborting");
136  return;
137  }
138  Row=n/10 +1;
139  Col=n%10 +1;
140  DetectorId = 700010000 + Col + Row * 1000000;
141  new (HitArrayRef[NumberOfHits]) PndEmcHit(1,DetectorId,lADCs[n],lTimes[n],0,0,0);
142 
143  if(lEnergies[n] > lEnergyDigiThreshold *1000){
144  NumberOfDigis = DigiArrayRef.GetEntriesFast();
145  new (DigiArrayRef[NumberOfDigis]) PndEmcDigi(1,DetectorId,lEnergies[n]/1000,lTimes[n],NumberOfHits);
146  }
147  }
148  }
149  }
150 }
151 
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
TClonesArray * lGammaArray
virtual void Reset()=0
Int_t run
Definition: autocutx.C:47
represents the reconstructed hit of one emc crystal
Definition: PndEmcDigi.h:40
Int_t i
Definition: run_full.C:25
virtual void GetEnergies(Double_t *energies)=0
int n
void SetMapperVersion(Int_t mapperVersion)
Definition: PndEmcGeoPar.h:21
virtual void SetParContainers()
TClonesArray * lHitArray
virtual void GetTaggerEnergies(Double_t *taggerEnergies)=0
Double_t GetEnergyDigiThreshold()
Definition: PndEmcDigiPar.h:42
void InitEmcMapper()
PndEmcDigiPar * lDigiPar
TClonesArray * lDigiArray
parameter set of Emc digitisation
Definition: PndEmcDigiPar.h:12
virtual void GetTaggerTimes(Double_t *taggertimes)=0
virtual void Exec(Option_t *opt)
Double_t GetEnergyHitThreshold()
Definition: PndEmcDigiPar.h:15
PndGeoPassivePar * lGeoPassivePar
FairBaseParSet * lBaseParSet
Bool_t OnlyPrompt(Bool_t onlyPrompt=kTRUE)
Double_t lTaggerEnergies[16]
represents the deposited energy of one emc crystal from simulation
Definition: PndEmcHit.h:26
Bool_t OnlyTagged(Bool_t onlyTagged=kTRUE)
ReadMainzProto60 * lDataReader
virtual void GetADCValues(Double_t *ADCs)=0
virtual Long_t ReadNextEvent()=0
virtual InitStatus Init()
virtual void GetTimes(Double_t *times)=0
PndEmcReadProtoData(ReadMainzProto60 *datareader, Bool_t StoreHits=kTRUE, Int_t debuglevel=0)