4ac1455ea5c751be75eb1633eccee29e6b86952b
[u/mrichter/AliRoot.git] / START / AliSTARTv1.cxx
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 /////////////////////////////////////////////////////////////////////
18 //                                                                 //
19 // START ( T-zero) detector  version 1                             //
20 //
21 //Begin Html       
22 /*
23 <img src="gif/AliSTARTv1Class.gif">
24 */
25 //End Html
26 //                                                                  //
27 //                                                                  //
28 //////////////////////////////////////////////////////////////////////
29
30 #include <Riostream.h>
31 #include <stdlib.h>
32
33 #include <TGeometry.h>
34 #include <TLorentzVector.h>
35 #include <TMath.h>
36 #include <TNode.h>
37 #include <TTUBE.h>
38 #include <TVirtualMC.h>
39
40 #include "AliLog.h"
41 #include "AliMagF.h"
42 #include "AliRun.h"
43 #include "AliSTARThit.h"
44 #include "AliSTARTv1.h"
45 #include "AliMC.h"
46
47 ClassImp(AliSTARTv1)
48
49 //--------------------------------------------------------------------
50 AliSTARTv1::AliSTARTv1(const char *name, const char *title):
51  AliSTART(name,title)
52 {
53   //
54   // Standart constructor for START Detector version 0
55   //
56   fIdSens1=0;
57   fIshunt = 2;
58 //  setBufferSize(128000);
59 }
60 //-------------------------------------------------------------------------
61 void AliSTARTv1::CreateGeometry()
62 {
63   //
64   // Create the geometry of START Detector version 0
65   //
66   // begin Html
67   /*
68    <img src="gif/AliSTARTv0.gif">
69   */
70   //
71
72
73   Int_t *idtmed = fIdtmed->GetArray();
74   
75   Int_t is;
76   Int_t idrotm[999];
77   Float_t x,y,z;
78
79   Float_t pstartR[18]={0., 360., 5., 
80                        -76.5+0.00+69.7, 4.25, 10.,
81                        -76.5+6.05+69.7, 4.5, 10., 
82                        -76.5+8.05+69.7, 4.5, 10.,
83                        -76.5+8.05+69.7, 5.1, 10.,
84                        -62.9+0.00+69.7, 5.1, 10.};
85   
86   Float_t pstart[3]={4.3, 12.,6.8};
87   Float_t pinstart[3]={0.,1.6,6.5};
88   Float_t ppmt[3]={0.,1.5,3.5};
89
90   Float_t preg[3]={0.,0.875,0.005}; //dobavil bogdanov
91
92   Float_t pdivider[3]={0.,1.2,1.75};
93   Float_t pdiv2[3]={0.,1.2,1.25};
94   Float_t pdiv1[3]={0.6,1.2,0.5};
95   //  Float_t ptop[3]={0.,1.3,1.5};
96   Float_t ptop[3]={0.,1.0,1.5};
97   Float_t pbot[3]={0.6,1.2,0.1};
98   Float_t pglass[3]={1.2,1.3,2.};
99   Float_t pcer[3]={0.9,1.1,0.09};
100   Float_t psteel[3]={0.9,1.1,0.01};
101   Float_t ppins[3]={0.6,1.2,0.014};
102   Float_t phole[3]={0.6,1.2,0.015};
103   Float_t pknob[3]={0.5,0.6,0.4};
104   Float_t pknob_vac[3]={0.,0.5,0.4};
105   Float_t pknob_bot[3]={0.,0.6,0.05};
106   Float_t pribber[3] = {0.,1.2,2.413/2.};
107   Float_t presist[3] = {0.,1.2,0.087/2.};
108   Float_t psupport1[3] = {4.51,4.6,4.0};//C kozhuh vnutri
109   Float_t psupport2[3] = {9.4,9.5,4.0};// snaruzhi  C
110   Float_t psupport3[3] = {4.51,9.5,0.05};//kryshki  C
111    Float_t psupport5[3] = {1.44,1.5,6.5}; // stakanchik dlai feu  C
112   Float_t psupport6[3] = {0,1.5,0.05}; //kryshechka stakanchika  Al
113   Float_t psupport7[3] = {1.5,1.6,0.6}; //kolechko snaruzhu stakanchika Al
114   // Mother Volume katushka dlia krepezha vokrug truby k Absorbru
115     AliMatrix(idrotm[901], 90., 0., 90., 90., 180., 0.);
116   Float_t ppcon[70]; 
117     ppcon[0]  =   0;
118     ppcon[1]  = 360;
119     ppcon[2]  =  13;
120 //  1: 
121     ppcon[3]  =  14.1/2;
122     ppcon[4]  =   4.4;
123     ppcon[5]  =   4.5;
124 //  2
125     ppcon[6]  = ppcon[3]+1.;
126     ppcon[7]  =   4.4;
127     ppcon[8]  =   4.5;
128 //  3
129     ppcon[9]  = ppcon[6];
130     ppcon[10] =   4.4;
131     ppcon[11] =   5.1;
132
133 //  4
134
135     ppcon[12]  = ppcon[9]+0.1;
136     ppcon[13] =   4.4;
137     ppcon[14] =   5.1;
138 //  5
139
140     ppcon[15]  = ppcon[12];
141     ppcon[16] =   4.9;
142     ppcon[17] =   5.1;
143     
144 //  6
145     ppcon[18]  = ppcon[15]+7.05;
146     ppcon[19] =   4.9;
147     ppcon[20] =   5.1;
148     
149 //  7
150     ppcon[21]  = ppcon[18];
151     ppcon[22] =   4.9;
152     ppcon[23] =   5.1;
153
154 /// 8
155     ppcon[24]  = ppcon[21]+0.01;
156     ppcon[25] =   3.15;
157     ppcon[26] =   3.25;
158     
159 /// 9
160     ppcon[27]  = ppcon[24];
161     ppcon[28] =   3.15;
162     ppcon[29] =   3.25;
163     
164 //  10
165     ppcon[30]  = ppcon[27]+4.5;
166     ppcon[31] =   3.15;
167     ppcon[32] =   3.25;
168
169 //  11
170     ppcon[33] = ppcon[30];
171     ppcon[34] =   3.15;
172     ppcon[35] =   3.25;
173
174 //  12
175     ppcon[36]  = ppcon[33];
176     ppcon[37] =   3.15;
177     ppcon[38] =   7.6;
178
179 //  13
180     ppcon[39]  = ppcon[33]+0.4;
181     ppcon[40] =   3.15;
182     ppcon[41] =   7.6;
183
184 //  14
185 //    ppcon[39]  = ppcon[36];
186 //    ppcon[40] =   3.15;
187 //    ppcon[41] =   7.6;
188
189     gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,42);
190     z=-69.7;//-14.1/2;
191     gMC->Gspos("0SUP",1,"ALIC",0.,0.,z,idrotm[901],"ONLY");
192
193
194    Float_t zdetRight=69.7,zdetLeft=350;
195  //-------------------------------------------------------------------
196  //  START volume 
197  //-------------------------------------------------------------------
198   
199     
200     gMC->Gsvolu("0STR","PCON",idtmed[kAir],pstartR,18);
201     gMC->Gsvolu("0STL","TUBE",idtmed[kAir],pstart,3);
202     gMC->Gspos("0STR",1,"ALIC",0.,0.,-zdetRight-pstart[2],idrotm[901],"ONLY");
203     gMC->Gspos("0STL",1,"ALIC",0.,0.,zdetLeft+pstart[2],0,"ONLY");
204
205 //START interior
206     gMC->Gsvolu("0INS","TUBE",idtmed[kAir],pinstart,3);
207     gMC->Gsvolu("0PMT","TUBE",idtmed[kOpAir],ppmt,3);     
208     gMC->Gsvolu("0DIV","TUBE",idtmed[kVac],pdivider,3);     
209     gMC->Gsvolu("0SU1","TUBE",idtmed[kC],psupport1,3);//C kozhuh vnutri
210     gMC->Gsvolu("0SU2","TUBE",idtmed[kC],psupport2,3);// snaruzhi  C
211     gMC->Gsvolu("0SU3","TUBE",idtmed[kC],psupport3,3);//kryshka perednaiai  C
212     gMC->Gsvolu("0SU4","TUBE",idtmed[kC],psupport3,3);//kryshka zadnaiai  C
213     //    gMC->Gsvolu("0SU5","TUBE",idtmed[kAir],psupport4,3);// dyrki dlia feu v zadnej kryshke Air
214     gMC->Gsvolu("0SU6","TUBE",idtmed[kC],psupport5,3);// stakanchik dlai feu  C
215     gMC->Gsvolu("0SU7","TUBE",idtmed[kAl],psupport6,3);//kryshechka stakanchika  Al
216     gMC->Gsvolu("0SU8","TUBE",idtmed[kAl],psupport7,3);//kolechko snaruzhu stakanchika Al
217        
218 // first ring: 12 units of Scintillator+PMT+divider
219   Float_t  theta  = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetRight);
220   Float_t angle  = 2 * TMath::Pi() / 12;
221   Float_t phi[3];
222     
223    for (is=0; is<12; is++)
224       {  
225
226         x = 6.5 * TMath::Sin(is * angle);
227         y = 6.5 * TMath::Cos(is * angle);
228         
229         phi[0] = -30 * is;
230         phi[1] = 90 - is * 30;
231         phi[2] = 90 - is * 30;
232         for (Int_t j = 0; j < 3; j++)
233           if (phi[j] < 0)  phi[j] += 360;
234         
235         AliMatrix (idrotm[902 + is], 90.,         phi[0],
236                    90. + theta, phi[1],
237                    theta,       phi[2]);  
238         z=-pstart[2]+pinstart[2]+0.2;
239         gMC->Gspos ("0INS", is + 1, "0STR", x, y, z, idrotm[902 + is], "ONLY");
240         gMC->Gspos ("0INS", is + 13, "0STL", x, y, z, 0, "ONLY");
241         /*      
242         x = 9 * TMath::Sin(angle/2+is * angle);
243         y = 9 * TMath::Cos(angle/2+is * angle);
244
245         gMC->Gspos ("0INS", is + 25, "0STL", x, y, z, 0, "ONLY");
246         */      
247       } 
248    
249       
250    x=0;
251    y=0;
252    z=-pinstart[2]+ppmt[2]+2.*psupport6[2]+0.1;
253    gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY");
254    z=z+pdivider[2]+ppmt[2];
255    gMC->Gspos("0DIV",1,"0INS",x,y,z,0,"ONLY");
256    
257    // PMT
258    
259    // Entry window (glass)
260    gMC->Gsvolu("0TOP","TUBE",idtmed[kOpGlass],ptop,3); //glass
261    //   gMC->Gsvolu("0TOP","TUBE",idtmed[12],ptop,3); //lucite
262    z=-ppmt[2]+ptop[2];
263    gMC->Gspos("0TOP",1,"0PMT",0,0,z,0,"ONLY");
264    
265    //Fotokatod
266    
267    gMC->Gsvolu ("0REG", "TUBE", idtmed[kOpGlass], preg, 3); //photocathode dobavil bogdanov(AliSTARTv2)
268    z = -ppmt[2] + 2 * ptop[2] + preg[2]; //photocathode dobavil bogdanov 
269    gMC->Gspos ("0REG", 1, "0PMT", 0, 0, z, 0, "ONLY"); //photocathode dobavil bogdanov(AliSTARTv2)
270    
271    // Bottom glass
272    gMC->Gsvolu("0BOT","TUBE",idtmed[kGlass],pbot,3);
273    z=ppmt[2]-pbot[2];
274    if(fDebug) printf("%s: Z bottom %f\n",ClassName(),z);
275    gMC->Gspos("0BOT",1,"0PMT",0,0,z,0,"ONLY");
276    // Side cylinder glass
277    gMC->Gsvolu("0OUT","TUBE",idtmed[kGlass],pglass,3);
278    z=ppmt[2]-pglass[2];
279    gMC->Gspos("0OUT",1,"0PMT",0,0,z,0,"ONLY");
280    //PMT electrodes support structure
281    gMC->Gsvolu("0CER","TUBE",idtmed[kCer],pcer,3);
282    gMC->Gsvolu("0STE","TUBE",idtmed[kSteel],psteel,3);
283    z=-ppmt[2]+2*ptop[2]+0.3;;
284    for (is=1; is<=15; is++)
285      {
286        z=z+psteel[2]+pcer[2];
287        gMC->Gspos("0CER",is,"0PMT",0,0,z,0,"ONLY");
288        z=z+psteel[2]+pcer[2];
289        gMC->Gspos("0STE",is,"0PMT",0,0,z,0,"ONLY");
290      }
291    
292    // Divider
293    // Knob at the bottom of PMT baloon
294    
295    gMC->Gsvolu("0NB","TUBE",idtmed[6],pknob,3);
296    z=-pdivider[2]+pknob[2];
297    gMC->Gspos("0NB",1,"0DIV",0,0,z,0,"ONLY");
298    gMC->Gsvolu("0KB","TUBE",idtmed[kGlass],pknob_bot,3);
299    z=-pdivider[2]+2*pknob[2]+pknob_bot[2];
300    gMC->Gspos("0KB",1,"0DIV ",0,0,z,0,"ONLY");
301    gMC->Gsvolu("0VAC","TUBE",idtmed[kVac],pknob_vac,3);
302    z=-pdivider[2]+pknob_vac[2];
303    gMC->Gspos("0VAC",1,"0DIV",0,0,z,0,"ONLY");
304    //Steel pins + pin holes
305    gMC->Gsvolu("0PIN","TUBE",idtmed[kSteel],ppins,3);
306    z=-pdivider[2]+ppins[2];
307    gMC->Gspos("0PIN",1,"0DIV",0,0,z,0,"ONLY");
308    gMC->Gsvolu("0HOL","TUBE",idtmed[kBrass],phole,3);
309    z=-pdivider[2]+2*ppins[2]+phole[2];
310    gMC->Gspos("0HOL",1,"0DIV",0,0,z,0,"ONLY");
311    
312    //Socket
313    gMC->Gsvolu("0V1","TUBE",idtmed[kCer],pdiv1,3);
314    z=-pdivider[2]+pdiv1[2];
315    gMC->Gspos("0V1",1,"0DIV",0,0,z,0,"ONLY");
316    //Resistors
317    gMC->Gsvolu("0V2","TUBE",idtmed[kAir],pdiv2,3);
318    z=pdivider[2]-pdiv2[2];
319    gMC->Gspos("0V2",1,"0DIV",0,0,z,0,"ONLY");
320    gMC->Gsvolu("0RS","TUBE",idtmed[kCer],presist,3);
321    z=-pdiv2[2]+presist[2];
322    gMC->Gspos("0RS",1,"0V2",0,0,z,0,"ONLY");
323    gMC->Gsvolu("0RB","TUBE",idtmed[kRibber],pribber,3);
324    z=pdiv2[2]-pribber[2];
325    gMC->Gspos("0RB",1,"0V2",0,0,z,0,"ONLY");
326    
327    
328    //Support  left side
329    /*   
330    z=-pstart[2]+psupport1[2];
331    gMC->Gspos("0SU1",2,"0STL",0,0,z,0,"ONLY"); //C kozhuh snaruzhi
332    gMC->Gspos("0SU2",2,"0STL",0,0,z,0,"ONLY"); //C kozhuh vnutri
333    z=-pstart[2]+psupport3[2];
334    gMC->Gspos("0SU3",2,"0STL",0,0,z,0,"ONLY"); //peredniaia kryshka
335    z=-pstart[2]+2.*psupport1[2];
336    gMC->Gspos("0SU4",2,"0STL",0,0,z,0,"MANY"); //zadnaiai kryshka
337    */
338    z=-pstart[2]+psupport1[2]+0.1;
339    gMC->Gspos("0SU1",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh snaruzhi
340    gMC->Gspos("0SU2",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh vnutri
341    z=-pstart[2]+psupport3[2]+0.1;
342    gMC->Gspos("0SU3",1,"0STR",0,0,z,0,"ONLY"); //peredniaia kryshka
343    z=-pstart[2]+2.*psupport1[2]+0.1;
344    gMC->Gspos("0SU4",1,"0STR",0,0,z,0,"MANY"); //zadnaiai kryshka
345    gMC->Gspos("0SU6",1,"0INS",0,0,0,0,"ONLY");//C stakanchik dlia feu 
346    z=-pinstart[2]+psupport6[2];
347    gMC->Gspos("0SU7",1,"0INS",0,0,z,0,"ONLY"); //Al kryshechka 
348    
349    z=pinstart[2]-psupport7[2];
350    gMC->Gspos("0SU8",1,"0INS",0,0,z,0,"ONLY"); //Al kolechko
351    
352    
353    Float_t par[3];
354    par[0]=4.4;
355    par[1]=4.5;
356    par[2]=0.5;
357    gMC->Gsvolu("0SC0","TUBE",idtmed[kC],par,3);
358    z=ppcon[3]+par[2];
359    gMC->Gspos("0SC0",1,"0SUP",0,0,z,0,"ONLY"); 
360    z += par[2];
361    par[0]=4.4;
362    par[1]=5.1;
363    par[2]=0.05;
364    gMC->Gsvolu("0SC1","TUBE",idtmed[kC],par,3);
365    z += par[2];
366    gMC->Gspos("0SC1",1,"0SUP",0,0,z,0,"ONLY"); 
367    z=z+par[2];
368    par[0]=4.9;
369    par[1]=5.0;
370    par[2]=6.9/2;
371     gMC->Gsvolu("0SC2","TUBE",idtmed[kC],par,3);
372     z += par[2];
373     gMC->Gspos("0SC2",1,"0SUP",0,0,z,0,"ONLY"); 
374     z += par[2];
375     /*
376     Float_t parC[5];
377     parC[0]=0.25;
378     parC[1]=5.1;
379     parC[2]=5.2;
380     parC[3]=5.5;
381     parC[4]=5.6;
382     gMC->Gsvolu("0SC3","CONE",idtmed[kC],parC,5);
383     z += parC[0];
384     gMC->Gspos("0SC3",1,"0SUP",0,0,z,0,"ONLY"); 
385     z += parC[0];
386     par[0]=5.5;
387     par[1]=5.6;
388     par[2]=1.2/2;
389     gMC->Gsvolu("0SC4","TUBE",idtmed[kC],par,3);
390     z += par[2];
391     gMC->Gspos("0SC4",1,"0SUP",0,0,z,0,"ONLY"); 
392     par[0]=5.1;
393     par[1]=5.5;
394     par[2]=1.2/2;
395     gMC->Gsvolu("0SA0","TUBE",idtmed[kAl],par,3);
396     gMC->Gspos("0SA0",1,"0SUP",0,0,z,0,"ONLY"); 
397     //gvozdi dlia skruchivaniia Al i C parts
398     par[0]=5.75; 
399     par[1]=5.78;
400     gMC->Gsvolu("0SN1","TUBE",idtmed[kSteel],par,3);
401     gMC->Gspos("0SN1",1,"0SUP",0,0,z,0,"ONLY"); 
402     z += par[2];
403     */
404     par[0]=3.15;
405     par[1]=4.9;
406     par[2]=0.1/2;
407     gMC->Gsvolu("0SA1","TUBE",idtmed[kAl],par,3);
408     
409     z += par[2];
410     gMC->Gspos("0SA1",1,"0SUP",0,0,z,0,"ONLY"); 
411     z=z+par[2];
412     par[0]=3.15;
413     par[1]=3.16;
414     par[2]=4.5/2;
415     gMC->Gsvolu("0SA2","TUBE",idtmed[kAl],par,3);
416     z += par[2];
417     gMC->Gspos("0SA2",1,"0SUP",0,0,z,0,"ONLY"); 
418     z=z+par[2];
419     par[0]=3.16; // eta chast' prikruchena k absorberu
420     par[1]=7.5;
421     par[2]=0.2;
422     gMC->Gsvolu("0SA3","TUBE",idtmed[kAl],par,3);
423     z += par[2];
424     gMC->Gspos("0SA3",1,"0SUP",0,0,z,0,"ONLY"); 
425     par[0]=3.16; // gvozdi eta chast' prikruchena k absorberu
426     par[1]=7.5;
427     par[2]=0.01;
428     gMC->Gsvolu("0SN2","TUBE",idtmed[kSteel],par,3);
429     gMC->Gspos("0SN2",1,"0SUP",0,0,z,0,"ONLY"); 
430     
431  
432 }    
433 //------------------------------------------------------------------------
434 void AliSTARTv1::CreateMaterials()
435 {
436    Int_t isxfld   = gAlice->Field()->Integ();
437    Float_t sxmgmx = gAlice->Field()->Max();
438    Float_t a,z,d,radl,absl,buf[1];
439    Int_t nbuf;
440    Int_t *idtmed = fIdtmed->GetArray();
441
442 // AIR
443                                                                                 
444    Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
445    Float_t zAir[4]={6.,7.,8.,18.};
446    Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
447    Float_t dAir = 1.20479E-3;
448                                                                                 
449 // Scintillator CH
450    Float_t ascin[2]={1.01,12.01};
451    Float_t zscin[2]={1,6};
452    Float_t wscin[2]={1,1};
453    Float_t denscin=1.03;
454 //Lucite C(CH3)CO2CH3
455    Float_t alucite[3]={1.01,12.01,15.999};
456    Float_t zlucite[3]={1,6,8};
457    Float_t wlucite[3]={8,5,2};
458    Float_t denlucite=1.16;
459  // PMT glass SiO2
460    Float_t aglass[2]={28.0855,15.9994};
461    Float_t zglass[2]={14.,8.};
462    Float_t wglass[2]={1.,2.};
463    Float_t dglass=2.65;
464 // Ceramic   97.2% Al2O3 , 2.8% SiO2
465    Float_t acer[2],zcer[2],wcer[2]={0.972,0.028};
466    Float_t aCeramic[2]  = { 26.981539,15.9994 };
467    Float_t zCeramic[2]  = { 13.,8. };
468    Float_t wCeramic[2]  = { 2.,3. };
469    Float_t denscer  = 3.6;
470
471 // Brass 80% Cu, 20% Zn
472    Float_t abrass[2] = {63.546,65.39};
473    Float_t zbrass[2] = {29,30};
474    Float_t wbrass[2] = {0.8,0.2};
475    Float_t denbrass=8.96;
476
477 //Ribber C6H12S
478    Float_t aribber[3] = {12.,1.,32.};
479    Float_t zribber[3] = {6.,1.,16.};
480    Float_t wribber[3] = {6.,12.,1.};
481    Float_t denribber=0.8;
482 // Support inside 
483    Float_t asupport[2] = {12.,1.};
484    Float_t zsupport[2] = {6.,1.};
485    Float_t wsupport[2] = {1.,1.};
486    Float_t densupport=0.1;
487     
488 //*** Definition Of avaible START materials ***
489    AliMaterial(0, "START Steel$", 55.850,26.,7.87,1.76,999);
490    AliMaterial(1, "START Vacuum$", 1.e-16,1.e-16,1.e-16,1.e16,999);
491    AliMixture(2, "START Air$", aAir, zAir, dAir,4,wAir);
492    AliMaterial(10, "CarbonPlastic$", 12.01, 6.0, 2.26, 18.8,999); 
493    AliMaterial(11, "Aliminium$", 26.98, 13.0, 2.7, 8.9,999); 
494
495    AliMixture( 3, "Ceramic  $",aCeramic, zCeramic, denscer, -2, wCeramic);
496    AliMixture( 4, "PMT glass   $",aglass,zglass,dglass,-2,wglass);
497    char namate[21]="";
498    gMC->Gfmate((*fIdmate)[3], namate, a, z, d, radl, absl, buf, nbuf);
499    acer[0]=a;
500    zcer[0]=z;
501    gMC->Gfmate((*fIdmate)[4], namate, a, z, d, radl, absl, buf, nbuf);
502    acer[1]=a;
503    zcer[1]=z;
504
505    
506    AliMixture( 9, "Ceramic    $", acer, zcer, denscer, 2, wcer);
507    AliMixture( 5, "Scintillator$",ascin,zscin,denscin,-2,wscin);
508    AliMixture( 6, "Brass    $", abrass, zbrass, denbrass, 2, wbrass);
509    AliMixture( 7, "Ribber $",aribber,zribber,denribber,-3,wribber);
510    AliMixture( 8, "Lucite$",alucite,zlucite,denlucite,-3,wlucite);
511    AliMixture( 9, "Penoplast$",asupport,zsupport,densupport,-2,wsupport);
512    
513    AliMedium(1, "START Air$", 2, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
514    AliMedium(2, "Scintillator$", 5, 1, isxfld, sxmgmx, 10., .01, 1., .003, .003);
515    AliMedium(3, "Vacuum$", 1, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
516    AliMedium(4, "Ceramic$", 9, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
517    AliMedium(6, "Glass$", 4, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
518    AliMedium(8, "Steel$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
519    AliMedium(9, "Ribber  $", 7, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
520    AliMedium(11, "Brass  $", 6, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
521    AliMedium(12, "Lucite$", 8, 1, isxfld, sxmgmx, 10., .01, 1., .003, .003);  
522    AliMedium(13, "CarbonPlastic$", 10, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);  
523    AliMedium(14, "PenoPlast$", 9, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);  
524    AliMedium(15, "Aluminium$", 11, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);  
525    AliMedium(16, "OpticalGlass$", 4, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
526    AliMedium(17, "START OpAir$", 2, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
527  
528
529 // Definition Cherenkov parameters
530    int i;
531    const Int_t kNbins=30;
532    
533    Float_t aPckov[kNbins]; 
534    Float_t aRindexSiO2[kNbins], rindexAir[kNbins], efficAll[kNbins], absorAir[kNbins];
535    
536    Float_t aAbsSiO2[kNbins]={//New values from A.DiMauro 28.10.03 total 31
537      34.4338, 30.5424, 30.2584, 31.4928, 31.7868, 17.8397, 9.3410, 6.4492, 6.1128, 5.8128,
538      5.5589,  5.2877,  5.0162,  4.7999,  4.5734,  4.2135, 3.7471, 2.6033, 1.5223, 0.9658,
539      0.4242,  0.2500,  0.1426,  0.0863,  0.0793,  0.0724, 0.0655, 0.0587, 0.0001, 0.0001};
540    
541
542  //  Float_t aAbsSiO2[kNbins]={30*2000.};
543   for(i=0;i<kNbins;i++)
544     {
545       aPckov[i]=(0.1*i+5.5)*1e-9;//Photons energy bins 5.5 eV - 8.5 eV step 0.1 eV   
546       aRindexSiO2[i]=1.458; //refractive index for qwarts
547       rindexAir[i]=1.;
548       efficAll[i]=1.;
549       
550       absorAir[i]=1.e-5;
551     }
552  
553    gMC->SetCerenkov (idtmed[kOpGlass], kNbins, aPckov, aAbsSiO2, efficAll, aRindexSiO2 );
554    gMC->SetCerenkov (idtmed[kOpAir], kNbins , aPckov, absorAir, efficAll, 
555 rindexAir);
556    if(fDebug) cout<<ClassName()<<": ++++++++++++++Medium set++++++++++"<<endl;
557
558 }
559 //---------------------------------------------------------------------
560 void AliSTARTv1::DrawDetector()
561 {
562 //
563 // Draw a shaded view of the Forward multiplicity detector version 0
564 //
565   
566   //Set ALIC mother transparent
567   gMC->Gsatt("ALIC","SEEN",0);
568   //
569   //Set volumes visible
570   //  gMC->Gsatt("0STR","SEEN",0);
571   //  gMC->Gsatt("0INS","SEEN",0);
572   // gMC->Gsatt("0PMT","SEEN",1);
573   // gMC->Gsatt("0DIV","SEEN",1);
574   //
575   gMC->Gdopt("hide","off");
576   gMC->Gdopt("shad","on");
577   gMC->SetClipBox(".");
578   gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000);
579   gMC->DefaultRange();
580   gMC->Gdraw("alic",90,0,0,-35,9.5,.6,0.6);
581   //gMC->Gdraw("alic",0,0,0,10,9.5,.8,0.8); //other side view
582   gMC->Gdhead(1111,"T-Zero detector");
583   gMC->Gdopt("hide","off");
584 }
585
586 //-------------------------------------------------------------------
587 void AliSTARTv1::Init()
588 {
589 // Initialises version 0 of the Forward Multiplicity Detector
590 //
591 //Int_t *idtmed  = gAlice->Idtmed();
592   AliSTART::Init();
593   fIdSens1=gMC->VolId("0REG");
594
595    AliDebug(1,Form("%s: *** START version 1 initialized ***\n",ClassName()));
596
597 }
598
599 //-------------------------------------------------------------------
600
601 void AliSTARTv1::StepManager()
602 {
603   //
604   // Called for every step in the START Detector
605   //
606   Int_t id,copy,copy1;
607   static Float_t hits[6];
608   static Int_t vol[2];
609   TLorentzVector pos;
610   
611   TClonesArray &lhits = *fHits;
612   
613   if(!gMC->IsTrackAlive()) return; // particle has disappeared
614
615 // If particles is photon then ...
616
617   if (gMC->TrackPid() == 50000050)
618     {
619       id=gMC->CurrentVolID(copy);
620       
621       
622       // Check the sensetive volume
623       if(id==fIdSens1 ) {
624         if(gMC->IsTrackEntering()) {
625           gMC->CurrentVolOffID(2,copy);
626           vol[1]=copy;
627           gMC->CurrentVolOffID(3,copy1);
628           vol[0]=copy1;
629           
630           gMC->TrackPosition(pos);
631           hits[0] = pos[0];
632           hits[1] = pos[1];
633           hits[2] = pos[2];
634           if(pos[2]<0) vol[0]=2;
635           if(pos[2]>=0) vol[0]=1;
636           
637           Float_t etot=gMC->Etot();
638           hits[3]=etot;
639           Int_t iPart= gMC->TrackPid();
640           Int_t partID=gMC->IdFromPDG(iPart);
641           hits[4]=partID;
642           //     if (partID!=50) cout<<partID<<endl;
643           Float_t ttime=gMC->TrackTime();
644           hits[5]=ttime*1e9;
645         }
646         
647         if(gMC->IsTrackExiting())       
648           new(lhits[fNhits++]) AliSTARThit(fIshunt,gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,hits);      
649         
650       }
651     }
652 //---------------------------------------------------------------------
653 }
654
655
656
657
658
659
660
661
662