]> git.uio.no Git - u/mrichter/AliRoot.git/blame - AD/ADsim/AliADv1.cxx
Update in z-distance of scintillators to 3.3 mm
[u/mrichter/AliRoot.git] / AD / ADsim / AliADv1.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// Default geometry of 2013: 16 modules //
24// All comments should be sent to : //
25// //
26// //
27///////////////////////////////////////////////////////////////////////////
28
29// --- Standard libraries ---
30#include <Riostream.h>
31
32// --- ROOT libraries ---
33#include <TMath.h>
34#include <TString.h>
35#include <TVirtualMC.h>
36#include <TGeoManager.h>
37#include <TGeoMatrix.h>
38#include <TGeoTube.h>
dd27c420 39#include <TGeoPcon.h>
5e319bd5 40#include <TGeoCone.h>
41#include <TGeoShape.h>
326c9a72 42#include <TGeoXtru.h>
5e319bd5 43#include <TTree.h>
44#include <TSystem.h>
dd27c420 45// #include <TGeoCompositeShape.h> // included in .h
5e319bd5 46#include <TGeoGlobalMagField.h>
47#include <TGeoMaterial.h>
48#include <TGeoMedium.h>
49#include <TGeoVolume.h>
50#include <TGeoArb8.h>
51#include <TClonesArray.h>
52#include <TGeoTrd2.h>
53#include <TParticle.h>
54
55#include <TH2F.h>
56#include <TCanvas.h>
57
58// --- AliRoot header files ---
59
60
61#include "AliADhit.h"
62#include "AliADdigit.h"
63#include "AliADv1.h"
64#include "AliLog.h"
65#include "AliConst.h"
66#include "AliMagF.h"
67#include "AliRun.h"
68#include "AliMC.h"
69
70
71ClassImp(AliADv1)
72//__________________________________________________________________
dd27c420 73AliADv1::AliADv1() :
74 AliAD(),
75 fADCstruct(kTRUE),
76 fADCPosition(kADCInTunnel),
5e319bd5 77 fADCLightYield(93.75),
78 fADCPhotoCathodeEfficiency(0.18),
79 fADALightYield(93.75),
80 fADAPhotoCathodeEfficiency(0.18)
5e319bd5 81{
82 // Default Constructor
83 fHits = 0;
84}
85
86//_____________________________________________________________________________
87AliADv1::AliADv1(const char *name, const char *title) :
88 AliAD(name,title),
dd27c420 89 fADCstruct(kTRUE),
90 fADCPosition(kADCInTunnel),
5e319bd5 91 fADCLightYield(93.75),
92 fADCPhotoCathodeEfficiency(0.18),
93 fADALightYield(93.75),
94 fADAPhotoCathodeEfficiency(0.18)
95{
96 // Standard constructor for AD Detector
97
98 AliModule* pipe = gAlice->GetModule("PIPE");
99 if( (!pipe) ) {
100 Error("Constructor","AD needs PIPE!!!\n");
101 exit(1);
102 }
103 fHits = new TClonesArray("AliADhit",400);
104 gAlice->GetMCApp()->AddHitList(fHits);
105}
106
107//_____________________________________________________________________________
108AliADv1::~AliADv1()
109{
110 // default destructor
111}
112//_____________________________________________________________________________
113void AliADv1::Init()
114{
115 // Initialise L3 magnet after it has been built
116 Int_t i;
117 if(AliLog::GetGlobalDebugLevel()>0) {
118 printf("\n%s: ",ClassName());
119 for(i=0;i<35;i++) printf("*");
120 printf(" ADv1_INIT ");
121 for(i=0;i<35;i++) printf("*");
122 printf("\n%s: ",ClassName());
123 for(i=0;i<80;i++) printf("*");
124 printf("\n");
125 }
126}
127
128//_____________________________________________________________________________
129void AliADv1::CreateGeometry()
130{
131 //
132 // Create the geometry for the AD arrays
133 //
5e319bd5 134 CreateAD();
135
136}
dd27c420 137//_____________________________________________________________________________
138void AliADv1::ReadADCFromEnv() {
139 if (! gSystem->Getenv("CONFIG_ADC_POS"))
140 return;
5e319bd5 141
dd27c420 142 TString str(gSystem->Getenv("CONFIG_ADC_POS"));
143
144 if (0==str.CompareTo ("kADCInTunnel")) {
145 fADCPosition = kADCInTunnel;
146 printf("fADCPosition set to kADCInTunnel\n");
147 //
148 } else if (0==str.CompareTo ("kADCInCavern")) {
149 fADCPosition = kADCInCavern;
150 printf("fADCPosition set to kADCInCavern\n");
151 //
152 } else if (0==str.CompareTo ("kADCInBoth")) {
153 fADCPosition = kADCInBoth;
154 printf("fADCPosition set to kADCInBoth\n");
155 }
156}
157//_____________________________________________________________________________
158TGeoCompositeShape * AliADv1::MakeShapeADCpadH(const Double_t W, const Double_t H, const Double_t dz) {
159 /////////////////////////////////////////////////////////////////////////////
160 /// ADC pad in the cavern (H shapped hole) ///
161 /////////////////////////////////////////////////////////////////////////////
162 // const Double_t W = kADCCellSide; // Width of Scintillator pad
163 // const Double_t H = kADCCellSide; // Height of Scintillator pad
164 // Coordinates of ADC pad vertexes
165 Double_t pad0_x [] = { 10., 10., W, W };
166 Double_t pad0_y [] = { 0., 11., 11., 0. };
167 Double_t pad1_x [] = { 15., 15., W, W };
168 Double_t pad1_y [] = { 11., 15., 15., 11. };
169 Double_t pad2_x [] = { 0., 0., W, W };
170 Double_t pad2_y [] = { 15., H , H, 15. };
171 TGeoArb8 * shADCpad0H = new TGeoArb8("shADCpad0H", dz/2.);
172 TGeoArb8 * shADCpad1H = new TGeoArb8("shADCpad1H", dz/2.);
173 TGeoArb8 * shADCpad2H = new TGeoArb8("shADCpad2H", dz/2.);
174 for (Int_t i=0; i<4; i++) {
175 // -dz
176 shADCpad0H -> SetVertex(i, pad0_x[i], pad0_y[i]);
177 shADCpad1H -> SetVertex(i, pad1_x[i], pad1_y[i]);
178 shADCpad2H -> SetVertex(i, pad2_x[i], pad2_y[i]);
179 // +dz
180 shADCpad0H -> SetVertex(i+4, pad0_x[i], pad0_y[i]);
181 shADCpad1H -> SetVertex(i+4, pad1_x[i], pad1_y[i]);
182 shADCpad2H -> SetVertex(i+4, pad2_x[i], pad2_y[i]);
183 }
184 return new TGeoCompositeShape("shADCpadH","shADCpad0H + shADCpad1H + shADCpad2H");
185}
5e319bd5 186
187//_____________________________________________________________________________
188void AliADv1::CreateAD()
189{
bc429617 190 printf("===> AliADv1::CreateAD(): ver=[Feb 3st, 2015]; contact=[ecalvovi@cern.ch]\n");
dd27c420 191 //
192 // Define Rotations used
193 //
194 TGeoRotation * Rx180, * Rz180, * Ry180, * Rx90, * Rx90m, * Ry90m;
195 Rx90m = new TGeoRotation("Rx90m", 0., -90., 0.) ;
196 Rx90 = new TGeoRotation("Rx90" , 0., 90., 0.) ;
197 Rx180 = new TGeoRotation("Rx180", 0., 180., 0.) ; // 4 | 1
198 Rz180 = new TGeoRotation("Rz180", 180., 0., 0.) ; // ---------------> x
199 Ry180 = new TGeoRotation("Ry180", 180., 180., 0.) ; // 3 | 2
200 Ry90m = new TGeoRotation("Ry90m", 90., -90., -90.) ;
326c9a72 201 // Get Mediums needed.
dd27c420 202 TGeoMedium * kMedAlu = gGeoManager->GetMedium("AD_Alum"); // Aluminium
203 TGeoMedium * kMedSteelSh = gGeoManager->GetMedium("AD_ST_C0"); // Stainless Steel
204 TGeoMedium * kMedVacuum = gGeoManager->GetMedium("AD_VA_C0"); // Stainless Steel
205 //
206 // Private comunication by Arturo Tauro (2014, Apr 23)
207 // According to last survey measurement done this morning,
208 // the C-side wall is at Z = - 18959mm.
209 //
210 const Double_t kZwall = 1895.9 ; // Aluminium plate z position
211 const Double_t kZendAbs = 1880.75; // End of CC block absorber
212 const Double_t kZbegVMAOI = 1919.2 ; // Begining of Warm Module
213 const Double_t kZbegValve = 1910.7 ; // Begining of Valve
214 const Double_t kZbegFrontBar = 1949.1 ; // Begining of Front Bar
215 const Double_t kZbegCoil = 1959.4 ; // Begining of compensator coil
5e319bd5 216
dd27c420 217 // Define Ion Pump ??
218 // Drawing LHCVBU__0052
219 // Vacuum - Bellows - U type
220 // BODY 1 PORTS
221 //
222 (new TGeoCombiTrans("ctPumpVB2", 0., -13./2., 6.8-11.5/2., Rx90))->RegisterYourself();
dd27c420 223 new TGeoTube("shIonPumpVB1o", 0.0, 10.3 /2., 11.5/2. );
224 new TGeoTube("shIonPumpVB2o", 0.0, 7.0 /2., 13.0/2. );
225 new TGeoTube("shIonPumpVB1i", 0.0, 10.0 /2., 11.5/2.+2.);
226 new TGeoTube("shIonPumpVB2i", 0.0, 6.7 /2., 13.0/2.+2.);
227 new TGeoCompositeShape("shIonPumpVBo", "shIonPumpVB1o+shIonPumpVB2o:ctPumpVB2");
228 //
229 // Continue definition of LHCVBU__0052
230 //
231 new TGeoCompositeShape("shIonPumpVBi", "shIonPumpVB1i+shIonPumpVB2i:ctPumpVB2");
232 TGeoShape * sh3 = new TGeoCompositeShape("shIonPumpVB", "shIonPumpVBo-shIonPumpVBi");
233 TGeoVolume * voIonPumpVB = new TGeoVolume("voIonPumpVB", sh3, kMedAlu);
234 // Variables
235 Double_t alpha, beta, tga2, tga, sa, ca, ctgb, d, Ro, Ri, phi1, dphi, H, L, z;
236 // Drawing: LHCVSR__0054
237 // Vacuum Screen - RF
238 // transition flange
239 alpha = 15. * TMath::DegToRad();
240 beta = 15. * TMath::DegToRad();
241 tga2 = TMath::Tan(alpha*0.5);
242 tga = TMath::Tan(alpha);
243 ctgb = 1./TMath::Tan(beta );
244 ca = TMath::Cos(alpha );
245 d = 0.3; // thickness of transition flange
246 Double_t h = d/ca; // vertical distance between parallel surfaces tilted alpha degrees
247 TGeoPcon * shVSRflange = new TGeoPcon("shVSRflange", 0.0, 360.0, 7);
248 Ri = 9.71/2.; Ro = 11.16/2.;
249 shVSRflange->DefineSection(0, 0. , Ri, Ro);
250 Ri = Ri - 0.25 * tga;
251 shVSRflange->DefineSection(1, 0.25, Ri, Ro);
252 Ro = Ri + d*tga;
253 shVSRflange->DefineSection(2, 0.25, Ri, Ro);
254 Ri = 6.3/2.; Ro = Ri + h;
255 z = (9.71/2. - Ri) / tga;
256 shVSRflange->DefineSection(3, z, Ri, Ro);
257 //
258 Double_t Dtga = 6.6*tga - 0.5*(9.71-6.3) ;
259 Double_t x = (h - 0.11 - Dtga) / (ctgb - tga) ;
260 Double_t y = x * ctgb;
261 z = 6.6 - x;
262 Ro = Ri + 0.11 + y;
263 shVSRflange->DefineSection(4, z, Ri, Ro);
264 z = 6.6;
265 Ro = Ri + 0.11;
266 shVSRflange->DefineSection(5, z, Ri, Ro);
267 z = 7.1;
268 shVSRflange->DefineSection(6, z, Ri, Ro);
269 TGeoVolume * voVSRflange = new TGeoVolume("voVSRflange", shVSRflange, kMedAlu);
270 //
271 // Drawing: LHCVSR__0053
272 // Vacuum Screen - RF
273 // transition tube
274 alpha = 10. * TMath::DegToRad();
275 tga2 = TMath::Tan(alpha*0.5);
276 tga = TMath::Tan(alpha);
277 ca = TMath::Cos(alpha );
278 d = 0.3; // thickness of Vacuum Screen RF
279 Ro = 6.7/2.; //
280 Ri = 0.;
281 phi1 = 90. - 15.;
282 dphi = 30.;
283 TGeoPcon * shVSR0 = new TGeoPcon("shVSR0", phi1, dphi, 6);
284 shVSR0->DefineSection(0, 0. , Ro-0.09, Ro);
285 shVSR0->DefineSection(1, 0.45, Ro-0.09, Ro);
286 Ri=Ro-d;
287 shVSR0->DefineSection(2, 0.45, Ri, Ro);
288 shVSR0->DefineSection(3, 13.37-d*tga2, Ri, Ro);
289 Ro = Ri + d/ca;
290 shVSR0->DefineSection(4, 13.37, Ri, Ro);
291 Ri += 0.63*tga;
292 Ro = Ri + d/ca;
293 shVSR0->DefineSection(5, 14.0 , Ri, Ro);
326c9a72 294 // printf(" Ro: %8.2f\n", Ro);
dd27c420 295 // Make holes
296 new TGeoBBox("shHoleBody" , 0.15, 0.60, 0.3);
297 new TGeoTube("shHoleEnd", 0. , 0.15, 0.3);
298 (new TGeoTranslation("trHoleBody", 0., -0.6, 0.))->RegisterYourself();
299 (new TGeoTranslation("trHoleEnd" , 0., -1.2, 0.))->RegisterYourself();
300 new TGeoCompositeShape("shHole","shHoleEnd + shHoleEnd:trHoleEnd + shHoleBody:trHoleBody");
301 // Single hole made. Now define some combitrans to position holes
302 z = 1.3; Ro = (6.7 - d)*0.5;
303 (new TGeoCombiTrans("ctHole1", 0., Ro , z, Rx90m))->RegisterYourself();
304 z = 1.3 + 1*2.5;
305 (new TGeoCombiTrans("ctHole2", 0., Ro , z, Rx90m))->RegisterYourself();
306 z = 1.3 + 2*2.5;
307 (new TGeoCombiTrans("ctHole3", 0., Ro , z, Rx90m))->RegisterYourself();
308 z = 1.3 + 3*2.5;
309 (new TGeoCombiTrans("ctHole4", 0., Ro , z, Rx90m))->RegisterYourself();
310 // Now make a sector of RF transition tube
311 new TGeoCompositeShape("shVSRsec",
312 "shVSR0 - (shHole:ctHole1 + shHole:ctHole2 + shHole:ctHole3 + shHole:ctHole4)");
313 // Now define rotations for each sector
314 TString strSh = "shVSRsec ";
315 for (Int_t i=1; i<=11; i++) {
316 (new TGeoRotation(Form("rSec%d",i), 30. * i, 0. , 0.))->RegisterYourself();
317 strSh+=Form("+ shVSRsec:rSec%d",i);
318 }
326c9a72 319 // printf("%s\n", strSh.Data());
dd27c420 320 TGeoCompositeShape * shVSR = new TGeoCompositeShape("shVSR", strSh.Data());
321 // Now assembly the sector to form VSR RF transition tube !
322 TGeoVolume * voVSR = new TGeoVolume("voVSR", shVSR, kMedAlu);
323 //
324 // Drawing: LHCVSR__0057
325 // RF CONTACT
326 //
327 Ro = 0.5 * 6.3;
328 d = 0.03;
329 Ri = Ro - d;
330 // alpha = TMath::ArcSin((7.35-1.75)/Ri); <-- No!
331 H = 0.5 * 6.9 - Ri;
332 L = 28. - 7.1 + 0.45 -14. - 1.75;//7.35 - 1.75;
333 // Double_t Delta = TMath::Sqrt( L*L + 4.*(H-d)*H );
334 Double_t R = TMath::Sqrt((H-d)*(H-d) + L*L);
335 alpha = TMath::ASin(d/R) + TMath::ASin((H-d)/R);
beca6103 336 //printf("alpha: %8.2f \n", alpha * TMath::RadToDeg());
dd27c420 337 sa = TMath::Sin(alpha);
338 ca = TMath::Cos(alpha);
339 x = d*sa;
340 y = d*ca;
341 Double_t R0 = 1.75;
342 Double_t R1 = 10.48;
343 Double_t R2 = 0.81 + 0.28;
344 phi1 = 0.; dphi = 360.;
5e319bd5 345
dd27c420 346 TGeoPcon * shVSRcontact = new TGeoPcon("shVSRcont", phi1, dphi, 6);
347 z = 0.;
348 shVSRcontact->DefineSection(0, -z, Ri, Ro);
349 z = R0;
350 shVSRcontact->DefineSection(1, -z, Ri, Ro);
351 z += x;
352 Ri += y;
353 Ro = Ri + d;
354 shVSRcontact->DefineSection(2, -z, Ri, Ro);
355 z += (R1 - R0) * ca;
356 Ri += (R1 - R0) * sa;
357 Ro = Ri + d;
358 shVSRcontact->DefineSection(3, -z, Ri, Ro);
359 // Last sections (R2)
360 Double_t ab = alpha + 21. * TMath::DegToRad();
361 Double_t sab = TMath::Sin(ab);
362 Double_t cab = TMath::Cos(ab);
363 x = d * sab;
364 y = d/ca - d*cab;
365 z += x;
366 Ri += y;
367 Ro = Ri + d/cab;
368 shVSRcontact->DefineSection(4, -z, Ri, Ro);
369 z += R2 * cab;
370 Ri += R2 * sab;
371 Ro = Ri + d/cab;
372 shVSRcontact->DefineSection(5, -z, Ri, Ro);
373 TGeoVolume * voVSRcontD = new TGeoVolume("voVSRcontD", shVSRcontact, kMedAlu);
374 // Drawing: LHCVSR__0017
375 // Vacuum Screen - RF
376 // RF Contact flange
377 phi1 = 0.;
378 dphi = 360.;
5e319bd5 379
dd27c420 380 TGeoPcon * shVSRcontFlange = new TGeoPcon("shVSRcontFlange", phi1, dphi, 11);
381 Ri = 6.30 /2.; Ro = 11.16 /2.; z = 0;
382 shVSRcontFlange->DefineSection( 0, -z, Ri, Ro);
383 Ri = 6.30 /2.; Ro = 11.16 /2.; z = 0.1;
384 shVSRcontFlange->DefineSection( 1, -z, Ri, Ro);
385 Ri = 6.36 /2.; Ro = 11.16 /2.; z = 0.1;
386 shVSRcontFlange->DefineSection( 2, -z, Ri, Ro);
387 Ri = 6.36 /2.; Ro = 11.16 /2.; z = 0.25;
388 shVSRcontFlange->DefineSection( 3, -z, Ri, Ro);
389 Ri = 6.36 /2.; Ro = 9.30 /2.; z = 0.25;
390 shVSRcontFlange->DefineSection( 4, -z, Ri, Ro);
391 Ri = 6.36 /2.; Ro = 9.30 /2.; z = 0.30;
392 shVSRcontFlange->DefineSection( 5, -z, Ri, Ro);
393 Ri = 6.36 /2.; Ro = 6.90 /2.; z = 0.30;
394 shVSRcontFlange->DefineSection( 6, -z, Ri, Ro);
395 Ri = 6.36 /2.; Ro = 6.90 /2.; z = 1.10;
396 shVSRcontFlange->DefineSection( 7, -z, Ri, Ro);
397 Ri = 6.36 /2.; Ro = 6.85 /2.; z = 1.15;
398 shVSRcontFlange->DefineSection( 8, -z, Ri, Ro);
399 Ri = 6.36 /2.; Ro = 6.50 /2.; z = 1.15;
400 shVSRcontFlange->DefineSection( 9, -z, Ri, Ro);
401 Ri = 6.36 /2.; Ro = 6.50 /2.; z = 1.30;
402 shVSRcontFlange->DefineSection(10, -z, Ri, Ro);
403 TGeoVolume * voVSRcontF = new TGeoVolume("voVSRcontF", shVSRcontFlange, kMedAlu);
404 // Drawing: LHCVBU__0002
405 // Bellows + End Parts
406 // Vacuum - Bellows - U type
5e319bd5 407
dd27c420 408 // First make end part
409 phi1 = 0. ; dphi = 360. ;
410 TGeoPcon * shVBUend = new TGeoPcon("shVBUend", phi1, dphi, 6);
411 Ri = 5.176; Ro = 5.4; z = 0;
412 shVBUend->DefineSection( 0, z, Ri, Ro);
413 Double_t dz = 0.03;
414 Ri -= dz * TMath::Tan(45. * TMath::DegToRad());
415 z += dz;
416 shVBUend->DefineSection( 1, z, Ri, Ro);
417 dz = 0.04;
418 Ro -= dz * TMath::Tan(15. * TMath::DegToRad());
419 Ri -= dz * TMath::Tan(45. * TMath::DegToRad());
420 z += dz;
421 shVBUend->DefineSection( 2, z, Ri, Ro);
422 Ro = 5.250 ;
423 Ri = 5.073;
424 z = 0.103;
425 shVBUend->DefineSection( 3, z, Ri, Ro);
426 Ro = 5.25;
427 Ri = 5.02;
428 z = 0.18;
429 shVBUend->DefineSection( 4, z, Ri, Ro);
430 Ro = 5.15;
431 Ri = 5.00;
432 z = 0.28;
433 shVBUend->DefineSection( 5, z, Ri, Ro);
5e319bd5 434
dd27c420 435 TGeoPcon * shVBUtube26mm = new TGeoPcon("shVBUtube26mm", 0., 360., 2);
436 shVBUtube26mm->DefineSection( 0, 0.28, 5.0, 5.15);
437 shVBUtube26mm->DefineSection( 1, 2.60, 5.0, 5.15);
438 TGeoPcon * shVBUtube9mm = new TGeoPcon("shVBUtube9mm" , 0., 360., 2);
439 shVBUtube9mm ->DefineSection( 0, 0.00, 5.0, 5.15);
440 shVBUtube9mm ->DefineSection( 1, 0.62, 5.0, 5.15);
441 // central part of bellow (TODO: Add plies)
442 TGeoPcon * shVBUcent = new TGeoPcon("shVBUcent" , 0., 360., 6);
443 const Int_t nsec = 6;
444 Double_t az [nsec] = {0.9, 0.915, 0.915, 11.885, 11.885, 11.9};
445 Double_t aRi[nsec] = {5.0, 5.0 , 5.685, 5.685, 5.0 , 5.0};
446 for (Int_t i=0; i<nsec; i++) {
447 z=az[i]; Ri = aRi[i]; Ro = 5.7;
beca6103 448 //printf(" i: %2d z: %8.2f Ri: %8.2f Ro: %8.2f\n", i, z, Ri, Ro );
dd27c420 449 shVBUcent ->DefineSection( i, z, Ri, Ro);
450 }
5e319bd5 451
dd27c420 452 ( new TGeoCombiTrans("ctEnd9mm", 0., 0., 0.9, Ry180)) -> RegisterYourself();
5e319bd5 453
dd27c420 454 TGeoCompositeShape * shVBU9mm = new TGeoCompositeShape("shVBU9mm" , "shVBUend:ctEnd9mm + shVBUtube9mm");
455 TGeoCompositeShape * shVBU26mm = new TGeoCompositeShape("shVBU26mm", "shVBUend + shVBUtube26mm");
5e319bd5 456
dd27c420 457 const Int_t nsec2 = 10;
458 Double_t az2 [nsec2] = {0. , 0.43, 0.43, 0.58, 0.58 , 0.73 , 0.73, 1.05, 1.05, 1.31} ;
459 Double_t aRi2[nsec2] = {5.15, 5.15, 5.03, 5.03, 5.455, 5.455, 5.03, 5.03, 5.59, 5.59} ;
460 TGeoPcon * shVBUrotFlg = new TGeoPcon("shVBUrotFlg" , 0., 360., nsec2);
461 for (Int_t i=0; i<nsec2; i++) {
462 z=az2[i]; Ri = aRi2[i]; Ro = 6.02;
beca6103 463 //printf(" i: %2d z: %8.2f Ri: %8.2f Ro: %8.2f\n", i, z, Ri, Ro );
dd27c420 464 shVBUrotFlg ->DefineSection( i, z, Ri, Ro);
465 }
466 TGeoVolume * voVBUrotFlg = new TGeoVolume("voVBUrotFlg", shVBUrotFlg, kMedAlu);
5e319bd5 467
dd27c420 468 // Flange
469 TGeoPcon * shVBUflg = new TGeoPcon("shVBUflg" , 0., 360., 4);
470 z = 0;
471 Ri = 6.02; Ro = 7.6;
472 shVBUflg->DefineSection(0, z, Ri, Ro);
473 z = 1.31;
474 shVBUflg->DefineSection(1, z, Ri, Ro);
475 z = 1.31;
476 Ri = 5.15;
477 shVBUflg->DefineSection(2, z, Ri, Ro);
478 z = 2.0;
479 shVBUflg->DefineSection(3, z, Ri, Ro);
480 TGeoVolume * voVBUflg = new TGeoVolume("voVBUflg", shVBUflg, kMedAlu);
5e319bd5 481
5e319bd5 482
dd27c420 483 // Add the metal plate at the end of Absorber
484 // Plate: 80 cm x 80 cm x 1.95 cm (Thickness is aproximatted) (ernesto.calvo@pucp.edu.pe)
485 // The End of the concrete abosorber is at kZendAbs = 1880.75
5e319bd5 486
dd27c420 487 new TGeoBBox("shBasePlate", 80./2., 80./2., 1.95/2.);
488 new TGeoTube("shHolePlate", 0. , 12.3 , 1.95 );
489 TGeoVolume* voSaa3EndPlate = new TGeoVolume("voYSaa3EndPlate",
490 new TGeoCompositeShape("shYSaa3EndPlate","shBasePlate-shHolePlate"),
491 kMedSteelSh);
492 //
493 // Add Rods
494 //
495 // dimensions of rods
496 const Double_t dzRodL = 27.0;
497 const Double_t dzRodA = 4.3;
498 const Double_t dzRodB = 1.3;
499 new TGeoTube("shLargeRod", 0., 1.6/2., dzRodL/2.);
500 new TGeoTube("shRodA", 0., 3.0/2., dzRodA/2.);
501 new TGeoTube("shRodB", 0., 2.3/2., dzRodB/2.);
502 //
503 ( new TGeoTranslation("trRod1", 0., 0., -dzRodL/2. + dzRodA/2.) )->RegisterYourself();
504 ( new TGeoTranslation("trRod2", 0., 0., -dzRodL/2. + dzRodA + dzRodB/2.) )->RegisterYourself();
505 ( new TGeoTranslation("trRod3", 0., 0., dzRodL/2. - dzRodB/2.) )->RegisterYourself();
506 TGeoVolume * voSaa3Rod = new TGeoVolume("YSAA3Rod",
507 new TGeoCompositeShape("shLargeRod+shRodA:trRod1 + shRodB:trRod2 + shRodB:trRod3"),
508 kMedSteelSh);
509 //
510 // Define Valve support (VS) (ernesto.calvo@pucp.edu.pe)
511 //
512 const Double_t dyVS = 5.5;
513 const Double_t dxVS = 30.0;
514 const Double_t dzVS = 1.0;
515 TGeoVolume * voVS = new TGeoVolume("voVS",
516 new TGeoBBox("shVS", dxVS/2., dyVS/2., dzVS/2.),
517 kMedSteelSh);
5e319bd5 518
dd27c420 519 // Add Valve (Valve is divided in parts VA,VB,VC and VD) (ernesto.calvo@pucp.edu.pe)
520 TGeoVolumeAssembly * voValve = new TGeoVolumeAssembly("voValve");
521 //
522 // Define volume VA (ernesto.calvo@pucp.edu.pe)
523 const Double_t dxVA = 20.3;
524 const Double_t dyVA = 48.0;
525 const Double_t dzVA = 6.0; // Width
526 const Double_t dz2VA = 8.5; // Full width including protuding boxes
527 // Valve position (ernesto.calvo@pucp.edu.pe)
528 const Double_t zPosValve = kZbegValve + dz2VA/2.;
529 //
530 new TGeoBBox("shVAbox", dxVA/2., dyVA/2., dzVA/2.);
531 new TGeoBBox("shVAHbox", -1.+dxVA/2., 3./2., dz2VA/2.);
532 new TGeoTube("shVAC", 0., 7.9, dz2VA/2.);
533 new TGeoTube("shVACh", 0., 5.3, dz2VA );
534 // translation for shVAHbox (ernesto.calvo@pucp.edu.pe)
535 ( new TGeoTranslation("trVAH1", 0., 12.75, 0.) )->RegisterYourself();
536 ( new TGeoTranslation("trVAH2", 0., -12.75, 0.) )->RegisterYourself();
5e319bd5 537
dd27c420 538 TGeoVolume * voValveVA = new TGeoVolume("voValveVA",
539 new TGeoCompositeShape("(shVAbox + shVAHbox:trVAH1 + shVAHbox:trVAH2 + shVAC)-shVACh"),
540 kMedSteelSh);
541 voValve->AddNode(voValveVA, 1, 0);
542 // Define Vacuum Hole of Valve
543 TGeoTube * shVACvach = new TGeoTube("shVACvach", 0., 5.3, dz2VA/2.);
544 TGeoVolume * voValveVAvh = new TGeoVolume("voValveVAvacuum", shVACvach, kMedVacuum);
545 voValve->AddNode(voValveVAvh,1,0);
546 // Also add valve Support (ernesto.calvo@pucp.edu.pe)
547 voValve->AddNode(voVS, 1, new TGeoTranslation(0., 12.75, -dz2VA/2.-dzVS/2.));
548 voValve->AddNode(voVS, 2, new TGeoTranslation(0., -12.75, -dz2VA/2.-dzVS/2.));
549
550 // Define Volume VB (ernesto.calvo@pucp.edu.pe)
551 const Double_t dxVB = 23.5;
552 const Double_t dyVB = 5.0;
553 const Double_t dzVB = 9.4;
554 TGeoVolume * voValveVB = new TGeoVolume("voValveVB",
555 new TGeoBBox("shVBbox", dxVB/2., dyVB/2., dzVB/2.),
556 kMedSteelSh);
557 voValve->AddNode(voValveVB, 1, new TGeoTranslation( 0., dyVA/2. +dyVB/2. , 0));
558 // Define Volume VC (ernesto.calvo@pucp.edu.pe)
559 const Double_t R1VC = 4.5 /2.;
560 const Double_t R2VC = 8.1 /2.;
561 const Double_t dy1VC = 10.0;
562 const Double_t dy2VC = 0.75;
563 new TGeoTube("shVC1", 0., R1VC, dy1VC/2.);
564 new TGeoTube("shVC2", 0., R2VC, dy2VC/2.);
565 ( new TGeoTranslation("trVC21", 0., 0., dy1VC/2. - dy2VC/2.) )->RegisterYourself();
566 ( new TGeoTranslation("trVC22", 0., 0., -dy1VC/2. + dy2VC/2.) )->RegisterYourself();
567 TGeoVolume * voValveVC = new TGeoVolume("voValveVC",
568 new TGeoCompositeShape("shVC1 + shVC2:trVC21 + shVC2:trVC22"),
569 kMedSteelSh);
570 voValve->AddNode(voValveVC, 1, new TGeoCombiTrans(
571 0., dyVA/2. + dyVB + dy1VC/2. , 0, Rx90) );
572 // Define volume VD (ernesto.calvo@pucp.edu.pe)
573 const Double_t dxVD = 15.9;
574 const Double_t dyVD = 23.0;
575 const Double_t dzVD = 14.0;
576 TGeoVolume * voValveVD = new TGeoVolume("voValveVD",
577 new TGeoBBox("shVD", dxVD/2., dyVD/2., dzVD/2.),
578 kMedSteelSh);
579 voValve->AddNode(voValveVD, 1,
580 new TGeoTranslation( 1.25, dyVA/2. + dyVB + dy1VC + dyVD/2. , 0) );
581
582 //
583 // Define volume Front Bar (ernesto.calvo@pucp.edu.pe)
584 //
585 const Double_t dxF = 67.4;
586 const Double_t dyF = 4.0;
587 const Double_t dzF = 2.0;
588 const Double_t R1FC = 8.1;
589 const Double_t R2FC = 11.5;
590 const Double_t dxFA = (dxF-R1FC)/2.;
5e319bd5 591
dd27c420 592 new TGeoBBox("shFA", dxFA/2., dyF/2., dzF/2.);
593 new TGeoTube("shFC", 0., R2FC, dzF/2.);
594 new TGeoTube("shFCH", 0., R1FC, 2.*dzF);
595 ( new TGeoTranslation("trFA1", R1FC +dxFA/2., 0., 0.) )->RegisterYourself();
596 ( new TGeoTranslation("trFA2", -R1FC -dxFA/2., 0., 0.) )->RegisterYourself();
597 TGeoVolume * voFrontBar = new TGeoVolume("voFrontBar",
598 new TGeoCompositeShape("shFA:trFA1 + shFA:trFA2 + (shFC - shFCH)"),
599 kMedSteelSh);
600 // Make Lateral Bars
601 const Double_t kdzLatBar = 22.9;
602 TGeoVolume * voLatBar = new TGeoVolume("voLatBar",
603 new TGeoTube("shLatBar",0., dyF/2., kdzLatBar/2.), kMedSteelSh);
604 //
605 // Define Compensator Magnet coils
606 //
607 dz = 12.5;
608 Ro = 15.0;
609 Ri = 1.9;
610 new TGeoTubeSeg("shCoilRo", 0., Ro, dz/2., 90., 180.);
611 new TGeoTubeSeg("shCoilRi", 0., Ri, dz , 90., 185.);
612 (new TGeoTranslation("trCoilRo", Ro, 10.4, 0.)) -> RegisterYourself();
613 (new TGeoTranslation("trCoilRi", Ro, 9.6, 0.)) -> RegisterYourself();
614 new TGeoBBox("shBoxCoilRo", 15.0/2., 10.4/2., dz/2.);
615 new TGeoBBox("shBoxCoilRi", 1.9/2., 9.6 , dz );
616 (new TGeoTranslation("trBoxCoilRo", 15.0/2., 10.4/2., 0.)) -> RegisterYourself();
617 (new TGeoTranslation("trBoxCoilRi", 13.1 + 1.9/2., 0. , 0.)) -> RegisterYourself();
618 new TGeoBBox("shBoxCoil0", 10./2., 30., dz);
619 (new TGeoTranslation("trBoxCoil0", 14.6 + 10./2., 0. , 0.)) -> RegisterYourself();
620 strSh = "";
621 strSh += "(shCoilRo:trCoilRo + shBoxCoilRo:trBoxCoilRo) - ";
622 strSh += "(shCoilRi:trCoilRi + shBoxCoilRi:trBoxCoilRi +" ;
623 strSh += " shBoxCoil0:trBoxCoil0 )" ;
624 TGeoCompositeShape * shCoil = new TGeoCompositeShape("shCoil0", strSh);
625 TGeoVolume * voCoil = new TGeoVolume("voCoil", shCoil, kMedSteelSh);
626
627 //
628 // ALUMINIUM PLATES
629 //
630
631 // Shape for aluminium Plate separating cavern and LHC tunnel
632 const Double_t dAlWallThick = 0.5; // thickness of aluminium plates (cm)
633 //
634 // RB24/26 Tunnel Floor
635 R = 220.;
636 // h = 140.;
637 // phi = TMath::ACos(h / r);
638 // xl = r * TMath::Sin(phi);
639 // dr = 1600.;
640 // dh = dr * TMath::Cos(phi);
641 // dl = dr * TMath::Sin(phi);
642
643 new TGeoTube("shWallBase", 0., R, dAlWallThick*0.5); // base shape for shWallBigPlate
644 new TGeoBBox("shWallCutBot",270., 110., dAlWallThick ); // to be substracted from base
645 // Translation for cutting circular and square hole in the plates
646 (new TGeoTranslation("trAntiBeamAxis", -70., 40., 0.)) -> RegisterYourself();
647 (new TGeoTranslation("trHUWAT3", -70., -110. - 140. +40., 0.)) -> RegisterYourself();
648
649 //
650 // Wall Big Aluminium Plate with Squared Hole
651 //
652 const Double_t dSqrHoleSide = 33.0; // Side
653 new TGeoBBox("shWallSqrHole", dSqrHoleSide*0.5, dSqrHoleSide*0.5, dAlWallThick);
654 strSh = "";
655 strSh += "shWallBase:trAntiBeamAxis - ";
656 strSh += " ( shWallCutBot:trHUWAT3" ;
657 strSh += " + shWallSqrHole )";
658 TGeoVolume* voWallBigPlate = new TGeoVolume("voWallBigPlate",
659 new TGeoCompositeShape("shWallBigPlate", strSh), kMedAlu );
660 //
661 // Wall Squared Aluminium Plate
662 //
663 const Double_t dCircHoleRad = 9.5; // Radius
664 new TGeoTube("shCircHole", 0., dCircHoleRad, dAlWallThick);
665 // Make holes for bars
666 new TGeoTube("shRodHole", 0., 1.7/2., 2*dAlWallThick);
667 ( new TGeoTranslation("trWallRod1", 12.5, -12.75, 0.)) -> RegisterYourself();
668 ( new TGeoTranslation("trWallRod2", 12.5, 12.75, 0.)) -> RegisterYourself();
669 ( new TGeoTranslation("trWallRod3", -12.5, -12.75, 0.)) -> RegisterYourself();
670 ( new TGeoTranslation("trWallRod4", -12.5, 12.75, 0.)) -> RegisterYourself();
671 new TGeoBBox("shWallSqrPlateBase", dSqrHoleSide*0.5 + 5.0, dSqrHoleSide*0.5 + 5.0, dAlWallThick/2.);
672 strSh = " ((((";
673 strSh += " ( shWallSqrPlateBase - shCircHole )";
674 strSh += " - shRodHole:trWallRod1)" ;
675 strSh += " - shRodHole:trWallRod2)" ;
676 strSh += " - shRodHole:trWallRod3)" ;
677 strSh += " - shRodHole:trWallRod4)" ;
678 TGeoVolume* voWallSqrPlate = new TGeoVolume("HUWAT_AlWall02",
679 new TGeoCompositeShape("shWallSqrPlate", strSh ), kMedAlu);
680 // ==========================================================================
681 //
682 // Define Mother Vacuum volume of VMAOI (need shIonPumpVBo)
683 //
684 // ==========================================================================
685 const Double_t kdzMoFlange = 2.0;
686 const Double_t kdzMoBellow = 15.6;
687 const Double_t kdzTTube = 11.5; // Bellow starts here
688 const Double_t kziTTube = 1.0; // Ion Pum Tube starts here
689 new TGeoTube( "shMoFlange", 0., 15.2/2., kdzMoFlange/2.0);
690 new TGeoTube( "shMoBellow", 0., 11.4/2., kdzMoBellow/2.0);
691 (new TGeoTranslation("trMoFlange1", 0., 0., 0.5*kdzMoFlange )) -> RegisterYourself();
692 (new TGeoTranslation("trMoFlange2", 0., 0., 28.0 - 0.5*kdzMoFlange )) -> RegisterYourself();
693 (new TGeoTranslation("trMoBellow" , 0., 0., 28.0 - 0.5*kdzMoBellow )) -> RegisterYourself();
694 (new TGeoTranslation("trMoTTube" , 0., 0., kziTTube + 0.5*kdzTTube )) -> RegisterYourself();
695
696 TGeoCompositeShape * shMoVMAOI =
697 new TGeoCompositeShape("shMoVMAOI",
698 "shMoFlange:trMoFlange1 + shMoBellow:trMoBellow + shMoFlange:trMoFlange2 + shIonPumpVBo:trMoTTube");
699 TGeoVolume * voMoVMAOI = new TGeoVolume("voMoVMAOI", shMoVMAOI, kMedVacuum);
700 voMoVMAOI->AddNode(voVSR ,1, new TGeoTranslation(0., 0., 7.1 - 0.45));
701 voMoVMAOI->AddNode(voIonPumpVB,1, new TGeoTranslation(0., 0., 1 + 11.5/2.));
702 voMoVMAOI->AddNode(voVSRflange,1, new TGeoTranslation(0.,0.,0.));
703 voMoVMAOI->AddNode(voVSRcontD ,1, new TGeoTranslation(0.,0.,28.));
704 voMoVMAOI->AddNode(voVSRcontF ,1, new TGeoTranslation(0.,0.,28.));
705 z = 1.0 + 11.5;
706 voMoVMAOI->AddNode( new TGeoVolume("voVBU9mm", shVBU9mm, kMedAlu),
707 1, new TGeoTranslation(0.,0., z) );
708 voMoVMAOI->AddNode( new TGeoVolume("voVBU26mm", shVBU26mm, kMedAlu),
709 1, new TGeoTranslation(0.,0., z + 11.9) );
710 voMoVMAOI->AddNode( new TGeoVolume("voVBUcent", shVBUcent, kMedAlu),
711 1, new TGeoTranslation(0.,0., z) );
712 voMoVMAOI->AddNode( voVBUrotFlg, 1,
713 new TGeoCombiTrans(0.,0.,1.31, Ry180) );
714 voMoVMAOI->AddNode( voVBUrotFlg, 2,
715 new TGeoTranslation(0.,0.,28. - 1.31) );
716 voMoVMAOI->AddNode( voVBUflg, 1,
717 new TGeoTranslation(0.,0.,0.) );
718 voMoVMAOI->AddNode( voVBUflg, 2,
719 new TGeoCombiTrans(0.,0.,28., Ry180) );
326c9a72 720 // ==========================================================================
721 //
722 // AD Support structure by Pieter Ijzerman
723 // ecalvovi@cern.ch
724 // ==========================================================================
725 Int_t nvertices=0;
726 // Cover plate_______________________________________________________________
727 TGeoXtru * shADcoverplate = new TGeoXtru(2);
728 shADcoverplate->SetNameTitle("shADcoverplate","shADcoverplate");
729 Double_t y1[] = { 0.0, 18.50, 18.50, 22.50, 22.50, 18.50, 18.50, 22.50, 22.50, 18.50, 18.50, .00 , .00, 15.25, 15.25, .00 };
730 Double_t x1[] = { 0.0, .00, 5.15, 5.15, 17.15, 17.15, 24.25, 24.25, 36.25, 36.25, 41.40, 41.40 ,35.70, 35.70, 5.70, 5.70 };
731 nvertices = sizeof(x1)/sizeof(Double_t);
732 shADcoverplate->DefinePolygon(nvertices,x1,y1);
733 shADcoverplate->DefineSection(0, -0.1, -20.7, 0.0, 1.0); // Z position, offset and scale for first section
734 shADcoverplate->DefineSection(1, 0.1, -20.7, 0.0, 1.0); // -''- secons section
735
736 // Horizontal side___________________________________________________________
737 TGeoXtru * shADhorizontalside = new TGeoXtru(2);
738 shADhorizontalside->SetNameTitle("shADhorizontalside","shADhorizontalside");
739 Double_t x2[] = { 0.0, .00, 4.80, 4.80, 7.20, 7.20, 12.00, 12.00 };
740 Double_t y2[] = { 0.0, 5.66, 5.66, 1.16, 1.16, 5.66, 5.66, .00 };
741 nvertices = sizeof(x2)/sizeof(Double_t);
742 shADhorizontalside->DefinePolygon(nvertices,x2,y2);
743 shADhorizontalside->DefineSection(0, -0.4, -6.0, 0.0, 1.0); // Z position, offset and scale for first section
744 shADhorizontalside->DefineSection(1, +0.4, -6.0, 0.0, 1.0); // -''- secons section
745
746 TGeoBBox * shADsidebox = new TGeoBBox("shADsidebox", 0.4, 18.55/2., 5.66/2.);
747 TGeoVolume * voADsidebox = new TGeoVolume("voADsidebox", shADsidebox, kMedAlu);
748
749
750// Define a TNode where this example resides in the TGeometry
751// Draw the TGeometry
752 TGeoVolume * voADhorizontalside = new TGeoVolume("voADhorizontalside", shADhorizontalside, kMedAlu);
753 TGeoVolume * voADcoverplate = new TGeoVolume("voADcoverplate", shADcoverplate, kMedAlu);
754 //
755 TGeoVolume *voADsupport = new TGeoVolumeAssembly("voADsupport");
756 voADsupport->AddNode(voADcoverplate, 1, new TGeoTranslation( 0., 0., -5.66/2.-0.1));
757 voADsupport->AddNode(voADcoverplate, 2, new TGeoTranslation( 0., 0., +5.66/2.+0.1));
758 voADsupport->AddNode(voADhorizontalside, 1, new TGeoCombiTrans( -6.0 - 7.1/2., 22.5-0.4, -5.66/2., Rx90));
759 voADsupport->AddNode(voADhorizontalside, 2, new TGeoCombiTrans( +6.0 + 7.1/2., 22.5-0.4, -5.66/2., Rx90));
760 voADsupport->AddNode(voADsidebox, 1, new TGeoTranslation( -20.7 +0.4, 18.55/2., 0.));
761 voADsupport->AddNode(voADsidebox, 2, new TGeoTranslation( +20.7 -0.4, 18.55/2., 0.));
762
dd27c420 763 // ==========================================================================
764 //
765 // Define ADA
766 //
767 // ==========================================================================
768
769 TGeoVolume *ad = new TGeoVolumeAssembly("AD");
770
771 // Get medium for ADA
326c9a72 772 TGeoMedium * medADASci = gGeoManager->GetMedium("AD_BC404"); // AD Scin.
773 // TGeoMedium * medADALG = gGeoManager->GetMedium("AD_PMMA"); // lightGuide
dd27c420 774 // TGeoMedium * medADAPMGlass = gGeoManager->GetMedium("AD_Glass"); // Glass for Aluminium simulation
775 // TGeoMedium * medADAPMAlum = gGeoManager->GetMedium("AD_Alum");
776
777 // Get Medium for ADC
326c9a72 778 TGeoMedium * medADCSci = gGeoManager->GetMedium("AD_BC404");
dd27c420 779 // TGeoMedium * medADCLG = gGeoManager->GetMedium("AD_PMMA");
780 // TGeoMedium * medADCPMGlass = gGeoManager->GetMedium("AD_Glass");
781 // TGeoMedium * medADCPMAlum = gGeoManager->GetMedium("AD_Alum");
782
783 // ADA Scintillator Pad
326c9a72 784 const Double_t kADACellSideY = 21.6;
785 const Double_t kADACellSideX = 18.1;
dd27c420 786 // ADC Scintillator Pad
326c9a72 787 const Double_t kADCCellSideY = 21.6;
788 const Double_t kADCCellSideX = 18.1;
dd27c420 789 // WLS bar : 0.40 cm ( 4.0 mm )
790 // Wrapping : 0.20 cm ( 2.0 mm )
791 // Aluminnized Mylar: 0.01 cm ( 0.1 mm )
792 // Fishing line : 0.04 cm ( 0.4 mm )
793 // total shift on X : 0.65 cm
794 // total shift on Y : 0.21 cm
326c9a72 795 const Double_t kShiftX = 0.54;
796 const Double_t kShiftY = 0.10;
dd27c420 797 const Double_t kADACelldz = 2.50;
798 const Double_t kADCCelldz = 2.50;
326c9a72 799 const Double_t kADABeamPipeR = 6.20; // Radius of beam pipe hole for ADA (Diameter 12.4 cm)
800 const Double_t kADCBeamPipeR = 3.70; // Radius of beam pipe hole for ADC (Diameter 7.4 cm)
dd27c420 801 const Int_t kColorADA = kGreen;
802 const Int_t kColorADC = kGreen;
803 Double_t X = kShiftX + kADACellSideX * 0.5;
804 Double_t Y = kShiftY + kADACellSideY * 0.5;
805 Double_t WLS_dx = 0.4;
806 Double_t WLS_dz = 2.5;
807 Double_t WLS_SideA_Long_dy = 24.20; // 24.2;
808 Double_t WLS_SideC_Long_dy = 24.20; // 24.2;
809 Double_t WLS_SideA_Short_dy = 18.20; // 18.41;
810 Double_t WLS_SideC_Short_dy = 20.70; // 20.91;
326c9a72 811 // Creating ADA WLS bars_____________________________________________________
dd27c420 812 TGeoVolume * vADA_WLS_s = new TGeoVolume( "ADAWLSshort",
813 new TGeoBBox( "shADAWLSbarShort" , WLS_dx/2.0, WLS_SideA_Short_dy/2.0, WLS_dz/2.0),
814 medADASci);
815 TGeoVolume * vADA_WLS_l = new TGeoVolume( "ADAWLSlong" ,
816 new TGeoBBox( "shADAWLSbarLong" , WLS_dx/2.0, WLS_SideA_Long_dy /2.0, WLS_dz/2.0),
817 medADASci);
818 vADA_WLS_l->SetLineColor( kRed );
819 vADA_WLS_s->SetLineColor( kRed );
326c9a72 820 // Creating ADC WLS bars_____________________________________________________
dd27c420 821 TGeoVolume * vADC_WLS_s = new TGeoVolume( "ADCWLSshort",
822 new TGeoBBox( "shADCWLSbarShort" , WLS_dx/2.0, WLS_SideC_Short_dy/2.0, WLS_dz/2.0),
823 medADCSci);
824 TGeoVolume * vADC_WLS_l = new TGeoVolume( "ADCWLSlong" ,
825 new TGeoBBox( "shADCWLSbarLong" , WLS_dx/2.0, WLS_SideC_Long_dy /2.0, WLS_dz/2.0),
826 medADCSci);
827 vADC_WLS_l->SetLineColor(kRed);
828 vADC_WLS_s->SetLineColor(kRed);
326c9a72 829 // Make ADA scintillator pad_________________________________________________
dd27c420 830 new TGeoBBox( "shADAbox" , kADACellSideX/2.0, kADACellSideY/2.0, kADACelldz/2.0 );
831 new TGeoTube( "shADAHole", 0. , kADABeamPipeR , kADACelldz );
832 ( new TGeoTranslation("trADAbox", X, Y, 0.)) -> RegisterYourself();
833 //
834 TGeoVolume * vADA1 = new TGeoVolume( "ADApad",
835 new TGeoCompositeShape("shADApad", "shADAbox:trADAbox-shADAHole"), medADASci );
836 vADA1->SetLineColor( kColorADA );
837
838 TGeoVolume *secADA = new TGeoVolumeAssembly( "ADAsec" );
839 // Add PAD
840 secADA->AddNode( vADA1, 1, 0);
841 secADA->AddNode( vADA_WLS_s, 1,
326c9a72 842 new TGeoTranslation(0.1 + WLS_dx/2.0, kADABeamPipeR + WLS_SideA_Short_dy/2.0, 0.0) );
dd27c420 843 secADA->AddNode( vADA_WLS_l, 1,
844 new TGeoTranslation(kShiftX + WLS_dx/2.0 + kADACellSideX + 0.04, kShiftY + WLS_SideA_Long_dy/2.0, 0.0) );
845
846 /// Assembling ADA adding 4 sectors // Sectors
847 TGeoVolume *vADAarray = new TGeoVolumeAssembly( "ADA" ); // ^ y
848 vADAarray->AddNode( secADA, 1 ); // |
849 vADAarray->AddNode( secADA, 2, Ry180 ); // 2 | 1
850 vADAarray->AddNode( secADA, 3, Rz180 ); // ---------------> x
851 vADAarray->AddNode( secADA, 4, Rx180 ); // 3 | 4
852 // // |
dd27c420 853 // Add ADA layer 2 and 3 to AD volume
326c9a72 854 // const Float_t kPosAD2 = 1695.0;
855 // const Float_t kPosAD3 = 1700.0;
856 // ad->AddNode(vADAarray,1, new TGeoTranslation(0., 0., kPosAD2));
857 // ad->AddNode(vADAarray,2, new TGeoTranslation(0., 0., kPosAD3));
858 const Float_t kPosADA = 1695.0;
859 ad->AddNode(vADAarray, 1, new TGeoTranslation(0., 0., kPosADA - kADACelldz/2. -0.1));
860 ad->AddNode(vADAarray, 2, new TGeoTranslation(0., 0., kPosADA + kADACelldz/2. +0.1));
861 ad->AddNode(voADsupport, 1, new TGeoTranslation( 0., 0., kPosADA));
862 ad->AddNode(voADsupport, 2, new TGeoCombiTrans ( 0., 0., kPosADA, Rz180));
dd27c420 863
864 // ==========================================================================
865 //
326c9a72 866 // Define ADC (2014, May 4) Updated 2015, Jan 22
dd27c420 867 //
868 // ==========================================================================
869
dd27c420 870 /////////////////////////////////////////////////////////////////////////////
871 /// ADC in the tunnel ///
872 /////////////////////////////////////////////////////////////////////////////
873 new TGeoBBox( "shADCbox" , kADCCellSideX/2.0, kADCCellSideY/2.0, kADCCelldz/2.0 );
874 new TGeoTube( "shADCHole", 0. , kADCBeamPipeR , kADCCelldz );
875 X = kShiftX + kADCCellSideX * 0.5;
876 Y = kShiftY + kADCCellSideY * 0.5;
877 ( new TGeoTranslation("trADCbox", X, Y, 0.) ) -> RegisterYourself();
878 //
879 TGeoVolume * vADCpad = new TGeoVolume( "ADCpad",
880 new TGeoCompositeShape("shADCpad", "shADCbox:trADCbox-shADCHole"), medADCSci );
881 vADCpad->SetLineColor( kColorADC );
882
883 /// Creating Sector for Tunnel (Asembly: Scintillator Pad + Light guide + PM )
884 TGeoVolume *voADC = new TGeoVolumeAssembly("ADCsec");
885 // Add PAD
886 voADC->AddNode( vADCpad, 1, 0);
887 // Add ADC WLS Short bar
888 voADC->AddNode( vADC_WLS_s, 1,
326c9a72 889 new TGeoTranslation( 0.1 + WLS_dx/2.0, kADCBeamPipeR + WLS_SideC_Short_dy/2.0, 0.0) );
dd27c420 890 // Add ADC WLS Long bar
891 voADC->AddNode( vADC_WLS_l, 1,
892 new TGeoTranslation( 0.04 + WLS_dx/2.0 + kADCCellSideX + kShiftX, kShiftY + WLS_SideC_Long_dy/2.0, 0.0) );
893
894 /// Assembling ADC adding the 4 sectors // Sectors
895 TGeoVolume *vADCarray = new TGeoVolumeAssembly("ADC"); // ^ y
896 vADCarray->AddNode( voADC, 1 ); // |
897 vADCarray->AddNode( voADC, 2, Ry180 ); // 2 | 1
898 vADCarray->AddNode( voADC, 3, Rz180 ); // ---------------> x
899 vADCarray->AddNode( voADC, 4, Rx180 ); // 3 | 4
900 // |
901
902
903 // ==========================================================================
904 //
905 // Add ADC to AD volume
906 //
907 // Note to future maintainers:
908 // In previous AliRoot versions the position z = -1900.75 corresponded
909 // to the end of the YSAA3_CC_BLOCK (concrete block shielding just before
910 // the C-Side LHC wall). Now this has been fixed to agree with reality.
911 // The YSAA3_CC_BLOCK starts at 1800.75 and ends at 1880.75 cm.
912 //
913 // Ernesto Calvo and Alberto Gago.
914 // - ecalvovi@cern.ch
915 // - agago@pucp.edu.pe
916 //
917 // ==========================================================================
918
326c9a72 919 // * ad -> AddNode(vADCarray , 1, new TGeoTranslation(0., 0., kZendADC2 + kADCCelldz/2.)); // Tunnel
920 // * ad -> AddNode(vADCarray , 2, new TGeoTranslation(0., 0., kZbegADC1 - kADCCelldz/2.)); // Tunnel
921 // * const Float_t kZbegADC1 = -kZbegFrontBar-2.
922 // * const Float_t kZendADC2 = -1959.0; // (ecalvovi@cern.ch)
dd27c420 923
dd27c420 924 switch (fADCPosition ) {
925 case kADCInTunnel:
926 {
326c9a72 927 // const Float_t kZbegADC1 = -kZbegFrontBar-2.; // (ecalvovi@cern.ch)
928 // const Float_t kZendADC2 = -1959.0; // (ecalvovi@cern.ch)
929 // ad -> AddNode(vADCarray , 1, new TGeoTranslation(0., 0., kZendADC2 + kADCCelldz/2.)); // Tunnel
930 // ad -> AddNode(vADCarray , 2, new TGeoTranslation(0., 0., kZbegADC1 - kADCCelldz/2.)); // Tunnel
931 const Float_t kPosADC = -kZbegFrontBar-2.-3.0-0.3; // 3.0 = (5.6 + 0.2 + 0.2)/2. // (ecalvovi@cern.ch)
932 printf("CreateAD: kPosADC=%8.2f\n", kPosADC);
bc429617 933 ad -> AddNode(vADCarray , 1, new TGeoTranslation(0., 0., kPosADC - kADCCelldz/2. - 0.165)); // Tunnel // ADC1
934 ad -> AddNode(vADCarray , 2, new TGeoTranslation(0., 0., kPosADC + kADCCelldz/2. + 0.165)); // Tunnel // ADC2
326c9a72 935 ad -> AddNode(voADsupport, 3, new TGeoTranslation( 0., 0., kPosADC));
936 ad -> AddNode(voADsupport, 4, new TGeoCombiTrans ( 0., 0., kPosADC, Rz180));
dd27c420 937 break;
938 }
939 case kADCInCavern:
940 {
941 printf("FATAL: vADCInCavern is now obsolete!");
942 exit(1);
943 // const Float_t kZbegADC1 = -1890.0; // (ecalvovi@cern.ch)
944 // const Float_t kZbegADC2 = -1885.0; // (ecalvovi@cern.ch)
945 // ad -> AddNode(vADCarrayH, 1, new TGeoTranslation(0., 0., kZbegADC1 - kADCCelldz/2.)); // Cavern
946 // ad -> AddNode(vADCarrayH, 2, new TGeoTranslation(0., 0., kZbegADC2 - kADCCelldz/2.)); // Cavern
947 break;
948 }
949 case kADCInBoth:
950 {
951 printf("FATAL: vADCInBoth is now obsolete!");
952 exit(1);
953 // const Float_t kZbegADC1 = -kZbegFrontBar-2.; // (ecalvovi@cern.ch)
954 // const Float_t kZbegADC2 = -1885.0; // (ecalvovi@cern.ch)
955 // ad -> AddNode(vADCarray , 1, new TGeoTranslation(0., 0., kZbegADC1 - kADCCelldz/2.)); // Tunnel
956 // ad -> AddNode(vADCarrayH, 2, new TGeoTranslation(0., 0., kZbegADC2 - kADCCelldz/2.)); // Cavern
957 break;
958 }
959 }
960
961
962 // ==========================================================================
963 //
326c9a72 964 // Add structure volumes to top volume
dd27c420 965 //
966 // ==========================================================================
967
968 TGeoVolumeAssembly * top = new TGeoVolumeAssembly("voADStruct");
969 top->AddNode(voSaa3EndPlate, 1, new TGeoTranslation( 0., 0., kZendAbs + 1.95/2.));
970 z = kZwall;
971 top->AddNode(voWallBigPlate, 1, new TGeoTranslation(0., 0., z - 0.5 * dAlWallThick ));
972 top->AddNode(voWallSqrPlate, 1, new TGeoTranslation(0., 0., z + 0.5 * dAlWallThick ));
973 z = kZendAbs + 1.95 + dzRodL/2.;
974 top->AddNode(voSaa3Rod, 1, new TGeoTranslation( 12.5, -12.75, z));
975 top->AddNode(voSaa3Rod, 2, new TGeoTranslation( 12.5, 12.75, z));
976 top->AddNode(voSaa3Rod, 3, new TGeoTranslation( -12.5, -12.75, z));
977 top->AddNode(voSaa3Rod, 4, new TGeoTranslation( -12.5, 12.75, z));
978 top->AddNode(voValve, 1, new TGeoTranslation( 0., 0., zPosValve));
979 //
980 top->AddNode(voMoVMAOI, 1, new TGeoTranslation( 0., 0., kZbegVMAOI));
981 //
982 top->AddNode(voFrontBar, 1, new TGeoTranslation( 0., 0., kZbegFrontBar + dzF/2.));
983 z = kZbegCoil;
984 top->AddNode(voCoil, 1, new TGeoCombiTrans( 3.6 + dz/2., 0., z, Ry90m));
985 top->AddNode(voCoil, 2, new TGeoCombiTrans( 3.6 + dz/2., 0., z, new TGeoRotation((*Ry90m)*(*Rx180))));
986 top->AddNode(voCoil, 3, new TGeoCombiTrans( -3.6 - dz/2., 0., z, Ry90m));
987 top->AddNode(voCoil, 4, new TGeoCombiTrans( -3.6 - dz/2., 0., z, new TGeoRotation((*Ry90m)*(*Rx180))));
988 z = kZbegFrontBar + dzF + kdzLatBar/2.;
989 top->AddNode(voLatBar, 1, new TGeoTranslation( 31.9, 0., z));
990 top->AddNode(voLatBar, 2, new TGeoTranslation( -31.9, 0., z));
991 //
326c9a72 992 // Add structures (top) to AD node
dd27c420 993 //
dd27c420 994 if (fADCstruct) {
995 ad->AddNode(top,1, Ry180);
996 }
997
326c9a72 998 //
999 // Add Everything to ALICE
1000 //
1001 TGeoVolume *alice = gGeoManager->GetVolume("ALIC");
dd27c420 1002 alice->AddNode(ad, 1);
5e319bd5 1003
5e319bd5 1004
dd27c420 1005 // gGeoManager->DefaultColors();
1006 // gGeoManager->CloseGeometry();
1007 // gGeoManager->SetVisLevel(10);
1008 // gGeoManager->SetVisOption(0);
1009 // alice->Draw("ogl");
5e319bd5 1010
dd27c420 1011 return;
bc429617 1012 printf("<=== AliADv1::CreateAD(): ver=[Feb 3st, 2015]; contact=[ecalvovi@cern.ch]\n");
5e319bd5 1013}
1014
1015//_____________________________________________________________________________
1016void AliADv1::AddAlignableVolumes() const
1017{
1018 //
1019 // Create entries for alignable volumes associating the symbolic volume
1020 // name with the corresponding volume path. Needs to be syncronized with
1021 // eventual changes in the geometry.
1022 //
1023 // ADA and ADC
dd27c420 1024 TString volpath1, volpath2, volpath3, volpath4;
1025 TString symname1, symname2, symname3, symname4;
5e319bd5 1026
dd27c420 1027 symname1 = "AD/ADC1";
1028 symname2 = "AD/ADC2";
1029 symname3 = "AD/ADA1";
1030 symname4 = "AD/ADA2";
1031 switch (fADCPosition) {
1032 case kADCInTunnel:
1033 volpath1 = "/ALIC_1/AD_1/ADC_1";
1034 volpath2 = "/ALIC_1/AD_1/ADC_2";
1035 break;
1036 case kADCInCavern:
1037 volpath1 = "/ALIC_1/AD_1/ADCh_1";
1038 volpath2 = "/ALIC_1/AD_1/ADCh_2";
1039 break;
1040 case kADCInBoth:
1041 volpath1 = "/ALIC_1/AD_1/ADC_1";
1042 volpath2 = "/ALIC_1/AD_1/ADCh_2";
1043 break;
1044 }
1045 volpath3 = "/ALIC_1/AD_1/ADA_1";
1046 volpath4 = "/ALIC_1/AD_1/ADA_2";
5e319bd5 1047
5e319bd5 1048 if ( !gGeoManager->SetAlignableEntry(symname1.Data(), volpath1.Data()) )
1049 AliFatal(Form( "Alignable entry %s not created. Volume path %s not valid", symname1.Data(), volpath1.Data()) );
dd27c420 1050 if ( GetADCTwoInstalled() && !gGeoManager->SetAlignableEntry(symname2.Data(), volpath2.Data()) )
5e319bd5 1051 AliFatal(Form( "Alignable entry %s not created. Volume path %s not valid", symname2.Data(), volpath2.Data()) );
1052 if ( !gGeoManager->SetAlignableEntry(symname3.Data(), volpath3.Data()) )
1053 AliFatal(Form( "Alignable entry %s not created. Volume path %s not valid", symname3.Data(), volpath3.Data()) );
dd27c420 1054 if ( GetADATwoInstalled() && !gGeoManager->SetAlignableEntry(symname4.Data(), volpath4.Data()) )
5e319bd5 1055 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname4.Data(), volpath4.Data()) );
1056
1057}
1058
1059
1060//_____________________________________________________________________________
1061void AliADv1::StepManager()
1062{
1063
1064 //
1065 // Routine called at every step in the AD
1066 //
1067
1068 // ADA and ADC static Variables //
dd27c420 1069 // static Int_t numStep_ad = 0; //
1070 // static Int_t vol_ad[2]; //
5e319bd5 1071
1072 /////////////////////////////////////////////////////////////////////////
dd27c420 1073 // ADA and ADC //
5e319bd5 1074 /////////////////////////////////////////////////////////////////////////
1075
1076
1077 // Get sensitive volumes id (scintillator pads)
dd27c420 1078 static Int_t idADA = gMC->VolId( "ADApad" );
1079 static Int_t idADC = gMC->VolId( "ADCpad" );
1080 // static Int_t idADCh = gMC->VolId( "ADCpadH" );
5e319bd5 1081
dd27c420 1082 static Bool_t fOnlyOnce = kTRUE;
1083 if (fOnlyOnce) {
beca6103 1084 //printf(" gMC->VolId(\"ADApad\" ) = %3d\n", idADA);
1085 //printf(" gMC->VolId(\"ADCpad\" ) = %3d\n", idADC);
dd27c420 1086 // printf(" gMC->VolId(\"ADCpadH\") = %3d\n", idADCh);
1087 fOnlyOnce = kFALSE;
1088 }
1089
5e319bd5 1090 // We keep only charged tracks :
aa8120bb 1091 // if ( !gMC->TrackCharge() || !gMC->IsTrackAlive() ) return;
5e319bd5 1092 // We keep charged and non-charged tracks :
aa8120bb 1093 if ( !gMC->IsTrackAlive() ) return;
5e319bd5 1094
1095 Int_t copy;
aa8120bb 1096 Int_t current_volid = gMC->CurrentVolID( copy );
5e319bd5 1097
1098 // check is the track is in a sensitive volume
dd27c420 1099 // if( current_volid != idADA && current_volid != idADC && current_volid != idADCh ) {
5e319bd5 1100 if( current_volid != idADA && current_volid != idADC ) {
1101 return; // not in the sensitive volume
1102 }
1103
dd27c420 1104 // First read the position, otherwise weird results! //ecv
5e319bd5 1105 Double_t s[3];
1106 Float_t x[3];
aa8120bb 1107 gMC->TrackPosition( s[0], s[1], s[2] );
5e319bd5 1108 for ( Int_t j=0; j<3; j++ ) x[j] = s[j];
1109
5e319bd5 1110 // Get sector copy (1,2,3,4) ( 1 level up from pad )
1111 Int_t sect;
aa8120bb 1112 gMC->CurrentVolOffID( 1, sect );
dd27c420 1113
5e319bd5 1114 // Get Detector copy (1,2) ( 2 levels up from pad )
1115 Int_t detc;
aa8120bb 1116 gMC->CurrentVolOffID( 2, detc );
dd27c420 1117
1118 // Set detector type: ADA or ADC
1119 Int_t ADlayer = (current_volid == idADC ) ? 0 : 2;
1120
beca6103 1121 //printf("CurVolID: %d | sect: %2d | detc: %2d\n", current_volid, sect, detc);
dd27c420 1122
1123 sect--; // sector within layer [0-3]
1124 detc--; // detector copy [0-1]
1125 ADlayer += detc; // global layer number [0-3]
1126
1127 Int_t ADsector = ADlayer*4 + sect; // Global AD sector number [0-15]
1128 // Layer Sector Number
1129 // ADC 0 = 0- 3
1130 // ADC 1 = 4- 7
1131 // ADA 2 = 8-11
1132 // ADA 3 = 12-15
beca6103 1133 //printf("\n ADsector: %2d | ADlayer: %2d | sect: %2d | x: %8.2f | y: %8.2f | z: %8.2f\n", ADsector, ADlayer, sect, x[0], x[1], x[2]); // Debug ECV
5e319bd5 1134
1135 Double_t lightYield_ad;
1136 Double_t photoCathodeEfficiency;
1137
dd27c420 1138 if( ADlayer <2 ) {
5e319bd5 1139 lightYield_ad = fADCLightYield;
1140 photoCathodeEfficiency = fADCPhotoCathodeEfficiency;
1141 } else {
1142 lightYield_ad = fADALightYield;
1143 photoCathodeEfficiency = fADAPhotoCathodeEfficiency;
1144 }
1145
aa8120bb 1146 Float_t destep_ad = gMC->Edep();
1147 Float_t step_ad = gMC->TrackStep();
5e319bd5 1148 Int_t nPhotonsInStep_ad = Int_t( destep_ad / (lightYield_ad * 1e-9) );
1149 nPhotonsInStep_ad = gRandom->Poisson( nPhotonsInStep_ad );
1150
1151 static Float_t eloss_ad = 0.;
1152 static Float_t tlength_ad = 0.;
1153 static Int_t nPhotons_ad = 0;
1154 static Float_t hits_ad[11];
1155 static Int_t vol_ad[5];
1156
1157 eloss_ad += destep_ad;
1158 tlength_ad += step_ad;
1159
aa8120bb 1160 if ( gMC->IsTrackEntering() ) {
5e319bd5 1161 nPhotons_ad = nPhotonsInStep_ad;
1162 Double_t p[4];
aa8120bb 1163 gMC->TrackMomentum( p[0], p[1], p[2], p[3] );
5e319bd5 1164 Float_t pt = TMath::Sqrt( p[0]*p[0] + p[1]*p[1] + p[2]*p[2] );
1165 TParticle *par = gAlice->GetMCApp()->Particle(gAlice->GetMCApp()->GetCurrentTrackNumber());
1166 Int_t imo = par->GetFirstMother();
1167 Int_t pdgMo = 0;
1168 if ( imo > 0 ) {
1169 TParticle * pmot = gAlice->GetMCApp()->Particle(imo);
1170 pdgMo = pmot->GetPdgCode();
1171 }
1172
1173 // Set integer values
1174 vol_ad[0] = par->GetStatusCode(); // secondary flag //ecv
1175 vol_ad[1] = par->GetPdgCode(); // PDG code
1176 vol_ad[2] = pdgMo; // PDG of the mother
1177 // Set float values
1178 hits_ad[0] = x[0]; // X
1179 hits_ad[1] = x[1]; // Y
1180 hits_ad[2] = x[2]; // Z
1181 hits_ad[3] = p[3]; // kinetic energy of the entering particle
1182 hits_ad[4] = pt; // Pt
1183 hits_ad[5] = p[0]; // Px
1184 hits_ad[6] = p[1]; // Py
1185 hits_ad[7] = p[2]; // Pz
aa8120bb 1186 hits_ad[8] = 1.0e09*gMC->TrackTime(); // in ns!
5e319bd5 1187
1188 tlength_ad = 0.0;
1189 eloss_ad = 0.0;
1190
1191 return; // without return, we count 2 times nPhotonsInStep_ad !!!???
1192 }
1193
1194 nPhotons_ad += nPhotonsInStep_ad;
1195
aa8120bb 1196 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared() ) {
5e319bd5 1197
1198 // Set integer values
1199 vol_ad[3] = nPhotons_ad;
dd27c420 1200 vol_ad[4] = ADsector; // sector number (scintillator ID)
5e319bd5 1201 // Set float values
1202 hits_ad[9] = tlength_ad; // track lenght inside ADC or ADA
1203 hits_ad[10] = eloss_ad; // energy loss
1204 Int_t track = gAlice->GetMCApp()->GetCurrentTrackNumber();
1205 AddHit( track, vol_ad, hits_ad ); // <-- this is in AliAD.cxx
1206 tlength_ad = 0.0;
1207 eloss_ad = 0.0;
1208 nPhotons_ad = 0;
1209 }
1210
1211 // Do we need track reference ????
aa8120bb 1212 // if( gMC->IsTrackEntering() || gMC->IsTrackExiting() ) {
5e319bd5 1213 // AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), 49);
1214 // }
1215}
1216//_________________________________________________________
1217void AliADv1::AddHit(Int_t track, Int_t *vol, Float_t *hits)
1218{
1219 TClonesArray &lhits = *fHits;
1220 new(lhits[fNhits++]) AliADhit(fIshunt,track,vol,hits);
1221}
1222//_________________________________________________________
dd27c420 1223// void AliADv1::AddDigits(Int_t* track, Int_t module, Float_t time)
1224// {
1225// TClonesArray &ldigits = *fDigits;
1226// new(ldigits[fNdigits++]) AliADdigit(track,module,time);
1227// }
1228//_________________________________________________________
5e319bd5 1229void AliADv1::MakeBranch(Option_t *option)
1230{
1231
1232 // Create branches in the current tree
1233 TString branchname(Form("%s",GetName()));
1234 AliDebug(2,Form("fBufferSize = %d",fBufferSize));
1235 const char *cH = strstr(option,"H");
1236 if (fHits && fLoader->TreeH() && cH)
1237 {
1238 fLoader->TreeH()->Branch(branchname.Data(),&fHits,fBufferSize);
1239 AliDebug(2,Form("Making Branch %s for hits",branchname.Data()));
1240 }
1241 const char *cD = strstr(option,"D");
1242 if (fDigits && fLoader->TreeD() && cD)
1243 {
1244 fLoader->TreeD()->Branch(branchname.Data(),&fDigits, fBufferSize);
1245 AliDebug(2,Form("Making Branch %s for digits",branchname.Data()));
1246 }
1247}