fix minor bug: add task argument was not passed to tak
[u/mrichter/AliRoot.git] / AD / AliAD.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: AliAD.cxx $ */
17
18///////////////////////////////////////////////////////////////////////////
19// //
20// AD (ALICE Diffractive) Detector //
21// //
22// This class contains the base procedures for the AD detector //
23// All comments should be sent to : //
24// //
25// //
26///////////////////////////////////////////////////////////////////////////
27
28
29// --- Standard libraries ---
30#include <Riostream.h>
31#include <stdlib.h>
32
33// --- ROOT libraries ---
34#include <TNamed.h>
35#include "TROOT.h"
36#include "TFile.h"
37#include "TNetFile.h"
38#include "TRandom.h"
39#include "TTree.h"
40#include "TBranch.h"
41#include "TClonesArray.h"
42#include "TGeoGlobalMagField.h"
43#include "AliMagF.h"
44#include "TStopwatch.h"
45#include "TParameter.h"
46#include "TF1.h"
47
48// --- AliRoot header files ---
49#include "AliRun.h"
50#include "AliMC.h"
51#include "AliAD.h"
52#include "AliADhit.h"
53#include "AliADLoader.h"
54#include "AliADDigitizer.h"
55#include "AliDigitizationInput.h"
56#include "AliADdigit.h"
57#include "AliADSDigit.h"
58#include "AliDAQ.h"
59#include "AliRawReader.h"
60#include "AliCDBManager.h"
61#include "AliCDBEntry.h"
62#include "AliADReconstructor.h"
63
64ClassImp(AliAD)
65 //__________________________________________________________________
66AliAD::AliAD()
67 : AliDetector(),
68 fSetADAToInstalled(0),
69 fSetADCToInstalled(0)
70{
71 /// Default Constructor
72
73
74}
75
76//_____________________________________________________________________________
77AliAD::AliAD(const char *name, const char *title)
78 : AliDetector(name,title),
79 fSetADAToInstalled(kTRUE),
80 fSetADCToInstalled(kTRUE)
81
82{
83
84 // Standard constructor for AD Detector
85
86
87}
88
89//_____________________________________________________________________________
90AliAD::~AliAD()
91{
92 //
93 // Default destructor for AD Detector
94 //
95
96}
97
98//_____________________________________________________________________________
99void AliAD::CreateMaterials()
100{
101 //
102 // MATERIALS FOR ADC AND ADA
103 //
104
105 // Parameters for simulation scope for ADA and ADC (stolen from AliVZEROv7::CreateMaterials )
106 Int_t fieldType = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); // Field type
107 Double_t maxField = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); // Field max.
108 Double_t maxBending = 10; // Max Angle
109 Double_t maxStepSize = 0.01; // Max step size
110 Double_t maxEnergyLoss = 1; // Max Delta E
111 Double_t precision = 0.003; // Precision
112 Double_t minStepSize = 0.003; // Minimum step size
113 Float_t density, as[11], zs[11], ws[11];
114 Double_t radLength, absLength, a_ad, z_ad;
115 Int_t id;
116
117 //
118 // Parameters for AD scintillator: NE-102 (BC400)
119 //
120 // NE-102, has the following properties : (from internet, need better reference)
121 // Density : ca. 1.03 g/cm3
122 // Electrons/cm3: 3.39 x 10^23
123 // H atoms/cm3: 5.28 x 10^22
124 // C atoms/cm3: 4.78 x 10^22
125 // Ratio of H to C : 1.104 .
126 // wavelength of emission : ~4.23 nm.
127 // Decay time : ~2.4 ns.
128 // Luminescent efficiency : typically 18% of NaI(Tl)
129 // Photons/MeV: 2.5 x 10^4
130 //
131 // H // C
132 as[0] = 1.00794; as[1] = 12.011;
133 zs[0] = 1.; zs[1] = 6.;
134 ws[0] = 5.23; ws[1] = 4.74;
135 density = 1.032;
136 id = 1;
137 AliMixture( id, "NE102", as, zs, density, -2, ws );
138 AliMedium( id, "NE102", id, 1, fieldType, maxField, maxBending, maxStepSize,
139 maxEnergyLoss, precision, minStepSize );
140
141 //
142 // Parameters for lightGuide:
143 // TODO check material
144 // Should be Poly(methyl methacrylate) (PMMA) acrylic
145 // (C5O2H8)n
146 // Density 1.18 g/cm3
147 // Mixture PMMA Aeff=12.3994 Zeff=6.23653 rho=1.18 radlen=34.0677 intlen=63.3073
148 // Element #0 : C Z= 6.00 A= 12.01 w= 0.600 natoms=5
149 // Element #1 : H Z= 1.00 A= 1.01 w= 0.081 natoms=8
150 // Element #2 : O Z= 8.00 A= 16.00 w= 0.320 natoms=2
151
152 // Carbon Hydrogen Oxygen
153 as[0] = 12.0107; as[1] = 1.00794; as[2] = 15.9994;
154 zs[0] = 6.; zs[1] = 1.; zs[2] = 8.;
155 ws[0] = 0.60; ws[1] = 0.081; ws[2] = 0.32;
156 density = 1.18;
157 id = 2;
158 AliMixture( id, "PMMA", as, zs, density, 3, ws );
159 AliMedium( id,"PMMA", id, 1, fieldType, maxField, maxBending, maxStepSize,
160 maxEnergyLoss, precision, minStepSize );
161
162
163 // mu-metal
164 // Niquel Iron Molybdenum Manganese
165 as[0] = 58.6934; as[1] = 55.845; as[2] = 95.94; as[3] = 54.9380;
166 zs[0] = 28.; zs[1] = 26.; zs[2] = 42.; zs[3] = 25.;
167 ws[0] = 0.802; ws[1] = 0.14079; ws[2] = 0.0485; ws[3] = 0.005;
168 // Silicon Chromium Cobalt Aluminium
169 as[4] = 28.0855; as[5] = 51.9961; as[6] = 58.9332; as[7] = 26.981539;
170 zs[4] = 14.; zs[5] = 24.; zs[6] = 27.; zs[7] = 13.;
171 ws[4] = 0.003; ws[5] = 0.0002; ws[6] = 0.0002; ws[7] = 0.0001;
172 // Carbon Phosphorus Sulfur
173 as[8] = 12.0107; as[9] = 30.97376; as[10] = 32.066;
174 zs[8] = 6.; zs[9] = 15.; zs[10] = 16.;
175 ws[8] = 0.00015; ws[9] = 0.00005; ws[10] = 0.00001;
176 density = 8.25;
177 id = 3;
178 AliMixture( id, "MuMetal", as, zs, density, 11, ws );
179 AliMedium( id,"MuMetal", id, 1, fieldType, maxField, maxBending, maxStepSize,
180 maxEnergyLoss, precision, minStepSize );
181
182 // Parameters for ADCPMA: Aluminium
183 a_ad = 26.98;
184 z_ad = 13.00;
185 density = 2.7;
186 radLength = 8.9;
187 absLength = 37.2;
188 id = 4;
189 AliMaterial (id, "Alum", a_ad, z_ad, density, radLength, absLength, 0, 0 );
190 AliMedium( id, "Alum", id, 1, fieldType, maxField, maxBending, maxStepSize,
191 maxEnergyLoss, precision, minStepSize );
192
193 // Parameters for ADCPMG: Glass for the simulation Aluminium
194 // TODO fix material
195 a_ad = 26.98;
196 z_ad = 13.00;
197 density = 2.7;
198 radLength = 8.9;
199 absLength = 37.2;
200 id = 5;
201 AliMaterial( id, "Glass", a_ad, z_ad, density, radLength, absLength, 0, 0 );
202 AliMedium( id, "Glass", id, 1, fieldType, maxField, maxBending, maxStepSize,
203 maxEnergyLoss, precision, minStepSize );
204
205
206}
207//_____________________________________________________________________________
208void AliAD::SetTreeAddress()
209{
210 //
211 // Sets tree address for hits.
212 //
213
214 TBranch *branch;
215 char branchname[20];
216 snprintf(branchname,19,"%s",GetName());
217 // Branch address for hit tree
218 TTree *treeH = fLoader->TreeH();
219 if (treeH )
220 {
221 branch = treeH->GetBranch(branchname);
222 if (branch) branch->SetAddress(&fHits);
223 }
224}
225
226
227//_____________________________________________________________________________
228void AliAD::MakeBranch(Option_t* opt)
229{
230 const char* oH = strstr(opt,"H");
231 if (fLoader->TreeH() && oH && (fHits==0x0))
232 {
233 fHits = new TClonesArray("AliADhit",1000);
234 fNhits = 0;
235 }
236 AliDetector::MakeBranch(opt);
237}
238//_____________________________________________________________________________
239AliLoader* AliAD::MakeLoader(const char* topfoldername)
240{
241
242 AliDebug(1,Form("Creating AliADLoader, Top folder is %s ",topfoldername));
243 fLoader = new AliADLoader(GetName(),topfoldername);
244 return fLoader;
245}
246
247//_____________________________________________________________________________
248AliDigitizer* AliAD::CreateDigitizer(AliDigitizationInput* digInput) const
249{
250 //
251 // Creates a digitizer for AD
252 //
253 return new AliADDigitizer(digInput);
254}
255
256//_____________________________________________________________________________
aa8120bb 257void AliAD::Hits2Digits(){
258 //
259 // Converts hits to digits
260 //
261 // Creates the AD digitizer
262 AliADDigitizer* dig = new AliADDigitizer(this,AliADDigitizer::kHits2Digits);
263
264 // Creates the digits
265 dig->Digitize("");
266
267 // deletes the digitizer
268 delete dig;
269}
270
271//_____________________________________________________________________________
272void AliAD::Hits2SDigits(){
273 //
274 // Converts hits to summable digits
275 //
276 // Creates the AD digitizer
277 AliADDigitizer* dig = new AliADDigitizer(this,AliADDigitizer::kHits2SDigits);
278
279 // Creates the sdigits
280 dig->Digitize("");
281
282 // deletes the digitizer
283 delete dig;
284}
285
286
287//_____________________________________________________________________________
5e319bd5 288
289void AliAD::Digits2Raw()
290{
291 // produces raw data from digits
292 // for AD not implemented yet (needs detailed hardware info)
293}
294
295//_____________________________________________________________________________
296
56c4d692 297Bool_t AliAD::Raw2SDigits(AliRawReader* /*rawReader*/)
5e319bd5 298{
299 // reads raw data to produce digits
300 // for AD not implemented yet (needs detailed hardware info)
301 return kTRUE;
302}