]>
Commit | Line | Data |
---|---|---|
fb7a1f55 | 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 | ||
88cb7938 | 16 | /* $Id$ */ |
fb7a1f55 | 17 | |
18 | /////////////////////////////////////////////////////////////////////////////// | |
19 | // // | |
6e9adb00 | 20 | // ALICE Cosmic Ray Trigger // |
fb7a1f55 | 21 | // // |
6e9adb00 | 22 | // This class contains the functions for version 0 of the ALICE Cosmic Ray // |
778e67bd | 23 | // Trigger. This version will be used to simulation comic rays in alice // |
24 | // with all the detectors. // | |
fb7a1f55 | 25 | // |
26 | // Authors: | |
27 | // | |
28 | // Arturo Fernandez <afernand@fcfm.buap.mx> | |
29 | // Enrique Gamez <egamez@fcfm.buap.mx> | |
30 | // | |
31 | // Universidad Autonoma de Puebla | |
32 | // | |
33 | // | |
34 | //Begin_Html | |
35 | /* | |
36 | <img src="picts/AliCRTv0Class.gif"> | |
37 | </pre> | |
38 | <br clear=left> | |
39 | <p>The responsible person for this module is | |
40 | <a href="mailto:egamez@fcfm.buap.mx">Enrique Gamez</a>. | |
41 | </font> | |
42 | <pre> | |
43 | */ | |
44 | //End_Html | |
45 | // // | |
46 | /////////////////////////////////////////////////////////////////////////////// | |
47 | ||
846389b7 | 48 | #include "AliCRTv0.h" |
49 | ||
88cb7938 | 50 | #include <TGeometry.h> |
bb5ce8b0 | 51 | #include <TBRIK.h> |
88cb7938 | 52 | #include <TNode.h> |
5d12ce38 | 53 | #include <TVirtualMC.h> |
fb7a1f55 | 54 | |
88cb7938 | 55 | #include "AliRun.h" |
bb5ce8b0 | 56 | #include "AliConst.h" |
57 | ||
bb5ce8b0 | 58 | #include "AliCRTConstants.h" |
846389b7 | 59 | #include "AliCRTModule.h" |
778e67bd | 60 | |
fb7a1f55 | 61 | ClassImp(AliCRTv0) |
62 | ||
63 | //_____________________________________________________________________________ | |
bb5ce8b0 | 64 | AliCRTv0::AliCRTv0() |
65 | : AliCRT() | |
fb7a1f55 | 66 | { |
67 | // | |
bb5ce8b0 | 68 | // Default constructor |
fb7a1f55 | 69 | // |
fb7a1f55 | 70 | } |
71 | ||
72 | //_____________________________________________________________________________ | |
73 | AliCRTv0::AliCRTv0(const char *name, const char *title) | |
bb5ce8b0 | 74 | : AliCRT(name, title) |
fb7a1f55 | 75 | { |
76 | // | |
bb5ce8b0 | 77 | // Standard constructor |
fb7a1f55 | 78 | // |
79 | //Begin_Html | |
80 | /* | |
81 | <img src="picts/AliCRTv0.gif"> | |
82 | */ | |
83 | //End_Html | |
bb5ce8b0 | 84 | SetMarkerColor(kRed); |
85 | SetMarkerStyle(kRed); | |
86 | SetMarkerSize(0.4); | |
fb7a1f55 | 87 | } |
88 | ||
778e67bd | 89 | //_____________________________________________________________________________ |
90 | AliCRTv0::AliCRTv0(const AliCRTv0& crt) | |
bb5ce8b0 | 91 | : AliCRT(crt) |
778e67bd | 92 | { |
93 | // | |
bb5ce8b0 | 94 | // Copy constructor |
778e67bd | 95 | // |
96 | crt.Copy(*this); | |
97 | } | |
98 | ||
99 | //_____________________________________________________________________________ | |
bb5ce8b0 | 100 | AliCRTv0::~AliCRTv0() |
101 | { | |
102 | // | |
103 | // Default destructor | |
104 | // | |
105 | } | |
106 | ||
107 | //_____________________________________________________________________________ | |
108 | AliCRTv0& AliCRTv0::operator=(const AliCRTv0& crt) | |
778e67bd | 109 | { |
110 | // | |
111 | // Asingment operator. | |
112 | // | |
113 | crt.Copy(*this); | |
114 | return *this; | |
115 | } | |
116 | ||
fb7a1f55 | 117 | //_____________________________________________________________________________ |
118 | void AliCRTv0::BuildGeometry() | |
119 | { | |
778e67bd | 120 | // |
121 | // Create the ROOT TNode geometry for the CRT | |
122 | // | |
123 | ||
124 | TNode *node, *top; | |
125 | ||
126 | const Int_t kColorCRT = kRed; | |
127 | ||
128 | // Find the top node alice. | |
129 | top = gAlice->GetGeometry()->GetNode("alice"); | |
130 | ||
846389b7 | 131 | AliCRTConstants* crtConstants = AliCRTConstants::Instance(); |
132 | ||
778e67bd | 133 | new TBRIK("S_CRT_A", "CRT box", "void", |
846389b7 | 134 | crtConstants->ActiveAreaLenght()/2., |
135 | crtConstants->ActiveAreaHeight()/2., | |
136 | crtConstants->ActiveAreaWidth()/2.); | |
778e67bd | 137 | |
138 | ||
139 | new TRotMatrix("Left", "Left", 90., 315., 90., 45., 0., 337.5); | |
140 | new TRotMatrix("Right", "Right", 90., 45., 90., 315., 180., 202.5); | |
141 | new TRotMatrix("Up", "Up", 90., 0., 90., 90., 0., 90.); | |
142 | top->cd(); | |
143 | ||
144 | // | |
145 | // Put 4 modules on the top of the magnet | |
846389b7 | 146 | Float_t box = crtConstants->CageWidth()/2.; |
778e67bd | 147 | top->cd(); |
148 | node = new TNode("upper1", "upper1", "S_CRT_A", 0., 790., 3.*box, "Up"); | |
149 | node->SetLineColor(kColorCRT); | |
150 | fNodes->Add(node); | |
151 | ||
152 | top->cd(); | |
153 | node = new TNode("upper2", "upper2", "S_CRT_A", 0., 790., box, "Up"); | |
154 | node->SetLineColor(kColorCRT); | |
155 | fNodes->Add(node); | |
156 | ||
157 | top->cd(); | |
158 | node = new TNode("upper3", "upper3", "S_CRT_A", 0., 790., -1.*box, "Up"); | |
159 | node->SetLineColor(kColorCRT); | |
160 | fNodes->Add(node); | |
161 | ||
162 | top->cd(); | |
163 | node = new TNode("upper4", "upper4", "S_CRT_A", 0., 790., -3.*box, "Up"); | |
164 | node->SetLineColor(kColorCRT); | |
165 | fNodes->Add(node); | |
166 | ||
167 | ||
168 | // Modules on the left side. | |
169 | Float_t xtragap = 10.; | |
170 | Float_t initXside = (790.+xtragap)*TMath::Sin(2*22.5*kDegrad); //rigth side | |
171 | Float_t initYside = (790.+xtragap)*TMath::Cos(2*22.5*kDegrad); | |
172 | top->cd(); | |
173 | node = new TNode("upper5", "upper5", "S_CRT_A", initXside, initYside, 3.*box, "Left"); | |
174 | node->SetLineColor(kColorCRT); | |
175 | fNodes->Add(node); | |
176 | ||
177 | top->cd(); | |
178 | node = new TNode("upper6", "upper6", "S_CRT_A", initXside, initYside, box, "Left"); | |
179 | node->SetLineColor(kColorCRT); | |
180 | fNodes->Add(node); | |
181 | ||
182 | top->cd(); | |
183 | node = new TNode("upper7", "upper7", "S_CRT_A", initXside, initYside, -1.*box, "Left"); | |
184 | node->SetLineColor(kColorCRT); | |
185 | fNodes->Add(node); | |
186 | ||
187 | top->cd(); | |
188 | node = new TNode("upper8", "upper8", "S_CRT_A", initXside, initYside, -3.*box, "Left"); | |
189 | node->SetLineColor(kColorCRT); | |
190 | fNodes->Add(node); | |
191 | ||
192 | ||
193 | // Modules on the right side. | |
194 | top->cd(); | |
195 | node = new TNode("upper9", "upper9", "S_CRT_A", -initXside, initYside, 3.*box, "Right"); | |
196 | node->SetLineColor(kColorCRT); | |
197 | fNodes->Add(node); | |
198 | ||
199 | top->cd(); | |
200 | node = new TNode("upper10", "upper10", "S_CRT_A", -initXside, initYside, box, "Right"); | |
201 | node->SetLineColor(kColorCRT); | |
202 | fNodes->Add(node); | |
203 | ||
204 | top->cd(); | |
205 | node = new TNode("upper11","upper11", "S_CRT_A", -initXside, initYside, -1.*box, "Right"); | |
206 | node->SetLineColor(kColorCRT); | |
207 | fNodes->Add(node); | |
208 | ||
209 | top->cd(); | |
210 | node = new TNode("upper12","upper12", "S_CRT_A", -initXside, initYside, -3.*box, "Right"); | |
211 | node->SetLineColor(kColorCRT); | |
212 | fNodes->Add(node); | |
213 | ||
fb7a1f55 | 214 | } |
215 | ||
216 | //_____________________________________________________________________________ | |
217 | void AliCRTv0::CreateGeometry() | |
218 | { | |
219 | // | |
220 | // Create geometry for the CRT array | |
221 | // | |
778e67bd | 222 | |
bb5ce8b0 | 223 | Int_t idrotm[2499]; // The rotation matrix. |
846389b7 | 224 | Int_t* idtmed = fIdtmed->GetArray() - 1099; |
225 | AliCRTConstants* crtConstants = AliCRTConstants::Instance(); | |
7b213e3c | 226 | |
846389b7 | 227 | // Create the mother volume. |
228 | // This volume can be seen as the volume which ACORDE will ocupate | |
229 | // above the upper face of the L3 magnet. Inside this volume the detectors | |
230 | // aboce the magnet will be, then there will be two copies of this volume, | |
231 | // one for each side. | |
778e67bd | 232 | Float_t box[3]; |
7b213e3c | 233 | //box[0] = 2*crtConstants->MagMinRadius()*TMath::Sin(kDegrad*22.5); |
234 | box[0] = crtConstants->MagMinRadius()*TMath::Sin(kDegrad*22.5); | |
846389b7 | 235 | box[1] = crtConstants->MagMaxRadius() - crtConstants->MagMinRadius(); |
7b213e3c | 236 | box[2] = crtConstants->MagnetLenght()/2; |
846389b7 | 237 | gMC->Gsvolu("CRT1", "BOX", idtmed[1112], box, 3); |
238 | ||
7b213e3c | 239 | // Check if the AliCRTModule instance have been set, otherwise |
846389b7 | 240 | // use the default values |
241 | if ( !fModule ) { | |
242 | Info("CreateGeometry", "Using default dimensions"); | |
243 | fModule = new AliCRTModule("CRTmod", "Default module dimensions"); | |
244 | } | |
778e67bd | 245 | |
846389b7 | 246 | // The full module volume. |
247 | // This volume will be ocupied by all the material of the module | |
248 | // the scintillators, the aluminium frame, etc. | |
249 | box[0] = fModule->FrameLength()/2; | |
250 | box[1] = fModule->FrameThickness()/2; | |
7c231de5 | 251 | box[2] = fModule->FrameWidth()/2; |
846389b7 | 252 | gMC->Gsvolu("CRT2", "BOX", idtmed[1114], box, 3); |
253 | ||
254 | // The scintillators | |
255 | box[0] = crtConstants->SinglePaletteLenght()/4; | |
256 | box[1] = crtConstants->SinglePaletteHeight(); | |
257 | box[2] = crtConstants->SinglePaletteWidth()/2; | |
258 | gMC->Gsvolu("CRT3", "BOX", idtmed[1112], box, 3); | |
259 | gMC->Gspos("CRT3", 1, "CRT2", 0, 2, 0, 0, "ONLY"); | |
260 | ||
261 | // The metallic frame | |
262 | box[0] = fModule->FrameLength()/2; | |
263 | box[1] = fModule->FrameThickness()/2; | |
264 | box[2] = 2; | |
265 | gMC->Gsvolu("CRT4", "BOX", idtmed[1108], box, 3); | |
266 | gMC->Gspos("CRT4", 1, "CRT2", 0, 0, 13 - box[2], 0, "MANY"); | |
267 | gMC->Gspos("CRT4", 2, "CRT2", 0, 0, -13 + box[2], 0, "MANY"); | |
268 | ||
269 | box[0] = 2; | |
270 | box[1] = fModule->FrameThickness()/2; | |
271 | box[2] = fModule->FrameWidth()/2; | |
272 | gMC->Gsvolu("CRT5", "BOX", idtmed[1108], box, 3); | |
273 | gMC->Gspos("CRT5", 1, "CRT2", 140 - box[0], 0, 0, 0, "MANY"); | |
274 | gMC->Gspos("CRT5", 2, "CRT2", -140 + box[0], 0, 0, 0, "MANY"); | |
275 | ||
276 | // The support bars | |
277 | box[0] = 2; | |
278 | box[1] = fModule->FrameThickness()/2; | |
279 | box[2] = 500; | |
280 | gMC->Gsvolu("CRT6", "BOX", idtmed[1108], box, 3); | |
281 | ||
282 | // Now put into the volume CR11 all the above volumes. | |
283 | // 20 scintillation modules | |
284 | // 4 support bars | |
285 | Int_t copyNumber = 0; | |
286 | for ( Int_t k = 0; k < fModule->NumberOfRows(); k++ ) { | |
846389b7 | 287 | Float_t zCoordinate = k*fModule->ZGap() - 450; |
288 | gMC->Gspos("CRT2",++copyNumber,"CRT1",-150, 15, zCoordinate, 0, "MANY"); | |
289 | gMC->Gspos("CRT2",++copyNumber,"CRT1",150, 15, zCoordinate, 0, "MANY"); | |
7b213e3c | 290 | |
846389b7 | 291 | } |
7b213e3c | 292 | |
293 | // Put the support bars | |
846389b7 | 294 | gMC->Gspos("CRT6", 1, "CRT1", -75, 5, 0, 0, "ONLY"); |
295 | gMC->Gspos("CRT6", 2, "CRT1", -225, 5, 0, 0, "ONLY"); | |
296 | gMC->Gspos("CRT6", 3, "CRT1", 75, 5, 0, 0, "ONLY"); | |
297 | gMC->Gspos("CRT6", 4, "CRT1", 225, 5, 0, 0, "ONLY"); | |
fb7a1f55 | 298 | |
846389b7 | 299 | // Now put a copy of CR11 on the 3 upper faces of the magnet |
300 | // In the right side side of the magnet | |
301 | AliMatrix(idrotm[231], 90, 45, 90, 135, 0, 0); | |
bb5ce8b0 | 302 | // In the left side side of the magnet |
846389b7 | 303 | AliMatrix(idrotm[232], 90, 315, 90, 45, 0, 0); |
fb7a1f55 | 304 | |
846389b7 | 305 | Float_t x = crtConstants->MagMinRadius()+10; |
306 | gMC->Gspos("CRT1", 1, "ALIC", 0, x, 0, 0, "MANY"); | |
307 | gMC->Gspos("CRT1", 2, "ALIC", -x*TMath::Sin(kDegrad*45), x*TMath::Cos(kDegrad*45), 0, idrotm[231], "MANY"); | |
308 | gMC->Gspos("CRT1", 3, "ALIC", x*TMath::Sin(kDegrad*45), x*TMath::Cos(kDegrad*45), 0, idrotm[232], "MANY"); | |
778e67bd | 309 | |
fb7a1f55 | 310 | } |
311 | ||
fb7a1f55 | 312 | //_____________________________________________________________________________ |
846389b7 | 313 | void AliCRTv0::DrawDetector() const |
fb7a1f55 | 314 | { |
315 | // | |
316 | // Draw a shaded view of the L3 magnet | |
317 | // | |
fb7a1f55 | 318 | |
bb5ce8b0 | 319 | Info("DrawDetector", "Drawing the module"); |
320 | ||
321 | gMC->Gsatt("*", "seen", -1); | |
bb5ce8b0 | 322 | |
323 | gMC->Gsatt("ALIC","seen",0); | |
846389b7 | 324 | |
325 | gMC->Gsatt("L3MO","seen",0); // L3 Magnet, Mother | |
326 | gMC->Gsatt("L3CO","seen",1); // Coils | |
327 | gMC->Gsatt("L3C1","seen",1); // Coils | |
328 | gMC->Gsatt("L3YO","seen",1); // Yoke | |
329 | gMC->Gsatt("L3DO","seen",0); // return Yoke (DOOR) | |
330 | gMC->Gsatt("L3FR","seen",1); // DOOR | |
331 | gMC->Gsatt("L3IR","seen",0); // Inner layer | |
332 | gMC->Gsatt("L3O1","seen",1); // Door opening | |
333 | gMC->Gsatt("L3O2","seen",1); // Door opening | |
334 | ||
335 | gMC->Gsatt("CRT1", "seen", 0); // CRT Mother | |
336 | gMC->Gsatt("CRT2", "seen", 0); // Module air box | |
337 | gMC->Gsatt("CRT3", "seen", 1); // Scintillators | |
338 | gMC->Gsatt("CRT3", "colo", 2); // Scintillators | |
339 | gMC->Gsatt("CRT4", "seen", 1); // Aluminium frame (long bars) | |
340 | gMC->Gsatt("CRT4", "colo", 3); // | |
341 | gMC->Gsatt("CRT5", "seen", 1); // Aluminium frame (short bars) | |
342 | gMC->Gsatt("CRT5", "colo", 3); // | |
343 | gMC->Gsatt("CRT6", "seen", 1); // Module support | |
344 | gMC->Gsatt("CRT6", "colo", 3); // | |
bb5ce8b0 | 345 | |
346 | gMC->Gdopt("hide", "on"); | |
347 | gMC->Gdopt("edge","off"); | |
348 | gMC->Gdopt("shad", "on"); | |
349 | gMC->Gsatt("*", "fill", 7); | |
350 | gMC->SetClipBox("ALIC", 0, 3000, -3000, 3000, -6000, 6000); | |
351 | gMC->DefaultRange(); | |
846389b7 | 352 | //gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .009, .009); |
353 | gMC->Gdraw("alic", 30, 40, 0, -30, -60, .09, .09); | |
bb5ce8b0 | 354 | gMC->Gdhead(1111, "View of CRT(ACORDE)"); |
355 | gMC->Gdman(18, 4, "MAN"); | |
fb7a1f55 | 356 | } |