]> git.uio.no Git - u/mrichter/AliRoot.git/blame - AD/AliADDigitizer.cxx
AliVVexternalTrackParam removed
[u/mrichter/AliRoot.git] / AD / AliADDigitizer.cxx
CommitLineData
5e319bd5 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id: AliADDigitizer.cxx $ */
17
18///_________________________________________________________________________
19///
20/// This class constructs Digits out of Hits
21///
22///
23
24// --- Standard library ---
25
26// --- ROOT system ---
27#include <TMath.h>
28#include <TTree.h>
29#include <TMap.h>
30#include <TGeoManager.h>
31#include <TGeoPhysicalNode.h>
32#include <AliGeomManager.h>
33#include <TRandom.h>
34#include <TF1.h>
35#include <TH1F.h>
36
37// --- AliRoot header files ---
38#include "AliRun.h"
39#include "AliAD.h"
40#include "AliADhit.h"
41#include "AliRunLoader.h"
42#include "AliLoader.h"
43#include "AliGRPObject.h"
44#include "AliDigitizationInput.h"
45#include "AliCDBManager.h"
46#include "AliCDBStorage.h"
47#include "AliCDBEntry.h"
48//#include "AliADCalibData.h"
49#include "AliCTPTimeParams.h"
50#include "AliLHCClockPhase.h"
51#include "AliADdigit.h"
52#include "AliADDigitizer.h"
53//#include "AliADSDigit.h"
54
55ClassImp(AliADDigitizer)
56
57//____________________________________________________________________________
58AliADDigitizer::AliADDigitizer()
59 :AliDigitizer(),
60 fNdigits(0),
61 fDigits(0)
62{
63 // default constructor
64}
65
66//____________________________________________________________________________
67AliADDigitizer::AliADDigitizer(AliDigitizationInput* digInput)
68 :AliDigitizer(digInput),
69 fNdigits(0),
70 fDigits(0)
71{
72 // constructor
73}
74
75//____________________________________________________________________________
76AliADDigitizer::~AliADDigitizer()
77{
78 // destructor
79
80 if (fDigits) {
81 fDigits->Delete();
82 delete fDigits;
83 fDigits=0;
84 }
85
86}
87
88//____________________________________________________________________________
89Bool_t AliADDigitizer::Init()
90{
91 fDigits = new TClonesArray ("AliADdigit",1000);
92 return kTRUE;
93}
94//____________________________________________________________________________
95
96void AliADDigitizer::Digitize(Option_t* /*option*/)
97{
98 // Creates digits from hits
99
100 // tem. variables
101 Int_t modules[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
102 Int_t moduls[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
103 Int_t mods;
104
105
106 // loaders
107
108 AliRunLoader* outRunLoader = AliRunLoader::GetRunLoader(fDigInput->GetOutputFolderName());
109 if (!outRunLoader)
110 {
111 Error("Exec","Can not get output Run Loader");
112 return;
113 }
114 AliLoader* outLoader = outRunLoader->GetLoader("ADLoader");
115 if (!outLoader)
116 {
117 Error("Exec","Can not get output AD Loader");
118 return;
119 }
120
121 outLoader->LoadDigits("update");
122 if (!outLoader->TreeD()) outLoader->MakeTree("D");
123 outLoader->MakeDigitsContainer();
124 TTree* treeD = outLoader->TreeD();
125 Int_t bufsize = 16000;
126 treeD->Branch("ADdigit",&fDigits, bufsize);
127
128 const Float_t eMin = 0;//1.52; //! MeVs, minimum energy
129 // loop over inputs
130
131 for (Int_t iInput=0; iInput < fDigInput->GetNinputs();iInput++)
132 {
133 AliRunLoader* runLoader = AliRunLoader::GetRunLoader(fDigInput->GetInputFolderName(iInput));
134 AliLoader* loader = runLoader->GetLoader("ADLoader");
135 if (!loader)
136 {
137 Error("Exec","Can not get AD Loader for input %d",iInput);
138 continue;
139 }
140 if (!runLoader->GetAliRun()) runLoader->LoadgAlice();
141 AliAD* ad = (AliAD*) runLoader->GetAliRun()->GetDetector("AD");
142 if (!ad)
143 {
144 Error("Exec","No AD detector for input %d",iInput);
145 continue;
146 }
147 loader->LoadHits();
148 TTree* treeH = loader->TreeH();
149 if (!treeH)
150 {
151 Error("Exec","Cannot get TreeH for input %d",iInput);
152 continue;
153 }
154 TClonesArray* hits = ad->Hits();
155
156 // here I loop over tracks
157 Int_t nTracks = (Int_t) treeH->GetEntries();
158 for (Int_t iTrack=0; iTrack < nTracks; iTrack++)
159 {
160 ad->ResetHits();
161 treeH->GetEvent(iTrack);
162 Int_t nHits = hits->GetEntriesFast();
163 // here comes the loop over AD hits
164 for (Int_t iHit=0; iHit < nHits; iHit++)
165 {
166 AliADhit* hit = (AliADhit *)hits->UncheckedAt(iHit);
167 Float_t eloss_mev = hit->GetEloss()*1000.0;
168 Int_t module = hit->GetModule();
169 //cout << "Module AD!!! " << module << endl;
170 // at some point we shoukd have some calib objects to set real theresholds
171 // simple checking on hit, minimum energy at scintillator pad should be > 1.52 MeV's
172 if (eloss_mev > eMin)
173 {
174 modules[module] = 1;//cout << "energy: " << eloss_mev << endl;
175 }else modules[module] = 0;
176 }// end loop over hits
177 } // endo loop over tracks
178 for (Int_t i=0; i<16; i++)
179 {
180 moduls[i] = modules[i];
181 //cout << "iModule: " << i << " AD hits: " << moduls[i] << endl;
182 }
183
184 loader->UnloadHits();
185
186 } // end loop over inputs
187
188 // here I add the hits to the TreeD
189
190 Int_t tracks[3] = {-1,-1,-1};
191 for (Int_t i=0; i<16; i++)
192 {
193 if (moduls[i]==1)
194 {
195 mods = i;
196 AddDigit(tracks,mods,mods);
197 }
198 }
199 treeD->Fill();
200 outLoader->WriteDigits("OVERWRITE");
201 outLoader->UnloadDigits();
202 ResetDigit();
203}
204
205//____________________________________________________________________________
206void AliADDigitizer::AddDigit(Int_t* track, Int_t module, Float_t cell)
207{
208 // Adds Digit
209 TClonesArray &ldigits = *fDigits;
210 new(ldigits[fNdigits++]) AliADdigit(track,module,cell);
211}
212//____________________________________________________________________________
213void AliADDigitizer::AddDigit(Int_t* modul,Float_t cell)
214{
215 // Adds Digit
216 TClonesArray &ldigits = *fDigits;
217 new(ldigits[fNdigits++]) AliADdigit(modul,cell);
218}
219
220//____________________________________________________________________________
221void AliADDigitizer::ResetDigit()
222{
223 // Clears Digits
224 fNdigits = 0;
225 if (fDigits) fDigits->Delete();
226}
227