]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - VZERO/AliVZEROv7.cxx
Copy constructor and assignment operator
[u/mrichter/AliRoot.git] / VZERO / AliVZEROv7.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// (V-zero) detector version 7 as designed by the Lyon and //
21// Mexico groups and Carlos Perez Lara from Pontificia Universidad //
22// Catolica del Peru //
23// All comments should be sent to Brigitte CHEYNIS: //
24// b.cheynis@ipnl.in2p3.fr //
25// Geometry of April 2006 done with ROOT geometrical modeler //
26// V0R (now V0C) sits between Z values -89.5 and -84.8 cm //
27// V0L (now V0A) sits between Z values +325.0 and +330.0 cm //
28// New coordinate system has been implemented in october 2003 //
29// Revision of the V0A part by Lizardo Valencia in July 2008 //
30// //
31///////////////////////////////////////////////////////////////////////
32
33// --- Standard libraries ---
34#include <Riostream.h>
35
36// --- ROOT libraries ---
37#include <TClonesArray.h>
38#include <TGeoGlobalMagField.h>
39#include <TMath.h>
40#include <TParticle.h>
41#include <TVirtualMC.h>
42
43#include <TGeoManager.h>
44#include <TGeoMatrix.h>
45#include <TGeoMaterial.h>
46#include <TGeoMedium.h>
47#include <TGeoVolume.h>
48#include "TGeoTube.h"
49#include "TGeoArb8.h"
50#include "TGeoCompositeShape.h"
51
52// --- AliRoot header files ---
53#include "AliRun.h"
54#include "AliMC.h"
55#include "AliMagF.h"
56#include "AliVZEROLoader.h"
57#include "AliVZEROdigit.h"
58#include "AliVZEROhit.h"
59#include "AliVZEROv7.h"
60#include "AliLog.h"
61#include "AliTrackReference.h"
62
63ClassImp(AliVZEROv7)
64
65//_____________________________________________________________________________
66AliVZEROv7:: AliVZEROv7():AliVZERO(),
67 fCellId(0),
68 fTrackPosition(),
69 fTrackMomentum(),
70 fV0CHeight1(2.5),
71 fV0CHeight2(4.4),
72 fV0CHeight3(7.4),
73 fV0CHeight4(12.5),
74 fV0CRMin(4.6),
75 fV0CRBox(38.0),
76 fV0CLidThickness(0.30),
77 fV0CCellThickness(2.00),
78 fV0CBoxThickness(4.70),
79 fV0COffsetFibers(1.0),
80 fV0CLightYield(93.75),
81 fV0CLightAttenuation(0.05),
82 fV0CnMeters(15.0),
83 fV0CFibToPhot(0.3),
84 fV0AR0(4.2),
85 fV0AR1(7.6),
86 fV0AR2(13.8),
87 fV0AR3(22.7),
88 fV0AR4(41.3),
89 fV0AR5(43.3),
90 fV0AR6(72.6),
91 fV0AR7(92.0), // Distance from origin to outtermost intersection sector7 and sector8
92 fV0ASciWd(2.5),
93 fV0APlaWd(0.5),
94 fV0APlaAl(0.06),
95 fV0AOctWd(0.75),
96 fV0AFraWd(0.2),
97 fV0AOctH1(1.0),
98 fV0AOctH2(2.0),
99 fV0ABasHt(2.0),
100 fV0AFibRd(0.1),
101 fV0APlaEx(4.4),
102 fV0APMBWd(24.6),
103 fV0APMBHt(22.0),
104 fV0APMBTh(7.1),
105 fV0APMBWdW(0.3),
106 fV0APMBHtW(1.0),
107 fV0APMBAng(30.0),
108 fV0APMBThW(0.3),
109 fV0APMTR1(2.44),
110 fV0APMTR2(2.54),
111 fV0APMTR3(2.54),
112 fV0APMTR4(2.70),
113 fV0APMTH(10.0),
114 fV0APMTB(1.0),
115 fV0AnMeters(fV0AR6*0.01),
116 fV0ALightYield(93.75),
117 fV0ALightAttenuation(0.05),
118 fV0AFibToPhot(0.3),
119 fVersion(7)
120{
121// Standard default constructor
122}
123
124//_____________________________________________________________________________
125AliVZEROv7::AliVZEROv7(const char *name, const char *title):AliVZERO(name,title),
126 fCellId(0),
127 fTrackPosition(),
128 fTrackMomentum(),
129 fV0CHeight1(2.5),
130 fV0CHeight2(4.4),
131 fV0CHeight3(7.4),
132 fV0CHeight4(12.5),
133 fV0CRMin(4.6),
134 fV0CRBox(38.0),
135 fV0CLidThickness(0.30),
136 fV0CCellThickness(2.00),
137 fV0CBoxThickness(4.70),
138 fV0COffsetFibers(1.0),
139 fV0CLightYield(93.75),
140 fV0CLightAttenuation(0.05),
141 fV0CnMeters(15.0),
142 fV0CFibToPhot(0.3),
143 fV0AR0(4.2),
144 fV0AR1(7.6),
145 fV0AR2(13.8),
146 fV0AR3(22.7),
147 fV0AR4(41.3),
148 fV0AR5(43.3),
149 fV0AR6(72.6),
150 fV0AR7(92.0), // Distance from origin to outtermost intersection of sector7 and sector8
151 fV0ASciWd(2.5),
152 fV0APlaWd(0.5),
153 fV0APlaAl(0.06),
154 fV0AOctWd(0.75),
155 fV0AFraWd(0.2),
156 fV0AOctH1(1.0),
157 fV0AOctH2(2.0),
158 fV0ABasHt(2.0),
159 fV0AFibRd(0.1),
160 fV0APlaEx(4.4),
161 fV0APMBWd(24.6),
162 fV0APMBHt(22.0),
163 fV0APMBTh(7.1),
164 fV0APMBWdW(0.3),
165 fV0APMBHtW(1.0),
166 fV0APMBAng(30.0),
167 fV0APMBThW(0.3),
168 fV0APMTR1(2.44),
169 fV0APMTR2(2.54),
170 fV0APMTR3(2.54),
171 fV0APMTR4(2.70),
172 fV0APMTH(10.0),
173 fV0APMTB(1.0),
174 fV0AnMeters(fV0AR6*0.01),
175 fV0ALightYield(93.75),
176 fV0ALightAttenuation(0.05),
177 fV0AFibToPhot(0.3),
178 fVersion(7)
179
180
181{
182// Standard constructor for V-zero Detector version 7
183
184 AliDebug(2,"Create VZERO object ");
185
186// fVersion = 7; // version number
187
188// // V0C Parameters related to geometry: All in cm
189// fV0CHeight1 = 2.5; // height of cell 1
190// fV0CHeight2 = 4.4; // height of cell 2
191// fV0CHeight3 = 7.4; // height of cell 3
192// fV0CHeight4 = 12.5; // height of cell 4
193// fV0CRMin = 4.6; // inner radius of box
194// fV0CRBox = 38.0; // outer radius of box
195// fV0CLidThickness = 0.30; // thickness of Carbon lid
196// fV0CCellThickness = 2.00; // thickness of elementary cell
197// fV0CBoxThickness = 4.70; // thickness of V0C Box
198// fV0COffsetFibers = 1.0; // offset to output fibers
199// // V0C Parameters related to light output
200// fV0CLightYield = 93.75; // Light yield in BC408 (93.75 eV per photon)
201// fV0CLightAttenuation = 0.05; // Light attenuation in fiber (0.05 per meter)
202// fV0CnMeters = 15.0; // Number of meters of clear fibers to PM
203// fV0CFibToPhot = 0.3; // Attenuation at fiber-photocathode interface
204//
205// // V0A Parameters related to geometry: All in cm
206// fV0AR0 = 4.2; // Radius of hole
207// fV0AR1 = 7.6; // Maximun radius of 1st cell
208// fV0AR2 = 13.8; // Maximun radius of 2nd cell
209// fV0AR3 = 22.7; // Maximun radius of 3rd cell
210// fV0AR4 = 41.3; // Maximun radius of 4th cell
211// fV0AR5 = 43.3; // Radius circunscrite to innermost octagon
212// fV0AR6 = 68.0; // Radius circunscrite to outtermost octagon
213// fV0ASciWd = 2.5; // Scintillator thickness
214// fV0APlaWd = 0.5; // Plates thinckness
215// fV0APlaAl = 0.06; // Plates AlMg3 thinckness
216// fV0AOctWd = 0.75; // Innermost octagon thickness
217// fV0AOctH1 = 1.0; // Height of innermost octagon
218// fV0AOctH2 = 2.0; // Height of outtermost octagon
219// fV0AFibRd = 0.1; // Radius of Fiber
220// fV0AFraWd = 0.2; // Support Frame thickness
221// fV0APMBWd = 24.6; // Width of PM Box
222// fV0APMBHt = 22.0; // Height of PM Box
223// fV0APMBTh = 7.1; // Thickness of PM Box
224// fV0APMBWdW = 0.3; // Thickness of PM Box Side1 Wall
225// fV0APMBHtW = 1.0; // Thickness of PM Box Side2 Wall
226// fV0APMBThW = 0.3; // Thickness of PM Box Top Wall
227// fV0APMBAng = 30.0; // Angle between PM Box and Support
228// fV0APMTR1 = 2.44; // PMT Glass
229// fV0APMTR2 = 2.54; // PMT Glass
230// fV0APMTR3 = 2.54; // PMT Cover
231// fV0APMTR4 = 2.70; // PMT Cover
232// fV0APMTH = 10.0; // PMT Height
233// fV0APMTB = 1.0; // PMT Basis
234// fV0APlaEx = 4.4; // Plates Extension height
235// fV0ABasHt = 2.0; // Basis Height
236// // V0A Parameters related to light output
237// fV0ALightYield = 93.75; // Light yield in BC404
238// fV0ALightAttenuation = 0.05; // Light attenuation in WLS fiber, per meter
239// fV0AnMeters = fV0AR6*0.01; // Tentative value, in meters
240// fV0AFibToPhot = 0.3; // Attenuation at fiber-photocathode interface
241}
242
243//_____________________________________________________________________________
244void AliVZEROv7::CreateGeometry()
245{
246// Constructs TGeo geometry
247
248 AliDebug(2,"VZERO ConstructGeometry");
249 TGeoVolume *top = gGeoManager->GetVolume("ALIC");
250
251 ///////////////////////////////////////////////////////////////////////////
252 // Construct the geometry of V0C Detector. Brigitte CHEYNIS
253
254 const int kColorVZERO = kGreen;
255 TGeoMedium *medV0CAlu = gGeoManager->GetMedium("VZERO_V0CAlu");
256 TGeoMedium *medV0CCar = gGeoManager->GetMedium("VZERO_V0CCar");
257 TGeoMedium *medV0CSci = gGeoManager->GetMedium("VZERO_V0CSci");
258 TGeoVolume *v0RI = new TGeoVolumeAssembly("V0RI");
259 Float_t heightRight, r4Right;
260 Float_t zdet = 90.0 - 0.5 - fV0CBoxThickness/2.0;
261 heightRight = fV0CHeight1 + fV0CHeight2 + fV0CHeight3 + fV0CHeight4;
262 r4Right = fV0CRMin + heightRight + 3.0*0.2; // 3 spacings of 2mm between rings
263
264 // Creation of carbon lids (3.0 mm thick) to keep V0C box shut :
265 Float_t partube[3];
266 partube[0] = fV0CRMin;
267 partube[1] = fV0CRBox;
268 partube[2] = fV0CLidThickness/2.0;
269 TGeoTube *sV0CA = new TGeoTube("V0CA", partube[0], partube[1], partube[2]);
270 TGeoVolume *v0CA = new TGeoVolume("V0CA",sV0CA,medV0CCar);
271 TGeoTranslation *tr2 = new TGeoTranslation(0.,0., fV0CBoxThickness/2.0-partube[2]);
272 TGeoTranslation *tr3 = new TGeoTranslation(0.,0.,-fV0CBoxThickness/2.0+partube[2]);
273 v0RI->AddNode(v0CA,1,tr2);
274 v0RI->AddNode(v0CA,2,tr3);
275 v0CA->SetLineColor(kYellow);
276
277 // Creation of aluminum rings 3.0 mm thick to maintain the v0RI pieces :
278 partube[0] = fV0CRMin - 0.3;
279 partube[1] = fV0CRMin;
280 partube[2] = fV0CBoxThickness/2.0;
281 TGeoTube *sV0IR = new TGeoTube("V0IR", partube[0], partube[1], partube[2]);
282 TGeoVolume *v0IR = new TGeoVolume("V0IR",sV0IR,medV0CAlu);
283 v0RI->AddNode(v0IR,1,0);
284 v0IR->SetLineColor(kYellow);
285 partube[0] = fV0CRBox;
286 partube[1] = fV0CRBox + 0.3;
287 partube[2] = fV0CBoxThickness/2.0;
288 TGeoTube *sV0ER = new TGeoTube("V0ER", partube[0], partube[1], partube[2]);
289 TGeoVolume *v0ER = new TGeoVolume("V0ER",sV0ER,medV0CAlu);
290 v0RI->AddNode(v0ER,1,0);
291 v0ER->SetLineColor(kYellow);
292
293 // Creation of assembly V0R0 of scintillator cells within one sector
294 TGeoVolume *v0R0 = new TGeoVolumeAssembly("V0R0");
295
296 // Elementary cell of ring 1 - right part - :
297 // (cells of ring 1 will be shifted by 2.0 cm backwards to output fibers)
298 Float_t r1Right = fV0CRMin + fV0CHeight1;
299 Float_t offset = fV0CBoxThickness/2.0 - fV0CLidThickness - fV0CCellThickness/2.0;
300 Float_t partubs[5];
301 partubs[0] = fV0CRMin;
302 partubs[1] = r1Right;
303 partubs[2] = fV0CCellThickness/2.0;
304 partubs[3] = 90.0-22.5;
305 partubs[4] = 135.0-22.5;
306 TGeoTubeSeg *sV0R1 = new TGeoTubeSeg("V0R1", partubs[0], partubs[1], partubs[2],
307 partubs[3], partubs[4]);
308 TGeoVolume *v0R1 = new TGeoVolume("V0R1",sV0R1,medV0CSci);
309 TGeoTranslation *tr4 = new TGeoTranslation(0.,0.,-offset);
310 v0R0->AddNode(v0R1,1,tr4);
311 v0R1->SetLineColor(kColorVZERO);
312
313 // Elementary cell of ring 2 - right part - :
314 // (cells of ring 2 will be shifted by 1.0 cm backwards to output fibers)
315 Float_t r2Right = r1Right + fV0CHeight2;
316 partubs[0] = r1Right; // must be equal to 7.1
317 partubs[1] = r2Right; // must be equal to 11.5
318 TGeoTubeSeg *sV0R2 = new TGeoTubeSeg("V0R2", partubs[0], partubs[1], partubs[2],
319 partubs[3], partubs[4]);
320 TGeoVolume *v0R2 = new TGeoVolume("V0R2",sV0R2,medV0CSci);
321 TGeoTranslation *tr5 = new TGeoTranslation(0.0,0.2,-offset + fV0COffsetFibers);
322 v0R0->AddNode(v0R2,1,tr5);
323 v0R2->SetLineColor(kColorVZERO);
324
325 // Ring 3 - right part - :
326 r2Right = r2Right + 0.2;
327 Float_t r3Right = r2Right + fV0CHeight3;
328 partubs[0] = r2Right; // must be equal to 11.7
329 partubs[1] = r3Right; // must be equal to 19.1
330 partubs[3] = 90.0-22.5;
331 partubs[4] = 112.5-22.5;
332 TGeoTubeSeg *sV0R3 = new TGeoTubeSeg("V0R3", partubs[0], partubs[1], partubs[2],
333 partubs[3], partubs[4]);
334 TGeoVolume *v0R3 = new TGeoVolume("V0R3",sV0R3,medV0CSci);
335 TGeoTranslation *tr6 = new TGeoTranslation(0.,0.2,-offset + 2.0*fV0COffsetFibers);
336 v0R0->AddNode(v0R3,1,tr6);
337 v0R3->SetLineColor(kColorVZERO);
338 partubs[3] = 112.5-22.5;
339 partubs[4] = 135.0-22.5;
340 TGeoTubeSeg *sV0R4 = new TGeoTubeSeg("V0R4", partubs[0], partubs[1], partubs[2],
341 partubs[3], partubs[4]);
342 TGeoVolume *v0R4 = new TGeoVolume("V0R4",sV0R4,medV0CSci);
343 v0R0->AddNode(v0R4,1,tr6);
344 v0R4->SetLineColor(kColorVZERO);
345
346 // Ring 4 - right part - :
347 Float_t x = TMath::ATan(3.5/257.5) * ((180./TMath::Pi()));
348 r3Right = r3Right + 0.2 + 0.2; // + 0.2 because no shift in translation here !!
349 partubs[0] = r3Right; // must be equal to 19.5
350 partubs[1] = r4Right; // must be equal to 32.0
351 partubs[3] = 90.0-22.5+x;
352 partubs[4] = 112.5-22.5-x;
353 TGeoTubeSeg *sV0R5 = new TGeoTubeSeg("V0R5", partubs[0], partubs[1], partubs[2],
354 partubs[3], partubs[4]);
355 TGeoVolume *v0R5 = new TGeoVolume("V0R5",sV0R5,medV0CSci);
356 TGeoTranslation *tr7 = new TGeoTranslation(0.,0.0,-offset + 2.0*fV0COffsetFibers);
357 v0R0->AddNode(v0R5,1,tr7);
358 v0R5->SetLineColor(kColorVZERO);
359 partubs[3] = 112.5-22.5+x;
360 partubs[4] = 135.0-22.5-x;
361 TGeoTubeSeg *sV0R6 = new TGeoTubeSeg("V0R6", partubs[0], partubs[1], partubs[2],
362 partubs[3], partubs[4]);
363 TGeoVolume *v0R6 = new TGeoVolume("V0R6",sV0R6,medV0CSci);
364 v0R0->AddNode(v0R6,1,tr7);
365 v0R6->SetLineColor(kColorVZERO);
366 Float_t phi;
367 Float_t phiDeg= 180./4.;
368 Int_t nsecR = 1; // number of sectors in right part of V0
369 for (phi = 22.5; phi < 360.0; phi = phi + phiDeg) {
370 TGeoRotation *rot1 = new TGeoRotation("rot1", 90.0, +phi, 90., 90.+phi, 0.0, 0.0 );
371 v0RI->AddNode(v0R0,nsecR,rot1);
372 nsecR++;
373 }
374
375 ///////////////////////////////////////////////////////////////////////////
376 // Construct the geometry of V0A Detector. Carlos PEREZ, PUCP
377 // Revision by Lizardo VALENCIA, UNAM Mexico in July 2008
378
379 const int kV0AColorSci = 5;
380 const int kV0AColorPlaIn = 3;
381 const int kV0AColorPlaOu = 41;
382 const int kV0AColorOct = 7;
383 const int kV0AColorFra = 6;
384 const int kV0AColorFib = 11;
385 const int kV0AColorPMG = 1;
386 const int kV0AColorPMA = 2;
387 TGeoMedium *medV0ASci = gGeoManager->GetMedium("VZERO_V0ASci");
388 TGeoMedium *medV0APlaIn = gGeoManager->GetMedium("VZERO_V0APlaIn");
389 TGeoMedium *medV0APlaOu = gGeoManager->GetMedium("VZERO_V0APlaOu");
390 TGeoMedium *medV0ASup = gGeoManager->GetMedium("VZERO_V0ALuc");
391 TGeoMedium *medV0AFra = gGeoManager->GetMedium("VZERO_V0ALuc");
392 TGeoMedium *medV0AFib = gGeoManager->GetMedium("VZERO_V0AFib");
393 TGeoMedium *medV0APMGlass = gGeoManager->GetMedium("VZERO_V0APMG");
394 TGeoMedium *medV0APMAlum = gGeoManager->GetMedium("VZERO_V0APMA");
395 double pi = TMath::Pi();
396 double sin225 = TMath::Sin(pi/8.);
397 double cos225 = TMath::Cos(pi/8.);
398 double sin45 = TMath::Sin(pi/4.); // lucky: Sin45=Cos45
399 double cos45 = TMath::Cos(pi/4.);
400 double v0APts[16];
401 double sin654 = TMath::Sin(1.14);
402 double cos654 = TMath::Cos(1.14);
403
404 ////////////////////////////
405 /// Definition sector 1
406 TGeoVolume *v0ASec = new TGeoVolumeAssembly("V0ASec");
407
408 /// For boolean sustraction
409 double preShape = 0.2;
410 for (int i=0;i<2;i++) {
411 v0APts[0+8*i] = fV0AR0-fV0AFraWd/2.-preShape; v0APts[1+8*i] = -preShape;
412 v0APts[2+8*i] = fV0AR0-fV0AFraWd/2.-preShape; v0APts[3+8*i] = fV0AFraWd/2.;
413 v0APts[4+8*i] = fV0AR4+fV0AFraWd/2.+preShape; v0APts[5+8*i] = fV0AFraWd/2.;
414 v0APts[6+8*i] = fV0AR4+fV0AFraWd/2.+preShape; v0APts[7+8*i] = -preShape;
415 }
416 new TGeoArb8("sV0ACha1",fV0ASciWd/1.5,v0APts);
417 for (int i=0;i<2;i++) {
418 v0APts[0+8*i] = fV0AR0*sin45-preShape;
419 v0APts[1+8*i] = (fV0AR0-fV0AFraWd)*sin45-preShape;
420 v0APts[2+8*i] = (fV0AR0-fV0AFraWd/2.)*sin45-preShape;
421 v0APts[3+8*i] = (fV0AR0-fV0AFraWd/2.)*sin45;
422 v0APts[4+8*i] = (fV0AR4+fV0AFraWd/2.)*sin45+preShape;
423 v0APts[5+8*i] = (fV0AR4+fV0AFraWd/2.)*sin45+2.*preShape;
424 v0APts[6+8*i] = (fV0AR4+fV0AFraWd)*sin45+preShape;
425 v0APts[7+8*i] = fV0AR4*sin45+preShape;
426 }
427 new TGeoArb8("sV0ACha2", fV0ASciWd/2.+2.*preShape, v0APts);
428 new TGeoCompositeShape("sV0ACha12","sV0ACha1+sV0ACha2");
429 new TGeoTube("sV0ANail1SciHole", 0.0, 0.4, 1.65);
430 TGeoTranslation *pos1 = new TGeoTranslation("pos1", 42.9, 0.51, 0.0);
431 pos1->RegisterYourself();
432 new TGeoTube("sV0ANail2SciHole", 0.0, 0.4, 1.65);
433 TGeoTranslation *pos2 = new TGeoTranslation("pos2", 30.73,29.98,0.0);
434 pos2->RegisterYourself();
435 new TGeoCompositeShape("sV0ANailsSciHoles","sV0ANail1SciHole:pos1+sV0ANail2SciHole:pos2");
436 new TGeoCompositeShape("sV0ACha","sV0ACha12+sV0ANailsSciHoles");
437 new TGeoTubeSeg("sV0AFicR5", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 0, 45);
438
439 /// Frame
440 TGeoVolume *v0AFra = new TGeoVolumeAssembly("V0AFra");
441 for (int i=0;i<2;i++) {
442 v0APts[0+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[1+8*i] = 0.;
443 v0APts[2+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[3+8*i] = fV0AFraWd/2.;
444 v0APts[4+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[5+8*i] = fV0AFraWd/2.;
445 v0APts[6+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[7+8*i] = 0.;
446 }
447 TGeoArb8 *sV0AFraB1 = new TGeoArb8("sV0AFraB1",fV0ASciWd/2.,v0APts);
448 TGeoVolume *v0AFraB1 = new TGeoVolume("V0AFraB1",sV0AFraB1,medV0AFra);
449 for (int i=0;i<2;i++) {
450 v0APts[0+8*i] = fV0AR0*sin45;
451 v0APts[1+8*i] = (fV0AR0-fV0AFraWd)*sin45;
452 v0APts[2+8*i] = (fV0AR0-fV0AFraWd/2.)*sin45;
453 v0APts[3+8*i] = (fV0AR0-fV0AFraWd/2.)*sin45;
454 v0APts[4+8*i] = (fV0AR4+fV0AFraWd/2.)*sin45;
455 v0APts[5+8*i] = (fV0AR4+fV0AFraWd/2.)*sin45;
456 v0APts[6+8*i] = (fV0AR4+fV0AFraWd)*sin45;
457 v0APts[7+8*i] = fV0AR4*sin45;
458 }
459 TGeoArb8 *sV0AFraB2 = new TGeoArb8("sV0AFraB2", fV0ASciWd/2., v0APts);
460 TGeoVolume *v0AFraB2 = new TGeoVolume("V0AFraB2",sV0AFraB2,medV0AFra);
461 v0AFraB1->SetLineColor(kV0AColorFra); v0AFraB2->SetLineColor(kV0AColorFra);
462 v0AFra->AddNode(v0AFraB1,1);
463 v0AFra->AddNode(v0AFraB2,1);
464 new TGeoTubeSeg( "sV0AFraR1b", fV0AR0-fV0AFraWd/2.,
465 fV0AR0+fV0AFraWd/2., fV0ASciWd/2., 0, 45);
466 new TGeoTubeSeg( "sV0AFraR2b", fV0AR1-fV0AFraWd/2.,
467 fV0AR1+fV0AFraWd/2., fV0ASciWd/2., 0, 45);
468 new TGeoTubeSeg( "sV0AFraR3b", fV0AR2-fV0AFraWd/2.,
469 fV0AR2+fV0AFraWd/2., fV0ASciWd/2., 0, 45);
470 new TGeoTubeSeg( "sV0AFraR4b", fV0AR3-fV0AFraWd/2.,
471 fV0AR3+fV0AFraWd/2., fV0ASciWd/2., 0, 45);
472 new TGeoTubeSeg( "sV0AFraR5b", fV0AR4-fV0AFraWd/2.,
473 fV0AR4+fV0AFraWd/2., fV0ASciWd/2., 0, 45);
474 TGeoCompositeShape *sV0AFraR1 = new TGeoCompositeShape("sV0AFraR1","sV0AFraR1b-sV0ACha");
475 TGeoCompositeShape *sV0AFraR2 = new TGeoCompositeShape("sV0AFraR2","sV0AFraR2b-sV0ACha");
476 TGeoCompositeShape *sV0AFraR3 = new TGeoCompositeShape("sV0AFraR3","sV0AFraR3b-sV0ACha");
477 TGeoCompositeShape *sV0AFraR4 = new TGeoCompositeShape("sV0AFraR4","sV0AFraR4b-sV0ACha");
478 TGeoCompositeShape *sV0AFraR5 = new TGeoCompositeShape("sV0AFraR5","sV0AFraR5b-sV0ACha");
479 TGeoVolume *v0AFraR1 = new TGeoVolume("V0AFraR1",sV0AFraR1,medV0AFra);
480 TGeoVolume *v0AFraR2 = new TGeoVolume("V0AFraR2",sV0AFraR2,medV0AFra);
481 TGeoVolume *v0AFraR3 = new TGeoVolume("V0AFraR3",sV0AFraR3,medV0AFra);
482 TGeoVolume *v0AFraR4 = new TGeoVolume("V0AFraR4",sV0AFraR4,medV0AFra);
483 TGeoVolume *v0AFraR5 = new TGeoVolume("V0AFraR5",sV0AFraR5,medV0AFra);
484 v0AFraR1->SetLineColor(kV0AColorFra); v0AFraR2->SetLineColor(kV0AColorFra);
485 v0AFraR3->SetLineColor(kV0AColorFra); v0AFraR4->SetLineColor(kV0AColorFra);
486 v0AFraR5->SetLineColor(kV0AColorFra);
487 v0AFra->AddNode(v0AFraR1,1);
488 v0AFra->AddNode(v0AFraR2,1);
489 v0AFra->AddNode(v0AFraR3,1);
490 v0AFra->AddNode(v0AFraR4,1);
491 v0AFra->AddNode(v0AFraR5,1);
492 v0ASec->AddNode(v0AFra,1);
493
494 /// Sensitive scintilator
495 TGeoVolume *v0ASci = new TGeoVolumeAssembly("V0ASci");
496 new TGeoTubeSeg( "sV0AR1b", fV0AR0+fV0AFraWd/2.,
497 fV0AR1-fV0AFraWd/2., fV0ASciWd/2., 0, 45);
498 new TGeoTubeSeg( "sV0AR2b", fV0AR1+fV0AFraWd/2.,
499 fV0AR2-fV0AFraWd/2., fV0ASciWd/2., 0, 45);
500 new TGeoTubeSeg( "sV0AR3b", fV0AR2+fV0AFraWd/2.,
501 fV0AR3-fV0AFraWd/2., fV0ASciWd/2., 0, 45);
502 new TGeoTubeSeg( "sV0AR4b", fV0AR3+fV0AFraWd/2.,
503 fV0AR4-fV0AFraWd/2., fV0ASciWd/2., 0, 45);
504 TGeoCompositeShape *sV0AR1 = new TGeoCompositeShape("sV0AR1","sV0AR1b-sV0ACha");
505 TGeoCompositeShape *sV0AR2 = new TGeoCompositeShape("sV0AR2","sV0AR2b-sV0ACha");
506 TGeoCompositeShape *sV0AR3 = new TGeoCompositeShape("sV0AR3","sV0AR3b-sV0ACha");
507 TGeoCompositeShape *sV0AR4 = new TGeoCompositeShape("sV0AR4","sV0AR4b-sV0ACha");
508 TGeoVolume *v0L1 = new TGeoVolume("V0L1",sV0AR1,medV0ASci);
509 TGeoVolume *v0L2 = new TGeoVolume("V0L2",sV0AR2,medV0ASci);
510 TGeoVolume *v0L3 = new TGeoVolume("V0L3",sV0AR3,medV0ASci);
511 TGeoVolume *v0L4 = new TGeoVolume("V0L4",sV0AR4,medV0ASci);
512 v0L1->SetLineColor(kV0AColorSci); v0L2->SetLineColor(kV0AColorSci);
513 v0L3->SetLineColor(kV0AColorSci); v0L4->SetLineColor(kV0AColorSci);
514 v0ASec->AddNode(v0L1,1);
515 v0ASec->AddNode(v0L2,1);
516 v0ASec->AddNode(v0L3,1);
517 v0ASec->AddNode(v0L4,1);
518
519 /// Segment of octagon
520 for (int i=0;i<2;i++) {
521 v0APts[0+8*i] = fV0AR6-fV0AOctH2; v0APts[1+8*i] = 0.;
522 v0APts[2+8*i] = (fV0AR6-fV0AOctH2)*sin45; v0APts[3+8*i] = (fV0AR6-fV0AOctH2)*sin45;
523 v0APts[4+8*i] = fV0AR6*sin45; v0APts[5+8*i] = fV0AR6*sin45;
524 v0APts[6+8*i] = fV0AR6; v0APts[7+8*i] = 0.;
525 }
526 TGeoArb8 *sV0AOct2 = new TGeoArb8("sV0AOct2", (fV0ASciWd+2*fV0AOctWd)/2., v0APts);
527 TGeoVolume *v0AOct2 = new TGeoVolume("V0AOct2", sV0AOct2,medV0ASup);
528 v0AOct2->SetLineColor(kV0AColorOct);
529 TGeoVolume *v0ASup = new TGeoVolumeAssembly("V0ASup");
530 v0ASup->AddNode(v0AOct2,1);
531 v0ASec->AddNode(v0ASup,1);
532
533 //Bunch of fibers
534 v0APts[ 0] = v0APts[ 2] = -13.0;
535 v0APts[ 1] = v0APts[ 7] = (fV0ASciWd+fV0AOctWd)/2.-0.01;
536 v0APts[ 3] = v0APts[ 5] = (fV0ASciWd+fV0AOctWd)/2.+0.01;
537 v0APts[ 4] = v0APts[ 6] = +13.0;
538 v0APts[ 8] = v0APts[10] = -10.0;
539 v0APts[ 9] = v0APts[15] = 0.;
540 v0APts[11] = v0APts[13] = 0.25;
541 v0APts[12] = v0APts[14] = +10.0;
542 new TGeoArb8("sV0AFib1", 11.5, v0APts);
543 TGeoRotation *rot = new TGeoRotation("rot");
544 rot->RotateX(-90);
545 rot->RotateZ(-90.+22.5);
546 TGeoCombiTrans *fibpos1 = new TGeoCombiTrans("fibpos1", (fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. - 3.8, (fV0AR6-fV0AOctH2+fV0AR5)*sin225/2.-1.8, 0, rot);
547 fibpos1->RegisterYourself();
548 TGeoCompositeShape *sV0AFib1Hole = new TGeoCompositeShape("sV0AFib1Hole","sV0AFib1:fibpos1-sV0AFicR5");
549 TGeoVolume *v0AFib1Hole = new TGeoVolume("V0AFib1Hole",sV0AFib1Hole,medV0AFib);
550 v0AFib1Hole->SetLineColor(kV0AColorFib);
551 new TGeoArb8("sV0AFib2", 11.5, v0APts);
552 rot = new TGeoRotation("rot");
553 rot->RotateX(-90);
554 rot->RotateY(180);
555 rot->RotateZ(-90.+22.5);
556 TGeoCombiTrans *fibpos2 = new TGeoCombiTrans("fibpos2", (fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. - 3.8, (fV0AR6-fV0AOctH2+fV0AR5)*sin225/2.-1.8, 0, rot);
557 fibpos2->RegisterYourself();
558 TGeoCompositeShape *sV0AFib2Hole = new TGeoCompositeShape("sV0AFib2Hole","sV0AFib2:fibpos2-sV0AFicR5");
559 TGeoVolume *v0AFib2Hole = new TGeoVolume("V0AFib2Hole",sV0AFib2Hole,medV0AFib);
560 v0AFib2Hole->SetLineColor(kV0AColorFib);
561 TGeoVolume *v0AFib = new TGeoVolumeAssembly("V0AFib");
562 v0AFib->AddNode(v0AFib1Hole,1);
563 v0AFib->AddNode(v0AFib2Hole,1);
564 v0ASec->AddNode(v0AFib,1);
565
566 /// Plates
567 new TGeoTube("sV0ANail1PlaInHole", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
568 new TGeoTube("sV0ANail2PlaInHole", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
569 new TGeoCompositeShape("sV0ANailsPlaInHoles","sV0ANail1PlaInHole:pos1+sV0ANail2PlaInHole:pos2");
570 new TGeoTube("sV0ANail1PlaOuHole", 0.0, 0.4, (fV0APlaAl)/2.);
571 new TGeoTube("sV0ANail2PlaOuHole", 0.0, 0.4, (fV0APlaAl)/2.);
572 new TGeoCompositeShape("sV0ANailsPlaOuHoles","sV0ANail1PlaOuHole:pos1+sV0ANail2PlaOuHole:pos2");
573 for (int i=0;i<2;i++) {
574 v0APts[0+8*i] = fV0AR0; v0APts[1+8*i] = 0.;
575 v0APts[2+8*i] = fV0AR0*sin45; v0APts[3+8*i] = fV0AR0*sin45;
576 v0APts[4+8*i] = fV0AR6 * sin45; v0APts[5+8*i] = fV0AR6*sin45;
577 v0APts[6+8*i] = fV0AR6; v0APts[7+8*i] = 0.;
578 }
579 new TGeoArb8("sV0APlaIn", (fV0APlaWd-2*fV0APlaAl)/2., v0APts);
580 TGeoCompositeShape *sV0APlaInNailsHoles = new TGeoCompositeShape("sV0APlaInNailsHoles","sV0APlaIn-sV0ANailsPlaInHoles");
581 TGeoVolume *v0APlaInNailsHoles = new TGeoVolume("V0APlaInNailsHoles", sV0APlaInNailsHoles, medV0APlaIn);
582 new TGeoArb8("sV0APlaOu", fV0APlaAl/2., v0APts);
583 TGeoCompositeShape *sV0APlaOuNailsHoles = new TGeoCompositeShape("sV0APlaOuNailsHoles","sV0APlaOu-sV0ANailsPlaOuHoles");
584 TGeoVolume *v0APlaOuNailsHoles = new TGeoVolume("V0APlaOuNailsHoles", sV0APlaOuNailsHoles, medV0APlaOu);
585 v0APlaInNailsHoles->SetLineColor(kV0AColorPlaIn); v0APlaOuNailsHoles->SetLineColor(kV0AColorPlaOu);
586 TGeoVolume *v0APla = new TGeoVolumeAssembly("V0APla");
587 v0APla->AddNode(v0APlaInNailsHoles,1);
588 v0APla->AddNode(v0APlaOuNailsHoles,1,new TGeoTranslation(0,0,(fV0APlaWd-fV0APlaAl)/2.));
589 v0APla->AddNode(v0APlaOuNailsHoles,2,new TGeoTranslation(0,0,-(fV0APlaWd-fV0APlaAl)/2.));
590 v0ASec->AddNode(v0APla,1,new TGeoTranslation(0,0,(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
591 v0ASec->AddNode(v0APla,2,new TGeoTranslation(0,0,-(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
592
593 /// Non-sensitive scintilator
594 new TGeoTubeSeg("sV0AR5S2", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 0, 45);
595 TGeoCompositeShape *sV0AR5 = new TGeoCompositeShape("V0AR5","sV0AR5S2 - sV0ACha");
596 TGeoVolume *v0AR5 = new TGeoVolume("V0AR5",sV0AR5,medV0ASci);
597 v0AR5->SetLineColor(kV0AColorSci);
598 v0ASci->AddNode(v0AR5,1);
599 v0ASec->AddNode(v0ASci,1);
600
601 /// PMBox
602 TGeoVolume* v0APM = new TGeoVolumeAssembly("V0APM");
603 new TGeoBBox("sV0APMB1", fV0APMBWd/2., fV0APMBHt/2., fV0APMBTh/2.);
604 new TGeoBBox("sV0APMB2", fV0APMBWd/2.-fV0APMBWdW, fV0APMBHt/2.-fV0APMBHtW, fV0APMBTh/2.-fV0APMBThW);
605 TGeoCompositeShape *sV0APMB = new TGeoCompositeShape("sV0APMB","sV0APMB1-sV0APMB2");
606 TGeoVolume *v0APMB = new TGeoVolume("V0APMB",sV0APMB, medV0APMAlum);
607 v0APMB->SetLineColor(kV0AColorPMA);
608 v0APM->AddNode(v0APMB,1);
609
610 /// PMTubes
611 TGeoTube *sV0APMT1 = new TGeoTube("sV0APMT1", fV0APMTR1, fV0APMTR2, fV0APMTH/2.);
612 TGeoVolume *v0APMT1 = new TGeoVolume("V0APMT1", sV0APMT1, medV0APMGlass);
613 TGeoTube *sV0APMT2 = new TGeoTube("sV0APMT2", fV0APMTR3, fV0APMTR4, fV0APMTH/2.);
614 TGeoVolume *v0APMT2 = new TGeoVolume("V0APMT2", sV0APMT2, medV0APMAlum);
615 TGeoVolume *v0APMT = new TGeoVolumeAssembly("V0APMT");
616 TGeoTube *sV0APMTT = new TGeoTube("sV0APMTT", 0., fV0APMTR4, fV0APMTB/2.);
617 TGeoVolume *v0APMTT = new TGeoVolume("V0APMTT", sV0APMTT, medV0APMAlum);
618 v0APMT1->SetLineColor(kV0AColorPMG);
619 v0APMT2->SetLineColor(kV0AColorPMA);
620 v0APMTT->SetLineColor(kV0AColorPMA);
621 rot = new TGeoRotation("rot", 90, 0, 180, 0, 90, 90);
622 v0APMT->AddNode(v0APMT1,1,rot);
623 v0APMT->AddNode(v0APMT2,1,rot);
624 v0APMT->AddNode(v0APMTT,1,new TGeoCombiTrans(0,-(fV0APMTH+fV0APMTB)/2.,0,rot));
625 double autoShift = (fV0APMBWd-2*fV0APMBWdW)/4.;
626 v0APM->AddNode(v0APMT, 1, new TGeoTranslation(-1.5*autoShift, 0, 0));
627 v0APM->AddNode(v0APMT, 2, new TGeoTranslation(-0.5*autoShift, 0, 0));
628 v0APM->AddNode(v0APMT, 3, new TGeoTranslation(+0.5*autoShift, 0, 0));
629 v0APM->AddNode(v0APMT, 4, new TGeoTranslation(+1.5*autoShift, 0, 0));
630
631 /// PM
632 rot = new TGeoRotation("rot");
633 rot->RotateX(90-fV0APMBAng);
634 rot->RotateZ(-90.+22.5);
635 double cosAngPMB = TMath::Cos(fV0APMBAng*TMath::DegToRad());
636 double sinAngPMB = TMath::Sin(fV0APMBAng*TMath::DegToRad());
637 double shiftZ = fV0APMBHt/2. * cosAngPMB
638 - ( fV0ASciWd + 2 * fV0AOctWd + 2 * fV0APlaWd )/2. - fV0APMBTh/2. * sinAngPMB;
639 double shiftR = fV0AR6 + fV0AOctH2 + fV0APlaAl;
640 v0ASec->AddNode(v0APM,1, new TGeoCombiTrans( shiftR*cos225+1.07, shiftR*sin225, shiftZ, rot));
641
642 // Aluminium nails
643 TGeoTube *sV0ANail1 = new TGeoTube("sV0ANail1", 0.0, 0.4, 5.09/2.);
644 TGeoVolume *v0ANail1 = new TGeoVolume("V0ANail1", sV0ANail1, medV0APMAlum);
645 v0ANail1->SetLineColor(kV0AColorPMA);// this is the color for aluminium
646 v0ASec->AddNode(v0ANail1,1,new TGeoTranslation(42.9, 0.51, 0.0));
647 TGeoTube *sV0ANail2 = new TGeoTube("sV0ANail2", 0.0, 0.4, 5.09/2.);
648 TGeoVolume *v0ANail2 = new TGeoVolume("V0ANail2", sV0ANail2, medV0APMAlum);
649 v0ANail2->SetLineColor(kV0AColorPMA);
650 v0ASec->AddNode(v0ANail2,1,new TGeoTranslation(30.73,29.98,0.0));
651
652 /// Replicate sectors and adding sector to v0LE volume
653 TGeoVolume *v0LE = new TGeoVolumeAssembly("V0LE");
654 for(int i=0; i<4; i++) {
655 TGeoRotation *rotation = new TGeoRotation("rotation", 90., i*45., 90., 90.+i*45., 0., 0.);
656 v0LE->AddNode(v0ASec,i+1,rotation);
657 }
658
659 //Upper supports
660 for (int i=0;i<2;i++){
661 v0APts[0+8*i] = 0.0; v0APts[1+8*i] = 45.5;
662 v0APts[2+8*i] = 0.0; v0APts[3+8*i] = 70.4;
663 v0APts[4+8*i] = 4.0; v0APts[5+8*i] = 68.9;
664 v0APts[6+8*i] = 4.0; v0APts[7+8*i] = 45.5;
665 }
666 TGeoArb8 *sV0ASuppur = new TGeoArb8("sV0ASuppur", 1.65, v0APts);
667 TGeoVolume *v0ASuppur = new TGeoVolume("V0ASuppur", sV0ASuppur, medV0ASup);
668 v0ASuppur->SetLineColor(kV0AColorOct);
669 v0LE->AddNode(v0ASuppur,1);
670 for (int i=0;i<2;i++){
671 v0APts[0+8*i] = -0.0; v0APts[1+8*i] = 70.4;
672 v0APts[2+8*i] = -0.0; v0APts[3+8*i] = 45.5;
673 v0APts[4+8*i] = -4.0; v0APts[5+8*i] = 45.5;
674 v0APts[6+8*i] = -4.0; v0APts[7+8*i] = 68.9;
675 }
676 TGeoArb8 *sV0ASuppul = new TGeoArb8("sV0ASuppul", 1.65, v0APts);
677 TGeoVolume *v0ASuppul = new TGeoVolume("V0ASuppul", sV0ASuppul, medV0ASup);
678 v0ASuppul->SetLineColor(kV0AColorOct);
679 v0LE->AddNode(v0ASuppul,1);
680
681
682 //Definition of sector 5
683 TGeoVolume *v0ASec5 = new TGeoVolumeAssembly("V0ASec5");
684
685 /// For boolean sustraction
686 double preShape5 = 0.2;
687 for (int i=0;i<2;i++) {
688 v0APts[0+8*i] = -fV0AR0+fV0AFraWd/2.; v0APts[1+8*i] = fV0AFraWd/2.;
689 v0APts[2+8*i] = -fV0AR0+fV0AFraWd/2.; v0APts[3+8*i] = -2*preShape5;
690 v0APts[4+8*i] = -fV0AR4-fV0AFraWd/2.-preShape5; v0APts[5+8*i] = -2*preShape5;
691 v0APts[6+8*i] = -fV0AR4-fV0AFraWd/2.-preShape5; v0APts[7+8*i] = fV0AFraWd/2.;
692 }
693 new TGeoArb8("sV0ACha15",fV0ASciWd/1.5,v0APts);
694 for (int i=0;i<2;i++) {
695 v0APts[0+8*i] = -fV0AR0*cos45+preShape;
696 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd)*sin45+preShape;
697 v0APts[2+8*i] = -(fV0AR0-fV0AFraWd/2.)*cos45+preShape;
698 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
699 v0APts[4+8*i] = -(fV0AR4+fV0AFraWd/2.)*cos45-preShape;
700 v0APts[5+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45-2.*preShape;
701 v0APts[6+8*i] = -(fV0AR4+fV0AFraWd)*cos45-preShape;
702 v0APts[7+8*i] = -fV0AR4*sin45-preShape;
703 }
704 new TGeoArb8("sV0ACha25", fV0ASciWd/2.+2.*preShape5, v0APts);
705 new TGeoCompositeShape("sV0ACha125","sV0ACha15+sV0ACha25");
706 new TGeoTube("sV0ANail15Hole", 0.0, 0.4, 1.65);
707 TGeoTranslation *pos15 = new TGeoTranslation("pos15", -42.9, -0.51, 0.0);
708 pos15->RegisterYourself();
709 new TGeoTube("sV0ANail25Hole", 0.0, 0.4, 1.65);
710 TGeoTranslation *pos25 = new TGeoTranslation("pos25",-30.8,-30.04,0.0);
711 pos25->RegisterYourself();
712 TGeoTranslation *pos35 = new TGeoTranslation("pos35",-30.05,-30.79,0.0);
713 pos35->RegisterYourself();
714 new TGeoCompositeShape("sV0ANailsHoles5","sV0ANail15Hole:pos15+sV0ANail25Hole:pos25");
715 new TGeoCompositeShape("sV0ACha5","sV0ACha125+sV0ANailsHoles5");
716 new TGeoTubeSeg("sV0AFicR55", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2. +2*preShape, 180.0, 225.0);
717 new TGeoTube("sV0ANail1PlaInHole5", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
718 new TGeoTube("sV0ANail2PlaInHole5", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
719 new TGeoTube("sV0ANail3PlaInHole5", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
720 new TGeoCompositeShape("sV0ANailsPlaInHoles5","sV0ANail1PlaInHole5:pos15+sV0ANail2PlaInHole5:pos25+sV0ANail3PlaInHole5:pos35");
721 new TGeoTube("sV0ANail1PlaOuHole5", 0.0, 0.4, (fV0APlaAl)/2.);
722 new TGeoTube("sV0ANail2PlaOuHole5", 0.0, 0.4, (fV0APlaAl)/2.);
723 new TGeoTube("sV0ANail3PlaOuHole5", 0.0, 0.4, (fV0APlaAl)/2.);
724 new TGeoCompositeShape("sV0ANailsPlaOuHoles5","sV0ANail1PlaOuHole5:pos15+sV0ANail2PlaOuHole5:pos25+sV0ANail3PlaOuHole5:pos35");
725
726 /// Frame
727 TGeoVolume *v0AFra5 = new TGeoVolumeAssembly("V0AFra5");
728 for (int i=0;i<2;i++) {
729 v0APts[0+8*i] = -fV0AR0+fV0AFraWd/2.; v0APts[1+8*i] = 0.0;
730 v0APts[2+8*i] = -fV0AR0+fV0AFraWd/2.; v0APts[3+8*i] = -fV0AFraWd/8.;
731 v0APts[4+8*i] = -fV0AR4-fV0AFraWd/2.; v0APts[5+8*i] = -fV0AFraWd/8.;
732 v0APts[6+8*i] = -fV0AR4-fV0AFraWd/2.; v0APts[7+8*i] = 0.0;
733 }
734 TGeoArb8 *sV0AFraB15 = new TGeoArb8("sV0AFraB15",fV0ASciWd/2.,v0APts);
735 TGeoVolume *v0AFraB15 = new TGeoVolume("V0AFraB15",sV0AFraB15,medV0AFra);
736 for (int i=0;i<2;i++) {
737 v0APts[0+8*i] = -fV0AR0*cos45;
738 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd)*sin45;
739 v0APts[2+8*i] = -(fV0AR0-fV0AFraWd/2.)*cos45;
740 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
741 v0APts[4+8*i] = -(fV0AR4+fV0AFraWd/2.)*cos45;
742 v0APts[5+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45;
743 v0APts[6+8*i] = -(fV0AR4+fV0AFraWd)*cos45;
744 v0APts[7+8*i] = -fV0AR4*sin45;
745 }
746 TGeoArb8 *sV0AFraB25 = new TGeoArb8("sV0AFraB25", fV0ASciWd/2., v0APts);
747 TGeoVolume *v0AFraB25 = new TGeoVolume("V0AFraB25",sV0AFraB25,medV0AFra);
748 v0AFraB15->SetLineColor(kV0AColorFra); v0AFraB25->SetLineColor(kV0AColorFra);
749 v0AFra5->AddNode(v0AFraB15,1);
750 v0AFra5->AddNode(v0AFraB25,1); // Prefer 2 GeoObjects insted of 3 GeoMovements
751 new TGeoTubeSeg( "sV0AFraR1b5", fV0AR0-fV0AFraWd/2.,
752 fV0AR0+fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
753 new TGeoTubeSeg( "sV0AFraR2b5", fV0AR1-fV0AFraWd/2.,
754 fV0AR1+fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
755 new TGeoTubeSeg( "sV0AFraR3b5", fV0AR2-fV0AFraWd/2.,
756 fV0AR2+fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
757 new TGeoTubeSeg( "sV0AFraR4b5", fV0AR3-fV0AFraWd/2.,
758 fV0AR3+fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
759 new TGeoTubeSeg( "sV0AFraR5b5", fV0AR4-fV0AFraWd/2.,
760 fV0AR4+fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
761 TGeoCompositeShape *sV0AFraR15 = new TGeoCompositeShape("sV0AFraR15","sV0AFraR1b5-sV0ACha5");
762 TGeoCompositeShape *sV0AFraR25 = new TGeoCompositeShape("sV0AFraR25","sV0AFraR2b5-sV0ACha5");
763 TGeoCompositeShape *sV0AFraR35 = new TGeoCompositeShape("sV0AFraR35","sV0AFraR3b5-sV0ACha5");
764 TGeoCompositeShape *sV0AFraR45 = new TGeoCompositeShape("sV0AFraR45","sV0AFraR4b5-sV0ACha5");
765 TGeoCompositeShape *sV0AFraR55 = new TGeoCompositeShape("sV0AFraR55","sV0AFraR5b5-sV0ACha5");
766 TGeoVolume *v0AFraR15 = new TGeoVolume("V0AFraR15",sV0AFraR15,medV0AFra);
767 TGeoVolume *v0AFraR25 = new TGeoVolume("V0AFraR25",sV0AFraR25,medV0AFra);
768 TGeoVolume *v0AFraR35 = new TGeoVolume("V0AFraR35",sV0AFraR35,medV0AFra);
769 TGeoVolume *v0AFraR45 = new TGeoVolume("V0AFraR45",sV0AFraR45,medV0AFra);
770 TGeoVolume *v0AFraR55 = new TGeoVolume("V0AFraR55",sV0AFraR55,medV0AFra);
771 v0AFraR15->SetLineColor(kV0AColorFra); v0AFraR25->SetLineColor(kV0AColorFra);
772 v0AFraR35->SetLineColor(kV0AColorFra); v0AFraR45->SetLineColor(kV0AColorFra);
773 v0AFraR55->SetLineColor(kV0AColorFra);
774 v0AFra5->AddNode(v0AFraR15,1);
775 v0AFra5->AddNode(v0AFraR25,1);
776 v0AFra5->AddNode(v0AFraR35,1);
777 v0AFra5->AddNode(v0AFraR45,1);
778 v0AFra5->AddNode(v0AFraR55,1);
779 v0ASec5->AddNode(v0AFra5,1);
780
781 /// Sensitive scintilator
782 TGeoVolume *v0ASci5 = new TGeoVolumeAssembly("V0ASci5");
783 new TGeoTubeSeg( "sV0AR1b5", fV0AR0+fV0AFraWd/2.,
784 fV0AR1-fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
785 new TGeoTubeSeg( "sV0AR2b5", fV0AR1+fV0AFraWd/2.,
786 fV0AR2-fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
787 new TGeoTubeSeg( "sV0AR3b5", fV0AR2+fV0AFraWd/2.,
788 fV0AR3-fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
789 new TGeoTubeSeg( "sV0AR4b5", fV0AR3+fV0AFraWd/2.,
790 fV0AR4-fV0AFraWd/2., fV0ASciWd/2., 180.0, 225.0);
791 TGeoCompositeShape *sV0AR15 = new TGeoCompositeShape("sV0AR15","sV0AR1b5-sV0ACha5");
792 TGeoCompositeShape *sV0AR25 = new TGeoCompositeShape("sV0AR25","sV0AR2b5-sV0ACha5");
793 TGeoCompositeShape *sV0AR35 = new TGeoCompositeShape("sV0AR35","sV0AR3b5-sV0ACha5");
794 TGeoCompositeShape *sV0AR45 = new TGeoCompositeShape("sV0AR45","sV0AR4b5-sV0ACha5");
795 TGeoVolume *v0L15 = new TGeoVolume("V0L15",sV0AR15,medV0ASci);
796 TGeoVolume *v0L25 = new TGeoVolume("V0L25",sV0AR25,medV0ASci);
797 TGeoVolume *v0L35 = new TGeoVolume("V0L35",sV0AR35,medV0ASci);
798 TGeoVolume *v0L45 = new TGeoVolume("V0L45",sV0AR45,medV0ASci);
799 v0L15->SetLineColor(kV0AColorSci); v0L25->SetLineColor(kV0AColorSci);
800 v0L35->SetLineColor(kV0AColorSci); v0L45->SetLineColor(kV0AColorSci);
801 v0ASci5->AddNode(v0L15,1);
802 v0ASci5->AddNode(v0L25,1);
803 v0ASci5->AddNode(v0L35,1);
804 v0ASci5->AddNode(v0L45,1);
805
806 /// Segment of octagon
807 for (int i=0;i<2;i++) {
808 v0APts[0+8*i] = -fV0AR6+fV0AOctH2; v0APts[1+8*i] = 0.;
809 v0APts[2+8*i] = -(fV0AR7-fV0AOctH2)*cos654; v0APts[3+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
810 v0APts[4+8*i] = -fV0AR7*cos654; v0APts[5+8*i] = -fV0AR7*sin654;
811 v0APts[6+8*i] = -fV0AR6; v0APts[7+8*i] = 0.;
812 }
813 TGeoArb8 *sV0AOct25 = new TGeoArb8("sV0AOct25", (fV0ASciWd+2*fV0AOctWd)/2., v0APts);
814 TGeoVolume *v0AOct25 = new TGeoVolume("V0AOct25", sV0AOct25,medV0ASup);
815 v0AOct25->SetLineColor(kV0AColorOct);
816 TGeoVolume *v0ASup5 = new TGeoVolumeAssembly("V0ASup5");
817 v0ASup5->AddNode(v0AOct25,1);
818 v0ASec5->AddNode(v0ASup5,1);
819
820 //Bunch of fibers
821 v0APts[ 0] = v0APts[ 2] = -14.0;
822 v0APts[ 1] = v0APts[ 7] = (fV0ASciWd+fV0AOctWd)/2.-0.01;
823 v0APts[ 3] = v0APts[ 5] = (fV0ASciWd+fV0AOctWd)/2.+0.01;
824 v0APts[ 4] = v0APts[ 6] = +14.0;
825 v0APts[ 8] = v0APts[10] = -10.0;
826 v0APts[ 9] = v0APts[15] = 0.;
827 v0APts[11] = v0APts[13] = 0.25;
828 v0APts[12] = v0APts[14] = +10.0;
829 new TGeoArb8("sV0AFib15", 11.8, v0APts);
830 rot = new TGeoRotation("rot");
831 rot->RotateX(-90);
832 rot->RotateZ(90+22.5);
833 TGeoCombiTrans *fib15pos = new TGeoCombiTrans("fib15pos", -(fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. +
834 3.3, -(fV0AR6-fV0AOctH2+fV0AR5)*sin225/2. + 1.5, 0, rot);
835 fib15pos->RegisterYourself();
836 TGeoCompositeShape *sV0AFib15Hole = new TGeoCompositeShape("sV0AFib15Hole", "sV0AFib15:fib15pos-sV0AFicR55");
837 TGeoVolume *v0AFib15Hole = new TGeoVolume("V0AFib15",sV0AFib15Hole,medV0AFib);
838 v0AFib15Hole->SetLineColor(kV0AColorFib);
839 new TGeoArb8("sV0AFib25", 11.8, v0APts);
840 rot = new TGeoRotation("rot");
841 rot->RotateX(-90);
842 rot->RotateY(180);
843 rot->RotateZ(90+22.5);
844 TGeoCombiTrans *fib25pos = new TGeoCombiTrans("fib25pos", -(fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. +
845 3.3, -(fV0AR6-fV0AOctH2+fV0AR5)*sin225/2. + 1.5, 0, rot);
846 fib25pos->RegisterYourself();
847 TGeoCompositeShape *sV0AFib25Hole = new TGeoCompositeShape("sV0AFib25Hole","sV0AFib25:fib25pos-sV0AFicR55");
848 TGeoVolume *v0AFib25Hole = new TGeoVolume("V0AFib25Hole",sV0AFib25Hole,medV0AFib);
849 v0AFib25Hole->SetLineColor(kV0AColorFib);
850 TGeoVolume *v0AFib5 = new TGeoVolumeAssembly("V0AFib5");
851 v0AFib5->AddNode(v0AFib15Hole,1);
852 v0AFib5->AddNode(v0AFib25Hole,1);
853 v0ASec5->AddNode(v0AFib5,1);
854
855 /// Non-sensitive scintilator
856 new TGeoTubeSeg("sV0AR5S25", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 180.0, 225.0);
857 TGeoCompositeShape *sV0AR55 = new TGeoCompositeShape("V0AR55","sV0AR5S25 - sV0ACha5");
858 TGeoVolume *v0AR55 = new TGeoVolume("V0AR55",sV0AR55,medV0ASci);
859 v0AR55->SetLineColor(kV0AColorSci);
860 v0ASci5->AddNode(v0AR55,1);
861 v0ASec5->AddNode(v0ASci5,1);
862
863 /// Plates
864 for (int i=0;i<2;i++) {
865 v0APts[0+8*i] = -fV0AR0; v0APts[1+8*i] = 0.;
866 v0APts[2+8*i] = -fV0AR0*cos654; v0APts[3+8*i] = -fV0AR0*sin654;
867 v0APts[4+8*i] = -fV0AR7*cos654; v0APts[5+8*i] = -fV0AR7*sin654;
868 v0APts[6+8*i] = -fV0AR6; v0APts[7+8*i] = 0.;
869 }
870 new TGeoArb8("sV0APlaIn5", (fV0APlaWd-2*fV0APlaAl)/2., v0APts);
871 TGeoCompositeShape *sV0APlaInNailsHoles5 = new TGeoCompositeShape("sV0APlaInNailsHoles5","sV0APlaIn5-sV0ANailsPlaInHoles5");
872 TGeoVolume *v0APlaInNailsHoles5 = new TGeoVolume("V0APlaInNailsHoles5", sV0APlaInNailsHoles5, medV0APlaIn);
873 new TGeoArb8("sV0APlaOu5", fV0APlaAl/2., v0APts);
874 TGeoCompositeShape *sV0APlaOuNailsHoles5 = new TGeoCompositeShape("sV0APlaOuNailsHoles5","sV0APlaOu5-sV0ANailsPlaOuHoles5");
875 TGeoVolume *v0APlaOuNailsHoles5 = new TGeoVolume("V0APlaOuNailsHoles5", sV0APlaOuNailsHoles5, medV0APlaOu);
876 v0APlaInNailsHoles5->SetLineColor(kV0AColorPlaIn); v0APlaOuNailsHoles5->SetLineColor(kV0AColorPlaOu);
877 TGeoVolume *v0APla5 = new TGeoVolumeAssembly("V0APla5");
878 v0APla5->AddNode(v0APlaInNailsHoles5,1);
879 v0APla5->AddNode(v0APlaOuNailsHoles5,1,new TGeoTranslation(0,0,(fV0APlaWd-fV0APlaAl)/2.));
880 v0APla5->AddNode(v0APlaOuNailsHoles5,2,new TGeoTranslation(0,0,-(fV0APlaWd-fV0APlaAl)/2.));
881 v0ASec5->AddNode(v0APla5,1,new TGeoTranslation(0,0,(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
882 v0ASec5->AddNode(v0APla5,2,new TGeoTranslation(0,0,-(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
883
884 /// PMBox
885 TGeoVolume* v0APM5 = new TGeoVolumeAssembly("V0APM5");
886 new TGeoBBox("sV0APMB15", fV0APMBWd/2., fV0APMBHt/2., fV0APMBTh/2.);
887 new TGeoBBox("sV0APMB25", fV0APMBWd/2.-fV0APMBWdW, fV0APMBHt/2.-fV0APMBHtW, fV0APMBTh/2.-fV0APMBThW);
888 TGeoCompositeShape *sV0APMB5 = new TGeoCompositeShape("sV0APMB5","sV0APMB15-sV0APMB25");
889 TGeoVolume *v0APMB5 = new TGeoVolume("V0APMB5",sV0APMB5, medV0APMAlum);
890 v0APMB5->SetLineColor(kV0AColorPMA);
891 v0APM5->AddNode(v0APMB5,1);
892
893 /// PMTubes
894 TGeoTube *sV0APMT15 = new TGeoTube("sV0APMT15", fV0APMTR1, fV0APMTR2, fV0APMTH/2.);
895 TGeoVolume *v0APMT15 = new TGeoVolume("V0APMT15", sV0APMT15, medV0APMGlass);
896 TGeoTube *sV0APMT25 = new TGeoTube("sV0APMT25", fV0APMTR3, fV0APMTR4, fV0APMTH/2.);
897 TGeoVolume *v0APMT25 = new TGeoVolume("V0APMT25", sV0APMT25, medV0APMAlum);
898 TGeoVolume *v0APMT5 = new TGeoVolumeAssembly("V0APMT5");
899 TGeoTube *sV0APMTT5 = new TGeoTube("sV0APMTT5", 0., fV0APMTR4, fV0APMTB/2.);
900 TGeoVolume *v0APMTT5 = new TGeoVolume("V0APMTT5", sV0APMTT5, medV0APMAlum);
901 v0APMT5->SetLineColor(kV0AColorPMG);
902 v0APMT25->SetLineColor(kV0AColorPMA);
903 v0APMTT5->SetLineColor(kV0AColorPMA);
904 rot = new TGeoRotation("rot", 90, 0, 180, 0, 90, 90);
905 v0APMT5->AddNode(v0APMT15,1,rot);
906 v0APMT5->AddNode(v0APMT25,1,rot);
907 v0APMT5->AddNode(v0APMTT5,1,new TGeoCombiTrans(0,(fV0APMTH+fV0APMTB)/2.,0,rot));
908 double autoShift5 = (fV0APMBWd-2*fV0APMBWdW)/4.;
909 v0APM5->AddNode(v0APMT5, 1, new TGeoTranslation(-1.5*autoShift5, 0, 0));
910 v0APM5->AddNode(v0APMT5, 2, new TGeoTranslation(-0.5*autoShift5, 0, 0));
911 v0APM5->AddNode(v0APMT5, 3, new TGeoTranslation(+0.5*autoShift5, 0, 0));
912 v0APM5->AddNode(v0APMT5, 4, new TGeoTranslation(+1.5*autoShift5, 0, 0));
913
914 /// PM
915 rot = new TGeoRotation("rot");
916 rot->RotateX(-90+30);
917 rot->RotateY(0);
918 rot->RotateZ(-65-3);
919 double cosAngPMB5 = TMath::Cos(fV0APMBAng*TMath::DegToRad());
920 double sinAngPMB5 = TMath::Sin(fV0APMBAng*TMath::DegToRad());
921 double shiftZ5 = fV0APMBHt/2. * cosAngPMB5
922 - ( fV0ASciWd + 2 * fV0AOctWd + 2 * fV0APlaWd )/2. - fV0APMBTh/2. * sinAngPMB5;
923 double shiftR5 = fV0AR6 + fV0AOctH2 + fV0APlaAl;
924 v0ASec5->AddNode(v0APM5,1, new TGeoCombiTrans( -shiftR5*cos225-1.3, -shiftR5*sin225, shiftZ5, rot));
925
926 // Aluminium nails
927 TGeoTube *sV0ANail51 = new TGeoTube("sV0ANail51", 0.0, 0.4, 5.09/2.);
928 TGeoVolume *v0ANail51 = new TGeoVolume("V0ANail51", sV0ANail51, medV0APMAlum);
929 v0ANail51->SetLineColor(kV0AColorPMA);// this is the color for aluminium
930 v0ASec5->AddNode(v0ANail51,1,new TGeoTranslation(-42.9,-0.51,0.0));
931 TGeoTube *sV0ANail52 = new TGeoTube("sV0ANail52", 0.0, 0.4, 5.09/2.);
932 TGeoVolume *v0ANail52 = new TGeoVolume("V0ANail52", sV0ANail52, medV0APMAlum);
933 v0ANail52->SetLineColor(kV0AColorPMA);
934 v0ASec5->AddNode(v0ANail52,1,new TGeoTranslation(-30.8,-30.04,0.0));
935
936 // Adding sector to v0LE volume
937 v0LE->AddNode(v0ASec5, 1);
938
939
940 //Definition of sector 6
941 TGeoVolume *v0ASec6 = new TGeoVolumeAssembly("V0ASec6");
942
943 /// For boolean sustraction
944 double preShape6 = 0.2;
945 for (int i=0;i<2;i++) {
946 v0APts[0+8*i] = -preShape6; v0APts[1+8*i] = -fV0AR0+fV0AFraWd/2.-preShape6;
947 v0APts[2+8*i] = 0.0; v0APts[3+8*i] = -fV0AR0+fV0AFraWd/2.-preShape6;
948 v0APts[4+8*i] = 0.0; v0APts[5+8*i] = -fV0AR4-fV0AFraWd/2.+preShape6;
949 v0APts[6+8*i] = -preShape6; v0APts[7+8*i] = -fV0AR4-fV0AFraWd/2.+preShape6;
950 }
951 new TGeoArb8("sV0ACha16",fV0ASciWd/1.5,v0APts);
952 for (int i=0;i<2;i++) {
953 v0APts[0+8*i] = -fV0AR0*cos45+preShape;
954 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd)*sin45+preShape;
955 v0APts[2+8*i] = -(fV0AR0-fV0AFraWd/2.)*cos45+preShape;
956 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
957 v0APts[4+8*i] = -(fV0AR4+fV0AFraWd/2.)*cos45-preShape;
958 v0APts[5+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45-preShape;
959 v0APts[6+8*i] = -(fV0AR4+fV0AFraWd)*cos45-preShape;
960 v0APts[7+8*i] = -fV0AR4*sin45-preShape;
961 }
962 new TGeoArb8("sV0ACha26", fV0ASciWd/2.+2.*preShape, v0APts);
963 new TGeoCompositeShape("sV0ACha126","sV0ACha16+sV0ACha26");
964 new TGeoTube("sV0ANail16Hole", 0.0, 0.4, 1.65);
965 TGeoTranslation *pos16 = new TGeoTranslation("pos16",-0.51,-42.9,0.0);
966 pos16->RegisterYourself();
967 new TGeoTube("sV0ANail26Hole", 0.0, 0.4, 1.65);
968 TGeoTranslation *pos26 = new TGeoTranslation("pos26",-30.05,-30.79,0.0);
969 pos26->RegisterYourself();
970 new TGeoCompositeShape("sV0ANailsHoles6","sV0ANail16Hole:pos16+sV0ANail26Hole:pos26");
971 new TGeoCompositeShape("sV0ACha6","sV0ACha126+sV0ANailsHoles6");
972 new TGeoTubeSeg("sV0AFicR56", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 225, 270.0);
973 new TGeoTube("sV0ANail1PlaInHole6", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
974 new TGeoTube("sV0ANail1PlaOuHole6", 0.0, 0.4, (fV0APlaAl)/2.);
975
976 /// Frame
977 TGeoVolume *v0AFra6 = new TGeoVolumeAssembly("V0AFra6");
978 for (int i=0;i<2;i++) {
979 v0APts[0+8*i] = -fV0AFraWd/2.; v0APts[1+8*i] = -fV0AR0-fV0AFraWd/2.;
980 v0APts[2+8*i] = 0.; v0APts[3+8*i] = -fV0AR0-fV0AFraWd/2.;
981 v0APts[4+8*i] = 0.; v0APts[5+8*i] = -fV0AR4+fV0AFraWd/2.;
982 v0APts[6+8*i] = -fV0AFraWd/2.; v0APts[7+8*i] = -fV0AR4+fV0AFraWd/2.;
983 }
984 TGeoArb8 *sV0AFraB16 = new TGeoArb8("sV0AFraB16",fV0ASciWd/2.,v0APts);
985 TGeoVolume *v0AFraB16 = new TGeoVolume("V0AFraB16",sV0AFraB16,medV0AFra);
986 for (int i=0;i<2;i++) {
987 v0APts[0+8*i] = -(fV0AR0+fV0AFraWd/2.)*cos45;
988 v0APts[1+8*i] = -(fV0AR0+fV0AFraWd/2.)*sin45;
989 v0APts[2+8*i] = -fV0AR0*cos45;
990 v0APts[3+8*i] = -(fV0AR0+fV0AFraWd)*sin45;
991 v0APts[4+8*i] = -(fV0AR4-fV0AFraWd/6.)*cos45;
992 v0APts[5+8*i] = -fV0AR4*sin45;
993 v0APts[6+8*i] = -(fV0AR4-fV0AFraWd)*cos45;
994 v0APts[7+8*i] = -(fV0AR4-fV0AFraWd/2.)*sin45;
995 }
996 TGeoArb8 *sV0AFraB26 = new TGeoArb8("sV0AFraB26", fV0ASciWd/2., v0APts);
997 TGeoVolume *v0AFraB26 = new TGeoVolume("V0AFraB26",sV0AFraB26,medV0AFra);
998 v0AFraB16->SetLineColor(kV0AColorFra); v0AFraB26->SetLineColor(kV0AColorFra);
999 v0AFra6->AddNode(v0AFraB16,1);
1000 v0AFra6->AddNode(v0AFraB26,1); // Prefer 2 GeoObjects insted of 3 GeoMovements
1001 new TGeoTubeSeg( "sV0AFraR1b6", fV0AR0-fV0AFraWd/2.,
1002 fV0AR0+fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1003 new TGeoTubeSeg( "sV0AFraR2b6", fV0AR1-fV0AFraWd/2.,
1004 fV0AR1+fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1005 new TGeoTubeSeg( "sV0AFraR3b6", fV0AR2-fV0AFraWd/2.,
1006 fV0AR2+fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1007 new TGeoTubeSeg( "sV0AFraR4b6", fV0AR3-fV0AFraWd/2.,
1008 fV0AR3+fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1009 new TGeoTubeSeg( "sV0AFraR5b6", fV0AR4-fV0AFraWd/2.,
1010 fV0AR4+fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1011 TGeoCompositeShape *sV0AFraR16 = new TGeoCompositeShape("sV0AFraR16","sV0AFraR1b6-sV0ACha6");
1012 TGeoCompositeShape *sV0AFraR26 = new TGeoCompositeShape("sV0AFraR26","sV0AFraR2b6-sV0ACha6");
1013 TGeoCompositeShape *sV0AFraR36 = new TGeoCompositeShape("sV0AFraR36","sV0AFraR3b6-sV0ACha6");
1014 TGeoCompositeShape *sV0AFraR46 = new TGeoCompositeShape("sV0AFraR46","sV0AFraR4b6-sV0ACha6");
1015 TGeoCompositeShape *sV0AFraR56 = new TGeoCompositeShape("sV0AFraR56","sV0AFraR5b6-sV0ACha6");
1016 TGeoVolume *v0AFraR16 = new TGeoVolume("V0AFraR16",sV0AFraR16,medV0AFra);
1017 TGeoVolume *v0AFraR26 = new TGeoVolume("V0AFraR26",sV0AFraR26,medV0AFra);
1018 TGeoVolume *v0AFraR36 = new TGeoVolume("V0AFraR36",sV0AFraR36,medV0AFra);
1019 TGeoVolume *v0AFraR46 = new TGeoVolume("V0AFraR46",sV0AFraR46,medV0AFra);
1020 TGeoVolume *v0AFraR56 = new TGeoVolume("V0AFraR56",sV0AFraR56,medV0AFra);
1021 v0AFraR16->SetLineColor(kV0AColorFra); v0AFraR26->SetLineColor(kV0AColorFra);
1022 v0AFraR36->SetLineColor(kV0AColorFra); v0AFraR46->SetLineColor(kV0AColorFra);
1023 v0AFraR56->SetLineColor(kV0AColorFra);
1024 v0AFra6->AddNode(v0AFraR16,1);
1025 v0AFra6->AddNode(v0AFraR26,1);
1026 v0AFra6->AddNode(v0AFraR36,1);
1027 v0AFra6->AddNode(v0AFraR46,1);
1028 v0AFra6->AddNode(v0AFraR56,1);
1029 v0ASec6->AddNode(v0AFra6,1);
1030
1031 /// Sensitive scintilator
1032 TGeoVolume *v0ASci6 = new TGeoVolumeAssembly("V0ASci6");
1033 new TGeoTubeSeg( "sV0AR1b6", fV0AR0+fV0AFraWd/2.,
1034 fV0AR1-fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1035 new TGeoTubeSeg( "sV0AR2b6", fV0AR1+fV0AFraWd/2.,
1036 fV0AR2-fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1037 new TGeoTubeSeg( "sV0AR3b6", fV0AR2+fV0AFraWd/2.,
1038 fV0AR3-fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1039 new TGeoTubeSeg( "sV0AR4b6", fV0AR3+fV0AFraWd/2.,
1040 fV0AR4-fV0AFraWd/2., fV0ASciWd/2., 225.0, 270.0);
1041 TGeoCompositeShape *sV0AR16 = new TGeoCompositeShape("sV0AR16","sV0AR1b6-sV0ACha6");
1042 TGeoCompositeShape *sV0AR26 = new TGeoCompositeShape("sV0AR26","sV0AR2b6-sV0ACha6");
1043 TGeoCompositeShape *sV0AR36 = new TGeoCompositeShape("sV0AR36","sV0AR3b6-sV0ACha6");
1044 TGeoCompositeShape *sV0AR46 = new TGeoCompositeShape("sV0AR46","sV0AR4b6-sV0ACha6");
1045 TGeoVolume *v0L16 = new TGeoVolume("V0L16",sV0AR16,medV0ASci);
1046 TGeoVolume *v0L26 = new TGeoVolume("V0L26",sV0AR26,medV0ASci);
1047 TGeoVolume *v0L36 = new TGeoVolume("V0L36",sV0AR36,medV0ASci);
1048 TGeoVolume *v0L46 = new TGeoVolume("V0L46",sV0AR46,medV0ASci);
1049 v0L16->SetLineColor(kV0AColorSci); v0L26->SetLineColor(kV0AColorSci);
1050 v0L36->SetLineColor(kV0AColorSci); v0L46->SetLineColor(kV0AColorSci);
1051 v0ASci6->AddNode(v0L16,1);
1052 v0ASci6->AddNode(v0L26,1);
1053 v0ASci6->AddNode(v0L36,1);
1054 v0ASci6->AddNode(v0L46,1);
1055
1056 // Bunch of fibers
1057 for (int i=0;i<2;i++) {
1058 v0APts[0+8*i] = -10.0; v0APts[1+8*i] = 13.1;
1059 v0APts[2+8*i] = 10.0; v0APts[3+8*i] = 13.1;
1060 v0APts[4+8*i] = 8.0; v0APts[5+8*i] = -29.0;
1061 v0APts[6+8*i] = -12.0; v0APts[7+8*i] = -12.0;
1062 }
1063 new TGeoArb8("sV0AFib16", 0.01, v0APts);
1064 rot = new TGeoRotation("rot");
1065 rot->RotateX(2.0);
1066 rot->RotateY(180.0);
1067 rot->RotateZ(90+22.5);
1068 TGeoCombiTrans *fib16pos = new TGeoCombiTrans("fib16pos", -40.0 + 3.3, -50.0 + 1.5, 0.5, rot);
1069 fib16pos->RegisterYourself();
1070 TGeoCompositeShape *sV0AFib16Hole = new TGeoCompositeShape("sV0AFib16Hole", "sV0AFib16:fib16pos-sV0AFicR56");
1071 TGeoVolume *v0AFib16Hole = new TGeoVolume("V0AFib16Hole",sV0AFib16Hole,medV0AFib);
1072 v0AFib16Hole->SetLineColor(kV0AColorFib);
1073 new TGeoArb8("sV0AFib26", 0.01, v0APts);
1074 rot = new TGeoRotation("rot");
1075 rot->RotateX(-2.0);
1076 rot->RotateY(180.0);
1077 rot->RotateZ(90+22.5);
1078 TGeoCombiTrans *fib26pos = new TGeoCombiTrans("fib26pos", -40.0 + 3.3, -50.0 + 1.5, -0.5, rot);
1079 fib26pos->RegisterYourself();
1080 TGeoCompositeShape *sV0AFib26Hole = new TGeoCompositeShape("sV0AFib26Hole", "sV0AFib26:fib26pos-sV0AFicR56");
1081 TGeoVolume *v0AFib26Hole = new TGeoVolume("V0AFib26Hole",sV0AFib26Hole,medV0AFib);
1082 v0AFib26Hole->SetLineColor(kV0AColorFib);
1083 TGeoVolume *v0AFib6 = new TGeoVolumeAssembly("V0AFib6");
1084 v0AFib6->AddNode(v0AFib16Hole,1);
1085 v0AFib6->AddNode(v0AFib26Hole,1);
1086 v0ASec6->AddNode(v0AFib6,1);
1087
1088 /// Non-sensitive scintilator
1089 new TGeoTubeSeg("sV0AR5S26", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 225.0, 270.0);
1090 TGeoCompositeShape *sV0AR56 = new TGeoCompositeShape("V0AR56","sV0AR5S26 - sV0ACha6");
1091 TGeoVolume *v0AR56 = new TGeoVolume("V0AR56",sV0AR56,medV0ASci);
1092 v0AR56->SetLineColor(kV0AColorSci);
1093 v0ASci6->AddNode(v0AR56,1);
1094 v0ASec6->AddNode(v0ASci6,1);
1095
1096 /// Segment of octagon
1097 for (int i=0;i<2;i++) {
1098 v0APts[0+8*i] = 0.; v0APts[1+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
1099 v0APts[2+8*i] = 0.; v0APts[3+8*i] = -fV0AR7*sin654;
1100 v0APts[4+8*i] = -fV0AR7*cos654; v0APts[5+8*i] = -fV0AR7*sin654;
1101 v0APts[6+8*i] = -(fV0AR7-fV0AOctH2)*cos654; v0APts[7+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
1102 }
1103 TGeoArb8 *sV0AOct26 = new TGeoArb8("sV0AOct26", (fV0ASciWd+2*fV0AOctWd)/2., v0APts);
1104 TGeoVolume *v0AOct26 = new TGeoVolume("V0AOct26", sV0AOct26,medV0ASup);
1105 v0AOct26->SetLineColor(kV0AColorOct);
1106 TGeoVolume *v0ASup6 = new TGeoVolumeAssembly("V0ASup6");
1107 v0ASup6->AddNode(v0AOct26,1);
1108 v0ASec6->AddNode(v0ASup6,1);
1109
1110 /// Plates
1111 for (int i=0;i<2;i++) {
1112 v0APts[0+8*i] = 0.; v0APts[1+8*i] = -fV0AR0;
1113 v0APts[2+8*i] = 0.; v0APts[3+8*i] = -fV0AR7*sin654;
1114 v0APts[4+8*i] = -fV0AR7*cos654; v0APts[5+8*i] = -fV0AR7*sin654;
1115 v0APts[6+8*i] = -fV0AR0*cos654; v0APts[7+8*i] = -fV0AR0*sin654;
1116 }
1117 new TGeoArb8("sV0APlaIn6", (fV0APlaWd-2*fV0APlaAl)/2., v0APts);
1118 TGeoCompositeShape *sV0APlaInNailsHoles6 = new TGeoCompositeShape("sV0APlaInNailsHoles6","sV0APlaIn6-sV0ANail1PlaInHole6:pos16");
1119 TGeoVolume *v0APlaInNailsHoles6 = new TGeoVolume("V0APlaInNailsHoles6", sV0APlaInNailsHoles6, medV0APlaIn);
1120 new TGeoArb8("sV0APlaOu6", fV0APlaAl/2., v0APts);
1121 TGeoCompositeShape *sV0APlaOuNailsHoles6 = new TGeoCompositeShape("sV0APlaOuNailsHoles6","sV0APlaOu6-sV0ANail1PlaOuHole6:pos16");
1122 TGeoVolume *v0APlaOuNailsHoles6 = new TGeoVolume("V0APlaOuNailsHoles6", sV0APlaOuNailsHoles6, medV0APlaOu);
1123 v0APlaInNailsHoles6->SetLineColor(kV0AColorPlaIn); v0APlaOuNailsHoles6->SetLineColor(kV0AColorPlaOu);
1124 TGeoVolume *v0APla6 = new TGeoVolumeAssembly("V0APla6");
1125 v0APla6->AddNode(v0APlaInNailsHoles6,1);
1126 v0APla6->AddNode(v0APlaOuNailsHoles6,1,new TGeoTranslation(0,0,(fV0APlaWd-fV0APlaAl)/2.));
1127 v0APla6->AddNode(v0APlaOuNailsHoles6,2,new TGeoTranslation(0,0,-(fV0APlaWd-fV0APlaAl)/2.));
1128 v0ASec6->AddNode(v0APla6,1,new TGeoTranslation(0,0,(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1129 v0ASec6->AddNode(v0APla6,2,new TGeoTranslation(0,0,-(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1130
1131 /// PMBox
1132 TGeoVolume* v0APM6 = new TGeoVolumeAssembly("V0APM6");
1133 new TGeoBBox("sV0APMB16", fV0APMBWd/2., fV0APMBHt/2., fV0APMBTh/2.);
1134 new TGeoBBox("sV0APMB26", fV0APMBWd/2.-fV0APMBWdW, fV0APMBHt/2.-fV0APMBHtW, fV0APMBTh/2.-fV0APMBThW);
1135 TGeoCompositeShape *sV0APMB6 = new TGeoCompositeShape("sV0APMB6","sV0APMB16-sV0APMB26");
1136 TGeoVolume *v0APMB6 = new TGeoVolume("V0APMB6",sV0APMB6, medV0APMAlum);
1137 v0APMB6->SetLineColor(kV0AColorPMA);
1138 v0APM6->AddNode(v0APMB6,1);
1139
1140 /// PMTubes
1141 TGeoTube *sV0APMT16 = new TGeoTube("sV0APMT16", fV0APMTR1, fV0APMTR2, fV0APMTH/2.);
1142 TGeoVolume *v0APMT16 = new TGeoVolume("V0APMT16", sV0APMT16, medV0APMGlass);
1143 TGeoTube *sV0APMT26 = new TGeoTube("sV0APMT26", fV0APMTR3, fV0APMTR4, fV0APMTH/2.);
1144 TGeoVolume *v0APMT26 = new TGeoVolume("V0APMT26", sV0APMT26, medV0APMAlum);
1145 TGeoVolume *v0APMT6 = new TGeoVolumeAssembly("V0APMT6");
1146 TGeoTube *sV0APMTT6 = new TGeoTube("sV0APMTT6", 0., fV0APMTR4, fV0APMTB/2.);
1147 TGeoVolume *v0APMTT6 = new TGeoVolume("V0APMTT6", sV0APMTT6, medV0APMAlum);
1148 v0APMT6->SetLineColor(kV0AColorPMG);
1149 v0APMT26->SetLineColor(kV0AColorPMA);
1150 v0APMTT6->SetLineColor(kV0AColorPMA);
1151 rot = new TGeoRotation("rot", 90, 0, 180, 0, 90, 90);
1152 v0APMT6->AddNode(v0APMT16,1,rot);
1153 v0APMT6->AddNode(v0APMT26,1,rot);
1154 v0APMT6->AddNode(v0APMTT6,1,new TGeoCombiTrans(0,(fV0APMTH+fV0APMTB)/2.,0,rot));
1155 double autoShift6 = (fV0APMBWd-2*fV0APMBWdW)/4.;
1156 v0APM6->AddNode(v0APMT6, 1, new TGeoTranslation(-1.5*autoShift6, 0, 0));
1157 v0APM6->AddNode(v0APMT6, 2, new TGeoTranslation(-0.5*autoShift6, 0, 0));
1158 v0APM6->AddNode(v0APMT6, 3, new TGeoTranslation(+0.5*autoShift6, 0, 0));
1159 v0APM6->AddNode(v0APMT6, 4, new TGeoTranslation(+1.5*autoShift6, 0, 0));
1160
1161 /// PM
1162 rot = new TGeoRotation("rot");
1163 rot->RotateX(-90+30);
1164 rot->RotateY(0);
1165 rot->RotateZ(-65-3);
1166 double cosAngPMB6 = TMath::Cos(fV0APMBAng*TMath::DegToRad());
1167 double sinAngPMB6 = TMath::Sin(fV0APMBAng*TMath::DegToRad());
1168 double shiftZ6 = fV0APMBHt/2. * cosAngPMB6
1169 - ( fV0ASciWd + 2 * fV0AOctWd + 2 * fV0APlaWd )/2. - fV0APMBTh/2. * sinAngPMB6;
1170 double shiftR6 = fV0AR6 + fV0AR1 + fV0AOctWd + fV0APlaAl/3.;
1171 v0ASec6->AddNode(v0APM6,1, new TGeoCombiTrans( -shiftR6*cos45-1.3, -shiftR6*sin45, shiftZ6, rot));
1172
1173 /// Support
1174 TGeoBBox *sV0ASuppbl = new TGeoBBox("sV0ASuppbl", 2.0, 18.13, fV0ASciWd/2.);
1175 TGeoVolume *v0ASuppbl = new TGeoVolume("V0ASuppbl", sV0ASuppbl, medV0ASup);
1176 v0ASuppbl->SetLineColor(kV0AColorOct);
1177 v0ASec6->AddNode(v0ASuppbl,1,new TGeoTranslation(-2.0,-63.64,0.0));
1178
1179 // Aluminium nail
1180 TGeoTube *sV0ANail61 = new TGeoTube("sV0ANail61", 0.0, 0.4, 5.09/2.);
1181 TGeoVolume *v0ANail61 = new TGeoVolume("V0ANail61", sV0ANail61, medV0APMAlum);
1182 v0ANail61->SetLineColor(kV0AColorPMA);// this is the color for aluminium
1183 v0ASec6->AddNode(v0ANail61,1,new TGeoTranslation(-0.51,-42.9,0.0));
1184 TGeoTube *sV0ANail62 = new TGeoTube("sV0ANail62", 0.0, 0.4, 5.09/2.);
1185 TGeoVolume *v0ANail62 = new TGeoVolume("V0ANail62", sV0ANail62, medV0APMAlum);
1186 v0ANail62->SetLineColor(kV0AColorPMA);
1187 v0ASec6->AddNode(v0ANail62,1,new TGeoTranslation(-30.05,-30.79,0.0));
1188
1189 // Adding sector to v0LE volume
1190 v0LE->AddNode(v0ASec6, 1);
1191
1192
1193 //Definition of sector 7
1194 TGeoVolume *v0ASec7 = new TGeoVolumeAssembly("V0ASec7");
1195
1196 /// For boolean sustraction
1197 double preShape7 = 0.2;
1198 for (int i=0;i<2;i++) {
1199 v0APts[0+8*i] = 0.0; v0APts[1+8*i] = -fV0AR0+fV0AFraWd/2.-preShape7;
1200 v0APts[2+8*i] = fV0AFraWd/2.; v0APts[3+8*i] = -fV0AR0+fV0AFraWd/2.-preShape7;
1201 v0APts[4+8*i] = fV0AFraWd/2.; v0APts[5+8*i] = -fV0AR4-fV0AFraWd/2.+preShape7;
1202 v0APts[6+8*i] = 0.0; v0APts[7+8*i] = -fV0AR4-fV0AFraWd/2.+preShape7;
1203 }
1204 new TGeoArb8("sV0ACha17",fV0ASciWd/1.5,v0APts);
1205 for (int i=0;i<2;i++) {
1206 v0APts[0+8*i] = (fV0AR0-fV0AFraWd/2.)*cos45-preShape7;
1207 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
1208 v0APts[2+8*i] = fV0AR0*cos45-preShape7;
1209 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd)*sin45+preShape7;
1210 v0APts[4+8*i] = (fV0AR4+fV0AFraWd)*cos45+preShape7;
1211 v0APts[5+8*i] = -fV0AR4*sin45-preShape7;
1212 v0APts[6+8*i] = (fV0AR4+fV0AFraWd/2.)*cos45+preShape7;
1213 v0APts[7+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45-2.*preShape7;
1214 }
1215 new TGeoArb8("sV0ACha27", fV0ASciWd/2.+2.*preShape, v0APts);
1216 new TGeoCompositeShape("sV0ACha127","sV0ACha17+sV0ACha27");
1217 new TGeoTube("sV0ANail17Hole", 0.0, 0.4, 1.65);
1218 TGeoTranslation *pos17 = new TGeoTranslation("pos17",0.51,-42.9,0.0);
1219 pos17->RegisterYourself();
1220 new TGeoTube("sV0ANail27Hole", 0.0, 0.4, 1.65);
1221 TGeoTranslation *pos27 = new TGeoTranslation("pos27",30.05,-30.79,0.0);
1222 pos27->RegisterYourself();
1223 new TGeoCompositeShape("sV0ANailsHoles7","sV0ANail17Hole:pos17+sV0ANail27Hole:pos27");
1224 new TGeoCompositeShape("sV0ACha7","sV0ACha127+sV0ANailsHoles7");
1225 new TGeoTubeSeg("sV0AFicR57", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 270.0, 315.0);
1226 new TGeoTube("sV0ANail1PlaInHole7", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
1227 new TGeoTube("sV0ANail1PlaOuHole7", 0.0, 0.4, (fV0APlaAl)/2.);
1228
1229 /// Frame
1230 TGeoVolume *v0AFra7 = new TGeoVolumeAssembly("V0AFra7");
1231 for (int i=0;i<2;i++) {
1232 v0APts[0+8*i] = 0.; v0APts[1+8*i] = -fV0AR0-fV0AFraWd/2.;
1233 v0APts[2+8*i] = fV0AFraWd/2.; v0APts[3+8*i] = -fV0AR0-fV0AFraWd/2.;
1234 v0APts[4+8*i] = fV0AFraWd/2.; v0APts[5+8*i] = -fV0AR4+fV0AFraWd/2.;
1235 v0APts[6+8*i] = 0.; v0APts[7+8*i] = -fV0AR4+fV0AFraWd/2.;
1236 }
1237 TGeoArb8 *sV0AFraB17 = new TGeoArb8("sV0AFraB17",fV0ASciWd/2.,v0APts);
1238 TGeoVolume *v0AFraB17 = new TGeoVolume("V0AFraB17",sV0AFraB17,medV0AFra);
1239 for (int i=0;i<2;i++) {
1240 v0APts[0+8*i] = fV0AR0*cos45-fV0AFraWd;
1241 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd)*sin45;
1242 v0APts[2+8*i] = (fV0AR0-fV0AFraWd/2.)*cos45;
1243 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
1244 v0APts[4+8*i] = (fV0AR4+fV0AFraWd/2.)*cos45/2.;
1245 v0APts[5+8*i] = -fV0AR4*sin45/2.;
1246 v0APts[6+8*i] = (fV0AR4+fV0AFraWd/4.)*cos45/2.;
1247 v0APts[7+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45/2.;
1248 }
1249 TGeoArb8 *sV0AFraB27 = new TGeoArb8("sV0AFraB27", fV0ASciWd/2., v0APts);
1250 TGeoVolume *v0AFraB27 = new TGeoVolume("V0AFraB27",sV0AFraB27,medV0AFra);
1251 v0AFraB17->SetLineColor(kV0AColorFra); v0AFraB27->SetLineColor(kV0AColorFra);
1252 v0AFra7->AddNode(v0AFraB17,1);
1253 v0AFra7->AddNode(v0AFraB27,1); // Prefer 2 GeoObjects insted of 3 GeoMovements
1254 new TGeoTubeSeg( "sV0AFraR1b7", fV0AR0-fV0AFraWd/2.,
1255 fV0AR0+fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1256 new TGeoTubeSeg( "sV0AFraR2b7", fV0AR1-fV0AFraWd/2.,
1257 fV0AR1+fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1258 new TGeoTubeSeg( "sV0AFraR3b7", fV0AR2-fV0AFraWd/2.,
1259 fV0AR2+fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1260 new TGeoTubeSeg( "sV0AFraR4b7", fV0AR3-fV0AFraWd/2.,
1261 fV0AR3+fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1262 new TGeoTubeSeg( "sV0AFraR5b7", fV0AR4-fV0AFraWd/2.,
1263 fV0AR4+fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1264 TGeoCompositeShape *sV0AFraR17 = new TGeoCompositeShape("sV0AFraR17","sV0AFraR1b7-sV0ACha7");
1265 TGeoCompositeShape *sV0AFraR27 = new TGeoCompositeShape("sV0AFraR27","sV0AFraR2b7-sV0ACha7");
1266 TGeoCompositeShape *sV0AFraR37 = new TGeoCompositeShape("sV0AFraR37","sV0AFraR3b7-sV0ACha7");
1267 TGeoCompositeShape *sV0AFraR47 = new TGeoCompositeShape("sV0AFraR47","sV0AFraR4b7-sV0ACha7");
1268 TGeoCompositeShape *sV0AFraR57 = new TGeoCompositeShape("sV0AFraR57","sV0AFraR5b7-sV0ACha7");
1269 TGeoVolume *v0AFraR17 = new TGeoVolume("V0AFraR17",sV0AFraR17,medV0AFra);
1270 TGeoVolume *v0AFraR27 = new TGeoVolume("V0AFraR27",sV0AFraR27,medV0AFra);
1271 TGeoVolume *v0AFraR37 = new TGeoVolume("V0AFraR37",sV0AFraR37,medV0AFra);
1272 TGeoVolume *v0AFraR47 = new TGeoVolume("V0AFraR47",sV0AFraR47,medV0AFra);
1273 TGeoVolume *v0AFraR57 = new TGeoVolume("V0AFraR57",sV0AFraR57,medV0AFra);
1274 v0AFraR17->SetLineColor(kV0AColorFra); v0AFraR27->SetLineColor(kV0AColorFra);
1275 v0AFraR37->SetLineColor(kV0AColorFra); v0AFraR47->SetLineColor(kV0AColorFra);
1276 v0AFraR57->SetLineColor(kV0AColorFra);
1277 v0AFra7->AddNode(v0AFraR17,1);
1278 v0AFra7->AddNode(v0AFraR27,1);
1279 v0AFra7->AddNode(v0AFraR37,1);
1280 v0AFra7->AddNode(v0AFraR47,1);
1281 v0AFra7->AddNode(v0AFraR57,1);
1282 v0ASec7->AddNode(v0AFra7,1);
1283
1284 /// Sensitive scintilator
1285 TGeoVolume *v0ASci7 = new TGeoVolumeAssembly("V0ASci7");
1286 new TGeoTubeSeg( "sV0AR1b7", fV0AR0+fV0AFraWd/2.,
1287 fV0AR1-fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1288 new TGeoTubeSeg( "sV0AR2b7", fV0AR1+fV0AFraWd/2.,
1289 fV0AR2-fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1290 new TGeoTubeSeg( "sV0AR3b7", fV0AR2+fV0AFraWd/2.,
1291 fV0AR3-fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1292 new TGeoTubeSeg( "sV0AR4b7", fV0AR3+fV0AFraWd/2.,
1293 fV0AR4-fV0AFraWd/2., fV0ASciWd/2., 270.0, 315.0);
1294 TGeoCompositeShape *sV0AR17 = new TGeoCompositeShape("sV0AR17","sV0AR1b7-sV0ACha7");
1295 TGeoCompositeShape *sV0AR27 = new TGeoCompositeShape("sV0AR27","sV0AR2b7-sV0ACha7");
1296 TGeoCompositeShape *sV0AR37 = new TGeoCompositeShape("sV0AR37","sV0AR3b7-sV0ACha7");
1297 TGeoCompositeShape *sV0AR47 = new TGeoCompositeShape("sV0AR47","sV0AR4b7-sV0ACha7");
1298 TGeoVolume *v0L17 = new TGeoVolume("V0L17",sV0AR17,medV0ASci);
1299 TGeoVolume *v0L27 = new TGeoVolume("V0L27",sV0AR27,medV0ASci);
1300 TGeoVolume *v0L37 = new TGeoVolume("V0L37",sV0AR37,medV0ASci);
1301 TGeoVolume *v0L47 = new TGeoVolume("V0L47",sV0AR47,medV0ASci);
1302 v0L17->SetLineColor(kV0AColorSci); v0L27->SetLineColor(kV0AColorSci);
1303 v0L37->SetLineColor(kV0AColorSci); v0L47->SetLineColor(kV0AColorSci);
1304 v0ASci7->AddNode(v0L17,1);
1305 v0ASci7->AddNode(v0L27,1);
1306 v0ASci7->AddNode(v0L37,1);
1307 v0ASci7->AddNode(v0L47,1);
1308
1309 // Bunch of fibers
1310 for (int i=0;i<2;i++) {
1311 v0APts[0+8*i] = -10.0; v0APts[1+8*i] = 13.1;
1312 v0APts[2+8*i] = 10.0; v0APts[3+8*i] = 13.1;
1313 v0APts[4+8*i] = 8.0; v0APts[5+8*i] = -29.0;
1314 v0APts[6+8*i] = -12.0; v0APts[7+8*i] = -12.0;
1315 }
1316 new TGeoArb8("sV0AFib17", 0.01, v0APts);
1317 rot = new TGeoRotation("rot");
1318 rot->RotateX(-2.0);
1319 rot->RotateY(0.0);
1320 rot->RotateZ(248.0);
1321 TGeoCombiTrans *fib17pos = new TGeoCombiTrans("fib17pos", 40.0 - 3.3, -50.0 + 1.5, 0.5, rot);
1322 fib17pos->RegisterYourself();
1323 TGeoCompositeShape *sV0AFib17Hole = new TGeoCompositeShape("sV0AFib17Hole", "sV0AFib17:fib17pos-sV0AFicR57");
1324 TGeoVolume *v0AFib17Hole = new TGeoVolume("V0AFib17Hole",sV0AFib17Hole,medV0AFib);
1325 v0AFib17Hole->SetLineColor(kV0AColorFib);
1326 new TGeoArb8("sV0AFib27", 0.01, v0APts);
1327 rot = new TGeoRotation("rot");
1328 rot->RotateX(2.0);
1329 rot->RotateY(0.0);
1330 rot->RotateZ(248.0);
1331 TGeoCombiTrans *fib27pos = new TGeoCombiTrans("fib27pos", 40.0 - 3.3, -50.0 + 1.5, -0.5, rot);
1332 fib27pos->RegisterYourself();
1333 TGeoCompositeShape *sV0AFib27Hole = new TGeoCompositeShape("sV0AFib27Hole", "sV0AFib27:fib27pos-sV0AFicR57");
1334 TGeoVolume *v0AFib27Hole = new TGeoVolume("V0AFib27Hole",sV0AFib27Hole,medV0AFib);
1335 v0AFib27Hole->SetLineColor(kV0AColorFib);
1336 TGeoVolume *v0AFib7 = new TGeoVolumeAssembly("V0AFib7");
1337 v0AFib7->AddNode(v0AFib17Hole,1);
1338 v0AFib7->AddNode(v0AFib27Hole,1);
1339 v0ASec7->AddNode(v0AFib7,1);
1340
1341 /// Non-sensitive scintilator
1342 new TGeoTubeSeg("sV0AR5S27", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 270.0, 315.0);
1343 TGeoCompositeShape *sV0AR57 = new TGeoCompositeShape("V0AR57","sV0AR5S27 - sV0ACha7");
1344 TGeoVolume *v0AR57 = new TGeoVolume("V0AR57",sV0AR57,medV0ASci);
1345 v0AR57->SetLineColor(kV0AColorSci);
1346 v0ASci7->AddNode(v0AR57,1);
1347 v0ASec7->AddNode(v0ASci7,1);
1348
1349 /// Segment of octagon
1350 for (int i=0;i<2;i++) {
1351 v0APts[0+8*i] = 0.; v0APts[1+8*i] = -fV0AR7*sin654;
1352 v0APts[2+8*i] = 0.; v0APts[3+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
1353 v0APts[4+8*i] = (fV0AR7-fV0AOctH2)*cos654; v0APts[5+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
1354 v0APts[6+8*i] = fV0AR7*cos654; v0APts[7+8*i] = -fV0AR7*sin654;
1355 }
1356 TGeoArb8 *sV0AOct27 = new TGeoArb8("sV0AOct27", (fV0ASciWd+2*fV0AOctWd)/2., v0APts);
1357 TGeoVolume *v0AOct27 = new TGeoVolume("V0AOct27", sV0AOct27,medV0ASup);
1358 v0AOct27->SetLineColor(kV0AColorOct);
1359 TGeoVolume *v0ASup7 = new TGeoVolumeAssembly("V0ASup7");
1360 v0ASup7->AddNode(v0AOct27,1);
1361 v0ASec7->AddNode(v0ASup7,1);
1362
1363 /// Plates
1364 for (int i=0;i<2;i++) {
1365 v0APts[0+8*i] = 0.; v0APts[1+8*i] = -fV0AR7*sin654;
1366 v0APts[2+8*i] = 0.; v0APts[3+8*i] = -fV0AR0;
1367 v0APts[4+8*i] = fV0AR0*cos654; v0APts[5+8*i] = -fV0AR0*sin654;
1368 v0APts[6+8*i] = fV0AR7*cos654; v0APts[7+8*i] = -fV0AR7*sin654;
1369 }
1370 new TGeoArb8("sV0APlaIn7", (fV0APlaWd-2*fV0APlaAl)/2., v0APts);
1371 TGeoCompositeShape *sV0APlaInNailsHoles7 = new TGeoCompositeShape("sV0APlaInNailsHoles7","sV0APlaIn7-sV0ANail1PlaInHole7:pos17");
1372 TGeoVolume *v0APlaInNailsHoles7 = new TGeoVolume("V0APlaInNailsHoles7", sV0APlaInNailsHoles7, medV0APlaIn);
1373 new TGeoArb8("sV0APlaOu7", fV0APlaAl/2., v0APts);
1374 TGeoCompositeShape *sV0APlaOuNailsHoles7 = new TGeoCompositeShape("sV0APlaOuNailsHoles7","sV0APlaOu7-sV0ANail1PlaOuHole7:pos17");
1375 TGeoVolume *v0APlaOuNailsHoles7 = new TGeoVolume("V0APlaOuNailsHoles7", sV0APlaOuNailsHoles7, medV0APlaOu);
1376 v0APlaInNailsHoles7->SetLineColor(kV0AColorPlaIn); v0APlaOuNailsHoles7->SetLineColor(kV0AColorPlaOu);
1377 TGeoVolume *v0APla7 = new TGeoVolumeAssembly("V0APla7");
1378 v0APla7->AddNode(v0APlaInNailsHoles7,1);
1379 v0APla7->AddNode(v0APlaOuNailsHoles7,1,new TGeoTranslation(0,0,(fV0APlaWd-fV0APlaAl)/2.));
1380 v0APla7->AddNode(v0APlaOuNailsHoles7,2,new TGeoTranslation(0,0,-(fV0APlaWd-fV0APlaAl)/2.));
1381 v0ASec7->AddNode(v0APla7,1,new TGeoTranslation(0,0,(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1382 v0ASec7->AddNode(v0APla7,2,new TGeoTranslation(0,0,-(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1383
1384 /// PMBox
1385 TGeoVolume* v0APM7 = new TGeoVolumeAssembly("V0APM7");
1386 new TGeoBBox("sV0APMB17", fV0APMBWd/2., fV0APMBHt/2., fV0APMBTh/2.);
1387 new TGeoBBox("sV0APMB27", fV0APMBWd/2.-fV0APMBWdW, fV0APMBHt/2.-fV0APMBHtW, fV0APMBTh/2.-fV0APMBThW);
1388 TGeoCompositeShape *sV0APMB7 = new TGeoCompositeShape("sV0APMB7","sV0APMB17-sV0APMB27");
1389 TGeoVolume *v0APMB7 = new TGeoVolume("V0APMB7",sV0APMB7, medV0APMAlum);
1390 v0APMB7->SetLineColor(kV0AColorPMA);
1391 v0APM7->AddNode(v0APMB7,1);
1392
1393 /// PMTubes
1394 TGeoTube *sV0APMT17 = new TGeoTube("sV0APMT17", fV0APMTR1, fV0APMTR2, fV0APMTH/2.);
1395 TGeoVolume *v0APMT17 = new TGeoVolume("V0APMT17", sV0APMT17, medV0APMGlass);
1396 TGeoTube *sV0APMT27 = new TGeoTube("sV0APMT27", fV0APMTR3, fV0APMTR4, fV0APMTH/2.);
1397 TGeoVolume *v0APMT27 = new TGeoVolume("V0APMT27", sV0APMT27, medV0APMAlum);
1398 TGeoVolume *v0APMT7 = new TGeoVolumeAssembly("V0APMT7"); // pk si no choca con la 752 o con la 794
1399 TGeoTube *sV0APMTT7 = new TGeoTube("sV0APMTT7", 0., fV0APMTR4, fV0APMTB/2.);
1400 TGeoVolume *v0APMTT7 = new TGeoVolume("V0APMTT7", sV0APMTT7, medV0APMAlum);
1401 v0APMT7->SetLineColor(kV0AColorPMG);
1402 v0APMT27->SetLineColor(kV0AColorPMA);
1403 v0APMTT7->SetLineColor(kV0AColorPMA);
1404 rot = new TGeoRotation("rot", 90, 0, 180, 0, 90, 90);
1405 v0APMT7->AddNode(v0APMT17,1,rot);
1406 v0APMT7->AddNode(v0APMT27,1,rot);
1407 v0APMT7->AddNode(v0APMTT7,1,new TGeoCombiTrans(0,(fV0APMTH+fV0APMTB)/2.,0,rot));
1408 v0APM7->AddNode(v0APMT7, 1, new TGeoTranslation(-1.5*autoShift, 0, 0));
1409 v0APM7->AddNode(v0APMT7, 2, new TGeoTranslation(-0.5*autoShift, 0, 0));
1410 v0APM7->AddNode(v0APMT7, 3, new TGeoTranslation(+0.5*autoShift, 0, 0));
1411 v0APM7->AddNode(v0APMT7, 4, new TGeoTranslation(+1.5*autoShift, 0, 0));
1412
1413 /// PM
1414 rot = new TGeoRotation("rot");
1415 rot->RotateX(-90+30);
1416 rot->RotateY(0);
1417 rot->RotateZ(65+3);
1418 double shiftZ7 = fV0APMBHt/2. * cosAngPMB
1419 - ( fV0ASciWd + 2 * fV0AOctWd + 2 * fV0APlaWd )/2. - fV0APMBTh/2. * sinAngPMB;
1420 double shiftR7 = fV0AR6 + fV0AR1 + fV0AOctWd + fV0APlaAl/3.;
1421 v0ASec7->AddNode(v0APM7,1, new TGeoCombiTrans( shiftR7*cos45+1.3, -shiftR7*sin45, shiftZ7, rot));
1422
1423 // Aluminium nail
1424 TGeoTube *sV0ANail71 = new TGeoTube("sV0ANail71", 0.0, 0.4, 5.09/2.);
1425 TGeoVolume *v0ANail71 = new TGeoVolume("V0ANail71", sV0ANail71, medV0APMAlum);
1426 v0ANail71->SetLineColor(kV0AColorPMA);// this is the color for aluminium
1427 v0ASec7->AddNode(v0ANail71,1,new TGeoTranslation(0.51,-42.9,0.0));
1428 TGeoTube *sV0ANail72 = new TGeoTube("sV0ANail72", 0.0, 0.4, 5.09/2.);
1429 TGeoVolume *v0ANail72 = new TGeoVolume("V0ANail72", sV0ANail72, medV0APMAlum);
1430 v0ANail72->SetLineColor(kV0AColorPMA);
1431 v0ASec7->AddNode(v0ANail72,1,new TGeoTranslation(30.05,-30.79,0.0));
1432
1433 // Support
1434 TGeoBBox *sV0ASuppbr = new TGeoBBox("sV0ASuppbr", 2.0, 18.13, fV0ASciWd/2.);
1435 TGeoVolume *v0ASuppbr = new TGeoVolume("V0ASuppbr", sV0ASuppbr, medV0ASup);
1436 v0ASuppbr->SetLineColor(kV0AColorOct);
1437 v0ASec7->AddNode(v0ASuppbr,1,new TGeoTranslation(2.0,-63.64,0.0));
1438
1439 // Adding sector to v0LE volume
1440 v0LE->AddNode(v0ASec7,1);
1441
1442
1443 //Definition of sector 8
1444 TGeoVolume *v0ASec8 = new TGeoVolumeAssembly("V0ASec8");
1445
1446 /// For boolean sustraction
1447 for (int i=0;i<2;i++) {
1448 v0APts[0+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[1+8*i] = -2*preShape;
1449 v0APts[2+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[3+8*i] = 0.0;
1450 v0APts[4+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[5+8*i] = 0.0;
1451 v0APts[6+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[7+8*i] = -2*preShape;
1452 }
1453 new TGeoArb8("sV0ACha18",fV0ASciWd/1.5,v0APts);
1454 for (int i=0;i<2;i++) {
1455 v0APts[0+8*i] = (fV0AR0-fV0AFraWd/2.)*sin45-preShape;
1456 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
1457 v0APts[2+8*i] = fV0AR0*sin45-fV0AFraWd/2.-preShape;
1458 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd)*sin45+preShape;
1459 v0APts[4+8*i] = (fV0AR4+3*fV0AFraWd/2.)*sin45+preShape;
1460 v0APts[5+8*i] = -fV0AR4*sin45-preShape;
1461 v0APts[6+8*i] = (fV0AR4+fV0AFraWd)*sin45+preShape;
1462 v0APts[7+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45-2.*preShape;
1463 }
1464 new TGeoArb8("sV0ACha28", fV0ASciWd/2.+2.*preShape, v0APts);
1465 new TGeoCompositeShape("sV0ACha128","sV0ACha18+sV0ACha28");
1466 new TGeoTube("sV0ANail18Hole", 0.0, 0.4, 1.65);
1467 TGeoTranslation *pos18 = new TGeoTranslation("pos18",42.9,-.51,0.0);
1468 pos18->RegisterYourself();
1469 new TGeoTube("sV0ANail28Hole", 0.0, 0.4, 1.65);
1470 TGeoTranslation *pos28 = new TGeoTranslation("pos28",30.8,-30.04,0.0);
1471 pos28->RegisterYourself();
1472 TGeoTranslation *pos38 = new TGeoTranslation("pos38",30.05,-30.79,0.0);
1473 pos38->RegisterYourself();
1474 new TGeoCompositeShape("sV0ANailsHoles8","sV0ANail18Hole:pos18+sV0ANail28Hole:pos28");
1475 new TGeoCompositeShape("sV0ACha8","sV0ACha128+sV0ANailsHoles8");
1476 new TGeoTubeSeg("sV0AFicR58", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2. +2*preShape, 315.0, 360.0);
1477 new TGeoTube("sV0ANail1PlaInHole8", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
1478 new TGeoTube("sV0ANail2PlaInHole8", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
1479 new TGeoTube("sV0ANail3PlaInHole8", 0.0, 0.4, (fV0APlaWd-2*fV0APlaAl)/2.);
1480 new TGeoCompositeShape("sV0ANailsPlaInHoles8","sV0ANail1PlaInHole8:pos18+sV0ANail2PlaInHole8:pos28+sV0ANail3PlaInHole8:pos38");
1481 new TGeoTube("sV0ANail1PlaOuHole8", 0.0, 0.4, (fV0APlaAl)/2.);
1482 new TGeoTube("sV0ANail2PlaOuHole8", 0.0, 0.4, (fV0APlaAl)/2.);
1483 new TGeoTube("sV0ANail3PlaOuHole8", 0.0, 0.4, (fV0APlaAl)/2.);
1484 new TGeoCompositeShape("sV0ANailsPlaOuHoles8","sV0ANail1PlaOuHole8:pos18+sV0ANail2PlaOuHole8:pos28+sV0ANail3PlaOuHole8:pos38");
1485
1486 /// Frame
1487 TGeoVolume *v0AFra8 = new TGeoVolumeAssembly("V0AFra8");
1488 for (int i=0;i<2;i++) {
1489 v0APts[0+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[1+8*i] = 0.0;
1490 v0APts[2+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[3+8*i] = 0.0;
1491 v0APts[4+8*i] = fV0AR4+fV0AFraWd/2.; v0APts[5+8*i] = -fV0AFraWd/8.;
1492 v0APts[6+8*i] = fV0AR0-fV0AFraWd/2.; v0APts[7+8*i] = -fV0AFraWd/8.;
1493 }
1494 TGeoArb8 *sV0AFraB18 = new TGeoArb8("sV0AFraB18",fV0ASciWd/2.,v0APts);
1495 TGeoVolume *v0AFraB18 = new TGeoVolume("V0AFraB18",sV0AFraB18,medV0AFra);
1496 for (int i=0;i<2;i++) {
1497 v0APts[0+8*i] = (fV0AR0-fV0AFraWd/4.)*sin45;
1498 v0APts[1+8*i] = -(fV0AR0-fV0AFraWd/2.)*sin45;
1499 v0APts[2+8*i] = fV0AR0*sin45-fV0AFraWd/2.;
1500 v0APts[3+8*i] = -(fV0AR0-fV0AFraWd)*sin45;
1501 v0APts[4+8*i] = (fV0AR4+3*fV0AFraWd/2.)*sin45/2.;
1502 v0APts[5+8*i] = -fV0AR4*sin45/2.;
1503 v0APts[6+8*i] = (fV0AR4+fV0AFraWd)*sin45/2.;
1504 v0APts[7+8*i] = -(fV0AR4+fV0AFraWd/2.)*sin45/2.;
1505 }
1506 TGeoArb8 *sV0AFraB28 = new TGeoArb8("sV0AFraB28", fV0ASciWd/2., v0APts);
1507 TGeoVolume *v0AFraB28 = new TGeoVolume("V0AFraB28",sV0AFraB28,medV0AFra);
1508 v0AFraB18->SetLineColor(kV0AColorFra); v0AFraB28->SetLineColor(kV0AColorFra);
1509 v0AFra8->AddNode(v0AFraB18,1);
1510 v0AFra8->AddNode(v0AFraB28,1); // Prefer 2 GeoObjects insted of 3 GeoMovements
1511 new TGeoTubeSeg( "sV0AFraR1b8", fV0AR0-fV0AFraWd/2.,
1512 fV0AR0+fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1513 new TGeoTubeSeg( "sV0AFraR2b8", fV0AR1-fV0AFraWd/2.,
1514 fV0AR1+fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1515 new TGeoTubeSeg( "sV0AFraR3b8", fV0AR2-fV0AFraWd/2.,
1516 fV0AR2+fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1517 new TGeoTubeSeg( "sV0AFraR4b8", fV0AR3-fV0AFraWd/2.,
1518 fV0AR3+fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1519 new TGeoTubeSeg( "sV0AFraR5b8", fV0AR4-fV0AFraWd/2.,
1520 fV0AR4+fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1521 TGeoCompositeShape *sV0AFraR18 = new TGeoCompositeShape("sV0AFraR18","sV0AFraR1b8-sV0ACha8");
1522 TGeoCompositeShape *sV0AFraR28 = new TGeoCompositeShape("sV0AFraR28","sV0AFraR2b8-sV0ACha8");
1523 TGeoCompositeShape *sV0AFraR38 = new TGeoCompositeShape("sV0AFraR38","sV0AFraR3b8-sV0ACha8");
1524 TGeoCompositeShape *sV0AFraR48 = new TGeoCompositeShape("sV0AFraR48","sV0AFraR4b8-sV0ACha8");
1525 TGeoCompositeShape *sV0AFraR58 = new TGeoCompositeShape("sV0AFraR58","sV0AFraR5b8-sV0ACha8");
1526 TGeoVolume *v0AFraR18 = new TGeoVolume("V0AFraR18",sV0AFraR18,medV0AFra);
1527 TGeoVolume *v0AFraR28 = new TGeoVolume("V0AFraR28",sV0AFraR28,medV0AFra);
1528 TGeoVolume *v0AFraR38 = new TGeoVolume("V0AFraR38",sV0AFraR38,medV0AFra);
1529 TGeoVolume *v0AFraR48 = new TGeoVolume("V0AFraR48",sV0AFraR48,medV0AFra);
1530 TGeoVolume *v0AFraR58 = new TGeoVolume("V0AFraR58",sV0AFraR58,medV0AFra);
1531 v0AFraR18->SetLineColor(kV0AColorFra); v0AFraR28->SetLineColor(kV0AColorFra);
1532 v0AFraR38->SetLineColor(kV0AColorFra); v0AFraR48->SetLineColor(kV0AColorFra);
1533 v0AFraR58->SetLineColor(kV0AColorFra);
1534 v0AFra8->AddNode(v0AFraR18,1);
1535 v0AFra8->AddNode(v0AFraR28,1);
1536 v0AFra8->AddNode(v0AFraR38,1);
1537 v0AFra8->AddNode(v0AFraR48,1);
1538 v0AFra8->AddNode(v0AFraR58,1);
1539 v0ASec8->AddNode(v0AFra8,1);
1540
1541 /// Sensitive scintilator
1542 TGeoVolume *v0ASci8 = new TGeoVolumeAssembly("V0ASci8");
1543 new TGeoTubeSeg( "sV0AR1b8", fV0AR0+fV0AFraWd/2.,
1544 fV0AR1-fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1545 new TGeoTubeSeg( "sV0AR2b8", fV0AR1+fV0AFraWd/2.,
1546 fV0AR2-fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1547 new TGeoTubeSeg( "sV0AR3b8", fV0AR2+fV0AFraWd/2.,
1548 fV0AR3-fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1549 new TGeoTubeSeg( "sV0AR4b8", fV0AR3+fV0AFraWd/2.,
1550 fV0AR4-fV0AFraWd/2., fV0ASciWd/2., 315.0, 360.0);
1551 TGeoCompositeShape *sV0AR18 = new TGeoCompositeShape("sV0AR18","sV0AR1b8-sV0ACha8");
1552 TGeoCompositeShape *sV0AR28 = new TGeoCompositeShape("sV0AR28","sV0AR2b8-sV0ACha8");
1553 TGeoCompositeShape *sV0AR38 = new TGeoCompositeShape("sV0AR38","sV0AR3b8-sV0ACha8");
1554 TGeoCompositeShape *sV0AR48 = new TGeoCompositeShape("sV0AR48","sV0AR4b8-sV0ACha8");
1555 TGeoVolume *v0L18 = new TGeoVolume("V0L18",sV0AR18,medV0ASci);
1556 TGeoVolume *v0L28 = new TGeoVolume("V0L28",sV0AR28,medV0ASci);
1557 TGeoVolume *v0L38 = new TGeoVolume("V0L38",sV0AR38,medV0ASci);
1558 TGeoVolume *v0L48 = new TGeoVolume("V0L48",sV0AR48,medV0ASci);
1559 v0L18->SetLineColor(kV0AColorSci); v0L28->SetLineColor(kV0AColorSci);
1560 v0L38->SetLineColor(kV0AColorSci); v0L48->SetLineColor(kV0AColorSci);
1561 v0ASci8->AddNode(v0L18,1);
1562 v0ASci8->AddNode(v0L28,1);
1563 v0ASci8->AddNode(v0L38,1);
1564 v0ASci8->AddNode(v0L48,1);
1565
1566 /// Segment of octagon
1567 for (int i=0;i<2;i++) {
1568 v0APts[0+8*i] = fV0AR6; v0APts[1+8*i] = 0.;
1569 v0APts[2+8*i] = fV0AR7*cos654; v0APts[3+8*i] = -fV0AR7*sin654;
1570 v0APts[4+8*i] = (fV0AR7-fV0AOctH2)*cos654; v0APts[5+8*i] = -(fV0AR7-fV0AOctH2)*sin654;
1571 v0APts[6+8*i] = fV0AR6-fV0AOctH2; v0APts[7+8*i] = 0.;
1572 }
1573 TGeoArb8 *sV0AOct28 = new TGeoArb8("sV0AOct28", (fV0ASciWd+2*fV0AOctWd)/2., v0APts);
1574 TGeoVolume *v0AOct28 = new TGeoVolume("V0AOct28", sV0AOct28,medV0ASup);
1575 v0AOct28->SetLineColor(kV0AColorOct);
1576 TGeoVolume *v0ASup8 = new TGeoVolumeAssembly("V0ASup8");
1577 v0ASup8->AddNode(v0AOct28,1);
1578 v0ASec8->AddNode(v0ASup8,1);
1579
1580 //Bunch of fibers
1581 v0APts[ 0] = v0APts[ 2] = -14.0;
1582 v0APts[ 1] = v0APts[ 7] = (fV0ASciWd+fV0AOctWd)/2.-0.01;
1583 v0APts[ 3] = v0APts[ 5] = (fV0ASciWd+fV0AOctWd)/2.+0.01;
1584 v0APts[ 4] = v0APts[ 6] = +14.0;
1585 v0APts[ 8] = v0APts[10] = -10.0;
1586 v0APts[ 9] = v0APts[15] = 0.;
1587 v0APts[11] = v0APts[13] = 0.25;
1588 v0APts[12] = v0APts[14] = +10.0;
1589 new TGeoArb8("sV0AFib18", 11.8, v0APts);
1590 rot = new TGeoRotation("rot");
1591 rot->RotateX(-90);
1592 rot->RotateZ(-90-22.5);
1593 TGeoCombiTrans *fib18pos = new TGeoCombiTrans("fib18pos", (fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. - 3.3, -(fV0AR6-fV0AOctH2+fV0AR5)*sin225/2. + 1.5, 0, rot);
1594 fib18pos->RegisterYourself();
1595 TGeoCompositeShape *sV0AFib18Hole = new TGeoCompositeShape("sV0AFib18Hole", "sV0AFib18:fib18pos-sV0AFicR58");
1596 TGeoVolume *v0AFib18Hole = new TGeoVolume("V0AFib18",sV0AFib18Hole,medV0AFib);
1597 v0AFib18Hole->SetLineColor(kV0AColorFib);
1598 new TGeoArb8("sV0AFib28", 11.8, v0APts);
1599 rot = new TGeoRotation("rot");
1600 rot->RotateX(-90);
1601 rot->RotateY(180);
1602 rot->RotateZ(-90-22.5);
1603 TGeoCombiTrans *fib28pos = new TGeoCombiTrans("fib28pos", (fV0AR6-fV0AOctH2+fV0AR5)*cos225/2. - 3.3, -(fV0AR6-fV0AOctH2+fV0AR5)*sin225/2. + 1.5, 0, rot);
1604 fib28pos->RegisterYourself();
1605 TGeoCompositeShape *sV0AFib28Hole = new TGeoCompositeShape("sV0AFib28Hole", "sV0AFib28:fib28pos-sV0AFicR58");
1606 TGeoVolume *v0AFib28Hole = new TGeoVolume("V0AFib28Hole",sV0AFib28Hole,medV0AFib);
1607 v0AFib28Hole->SetLineColor(kV0AColorFib);
1608 TGeoVolume *v0AFib8 = new TGeoVolumeAssembly("V0AFib8");
1609 v0AFib8->AddNode(v0AFib18Hole,1);
1610 v0AFib8->AddNode(v0AFib28Hole,1);
1611 v0ASec8->AddNode(v0AFib8,1);
1612
1613 /// Non-sensitive scintilator
1614 new TGeoTubeSeg("sV0AR5S28", fV0AR4+fV0AFraWd/2., fV0AR4 + fV0AR0, fV0ASciWd/2.+2*preShape, 315.0, 360.0);
1615 TGeoCompositeShape *sV0AR58 = new TGeoCompositeShape("V0AR58","sV0AR5S28 - sV0ACha8");
1616 TGeoVolume *v0AR58 = new TGeoVolume("V0AR58",sV0AR58,medV0ASci);
1617 v0AR58->SetLineColor(kV0AColorSci);
1618 v0ASci8->AddNode(v0AR58,1);
1619 v0ASec8->AddNode(v0ASci8,1);
1620
1621 /// Plates
1622 for (int i=0;i<2;i++) {
1623 v0APts[0+8*i] = fV0AR0; v0APts[1+8*i] = 0.;
1624 v0APts[2+8*i] = fV0AR6; v0APts[3+8*i] = 0.;
1625 v0APts[4+8*i] = fV0AR7*cos654; v0APts[5+8*i] = -fV0AR7*sin654;
1626 v0APts[6+8*i] = fV0AR0*cos654; v0APts[7+8*i] = -fV0AR0*sin654;
1627 }
1628 new TGeoArb8("sV0APlaIn8", (fV0APlaWd-2*fV0APlaAl)/2., v0APts);
1629 TGeoCompositeShape *sV0APlaInNailsHoles8 = new TGeoCompositeShape("sV0APlaInNailsHoles8","sV0APlaIn8-sV0ANailsPlaInHoles8");
1630 TGeoVolume *v0APlaInNailsHoles8 = new TGeoVolume("V0APlaInNailsHoles8", sV0APlaInNailsHoles8, medV0APlaIn);
1631 new TGeoArb8("sV0APlaOu8", fV0APlaAl/2., v0APts);
1632 TGeoCompositeShape *sV0APlaOuNailsHoles8 = new TGeoCompositeShape("sV0APlaOuNailsHoles8","sV0APlaOu8-sV0ANailsPlaOuHoles8");
1633 TGeoVolume *v0APlaOuNailsHoles8 = new TGeoVolume("V0APlaOuNailsHoles8", sV0APlaOuNailsHoles8, medV0APlaOu);
1634 v0APlaInNailsHoles8->SetLineColor(kV0AColorPlaIn); v0APlaOuNailsHoles8->SetLineColor(kV0AColorPlaOu);
1635 TGeoVolume *v0APla8 = new TGeoVolumeAssembly("V0APla8");
1636 v0APla8->AddNode(v0APlaInNailsHoles8,1);
1637 v0APla8->AddNode(v0APlaOuNailsHoles8,1,new TGeoTranslation(0,0,(fV0APlaWd-fV0APlaAl)/2.));
1638 v0APla8->AddNode(v0APlaOuNailsHoles8,2,new TGeoTranslation(0,0,-(fV0APlaWd-fV0APlaAl)/2.));
1639 v0ASec8->AddNode(v0APla8,1,new TGeoTranslation(0,0,(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1640 v0ASec8->AddNode(v0APla8,2,new TGeoTranslation(0,0,-(fV0ASciWd+2*fV0AOctWd+fV0APlaWd)/2.));
1641
1642 /// PMBox
1643 TGeoVolume* v0APM8 = new TGeoVolumeAssembly("V0APM1");
1644 new TGeoBBox("sV0APMB18", fV0APMBWd/2., fV0APMBHt/2., fV0APMBTh/2.);
1645 new TGeoBBox("sV0APMB28", fV0APMBWd/2.-fV0APMBWdW, fV0APMBHt/2.-fV0APMBHtW, fV0APMBTh/2.-fV0APMBThW);
1646 TGeoCompositeShape *sV0APMB8 = new TGeoCompositeShape("sV0APMB8","sV0APMB18-sV0APMB28");
1647 TGeoVolume *v0APMB8 = new TGeoVolume("V0APMB8",sV0APMB8, medV0APMAlum);
1648 v0APMB8->SetLineColor(kV0AColorPMA);
1649 v0APM8->AddNode(v0APMB8,1);
1650
1651 /// PMTubes
1652 TGeoTube *sV0APMT18 = new TGeoTube("sV0APMT18", fV0APMTR1, fV0APMTR2, fV0APMTH/2.);
1653 TGeoVolume *v0APMT18 = new TGeoVolume("V0APMT18", sV0APMT18, medV0APMGlass);
1654 TGeoTube *sV0APMT28 = new TGeoTube("sV0APMT28", fV0APMTR3, fV0APMTR4, fV0APMTH/2.);
1655 TGeoVolume *v0APMT28 = new TGeoVolume("V0APMT28", sV0APMT28, medV0APMAlum);
1656 TGeoVolume *v0APMT8 = new TGeoVolumeAssembly("V0APMT8");
1657 TGeoTube *sV0APMTT8 = new TGeoTube("sV0APMTT8", 0., fV0APMTR4, fV0APMTB/2.);
1658 TGeoVolume *v0APMTT8 = new TGeoVolume("V0APMTT8", sV0APMTT8, medV0APMAlum);
1659 v0APMT8->SetLineColor(kV0AColorPMG);
1660 v0APMT28->SetLineColor(kV0AColorPMA);
1661 v0APMTT8->SetLineColor(kV0AColorPMA);
1662 rot = new TGeoRotation("rot", 90, 0, 180, 0, 90, 90);
1663 v0APMT8->AddNode(v0APMT18,1,rot);
1664 v0APMT8->AddNode(v0APMT28,1,rot);
1665 v0APMT8->AddNode(v0APMTT8,1,new TGeoCombiTrans(0,(fV0APMTH+fV0APMTB)/2.,0,rot));
1666 double autoShift8 = (fV0APMBWd-2*fV0APMBWdW)/4.;
1667 v0APM8->AddNode(v0APMT8, 1, new TGeoTranslation(-1.5*autoShift8, 0, 0));
1668 v0APM8->AddNode(v0APMT8, 2, new TGeoTranslation(-0.5*autoShift8, 0, 0));
1669 v0APM8->AddNode(v0APMT8, 3, new TGeoTranslation(+0.5*autoShift8, 0, 0));
1670 v0APM8->AddNode(v0APMT8, 4, new TGeoTranslation(+1.5*autoShift8, 0, 0));
1671
1672 /// PM
1673 rot = new TGeoRotation("rot");
1674 rot->RotateX(-90+30);
1675 rot->RotateY(0);
1676 rot->RotateZ(65+3);
1677 double shiftZ8 = fV0APMBHt/2. * cosAngPMB
1678 - ( fV0ASciWd + 2 * fV0AOctWd + 2 * fV0APlaWd )/2. - fV0APMBTh/2. * sinAngPMB;
1679 double shiftR8 = fV0AR6 + fV0AOctH2 + fV0APlaAl;
1680 v0ASec8->AddNode(v0APM8,1, new TGeoCombiTrans( shiftR8*cos225 + 1.3, -shiftR8*sin225, shiftZ8, rot));
1681
1682 // Aluminium nails
1683 TGeoTube *sV0ANail81 = new TGeoTube("sV0ANail81", 0.0, 0.4, 5.09/2.);
1684 TGeoVolume *v0ANail81 = new TGeoVolume("V0ANail81", sV0ANail81, medV0APMAlum);
1685 v0ANail81->SetLineColor(kV0AColorPMA);// this is the color for aluminium
1686 v0ASec8->AddNode(v0ANail81,1,new TGeoTranslation(42.9,-.51,0.0));
1687 TGeoTube *sV0ANail82 = new TGeoTube("sV0ANail82", 0.0, 0.4, 5.09/2.);
1688 TGeoVolume *v0ANail82 = new TGeoVolume("V0ANail82", sV0ANail82, medV0APMAlum);
1689 v0ANail82->SetLineColor(kV0AColorPMA);
1690 v0ASec8->AddNode(v0ANail82,1,new TGeoTranslation(30.8,-30.04,0.0));
1691
1692 // Adding sector to v0LE volume
1693 v0LE->AddNode(v0ASec8, 1);
1694
1695
1696 // Adding detectors to top volume
1697 TGeoVolume *vZERO = new TGeoVolumeAssembly("VZERO");
1698 vZERO->AddNode(v0RI,1,new TGeoTranslation(0, 0, -zdet));
1699 vZERO->AddNode(v0LE,1,new TGeoTranslation(0, 0, +327.5));
1700 top->AddNode(vZERO,1);
1701}
1702
1703//_____________________________________________________________________________
1704void AliVZEROv7::AddAlignableVolumes() const
1705{
1706 //
1707 // Create entries for alignable volumes associating the symbolic volume
1708 // name with the corresponding volume path. Needs to be syncronized with
1709 // eventual changes in the geometry.
1710 //
1711 TString vpC = "/ALIC_1/VZERO_1/V0RI_1";
1712 TString vpA = "/ALIC_1/VZERO_1/V0LE_1";
1713 TString snC = "VZERO/V0C";
1714 TString snA = "VZERO/V0A";
1715
1716 if(!gGeoManager->SetAlignableEntry(snC.Data(),vpC.Data()))
1717 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", snC.Data(),vpC.Data()));
1718 if(!gGeoManager->SetAlignableEntry(snA.Data(),vpA.Data()))
1719 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", snA.Data(),vpA.Data()));
1720
1721}
1722
1723//_____________________________________________________________________________
1724void AliVZEROv7::CreateMaterials()
1725{
1726
1727// Creates materials used for geometry
1728
1729 AliDebug(2,"Create materials");
1730 // Parameters for simulation scope
1731 Int_t fieldType = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); // Field type
1732 Double_t maxField = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); // Field max.
1733 Double_t maxBending = 10; // Max Angle
1734 Double_t maxStepSize = 0.01; // Max step size
1735 Double_t maxEnergyLoss = 1; // Max Delta E
1736 Double_t precision = 0.003; // Precision
1737 Double_t minStepSize = 0.003; // Minimum step size
1738
1739 Int_t id;
1740 Double_t a, z, radLength, absLength;
1741 Float_t density, as[4], zs[4], ws[4];
1742
1743// Parameters for V0CPrePlates: Aluminium
1744 a = 26.98;
1745 z = 13.00;
1746 density = 2.7;
1747 radLength = 8.9;
1748 absLength = 37.2;
1749 id = 2;
1750 AliMaterial( id, "V0CAlu", a, z, density, radLength, absLength, 0, 0);
1751 AliMedium(id, "V0CAlu", id, 1, fieldType, maxField, maxBending, maxStepSize,
1752 maxEnergyLoss, precision, minStepSize);
1753
1754// Parameters for V0CPlates: Carbon
1755 a = 12.01;
1756 z = 6.00;
1757 density = 2.265;
1758 radLength = 18.8;
1759 absLength = 49.9;
1760 id = 3;
1761 AliMaterial(id, "V0CCar", a, z, density, radLength, absLength, 0, 0);
1762 AliMedium(id, "V0CCar", id, 1, fieldType, maxField, maxBending, maxStepSize,
1763 maxEnergyLoss, precision, minStepSize);
1764
1765// Parameters for V0Cscintillator: BC408
1766 as[0] = 1.00794; as[1] = 12.011;
1767 zs[0] = 1.; zs[1] = 6.;
1768 ws[0] = 1.; ws[1] = 1.;
1769 density = 1.032;
1770 id = 4;
1771 AliMixture(id, "V0CSci", as, zs, density, -2, ws);
1772 AliMedium(id,"V0CSci", id, 1, fieldType, maxField, maxBending, maxStepSize,
1773 maxEnergyLoss, precision, minStepSize);
1774
1775// Parameters for V0Ascintilator: BC404
1776 as[0] = 1.00794; as[1] = 12.011;
1777 zs[0] = 1.; zs[1] = 6.;
1778 ws[0] = 5.21; ws[1] = 4.74;
1779 density = 1.032;
1780 id = 5;
1781 AliMixture(id, "V0ASci", as, zs, density, -2, ws);
1782 AliMedium(id, "V0ASci", id, 1, fieldType, maxField, maxBending, maxStepSize,
1783 maxEnergyLoss, precision, minStepSize);
1784
1785// Parameters for V0ALuc: Lucita but for the simulation BC404
1786 as[0] = 1.00794; as[1] = 12.011;
1787 zs[0] = 1.; zs[1] = 6.;
1788 ws[0] = 5.21; ws[1] = 4.74;
1789 density = 1.032;
1790 id = 6;
1791 AliMixture(id, "V0ALuc", as, zs, density, -2, ws);
1792 AliMedium(id, "V0ALuc", id, 1, fieldType, maxField, maxBending, maxStepSize,
1793 maxEnergyLoss, precision, minStepSize);
1794
1795// Parameters for V0Aplate: EuroComposite - EC-PI 626 PS - AlMg3
1796 as[0] = 26.982; as[1] = 24.305;
1797 zs[0] = 13.; zs[1] = 12.;
1798 ws[0] = 1.; ws[1] = 3.;
1799 density = 3.034;
1800 id = 7;
1801 AliMixture(id, "V0APlaOu", as, zs, density, -2, ws);
1802 AliMedium(id, "V0APlaOu", id, 1, fieldType, maxField, maxBending, maxStepSize,
1803 maxEnergyLoss, precision, minStepSize);
1804
1805// Parameters for V0Aplate: EuroComposite - EC-PI 626 PS - EC-PI 6.4-42
1806 as[0] = 1.00794; as[1] = 12.011;
1807 zs[0] = 1.; zs[1] = 6.;
1808 ws[0] = 5.21; ws[1] = 4.74;
1809 density = 0.042;
1810 id = 8;
1811 AliMixture(id, "V0APlaIn", as, zs, density, -2, ws);
1812 AliMedium(id, "V0APlaIn", id, 1, fieldType, maxField, maxBending, maxStepSize,
1813 maxEnergyLoss, precision, minStepSize);
1814
1815// Parameters for V0Afiber: BC9929AMC Plastic Scintillating Fiber from Saint-Gobain
1816 as[0] = 1.00794; as[1] = 12.011;
1817 zs[0] = 1.; zs[1] = 6.;
1818 ws[0] = 4.82; ws[1] = 4.85;
1819 density = 1.05;
1820 id = 9;
1821 AliMixture(id, "V0AFib", as, zs, density, -2, ws);
1822 AliMedium(id, "V0AFib", id, 1, fieldType, maxField, maxBending, maxStepSize,
1823 maxEnergyLoss, precision, minStepSize);
1824
1825// Parameters for V0APMA: Aluminium
1826 a = 26.98;
1827 z = 13.00;
1828 density = 2.7;
1829 radLength = 8.9;
1830 absLength = 37.2;
1831 id = 10;
1832 AliMaterial(id, "V0APMA", a, z, density, radLength, absLength, 0, 0);
1833 AliMedium(id, "V0APMA", id, 1, fieldType, maxField, maxBending, maxStepSize,
1834 maxEnergyLoss, precision, minStepSize);
1835
1836// Parameters for V0APMG: Glass for the simulation Aluminium
1837 a = 26.98;
1838 z = 13.00;
1839 density = 2.7;
1840 radLength = 8.9;
1841 absLength = 37.2;
1842 id = 11;
1843 AliMaterial(id, "V0APMG", a, z, density, radLength, absLength, 0, 0);
1844 AliMedium(id, "V0APMG", id, 1, fieldType, maxField, maxBending, maxStepSize,
1845 maxEnergyLoss, precision, minStepSize);
1846}
1847
1848//_____________________________________________________________________________
1849void AliVZEROv7::DrawModule() const
1850{
1851// Drawing is done in DrawVZERO.C
1852
1853 AliDebug(2,"DrawModule");
1854}
1855
1856
1857//_____________________________________________________________________________
1858void AliVZEROv7::DrawGeometry()
1859{
1860// Drawing of V0 geometry done in DrawV0.C
1861
1862 AliDebug(2,"DrawGeometry");
1863}
1864
1865//_____________________________________________________________________________
1866void AliVZEROv7::Init()
1867{
1868// Initialises version of the VZERO Detector given in Config
1869// Just prints an information message
1870
1871// AliInfo(Form("VZERO version %d initialized \n",IsVersion()));
1872
1873 AliDebug(1,"VZERO version 7 initialized");
1874 AliVZERO::Init();
1875}
1876
1877//_____________________________________________________________________________
1878void AliVZEROv7::StepManager()
1879{
1880// Step Manager, called at each step
1881
1882 Int_t copy;
1883 static Int_t vol[4];
1884 static Float_t hits[21];
1885 static Float_t eloss, tlength;
1886 static Int_t nPhotonsInStep = 0;
1887 static Int_t nPhotons = 0;
1888 static Int_t numStep = 0;
1889 Int_t ringNumber;
1890 Float_t destep, step;
1891 numStep += 1;
1892
1893 // We keep only charged tracks :
1894 if ( !gMC->TrackCharge() || !gMC->IsTrackAlive() ) return;
1895
1896 vol[0] = gMC->CurrentVolOffID(1, vol[1]);
1897 vol[2] = gMC->CurrentVolID(copy);
1898 vol[3] = copy;
1899 static Int_t idV0R1 = gMC->VolId("V0R1");
1900 static Int_t idV0L1 = gMC->VolId("V0L1");
1901 static Int_t idV0L15 = gMC->VolId("V0L15");
1902 static Int_t idV0L16 = gMC->VolId("V0L16");
1903 static Int_t idV0L17 = gMC->VolId("V0L17");
1904 static Int_t idV0L18 = gMC->VolId("V0L18");
1905 static Int_t idV0R2 = gMC->VolId("V0R2");
1906 static Int_t idV0L2 = gMC->VolId("V0L2");
1907 static Int_t idV0L25 = gMC->VolId("V0L25");
1908 static Int_t idV0L26 = gMC->VolId("V0L26");
1909 static Int_t idV0L27 = gMC->VolId("V0L27");
1910 static Int_t idV0L28 = gMC->VolId("V0L28");
1911 static Int_t idV0R3 = gMC->VolId("V0R3");
1912 static Int_t idV0L3 = gMC->VolId("V0L3");
1913 static Int_t idV0L35 = gMC->VolId("V0L35");
1914 static Int_t idV0L36 = gMC->VolId("V0L36");
1915 static Int_t idV0L37 = gMC->VolId("V0L37");
1916 static Int_t idV0L38 = gMC->VolId("V0L38");
1917 static Int_t idV0R4 = gMC->VolId("V0R4");
1918 static Int_t idV0L4 = gMC->VolId("V0L4");
1919 static Int_t idV0L45 = gMC->VolId("V0L45");
1920 static Int_t idV0L46 = gMC->VolId("V0L46");
1921 static Int_t idV0L47 = gMC->VolId("V0L47");
1922 static Int_t idV0L48 = gMC->VolId("V0L48");
1923 static Int_t idV0R5 = gMC->VolId("V0R5");
1924 static Int_t idV0R6 = gMC->VolId("V0R6");
1925 bool hitOnV0C = true;
1926 double lightYield;
1927 double lightAttenuation;
1928 double nMeters;
1929 double fibToPhot;
1930 if ( gMC->CurrentVolID(copy) == idV0R1 || gMC->CurrentVolID(copy) == idV0L1 || gMC->CurrentVolID(copy) == idV0L15 || gMC->CurrentVolID(copy) == idV0L16 || gMC->CurrentVolID(copy) == idV0L17 || gMC->CurrentVolID(copy) == idV0L18 )
1931 ringNumber = 1;
1932 else if ( gMC->CurrentVolID(copy) == idV0R2 || gMC->CurrentVolID(copy) == idV0L2 || gMC->CurrentVolID(copy) == idV0L25 || gMC->CurrentVolID(copy) == idV0L26 || gMC->CurrentVolID(copy) == idV0L27 || gMC->CurrentVolID(copy) == idV0L28 )
1933 ringNumber = 2;
1934 else if ( gMC->CurrentVolID(copy) == idV0R3 || gMC->CurrentVolID(copy) == idV0R4
1935 || gMC->CurrentVolID(copy) == idV0L3 || gMC->CurrentVolID(copy) == idV0L35 || gMC->CurrentVolID(copy) == idV0L36 || gMC->CurrentVolID(copy) == idV0L37 || gMC->CurrentVolID(copy) == idV0L38 ) ringNumber = 3;
1936 else if ( gMC->CurrentVolID(copy) == idV0R5 || gMC->CurrentVolID(copy) == idV0R6
1937 || gMC->CurrentVolID(copy) == idV0L4 || gMC->CurrentVolID(copy) == idV0L45 || gMC->CurrentVolID(copy) == idV0L46 || gMC->CurrentVolID(copy) == idV0L47 || gMC->CurrentVolID(copy) == idV0L48 ) ringNumber = 4;
1938 else ringNumber = 0;
1939 if (ringNumber) {
1940 if (gMC->CurrentVolID(copy) == idV0L1 || gMC->CurrentVolID(copy) == idV0L15 || gMC->CurrentVolID(copy) == idV0L16 || gMC->CurrentVolID(copy) == idV0L17 || gMC->CurrentVolID(copy) == idV0L18 || gMC->CurrentVolID(copy) == idV0L2 || gMC->CurrentVolID(copy) == idV0L25 || gMC->CurrentVolID(copy) == idV0L26 || gMC->CurrentVolID(copy) == idV0L27 || gMC->CurrentVolID(copy) == idV0L28 || gMC->CurrentVolID(copy) == idV0L3 || gMC->CurrentVolID(copy) == idV0L35 || gMC->CurrentVolID(copy) == idV0L36 || gMC->CurrentVolID(copy) == idV0L37 || gMC->CurrentVolID(copy) == idV0L38 || gMC->CurrentVolID(copy) == idV0L4 || gMC->CurrentVolID(copy) == idV0L45 || gMC->CurrentVolID(copy) == idV0L46 || gMC->CurrentVolID(copy) == idV0L47 || gMC->CurrentVolID(copy) == idV0L48)
1941 hitOnV0C = false;
1942 destep = gMC->Edep();
1943 step = gMC->TrackStep();
1944 if (hitOnV0C) {
1945 lightYield = fV0CLightYield;
1946 lightAttenuation = fV0CLightAttenuation;
1947 nMeters = fV0CnMeters;
1948 fibToPhot = fV0CFibToPhot;
1949 } else {
1950 lightYield = fV0ALightYield;
1951 lightAttenuation = fV0ALightAttenuation;
1952 nMeters = fV0AnMeters;
1953 fibToPhot = fV0AFibToPhot;
1954 }
1955 nPhotonsInStep = Int_t(destep / (lightYield *1e-9) );
1956 nPhotonsInStep = gRandom->Poisson(nPhotonsInStep);
1957 eloss += destep;
1958 tlength += step;
1959 if ( gMC->IsTrackEntering() ) {
1960 nPhotons = nPhotonsInStep;
1961 gMC->TrackPosition(fTrackPosition);
1962 gMC->TrackMomentum(fTrackMomentum);
1963 Float_t pt = TMath::Sqrt( fTrackMomentum.Px() * fTrackMomentum.Px()
1964 + fTrackMomentum.Py() * fTrackMomentum.Py() );
1965 TParticle *par = gAlice->GetMCApp()->Particle(gAlice->GetMCApp()->GetCurrentTrackNumber());
1966 hits[0] = fTrackPosition.X();
1967 hits[1] = fTrackPosition.Y();
1968 hits[2] = fTrackPosition.Z();
1969 hits[3] = Float_t (gMC->TrackPid());
1970 hits[4] = gMC->TrackTime();
1971 hits[5] = gMC->TrackCharge();
1972 hits[6] = fTrackMomentum.Theta()*TMath::RadToDeg();
1973 hits[7] = fTrackMomentum.Phi()*TMath::RadToDeg();
1974 hits[8] = ringNumber;
1975 hits[9] = pt;
1976 hits[10] = fTrackMomentum.P();
1977 hits[11] = fTrackMomentum.Px();
1978 hits[12] = fTrackMomentum.Py();
1979 hits[13] = fTrackMomentum.Pz();
1980 hits[14] = par->Vx();
1981 hits[15] = par->Vy();
1982 hits[16] = par->Vz();
1983 tlength = 0.0;
1984 eloss = 0.0;
1985
1986 //////////////////////////
1987 ///// Display V0A geometry
1988 // if (!hitOnV0C) {
1989 // FILE *of;
1990 // of = fopen("V0A.out", "a");
1991 // // x, y, z, ringnumber, cellid
1992 // fprintf( of, "%f %f %f %f %d \n", hits[0], hits[1], hits[2], hits[8], GetCellId (vol, hits) );
1993 // fclose(of);
1994 // }
1995 //////////////////////////
1996 }
1997 nPhotons = nPhotons + nPhotonsInStep;
1998 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
1999 nPhotons = nPhotons - Int_t((Float_t(nPhotons) * lightAttenuation * nMeters));
2000 nPhotons = nPhotons - Int_t( Float_t(nPhotons) * fibToPhot);
2001 hits[17] = eloss;
2002 hits[18] = tlength;
2003 hits[19] = nPhotons;
2004 hits[20] = GetCellId (vol, hits);
2005 AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(), vol, hits);
2006 tlength = 0.0;
2007 eloss = 0.0;
2008 nPhotons = 0;
2009 nPhotonsInStep = 0;
2010 numStep = 0;
2011 }
2012 if( gMC->IsTrackEntering() || gMC->IsTrackExiting() ) {
2013 AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kVZERO);
2014 }
2015 }
2016}
2017
2018//_____________________________________________________________________________
2019void AliVZEROv7::AddHit(Int_t track, Int_t *vol, Float_t *hits)
2020{
2021// Adds a VZERO hit
2022
2023 TClonesArray &lhits = *fHits;
2024 new(lhits[fNhits++]) AliVZEROhit(fIshunt,track,vol,hits);
2025}
2026
2027//_____________________________________________________________________________
2028void AliVZEROv7::AddDigits(Int_t *tracks, Int_t* digits)
2029{
2030// Adds a VZERO digit
2031
2032 TClonesArray &ldigits = *fDigits;
2033 new(ldigits[fNdigits++]) AliVZEROdigit(tracks, digits);
2034}
2035
2036//_____________________________________________________________________________
2037void AliVZEROv7::MakeBranch(Option_t *option)
2038{
2039// Creates new branches in the current Root Tree
2040
2041 char branchname[10];
2042 sprintf(branchname,"%s",GetName());
2043 AliDebug(2,Form("fBufferSize = %d",fBufferSize));
2044 const char *cH = strstr(option,"H");
2045 if (fHits && fLoader->TreeH() && cH) {
2046 fLoader->TreeH()->Branch(branchname,&fHits, fBufferSize);
2047 AliDebug(2,Form("Making Branch %s for hits",branchname));
2048 }
2049 const char *cD = strstr(option,"D");
2050 if (fDigits && fLoader->TreeD() && cD) {
2051 fLoader->TreeD()->Branch(branchname,&fDigits, fBufferSize);
2052 AliDebug(2,Form("Making Branch %s for digits",branchname));
2053 }
2054}
2055
2056//_____________________________________________________________________________
2057Int_t AliVZEROv7::GetCellId(Int_t *vol, Float_t *hits)
2058{
2059 // Returns Id of scintillator cell
2060 // Right side from 0 to 47
2061 // Left side from 48 to 79
2062 // hits[8] = ring number (1 to 4)
2063 // vol[1] = copy number (1 to 8)
2064
2065 Int_t index = vol[1];
2066 Int_t ringNumber = Int_t(hits[8]);
2067 fCellId = 0;
2068
2069 Float_t phi = Float_t(TMath::ATan2(Double_t(hits[1]),Double_t(hits[0])) );
2070 Float_t kRaddeg = 180.0/TMath::Pi();
2071 phi = kRaddeg * phi;
2072
2073 if (index < 7) index = index + 8;
2074
2075 if (hits[2] < 0.0) {
2076 if(ringNumber < 3) {
2077 index = (index - 7) + ( ( ringNumber - 1 ) * 8);
2078 } else if (ringNumber >= 3) {
2079 if ( gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R3") || gMC->CurrentVolID(vol[1])
2080 == gMC->VolId("V0R5") ) index = (index*2-14)+((ringNumber-2)*16);
2081 if ( gMC->CurrentVolID(vol[1]) == gMC->VolId("V0R4") || gMC->CurrentVolID(vol[1])
2082 == gMC->VolId("V0R6") ) index = (index*2-13)+((ringNumber-2)*16);
2083 }
2084 fCellId = index;
2085 } else if (hits[2] > 0.0) {
2086 // cout << " vol[0] = " << vol[0] << " copy : " << vol[1]
2087 // << " called " << gMC->VolName(vol[0]) << endl;
2088 // cout << " vol[2] = " << vol[2] << " copy : " << vol[3]
2089 // << " called " << gMC->VolName(vol[2]) << endl;
2090 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L1")) fCellId = vol[1]+47;
2091 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L2")) fCellId = 8+vol[1]+47;
2092 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L3")) fCellId = 16+vol[1]+47;
2093 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L4")) fCellId = 24+vol[1]+47;
2094 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L15")) fCellId = 48+4;
2095 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L16")) fCellId = 48+5;
2096 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L17")) fCellId = 48+6;
2097 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L18")) fCellId = 48+7;
2098 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L25")) fCellId = 8+48+4;
2099 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L26")) fCellId = 8+48+5;
2100 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L27")) fCellId = 8+48+6;
2101 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L28")) fCellId = 8+48+7;
2102 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L35")) fCellId = 16+48+4;
2103 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L36")) fCellId = 16+48+5;
2104 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L37")) fCellId = 16+48+6;
2105 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L38")) fCellId = 16+48+7;
2106 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L45")) fCellId = 24+48+4;
2107 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L46")) fCellId = 24+48+5;
2108 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L47")) fCellId = 24+48+6;
2109 if (gMC->CurrentVolID(vol[2]) == gMC->VolId("V0L48")) fCellId = 24+48+7;
2110 }
2111
2112 return fCellId;
2113}
2114