fix oadb for MC
[u/mrichter/AliRoot.git] / PMD / AliPMD.cxx
... / ...
CommitLineData
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$ */
17
18///////////////////////////////////////////////////////////////////////////////
19//
20// //
21// Photon Multiplicity Detector //
22// This class contains the basic functions for the Photon Multiplicity //
23// Detector. Functions specific to one particular geometry are //
24// contained in the derived classes //
25// //
26//Begin_Html
27/*
28<img src="picts/AliPMDClass.gif">
29</pre>
30<br clear=left>
31<font size=+2 color=red>
32<p>The responsible person for this module is
33<a href="mailto:sub@vecdec.veccal.ernet.in">Subhasis Chattopadhyay</a>.
34</font>
35<pre>
36*/
37//End_Html
38// //
39///////////////////////////////////////////////////////////////////////////////
40
41#include <TBRIK.h>
42#include <TClonesArray.h>
43#include <TGeometry.h>
44#include <TNode.h>
45#include <TTree.h>
46#include <TVirtualMC.h>
47
48#include "AliLog.h"
49#include "AliLoader.h"
50#include "AliPMDLoader.h"
51#include "AliPMD.h"
52#include "AliRun.h"
53#include "AliMC.h"
54#include "AliPMDDigitizer.h"
55#include "AliPMDhit.h"
56#include "AliPMDDDLRawData.h"
57#include "AliPMDRawToSDigits.h"
58
59ClassImp(AliPMD)
60
61//_____________________________________________________________________________
62AliPMD::AliPMD()
63{
64 //
65 // Default constructor
66 //
67 fIshunt = 0;
68 fPar[0] = 1.;
69 fPar[1] = 1.;
70 fPar[2] = 0.8;
71 fPar[3] = 0.02;
72 fIn[0] = 6.;
73 fIn[1] = 20.;
74 fIn[2] = 600.;
75 fIn[3] = 27.;
76 fIn[4] = 27.;
77 fGeo[0] = 0.;
78 fGeo[1] = 0.2;
79 fGeo[2] = 4.;
80 fPadSize[0] = 0.8;
81 fPadSize[1] = 1.0;
82 fPadSize[2] = 1.2;
83 fPadSize[3] = 1.5;
84 fNumPads[0] = 0;
85 fNumPads[1] = 0;
86 fNumPads[2] = 0;
87 fNumPads[3] = 0;
88}
89
90//_____________________________________________________________________________
91AliPMD::AliPMD(const char *name, const char *title)
92 : AliDetector(name,title)
93{
94 //
95 // Default constructor
96 //
97
98 //
99 // Allocate the array of hits
100 fHits = new TClonesArray("AliPMDhit", 405);
101 gAlice->GetMCApp()->AddHitList(fHits);
102
103
104 fIshunt = 0;
105
106 fPar[0] = 1.;
107 fPar[1] = 1.;
108 fPar[2] = 0.8;
109 fPar[3] = 0.02;
110 fIn[0] = 6.;
111 fIn[1] = 20.;
112 fIn[2] = 600.;
113 fIn[3] = 27.;
114 fIn[4] = 27.;
115 fGeo[0] = 0.;
116 fGeo[1] = 0.2;
117 fGeo[2] = 4.;
118 fPadSize[0] = 0.8;
119 fPadSize[1] = 1.0;
120 fPadSize[2] = 1.2;
121 fPadSize[3] = 1.5;
122 fNumPads[0] = 0;
123 fNumPads[1] = 0;
124 fNumPads[2] = 0;
125 fNumPads[3] = 0;
126}
127
128AliLoader* AliPMD::MakeLoader(const char* topfoldername)
129{
130 // Makes PMD Loader
131
132 fLoader = new AliPMDLoader(GetName(),topfoldername);
133
134 if (fLoader)
135 {
136 AliDebug(100,"Success");
137 }
138 else
139 {
140 AliError("Failure");
141 }
142
143 return fLoader;
144}
145
146AliPMD::~AliPMD()
147{
148 //
149 // Destructor
150 //
151}
152
153//_____________________________________________________________________________
154void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
155{
156 //
157 // Add a PMD hit
158 //
159 TClonesArray &lhits = *fHits;
160 AliPMDhit *newcell, *curcell;
161 // printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d %d %d %d %d\n",
162 // hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3],
163 // vol[4],vol[5],vol[6],vol[7]);
164
165 newcell = new AliPMDhit(fIshunt, track, vol, hits);
166
167 for (Int_t i=0; i<fNhits; i++) {
168 //
169 // See if this cell has already been hit
170 curcell=(AliPMDhit*) lhits[i];
171 if (*curcell==*newcell) {
172// printf("Cell with same numbers found\n") ; curcell->Print();
173 *curcell = *curcell+*newcell;
174// printf("Cell after addition\n") ; curcell->Print();
175 delete newcell;
176 return;
177 }
178 }
179 new(lhits[fNhits++]) AliPMDhit(newcell);
180 delete newcell;
181}
182
183//_____________________________________________________________________________
184void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
185{
186 //
187 // Set PMD parameters
188 //
189 fPar[0] = p1;
190 fPar[1] = p2;
191 fPar[2] = p3;
192 fPar[3] = p4;
193}
194
195//_____________________________________________________________________________
196void AliPMD::SetIN(Float_t p1, Float_t p2, Float_t p3,Float_t p4,Float_t p5)
197{
198 //
199 // Set PMD parameters
200 //
201 fIn[0] = p1;
202 fIn[1] = p2;
203 fIn[2] = p3;
204 fIn[3] = p4;
205 fIn[4] = p5;
206}
207
208//_____________________________________________________________________________
209void AliPMD::SetGEO(Float_t p1, Float_t p2, Float_t p3)
210{
211 //
212 // Set geometry parameters
213 //
214 fGeo[0] = p1;
215 fGeo[1] = p2;
216 fGeo[2] = p3;
217}
218
219//_____________________________________________________________________________
220void AliPMD::SetPadSize(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
221{
222 //
223 // Set pad size
224 //
225 fPadSize[0] = p1;
226 fPadSize[1] = p2;
227 fPadSize[2] = p3;
228 fPadSize[3] = p4;
229}
230
231//_____________________________________________________________________________
232void AliPMD::StepManager()
233{
234 //
235 // Called at every step in PMD
236 //
237}
238
239void AliPMD::MakeBranch(Option_t* option)
240{
241 // Create Tree branches for the PMD
242
243 const char *cH = strstr(option,"H");
244 if (cH && fLoader->TreeH() && (fHits == 0x0))
245 fHits = new TClonesArray("AliPMDhit", 405);
246
247 AliDetector::MakeBranch(option);
248}
249
250
251void AliPMD::SetTreeAddress()
252{
253 // Set branch address
254
255 if (fLoader->TreeH() && fHits==0x0)
256 fHits = new TClonesArray("AliPMDhit", 405);
257
258 AliDetector::SetTreeAddress();
259}
260
261void AliPMD::SetCpvOff()
262{
263 // Set the CPV plane off
264}
265void AliPMD::SetPreOff()
266{
267 // Set the Preshower plane off
268
269}
270void AliPMD::SetModuleOff(Int_t /*imodule*/)
271{
272 // Set the desired module off
273
274}
275
276//____________________________________________________________________________
277void AliPMD::Hits2SDigits()
278{
279// create summable digits
280
281 AliRunLoader* runLoader = fLoader->GetRunLoader();
282 AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
283 pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
284 "HS");
285 pmdDigitizer->SetZPosition(361.5);
286
287 for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
288 pmdDigitizer->Hits2SDigits(iEvent);
289 }
290 fLoader->UnloadHits();
291 fLoader->UnloadSDigits();
292 delete pmdDigitizer;
293}
294//____________________________________________________________________________
295void AliPMD::SDigits2Digits()
296{
297 // creates sdigits to digits
298}
299//____________________________________________________________________________
300void AliPMD::Hits2Digits()
301{
302// create digits
303
304 AliRunLoader* runLoader = fLoader->GetRunLoader();
305 AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
306 pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
307 "HD");
308 pmdDigitizer->SetZPosition(361.5);
309
310 for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
311 pmdDigitizer->Hits2Digits(iEvent);
312 }
313 fLoader->UnloadHits();
314 fLoader->UnloadDigits();
315 delete pmdDigitizer;
316
317}
318// ---------------------------------------------------------------------------
319AliDigitizer* AliPMD::CreateDigitizer(AliDigitizationInput* digInput) const
320{
321 return new AliPMDDigitizer(digInput);
322}
323// ---------------------------------------------------------------------------
324void AliPMD::Digits2Raw()
325{
326// convert digits of the current event to raw data
327
328 fLoader->LoadDigits();
329 TTree* digits = fLoader->TreeD();
330 if (!digits) {
331 AliError("No digits tree");
332 return;
333 }
334
335 AliPMDDDLRawData rawWriter;
336 rawWriter.WritePMDRawData(digits);
337
338 fLoader->UnloadDigits();
339}
340
341Bool_t AliPMD::Raw2SDigits(AliRawReader *rawReader)
342{
343 // converts raw to sdigits
344 AliRunLoader* runLoader = fLoader->GetRunLoader();
345 //runLoader->GetEvent(ievt);
346
347 AliPMDRawToSDigits pmdr2sd;
348 pmdr2sd.Raw2SDigits(runLoader, rawReader);
349 fLoader->UnloadSDigits();
350 return kTRUE;
351}
352