hardcoded detector position; bug in alignment pth fixed
[u/mrichter/AliRoot.git] / START / AliSTARTv1.cxx
CommitLineData
bc46b572 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
9996ad0f 16/* $Id$ */
bc46b572 17
18/////////////////////////////////////////////////////////////////////
19// //
20// START ( T-zero) detector version 1 //
21//
22//Begin Html
23/*
24<img src="gif/AliSTARTv1Class.gif">
25*/
26//End Html
27// //
28// //
29//////////////////////////////////////////////////////////////////////
30
88cb7938 31#include <Riostream.h>
32#include <stdlib.h>
33
bc46b572 34#include <TGeometry.h>
0cc62300 35#include <TLorentzVector.h>
88cb7938 36#include <TMath.h>
37#include <TNode.h>
38#include <TTUBE.h>
39#include <TVirtualMC.h>
665c0a68 40#include "TGeoManager.h"
bc46b572 41
e4da63c2 42#include "AliLog.h"
94de3818 43#include "AliMagF.h"
88cb7938 44#include "AliRun.h"
e21b5f4a 45
bc46b572 46#include "AliSTARThit.h"
88cb7938 47#include "AliSTARTv1.h"
e21b5f4a 48#include "AliSTARTParameters.h"
49
5d12ce38 50#include "AliMC.h"
e21b5f4a 51#include "AliCDBLocal.h"
52#include "AliCDBStorage.h"
53#include "AliCDBManager.h"
54#include "AliCDBEntry.h"
bc46b572 55
56ClassImp(AliSTARTv1)
57
58//--------------------------------------------------------------------
59AliSTARTv1::AliSTARTv1(const char *name, const char *title):
665c0a68 60 AliSTART(name,title),
61 fIdSens1(0)
bc46b572 62{
63 //
64 // Standart constructor for START Detector version 0
65 //
e4da63c2 66 fIshunt = 2;
bc46b572 67}
db173afc 68//_____________________________________________________________________________
69
70AliSTARTv1::~AliSTARTv1()
71{
72 // desctructor
73}
74
bc46b572 75//-------------------------------------------------------------------------
76void AliSTARTv1::CreateGeometry()
77{
78 //
79 // Create the geometry of START Detector version 0
80 //
81 // begin Html
82 /*
83 <img src="gif/AliSTARTv0.gif">
84 */
85 //
86
87
e21b5f4a 88 Int_t *idtmed = fIdtmed->GetArray();
eb8325b2 89 /*
90 AliSTARTParameters* param = AliSTARTParameters::Instance();
91 param->Init();
e21b5f4a 92 Float_t zdetC = param->GetZposition(0);
93 Float_t zdetA = param->GetZposition(1);
eb8325b2 94 */
95 Float_t zdetC = 69.7;
96 Float_t zdetA = 373.;
97
bc46b572 98 Int_t is;
99 Int_t idrotm[999];
100 Float_t x,y,z;
ceea38ef 101 //C T0 mother volume
304618a5 102 Float_t pstartR[18]={0., 360., 5.,
ceea38ef 103 -6.8, 4.25, 10., //-76.5+0.00+69.7
104 -0.75 , 4.5, 10., // -76.5+6.05+69.7
105 1.25 , 4.5, 10., //-76.5+8.05+69.7
106 1.25 , 5.1, 10., //-76.5+8.05+69.7
107 6.8 , 5.1, 10.}; //-62.9+0.00+69.7
304618a5 108
ceea38ef 109 Float_t pstart[3]={4.29, 12.5,6.8};
d65c9254 110 Float_t pinstart[3]={0.,1.6,6.5};
e4da63c2 111 Float_t ppmt[3]={0.,1.5,3.5};
a4156e5c 112 Float_t ptop[3]={0.,1.,1.0};
2303c85c 113 Float_t preg[3]={0., 1.0, 0.005}; //photcathode dobavil bogdanov
ceea38ef 114 Float_t ptopout[3]={1.,1.01, 1.}; //metal air around raiator for photos reflection
bc46b572 115 Float_t pbot[3]={0.6,1.2,0.1};
116 Float_t pglass[3]={1.2,1.3,2.};
e21b5f4a 117 Float_t pcer[3]={0.9,1.1,1.35};
118 Float_t psteel[3]={0.9,1.1,0.15};
304618a5 119 Float_t psupport1[3] = {4.51,4.6,4.0};//C kozhuh vnutri
d65c9254 120 Float_t psupport2[3] = {9.4,9.5,4.0};// snaruzhi C
304618a5 121 Float_t psupport3[3] = {4.51,9.5,0.05};//kryshki C
2303c85c 122 Float_t psupport5[3] = {1.44,1.5,6.5}; // stakanchik dlai feu C
e21b5f4a 123 Float_t psupport6[3] = {0,1.4,0.04}; //kryshechka stakanchika Al
124 Float_t psupport7[3] = {1.5,1.6,0.4}; //kolechko snaruzhu stakanchika Al
db173afc 125
d65c9254 126 // Mother Volume katushka dlia krepezha vokrug truby k Absorbru
2ad713c4 127 AliMatrix(idrotm[901], 90., 0., 90., 90., 180., 0.);
d65c9254 128 Float_t ppcon[70];
129 ppcon[0] = 0;
130 ppcon[1] = 360;
304618a5 131 ppcon[2] = 13;
d65c9254 132// 1:
ceea38ef 133 ppcon[3] = 7.2; // 14.1/2;
d65c9254 134 ppcon[4] = 4.4;
304618a5 135 ppcon[5] = 4.5;
d65c9254 136// 2
304618a5 137 ppcon[6] = ppcon[3]+1.;
d65c9254 138 ppcon[7] = 4.4;
304618a5 139 ppcon[8] = 4.5;
d65c9254 140// 3
141 ppcon[9] = ppcon[6];
142 ppcon[10] = 4.4;
304618a5 143 ppcon[11] = 5.1;
d65c9254 144
145// 4
146
147 ppcon[12] = ppcon[9]+0.1;
148 ppcon[13] = 4.4;
304618a5 149 ppcon[14] = 5.1;
d65c9254 150// 5
151
152 ppcon[15] = ppcon[12];
304618a5 153 ppcon[16] = 4.9;
154 ppcon[17] = 5.1;
d65c9254 155
156// 6
ceea38ef 157// ppcon[18] = ppcon[15]+6.9;
158 ppcon[18] = ppcon[15]+6.7;
304618a5 159 ppcon[19] = 4.9;
160 ppcon[20] = 5.1;
d65c9254 161
162// 7
163 ppcon[21] = ppcon[18];
304618a5 164 ppcon[22] = 4.9;
165 ppcon[23] = 5.1;
166
304618a5 167/// 8
affef71b 168 ppcon[24] = ppcon[21]+0.01;
304618a5 169 ppcon[25] = 3.15;
170 ppcon[26] = 3.25;
ceea38ef 171 // ppcon[25] = 2.25;
172 // ppcon[26] = 2.33;
d65c9254 173
affef71b 174/// 9
175 ppcon[27] = ppcon[24];
ceea38ef 176 ppcon[28] = ppcon[25];
177 ppcon[29] = ppcon[26] ;
affef71b 178
d65c9254 179// 10
ceea38ef 180// ppcon[30] = ppcon[27]+4.5;
181 ppcon[30] = ppcon[27]+4.7;
182 ppcon[31] = 2.3;
183 ppcon[32] = ppcon[26] ;
304618a5 184
d65c9254 185// 11
affef71b 186 ppcon[33] = ppcon[30];
ceea38ef 187 // ppcon[34] = 3.15;
188 ppcon[34] = 2.3;
189 ppcon[35] = ppcon[26] ;
190
d65c9254 191// 12
affef71b 192 ppcon[36] = ppcon[33];
ceea38ef 193 ppcon[37] = ppcon[34] ;
304618a5 194 ppcon[38] = 7.6;
ceea38ef 195
196 // 13
197 ppcon[39] = ppcon[33]+0.2;
198 ppcon[40] = ppcon[34] ;
304618a5 199 ppcon[41] = 7.6;
ceea38ef 200
affef71b 201// 14
202// ppcon[39] = ppcon[36];
203// ppcon[40] = 3.15;
204// ppcon[41] = 7.6;
205
e21b5f4a 206
207
304618a5 208 gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,42);
ceea38ef 209 // gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,38);
e21b5f4a 210 z=-zdetC;
2ad713c4 211 gMC->Gspos("0SUP",1,"ALIC",0.,0.,z,idrotm[901],"ONLY");
bc46b572 212
bc46b572 213 //-------------------------------------------------------------------
214 // START volume
215 //-------------------------------------------------------------------
216
bc46b572 217
304618a5 218 gMC->Gsvolu("0STR","PCON",idtmed[kAir],pstartR,18);
d65c9254 219 gMC->Gsvolu("0STL","TUBE",idtmed[kAir],pstart,3);
ceea38ef 220 gMC->Gspos("0STR",1,"ALIC",0.,0.,-zdetC+pstartR[3],idrotm[901],"ONLY");
e21b5f4a 221 gMC->Gspos("0STL",1,"ALIC",0.,0.,zdetA+pstart[2],0,"ONLY");
bc46b572 222
223//START interior
db173afc 224 gMC->Gsvolu("0INS","TUBE",idtmed[kAir],pinstart,3);
225 gMC->Gsvolu("0PMT","TUBE",idtmed[kAir],ppmt,3);
226
d65c9254 227 gMC->Gsvolu("0SU1","TUBE",idtmed[kC],psupport1,3);//C kozhuh vnutri
228 gMC->Gsvolu("0SU2","TUBE",idtmed[kC],psupport2,3);// snaruzhi C
229 gMC->Gsvolu("0SU3","TUBE",idtmed[kC],psupport3,3);//kryshka perednaiai C
230 gMC->Gsvolu("0SU4","TUBE",idtmed[kC],psupport3,3);//kryshka zadnaiai C
e4da63c2 231 // gMC->Gsvolu("0SU5","TUBE",idtmed[kAir],psupport4,3);// dyrki dlia feu v zadnej kryshke Air
d65c9254 232 gMC->Gsvolu("0SU6","TUBE",idtmed[kC],psupport5,3);// stakanchik dlai feu C
233 gMC->Gsvolu("0SU7","TUBE",idtmed[kAl],psupport6,3);//kryshechka stakanchika Al
234 gMC->Gsvolu("0SU8","TUBE",idtmed[kAl],psupport7,3);//kolechko snaruzhu stakanchika Al
db173afc 235
bc46b572 236// first ring: 12 units of Scintillator+PMT+divider
e21b5f4a 237 Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetC);
e4da63c2 238 Float_t angle = 2 * TMath::Pi() / 12;
d65c9254 239 Float_t phi[3];
304618a5 240
d65c9254 241 for (is=0; is<12; is++)
bc46b572 242 {
ef51244a 243
e4da63c2 244 x = 6.5 * TMath::Sin(is * angle);
245 y = 6.5 * TMath::Cos(is * angle);
d65c9254 246
60b0465d 247 phi[0] = -30 * is;
248 phi[1] = 90 - is * 30;
249 phi[2] = 90 - is * 30;
250 for (Int_t j = 0; j < 3; j++)
251 if (phi[j] < 0) phi[j] += 360;
d65c9254 252
60b0465d 253 AliMatrix (idrotm[902 + is], 90., phi[0],
254 90. + theta, phi[1],
255 theta, phi[2]);
d65c9254 256 z=-pstart[2]+pinstart[2]+0.2;
60b0465d 257 gMC->Gspos ("0INS", is + 1, "0STR", x, y, z, idrotm[902 + is], "ONLY");
258 gMC->Gspos ("0INS", is + 13, "0STL", x, y, z, 0, "ONLY");
9436d88b 259 }
60b0465d 260
bc46b572 261
60b0465d 262 x=0;
263 y=0;
e21b5f4a 264 z=-pinstart[2]+ppmt[2]+psupport6[2]*2;
60b0465d 265 gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY");
60b0465d 266 // PMT
267
268 // Entry window (glass)
e4da63c2 269 gMC->Gsvolu("0TOP","TUBE",idtmed[kOpGlass],ptop,3); //glass
60b0465d 270 z=-ppmt[2]+ptop[2];
271 gMC->Gspos("0TOP",1,"0PMT",0,0,z,0,"ONLY");
ceea38ef 272 //"metal" air volume to simulate reclection
273 gMC->Gsvolu("0TOO","TUBE",idtmed[kOpAir],ptopout,3);
db173afc 274 gMC->Gspos("0TOO",1,"0PMT",0,0,z,0,"ONLY");
275
60b0465d 276 //Fotokatod
db173afc 277 gMC->Gsvolu ("0REG", "TUBE", idtmed[kOpGlassCathode], preg, 3);
278 z = -ppmt[2] + 2 * ptop[2] + preg[2];
279 gMC->Gspos ("0REG", 1, "0PMT", 0, 0, z, 0, "ONLY");
e21b5f4a 280 // Bottom glass
60b0465d 281 gMC->Gsvolu("0BOT","TUBE",idtmed[kGlass],pbot,3);
282 z=ppmt[2]-pbot[2];
60b0465d 283 gMC->Gspos("0BOT",1,"0PMT",0,0,z,0,"ONLY");
284 // Side cylinder glass
285 gMC->Gsvolu("0OUT","TUBE",idtmed[kGlass],pglass,3);
286 z=ppmt[2]-pglass[2];
60b0465d 287 gMC->Gspos("0OUT",1,"0PMT",0,0,z,0,"ONLY");
288 //PMT electrodes support structure
289 gMC->Gsvolu("0CER","TUBE",idtmed[kCer],pcer,3);
290 gMC->Gsvolu("0STE","TUBE",idtmed[kSteel],psteel,3);
e21b5f4a 291 z=-ppmt[2]+2*ptop[2]+0.3 + pcer[2];
292 gMC->Gspos("0CER",1,"0PMT",0,0,z,0,"ONLY");
293 z +=psteel[2]+pcer[2];
294 gMC->Gspos("0STE",1,"0PMT",0,0,z,0,"ONLY");
295
60b0465d 296 //Support left side
60b0465d 297 z=-pstart[2]+psupport1[2]+0.1;
298 gMC->Gspos("0SU1",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh snaruzhi
299 gMC->Gspos("0SU2",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh vnutri
300 z=-pstart[2]+psupport3[2]+0.1;
301 gMC->Gspos("0SU3",1,"0STR",0,0,z,0,"ONLY"); //peredniaia kryshka
e21b5f4a 302 z=-pstart[2]+2.*psupport1[2]-0.05;//+0.1;
e4da63c2 303 gMC->Gspos("0SU4",1,"0STR",0,0,z,0,"MANY"); //zadnaiai kryshka
60b0465d 304 gMC->Gspos("0SU6",1,"0INS",0,0,0,0,"ONLY");//C stakanchik dlia feu
305 z=-pinstart[2]+psupport6[2];
306 gMC->Gspos("0SU7",1,"0INS",0,0,z,0,"ONLY"); //Al kryshechka
307
308 z=pinstart[2]-psupport7[2];
309 gMC->Gspos("0SU8",1,"0INS",0,0,z,0,"ONLY"); //Al kolechko
310
311
312 Float_t par[3];
313 par[0]=4.4;
314 par[1]=4.5;
315 par[2]=0.5;
316 gMC->Gsvolu("0SC0","TUBE",idtmed[kC],par,3);
317 z=ppcon[3]+par[2];
318 gMC->Gspos("0SC0",1,"0SUP",0,0,z,0,"ONLY");
319 z += par[2];
320 par[0]=4.4;
321 par[1]=5.1;
322 par[2]=0.05;
323 gMC->Gsvolu("0SC1","TUBE",idtmed[kC],par,3);
324 z += par[2];
325 gMC->Gspos("0SC1",1,"0SUP",0,0,z,0,"ONLY");
326 z=z+par[2];
327 par[0]=4.9;
328 par[1]=5.0;
ceea38ef 329 par[2]=6.7/2;
d65c9254 330 gMC->Gsvolu("0SC2","TUBE",idtmed[kC],par,3);
331 z += par[2];
332 gMC->Gspos("0SC2",1,"0SUP",0,0,z,0,"ONLY");
333 z += par[2];
db173afc 334
eb8325b2 335 par[0]=3.15;
304618a5 336 par[1]=4.9;
337 par[2]=0.1/2;
d65c9254 338 gMC->Gsvolu("0SA1","TUBE",idtmed[kAl],par,3);
304618a5 339
d65c9254 340 z += par[2];
341 gMC->Gspos("0SA1",1,"0SUP",0,0,z,0,"ONLY");
342 z=z+par[2];
343 par[0]=3.15;
344 par[1]=3.16;
ceea38ef 345 par[2]=4.7/2;
d65c9254 346 gMC->Gsvolu("0SA2","TUBE",idtmed[kAl],par,3);
347 z += par[2];
348 gMC->Gspos("0SA2",1,"0SUP",0,0,z,0,"ONLY");
349 z=z+par[2];
350 par[0]=3.16; // eta chast' prikruchena k absorberu
351 par[1]=7.5;
ceea38ef 352 par[2]=0.1;
d65c9254 353 gMC->Gsvolu("0SA3","TUBE",idtmed[kAl],par,3);
354 z += par[2];
355 gMC->Gspos("0SA3",1,"0SUP",0,0,z,0,"ONLY");
356 par[0]=3.16; // gvozdi eta chast' prikruchena k absorberu
357 par[1]=7.5;
358 par[2]=0.01;
359 gMC->Gsvolu("0SN2","TUBE",idtmed[kSteel],par,3);
360 gMC->Gspos("0SN2",1,"0SUP",0,0,z,0,"ONLY");
db173afc 361
d65c9254 362
bc46b572 363}
364//------------------------------------------------------------------------
665c0a68 365void AliSTARTv1::AddAlignableVolumes() const
366{
367 //
368 // Create entries for alignable volumes associating the symbolic volume
369 // name with the corresponding volume path. Needs to be syncronized with
370 // eventual changes in the geometry.
371 //
372
373 TString volPath;
374 TString symName, sn;
375
eb8325b2 376 TString vpA = "/ALIC_1/0STL_1/0INS_";
377 TString vpC = "/ALIC_1/0STR_1/0INS_";
378 TString vpInside = "/0PMT_1/0TOP_1";
665c0a68 379
380
381 for (Int_t imod=0; imod<24; imod++)
382 {
383 if (imod < 12)
665c0a68 384 {volPath = vpC; sn="START/C/PMT";}
eb8325b2 385 else
386 {volPath = vpA; sn="START/A/PMT";}
665c0a68 387 volPath += imod+1;
388 volPath += vpInside;
389
390 symName = sn;
391 symName += imod+1;
392
393 AliDebug(2,"--------------------------------------------");
394 AliDebug(2,Form("Alignable object %d", imod));
395 AliDebug(2,Form("volPath=%s\n",volPath.Data()));
396 AliDebug(2,Form("symName=%s\n",symName.Data()));
397 AliDebug(2,"--------------------------------------------");
eb8325b2 398 // gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
399 if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data()))
400 AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
401 symName.Data(),volPath.Data()));
402
665c0a68 403 }
404}
405//------------------------------------------------------------------------
bc46b572 406void AliSTARTv1::CreateMaterials()
407{
ef51244a 408 Int_t isxfld = gAlice->Field()->Integ();
409 Float_t sxmgmx = gAlice->Field()->Max();
db173afc 410 // Float_t a,z,d,radl,absl,buf[1];
411 // Int_t nbuf;
60b0465d 412 Int_t *idtmed = fIdtmed->GetArray();
413
414// AIR
415
416 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
417 Float_t zAir[4]={6.,7.,8.,18.};
418 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
419 Float_t dAir = 1.20479E-3;
420
bc46b572 421// Scintillator CH
422 Float_t ascin[2]={1.01,12.01};
423 Float_t zscin[2]={1,6};
424 Float_t wscin[2]={1,1};
425 Float_t denscin=1.03;
a94466c5 426//Lucite C(CH3)CO2CH3
427 Float_t alucite[3]={1.01,12.01,15.999};
428 Float_t zlucite[3]={1,6,8};
429 Float_t wlucite[3]={8,5,2};
430 Float_t denlucite=1.16;
431 // PMT glass SiO2
bc46b572 432 Float_t aglass[2]={28.0855,15.9994};
433 Float_t zglass[2]={14.,8.};
434 Float_t wglass[2]={1.,2.};
435 Float_t dglass=2.65;
436// Ceramic 97.2% Al2O3 , 2.8% SiO2
db173afc 437 // Float_t wcer[2]={0.972,0.028};
e4da63c2 438 Float_t aCeramic[2] = { 26.981539,15.9994 };
439 Float_t zCeramic[2] = { 13.,8. };
440 Float_t wCeramic[2] = { 2.,3. };
bc46b572 441 Float_t denscer = 3.6;
442
443// Brass 80% Cu, 20% Zn
444 Float_t abrass[2] = {63.546,65.39};
445 Float_t zbrass[2] = {29,30};
446 Float_t wbrass[2] = {0.8,0.2};
447 Float_t denbrass=8.96;
448
449//Ribber C6H12S
450 Float_t aribber[3] = {12.,1.,32.};
451 Float_t zribber[3] = {6.,1.,16.};
452 Float_t wribber[3] = {6.,12.,1.};
453 Float_t denribber=0.8;
d65c9254 454// Support inside
455 Float_t asupport[2] = {12.,1.};
456 Float_t zsupport[2] = {6.,1.};
457 Float_t wsupport[2] = {1.,1.};
458 Float_t densupport=0.1;
bc46b572 459
460//*** Definition Of avaible START materials ***
4a9de4af 461 AliMaterial(0, "Steel$", 55.850,26.,7.87,1.76,999);
462 AliMaterial(1, "Vacuum$", 1.e-16,1.e-16,1.e-16,1.e16,999);
463 AliMixture(2, "Air$", aAir, zAir, dAir,4,wAir);
d65c9254 464 AliMaterial(10, "CarbonPlastic$", 12.01, 6.0, 2.26, 18.8,999);
465 AliMaterial(11, "Aliminium$", 26.98, 13.0, 2.7, 8.9,999);
bc46b572 466
e4da63c2 467 AliMixture( 3, "Ceramic $",aCeramic, zCeramic, denscer, -2, wCeramic);
bc46b572 468 AliMixture( 4, "PMT glass $",aglass,zglass,dglass,-2,wglass);
db173afc 469 /*
470 char namate[21]="";
471
bc46b572 472 gMC->Gfmate((*fIdmate)[3], namate, a, z, d, radl, absl, buf, nbuf);
db173afc 473 acer[0]=a;
474
bc46b572 475 zcer[0]=z;
476 gMC->Gfmate((*fIdmate)[4], namate, a, z, d, radl, absl, buf, nbuf);
477 acer[1]=a;
478 zcer[1]=z;
db173afc 479 AliMixture( 11, "Ceramic $", acer, zcer, denscer, 2, wcer);
480 */
481 AliMixture( 5, "Scintillator$",ascin,zscin,denscin,-2,wscin);
bc46b572 482 AliMixture( 6, "Brass $", abrass, zbrass, denbrass, 2, wbrass);
bc46b572 483 AliMixture( 7, "Ribber $",aribber,zribber,denribber,-3,wribber);
a94466c5 484 AliMixture( 8, "Lucite$",alucite,zlucite,denlucite,-3,wlucite);
d65c9254 485 AliMixture( 9, "Penoplast$",asupport,zsupport,densupport,-2,wsupport);
db173afc 486 AliMixture( 21, "PMT Optical glass $",aglass,zglass,dglass,-2,wglass);
487 AliMixture( 24, "PMT Optical glass cathode $",aglass,zglass,dglass,-2,wglass);
488 AliMixture(22, "START Opt Air$", aAir, zAir, dAir,4,wAir);
489 AliMixture(23, "START Opt Air Next$", aAir, zAir, dAir,4,wAir);
bc46b572 490
ef51244a 491 AliMedium(1, "START Air$", 2, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
492 AliMedium(2, "Scintillator$", 5, 1, isxfld, sxmgmx, 10., .01, 1., .003, .003);
493 AliMedium(3, "Vacuum$", 1, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
db173afc 494 AliMedium(4, "Ceramic$", 3, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
d65c9254 495 AliMedium(6, "Glass$", 4, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
ef51244a 496 AliMedium(8, "Steel$", 0, 0, isxfld, sxmgmx, 1., .001, 1., .001, .001);
497 AliMedium(9, "Ribber $", 7, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
498 AliMedium(11, "Brass $", 6, 0, isxfld, sxmgmx, 10., .01, .1, .003, .003);
a94466c5 499 AliMedium(12, "Lucite$", 8, 1, isxfld, sxmgmx, 10., .01, 1., .003, .003);
d65c9254 500 AliMedium(13, "CarbonPlastic$", 10, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);
501 AliMedium(14, "PenoPlast$", 9, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);
502 AliMedium(15, "Aluminium$", 11, 0, isxfld, sxmgmx, 10., .01, 1., .003, .003);
db173afc 503 AliMedium(16, "OpticalGlass$", 21, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
504 AliMedium(17, "START OpAir$", 22, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
505 AliMedium(18, "START OpAirNext$", 23, 0, isxfld, sxmgmx, 10., .1, 1., .003, .003);
506 AliMedium(19, "OpticalGlassCathode$", 24, 1, isxfld, sxmgmx, 10., .01, .1, .003, .003);
507
a94466c5 508
e4da63c2 509// Definition Cherenkov parameters
510 int i;
db173afc 511 const Int_t kNbins=31;
e4da63c2 512
db173afc 513 Float_t rindexSiO2[kNbins], efficAll[kNbins], rindexAir[kNbins], absorAir[kNbins],rindexCathodeNext[kNbins], absorbCathodeNext[kNbins];
514
2303c85c 515 // quartz 20mm
db173afc 516 Float_t aAbsSiO2[kNbins]={29.0, 28.6, 28.3, 27.7, 27.3, 26.7, 26.4,
517 25.9, 25.3, 24.9, 24.5, 23.7,
518 23.2, 22.8, 22.4, 21.8, 21.3,
519 22.8, 22.1, 21.7, 21.2, 20.5,
520 19.9, 19.3, 18.7, 18.0, 17.1,
521 16.3, 15.3, 14.3, 14.3 };
522
523 Float_t aPckov[kNbins] ={3.87, 3.94, 4.02, 4.11, 4.19, 4.29, 4.38,
2303c85c 524 4.48, 4.58, 4.69, 4.81, 4.93,
525 5.05, 5.19, 5.33, 5.48, 5.63,
526 5.8, 5.97, 6.16, 6.36, 6.57,
db173afc 527 6.8, 7.04, 7.3, 7.58, 7.89,
528 8.22, 8.57, 8.97, 9.39 };
529 /*
530 Float_t effCathode[kNbins]={0.11, 0.13, 0.15, 0.16, 0.18, 0.19, 0.20,
531 0.21, 0.22, 0.23, 0.24, 0.26,
532 0.27, 0.29, 0.30, 0.29, 0.29,
533 0.28, 0.28, 0.27, 0.26, 0.25,
534 0.25, 0.23, 0.20, 0.19, 0.17,
535 0.17, 0.17, 0.2, 0.23};
536 */
537 // Float_t aAbsSiO2[kNbins]; //quartz 30mm
e4da63c2 538 for(i=0;i<kNbins;i++)
539 {
2303c85c 540 aPckov[i]=aPckov[i]*1e-9;//Photons energy bins 4 eV - 8.5 eV step 0.1 eV
db173afc 541 rindexAir[i]=0;
542 rindexSiO2[i]=1.458; //refractive index for qwarts
543 rindexCathodeNext[i]=0;
e4da63c2 544 efficAll[i]=1.;
db173afc 545
546 // aAbsSiO2[i]=28.5; //quartz 30mm
547 absorAir[i]=0.3;
548 absorbCathodeNext[i]=0;
549
e4da63c2 550 }
db173afc 551
552
553 gMC->SetCerenkov (idtmed[kOpGlass], kNbins, aPckov, aAbsSiO2, efficAll, rindexSiO2 );
554 // gMC->SetCerenkov (idtmed[kOpGlassCathode], kNbins, aPckov, aAbsSiO2, effCathode, rindexSiO2 );
555 gMC->SetCerenkov (idtmed[kOpGlassCathode], kNbins, aPckov, aAbsSiO2,efficAll , rindexSiO2 );
556 gMC->SetCerenkov (idtmed[kOpAir], kNbins, aPckov,absorAir , efficAll,rindexAir );
557 gMC->SetCerenkov (idtmed[kOpAirNext], kNbins, aPckov,absorbCathodeNext , efficAll, rindexCathodeNext);
558
4951e003 559 AliDebugClass(1,": ++++++++++++++Medium set++++++++++");
db173afc 560
561
bc46b572 562}
563//---------------------------------------------------------------------
564void AliSTARTv1::DrawDetector()
565{
566//
567// Draw a shaded view of the Forward multiplicity detector version 0
568//
569
570 //Set ALIC mother transparent
571 gMC->Gsatt("ALIC","SEEN",0);
572 //
573 //Set volumes visible
e4da63c2 574 // gMC->Gsatt("0STR","SEEN",0);
575 // gMC->Gsatt("0INS","SEEN",0);
576 // gMC->Gsatt("0PMT","SEEN",1);
577 // gMC->Gsatt("0DIV","SEEN",1);
bc46b572 578 //
d65c9254 579 gMC->Gdopt("hide","off");
bc46b572 580 gMC->Gdopt("shad","on");
581 gMC->SetClipBox(".");
582 gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000);
583 gMC->DefaultRange();
affef71b 584 gMC->Gdraw("alic",90,0,0,-35,9.5,.6,0.6);
60b0465d 585 //gMC->Gdraw("alic",0,0,0,10,9.5,.8,0.8); //other side view
bc46b572 586 gMC->Gdhead(1111,"T-Zero detector");
587 gMC->Gdopt("hide","off");
588}
589
590//-------------------------------------------------------------------
591void AliSTARTv1::Init()
592{
593// Initialises version 0 of the Forward Multiplicity Detector
594//
595//Int_t *idtmed = gAlice->Idtmed();
596 AliSTART::Init();
60b0465d 597 fIdSens1=gMC->VolId("0REG");
e4da63c2 598
599 AliDebug(1,Form("%s: *** START version 1 initialized ***\n",ClassName()));
600
bc46b572 601}
602
603//-------------------------------------------------------------------
604
605void AliSTARTv1::StepManager()
606{
607 //
608 // Called for every step in the START Detector
609 //
610 Int_t id,copy,copy1;
e4da63c2 611 static Float_t hits[6];
bc46b572 612 static Int_t vol[2];
613 TLorentzVector pos;
614
db173afc 615 // TClonesArray &lhits = *fHits;
bc46b572 616
617 if(!gMC->IsTrackAlive()) return; // particle has disappeared
db173afc 618
ceea38ef 619
620 // If particles is photon then ...
db173afc 621
622 if (gMC->TrackPid() == 50000050)
623 {
e4da63c2 624 id=gMC->CurrentVolID(copy);
625
626
627 // Check the sensetive volume
db173afc 628 if(id==fIdSens1 ) {
e4da63c2 629 if(gMC->IsTrackEntering()) {
630 gMC->CurrentVolOffID(2,copy);
631 vol[1]=copy;
632 gMC->CurrentVolOffID(3,copy1);
633 vol[0]=copy1;
e4da63c2 634 gMC->TrackPosition(pos);
635 hits[0] = pos[0];
636 hits[1] = pos[1];
637 hits[2] = pos[2];
638 if(pos[2]<0) vol[0]=2;
db173afc 639 if(pos[2]>=0) vol[0]=1;
e4da63c2 640
641 Float_t etot=gMC->Etot();
642 hits[3]=etot;
643 Int_t iPart= gMC->TrackPid();
644 Int_t partID=gMC->IdFromPDG(iPart);
645 hits[4]=partID;
e4da63c2 646 Float_t ttime=gMC->TrackTime();
db173afc 647 hits[5]=ttime*1e12;
648 AddHit(fIshunt,vol,hits);
649 // cout<< gAlice->GetMCApp()->GetCurrentTrackNumber()<<" hit added "<<endl;
e4da63c2 650 }
db173afc 651 /*
652 printf("track(%i) alive(%i) disap(%i) enter(%i) exit(%i) inside(%i) out(%i) stop(%i) new(%i) \n",
653 gAlice->GetMCApp()->GetCurrentTrackNumber(),
654 gMC->IsTrackAlive(),
655 gMC->IsTrackDisappeared(),
656 gMC->IsTrackEntering(),
657 gMC->IsTrackExiting(),
658 gMC->IsTrackInside(),
659 gMC->IsTrackOut(),
660 gMC->IsTrackStop(),
661 gMC->IsNewTrack());
662 */
663 } //sensitive
664 } //photon
bc46b572 665}
666
667
668
669
670
671
672
673