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