Make drawing and viewving named macros
[u/mrichter/AliRoot.git] / CASTOR / AliCASTOR.cxx
CommitLineData
4c039060 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/*
17$Log$
1cedd08a 18Revision 1.6 1999/09/29 09:24:07 fca
19Introduction of the Copyright and cvs Log
20
4c039060 21*/
22
fe4da5cc 23///////////////////////////////////////////////////////////////////////////////
24// //
25// CASTOR //
26// This class contains the description of the CASTOR detector //
27// //
28//Begin_Html
29/*
1439f98e 30<img src="picts/AliCASTORClass.gif">
fe4da5cc 31</pre>
32<br clear=left>
33<font size=+2 color=red>
34<p>The responsible person for this module is
35<a href="mailto:aris.angelis@cern.ch">Aris Angelis</a>.
36</font>
37<pre>
38*/
39//End_Html
40// //
41// //
42///////////////////////////////////////////////////////////////////////////////
43
44
45#include "AliCASTOR.h"
46#include <TNode.h>
47#include <TPGON.h>
48#include "AliRun.h"
49#include "AliMC.h"
50#include "AliConst.h"
51
52ClassImp(AliCASTOR)
53
54//_____________________________________________________________________________
55AliCASTOR::AliCASTOR()
56{
57 //
58 // Default constructor for CASTOR
59 //
60 fIshunt = 0;
61}
62
63//_____________________________________________________________________________
64AliCASTOR::AliCASTOR(const char *name, const char *title)
65 : AliDetector(name,title)
66{
67 //
68 // Standard constructor for CASTOR
69 //
70
71 //
72 // Create a tree of castor hits
73 fHits = new TClonesArray("AliCASTORhit", 405);
1cedd08a 74 gAlice->AddHitList(fHits);
fe4da5cc 75
76 fIshunt = 0;
77
78 SetMarkerColor(7);
79 SetMarkerStyle(2);
80 SetMarkerSize(0.4);
81}
82
83//_____________________________________________________________________________
84void AliCASTOR::AddHit(Int_t track, Int_t *vol, Float_t *hits)
85{
86 //
87 // Add a CASTOR hit
88 //
89 TClonesArray &lhits = *fHits;
90 new(lhits[fNhits++]) AliCASTORhit(fIshunt,track,vol,hits);
91}
92
93//_____________________________________________________________________________
94void AliCASTOR::BuildGeometry()
95{
96 //
97 // Build CASTOR ROOT TNode geometry for event display
98 TNode *Node, *Top;
99 TPGON *pgon;
100 const int kColorCASTOR = 4;
101 //
102 Top=gAlice->GetGeometry()->GetNode("alice");
103
104 // CASTOR
105 pgon = new TPGON("S_CASTOR","S_CASTOR","void",22.5,360,8,2);
106 pgon->DefineSection(0,-69.05885,2.598121,12.86874);
107 pgon->DefineSection(1,69.05885,2.787778,13.88912);
108 new TRotMatrix("rotcas","rotcas",90,180,90,90,180,0);
109
110 Top->cd();
111 Node = new TNode("CASTOR","CASTOR","S_CASTOR",0,0,-1809.59,"rotcas");
112 Node->SetLineColor(kColorCASTOR);
113 fNodes->Add(Node);
114}
115
116//_____________________________________________________________________________
117Int_t AliCASTOR::DistancetoPrimitive(Int_t , Int_t )
118{
119 return 9999;
120}
121
122
123ClassImp(AliCASTORv1)
124
125//_____________________________________________________________________________
126AliCASTORv1::AliCASTORv1() : AliCASTOR()
127{
128 //
129 // Default constructor for CASTOR version 1
130 //
131 fOdFiber = 0;
132 fOdCladding = 0;
133 fOdAbsorber = 0;
134 fOctants = 0;
135 fLayersEM = 0;
136 fLayersHad = 0;
137 fPhiOct = 0;
138 fRadCore = 0;
139 fRadFactor = 0;
140}
141
142//_____________________________________________________________________________
143AliCASTORv1::AliCASTORv1(const char *name, const char *title)
144 : AliCASTOR(name,title)
145{
146 //
147 // Standard constructor for CASTOR version 1
148 //
149 fOdFiber = 0;
150 fOdCladding = 0;
151 fOdAbsorber = 0;
152 fOctants = 0;
153 fLayersEM = 0;
154 fLayersHad = 0;
155 fPhiOct = 0;
156 fRadCore = 0;
157 fRadFactor = 0;
158}
159
160//_____________________________________________________________________________
161void AliCASTORv1::CreateGeometry()
162{
163 //
164 // Creation of the geometry of the CASTOR detector
165 //
166 //Begin_Html
167 /*
1439f98e 168 <img src="picts/AliCASTORTree.gif">
fe4da5cc 169 */
170 //End_Html
171 //Begin_Html
172 /*
1439f98e 173 <img src="picts/AliCASTOR.gif">
fe4da5cc 174 */
175 //End_Html
176 //
177 // 28 March 1997 23 February 1998 Aris L. S. Angelis *
178 // >--------------------------------------------------------------------<*
179
fe4da5cc 180
181 Float_t dhad[11], dcal[3], beta, doct[11], alfa1, alfa2, fact1, fact2,fact3;
182 Float_t dclha[3], dcoha[3], dclem[3], dbxha[3], dcoem[3], dcalt[5], dcalv[5], dbxem[3];
183 Float_t rzhig;
184 Float_t s1, s2, s3, rxyin, rzlow, rxyut, facemd, facein, dlayha, dlayem, doctem, doctha, faceut, zendha, phicov;
185 Float_t doctnt;
186 Float_t zemhad;
187 Int_t idrotm[100];
188 Float_t thecen, xp, xxmdhi, zp, yp, rinbeg;
189 Float_t rutbeg, xxinhi, rinend, rutend, xxmdlo;
190 Float_t dztotl, xxinlo, xxuthi;
191 Float_t xxutlo, dem[11], ang;
192 Int_t nfx;
193 Float_t rxy;
194 // Angle (deg) of inclination of quartz fibres w.r.t. to beam (Cerenkov angle).
195 const Float_t kBetaD = 45;
196 //Rapidity range covered by the calorimeter.
197 const Float_t kEtaLow = 5.6;
198 const Float_t kEtaHigh = 7.2;
199 // Z position (cm) of beginning of calorimeter EM section (the tip.
200 const Float_t kZbegem = 1740;
201 // Number of azimuthal calorimeter sectors: octants.
202 fOctants = 8;
203 // Number of e-m and hadronic layers (each layer comprises a slice
204 // of absorber material followed by a slice of active quartz fibres).
205 // DATA NLAYEM,NLAYHA /9,69/ ! 0.64 + 9.73 lambda_i
206 fLayersEM = 8;
207 fLayersHad = 72; // 0.57 + 10.15 lambda_i
208 // Number of planes of quartz fibres within each active slice for
209 // e-m and hadronic sections.
210 const Int_t kFibersEM = 2;
211 const Int_t kFibersHad = 4;
212 // Thickness (cm) of absorber material for e-m and hadronic layers.
213 const Float_t kAbsorberEM = 0.5;
214 const Float_t kAbsorberHad = 1;
215 // Diameter (cm) of fibre core and of fibre with cladding.
216 const Float_t kDiamCore = 0.043;
217 const Float_t kDiamCladding = 0.045;
218
219 Int_t i;
220 static Int_t debugFlag = 0;
221
ad51aeb0 222 Int_t *idtmed = fIdtmed->GetArray()-1499;
fe4da5cc 223
224
225 // >--------------------------------------------------------------------<*
226 // **> Note: ALICE frame XYZ, proper ref. frame of a trapezoid X'Y'Z'.
227 // --- Common which contains debug flags for the various detectors ---
228 // --- Also control flags (JPAWF,JOUTF) for each detector added ---
229
230 // **> Common containing some of the Castor FCAL geometry data.
231
232 //**> Angle (deg) of inclination of quartz fibres w.r.t. to beam
233 //**> (Cerenkovangle).
234 // **> Rapidity range covered by the calorimeter.
235 // **> Z position (cm) of beginning of calorimeter EM section (the tip.
236 // **> Number of planes of quartz fibres within each active slice for
237 // **> e-m and hadronic sections.
238 // **> Thickness (cm) of absorber material for e-m and hadronic layers.
239 // **> Diameter (cm) of fibre core and of fibre with cladding.
240 // **> E-M and hadronic sections of an octant and complete octant module
241 // **> (general trapezoids).
242 // **> Imaginary box to hold the complete calorimeter.
243 // **> Imaginary rectangular boxes containing the trapezoids of the
244 // **> EM and Hadronic sections of an Octant.
245 // **> Cylindrical volumes for clad fibres and fibre cores in the
246 // **> EM and Had sections.
247 //**> Narrow stainless steel conical beam tube traversing the calorimeter.
248 // **> Print calorimeter parameters.
249 // **> Number of azimuthal calorimeter sectors: octants.
250 // DATA NOCTS / 16 /
251 // **> Number of e-m and hadronic layers (each layer comprises a slice
252 // **> of absorber material followed by a slice of active quartz fibres).
253 // DATA NLAYEM,NLAYHA /9,69/ ! 0.64 + 9.73 lambda_i
254 // 0.57 + 10.15 lambda_i
255 if (debugFlag > 0) {
256 printf("----------------------------------\n");
257 printf(" EtaLo = %f, EtaHigh = %f, ZbegEM =%f\n",kEtaLow, kEtaHigh,kZbegem);
258 printf(" Nocts =%d, NlayEM=%d, NlayHad = %d\n",fOctants,fLayersEM,fLayersHad);
259 printf("----------------------------------\n");
260 }
261 // **> Radius of sensitive fibre core.
262 fRadCore = kDiamCore/2;
263 // **> Radius normalised to radius of 0.5 mm used in the calculation of
264 // **> the Cherenkov tables.
265 fRadFactor = fRadCore / .05;
266 // **> Total number of sensitive QF plane layers.
267 //nqemly = fLayersEM*kFibersEM;
268 //nqhaly = fLayersHad*kFibersHad;
269 beta = kBetaD*kDegrad; // **> Conversions to radians.
270 // **> Thickness of e-m and hadronic layers:
271 // **> Thickness = Thickness_of_Absorber + Thickness_of_N_Fibre_Planes
272 // **> For N pair: Thickness_of_N_Fibre_Planes = N/2 * [2+TMath::Sqrt(3)]*R_fibre
273 // **> taking into account staggering of fibres in adjacent planes.
274 //**> For simplicity staggering not yet introduced, use TMath::Sqrt(4) temporarily.
275 dlayem = kAbsorberEM +(0.5*kFibersEM )*(2+TMath::Sqrt(4.))*kDiamCladding/2;
276 dlayha = kAbsorberHad+(0.5*kFibersHad)*(2+TMath::Sqrt(4.))*kDiamCladding/2;
277 if (debugFlag > 0) {
278 printf(" Layer Thickness. EM = %f, Had = %f\n",dlayem,dlayha);
279 }
280 // **> Thickness of complete octant, along the line perpendicular
281 // **> to the layers.
282 // **> Thickness = NlayerEM*DlayerEM + NlayerHad*DlayerHad (DeltaZ').
283 doctem = fLayersEM*dlayem;
284 doctha = fLayersHad*dlayha;
285 doctnt = doctem + doctha;
286 if (debugFlag > 0) {
287 printf(" Octant Thickness. EM = %f, Had = %f, Total = %f\n",doctem,doctha,doctnt);
288 }
289 // **> Construct one octant module: general trapezoid, rotated such
290 // **> that the fibre planes are perpenicular to the Z axis of the
291 // **> proper reference frame (X'Y'Z' frame).
292 // **> Calculation of the length of the faces at +/- DeltaZ'/2 of an
293 // **> octant, projected onto the Y'Z' plane (see notes dated 4/4/97).
294 alfa1 = TMath::ATan(exp(-kEtaLow)) * 2.;
295 alfa2 = TMath::ATan(exp(-kEtaHigh)) * 2.;
296 fact1 = (TMath::Tan(alfa1) - TMath::Tan(alfa2)) * TMath::Cos(alfa1) / TMath::Sin(beta - alfa1);
297 if (debugFlag > 0) {
298 printf(" Beta =%f,Fact1 =%f\n",kBetaD, fact1);
299 printf(" EtaLow=%f, EtaHigh=%f, Alfa1=%f, Alfa2=%f\n",kEtaLow,kEtaHigh,alfa1*kRaddeg,alfa2*kRaddeg);
300 }
301 // **> Face at entrance to E-M section (-DeltaZ'/2).
302 facein = fact1 * kZbegem;
303 // **> Face at interface from E-M to Hadronic section.
304 facemd = (doctem / TMath::Sin(beta) + kZbegem) * fact1;
305 // **> Face at exit of Hadronic section (+DeltaZ'/2).
306 faceut = (doctnt / TMath::Sin(beta) + kZbegem) * fact1;
307 if (debugFlag > 0) {
308 printf(" Octant Face Length. Front: %f, Back: %f, EM-Had: %f\n",facein,faceut,facemd);
309 }
310 // **> Angular coverage of octant (360./8) projected onto plane
311 // **> tilted at angle Beta (see notes dated 28/3/97).
312 //**> PhiTilted = 2*atan[TMath::Tan(phi/2)TMath::Cos(beta)] = 32.65 deg for beta=45,phi=22.5.
313 fPhiOct = k2PI / fOctants;
314 phicov = TMath::ATan(TMath::Tan(fPhiOct / 2.) * TMath::Cos(beta)) * 2.;
315 if (debugFlag > 0) {
316 printf(" FPhiOct =%f, PhiCov =%f\n",fPhiOct * kRaddeg,phicov * kRaddeg);
317 }
318 // **> Dimensions along X' of front and back faces of calorimeter
319 // **> (see notes dated 8/4/97).
320 fact2 = TMath::Tan(alfa2) / TMath::Sin(beta);
321 fact3 = TMath::Cos(alfa2) / TMath::Sin(beta - alfa2);
322 zendha = doctnt * fact3 + kZbegem;
323 zemhad = doctem * fact3 + kZbegem;
324 if (debugFlag > 0) {
325 printf(" ZbegEM =%f, ZendHA =%f, ZEMHad =%f\n",kZbegem,zendha, zemhad);
326 printf(" Fact2 =%f, Fact3 =%f\n",fact2,fact3);
327 }
328 // **> DeltaX' at -DeltaY'/2, -DeltaZ'/2.
329 xxinlo = fact2 * 2*kZbegem * TMath::Tan(phicov / 2.);
330 // **> DeltaX' at +DeltaY'/2, -DeltaZ'/2.
331 xxinhi = (fact2 + fact1) * 2*kZbegem * TMath::Tan(phicov / 2.);
332 // **> DeltaX' at -DeltaY'/2, +DeltaZ'/2.
333 xxutlo = zendha * 2. * fact2 * TMath::Tan(phicov / 2.);
334 // **> DeltaX' at +DeltaY'/2, +DeltaZ'/2.
335 xxuthi = zendha * 2. * (fact2 + fact1) * TMath::Tan(phicov / 2.);
336 // **> DeltaX' at -DeltaY'/2, at EM/Had interface.
337 xxmdlo = zemhad * 2. * fact2 * TMath::Tan(phicov / 2.);
338 // **> DeltaX' at +DeltaY'/2, at EM/Had interface.
339 xxmdhi = zemhad * 2. * (fact2 + fact1) * TMath::Tan(phicov / 2.);
340 if (debugFlag > 0) {
341 printf(" XXinLo=%f, XXinHi=%f, XXutLo=%f, XXutHi=%f, XXmdLo=%f, XXmdHi=%f\n",
342 xxinlo,xxinhi,xxutlo,xxuthi,xxmdlo,xxmdhi);
343 }
344 //**> Calculate the polar angle in the X'Y'Z' frame of the line joining the
345 //**> centres of the front and back faces of the octant (see notes dated 9/4/97).
346 s1 = (1. - fact2 * TMath::Cos(beta)) * kZbegem;
347 s2 = (fact2 + fact1 / 2.) * kZbegem;
348 s3 = TMath::Sqrt(s1 * s1 + s2 * s2 - s1 * s2 * TMath::Cos(kPI - beta));
349 ang = TMath::ASin(sin(kPI - beta) * s2 / s3);
350 thecen = kPI/2 - beta + ang;
351 if (debugFlag > 0) {
352 printf(" S1=%f, S2=%f, S3=%f, Ang=%f, TheCen=%f\n",s1,s2,s3,ang*kRaddeg,thecen*kRaddeg);
353 }
354 // **> Construct the octant volume.
355 doct[0] = 180*0.125;
356 doct[1] = 360.;
357 doct[2] = 8.;
358 doct[3] = 2.;
359 doct[4] = -(zendha - kZbegem + faceut * TMath::Cos(beta)) / 2.;
360 doct[5] = TMath::Tan(alfa2) * kZbegem;
361 doct[6] = TMath::Tan(alfa1) * kZbegem;
362 doct[7] = (zendha - kZbegem + faceut * TMath::Cos(beta)) / 2.;
363 doct[8] = zendha * TMath::Tan(alfa2);
364 doct[9] = (faceut + zendha * fact2) * TMath::Sin(beta);
365
366 if (debugFlag > 0) {
367 printf("\n Doct(1-10) = ");
368 for (i = 1; i <= 10; ++i) {
369 printf("%f, ",doct[i - 1]);
370 }
371 printf(" \n");
372 }
cfce8870 373 gMC->Gsvolu("OCTA", "PGON", idtmed[fOdAbsorber - 1], doct, 10);
374 gMC->Gsdvn("OCT ", "OCTA", 8, 2);
fe4da5cc 375 // absorber material.
376 // **> Construct the E-M section volume.
377 dem[0] = doctem / 2.; // DeltaZ'/2
378 dem[1] = thecen *kRaddeg; // Theta[(Centre(-DeltaZ')--Centre(+DeltaZ'
379 dem[2] = 90.; // Phi[(Centre(-DeltaZ')--Centre(+DeltaZ')]
380 dem[3] = facein / 2.; // DeltaY'/2 at -DeltaZ'/2.
381 dem[4] = xxinlo / 2.; // DeltaX'/2 at -DeltaY'/2 at -DeltaZ'/2.
382 dem[5] = xxinhi / 2.; // DeltaX'/2 at +DeltaY'/2 at -DeltaZ'/2.
383 dem[6] = 0.; // Angle w.r.t. Y axis of line joining cent
384 // at +/- DeltaY at -DeltaZ. // Angle w.r.t. Y axis of line joining cent
385 dem[7] = facemd / 2.; // DeltaY'/2 at +DeltaZ'.
386 dem[8] = xxmdlo / 2.; // DeltaX'/2 at -DeltaY'/2 at +DeltaZ'/2.
387 dem[9] = xxmdhi / 2.; // DeltaX'/2 at +DeltaY'/2 at +DeltaZ'/2.
388 dem[10] = 0.; // Angle w.r.t. Y axis of line joining cent
389 // at +/- DeltaY at +DeltaZ.
390
391 if (debugFlag > 0) {
392 printf("\n De-m(1-11) =");
393 for (i = 1; i <= 11; ++i) {
394 printf("%f, ",dem[i - 1]);
395 }
396 printf(" \n");
397 }
cfce8870 398 gMC->Gsvolu("EM ", "TRAP", idtmed[fOdAbsorber - 1], dem, 11);
fe4da5cc 399 // absorber material.
400 // **> Construct the Hadronic section volume.
401 // Fill with s
402 dhad[0] = doctha / 2.; // DeltaZ'/2
403 dhad[1] = thecen *kRaddeg; // Theta[(Centre(-DeltaZ')--Centre(+DeltaZ'
404 dhad[2] = 90.; // Phi[(Centre(-DeltaZ')--Centre(+DeltaZ')]
405 dhad[3] = facemd / 2.; // DeltaY'/2 at -DeltaZ'/2.
406 dhad[4] = xxmdlo / 2.; // DeltaX'/2 at -DeltaY'/2 at -DeltaZ'/2.
407 dhad[5] = xxmdhi / 2.; // DeltaX'/2 at +DeltaY'/2 at -DeltaZ'/2.
408 dhad[6] = 0.; // Angle w.r.t. Y axis of line joining cent
409 // at +/- DeltaY at -DeltaZ.
410 dhad[7] = faceut / 2.; // DeltaY'/2 at +DeltaZ'.
411 dhad[8] = xxutlo / 2.; // DeltaX'/2 at -DeltaY'/2 at +DeltaZ'/2.
412 dhad[9] = xxuthi / 2.; // DeltaX'/2 at +DeltaY'/2 at +DeltaZ'/2.
413 dhad[10] = 0.; // Angle w.r.t. Y axis of line joining cent
414 // at +/- DeltaY at +DeltaZ.
415
416 if (debugFlag > 0) {
417 printf("\n Dhad(1-11) = ");
418 for (i = 1; i <= 11; ++i) {
419 printf("%f, ",dhad[i - 1]);
420 }
421 printf(" \n");
422 }
cfce8870 423 gMC->Gsvolu("HAD ", "TRAP", idtmed[fOdAbsorber - 1], dhad, 11); // absorber material.
fe4da5cc 424 // **> Rotation matrix to rotate fibres verticaly to fit into holes.
425 // Fill with
426 AliMatrix(idrotm[0], 90., 0., 180., 0., 90., 90.);
427 // **> Internal structure of the EM section starts here. <---
428 // **> Construct one sampling module
cfce8870 429 gMC->Gsdvn("SLEM", "EM ", fLayersEM, 3);
430 gMC->Gsatt("SLEM", "SEEN", 0);
fe4da5cc 431 // **> Construct the (imaginary) rectangular box embedding the fibres
432 // **> Fill with air, make it invisible on the drawings.
433 dbxem[0] = xxmdhi / 2.;
434 dbxem[2] = kFibersEM*kDiamCladding/2;
435 dbxem[1] = facemd / 2. + dbxem[2] * TMath::Tan(thecen);
436 if (debugFlag > 0) {
437 printf(" DbxEM(1-3) =");
438 for (i = 1; i <= 3; ++i) {
439 printf("%f, ",dbxem[i - 1]);
440 }
441 printf(" \n");
442 }
cfce8870 443 gMC->Gsvolu("BXEM", "BOX ", idtmed[1501], dbxem, 3);
444 gMC->Gsatt("BXEM", "SEEN", 0);
fe4da5cc 445 // **> Divide along Z to obtain one layer
cfce8870 446 gMC->Gsdvn("RWEM", "BXEM", 2, 3);
447 gMC->Gsatt("RWEM", "SEEN", 0);
fe4da5cc 448 // **> Divide along X' to accomodate the maximum number of individual
449 //**> fibres packed along X', make the divisions invisible on the drawings.
450 nfx = Int_t(xxmdhi / .045);
451 if (debugFlag > 0) {
452 printf(" NfxEM = %d\n",nfx);
453 }
cfce8870 454 gMC->Gsdvn("FXEM", "RWEM", nfx, 1);
455 gMC->Gsatt("FXEM", "SEEN", 0);
fe4da5cc 456 // **> Construct the fiber cladding
457 dclem[0] = 0.;
458 dclem[1] = kDiamCladding/2;
459 dclem[2] = dbxem[1];
460 if (debugFlag > 0) {
461 printf(" DclEM(1-3) = \n");
462 for (i = 1; i <= 3; ++i) {
463 printf("%f, ",dclem[i - 1]);
464 }
465 printf(" \n");
466 }
cfce8870 467 gMC->Gsvolu("CLEM", "TUBE", idtmed[fOdCladding - 1], dclem,3);
468 gMC->Gsatt("CLEM", "SEEN", 0);
fe4da5cc 469 //**> Construct the cylindrical volume for a fibre core in the EM section.
470 //**> Fill with selected fibre material, make it invisible on the drawings.
471 dcoem[0] = 0.;
472 dcoem[1] = kDiamCore/2;
473 dcoem[2] = dbxem[1];
474 if (debugFlag > 0) {
475 printf(" DcoEM(1-3) = ");
476 for (i = 1; i <= 3; ++i) {
477 printf("%f, ",dcoem[i - 1]);
478 }
479 printf(" \n");
480 }
cfce8870 481 gMC->Gsvolu("COEM", "TUBE", idtmed[fOdFiber - 1], dcoem,3);
482 gMC->Gsatt("COEM", "SEEN", 0);
fe4da5cc 483 // **> Position the volumes
484 // **> Put the air section inside one sampling module
485 // **> Use MANY to obtain clipping of protruding edges.
486 xp = 0.;
487 zp = dlayem / 2. - 0.5*kFibersEM*kDiamCladding;
488 yp = zp * TMath::Tan(thecen);
cfce8870 489 gMC->Gspos("BXEM", 1, "SLEM", xp, yp, zp, 0, "MANY");
fe4da5cc 490 // **> Place the core fibre in the clad
491 xp = 0.;
492 yp = 0.;
493 zp = 0.;
cfce8870 494 gMC->Gspos("COEM", 1, "CLEM", xp, yp, zp, 0, "MANY");
fe4da5cc 495 // **> Put the fiber in its air box
cfce8870 496 gMC->Gspos("CLEM", 1, "FXEM", xp, yp, zp, idrotm[0], "MANY");
fe4da5cc 497 // **> Internal structure of the Hadronic section starts here. <---
cfce8870 498 gMC->Gsdvn("SLHA", "HAD ", fLayersHad, 3);
499 gMC->Gsatt("SLHA", "SEEN", 0);
fe4da5cc 500 // **> Construct the air section where the fibers are
501 dhad[0] = 0.5*kFibersEM*kDiamCladding;
cfce8870 502 gMC->Gsvolu("AIHA", "TRAP", idtmed[1501], dhad, 11);
fe4da5cc 503 // **> Divide along z in the appropriate number of layers
cfce8870 504 gMC->Gsdvn("SAHA", "AIHA", 4, 3);
fe4da5cc 505 //**> Construct the (imaginary) rectangular box embedding one lauer of fibres
506 // **> Fill with air, make it invisible on the drawings.
507 dbxha[0] = xxuthi / 2.;
508 dbxha[2] = 0.5*kFibersHad*kDiamCladding;
509 dbxha[1] = faceut / 2. + dbxha[2] * TMath::Tan(thecen);
510 if (debugFlag > 0) {
511 printf(" DbxHa(1-3) = ");
512 for (i = 1; i <= 3; ++i) {
513 printf("%f, ",dbxem[i - 1]);
514 }
515 printf(" \n");
516 }
cfce8870 517 gMC->Gsvolu("BXHA", "BOX ", idtmed[1501], dbxha, 3);
518 gMC->Gsatt("BXHA", "SEEN", 0);
fe4da5cc 519 // **> Divide along Z to obtain one layer
cfce8870 520 gMC->Gsdvn("RWHA", "BXHA", 4, 3);
521 gMC->Gsatt("RWHA", "SEEN", 0);
fe4da5cc 522 // **> Divide along X' to accomodate the maximum number of individual
523 //**> fibres packed along X', make the divisions invisible on the drawings.
524 nfx = Int_t(xxuthi / .045);
525 if (debugFlag > 0) {
526 printf(" NfxHad = %d\n",nfx);
527 }
cfce8870 528 gMC->Gsdvn("FXHA", "RWHA", nfx, 1);
529 gMC->Gsatt("FXHA", "SEEN", 0);
fe4da5cc 530 // **> Construct one fiber cladding
531 dclha[0] = 0.;
532 dclha[1] = 0.5*kDiamCladding;
533 dclha[2] = dbxha[1];
534 if (debugFlag > 0) {
535 printf(" DclHa(1-3) = ");
536 for (i = 1; i <= 3; ++i) {
537 printf("%f, ",dclha[i - 1]);
538 }
539 printf(" \n");
540 }
cfce8870 541 gMC->Gsvolu("CLHA", "TUBE", idtmed[fOdCladding - 1], dclha,3);
542 gMC->Gsatt("CLHA", "SEEN", 0);
fe4da5cc 543 //**> Construct the cylindrical volume for a fibre core in the Had section.
544 //**> Fill with selected fibre material, make it invisible on the drawings.
545 dcoha[0] = 0.;
546 dcoha[1] = 0.5*kDiamCore;
547 dcoha[2] = dbxha[1];
548 if (debugFlag > 0) {
549 printf(" DcoHa(1-3) = ");
550 for (i = 1; i <= 3; ++i) {
551 printf("%f, ",dcoha[i - 1]);
552 }
553 printf(" \n");
554 }
cfce8870 555 gMC->Gsvolu("COHA", "TUBE", idtmed[fOdFiber - 1], dcoha,3);
556 gMC->Gsatt("COHA", "SEEN", 0);
fe4da5cc 557 // **> Position the volumes
558 // **> Put the air section inside one sampling module
559 // **> Use MANY to obtain clipping of protruding edges.
560 xp = 0.;
561 zp = dlayha / 2. - 0.5*kFibersHad*kDiamCladding;
562 yp = zp * TMath::Tan(thecen);
cfce8870 563 gMC->Gspos("BXHA", 1, "SLHA", xp, yp, zp, 0, "MANY");
fe4da5cc 564 // **> Place the core fibre in the clad
565 xp = 0.;
566 yp = 0.;
567 zp = 0.;
cfce8870 568 gMC->Gspos("COHA", 1, "CLHA", xp, yp, zp, 0, "MANY");
fe4da5cc 569 // **> Place the fibre in its air box
cfce8870 570 gMC->Gspos("CLHA", 1, "FXHA", xp, yp, zp, idrotm[0], "MANY");
fe4da5cc 571 // **> Rotation matrices for consecutive calorimeter octants
572 // **> filling the imaginary box.
573 AliMatrix(idrotm[1], 90., -90., 45., 0., 45., 180.);
574 // **> Place the EM and Hadronic sections inside the Octant.
575 rzlow = (doct[5] + doct[6]) * .5;
576 rzhig = (doct[8] + doct[9]) * .5;
577 zp = doct[7] - (faceut * TMath::Cos(beta) + doctha * fact3) * .5;
578 yp = 0.;
579 xp = rzlow + (rzhig - rzlow) * .5 * (zp - doct[4]) / doct[7];
cfce8870 580 gMC->Gspos("HAD ", 1, "OCT ", xp, yp, zp, idrotm[1], "ONLY");
fe4da5cc 581 yp = 0.;
582 zp = doct[7] - faceut * TMath::Cos(beta) * .5 - doctha * fact3 - doctem * fact3 * .5;
583 xp = rzlow + (rzhig - rzlow) * .5 * (zp - doct[4]) / doct[7];
cfce8870 584 gMC->Gspos("EM ", 1, "OCT ", xp, yp, zp, idrotm[1], "ONLY");
fe4da5cc 585 // **> An imaginary box to hold the complete calorimeter.
586 dcal[0] = (faceut + zendha * fact2) * TMath::Sin(beta);
587 dcal[1] = dcal[0];
588 dcal[2] = (zendha - kZbegem + faceut * TMath::Cos(beta)) / 2.;
589 if (debugFlag > 0) {
590 printf(" Dcal(1-3) = ");
591 for (i = 1; i <= 3; ++i) {
592 printf("%f, ",dcal[i - 1]);
593 }
594 printf(" \n");
595 }
cfce8870 596 gMC->Gsvolu("CAL ", "BOX ", idtmed[1501], dcal, 3);
fe4da5cc 597 // Fill with air
598 rinbeg = TMath::Tan(alfa2) * kZbegem;
599 rutbeg = TMath::Tan(alfa1) * kZbegem;
600 dztotl = dcal[2] * 2.;
601 rinend = (dztotl + kZbegem) * TMath::Tan(alfa2);
602 rutend = (dztotl + kZbegem) * TMath::Tan(alfa1);
603 if (debugFlag > 0) {
604 printf(" RinBeg=%f, RoutBeg=%f\n",rinbeg,rutbeg);
605 printf(" RinEnd=%f, RoutEnd=%f\n",rinend,rutend);
606 printf(" DeltaZtotal = %f\n",dztotl);
607 }
608 // **> Build the calorimeter inside the imaginary box.
609 rxyin = (fact2 + fact1 / 2.) * kZbegem; // Radius to centre of octant in X'Y'
610 // plane at calorimeter entrance.
611 rxyut = zendha * (fact2 + fact1 / 2.); // Radius to centre of octant in X'Y'
612 // plane at calorimeter exit.
613 rxy = (rxyin + rxyut) / 2.; // Radius to geometrical centre of octant in
614 rxy *= TMath::Sin(beta); // projected to the XY plane.
615 if (debugFlag > 0) {
616 printf(" \n");
617 }
cfce8870 618 gMC->Gspos("OCTA", 1, "CAL ", 0., 0., 0., 0, "ONLY");
fe4da5cc 619 //**> Construct the narrow stainless steel conical beam tube traversing the
620 // **> calorimeter and its vacuum filling: WallThickness = 0.1 cm,
621 // **> Router = touching the inner side of the calorimeter,
622 // **> DeltaZ = all through the calorimeter box.
623 dcalt[0] = dcal[2];
624 dcalt[2] = TMath::Tan(alfa2) * kZbegem;
625 dcalt[1] = dcalt[2] - .1 / TMath::Cos(alfa2);
626 dcalt[4] = (dcalt[0] * 2. + kZbegem) * TMath::Tan(alfa2);
627 dcalt[3] = dcalt[4] - .1 / TMath::Cos(alfa2);
628 dcalv[0] = dcalt[0];
629 dcalv[2] = dcalt[1];
630 dcalv[1] = 0.;
631 dcalv[4] = dcalt[3];
632 dcalv[3] = 0.;
cfce8870 633 gMC->Gsvolu("CALT", "CONE", idtmed[1506], dcalt, 5);
fe4da5cc 634 // Fe (steel a
cfce8870 635 gMC->Gsvolu("CALV", "CONE", idtmed[1500], dcalv, 5);
fe4da5cc 636 // Vacuum.
cfce8870 637 gMC->Gsatt("CALV", "SEEN", 0);
fe4da5cc 638 // **> Position at centre of calorimeter box.
639 zp = 0.;
cfce8870 640 gMC->Gspos("CALT", 1, "CAL ", 0., 0., zp, 0, "ONLY");
641 gMC->Gspos("CALV", 1, "CAL ", 0., 0., zp, 0, "ONLY");
fe4da5cc 642 if (debugFlag > 0) {
643 printf(" Dcalt,Zp,-/+ = ");
644 for (i = 1; i <= 5; ++i) {
645 printf("%f, ",dcalt[i - 1]);
646 }
647 printf("%f, %f, %f\n",zp, zp - dcalt[0], zp + dcalt[0]);
648 printf(" Dcalt,Zp,-/+ = ");
649 for (i = 1; i <= 5; ++i) {
650 printf("%f, ",dcalt[i - 1]);
651 }
652 printf("%f, %f, %f\n",zp, zp - dcalt[0], zp + dcalt[0]);
653 }
654 // **> Rotate the imaginary box carrying the calorimeter and place it
655 // **> in the ALICE volume on the -Z side.
656 xp = 0.;
657 yp = 0.;
658 zp = dcal[2] + kZbegem;
659 AliMatrix(idrotm[2], 90., 180., 90., 90., 180., 0.);
660 // -X theta and phi w.r.t. to box XYZ.
661 // Y theta and phi w.r.t. to box XYZ.
662 // -Z theta and phi w.r.t. to box XYZ.
cfce8870 663 gMC->Gspos("CAL ", 1, "ALIC", xp, yp, -zp, idrotm[2], "ONLY");
fe4da5cc 664 if (debugFlag > 0) {
665 printf(" Dcal,Zp,-/+ = ");
666 for (i = 1; i <= 3; ++i) {
667 printf("%f, ",dcal[i - 1]);
668 }
669 printf("%f, %f, %f\n",zp, zp - dcal[2], zp + dcal[2]);
670 }
671}
672
673//_____________________________________________________________________________
76aa0aaa 674void AliCASTORv1::DrawModule()
fe4da5cc 675{
676 //
677 // Draw a shaded view of CASTOR version 1
678 //
679
fe4da5cc 680
cfce8870 681 gMC->Gsatt("*", "seen", -1);
682 gMC->Gsatt("alic", "seen", 0);
fe4da5cc 683 //
684 // Set visibility of elements
cfce8870 685 gMC->Gsatt("OCTA","seen",0);
686 gMC->Gsatt("EM ","seen",0);
687 gMC->Gsatt("HAD ","seen",0);
688 gMC->Gsatt("CAL ","seen",0);
689 gMC->Gsatt("CALT","seen",1);
690 gMC->Gsatt("OCT ","seen",0);
691 gMC->Gsatt("SLEM","seen",1);
692 gMC->Gsatt("SLHA","seen",1);
693 gMC->Gsatt("SAHA","seen",1);
fe4da5cc 694 //
cfce8870 695 gMC->Gdopt("hide", "on");
696 gMC->Gdopt("shad", "on");
697 gMC->Gsatt("*", "fill", 7);
698 gMC->SetClipBox(".");
699 gMC->SetClipBox("*", 0, 20, -20, 20, -1900, -1700);
700 gMC->DefaultRange();
701 gMC->Gdraw("alic", 40, 30, 0, -191.5, -78, .19, .19);
702 gMC->Gdhead(1111, "CASTOR Version 1");
703 gMC->Gdman(15,-2, "MAN");
704 gMC->Gdopt("hide", "off");
fe4da5cc 705}
706
707//_____________________________________________________________________________
708void AliCASTORv1::CreateMaterials()
709{
710 //
711 // Create materials for CASTOR version 1
712 //
713 // 30 March 1997 27 November 1997 Aris L. S. Angelis *
714 // >--------------------------------------------------------------------<*
fe4da5cc 715 Int_t ISXFLD = gAlice->Field()->Integ();
716 Float_t SXMGMX = gAlice->Field()->Max();
717
ad51aeb0 718 Int_t *idtmed = fIdtmed->GetArray()-1499;
fe4da5cc 719
720 Float_t cute, ubuf[1], cutg, epsil, awmix[3], dwmix, stmin;
721 Int_t isvol;
722 Float_t wwmix[3], zwmix[3], aq[2], dq, zq[2], wq[2];
723 Float_t tmaxfd, stemax, deemax;
724 Int_t kod;
725
726
727 // **> Quartz and Wmixture.
728 // **> UBUF is the value of r0, used for calculation of the radii of
729 // **> the nuclei and the Woods-Saxon potential.
730 ubuf[0] = .68;
731 AliMaterial(1, "Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16, ubuf, 1);
732 ubuf[0] = .68;
733 AliMaterial(2, "Air $", 14.61, 7.3, .001205, 30420., 67500., ubuf, 1);
734 //**> Quartz (SiO2) and fluorinated (?) quartz for cladding (insensitive).
735 dq = 2.64;
736 aq[0] = 28.086;
737 aq[1] = 15.9994;
738 zq[0] = 14.;
739 zq[1] = 8.;
740 wq[0] = 1.;
741 wq[1] = 2.;
742 AliMixture(3, "Quartz$", aq, zq, dq, -2, wq);
743 // After a call with ratios by number (negative number of elements),
744 // the ratio array is changed to the ratio by weight, so all successive
745 // calls with the same array must specify the number of elements as
746 // positive
747 AliMixture(4, "FQuartz$", aq, zq, dq, 2, wq);
748 // **> W mixture (90% W + 7.5% Ni + 2.5% Cu).
749 awmix[0] = 183.85;
750 zwmix[0] = 74.;
751 wwmix[0] = .9;
752 awmix[1] = 58.69;
753 zwmix[1] = 28.;
754 wwmix[1] = .075;
755 awmix[2] = 63.55;
756 zwmix[2] = 29.;
757 wwmix[2] = .025;
758 dwmix = 17.2;
759 // **> (Pure W and W mixture are given the same material number
760 // **> so that they can be used interchangeably).
761 ubuf[0] = 1.1;
762 AliMixture(5, "W Mix $", awmix, zwmix, dwmix, 3, wwmix);
763 // **> Lead.
764 ubuf[0] = 1.12;
765 AliMaterial(6, "Pb208 $", 207.19, 82., 11.35, .56, 18.5, ubuf, 1);
766 // **> Iron.
767 ubuf[0] = .99;
768 AliMaterial(7, "Fe56 $", 55.85, 26., 7.87, 1.76, 16.7, ubuf, 1);
769 // **> Copper.
770 ubuf[0] = 1.01;
771 AliMaterial(8, "Cu63 $", 63.54, 29., 8.96, 1.43, 15., ubuf, 1);
772 // **> Debug Printout.
773 // CALL GPRINT('MATE',0)
774 // **> (Negative values for automatic calculation in case of AUTO=0).
775 isvol = 0; // Sensitive volume flag.
776 tmaxfd = .1; // Max allowed angular deviation in 1 step due to field
777 stemax = -.5; // Maximum permitted step size (cm).
778 deemax = -.2; // Maximum permitted fractional energy loss.
779 epsil = .01; // Boundary crossing precision (cm).
780 stmin = -.1; // Minimum permitted step size inside absorber (cm).
ad51aeb0 781 AliMedium(1, "Vacuum$", 1, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
782 AliMedium(2, "Air $", 2, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
fe4da5cc 783
784 // **> Options for Cherenkov fibres and cladding.
785 isvol = 1; // Declare fibre core as sensitive.
ad51aeb0 786 AliMedium(3, "Quartz$", 3, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
fe4da5cc 787 isvol = 0; // Declare fibre cladding as not sensitive.
ad51aeb0 788 AliMedium(4, "FQuartz$", 4, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
fe4da5cc 789
790 // **> Options for absorber material (not sensitive).
791 isvol = 0; // Sensitive volume flag.
792 stemax = .5; // Maximum permitted step size (cm).
793 deemax = .5; // Maximum permitted fractional energy loss.
794 stmin = .1; // Minimum permitted step size inside absorber (cm).
ad51aeb0 795 AliMedium(5, "W Mix $", 5, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
796 AliMedium(6, "Pb208 $", 6, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
797 AliMedium(7, "Fe56 $ ", 7, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
798 AliMedium(8, "Cu63 $ ", 8, isvol, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
fe4da5cc 799
800 // **> Select material for the Cherenkov fibres.
801 fOdFiber = 1503;
802 // CALL GPTMED(IDTMED(KODFBR))
803 // **> Select material for the fibre cladding.
804 // Quartz.
805 fOdCladding = 1504;
806 // CALL GPTMED(IDTMED(KODCLD))
807 // **> Select absorber material.
808 // FQuartz.
809 fOdAbsorber = 1505; // W184/Mix
810 // KODABS=1506 ! Pb208.
811 // KODABS=1507 ! Fe56.
812 // KODABS=1508 ! Cu63.
813 // CALL GPTMED(IDTMED(KODABS))
814 // **> Set by default all interactions and decays explicitly ON
815 // **> and redefine the kinetic energy cutoffs:
816 // CUTE=0.0031 ! Allow beta >= 0.99 only.
817 cute = 7e-4; // Allow beta >= 0.67 only.
818 cutg = cute * 1.33;
819
820 // **> Inside the absorber material,
821 for (kod = 1505; kod <= 1508; ++kod) {
822 Int_t absorber = idtmed[kod - 1];
cfce8870 823 gMC->Gstpar(absorber, "CUTELE", cute); // Allow beta >= 0.xx
824 gMC->Gstpar(absorber, "CUTGAM", cutg); // = 1.33 cutele.
825 gMC->Gstpar(absorber, "CUTNEU", .01); // Default.
826 gMC->Gstpar(absorber, "CUTHAD", .01); // Default.
827 gMC->Gstpar(absorber, "CUTMUO", .01); // Default.
828 gMC->Gstpar(absorber, "BCUTE", cutg); // = cutgam.
829 gMC->Gstpar(absorber, "BCUTM", cutg); // = cutgam.
830 gMC->Gstpar(absorber, "DCUTE", cute); // = cutele.
831 gMC->Gstpar(absorber, "DCUTM", cute); // = cutele.
832 gMC->Gstpar(absorber, "PPCUTM", cutg); // = 1.33 cutele.
833 gMC->Gstpar(absorber, "DCAY", 1.);
834 gMC->Gstpar(absorber, "MULS", 1.);
835 gMC->Gstpar(absorber, "PFIS", 1.);
836 gMC->Gstpar(absorber, "MUNU", 1.);
837 gMC->Gstpar(absorber, "LOSS", 1.);
838 gMC->Gstpar(absorber, "PHOT", 1.);
839 gMC->Gstpar(absorber, "COMP", 1.);
840 gMC->Gstpar(absorber, "PAIR", 1.);
841 gMC->Gstpar(absorber, "BREM", 1.);
842 gMC->Gstpar(absorber, "RAYL", 1.);
843 gMC->Gstpar(absorber, "DRAY", 1.);
844 gMC->Gstpar(absorber, "ANNI", 1.);
845 gMC->Gstpar(absorber, "HADR", 1.);
846 gMC->Gstpar(absorber, "LABS", 1.);
fe4da5cc 847 }
848 // **> Inside the cladding,
849 Int_t cladding = idtmed[fOdCladding - 1];
cfce8870 850 gMC->Gstpar(cladding, "CUTELE", cute); // Allow beta >= 0.xx
851 gMC->Gstpar(cladding, "CUTGAM", cutg); // = 1.33 cutele.
852 gMC->Gstpar(cladding, "CUTNEU", .01); // Default.
853 gMC->Gstpar(cladding, "CUTHAD", .01); // Default.
854 gMC->Gstpar(cladding, "CUTMUO", .01); // Default.
855 gMC->Gstpar(cladding, "BCUTE", cutg); // = cutgam.
856 gMC->Gstpar(cladding, "BCUTM", cutg); // = cutgam.
857 gMC->Gstpar(cladding, "DCUTE", cute); // = cutele.
858 gMC->Gstpar(cladding, "DCUTM", cute); // = cutele.
859 gMC->Gstpar(cladding, "PPCUTM", cutg); // = 1.33 cutele.
860 gMC->Gstpar(cladding, "DCAY", 1.);
861 gMC->Gstpar(cladding, "MULS", 1.);
862 gMC->Gstpar(cladding, "PFIS", 1.);
863 gMC->Gstpar(cladding, "MUNU", 1.);
864 gMC->Gstpar(cladding, "LOSS", 1.);
865 gMC->Gstpar(cladding, "PHOT", 1.);
866 gMC->Gstpar(cladding, "COMP", 1.);
867 gMC->Gstpar(cladding, "PAIR", 1.);
868 gMC->Gstpar(cladding, "BREM", 1.);
869 gMC->Gstpar(cladding, "RAYL", 1.);
870 gMC->Gstpar(cladding, "DRAY", 1.);
871 gMC->Gstpar(cladding, "ANNI", 1.);
872 gMC->Gstpar(cladding, "HADR", 1.);
873 gMC->Gstpar(cladding, "LABS", 1.);
fe4da5cc 874
875 // **> and Inside the Cherenkov fibres,
876 Int_t fiber = idtmed[fOdFiber - 1];
cfce8870 877 gMC->Gstpar(fiber, "CUTELE", cute); // Allow beta >= 0.xx
878 gMC->Gstpar(fiber, "CUTGAM", cutg); // = 1.33 cutele.
879 gMC->Gstpar(fiber, "CUTNEU", .01); // Default.
880 gMC->Gstpar(fiber, "CUTHAD", .01); // Default.
881 gMC->Gstpar(fiber, "CUTMUO", .01); // Default.
882 gMC->Gstpar(fiber, "BCUTE", cutg); // = cutgam.
883 gMC->Gstpar(fiber, "BCUTM", cutg); // = cutgam.
884 gMC->Gstpar(fiber, "DCUTE", cute); // = cutele.
885 gMC->Gstpar(fiber, "DCUTM", cute); // = cutele.
886 gMC->Gstpar(fiber, "PPCUTM", cutg); // = 1.33 cutele.
887 gMC->Gstpar(fiber, "DCAY", 1.);
888 gMC->Gstpar(fiber, "MULS", 1.);
889 gMC->Gstpar(fiber, "PFIS", 1.);
890 gMC->Gstpar(fiber, "MUNU", 1.);
891 gMC->Gstpar(fiber, "LOSS", 1.);
892 gMC->Gstpar(fiber, "PHOT", 1.);
893 gMC->Gstpar(fiber, "COMP", 1.);
894 gMC->Gstpar(fiber, "PAIR", 1.);
895 gMC->Gstpar(fiber, "BREM", 1.);
896 gMC->Gstpar(fiber, "RAYL", 1.);
897 gMC->Gstpar(fiber, "DRAY", 1.);
898 gMC->Gstpar(fiber, "ANNI", 1.);
899 gMC->Gstpar(fiber, "HADR", 1.);
900 gMC->Gstpar(fiber, "LABS", 1.);
fe4da5cc 901}
902
903//_____________________________________________________________________________
904void AliCASTORv1::StepManager()
905{
906 //
907 // Called at every step in CASTOR
908 //
909}
910
911//_____________________________________________________________________________
912void AliCASTORv1::Init()
913{
914 //
915 // Initialise CASTOR detector after it has been built
916 //
917 Int_t i;
918 //
919 printf("\n");
920 for(i=0;i<35;i++) printf("*");
921 printf(" CASTOR_INIT ");
922 for(i=0;i<35;i++) printf("*");
923 printf("\n");
924 //
925 // Here the ABSO initialisation code (if any!)
926 for(i=0;i<80;i++) printf("*");
927 printf("\n");
928}
929
930ClassImp(AliCASTORhit)
931
932//_____________________________________________________________________________
933AliCASTORhit::AliCASTORhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
934AliHit(shunt, track)
935{
936 //
937 // Store a CASTOR hit
938 //
939 fVolume = vol[0];
940 fX=hits[0];
941 fY=hits[1];
942 fZ=hits[2];
943}
944
945