Correction to the destuctors in case of deleting TObjArrays.
[u/mrichter/AliRoot.git] / RICH / AliRICHv0.cxx
CommitLineData
4c039060 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/*
6e36c0f2 17 $Log$
9e1a0ddb 18 Revision 1.21 2001/05/10 12:28:15 jbarbosa
19 Repositioned the RICH modules.
20
449e6743 21 Revision 1.20 2001/02/23 17:25:57 jbarbosa
22 Setters for wire sag effect and voltage values.
23
c4384528 24 Revision 1.19 2001/02/13 20:10:22 jbarbosa
25 Removed call to SetNSec() (obsolete). Fixed bug in chamber initialisation (not all chambers were initialised).
26
2fc6393f 27 Revision 1.18 2000/12/20 14:07:36 jbarbosa
28 Removed dependencies on TGeant3 (thanks to F. Carminati and I. Hrivnacova)
29
5cfcdf54 30 Revision 1.17 2000/12/18 17:44:29 jbarbosa
31 Took two lines out of output.
32
f2de8657 33 Revision 1.16 2000/10/03 21:44:09 morsch
34 Use AliSegmentation and AliHit abstract base classes.
35
a2f7eaf6 36 Revision 1.15 2000/10/02 15:54:55 jbarbosa
37 New default version (15 mm freon).
38
a2db5cde 39 Revision 1.14 2000/07/10 15:28:39 fca
40 Correction of the inheritance scheme
41
452a64c6 42 Revision 1.13 2000/06/30 16:38:15 dibari
43 Test on kDebugevel
44
8fa8fc03 45 Revision 1.12 2000/06/13 13:06:28 jbarbosa
46 Fixed compiling error for HP (multiple declaration)
47
7f36f6bc 48 Revision 1.11 2000/06/12 15:35:44 jbarbosa
49 Cleaned up version.
50
237c933d 51 Revision 1.10 2000/06/09 14:59:25 jbarbosa
52 New default version. No setters needed, no hits.
53
c71fc6da 54 Revision 1.9 2000/05/31 08:19:38 jbarbosa
55 Fixed bug in StepManager
56
27d40190 57 Revision 1.8 2000/05/26 17:30:08 jbarbosa
58 Cerenkov angle now stored within cerenkov data structure.
59
b15cdb56 60 Revision 1.7 2000/05/18 10:31:36 jbarbosa
61 Fixed positioning of spacers inside freon.
62 Fixed positioning of proximity gap
63 inside methane.
64 Fixed cut on neutral particles in the StepManager.
65
6d31e556 66 Revision 1.6 2000/04/28 11:51:58 morsch
67 Dimensions of arrays hits and Ckov_data corrected.
68
8140b37e 69 Revision 1.5 2000/04/19 13:28:46 morsch
70 Major changes in geometry (parametrised), materials (updated) and
71 step manager (diagnostics) (JB, AM)
72
4c039060 73*/
74
6e36c0f2 75
76
c71fc6da 77/////////////////////////////////////////////////////////////
78// Manager and hits classes for set: RICH default version //
79/////////////////////////////////////////////////////////////
ddae0931 80
81#include <TTUBE.h>
82#include <TNode.h>
83#include <TRandom.h>
84
85#include "AliRICHv0.h"
a2f7eaf6 86#include "AliSegmentation.h"
237c933d 87#include "AliRICHResponse.h"
88#include "AliRICHSegmentationV0.h"
89#include "AliRICHResponseV0.h"
90#include "AliRICHGeometry.h"
ddae0931 91#include "AliRun.h"
92#include "AliMC.h"
93#include "iostream.h"
94#include "AliCallf77.h"
95#include "AliConst.h"
6e36c0f2 96#include "AliPDG.h"
ddae0931 97
98ClassImp(AliRICHv0)
99
100//___________________________________________
101AliRICHv0::AliRICHv0() : AliRICH()
102{
237c933d 103
104// Default constructor
105
6e36c0f2 106 //fChambers = 0;
ddae0931 107}
108
109//___________________________________________
110AliRICHv0::AliRICHv0(const char *name, const char *title)
111 : AliRICH(name,title)
112{
c71fc6da 113 //
114// Version 0
237c933d 115// Default Segmentation, no hits
c4384528 116 AliRICHSegmentationV0* segmentation = new AliRICHSegmentationV0;
c71fc6da 117//
118// Segmentation parameters
c4384528 119 segmentation->SetPadSize(0.84,0.80);
120 segmentation->SetDAnod(0.84/2);
c71fc6da 121//
122// Geometry parameters
237c933d 123 AliRICHGeometry* geometry = new AliRICHGeometry;
124 geometry->SetGapThickness(8);
125 geometry->SetProximityGapThickness(.4);
126 geometry->SetQuartzLength(131);
127 geometry->SetQuartzWidth(126.2);
128 geometry->SetQuartzThickness(.5);
129 geometry->SetOuterFreonLength(131);
130 geometry->SetOuterFreonWidth(40.3);
131 geometry->SetInnerFreonLength(131);
132 geometry->SetInnerFreonWidth(40.3);
a2db5cde 133 geometry->SetFreonThickness(1.5);
c71fc6da 134//
135// Response parameters
c4384528 136 AliRICHResponseV0* response = new AliRICHResponseV0;
137 response->SetSigmaIntegration(5.);
138 response->SetChargeSlope(27.);
139 response->SetChargeSpread(0.18, 0.18);
140 response->SetMaxAdc(4096);
141 response->SetAlphaFeedback(0.036);
142 response->SetEIonisation(26.e-9);
143 response->SetSqrtKx3(0.77459667);
144 response->SetKx2(0.962);
145 response->SetKx4(0.379);
146 response->SetSqrtKy3(0.77459667);
147 response->SetKy2(0.962);
148 response->SetKy4(0.379);
149 response->SetPitch(0.25);
150 response->SetWireSag(0); // 1->On, 0->Off
151 response->SetVoltage(2150); // Should only be 2000, 2050, 2100 or 2150
c71fc6da 152//
153// AliRICH *RICH = (AliRICH *) gAlice->GetDetector("RICH");
154
237c933d 155 fCkovNumber=0;
156 fFreonProd=0;
7f36f6bc 157 Int_t i=0;
c71fc6da 158
237c933d 159 fChambers = new TObjArray(kNCH);
7f36f6bc 160 for (i=0; i<kNCH; i++) {
c71fc6da 161
162 (*fChambers)[i] = new AliRICHChamber();
163
164 }
165
7f36f6bc 166 for (i=0; i<kNCH; i++) {
237c933d 167 SetGeometryModel(i,geometry);
c4384528 168 SetSegmentationModel(i, segmentation);
169 SetResponseModel(i, response);
8fa8fc03 170 SetDebugLevel(0);
6e36c0f2 171 }
ddae0931 172}
173
174
6e36c0f2 175
ddae0931 176//___________________________________________
177
178void AliRICHv0::Init()
179{
c71fc6da 180
9e1a0ddb 181 if(fDebug) {
182 printf("%s: *********************************** RICH_INIT ***********************************\n",ClassName());
183 printf("%s: * *\n",ClassName());
184 printf("%s: * AliRICHv0 Default version started *\n",ClassName());
185 printf("%s: * *\n",ClassName());
186 }
c71fc6da 187
188
a2f7eaf6 189 AliSegmentation* segmentation;
c71fc6da 190 AliRICHGeometry* geometry;
191 AliRICHResponse* response;
192
193
ddae0931 194 //
195 // Initialize Tracking Chambers
196 //
2fc6393f 197 for (Int_t i=0; i<kNCH; i++) {
6e36c0f2 198 //printf ("i:%d",i);
a2f7eaf6 199 ( (AliRICHChamber*) (*fChambers)[i])->Init(i);
6e36c0f2 200 }
ddae0931 201
202 //
203 // Set the chamber (sensitive region) GEANT identifier
204
6e36c0f2 205 ((AliRICHChamber*)(*fChambers)[0])->SetGid(1);
206 ((AliRICHChamber*)(*fChambers)[1])->SetGid(2);
207 ((AliRICHChamber*)(*fChambers)[2])->SetGid(3);
208 ((AliRICHChamber*)(*fChambers)[3])->SetGid(4);
209 ((AliRICHChamber*)(*fChambers)[4])->SetGid(5);
210 ((AliRICHChamber*)(*fChambers)[5])->SetGid(6);
211 ((AliRICHChamber*)(*fChambers)[6])->SetGid(7);
212
c71fc6da 213 segmentation=Chamber(0).GetSegmentationModel(0);
214 geometry=Chamber(0).GetGeometryModel();
215 response=Chamber(0).GetResponseModel();
216
449e6743 217 Float_t offset = 490 + 1.276 - geometry->GetGapThickness()/2; //distance from center of mother volume to methane
218 Float_t deltaphi = 19.5; //phi angle between center of chambers - z direction
219 Float_t deltatheta = 20; //theta angle between center of chambers - x direction
220 Float_t cosphi = TMath::Cos(deltaphi*TMath::Pi()/180);
221 Float_t sinphi = TMath::Sin(deltaphi*TMath::Pi()/180);
222 Float_t costheta = TMath::Cos(deltatheta*TMath::Pi()/180);
223 Float_t sintheta = TMath::Sin(deltatheta*TMath::Pi()/180);
224
225 Float_t pos1[3]={0. , offset*cosphi , offset*sinphi};
226 Float_t pos2[3]={offset*sintheta , offset*costheta , 0. };
227 Float_t pos3[3]={0. , offset , 0.};
228 Float_t pos4[3]={-offset*sintheta , offset*costheta , 0.};
229 Float_t pos5[3]={offset*sinphi , offset*costheta*cosphi, -offset*sinphi};
230 Float_t pos6[3]={0. , offset*cosphi , -offset*sinphi};
231 Float_t pos7[3]={ -offset*sinphi , offset*costheta*cosphi, -offset*sinphi};
232
233 Chamber(0).SetChamberTransform(pos1[0],pos1[1],pos1[2],new TRotMatrix("rot993","rot993",90., 0. , 90. - deltaphi, 90. , deltaphi, -90. ));
234 Chamber(1).SetChamberTransform(pos2[0],pos2[1],pos2[2],new TRotMatrix("rot994","rot994",90., -deltatheta , 90. , 90.- deltatheta , 0. , 0. ));
235 Chamber(2).SetChamberTransform(pos3[0],pos3[1],pos3[2],new TRotMatrix("rot995","rot995",90., 0. , 90. , 90. , 0. , 0. ));
236 Chamber(3).SetChamberTransform(pos4[0],pos4[1],pos4[2],new TRotMatrix("rot996","rot996",90., deltatheta , 90. , 90 + deltatheta , 0. , 0. ));
237 Chamber(4).SetChamberTransform(pos5[0],pos5[1],pos5[2],new TRotMatrix("rot997","rot997",90., 360. - deltatheta, 108.2 , 90.- deltatheta ,18.2 , 90 - deltatheta));
238 Chamber(5).SetChamberTransform(pos6[0],pos6[1],pos6[2],new TRotMatrix("rot998","rot998",90., 0. , 90 + deltaphi , 90. , deltaphi, 90. ));
239 Chamber(6).SetChamberTransform(pos7[0],pos7[1],pos7[2],new TRotMatrix("rot999","rot999",90., deltatheta , 108.2 , 90.+ deltatheta ,18.2 , 90 + deltatheta));
c71fc6da 240
9e1a0ddb 241 if(fDebug) {
242 printf("%s: * Pads : %3dx%3d *\n",
243 ClassName(),segmentation->Npx(),segmentation->Npy());
244 printf("%s: * Pad size : %5.2f x%5.2f mm2 *\n",
245 ClassName(),segmentation->Dpx(),segmentation->Dpy());
246 printf("%s: * Gap Thickness : %5.1f cm *\n",
247 ClassName(),geometry->GetGapThickness());
248 printf("%s: * Radiator Width : %5.1f cm *\n",
249 ClassName(),geometry->GetQuartzWidth());
250 printf("%s: * Radiator Length : %5.1f cm *\n",
251 ClassName(),geometry->GetQuartzLength());
252 printf("%s: * Freon Thickness : %5.1f cm *\n",
253 ClassName(),geometry->GetFreonThickness());
254 printf("%s: * Charge Slope : %5.1f ADC *\n",
255 ClassName(),response->ChargeSlope());
256 printf("%s: * Feedback Prob. : %5.2f %% *\n",
257 ClassName(),response->AlphaFeedback()*100);
258 printf("%s: * *\n",
259 ClassName());
260 printf("%s: *********************************************************************************\n",
261 ClassName());
262 }
ddae0931 263}
264