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