MC-dependent part of AliRun extracted in AliMC (F.Carminati)
[u/mrichter/AliRoot.git] / CRT / AliCRTv0.cxx
CommitLineData
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
88cb7938 48#include <TGeometry.h>
bb5ce8b0 49#include <TBRIK.h>
88cb7938 50#include <TNode.h>
5d12ce38 51#include <TVirtualMC.h>
fb7a1f55 52
88cb7938 53#include "AliRun.h"
bb5ce8b0 54#include "AliConst.h"
55
56#include "AliCRTv0.h"
57#include "AliCRTConstants.h"
778e67bd 58
fb7a1f55 59ClassImp(AliCRTv0)
60
61//_____________________________________________________________________________
bb5ce8b0 62AliCRTv0::AliCRTv0()
63 : AliCRT()
fb7a1f55 64{
65 //
bb5ce8b0 66 // Default constructor
fb7a1f55 67 //
fb7a1f55 68}
69
70//_____________________________________________________________________________
71AliCRTv0::AliCRTv0(const char *name, const char *title)
bb5ce8b0 72 : AliCRT(name, title)
fb7a1f55 73{
74 //
bb5ce8b0 75 // Standard constructor
fb7a1f55 76 //
77 //Begin_Html
78 /*
79 <img src="picts/AliCRTv0.gif">
80 */
81 //End_Html
bb5ce8b0 82 SetMarkerColor(kRed);
83 SetMarkerStyle(kRed);
84 SetMarkerSize(0.4);
fb7a1f55 85}
86
87//_____________________________________________________________________________
778e67bd 88AliCRTv0::AliCRTv0(const AliCRTv0& crt)
bb5ce8b0 89 : AliCRT(crt)
778e67bd 90{
91 //
bb5ce8b0 92 // Copy constructor
778e67bd 93 //
94 crt.Copy(*this);
95}
96
97//_____________________________________________________________________________
bb5ce8b0 98AliCRTv0::~AliCRTv0()
99{
100 //
101 // Default destructor
102 //
103}
104
105//_____________________________________________________________________________
106AliCRTv0& AliCRTv0::operator=(const AliCRTv0& crt)
778e67bd 107{
108 //
109 // Asingment operator.
110 //
111 crt.Copy(*this);
112 return *this;
113}
114
115//_____________________________________________________________________________
fb7a1f55 116void AliCRTv0::BuildGeometry()
117{
778e67bd 118 //
119 // Create the ROOT TNode geometry for the CRT
120 //
121
122 TNode *node, *top;
123
124 const Int_t kColorCRT = kRed;
125
126 // Find the top node alice.
127 top = gAlice->GetGeometry()->GetNode("alice");
128
129 new TBRIK("S_CRT_A", "CRT box", "void",
130 AliCRTConstants::fgActiveAreaLenght/2.,
131 AliCRTConstants::fgActiveAreaHeight/2.,
132 AliCRTConstants::fgActiveAreaWidth/2.);
133
134
135 new TRotMatrix("Left", "Left", 90., 315., 90., 45., 0., 337.5);
136 new TRotMatrix("Right", "Right", 90., 45., 90., 315., 180., 202.5);
137 new TRotMatrix("Up", "Up", 90., 0., 90., 90., 0., 90.);
138 top->cd();
139
140 //
141 // Put 4 modules on the top of the magnet
142 Float_t box = AliCRTConstants::fgCageWidth/2.;
143 top->cd();
144 node = new TNode("upper1", "upper1", "S_CRT_A", 0., 790., 3.*box, "Up");
145 node->SetLineColor(kColorCRT);
146 fNodes->Add(node);
147
148 top->cd();
149 node = new TNode("upper2", "upper2", "S_CRT_A", 0., 790., box, "Up");
150 node->SetLineColor(kColorCRT);
151 fNodes->Add(node);
152
153 top->cd();
154 node = new TNode("upper3", "upper3", "S_CRT_A", 0., 790., -1.*box, "Up");
155 node->SetLineColor(kColorCRT);
156 fNodes->Add(node);
157
158 top->cd();
159 node = new TNode("upper4", "upper4", "S_CRT_A", 0., 790., -3.*box, "Up");
160 node->SetLineColor(kColorCRT);
161 fNodes->Add(node);
162
163
164 // Modules on the left side.
165 Float_t xtragap = 10.;
166 Float_t initXside = (790.+xtragap)*TMath::Sin(2*22.5*kDegrad); //rigth side
167 Float_t initYside = (790.+xtragap)*TMath::Cos(2*22.5*kDegrad);
168 top->cd();
169 node = new TNode("upper5", "upper5", "S_CRT_A", initXside, initYside, 3.*box, "Left");
170 node->SetLineColor(kColorCRT);
171 fNodes->Add(node);
172
173 top->cd();
174 node = new TNode("upper6", "upper6", "S_CRT_A", initXside, initYside, box, "Left");
175 node->SetLineColor(kColorCRT);
176 fNodes->Add(node);
177
178 top->cd();
179 node = new TNode("upper7", "upper7", "S_CRT_A", initXside, initYside, -1.*box, "Left");
180 node->SetLineColor(kColorCRT);
181 fNodes->Add(node);
182
183 top->cd();
184 node = new TNode("upper8", "upper8", "S_CRT_A", initXside, initYside, -3.*box, "Left");
185 node->SetLineColor(kColorCRT);
186 fNodes->Add(node);
187
188
189 // Modules on the right side.
190 top->cd();
191 node = new TNode("upper9", "upper9", "S_CRT_A", -initXside, initYside, 3.*box, "Right");
192 node->SetLineColor(kColorCRT);
193 fNodes->Add(node);
194
195 top->cd();
196 node = new TNode("upper10", "upper10", "S_CRT_A", -initXside, initYside, box, "Right");
197 node->SetLineColor(kColorCRT);
198 fNodes->Add(node);
199
200 top->cd();
201 node = new TNode("upper11","upper11", "S_CRT_A", -initXside, initYside, -1.*box, "Right");
202 node->SetLineColor(kColorCRT);
203 fNodes->Add(node);
204
205 top->cd();
206 node = new TNode("upper12","upper12", "S_CRT_A", -initXside, initYside, -3.*box, "Right");
207 node->SetLineColor(kColorCRT);
208 fNodes->Add(node);
209
fb7a1f55 210}
211
212//_____________________________________________________________________________
213void AliCRTv0::CreateGeometry()
214{
215 //
216 // Create geometry for the CRT array
217 //
778e67bd 218
bb5ce8b0 219 Int_t idrotm[2499]; // The rotation matrix.
220 Int_t* idtmed = fIdtmed->GetArray() - 1099 ;
778e67bd 221
bb5ce8b0 222 // Create a mother volume.
223 Float_t pbox[3];
224 //pbox[0] = AliCRTConstants::fgDepth*TMath::Tan(67.5*kDegrad);
225 pbox[0] = 12073.;
226 pbox[1] = AliCRTConstants::fgDepth;
227 pbox[2] = pbox[0];
228 gMC->Gsvolu("CRT", "BOX", idtmed[1114], pbox, 3);
229 gMC->Gspos("CRT", 1, "ALIC", 0, 0, 0, 0, "ONLY");
230
231 // Create a big volume with air barrel above the magnet
232 Float_t barrel[10];
233 Float_t magnetSides = 3.;
234 Float_t planesPerpendicularToZ = 2.;
235 barrel[0] = 22.5;
236 barrel[1] = 45*magnetSides;
237 barrel[2] = magnetSides;
238 barrel[3] = planesPerpendicularToZ;
239 barrel[4] = -700.;
240 barrel[5] = AliCRTConstants::fgMagMinRadius;
241 barrel[6] = AliCRTConstants::fgMagMinRadius + 2.; // 2 cm width
242 barrel[7] = -barrel[4];
243 barrel[8] = barrel[5];
244 barrel[9] = barrel[6];
245 gMC->Gsvolu("CRT4", "PGON", idtmed[1112], barrel, 10);
246 gMC->Gspos("CRT4", 1 , "CRT", 0., -30., 0., 0, "MANY");
778e67bd 247
248 //
778e67bd 249 Float_t box[3];
bb5ce8b0 250 box[0] = AliCRTConstants::fgSinglePaletteLenght/4;
251 box[1] = AliCRTConstants::fgSinglePaletteHeight/2;
252 box[2] = AliCRTConstants::fgSinglePaletteWidth/2;
253 gMC->Gsvolu("CRT6", "BOX", idtmed[1112], box, 3);
778e67bd 254
bb5ce8b0 255 // In the right side side of the magnet
778e67bd 256 AliMatrix(idrotm[231], 90., 45., 90., 315., 180., 202.5);
fb7a1f55 257
bb5ce8b0 258 // In the left side side of the magnet
259 AliMatrix(idrotm[232], 90., 315., 90., 315., 0.0000040, 263.0707092);
260
261 // Now put them into the volume created above
262 // First above the magnet.
263 const Float_t away = (2.*barrel[5]*TMath::Sin(kDegrad*22.5))/4.;
264 const Int_t nModules = 10;
265 for (Int_t i = 0; i < nModules; i++) {
266 Float_t zCoordinate = i*100 - 450;
267 // In the lef side
268 gMC->Gspos("CRT6", i, "CRT4", -away, barrel[5]+1., zCoordinate, 0, "MANY");
269 // In the rigth side
270 gMC->Gspos("CRT6",i+10,"CRT4", away, barrel[5]+1., zCoordinate, 0, "MANY");
271
272 // The most away part (left side)
273 gMC->Gspos("CRT6", i+20, "CRT4", 3*away, barrel[5]+31 - away, zCoordinate, idrotm[232], "MANY");
274 // The inner part (left side)
275 gMC->Gspos("CRT6", i+30, "CRT4", 4*away, barrel[5]+31 - 2*away, zCoordinate, idrotm[232], "MANY");
276
277 // The most away part (rigth side)
278 gMC->Gspos("CRT6", i+40, "CRT4", -3*away, barrel[5]+31 - away, zCoordinate, idrotm[231], "MANY");
279 // The inner part (rigth side)
280 gMC->Gspos("CRT6", i+50, "CRT4", -4*away, barrel[5]+31 - 2*away, zCoordinate, idrotm[231], "MANY");
281 }
fb7a1f55 282
bb5ce8b0 283 // Now the magnet doors
284 magnetSides = 8.;
285 barrel[1] = 45*magnetSides;
286 barrel[2] = magnetSides;
287 barrel[4] = 700.;
288 barrel[5] = 0;
289 barrel[6] = 790;
290 barrel[7] = barrel[4] + 2.;
291 barrel[8] = barrel[5];
292 barrel[9] = barrel[6];
293 gMC->Gsvolu("CRT5", "PGON", idtmed[1111], barrel, 10);
294 gMC->Gspos("CRT5", 1, "CRT", 0., -30., 0., 0, "ONLY");
295
296 AliMatrix(idrotm[300], 90., 0., 90., 90., 180., 0.);
297 gMC->Gspos("CRT5", 2, "CRT", 0., -30., 0., idrotm[300], "ONLY");
778e67bd 298
fb7a1f55 299}
300
fb7a1f55 301//_____________________________________________________________________________
302void AliCRTv0::DrawDetector()
303{
fb7a1f55 304 //
305 // Draw a shaded view of the L3 magnet
306 //
fb7a1f55 307
bb5ce8b0 308 Info("DrawDetector", "Drawing the module");
309
310 gMC->Gsatt("*", "seen", -1);
311 gMC->Gsatt("alic", "seen", 0);
312
313 gMC->Gsatt("ALIC","seen",0);
314 gMC->Gsatt("L3MO","seen",1); // L3 Magnet
315 gMC->Gsatt("CRT1","seen",1); // Scintillators
316
317 // Draw the molasse volumes
318 gMC->Gsatt("CMO1","seen",0); // Exactly above the HALL
319 gMC->Gsatt("CMO2","seen",0); // Molasse, along the PM25
320 gMC->Gsatt("CMO3","seen",0); // molasse along the PGC2
321 gMC->Gsatt("CMO4","seen",0); // Molasse, behind the PX24 upper part
322 gMC->Gsatt("CMO5","seen",0); // molasse behind px24, lower part
323 gMC->Gsatt("CMO6","seen",0); // behind the PX24
324 gMC->Gsatt("CMO7","seen",0); // behind the PGC2
325 gMC->Gsatt("CMO8","seen",0); // on the right side.
326 gMC->Gsatt("CMO9","seen",0); // on the left side.
327 gMC->Gsatt("CM10","seen",0); // betwen PX24 & PM25.
328 gMC->Gsatt("CM11","seen",0); // betwen PGC2 & PM25.
329 gMC->Gsatt("CM12","seen",0); // box above the hall.
330
331 gMC->Gdopt("hide", "on");
332 gMC->Gdopt("edge","off");
333 gMC->Gdopt("shad", "on");
334 gMC->Gsatt("*", "fill", 7);
335 gMC->SetClipBox("ALIC", 0, 3000, -3000, 3000, -6000, 6000);
336 gMC->DefaultRange();
337 gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .009, .009);
338 gMC->Gdhead(1111, "View of CRT(ACORDE)");
339 gMC->Gdman(18, 4, "MAN");
fb7a1f55 340}