1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 // Class AliMUONSt2GeometryBuilder
19 // -------------------------------
20 // MUON Station2 coarse geometry construction class.
21 // Extracted from AliMUONv1
22 // Dummy version of station 2 with the right DE id (Ch. Finck)
24 #include <TVirtualMC.h>
25 #include <TGeoMatrix.h>
29 #include "AliMUONSt2GeometryBuilder.h"
31 #include "AliMUONConstants.h"
32 #include "AliMUONGeometryModule.h"
33 #include "AliMUONGeometryEnvelopeStore.h"
36 ClassImp(AliMUONSt2GeometryBuilder)
39 //______________________________________________________________________________
40 AliMUONSt2GeometryBuilder::AliMUONSt2GeometryBuilder(AliMUON* muon)
41 : AliMUONVGeometryBuilder(2, 2),
44 /// Standard constructor
48 //______________________________________________________________________________
49 AliMUONSt2GeometryBuilder::AliMUONSt2GeometryBuilder()
50 : AliMUONVGeometryBuilder(),
53 /// Default constructor
57 //______________________________________________________________________________
58 AliMUONSt2GeometryBuilder::~AliMUONSt2GeometryBuilder()
67 //______________________________________________________________________________
68 void AliMUONSt2GeometryBuilder::CreateGeometry()
70 /// From AliMUONv1::CreateGeometry()
73 //********************************************************************
75 //********************************************************************
76 // indices 1 and 2 for first and second chambers in the station
77 // iChamber (first chamber) kept for other quanties than Z,
78 // assumed to be the same in both chambers
80 // Get tracking medias Ids
81 Int_t *idtmed = fMUON->GetIdtmed()->GetArray()-1099;
82 Int_t idAir= idtmed[1100]; // medium 1
83 // Int_t idAlu1=idtmed[1103]; // medium 4
84 // Int_t idAlu2=idtmed[1104]; // medium 5
85 Int_t idGas=idtmed[1108]; // medium 9 = Ar-CO2 gas (80%+20%)
87 const Float_t kDeltaQuad = 0.01;//2.6; dummy value til we find the good value
88 const Float_t kDeltaZ = 6.5/2.;
90 // Rotation matrices in the x-y plane
93 fMUON->AliMatrix(irot1, 90., 0., 90., 90., 0., 0.);
96 fMUON->AliMatrix(irot2, 90., 90., 90., 180., 0., 0.);
98 // Half of the total thickness of frame crosses (including DAlu)
99 // for each chamber in stations 1 and 2:
100 // 3% of X0 of composite material,
101 // but taken as Aluminium here, with same thickness in number of X0
102 // Float_t dframez = 3. * 8.9 / 100;
103 // DGas and DAlu not changed from standard values
104 // Double_t zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
105 // The same parameters are defined in builder for station 1
108 const Float_t kDGas = 0.5;
110 // 3% radiation length of aluminum (X0=8.9 cm)
111 // const Float_t kDAlu = 3.5 * 8.9 / 100.;
114 // Outer excess and inner recess for mother volume radius
115 // with respect to ROuter and RInner
116 // Float_t dframep=.001; // Value for station 3 should be 6 ...
117 // Width (RdPhi) of the frame crosses for stations 1 and 2 (cm)
118 // Float_t dframep1=.001;
119 // Float_t phi=2*TMath::Pi()/12/2;
120 // The same parameters are defined in builder for station 1 (30deg)
123 // Double_t dstation = (-iChamber2->Z()) - (-iChamber1->Z());
126 Float_t posx, posy, posz;
127 // Chamber Material represented by Alu sheet
128 tpar[0]= AliMUONConstants::Rmin(1);
129 tpar[1]= AliMUONConstants::Rmax(1);
136 gMC->Gsvolu("S03G", "TUBS", idGas, tpar, 5);
137 gMC->Gsvolu("S04G", "TUBS", idGas, tpar, 5);
146 gMC->Gsvolu("LE01", "TUBS", idAir, tpar, 5);
147 GetEnvelopes(2)->AddEnvelope("LE01", detElemId, true, TGeoTranslation(posx, posy, posz),
148 TGeoRotation("rot1",90,0,90,90,0,0) );
150 gMC->Gsvolu("LF01", "TUBS", idAir, tpar, 5);
151 GetEnvelopes(3)->AddEnvelope("LF01", detElemId, true, TGeoTranslation(posx, posy, posz),
152 TGeoRotation("rot1",90,0,90,90,0,0) );
154 gMC->Gsvolu("LE02", "TUBS", idAir, tpar, 5);
155 GetEnvelopes(2)->AddEnvelope("LE02", detElemId, true, TGeoTranslation(-posx, posy,-posz),
156 TGeoRotation("rot2",90,180,90,90,180,0) );
158 gMC->Gsvolu("LF02", "TUBS", idAir, tpar, 5);
159 GetEnvelopes(3)->AddEnvelope("LF02", detElemId, true, TGeoTranslation(-posx, posy,-posz),
160 TGeoRotation("rot2",90,180,90,90,180,0) );
162 gMC->Gsvolu("LE03", "TUBS", idAir, tpar, 5);
163 GetEnvelopes(2)->AddEnvelope("LE03", detElemId, true, TGeoTranslation(posx, -posy, -posz),
164 TGeoRotation("rot3",90,0,90,270,180,0) );
166 gMC->Gsvolu("LF03", "TUBS", idAir, tpar, 5);
167 GetEnvelopes(3)->AddEnvelope("LF03", detElemId, true, TGeoTranslation(posx, -posy, -posz),
168 TGeoRotation("rot3",90,0,90,270,180,0) );
170 gMC->Gsvolu("LE04", "TUBS", idAir, tpar, 5);
171 GetEnvelopes(2)->AddEnvelope("LE04", detElemId, true, TGeoTranslation(-posx, -posy, posz),
172 TGeoRotation("rot4",90,180,90,270,0,0) );
174 gMC->Gsvolu("LF04", "TUBS", idAir, tpar, 5);
175 GetEnvelopes(3)->AddEnvelope("LF04", detElemId, true, TGeoTranslation(-posx, -posy, posz),
176 TGeoRotation("rot4",90,180,90,270,0,0) );
178 GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE01", 1);
179 GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF01", 1);
181 GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE02", 2);
182 GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF02", 2);
184 GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE03", 3);
185 GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF03", 3);
187 GetEnvelopes(2)->AddEnvelopeConstituent("S03G", "LE04", 4);
188 GetEnvelopes(3)->AddEnvelopeConstituent("S04G", "LF04", 4);
191 //______________________________________________________________________________
192 void AliMUONSt2GeometryBuilder::SetTransformations()
194 /// Defines the transformations for the station2 chambers.
196 // Define chamber volumes as virtual
197 SetVolume(2, "SC03", true);
198 SetVolume(3, "SC04", true);
200 Double_t zpos1 = - AliMUONConstants::DefaultChamberZ(2);
201 SetTranslation(2, TGeoTranslation(0., 0., zpos1));
203 Double_t zpos2 = - AliMUONConstants::DefaultChamberZ(3);
204 SetTranslation(3, TGeoTranslation(0., 0., zpos2));
207 //______________________________________________________________________________
208 void AliMUONSt2GeometryBuilder::SetSensitiveVolumes()
210 /// Defines the sensitive volumes for station2 chambers.
212 GetGeometry(2)->SetSensitiveVolume("S03G");
213 GetGeometry(3)->SetSensitiveVolume("S04G");