This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / TRD / AliTRD.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Transition Radiation Detector //
4// This class contains the basic functions for the Transition Radiation //
5// detector. Functions specific to one particular geometry are //
6// contained in the derived classes //
7// //
8//Begin_Html
9/*
10<img src="gif/AliTRDClass.gif">
11*/
12//End_Html
13// //
14// //
15///////////////////////////////////////////////////////////////////////////////
16
17#include <TMath.h>
18#include <TRandom.h>
19#include <TVector.h>
20#include <TGeometry.h>
21#include <TNode.h>
22#include <TObjectTable.h>
23#include <TBRIK.h>
24#include <TPGON.h>
25
26#include "GParticle.h"
27#include "AliTRD.h"
28#include "AliRun.h"
29#include <iostream.h>
30#include <fstream.h>
31
32#include "TGeant3.h"
33
34ClassImp(AliTRD)
35
36//_____________________________________________________________________________
37AliTRD::AliTRD()
38{
39 //
40 // Default constructor
41 //
42 fIshunt = 0;
43}
44
45//_____________________________________________________________________________
46AliTRD::AliTRD(const char *name, const char *title)
47 : AliDetector(name,title)
48{
49 //
50 // Standard constructor for the TRD
51 //
52
53 //
54 // Allocate the hit array
55
56 fHits = new TClonesArray("AliTRDhit", 405);
57
58 fIshunt = 0;
59
60 SetMarkerColor(kWhite);
61}
62
63//_____________________________________________________________________________
64void AliTRD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
65{
66 //
67 // Add a hit for the TRD
68 //
69 TClonesArray &lhits = *fHits;
70 new(lhits[fNhits++]) AliTRDhit(fIshunt,track,vol,hits);
71}
72
73//_____________________________________________________________________________
74void AliTRD::BuildGeometry()
75{
76 //
77 // Create the ROOT TNode geometry for the TRD
78 //
79 TNode *Node, *Top;
80 TPGON *pgon;
81 const Int_t kColorTRD = 46;
82 //
83 // Find the top node alice
84 Top=gAlice->GetGeometry()->GetNode("alice");
85 //
86 pgon = new TPGON("S_TRD","TRD","void",0,360,18,2);
87 pgon->DefineSection(0,-351.2,285.335,355.686);
88 pgon->DefineSection(1, 351.2,285.335,355.686);
89 Top->cd();
90 Node = new TNode("TRD","TRD","S_TRD",0,0,0,"");
91 Node->SetLineColor(kColorTRD);
92 fNodes->Add(Node);
93}
94
95//_____________________________________________________________________________
96void AliTRD::CreateMaterials()
97{
98 //
99 // Create the materials for the TRD
100 // Origin Y.Foka
101 //
102
103 AliMC* pMC = AliMC::GetMC();
104
105 Int_t ISXFLD = gAlice->Field()->Integ();
106 Float_t SXMGMX = gAlice->Field()->Max();
107
108 // --- For polyethilene (CH2)
109 Float_t ape[2] = { 12.,1. };
110 Float_t zpe[2] = { 6.,1. };
111 Float_t wpe[2] = { .33,.67 };
112 Float_t dpe = .95;
113 // --- For mylar (C5H4O2)
114 Float_t amy[3] = { 12.,1.,16. };
115 Float_t zmy[3] = { 6.,1.,8. };
116 Float_t wmy[3] = { 5.,4.,2. };
117 Float_t dmy = 1.39;
118 // --- For CO2
119 Float_t aco[2] = { 12.,16. };
120 Float_t zco[2] = { 6.,8. };
121 Float_t wco[2] = { 1.,2. };
122 Float_t dco = .001977;
123 // --- For Xe/CO2-gas-mixture
124 // --- Xe-content of the gas-mixture (90% / 10%)
125 Float_t fxe = .9;
126 Float_t dxe = .005858;
127
128 // --- General tracking parameter
129 Float_t tmaxfd = -10.;
130 Float_t stemax = -1e10;
131 Float_t deemax = -.1;
132 Float_t epsil = 1e-4;
133 Float_t stmin = -.001;
134
135 Float_t absl, radl, d, buf[1];
136 Float_t agm[2], dgm, zgm[2], wgm[2];
137 Int_t nbuf;
138
139 // Define Materials
140
141 // ***********************************************************************
142 AliMaterial(1, "Al $", 26.98, 13., 2.7, 8.9, 37.2);
143 AliMaterial(2, "Air$", 14.61, 7.3, .001205, 30420., 67500);
144 AliMaterial(4, "Xe $", 131.29, 54., dxe, 1447.59, 0);
145 AliMaterial(5, "Cu $", 63.54, 29., 8.96, 1.43, 14.8);
146 AliMaterial(6, "C $", 12.01, 6., 2.265, 18.8, 74.4);
147 // --- Mixtures
148 AliMixture(3, "Polyethilene$", ape, zpe, dpe, -2, wpe);
149 AliMixture(7, "Mylar$", amy, zmy, dmy, -3, wmy);
150 AliMixture(8, "CO2$", aco, zco, dco, -2, wco);
151 char namate[21];
152 // --- Get properties of Xe
153 pMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf);
154 // --- Get properties of CO2
155 pMC->Gfmate((*fIdmate)[8], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf);
156 // --- Create gas mixture
157 wgm[0] = fxe;
158 wgm[1] = 1. - fxe;
159 dgm = wgm[0] * dxe + wgm[1] * dco;
160 AliMixture(9, "Gas mixture$", agm, zgm, dgm, 2, wgm);
161 // ***********************************************************************
162
163 // Tracking Media Parameters
164
165 // ***********************************************************************
166 // --- Al Frame
167 AliMedium(1301, "Al Frame$", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
168 // --- Air
169 AliMedium(1302, "Air$", 2, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
170 // --- Polyethilene
171 AliMedium(1303, "Radiator$", 3, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
172 // --- Xe
173 AliMedium(1304, "Xe$", 4, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
174 // --- Cu pads
175 AliMedium(1305, "Padplane$", 5, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
176 // --- Fee + cables
177 AliMedium(1306, "Readout$", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
178 // --- C frame
179 AliMedium(1307, "C Frame$", 6, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
180 // --- Mylar foils
181 AliMedium(1308, "Mylar$", 7, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
182 // --- Gas-mixture
183 AliMedium(1309, "Gas-mix$", 9, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
184 // --- Nomex-honeycomb (use carbon for the time being)
185 AliMedium(1310, "Nomex$", 6, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
186 // --- Kapton foils (use Mylar for the time being)
187 AliMedium(1311, "Kapton$", 7, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
188 // --- Gas-filling of the radiator
189 AliMedium(1312, "CO2$", 8, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
190}
191
192//_____________________________________________________________________________
193Int_t AliTRD::DistancetoPrimitive(Int_t , Int_t )
194{
195 //
196 // Distance between the mouse and the TRD detector on the screen
197 // Dummy routine
198 //
199 return 9999;
200}
201
202//_____________________________________________________________________________
203void AliTRD::Init()
204{
205 //
206 // Initialise the TRD detector after the geometry has been created
207 //
208 Int_t i;
209 //
210 printf("\n");
211 for(i=0;i<35;i++) printf("*");
212 printf(" TRD_INIT ");
213 for(i=0;i<35;i++) printf("*");
214 printf("\n");
215 //
216 // Here the TRD initialisation code (if any!)
217 for(i=0;i<80;i++) printf("*");
218 printf("\n");
219}
220
221ClassImp(AliTRDhit)
222
223//_____________________________________________________________________________
224AliTRDhit::AliTRDhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
225 AliHit(shunt, track)
226{
227 //
228 // Create a TRD hit
229 //
230
231 //
232 // Store volume hierarchy
233 fSector = vol[0];
234 fChamber = vol[1];
235 fPlane = vol[2];
236 //
237 // Store position and charge
238 fX = hits[0];
239 fY = hits[1];
240 fZ = hits[2];
241 fQ = hits[3];
242}