]>
Commit | Line | Data |
---|---|---|
e8189707 | 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 | $Log$ | |
18 | Revision 1.1.2.2 2000/03/02 21:53:36 nilsen | |
19 | to make it compatable with the changes in AliRun/AliModule. | |
20 | ||
21 | Revision 1.1.2.1 2000/01/12 20:19:03 nilsen | |
22 | The changes made with this latest inclusion of code is very large. | |
23 | Many of the new files were added just in December when P. Cerello added his | |
24 | SDD simulations to the distrobutions. Also added are some file of P. Skowronski | |
25 | for SSD cluster finding and ghost RecPoints. None of this "new" code has been | |
26 | proporly tested. Other code new to this cvs repository is explained in the | |
27 | ITS Off-line web page. In general the changes are too large to give a resonable | |
28 | discription of them but probably should be taken as the starting point for | |
29 | the developement branch (ITS-working). | |
30 | B. S. Nilsen | |
31 | ||
32 | Revision 1.13 1999/10/16 19:49:00 BSN | |
33 | $Name$ | |
34 | $Author$ | |
35 | $Id$ | |
36 | */ | |
37 | ||
38 | /////////////////////////////////////////////////////////////////////////////// | |
39 | // // | |
40 | // Inner Traking System version Test // | |
41 | // This class contains the base procedures for the Inner Tracking System // | |
42 | // // | |
43 | // Authors: R. Barbera, B. S. Nilsen. // | |
44 | // version Test // | |
45 | // Created October 16 1999. // | |
46 | // // | |
47 | /////////////////////////////////////////////////////////////////////////////// | |
48 | ||
49 | #include <stdio.h> | |
50 | #include <stdlib.h> | |
51 | #include <TMath.h> | |
52 | ||
53 | #include "AliRun.h" | |
54 | #include "TSystem.h" | |
55 | #include "AliITShit.h" | |
56 | #include "AliITS.h" | |
57 | #include "AliITSvtest.h" | |
58 | #include "AliITSgeom.h" | |
59 | ||
60 | ClassImp(AliITSvtest) | |
61 | ||
62 | //_____________________________________________________________________________ | |
63 | AliITSvtest::AliITSvtest() { | |
64 | // | |
65 | // Standard constructor for the ITS | |
66 | // | |
67 | /* | |
68 | fIdTestN = 6; | |
69 | fIdTestName = new TString[fIdTestN]; | |
70 | fIdTestName[0] = "ITS1"; | |
71 | fIdTestName[1] = "ITS2"; | |
72 | fIdTestName[2] = "ITS3"; | |
73 | fIdTestName[3] = "ITS4"; | |
74 | fIdTestName[4] = "ITS5"; | |
75 | fIdTestName[5] = "ITS6"; | |
76 | */ | |
77 | } | |
78 | //____________________________________________________________________________ | |
79 | AliITSvtest::AliITSvtest(const AliITSvtest &source){ | |
80 | //////////////////////////////////////////////////////////////////////// | |
81 | // Copy Constructor for ITS test version. | |
82 | //////////////////////////////////////////////////////////////////////// | |
83 | if(&source == this) return; | |
84 | printf("Not allowed to copy AliITSvtest\n"); | |
85 | return; | |
86 | } | |
87 | //_____________________________________________________________________________ | |
88 | AliITSvtest& AliITSvtest::operator=(const AliITSvtest &source){ | |
89 | //////////////////////////////////////////////////////////////////////// | |
90 | // Assignment operator for the ITS version 1. | |
91 | //////////////////////////////////////////////////////////////////////// | |
92 | if(&source == this) return *this; | |
93 | printf("Not allowed to copy AliITSvtest\n"); | |
94 | return *this; | |
95 | } | |
96 | //_____________________________________________________________________________ | |
97 | AliITSvtest::~AliITSvtest() { | |
98 | // | |
99 | // Standard destructor for the ITS | |
100 | // | |
101 | delete [] fIdTestName; | |
102 | } | |
103 | //_____________________________________________________________________________ | |
104 | AliITSvtest::AliITSvtest(const char *fileeuc,const char *filetme, | |
105 | const char *name, const char *title) | |
106 | : AliITS(name, title){ | |
107 | // | |
108 | // Standard constructor for the ITS | |
109 | // | |
110 | fIdTestN = 6; | |
111 | fIdTestName = new TString[fIdTestN]; | |
112 | fIdTestName[0] = "ITS1"; | |
113 | fIdTestName[1] = "ITS2"; | |
114 | fIdTestName[2] = "ITS3"; | |
115 | fIdTestName[3] = "ITS4"; | |
116 | fIdTestName[4] = "ITS5"; | |
117 | fIdTestName[5] = "ITS6"; | |
118 | ||
119 | fEuclidMaterial = filetme; | |
120 | fEuclidGeometry = fileeuc; | |
121 | // The .det file for the geometry must have the same name as fileeuc with | |
122 | // .euc replaced by .det. | |
123 | } | |
124 | ||
125 | ||
126 | //_____________________________________________________________________________ | |
127 | void AliITSvtest::CreateMaterials(){ | |
128 | // | |
129 | // Read materials for the ITS | |
130 | // | |
131 | char *filtmp; | |
132 | // | |
133 | filtmp = gSystem->ExpandPathName(fEuclidMaterial.Data()); | |
134 | // FILE *file = fopen(fEuclidMaterial.Data(),"r"); | |
135 | FILE *file = fopen(filtmp,"r"); | |
136 | if(file) { | |
137 | fclose(file); | |
138 | // ReadEuclidMedia(fEuclidMaterial.Data(),this); | |
139 | ReadEuclidMedia(filtmp); | |
140 | } else { | |
141 | Error("CreateMaterials"," THE MEDIA FILE %s DOES NOT EXIST !", | |
142 | // fEuclidMaterial.Data()); | |
143 | filtmp); | |
144 | exit(1); | |
145 | } // end if(file) | |
146 | } | |
147 | ||
148 | //_____________________________________________________________________________ | |
149 | void AliITSvtest::CreateGeometry(){ | |
150 | ////////////////////////////////////////////////////////////////////// | |
151 | //////////////////////////////////////////////////////////////////////// | |
152 | // Read geometry for the ITS | |
153 | // | |
154 | ||
155 | Int_t size; | |
156 | char topvol[5]; | |
157 | char *filtmp; | |
158 | // | |
159 | filtmp = gSystem->ExpandPathName(fEuclidGeometry.Data()); | |
160 | FILE *file = fopen(filtmp,"r"); | |
161 | delete [] filtmp; | |
162 | if(file) { | |
163 | fclose(file); | |
164 | printf("Ready to read Euclid geometry file\n"); | |
165 | ReadEuclid(fEuclidGeometry.Data(),topvol); | |
166 | printf("Read in euclid geometries\n"); | |
167 | } else { | |
168 | Error("CreateGeometry"," THE GEOM FILE %s DOES NOT EXIST !", | |
169 | fEuclidGeometry.Data()); | |
170 | exit(1); | |
171 | } // end if(file) | |
172 | // | |
173 | //---Place the ITS ghost volume ITSV in its mother volume (ALIC) and make it | |
174 | // invisible | |
175 | // | |
176 | gMC->Gspos("ITSV",1,"ALIC",0,0,0,0,"ONLY"); | |
177 | // | |
178 | //---Outputs the geometry tree in the EUCLID/CAD format | |
179 | ||
180 | if (fEuclidOut) { | |
181 | gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5); | |
182 | } // end if (fEuclidOut) | |
183 | ||
184 | filtmp = gSystem->ExpandPathName(fEuclidGeometry.Data()); | |
185 | size = strlen(filtmp); | |
186 | if(size>4){ | |
187 | filtmp[size-3] = 'd'; // change from .euc to .det | |
188 | filtmp[size-2] = 'e'; | |
189 | filtmp[size-1] = 't'; | |
190 | file = fopen(filtmp,"r"); | |
191 | if(file){ // if file exists use it to fill AliITSgeom structure. | |
192 | fclose(file); | |
193 | printf("ready to read .det file %s\n",filtmp); | |
194 | fITSgeom = new AliITSgeom(filtmp); | |
195 | }else{ | |
196 | fITSgeom = 0; | |
197 | // fill AliITSgeom structure from geant structure just filled above | |
198 | }// end if(file) | |
199 | delete [] filtmp; | |
200 | }// end if(size>4) | |
201 | printf("finished with euclid geometrys\n"); | |
202 | } | |
203 | ||
204 | //_____________________________________________________________________________ | |
205 | void AliITSvtest::Init(){ | |
206 | // | |
207 | // Initialise the ITS after it has been created | |
208 | // | |
209 | Int_t i; | |
210 | ||
211 | fIdN = fIdTestN; | |
212 | fIdName = new TString[fIdTestN]; | |
213 | fIdSens = new Int_t[fIdTestN]; | |
214 | for(i=0;i<fIdTestN;i++) { | |
215 | fIdName[i]=fIdTestName[i]; | |
216 | /* | |
217 | l = strlen(fIdTestName[i]); | |
218 | fIdName[i] = new char[l+1]; | |
219 | for(j=0;j<l;j++) fIdName[i][j] = fIdTestName[i][j]; | |
220 | fIdName[i][l] = '\0'; // Null terminate this string. | |
221 | */ | |
222 | } // end for i | |
223 | ||
224 | AliITS::Init(); | |
225 | } | |
226 | ||
227 | //_____________________________________________________________________________ | |
228 | void AliITSvtest::StepManager(){ | |
229 | // | |
230 | // Called for every step in the ITS | |
231 | // | |
232 | Int_t copy, id; | |
233 | Int_t copy1,copy2; | |
234 | Float_t hits[8]; | |
235 | Int_t vol[4]; | |
236 | TLorentzVector position, momentum; | |
237 | TClonesArray &lhits = *fHits; | |
238 | // | |
239 | // Track status | |
240 | vol[3] = 0; | |
241 | if(gMC->IsTrackInside()) vol[3] += 1; | |
242 | if(gMC->IsTrackEntering()) vol[3] += 2; | |
243 | if(gMC->IsTrackExiting()) vol[3] += 4; | |
244 | if(gMC->IsTrackOut()) vol[3] += 8; | |
245 | if(gMC->IsTrackDisappeared()) vol[3] += 16; | |
246 | if(gMC->IsTrackStop()) vol[3] += 32; | |
247 | if(gMC->IsTrackAlive()) vol[3] += 64; | |
248 | // | |
249 | // Fill hit structure. | |
250 | if(!(gMC->TrackCharge())) return; | |
251 | // | |
252 | // Only entering charged tracks | |
253 | if((id = gMC->CurrentVolID(copy)) == fIdSens[0]) { | |
254 | vol[0] = 1; | |
255 | id = gMC->CurrentVolOffID(0,copy); | |
256 | //detector copy in the ladder = 1<->4 (ITS1) | |
257 | vol[1] = copy; | |
258 | gMC->CurrentVolOffID(1,copy1); | |
259 | //ladder copy in the module = 1<->2 (I186) | |
260 | gMC->CurrentVolOffID(2,copy2); | |
261 | //module copy in the layer = 1<->10 (I132) | |
262 | vol[2] = copy1+(copy2-1)*2;//# of ladders in one module = 2 | |
263 | } else if(id == fIdSens[1]){ | |
264 | vol[0] = 2; | |
265 | id = gMC->CurrentVolOffID(0,copy); | |
266 | //detector copy in the ladder = 1<->4 (ITS2) | |
267 | vol[1] = copy; | |
268 | gMC->CurrentVolOffID(1,copy1); | |
269 | //ladder copy in the module = 1<->4 (I131) | |
270 | gMC->CurrentVolOffID(2,copy2); | |
271 | //module copy in the layer = 1<->10 (I132) | |
272 | vol[2] = copy1+(copy2-1)*4;//# of ladders in one module = 4 | |
273 | } else if(id == fIdSens[2]){ | |
274 | vol[0] = 3; | |
275 | id = gMC->CurrentVolOffID(1,copy); | |
276 | //detector copy in the ladder = 1<->5 (ITS3 is inside I314) | |
277 | vol[1] = copy; | |
278 | id = gMC->CurrentVolOffID(2,copy); | |
279 | //ladder copy in the layer = 1<->12 (I316) | |
280 | vol[2] = copy; | |
281 | } else if(id == fIdSens[3]){ | |
282 | vol[0] = 4; | |
283 | id = gMC->CurrentVolOffID(1,copy); | |
284 | //detector copy in the ladder = 1<->8 (ITS4 is inside I414) | |
285 | vol[1] = copy; | |
286 | id = gMC->CurrentVolOffID(2,copy); | |
287 | //ladder copy in the layer = 1<->22 (I417) | |
288 | vol[2] = copy; | |
289 | }else if(id == fIdSens[4]){ | |
290 | vol[0] = 5; | |
291 | id = gMC->CurrentVolOffID(1,copy); | |
292 | //detector copy in the ladder = 1<->23 (ITS5 is inside I562) | |
293 | vol[1] = copy; | |
294 | id = gMC->CurrentVolOffID(2,copy); | |
295 | //ladder copy in the layer = 1<->34 (I565) | |
296 | vol[2] = copy; | |
297 | }else if(id == fIdSens[5]){ | |
298 | vol[0] = 6; | |
299 | id = gMC->CurrentVolOffID(1,copy); | |
300 | //detector copy in the ladder = 1<->26 (ITS6 is inside I566) | |
301 | vol[1] = copy; | |
302 | id = gMC->CurrentVolOffID(2,copy); | |
303 | //ladder copy in the layer = 1<->38 (I569) | |
304 | vol[2] = copy; | |
305 | } else { | |
306 | return; // not an ITS volume? | |
307 | } // end if/else if (gMC->CurentVolID(copy) == fIdSens[i]) | |
308 | // | |
309 | gMC->TrackPosition(position); | |
310 | gMC->TrackMomentum(momentum); | |
311 | hits[0]=position[0]; | |
312 | hits[1]=position[1]; | |
313 | hits[2]=position[2]; | |
314 | hits[3]=momentum[0]; | |
315 | hits[4]=momentum[1]; | |
316 | hits[5]=momentum[2]; | |
317 | hits[6]=gMC->Edep(); | |
318 | hits[7]=gMC->TrackTime(); | |
319 | // Fill hit structure with this new hit. | |
320 | new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits); | |
321 | return; | |
322 | } | |
323 | //____________________________________________________________________________ | |
324 | void AliITSvtest::Streamer(TBuffer &R__b) | |
325 | { | |
326 | // Stream an object of class AliITSvtest. | |
327 | ||
328 | if (R__b.IsReading()) { | |
329 | Version_t R__v = R__b.ReadVersion(); if (R__v) { } | |
330 | AliITS::Streamer(R__b); | |
331 | } else { | |
332 | R__b.WriteVersion(AliITSvtest::IsA()); | |
333 | AliITS::Streamer(R__b); | |
334 | } | |
335 | } | |
336 |