]> git.uio.no Git - u/mrichter/AliRoot.git/blame - CRT/AliCRTv0.cxx
Simplifying calling test, explicite functions for each type of test
[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
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 61ClassImp(AliCRTv0)
62
63//_____________________________________________________________________________
bb5ce8b0 64AliCRTv0::AliCRTv0()
65 : AliCRT()
fb7a1f55 66{
67 //
bb5ce8b0 68 // Default constructor
fb7a1f55 69 //
fb7a1f55 70}
71
72//_____________________________________________________________________________
73AliCRTv0::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//_____________________________________________________________________________
90AliCRTv0::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 100AliCRTv0::~AliCRTv0()
101{
102 //
103 // Default destructor
104 //
105}
106
107//_____________________________________________________________________________
108AliCRTv0& AliCRTv0::operator=(const AliCRTv0& crt)
778e67bd 109{
110 //
111 // Asingment operator.
112 //
113 crt.Copy(*this);
114 return *this;
115}
116
fb7a1f55 117//_____________________________________________________________________________
118void 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//_____________________________________________________________________________
217void 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 313void 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}