]>
Commit | Line | Data |
---|---|---|
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 | //************************************************************************* | |
18 | // SSD geometry, based on ROOT geometrical modeler | |
19 | // | |
20 | // Enrico Cattaruzza ecattar@ts.infn.it | |
21 | //************************************************************************* | |
22 | #include "TMath.h" | |
23 | #include "TGeoVolume.h" | |
24 | #include "TGeoMatrix.h" | |
25 | #include <TGeoManager.h> | |
26 | #include "TVector3.h" | |
27 | #include "TGeoArb8.h" | |
28 | #include "TList.h" | |
29 | #include "TGeoMatrix.h" | |
30 | #include "TGeoCompositeShape.h" | |
31 | #include "TGeoTube.h" | |
32 | #include "TGeoBBox.h" | |
33 | #include "AliITSv11GeometrySSD.h" | |
34 | ///////////////////////////////////////////////////////////////////////////////// | |
35 | //Parameters for SSD Geometry | |
36 | ///////////////////////////////////////////////////////////////////////////////// | |
37 | // Layer5 (lengths are in mm and angles in degrees) | |
38 | ///////////////////////////////////////////////////////////////////////////////// | |
39 | const Double_t AliITSv11GeometrySSD::fgkSSDLay5LadderLength = 950.7*fgkmm; | |
40 | const Int_t AliITSv11GeometrySSD::fgkSSDLay5SensorsNumber = 22; | |
41 | const Int_t AliITSv11GeometrySSD::fgkSSDLay5LadderNumber = 34; | |
42 | const Double_t AliITSv11GeometrySSD::fgkSSDLay5RadiusMin = 378.0*fgkmm; | |
43 | const Double_t AliITSv11GeometrySSD::fgkSSDLay5RadiusMax = 384.0*fgkmm; | |
44 | const Double_t AliITSv11GeometrySSD::fgkLay5CenterITSPosition = 467.85*fgkmm; | |
45 | ///////////////////////////////////////////////////////////////////////////////// | |
46 | // Layer6 (lengths are in mm and angles in degrees) | |
47 | ///////////////////////////////////////////////////////////////////////////////// | |
48 | const Double_t AliITSv11GeometrySSD::fgkSSDLay6LadderLength = 1068.0*fgkmm; | |
49 | const Int_t AliITSv11GeometrySSD::fgkSSDLay6SensorsNumber = 25; | |
50 | const Int_t AliITSv11GeometrySSD::fgkSSDLay6LadderNumber = 38; | |
51 | const Double_t AliITSv11GeometrySSD::fgkSSDLay6RadiusMin = 428.0*fgkmm; | |
52 | const Double_t AliITSv11GeometrySSD::fgkSSDLay6RadiusMax = 434.0*fgkmm; | |
53 | const Double_t AliITSv11GeometrySSD::fgkLay6CenterITSPosition = 526.50*fgkmm; | |
54 | ///////////////////////////////////////////////////////////////////////////////// | |
55 | // SSD Chips and Hybrid (lengths are in mm and angles in degrees) | |
56 | ///////////////////////////////////////////////////////////////////////////////// | |
57 | const Int_t AliITSv11GeometrySSD::fgkSSDChipNumber = 6; | |
58 | const Double_t AliITSv11GeometrySSD::fgkSSDChipLength = 11.100*fgkmm; | |
59 | const Double_t AliITSv11GeometrySSD::fgkSSDChipWidth = 3.850*fgkmm; | |
60 | const Double_t AliITSv11GeometrySSD::fgkSSDChipHeight = 0.180*fgkmm; | |
61 | const Double_t AliITSv11GeometrySSD::fgkSSDChipSeparationLength = 1.000*fgkmm; | |
62 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueLength = fgkSSDChipLength; | |
63 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueWidth = fgkSSDChipWidth; | |
64 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueHeight = 0.030*fgkmm; | |
65 | ///////////////////////////////////////////////////////////////////////////////// | |
66 | // Stiffener (lengths are in mm and angles in degrees) | |
67 | ///////////////////////////////////////////////////////////////////////////////// | |
68 | const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerLength = 73.000*fgkmm; | |
69 | const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerWidth = 6.500*fgkmm; | |
70 | const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerHeight = 0.315*fgkmm; | |
71 | const Double_t AliITSv11GeometrySSD::fgkSSDStiffenerToChipDist = 2.500*fgkmm; | |
72 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Length = 1.600*fgkmm; | |
73 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Width = 0.870*fgkmm; | |
74 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor0603Height = 0.800*fgkmm; | |
75 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Length = 4.600*fgkmm; | |
76 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Width = 3.400*fgkmm; | |
77 | const Double_t AliITSv11GeometrySSD::fgkSSDCapacitor1812Height = 1.400*fgkmm; | |
78 | const Double_t AliITSv11GeometrySSD::fgkSSDWireLength = 30.000*fgkmm; | |
79 | const Double_t AliITSv11GeometrySSD::fgkSSDWireRadius = 0.185*fgkmm; | |
80 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorPosition[2] = {44.32*fgkmm, | |
81 | 0.33*fgkmm}; | |
82 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorSeparation = 0.44*fgkmm; | |
83 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorLength = 2.16*fgkmm; | |
84 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorWidth = 3.60*fgkmm; | |
85 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorHeight = | |
86 | 0.25*fgkSSDStiffenerHeight; | |
87 | ///////////////////////////////////////////////////////////////////////////////// | |
88 | // Cooling Block (lengths are in mm and angles in degrees) | |
89 | ///////////////////////////////////////////////////////////////////////////////// | |
90 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockLength = 3.000*fgkmm; | |
91 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockWidth = 4.000*fgkmm; | |
92 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHeight[3] = | |
93 | {1.950*fgkmm, 0.240*fgkmm, 0.300*fgkmm}; | |
94 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleRadius[2] = | |
95 | {1.000*fgkmm, 0.120*fgkmm}; | |
96 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleLength[2] = | |
97 | {1.900*fgkmm, 0.400*fgkmm}; | |
98 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleCenter = | |
99 | 1.500*fgkmm; | |
100 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleHeight = | |
101 | 0.300*fgkmm; | |
102 | ///////////////////////////////////////////////////////////////////////////////// | |
103 | // SSD Sensor (lengths are in mm and angles in degrees) | |
104 | ///////////////////////////////////////////////////////////////////////////////// | |
105 | const char* AliITSv11GeometrySSD::fgkSSDSensitiveVolName = | |
106 | "SSDSensorSensitiveVol"; | |
107 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorLength = 42.000*fgkmm; | |
108 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorHeight = 0.300*fgkmm; | |
109 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorWidth = 75.000*fgkmm; | |
110 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorOverlap = | |
111 | fgkSSDSensorLength-39.1*fgkmm; | |
112 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorInsensitiveLength = 1.*fgkmm; | |
113 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorInsensitiveWidth = 1.*fgkmm; | |
114 | ///////////////////////////////////////////////////////////////////////////////// | |
115 | // Flex (lengths are in mm and angles in degrees) | |
116 | ///////////////////////////////////////////////////////////////////////////////// | |
117 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexFullLength = 106.000*fgkmm; | |
118 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexLength[4] = | |
119 | {0.5*(fgkSSDStiffenerLength+fgkSSDChipNumber*fgkSSDChipLength | |
120 | +(fgkSSDChipNumber-1)*fgkSSDChipSeparationLength), | |
121 | 0.5*(fgkSSDStiffenerLength+fgkSSDChipNumber*fgkSSDChipLength | |
122 | +(fgkSSDChipNumber-1)*fgkSSDChipSeparationLength)-4.000*fgkmm, | |
123 | 9.500*fgkmm, 10.000*fgkmm}; | |
124 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexWidth[2] = | |
125 | { 9.340*fgkmm, 5.380*fgkmm}; | |
126 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHeight[2] = | |
127 | { 0.030*fgkmm, 0.020*fgkmm}; | |
128 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexAngle = 30.000; | |
129 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHoleLength = 1.430*fgkmm; | |
130 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHoleWidth = 3.000*fgkmm; | |
131 | const Double_t AliITSv11GeometrySSD::fgkSSDEndFlexCompLength[6] = | |
132 | {3.30*fgkmm,4.12*fgkmm,4.22*fgkmm,1.70*fgkmm,0.75*fgkmm,7.18*fgkmm}; | |
133 | const Double_t AliITSv11GeometrySSD:: fgkSSDEndFlexCompWidth[3] = | |
134 | {15.03*fgkmm,23.48*fgkmm,12.28*fgkmm}; | |
135 | ///////////////////////////////////////////////////////////////////////////////// | |
136 | // SSD Ladder Cable (lengths are in mm and angles in degrees) | |
137 | ///////////////////////////////////////////////////////////////////////////////// | |
138 | const Double_t AliITSv11GeometrySSD::fgkSSDLadderCableWidth = 23.5*fgkmm; | |
139 | ///////////////////////////////////////////////////////////////////////////////// | |
140 | // SSD Module (lengths are in mm and angles in degrees) | |
141 | ///////////////////////////////////////////////////////////////////////////////// | |
142 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleStiffenerPosition[2] = | |
143 | { 1.000*fgkmm, 3.900*fgkmm}; | |
144 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleSensorSupportDistance = | |
145 | 45.600*fgkmm; | |
146 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleCoolingBlockToSensor = | |
147 | 5.075*fgkmm; | |
148 | ///////////////////////////////////////////////////////////////////////////////// | |
149 | // Sensor Support (lengths are in mm and angles in degrees) | |
150 | ///////////////////////////////////////////////////////////////////////////////// | |
151 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportLength = | |
152 | 5.800*fgkmm; | |
153 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportWidth = | |
154 | 2.000*fgkmm; | |
155 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportHeight[2] = | |
156 | { 4.620*fgkmm, 5.180*fgkmm}; | |
157 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportThickness[2] = | |
158 | { 0.450*fgkmm, 0.450*fgkmm}; | |
159 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportPosition = | |
160 | 0.5*(fgkSSDModuleSensorSupportDistance | |
161 | + fgkSSDSensorSideSupportThickness[0]) | |
162 | - fgkSSDSensorSideSupportLength; | |
163 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportLength = | |
164 | 5.250*fgkmm; | |
165 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportWidth = | |
166 | 1.680*fgkmm; | |
167 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportHeight[2] = | |
168 | {fgkSSDSensorSideSupportHeight[0]+fgkSSDSensorSideSupportThickness[0], | |
169 | fgkSSDSensorSideSupportHeight[1]+fgkSSDSensorSideSupportThickness[1]}; | |
170 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportThickness[2] = | |
171 | {fgkSSDSensorSideSupportThickness[0],fgkSSDSensorSideSupportThickness[1]}; | |
172 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportPosition = | |
173 | 19.000*fgkmm; | |
174 | ///////////////////////////////////////////////////////////////////////////////// | |
175 | // Chip Cables (lengths are in mm and angles in degrees) | |
176 | ///////////////////////////////////////////////////////////////////////////////// | |
177 | const Double_t AliITSv11GeometrySSD::fgkSSDChipCablesLength[2] = | |
178 | {73.12/fgkSSDChipNumber*fgkmm,fgkSSDChipLength+2.*0.19*fgkmm}; | |
179 | const Double_t AliITSv11GeometrySSD::fgkSSDChipCablesHeight[4] = | |
180 | { 0.014*fgkmm, 0.010*fgkmm, fgkSSDModuleCoolingBlockToSensor | |
181 | - (fgkSSDSensorSideSupportHeight[1]-fgkSSDSensorSideSupportHeight[0]) | |
182 | - fgkSSDCoolingBlockHoleCenter-fgkSSDStiffenerHeight | |
183 | - fgkSSDChipHeight-fgkSSDSensorHeight, | |
184 | fgkSSDModuleCoolingBlockToSensor | |
185 | - fgkSSDCoolingBlockHoleCenter-fgkSSDStiffenerHeight | |
186 | - fgkSSDChipHeight-fgkSSDSensorHeight}; | |
187 | const Double_t AliITSv11GeometrySSD::fgkSSDChipCablesWidth[3] = | |
188 | { 11.000*fgkmm, 0.800*fgkmm, 0.600*fgkmm}; | |
189 | ///////////////////////////////////////////////////////////////////////////////// | |
190 | // Carbon Fiber Junction Parameters (lengths are in mm and angles in degrees) | |
191 | ///////////////////////////////////////////////////////////////////////////////// | |
192 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionLength = | |
193 | 3.820*fgkmm; | |
194 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionWidth = | |
195 | fgkSSDSensorLength-fgkSSDSensorOverlap; | |
196 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionEdge[2] = | |
197 | { 0.86*fgkmm, 0.30*fgkmm}; | |
198 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionAngle[2] = | |
199 | { 30.00, 90.00}; | |
200 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionToSensorSupport = | |
201 | 1.78*fgkmm; | |
202 | ///////////////////////////////////////////////////////////////////////////////// | |
203 | //Carbon Fiber Parameters (lengths are in mm and angles in degrees) | |
204 | ///////////////////////////////////////////////////////////////////////////////// | |
205 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberTriangleLength = | |
206 | fgkSSDModuleSensorSupportDistance-2.*fgkCarbonFiberJunctionToSensorSupport; | |
207 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberTriangleAngle = | |
208 | 60.00; | |
209 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportTopEdgeDist[2] = | |
210 | { 0.751*fgkmm, 0.482*fgkmm}; | |
211 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportEdgeLength = | |
212 | 1.630*fgkmm; | |
213 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportWidth = | |
214 | 0.950*fgkmm; | |
215 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportXAxisLength = | |
216 | fgkCarbonFiberTriangleLength-0.5*fgkCarbonFiberSupportTopEdgeDist[1] | |
217 | / TMath::Cos(fgkCarbonFiberTriangleAngle*TMath::DegToRad()); | |
218 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportYAxisLength = | |
219 | 0.5*(fgkCarbonFiberJunctionWidth-fgkCarbonFiberSupportWidth) | |
220 | - fgkCarbonFiberSupportTopEdgeDist[0]-fgkCarbonFiberSupportWidth; | |
221 | ///////////////////////////////////////////////////////////////////////////////// | |
222 | // Carbon Fiber Lower Support Parameters (lengths are in mm) | |
223 | ///////////////////////////////////////////////////////////////////////////////// | |
224 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportWidth | |
225 | = 0.950*fgkmm; | |
226 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportLowerLenght | |
227 | = 1.600*fgkmm; | |
228 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportHeight | |
229 | = 0.830*fgkmm; | |
230 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportVolumeSeparation | |
231 | = 0.5*fgkCarbonFiberSupportWidth; | |
232 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportTransverseWidth | |
233 | = fgkCarbonFiberJunctionWidth | |
234 | - 2.*(fgkCarbonFiberLowerSupportWidth | |
235 | + fgkCarbonFiberLowerSupportVolumeSeparation); | |
236 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportVolumePosition[2] | |
237 | = {fgkCarbonFiberLowerSupportWidth | |
238 | + fgkCarbonFiberLowerSupportVolumeSeparation, | |
239 | fgkCarbonFiberLowerSupportWidth | |
240 | + fgkCarbonFiberLowerSupportVolumeSeparation | |
241 | + fgkCarbonFiberLowerSupportTransverseWidth}; | |
242 | ///////////////////////////////////////////////////////////////////////////////// | |
243 | // End Ladder Carbon Fiber Junction Parameters (lengths are in mm and angles in degrees) | |
244 | ///////////////////////////////////////////////////////////////////////////////// | |
245 | const Double_t AliITSv11GeometrySSD::fgkEndLadderCarbonFiberLowerJunctionLength[2] = | |
246 | {0.5*(fgkSSDLay5LadderLength | |
247 | -fgkSSDLay5SensorsNumber*fgkCarbonFiberJunctionWidth | |
248 | -fgkCarbonFiberLowerSupportWidth), | |
249 | 0.5*(fgkSSDLay5LadderLength | |
250 | -fgkSSDLay5SensorsNumber*fgkCarbonFiberJunctionWidth | |
251 | +fgkCarbonFiberLowerSupportWidth)}; | |
252 | const Double_t AliITSv11GeometrySSD::fgkEndLadderCarbonFiberUpperJunctionLength[2] = | |
253 | {fgkEndLadderCarbonFiberLowerJunctionLength[0]-20.4*fgkmm, | |
254 | fgkEndLadderCarbonFiberLowerJunctionLength[1]-20.6*fgkmm}; | |
255 | const Double_t AliITSv11GeometrySSD::fgkEndLadderMountingBlockPosition[2] = | |
256 | {fgkEndLadderCarbonFiberLowerJunctionLength[0]-16.50*fgkmm, | |
257 | fgkEndLadderCarbonFiberLowerJunctionLength[1]-31.50*fgkmm}; | |
258 | ///////////////////////////////////////////////////////////////////////////////// | |
259 | // Cooling Tube Support (lengths are in mm and angles in degrees) | |
260 | ///////////////////////////////////////////////////////////////////////////////// | |
261 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportRmax = 1.45*fgkmm; | |
262 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportRmin | |
263 | = fgkSSDCoolingBlockHoleRadius[0]; | |
264 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportLength = 8.55*fgkmm; | |
265 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportHeight = 0.85*fgkmm; | |
266 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportWidth = 2.00*fgkmm; | |
267 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportSeparation = | |
268 | fgkSSDSensorLength-2.*fgkSSDSensorOverlap; | |
269 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportToCarbonFiber = 11.70*fgkmm; | |
270 | ///////////////////////////////////////////////////////////////////////////////// | |
271 | // Cooling Tube (lengths are in mm and angles in degrees) | |
272 | ///////////////////////////////////////////////////////////////////////////////// | |
273 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmax = | |
274 | fgkCoolingTubeSupportRmin; | |
275 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmin = 0.96*fgkmm; | |
276 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeLength = | |
277 | fgkCarbonFiberJunctionWidth; | |
278 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSeparation = | |
279 | fgkSSDModuleSensorSupportDistance+fgkSSDCoolingBlockLength; | |
280 | ///////////////////////////////////////////////////////////////////////////////// | |
281 | // SSD Mounting Block Parameters (lengths are in mm and angles in degrees) | |
282 | ///////////////////////////////////////////////////////////////////////////////// | |
283 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockLength[3] = | |
284 | { 60.0*fgkmm, 42.2*fgkmm, 34.0*fgkmm}; | |
285 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHeight[4] = | |
286 | { 4.0*fgkmm, 8.0*fgkmm, 5.0*fgkmm, 0.2*fgkmm}; | |
287 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockWidth = | |
288 | 20.0*fgkmm; | |
289 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTrapezoidAngle = | |
290 | 40.0; | |
291 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTrapezoidHeight = | |
292 | 0.30*(fgkSSDMountingBlockHeight[1]-fgkSSDMountingBlockHeight[2]); | |
293 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTrapezoidUpBasis = | |
294 | 2.5*fgkmm; | |
295 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTubeLength[2] = | |
296 | { 56.0*fgkmm, 12.0*fgkmm}; | |
297 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTubeWidth[2] = | |
298 | { 5.0*fgkmm, 2.9*fgkmm}; | |
299 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleRadius = | |
300 | 1.0*fgkmm; | |
301 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleEdge = | |
302 | 6.0*fgkmm; | |
303 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleHeigth = | |
304 | 4.0*fgkmm; | |
305 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleRadius[2] = | |
306 | { 1.5*fgkmm,fgkSSDMountingBlockScrewHoleEdge/6.}; | |
307 | ///////////////////////////////////////////////////////////////////////////////// | |
308 | ClassImp(AliITSv11GeometrySSD) | |
309 | ///////////////////////////////////////////////////////////////////////////////// | |
310 | AliITSv11GeometrySSD::AliITSv11GeometrySSD(): | |
311 | AliITSv11Geometry(), | |
312 | fSSDChipMedium(), | |
313 | fSSDChipGlueMedium(), | |
314 | fSSDStiffenerMedium(), | |
315 | fSSDStiffenerConnectorMedium(), | |
316 | fSSDStiffener0603CapacitorMedium(), | |
317 | fSSDStiffener1812CapacitorMedium(), | |
318 | fSSDStiffenerHybridWireMedium(), | |
319 | fSSDKaptonFlexMedium(), | |
320 | fSSDAlTraceFlexMedium(), | |
321 | fSSDAlTraceLadderCableMedium(), | |
322 | fSSDKaptonLadderCableMedium(), | |
323 | fSSDKaptonChipCableMedium(), | |
324 | fSSDAlTraceChipCableMedium(), | |
325 | fSSDAlCoolBlockMedium(), | |
326 | fSSDSensorMedium(), | |
327 | fSSDSensorSupportMedium(), | |
328 | fSSDCarbonFiberMedium(), | |
329 | fSSDTubeHolderMedium(), | |
330 | fSSDCoolingTubeWater(), | |
331 | fSSDCoolingTubePhynox(), | |
332 | fSSDMountingBlockMedium(), | |
333 | fMotherVol(0), | |
334 | fColorCarbonFiber(4), | |
335 | fColorRyton(5), | |
336 | fColorPhynox(5), | |
337 | fColorSilicon(3), | |
338 | fColorAl(7), | |
339 | fColorKapton(6), | |
340 | fColorPolyhamide(5), | |
341 | fColorStiffener(9), | |
342 | fColorEpoxy(30) | |
343 | { | |
344 | //////////////////////// | |
345 | // Standard constructor | |
346 | //////////////////////// | |
347 | CreateMaterials(); | |
348 | } | |
349 | ///////////////////////////////////////////////////////////////////////////////// | |
350 | AliITSv11GeometrySSD::AliITSv11GeometrySSD(const AliITSv11GeometrySSD &s): | |
351 | AliITSv11Geometry(s.GetDebug()), | |
352 | fSSDChipMedium(s.fSSDChipMedium), | |
353 | fSSDChipGlueMedium(s.fSSDChipGlueMedium), | |
354 | fSSDStiffenerMedium(s.fSSDStiffenerMedium), | |
355 | fSSDStiffenerConnectorMedium(s.fSSDStiffenerConnectorMedium), | |
356 | fSSDStiffener0603CapacitorMedium(s.fSSDStiffener0603CapacitorMedium), | |
357 | fSSDStiffener1812CapacitorMedium(s.fSSDStiffener1812CapacitorMedium), | |
358 | fSSDStiffenerHybridWireMedium(s.fSSDStiffenerHybridWireMedium), | |
359 | fSSDKaptonFlexMedium(s.fSSDKaptonFlexMedium), | |
360 | fSSDAlTraceFlexMedium(s.fSSDAlTraceFlexMedium), | |
361 | fSSDAlTraceLadderCableMedium(s.fSSDAlTraceLadderCableMedium), | |
362 | fSSDKaptonLadderCableMedium(s.fSSDKaptonLadderCableMedium), | |
363 | fSSDKaptonChipCableMedium(s.fSSDKaptonChipCableMedium), | |
364 | fSSDAlTraceChipCableMedium(s.fSSDAlTraceChipCableMedium), | |
365 | fSSDAlCoolBlockMedium(s.fSSDAlCoolBlockMedium), | |
366 | fSSDSensorMedium(s.fSSDSensorMedium), | |
367 | fSSDSensorSupportMedium(s.fSSDSensorSupportMedium), | |
368 | fSSDCarbonFiberMedium(s.fSSDCarbonFiberMedium), | |
369 | fSSDTubeHolderMedium(s.fSSDTubeHolderMedium), | |
370 | fSSDCoolingTubeWater(s.fSSDCoolingTubeWater), | |
371 | fSSDCoolingTubePhynox(s.fSSDCoolingTubePhynox), | |
372 | fSSDMountingBlockMedium(s.fSSDMountingBlockMedium), | |
373 | fMotherVol(s.fMotherVol), | |
374 | fColorCarbonFiber(s.fColorCarbonFiber), | |
375 | fColorRyton(s.fColorRyton), | |
376 | fColorPhynox(s.fColorPhynox), | |
377 | fColorSilicon(s.fColorSilicon), | |
378 | fColorAl(s.fColorAl), | |
379 | fColorKapton(s.fColorKapton), | |
380 | fColorPolyhamide(s.fColorPolyhamide), | |
381 | fColorStiffener(s.fColorStiffener), | |
382 | fColorEpoxy(s.fColorEpoxy) | |
383 | { | |
384 | //////////////////////// | |
385 | // Copy Constructor | |
386 | //////////////////////// | |
387 | CreateMaterials(); | |
388 | } | |
389 | ///////////////////////////////////////////////////////////////////////////////// | |
390 | AliITSv11GeometrySSD& AliITSv11GeometrySSD:: | |
391 | operator=(const AliITSv11GeometrySSD &s){ | |
392 | //////////////////////// | |
393 | // Assignment operator | |
394 | //////////////////////// | |
395 | this->~AliITSv11GeometrySSD(); | |
396 | new(this) AliITSv11GeometrySSD(s); | |
397 | return *this; | |
398 | /* | |
399 | if(&s == this) return *this; | |
400 | fMotherVol = s.fMotherVol; | |
401 | return *this; | |
402 | */ | |
403 | } | |
404 | ///////////////////////////////////////////////////////////////////////////////// | |
405 | // Setting the transformation Matrices | |
406 | ///////////////////////////////////////////////////////////////////////////////// | |
407 | void AliITSv11GeometrySSD::SetSSDSensorSupportCombiTransMatrix(){ | |
408 | ///////////////////////////////////////////////////////////// | |
409 | // Method generating CombiTrans Matrix for SSD Sensor Support | |
410 | ///////////////////////////////////////////////////////////// | |
411 | //Translation Parameters SSDSensorSupportAssembly: | |
412 | //////////////////////////////////////////////////////// | |
413 | const Double_t kssdsensorsupporttransx[3] = {-0.5*fgkSSDSensorSideSupportWidth, | |
414 | 0.5*fgkSSDSensorSideSupportWidth, | |
415 | 0.5*fgkSSDSensorCenterSupportThickness[0] | |
416 | - fgkSSDSensorCenterSupportPosition}; | |
417 | const Double_t kssdsensorsupporttransy[3] = | |
418 | {0.5*fgkSSDSensorSideSupportThickness[0], | |
419 | -0.5*fgkSSDSensorSideSupportThickness[0] | |
420 | -fgkSSDModuleSensorSupportDistance, | |
421 | 0.5*fgkSSDSensorCenterSupportWidth | |
422 | -0.5*fgkSSDModuleSensorSupportDistance}; | |
423 | const Double_t kssdsensorsupporttransz[3] = {0.,0., | |
424 | fgkSSDSensorCenterSupportThickness[0]}; | |
425 | //////////////////////////////////////////////////////// | |
426 | //Rotational Parameters SSDSensorSupportAssembly: | |
427 | //////////////////////////////////////////////////////// | |
428 | const Double_t kssdsensorsupportrotphi[3] = { 0., 180., 270.}; | |
429 | const Double_t kssdsensorsupportrottheta[3] = { 90., 90., 90.}; | |
430 | const Double_t kssdsensorsupportrotpsi[3] = {- 90.,- 90.,- 90.}; | |
431 | //////////////////////////////////////////////////////////////// | |
432 | //Name of CombiTrans Transformation of SSDSensorSupportAssembly: | |
433 | //////////////////////////////////////////////////////////////// | |
434 | char ssdsensorsupportcombitransname[40]; | |
435 | char ssdsensorsupportrotname[40]; | |
436 | TGeoCombiTrans *ssdsensorsupportlocalmatrix[fgkSSDSensorSupportCombiTransNumber]; | |
437 | for(Int_t i=0; i<fgkSSDSensorSupportCombiTransNumber; i++){ | |
438 | sprintf(ssdsensorsupportcombitransname,"SSDSensorSupportCombiTrans%i",i); | |
439 | sprintf(ssdsensorsupportrotname,"SSDSensorSupportRot%i",i); | |
440 | ssdsensorsupportlocalmatrix[i] = | |
441 | new TGeoCombiTrans(ssdsensorsupportcombitransname, | |
442 | kssdsensorsupporttransx[i], | |
443 | kssdsensorsupporttransy[i], | |
444 | kssdsensorsupporttransz[i], | |
445 | new TGeoRotation(ssdsensorsupportrotname, | |
446 | kssdsensorsupportrotphi[i], | |
447 | kssdsensorsupportrottheta[i], | |
448 | kssdsensorsupportrotpsi[i])); | |
449 | fSSDSensorSupportCombiTransMatrix[i] = ssdsensorsupportlocalmatrix[i]; | |
450 | } | |
451 | } | |
452 | ///////////////////////////////////////////////////////////////////////////////// | |
453 | void AliITSv11GeometrySSD::SetSSDModuleCombiTransMatrix(Double_t SSDChipCablesHeigth){ | |
454 | ///////////////////////////////////////////////////////////// | |
455 | // Method generating CombiTrans Matrix for SSD Module | |
456 | ///////////////////////////////////////////////////////////// | |
457 | //Translation Parameters SSDModuleAssembly: | |
458 | //////////////////////////////////////////////////////// | |
459 | const Double_t kssdmoduletransx[7] = {0.5*fgkSSDStiffenerLength, | |
460 | 0.5*fgkSSDChipLength+0.5*(fgkSSDStiffenerLength | |
461 | - (fgkSSDChipNumber*fgkSSDChipLength+(fgkSSDChipNumber-1) | |
462 | * fgkSSDChipSeparationLength)), | |
463 | - fgkSSDModuleStiffenerPosition[0]+0.5*fgkSSDSensorWidth, | |
464 | 0.5*(fgkSSDStiffenerLength-fgkSSDChipNumber*fgkSSDChipLength | |
465 | - (fgkSSDChipNumber-1)*fgkSSDChipSeparationLength), | |
466 | 0.5*fgkSSDStiffenerLength-0.5*fgkSSDModuleSensorSupportDistance | |
467 | - fgkSSDCoolingBlockLength, | |
468 | 0.5*(fgkSSDStiffenerLength+fgkSSDChipCablesLength[1] | |
469 | + (fgkSSDChipNumber-1)*fgkSSDChipCablesLength[0]), | |
470 | 0.5*(fgkSSDStiffenerLength+fgkSSDChipNumber*fgkSSDChipLength | |
471 | +(fgkSSDChipNumber-1)*fgkSSDChipSeparationLength)}; | |
472 | const Double_t kssdmoduletransy[7] = {0.5*fgkSSDStiffenerWidth, | |
473 | 0.5*fgkSSDChipWidth+(fgkSSDStiffenerWidth | |
474 | - fgkSSDStiffenerToChipDist-fgkSSDChipWidth), | |
475 | - fgkSSDModuleStiffenerPosition[1]+0.5*fgkSSDSensorLength, | |
476 | fgkSSDStiffenerWidth, | |
477 | 0., | |
478 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] | |
479 | - fgkSSDStiffenerWidth | |
480 | + fgkSSDStiffenerToChipDist+fgkSSDChipWidth, | |
481 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] | |
482 | - fgkSSDStiffenerWidth}; | |
483 | const Double_t kssdmoduletransz[7] = {0.5*fgkSSDStiffenerHeight, | |
484 | - 0.5*fgkSSDChipHeight, | |
485 | 0.5*fgkSSDSensorHeight-fgkSSDStiffenerHeight-fgkSSDChipHeight | |
486 | - SSDChipCablesHeigth, | |
487 | - 0.5*fgkSSDFlexHeight[0], | |
488 | fgkSSDStiffenerHeight, | |
489 | - fgkSSDChipHeight, | |
490 | - 0.5*fgkSSDChipHeight}; | |
491 | //////////////////////////////////////////////////////// | |
492 | //Rotational Parameters SSDModuleAssembly: | |
493 | //////////////////////////////////////////////////////// | |
494 | const Double_t kssdmodulerotphi[7] = { 0., 0., 90., 0., 0., 90., 180.}; | |
495 | const Double_t kssdmodulerottheta[7] = { 0., 0., 0., 0., 0., 0., 0.}; | |
496 | const Double_t kssdmodulerotpsi[7] = { 0., 0., 0., 0., 0., 0., 0.}; | |
497 | //////////////////////////////////////////////////////// | |
498 | //Name of CombiTrans Transformation of SSDModuleAssembly: | |
499 | //////////////////////////////////////////////////////// | |
500 | const char* ssdmodulecombitransname[7] = {"SSDStiffenerCombiTrans", | |
501 | "SSDChipCombiTrans", | |
502 | "SSDSensorCombiTrans", | |
503 | "SSDFlex0CombiTrans", | |
504 | "SSDCoolingBlockCombiTrans", | |
505 | "SSDChipCablesCombiTrans", | |
506 | "SSDFlex1CombiTrans"}; | |
507 | const char* ssdmodulerotname[7] = {"SSDStiffenerRotName", | |
508 | "SSDChipRotName", | |
509 | "SSDSensorRotName", | |
510 | "SSDFlex0RotName", | |
511 | "SSDCoolingBlockRotName", | |
512 | "SSDChipCablesRotName", | |
513 | "SSDFlex1RotName"}; | |
514 | TGeoCombiTrans *ssdmodulelocalmatrix[fgkSSDModuleCombiTransNumber]; | |
515 | for(Int_t i=0; i<fgkSSDModuleCombiTransNumber; i++){ | |
516 | ssdmodulelocalmatrix[i] = | |
517 | new TGeoCombiTrans(ssdmodulecombitransname[i], | |
518 | kssdmoduletransx[i], | |
519 | kssdmoduletransy[i], | |
520 | kssdmoduletransz[i], | |
521 | new TGeoRotation(ssdmodulerotname[i], | |
522 | kssdmodulerotphi[i], | |
523 | kssdmodulerottheta[i], | |
524 | kssdmodulerotpsi[i])); | |
525 | fSSDModuleCombiTransMatrix[i] = ssdmodulelocalmatrix[i]; | |
526 | } | |
527 | } | |
528 | ///////////////////////////////////////////////////////////////////////////////// | |
529 | void AliITSv11GeometrySSD::SetCarbonFiberJunctionCombiTransMatrix(){ | |
530 | ///////////////////////////////////////////////////////////// | |
531 | // Method generating CombiTrans Matrix for Carbon Fiber Junction | |
532 | ///////////////////////////////////////////////////////////// | |
533 | //Translation Parameters CarbonFiberJunction: | |
534 | //////////////////////////////////////////////////////// | |
535 | const Double_t kcarbonfiberjunctiontransx[3] = | |
536 | { 0.0,fgkCarbonFiberTriangleLength,fgkCarbonFiberTriangleLength | |
537 | * TMath::Cos(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
538 | const Double_t kcarbonfiberjunctiontransy[3] = | |
539 | { 0.0, 0.0,fgkCarbonFiberTriangleLength | |
540 | * TMath::Sin(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
541 | const Double_t kcarbonfiberjunctiontransz[3] = { 0.0, 0.0, 0.0}; | |
542 | //////////////////////////////////////////////////////// | |
543 | //Rotational Parameters CarbonFiberJunction: | |
544 | //////////////////////////////////////////////////////// | |
545 | const Double_t kcarbonfiberjunctionrotphi[3] = { 0., 120., 240.}; | |
546 | const Double_t kcarbonfiberjunctionrottheta[3] = { 0., 0., 0.}; | |
547 | const Double_t kcarbonfiberjunctionrotpsi[3] = { 0., 0., 0.}; | |
548 | /////////////////////////////////////////////////////////// | |
549 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
550 | /////////////////////////////////////////////////////////// | |
551 | char carbonfiberjunctioncombitransname[40]; | |
552 | char carbonfiberjunctionrotname[40]; | |
553 | TGeoCombiTrans *carbonfiberjunctionlocalmatrix[fgkCarbonFiberJunctionCombiTransNumber]; | |
554 | for(Int_t i=0; i<fgkCarbonFiberJunctionCombiTransNumber; i++) { | |
555 | sprintf(carbonfiberjunctioncombitransname,"CarbonFiberJunctionCombiTrans%i",i); | |
556 | sprintf(carbonfiberjunctionrotname,"CarbonFiberJunctionRot%i",i); | |
557 | carbonfiberjunctionlocalmatrix[i] = | |
558 | new TGeoCombiTrans(carbonfiberjunctioncombitransname, | |
559 | kcarbonfiberjunctiontransx[i], | |
560 | kcarbonfiberjunctiontransy[i], | |
561 | kcarbonfiberjunctiontransz[i], | |
562 | new TGeoRotation(carbonfiberjunctionrotname, | |
563 | kcarbonfiberjunctionrotphi[i], | |
564 | kcarbonfiberjunctionrottheta[i], | |
565 | kcarbonfiberjunctionrotpsi[i])); | |
566 | fCarbonFiberJunctionCombiTransMatrix[i] = carbonfiberjunctionlocalmatrix[i]; | |
567 | } | |
568 | } | |
569 | ///////////////////////////////////////////////////////////////////////////////// | |
570 | void AliITSv11GeometrySSD::SetEndLadderCarbonFiberJunctionCombiTransMatrix(Int_t i){ | |
571 | ///////////////////////////////////////////////////////////// | |
572 | // Method generating CombiTrans Matrix for End Ladder Carbon Fiber Junction | |
573 | ///////////////////////////////////////////////////////////// | |
574 | //Translation Parameters EndLadderCarbonFiberJunction: | |
575 | //////////////////////////////////////////////////////// | |
576 | const Double_t kendladdercarbonfiberjunctiontransx[3] = | |
577 | { 0.0,fgkCarbonFiberTriangleLength,fgkCarbonFiberTriangleLength | |
578 | * TMath::Cos(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
579 | const Double_t kendladdercarbonfiberjunctiontransy[3] = | |
580 | { 0.0, 0.0,fgkCarbonFiberTriangleLength | |
581 | * TMath::Sin(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
582 | const Double_t kendladdercarbonfiberjunctiontransz[3] = { 0.0, 0.0, | |
583 | 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[i] | |
584 | -fgkEndLadderCarbonFiberUpperJunctionLength[i])}; | |
585 | //////////////////////////////////////////////////////// | |
586 | //Rotational Parameters EndLadderCarbonFiberJunction: | |
587 | //////////////////////////////////////////////////////// | |
588 | const Double_t kendladdercarbonfiberjunctionrotphi[3] = { 0., 120., 240.}; | |
589 | const Double_t kendladdercarbonfiberjunctionrottheta[3] = { 0., 0., 0.}; | |
590 | const Double_t kendladdercarbonfiberjunctionrotpsi[3] = { 0., 0., 0.}; | |
591 | /////////////////////////////////////////////////////////// | |
592 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
593 | /////////////////////////////////////////////////////////// | |
594 | char endladdercarbonfiberjunctioncombitransname[40]; | |
595 | char endladdercarbonfiberjunctionrotname[40]; | |
596 | TGeoCombiTrans *endladdercarbonfiberjunctionlocalmatrix[fgkEndLadderCarbonFiberJunctionCombiTransNumber]; | |
597 | for(Int_t i=0; i<fgkEndLadderCarbonFiberJunctionCombiTransNumber; i++) { | |
598 | sprintf(endladdercarbonfiberjunctioncombitransname,"EndLadderCarbonFiberJunctionCombiTrans%i",i); | |
599 | sprintf(endladdercarbonfiberjunctionrotname,"EndLadderCarbonFiberJunctionRot%i",i); | |
600 | endladdercarbonfiberjunctionlocalmatrix[i] = | |
601 | new TGeoCombiTrans(endladdercarbonfiberjunctioncombitransname, | |
602 | kendladdercarbonfiberjunctiontransx[i], | |
603 | kendladdercarbonfiberjunctiontransy[i], | |
604 | kendladdercarbonfiberjunctiontransz[i], | |
605 | new TGeoRotation(endladdercarbonfiberjunctionrotname, | |
606 | kendladdercarbonfiberjunctionrotphi[i], | |
607 | kendladdercarbonfiberjunctionrottheta[i], | |
608 | kendladdercarbonfiberjunctionrotpsi[i])); | |
609 | fEndLadderCarbonFiberJunctionCombiTransMatrix[i] = | |
610 | endladdercarbonfiberjunctionlocalmatrix[i]; | |
611 | } | |
612 | } | |
613 | //////////////////////////////////////////////////////////////////////////////// | |
614 | void AliITSv11GeometrySSD::SetCarbonFiberAssemblyCombiTransMatrix(){ | |
615 | ///////////////////////////////////////////////////////////// | |
616 | // Method generating CombiTrans Matrix for Carbon fiber Assembly | |
617 | ///////////////////////////////////////////////////////////// | |
618 | //Translation Parameters CarbonFiberAssembly: | |
619 | //////////////////////////////////////////////////////// | |
620 | const Double_t kcarbonfiberassemblytransx[3] = { 0.0, 0.0, 0.0}; | |
621 | const Double_t kcarbonfiberassemblytransy[3] = | |
622 | { 0.5*fgkCarbonFiberJunctionWidth, 0.0, | |
623 | fgkCarbonFiberJunctionWidth-fgkCarbonFiberLowerSupportWidth | |
624 | - fgkCarbonFiberLowerSupportVolumePosition[0] | |
625 | - fgkCarbonFiberLowerSupportVolumePosition[1]}; | |
626 | const Double_t kcarbonfiberassemblytransz[3] = | |
627 | { 0.0, 0.0,- 0.5*fgkCarbonFiberLowerSupportHeight}; | |
628 | //////////////////////////////////////////////////////// | |
629 | //Rotational Parameters CarbonFiberAssembly: | |
630 | //////////////////////////////////////////////////////// | |
631 | const Double_t kcarbonfiberassemblyrotphi[3] = { 0., 90., 0.}; | |
632 | const Double_t kcarbonfiberassemblyrottheta[3] = { 90., | |
633 | -fgkCarbonFiberTriangleAngle, 0.}; | |
634 | const Double_t kcarbonfiberassemblyrotpsi[3] = { 0.,- 90., 0.}; | |
635 | /////////////////////////////////////////////////////////// | |
636 | //Name of CombiTrans Transformation of CarbonFiberAssembly: | |
637 | /////////////////////////////////////////////////////////// | |
638 | char carbonfiberassemblycombitransname[30]; | |
639 | char carbonfiberassemblyrotname[30]; | |
640 | TGeoCombiTrans *carbonfiberassemblylocalmatrix[fgkCarbonFiberAssemblyCombiTransNumber]; | |
641 | for(Int_t i=0; i<fgkCarbonFiberAssemblyCombiTransNumber; i++) { | |
642 | sprintf(carbonfiberassemblycombitransname,"CarbonFiberAssemblyCombiTrans%i",i); | |
643 | sprintf(carbonfiberassemblyrotname,"CarbonFiberAssemblyRot%i",i); | |
644 | carbonfiberassemblylocalmatrix[i] = | |
645 | new TGeoCombiTrans(carbonfiberassemblycombitransname, | |
646 | kcarbonfiberassemblytransx[i], | |
647 | kcarbonfiberassemblytransy[i], | |
648 | kcarbonfiberassemblytransz[i], | |
649 | new TGeoRotation(carbonfiberassemblyrotname, | |
650 | kcarbonfiberassemblyrotphi[i], | |
651 | kcarbonfiberassemblyrottheta[i], | |
652 | kcarbonfiberassemblyrotpsi[i])); | |
653 | fCarbonFiberAssemblyCombiTransMatrix[i] = carbonfiberassemblylocalmatrix[i]; | |
654 | } | |
655 | } | |
656 | ///////////////////////////////////////////////////////////////////////////////// | |
657 | void AliITSv11GeometrySSD::SetCoolingTubeSupportCombiTransMatrix(){ | |
658 | ///////////////////////////////////////////////////////////// | |
659 | // Method generating CombiTrans Matrix for Cooling Tube Support | |
660 | ///////////////////////////////////////////////////////////// | |
661 | //Translation Parameters CoolingTubeSupport: | |
662 | //////////////////////////////////////////////////////// | |
663 | Double_t phi = TMath::ASin(0.5*fgkCoolingTubeSupportHeight | |
664 | /fgkCoolingTubeSupportRmax); | |
665 | const Double_t kcoolingtubesupporttransx[2] = | |
666 | {0.,2.*fgkCoolingTubeSupportRmax*TMath::Cos(phi) | |
667 | + 2.*(fgkCoolingTubeSupportLength | |
668 | - fgkCoolingTubeSupportRmax*(1.+TMath::Cos(phi))) | |
669 | + fgkCarbonFiberTriangleLength | |
670 | - 2.0*fgkCarbonFiberJunctionLength}; | |
671 | const Double_t kcoolingtubesupporttransy[2] = { 0.0, 0.0}; | |
672 | const Double_t kcoolingtubesupporttransz[2] = { 0.0, 0.0}; | |
673 | //////////////////////////////////////////////////////// | |
674 | //Rotational Parameters CoolingTubeSupport: | |
675 | //////////////////////////////////////////////////////// | |
676 | const Double_t kcoolingsubesupportrotphi[2] = { 0., 180.}; | |
677 | const Double_t kcoolingsubesupportrottheta[2] = { 0., 0.}; | |
678 | const Double_t kcoolingsubesupportrotpsi[2] = { 0., 0.}; | |
679 | /////////////////////////////////////////////////////////// | |
680 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
681 | /////////////////////////////////////////////////////////// | |
682 | char coolingtubesupportcombitransname[40]; | |
683 | char coolingtubesupportrotname[40]; | |
684 | TGeoCombiTrans *coolingtubesupportlocalmatrix[fgkCoolingTubeSupportCombiTransNumber]; | |
685 | for(Int_t i=0; i<fgkCoolingTubeSupportCombiTransNumber; i++) { | |
686 | sprintf(coolingtubesupportcombitransname,"CoolingTubeSupportCombiTrans%i",i); | |
687 | sprintf(coolingtubesupportrotname,"CoolingTubeSupportRot%i",i); | |
688 | coolingtubesupportlocalmatrix[i] = | |
689 | new TGeoCombiTrans(coolingtubesupportcombitransname, | |
690 | kcoolingtubesupporttransx[i], | |
691 | kcoolingtubesupporttransy[i], | |
692 | kcoolingtubesupporttransz[i], | |
693 | new TGeoRotation(coolingtubesupportrotname, | |
694 | kcoolingsubesupportrotphi[i], | |
695 | kcoolingsubesupportrottheta[i], | |
696 | kcoolingsubesupportrotpsi[i])); | |
697 | fCoolingTubeSupportCombiTransMatrix[i] = coolingtubesupportlocalmatrix[i]; | |
698 | } | |
699 | } | |
700 | ///////////////////////////////////////////////////////////////////////////////// | |
701 | void AliITSv11GeometrySSD::SetCoolingTubeCombiTransMatrix(){ | |
702 | ///////////////////////////////////////////////////////////// | |
703 | // Method generating CombiTrans Matrix for Cooling Tube | |
704 | ///////////////////////////////////////////////////////////// | |
705 | //Translation Parameters CoolingTube: | |
706 | //////////////////////////////////////////////////////// | |
707 | const Double_t kcoolingtubetransx[2] = { 0., fgkCoolingTubeSeparation}; | |
708 | const Double_t kcoolingtubetransy[2] = { fgkCoolingTubeLength/2.0, fgkCoolingTubeLength/2.0}; | |
709 | const Double_t kcoolingtubetransz[2] = { 0.0, 0.}; | |
710 | //////////////////////////////////////////////////////// | |
711 | //Rotational Parameters CoolingTube: | |
712 | //////////////////////////////////////////////////////// | |
713 | const Double_t kcoolingtuberotphi[2] = { 0., 0.}; | |
714 | const Double_t kcoolingtuberottheta[2] = { 90., 90.}; | |
715 | const Double_t kcoolingtuberotpsi[2] = { 0., 0.}; | |
716 | /////////////////////////////////////////////////////////// | |
717 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
718 | /////////////////////////////////////////////////////////// | |
719 | const char* coolingtubecombitransname[fgkCoolingTubeCombiTransNumber] = | |
720 | {"CoolingTubeCombiTrans0","CoolingTubeCombiTrans1"}; | |
721 | const char* coolingtuberotationname[fgkCoolingTubeCombiTransNumber] = | |
722 | {"CoolingTubeRotation0","CoolingTubeRotation1"}; | |
723 | TGeoCombiTrans *coolingtubelocalmatrix[fgkCoolingTubeCombiTransNumber]; | |
724 | for(Int_t i=0; i<fgkCoolingTubeCombiTransNumber; i++) { | |
725 | coolingtubelocalmatrix[i] = | |
726 | new TGeoCombiTrans(coolingtubecombitransname[i], | |
727 | kcoolingtubetransx[i], | |
728 | kcoolingtubetransy[i], | |
729 | kcoolingtubetransz[i], | |
730 | new TGeoRotation(coolingtuberotationname[i], | |
731 | kcoolingtuberotphi[i], | |
732 | kcoolingtuberottheta[i], | |
733 | kcoolingtuberotpsi[i]) ); | |
734 | fCoolingTubeTransMatrix[i] = coolingtubelocalmatrix[i]; | |
735 | } | |
736 | } | |
737 | ///////////////////////////////////////////////////////////////////////////////// | |
738 | void AliITSv11GeometrySSD::SetLadderSegmentCombiTransMatrix(){ | |
739 | ///////////////////////////////////////////////////////////// | |
740 | // Method generating CombiTrans Matrix for SSD Ladder Segment | |
741 | ///////////////////////////////////////////////////////////// | |
742 | //Translation Parameters LadderSegment: | |
743 | //////////////////////////////////////////////////////// | |
744 | const Double_t kladdersegmenttransx[fgkLadderSegmentCombiTransNumber] = { 0., | |
745 | - 0.5*(fgkSSDSensorWidth-fgkCarbonFiberTriangleLength), | |
746 | fgkCarbonFiberTriangleLength+fgkCarbonFiberJunctionToSensorSupport, | |
747 | fgkCarbonFiberJunctionLength-(fgkCoolingTubeSupportLength | |
748 | - fgkCoolingTubeSupportRmax), | |
749 | 0.5*(fgkCarbonFiberTriangleLength-fgkCoolingTubeSeparation)}; | |
750 | const Double_t kladdersegmenttransy[fgkLadderSegmentCombiTransNumber] = { 0., | |
751 | - (2.*fgkSSDSensorLength-fgkSSDSensorOverlap)+ | |
752 | fgkSSDModuleStiffenerPosition[1]+fgkSSDStiffenerWidth | |
753 | + 0.5*fgkSSDFlexHoleLength+2.*fgkCarbonFiberJunctionWidth | |
754 | - 0.5*(fgkCarbonFiberLowerSupportWidth+fgkSSDSensorCenterSupportLength | |
755 | - fgkSSDSensorCenterSupportThickness[0]), | |
756 | fgkCarbonFiberJunctionWidth-0.5*(fgkCarbonFiberLowerSupportWidth | |
757 | + fgkSSDSensorCenterSupportLength | |
758 | - fgkSSDSensorCenterSupportThickness[0]) | |
759 | - fgkSSDSensorCenterSupportPosition, | |
760 | fgkCarbonFiberJunctionWidth-fgkCarbonFiberLowerSupportWidth | |
761 | - fgkCoolingTubeSupportToCarbonFiber, | |
762 | 0.0}; | |
763 | const Double_t kladdersegmenttransz[fgkLadderSegmentCombiTransNumber] = { 0., | |
764 | - (fgkSSDModuleCoolingBlockToSensor+0.5*fgkCoolingTubeSupportHeight | |
765 | - fgkSSDSensorHeight-fgkSSDChipCablesHeight[3]-fgkSSDChipHeight), | |
766 | 0., | |
767 | - 0.5*fgkCoolingTubeSupportHeight, | |
768 | - 0.5*fgkCoolingTubeSupportHeight}; | |
769 | ////////////////////////////////////////////////// | |
770 | //Rotational Parameters LadderSegment: | |
771 | //////////////////////////////////////////////////////// | |
772 | const Double_t kladdersegmentrotphi[fgkLadderSegmentCombiTransNumber] = | |
773 | { 0., 0.,- 90., 0., 0.}; | |
774 | const Double_t kladdersegmentrottheta[fgkLadderSegmentCombiTransNumber] = | |
775 | { 0., 0., 0., 90., 0.}; | |
776 | const Double_t kladdersegmentrotpsi[fgkLadderSegmentCombiTransNumber] = | |
777 | { 0., 0., 0., 0., 0.}; | |
778 | ////////////////////////////////////////////////////// | |
779 | //Name of CombiTrans Transformation of LadderSegment: | |
780 | ////////////////////////////////////////////////////// | |
781 | char laddersegmentcombitransname[40]; | |
782 | char laddersegmentrotname[40]; | |
783 | TGeoCombiTrans *laddersegmentlocalmatrix[fgkLadderSegmentCombiTransNumber]; | |
784 | for(Int_t i=0; i<fgkLadderSegmentCombiTransNumber; i++) { | |
785 | sprintf(laddersegmentcombitransname,"LadderSegmentCombiTrans%i",i); | |
786 | sprintf(laddersegmentrotname,"LadderSegmentRot%i",i); | |
787 | laddersegmentlocalmatrix[i] = | |
788 | new TGeoCombiTrans(laddersegmentcombitransname, | |
789 | kladdersegmenttransx[i], | |
790 | kladdersegmenttransy[i], | |
791 | kladdersegmenttransz[i], | |
792 | new TGeoRotation(laddersegmentrotname, | |
793 | kladdersegmentrotphi[i], | |
794 | kladdersegmentrottheta[i], | |
795 | kladdersegmentrotpsi[i])); | |
796 | fLadderSegmentCombiTransMatrix[i] = laddersegmentlocalmatrix[i]; | |
797 | } | |
798 | } | |
799 | ///////////////////////////////////////////////////////////////////////////////// | |
800 | void AliITSv11GeometrySSD::SetEndLadderSegmentCombiTransMatrix(Int_t i){ | |
801 | ///////////////////////////////////////////////////////////// | |
802 | // Method generating CombiTrans Matrix for SSD End Ladder Segment | |
803 | ///////////////////////////////////////////////////////////// | |
804 | //Translation Parameters EndLadderSegment: | |
805 | //////////////////////////////////////////////////////// | |
806 | const Double_t kendladdersegmenttransx[fgkEndLadderSegmentCombiTransNumber] = | |
807 | {0.0, | |
808 | 0.0, | |
809 | - 0.25*(fgkSSDMountingBlockLength[0] | |
810 | + fgkSSDMountingBlockLength[1]) | |
811 | + 0.5*fgkCarbonFiberTriangleLength, | |
812 | 0.0}; | |
813 | const Double_t kendladdersegmenttransy[fgkEndLadderSegmentCombiTransNumber] = | |
814 | {0.5*fgkEndLadderCarbonFiberLowerJunctionLength[i], | |
815 | i==0 ? 0. : fgkCarbonFiberLowerSupportWidth, | |
816 | fgkEndLadderMountingBlockPosition[i], | |
817 | (1-i)*(fgkEndLadderMountingBlockPosition[i] | |
818 | + 0.5*fgkSSDMountingBlockWidth)}; | |
819 | const Double_t kendladdersegmenttransz[fgkEndLadderSegmentCombiTransNumber] = | |
820 | {0.0, | |
821 | 0.0, | |
822 | - fgkSSDMountingBlockHeight[1] | |
823 | + 0.5*fgkSSDMountingBlockHeight[0], | |
824 | - 0.5*fgkCarbonFiberLowerSupportHeight}; | |
825 | //////////////////////////////////////////////////////// | |
826 | //Rotational Parameters EndLadderSegment: | |
827 | //////////////////////////////////////////////////////// | |
828 | const Double_t kendladdersegmentrotphi[fgkEndLadderSegmentCombiTransNumber] = | |
829 | { 0., 90., 0., 0.}; | |
830 | const Double_t kendladdersegmentrottheta[fgkEndLadderSegmentCombiTransNumber] = | |
831 | { 90.,-fgkCarbonFiberTriangleAngle, 0., 0.}; | |
832 | const Double_t kendladdersegmentrotpsi[fgkEndLadderSegmentCombiTransNumber] = | |
833 | { 0.,- 90., 0., 0.}; | |
834 | //////////////////////////////////////////////////////// | |
835 | //Name of CombiTrans Transformation of EndLadderSegment: | |
836 | //////////////////////////////////////////////////////// | |
837 | char endladdersegmentcombitransname[30]; | |
838 | char endladdersegmentrotname[30]; | |
839 | TGeoCombiTrans *endladdersegmentlocalmatrix[fgkEndLadderSegmentCombiTransNumber]; | |
840 | for(Int_t i=0; i<fgkEndLadderSegmentCombiTransNumber; i++){ | |
841 | sprintf(endladdersegmentcombitransname,"EndLadderSegmentCombiTrans%i",i); | |
842 | sprintf(endladdersegmentrotname,"EndLadderSegmentRot%i",i); | |
843 | endladdersegmentlocalmatrix[i] = | |
844 | new TGeoCombiTrans(endladdersegmentcombitransname, | |
845 | kendladdersegmenttransx[i], | |
846 | kendladdersegmenttransy[i], | |
847 | kendladdersegmenttransz[i], | |
848 | new TGeoRotation(endladdersegmentrotname, | |
849 | kendladdersegmentrotphi[i], | |
850 | kendladdersegmentrottheta[i], | |
851 | kendladdersegmentrotpsi[i])); | |
852 | fEndLadderSegmentCombiTransMatrix[i] = endladdersegmentlocalmatrix[i]; | |
853 | } | |
854 | } | |
855 | ///////////////////////////////////////////////////////////////////////////////// | |
856 | void AliITSv11GeometrySSD::SetLadderCableCombiTransMatrix(Int_t iLayer){ | |
857 | ///////////////////////////////////////////////////////////// | |
858 | // Method generating CombiTrans Matrix for SSD Ladder Cable | |
859 | ///////////////////////////////////////////////////////////// | |
860 | // Translation Parameters for LadderCable | |
861 | ///////////////////////////////////////// | |
862 | Double_t ssdflexradius = fgkSSDStiffenerHeight+2*fgkSSDFlexHeight[0] | |
863 | + fgkSSDFlexHeight[1]; | |
864 | Double_t ssdflexradiusmax = (fgkSSDFlexLength[3]-fgkSSDFlexLength[2]) | |
865 | / TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()); | |
866 | Double_t ssdladdercabletransx[3]; | |
867 | ssdladdercabletransx[0] = (ssdflexradiusmax-fgkSSDFlexHeight[1]-ssdflexradius) | |
868 | * TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad()) | |
869 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()); | |
870 | ssdladdercabletransx[1] = ((ssdflexradiusmax-fgkSSDFlexHeight[1]-ssdflexradius) | |
871 | - ssdladdercabletransx[0] | |
872 | / TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad())) | |
873 | * TMath::Cos(fgkSSDFlexAngle*TMath::DegToRad()); | |
874 | ssdladdercabletransx[2] = (fgkSSDFlexFullLength-2.*fgkSSDFlexAngle | |
875 | * TMath::DegToRad()*ssdflexradiusmax | |
876 | - fgkSSDFlexLength[2]-TMath::Pi() | |
877 | * fgkSSDStiffenerHeight-fgkSSDFlexLength[0] | |
878 | - fgkSSDLadderCableWidth) | |
879 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()); | |
880 | Double_t ssdladdercabletransz[3] = {ssdladdercabletransx[0] | |
881 | * TMath::Tan(2.*fgkSSDFlexAngle*TMath::DegToRad()), | |
882 | ssdladdercabletransx[1] | |
883 | * TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()), | |
884 | ssdladdercabletransx[2] | |
885 | * TMath::Tan(2.*fgkSSDFlexAngle*TMath::DegToRad())}; | |
886 | TGeoRotation* localladdercablerot[3]; | |
887 | localladdercablerot[0] = new TGeoRotation("LocalLadderCableRot0",90.,0.,0.); | |
888 | localladdercablerot[1] = new TGeoRotation("LocalLadderCableRot1",90.,60.,-90.); | |
889 | localladdercablerot[2] = new TGeoRotation("LocalLadderCableRot2"); | |
890 | localladdercablerot[2]->SetRotation((*localladdercablerot[1]) | |
891 | * (*localladdercablerot[0])); | |
892 | //////////////////////////////////////////// | |
893 | // LocalLadderCableCombiTransMatrix | |
894 | //////////////////////////////////////////// | |
895 | const Int_t klocalladdersidecablesnumber = 2; | |
896 | const Int_t klocalladdercombitransnumber = 5; | |
897 | TGeoCombiTrans** localladdercablecombitransmatrix[klocalladdersidecablesnumber]; | |
898 | for(Int_t i=0; i<klocalladdersidecablesnumber; i++) | |
899 | localladdercablecombitransmatrix[i] = | |
900 | new TGeoCombiTrans*[klocalladdercombitransnumber]; | |
901 | /////////////////////////////////////////// | |
902 | // Left Side Ladder Cables Transformations | |
903 | /////////////////////////////////////////// | |
904 | localladdercablecombitransmatrix[0][0] = | |
905 | new TGeoCombiTrans(-0.5*fgkCarbonFiberTriangleLength, | |
906 | 0.,0.,NULL); | |
907 | localladdercablecombitransmatrix[0][1] = fLadderSegmentCombiTransMatrix[1]; | |
908 | localladdercablecombitransmatrix[0][2] = | |
909 | new TGeoCombiTrans(fgkSSDModuleStiffenerPosition[0], | |
910 | fgkSSDModuleStiffenerPosition[1],0.,0); | |
911 | localladdercablecombitransmatrix[0][3] = fSSDModuleCombiTransMatrix[6]; | |
912 | localladdercablecombitransmatrix[0][4] = | |
913 | new TGeoCombiTrans(-ssdladdercabletransx[0] | |
914 | - ssdladdercabletransx[1]-ssdladdercabletransx[2] | |
915 | + fgkSSDFlexLength[0]-fgkSSDFlexLength[2], | |
916 | 0., | |
917 | 0.5*fgkSSDFlexHeight[0]+2.*(fgkSSDFlexHeight[0] | |
918 | + fgkSSDFlexHeight[1])+2.*fgkSSDStiffenerHeight | |
919 | + ssdladdercabletransz[0]-ssdladdercabletransz[1] | |
920 | + ssdladdercabletransz[2],localladdercablerot[2]); | |
921 | /////////////////////////////////////////// | |
922 | // Rigth Side Ladder Cables Transformations | |
923 | /////////////////////////////////////////// | |
924 | for(Int_t i=0; i<klocalladdercombitransnumber; i++) | |
925 | localladdercablecombitransmatrix[1][i] = | |
926 | (i!=3 ? localladdercablecombitransmatrix[0][i]: | |
927 | fSSDModuleCombiTransMatrix[3]); | |
928 | /////////////////////////////////////////// | |
929 | // Setting LadderCableCombiTransMatrix | |
930 | /////////////////////////////////////////// | |
931 | Int_t beamaxistrans[3] = {0,0,0}; | |
932 | switch(iLayer){ | |
933 | case 5: | |
934 | beamaxistrans[0] = fgkSSDLay5SensorsNumber/2; | |
935 | beamaxistrans[1] = beamaxistrans[0]+1; | |
936 | beamaxistrans[2] = beamaxistrans[0]-1; | |
937 | break; | |
938 | case 6: | |
939 | beamaxistrans[0] = (fgkSSDLay6SensorsNumber-1)/2; | |
940 | beamaxistrans[1] = beamaxistrans[0]+1; | |
941 | beamaxistrans[2] = beamaxistrans[0]; | |
942 | break; | |
943 | } | |
944 | TGeoHMatrix* localladdercablehmatrix[klocalladdersidecablesnumber]; | |
945 | TGeoRotation* laddercablerot; | |
946 | TGeoTranslation* laddercabletrans; | |
947 | for(Int_t i=0; i<klocalladdersidecablesnumber; i++){ | |
948 | localladdercablehmatrix[i] = new TGeoHMatrix(); | |
949 | for(Int_t j=0; j<klocalladdercombitransnumber; j++){ | |
950 | localladdercablehmatrix[i]->MultiplyLeft( | |
951 | localladdercablecombitransmatrix[i][klocalladdercombitransnumber-j-1]); | |
952 | } | |
953 | laddercablerot = new TGeoRotation(); | |
954 | laddercablerot->SetMatrix(localladdercablehmatrix[i]->GetRotationMatrix()); | |
955 | laddercabletrans = new TGeoTranslation(); | |
956 | Double_t* laddercabletransvector = localladdercablehmatrix[i]->GetTranslation(); | |
957 | laddercabletrans->SetTranslation(laddercabletransvector[0], | |
958 | laddercabletransvector[1] | |
959 | + (i==0 ? beamaxistrans[0] : 0.) | |
960 | * fgkCarbonFiberJunctionWidth, | |
961 | laddercabletransvector[2]); | |
962 | fLadderCableCombiTransMatrix[i] = new TGeoCombiTrans(*laddercabletrans, | |
963 | *laddercablerot); | |
964 | } | |
965 | fLadderCableCombiTransMatrix[2] = | |
966 | AddTranslationToCombiTrans(fLadderCableCombiTransMatrix[1],0., | |
967 | beamaxistrans[1]*fgkCarbonFiberJunctionWidth,0.); | |
968 | fLadderCableCombiTransMatrix[3] = | |
969 | AddTranslationToCombiTrans(fLadderCableCombiTransMatrix[0],0., | |
970 | beamaxistrans[2]*fgkCarbonFiberJunctionWidth,0.); | |
971 | } | |
972 | ///////////////////////////////////////////////////////////////////////////////// | |
973 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupportShape(Double_t length, | |
974 | Double_t height,Double_t width,Double_t* thickness){ | |
975 | ///////////////////////////////////////////////////////////// | |
976 | // Method generating SSD Sensor Support Shape | |
977 | ///////////////////////////////////////////////////////////// | |
978 | const Int_t kvertexnumber = 4; | |
979 | const Int_t kshapesnumber = 2; | |
980 | Double_t shapewidth[2] = {width,width}; | |
981 | TVector3** vertexposition[kshapesnumber]; | |
982 | for(Int_t i = 0; i<kshapesnumber; i++) vertexposition[i] = | |
983 | new TVector3*[kvertexnumber]; | |
984 | //First Shape Vertex Positioning | |
985 | vertexposition[0][0] = new TVector3(); | |
986 | vertexposition[0][1] = new TVector3(height); | |
987 | vertexposition[0][2] = new TVector3(thickness[0]); | |
988 | vertexposition[0][3] = new TVector3(*vertexposition[0][1]); | |
989 | //Second Shape Vertex Positioning | |
990 | vertexposition[1][0] = new TVector3(*vertexposition[0][0]); | |
991 | vertexposition[1][1] = new TVector3(length); | |
992 | vertexposition[1][2] = new TVector3(thickness[1]); | |
993 | vertexposition[1][3] = new TVector3(vertexposition[1][1]->X()); | |
994 | char* ssdsensorsupportshapename[kshapesnumber] = | |
995 | {"SSDSensorSupportShape1","SSDSensorSupportShape2"}; | |
996 | TGeoArb8* lSSDSensorSupportShape[kshapesnumber]; | |
997 | for(Int_t i = 0; i< kshapesnumber; i++) lSSDSensorSupportShape[i] = | |
998 | GetArbShape(vertexposition[i],shapewidth,i==0 ? | |
999 | thickness[1]: thickness[0], | |
1000 | ssdsensorsupportshapename[i]); | |
1001 | ///////////////////////////////////// | |
1002 | //Setting Translations and Rotations: | |
1003 | ///////////////////////////////////// | |
1004 | TGeoRotation* ssdsensorsupportshaperot[2]; | |
1005 | ssdsensorsupportshaperot[0] = | |
1006 | new TGeoRotation("SSDSensorSupportShapeRot1",180.,0.,0.); | |
1007 | ssdsensorsupportshaperot[1] = | |
1008 | new TGeoRotation("SSDSensorSupportShapeRot2",90.,90.,-90.); | |
1009 | TGeoTranslation* ssdsensorsupportshapetrans = | |
1010 | new TGeoTranslation("SSDSensorSupportShapeTrans",0.,0., | |
1011 | 0.5*thickness[0]); | |
1012 | TGeoCombiTrans* ssdsensorsupportcombitrans = | |
1013 | new TGeoCombiTrans("SSDSensorSupportCombiTrans",0.5*thickness[0],width,0., | |
1014 | new TGeoRotation((*ssdsensorsupportshaperot[1]) | |
1015 | * (*ssdsensorsupportshaperot[0]))); | |
1016 | TGeoVolume* ssdsensorsupportcompvolume = | |
1017 | new TGeoVolumeAssembly("SSDSensorSupportCompVolume"); | |
1018 | ssdsensorsupportcompvolume->AddNode(new TGeoVolume("SSDSensorSupportVolume1", | |
1019 | lSSDSensorSupportShape[0],fSSDSensorSupportMedium),1, | |
1020 | ssdsensorsupportshapetrans); | |
1021 | ssdsensorsupportcompvolume->AddNode(new TGeoVolume("SSDSensorSupportVolume2", | |
1022 | lSSDSensorSupportShape[1],fSSDSensorSupportMedium),1, | |
1023 | ssdsensorsupportcombitrans); | |
1024 | return ssdsensorsupportcompvolume; | |
1025 | } | |
1026 | ///////////////////////////////////////////////////////////////////////////////// | |
1027 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupport(Int_t VolumeKind, Int_t n){ | |
1028 | ///////////////////////////////////////////////////////////// | |
1029 | // Method generating SSD Sensor Support | |
1030 | ///////////////////////////////////////////////////////////// | |
1031 | TGeoVolume* ssdsensorsupport; | |
1032 | Double_t sidesupporthickness[2] = {fgkSSDSensorSideSupportThickness[0], | |
1033 | fgkSSDSensorSideSupportThickness[1]}; | |
1034 | VolumeKind == 0 ? ssdsensorsupport = GetSSDSensorSupportShape( | |
1035 | fgkSSDSensorSideSupportLength, | |
1036 | fgkSSDSensorSideSupportHeight[(n==0 ? 0 : 1)], | |
1037 | fgkSSDSensorSideSupportWidth, | |
1038 | sidesupporthickness) : | |
1039 | ssdsensorsupport = GetSSDSensorSupportShape(fgkSSDSensorCenterSupportLength, | |
1040 | fgkSSDSensorCenterSupportHeight[(n==0 ? 0 : 1)], | |
1041 | fgkSSDSensorCenterSupportWidth, | |
1042 | sidesupporthickness); | |
1043 | return ssdsensorsupport; | |
1044 | } | |
1045 | ///////////////////////////////////////////////////////////////////////////////// | |
1046 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupportAssembly(Int_t n){ | |
1047 | ///////////////////////////////////////////////////////////// | |
1048 | // Method generating SSD Sensor Support Assembly | |
1049 | ///////////////////////////////////////////////////////////// | |
1050 | TGeoVolume* ssdsensorsupportassembly = | |
1051 | new TGeoVolumeAssembly("SSDSensorSupportAssembly"); | |
1052 | const Int_t kvolumenumber = 2; | |
1053 | TGeoVolume* ssdsensorsupport[kvolumenumber]; | |
1054 | for(Int_t i=0; i<kvolumenumber; i++) ssdsensorsupport[i] = | |
1055 | GetSSDSensorSupport(i,n); | |
1056 | SetSSDSensorSupportCombiTransMatrix(); | |
1057 | for(Int_t i=0; i<fgkSSDSensorSupportCombiTransNumber; i++) | |
1058 | ssdsensorsupportassembly->AddNode((i<2 ? ssdsensorsupport[0]: | |
1059 | ssdsensorsupport[1]), | |
1060 | i+1,fSSDSensorSupportCombiTransMatrix[i]); | |
1061 | return ssdsensorsupportassembly; | |
1062 | } | |
1063 | ///////////////////////////////////////////////////////////////////////////////// | |
1064 | TGeoVolume* AliITSv11GeometrySSD::GetSSDModule(Int_t iChipCablesHeight){ | |
1065 | ///////////////////////////////////////////////////////////// | |
1066 | // Method generating SSD Sensor Module | |
1067 | ///////////////////////////////////////////////////////////// | |
1068 | TGeoVolume* ssdmodulevolume[fgkSSDModuleCombiTransNumber-1]; | |
1069 | ssdmodulevolume[0] = GetSSDStiffenerAssembly(); | |
1070 | ssdmodulevolume[1] = GetSSDChipAssembly(); | |
1071 | ssdmodulevolume[2] = GetSSDSensor(); | |
1072 | ssdmodulevolume[3] = GetSSDFlexAssembly(); | |
1073 | ssdmodulevolume[4] = GetSSDCoolingBlockAssembly(); | |
1074 | ssdmodulevolume[5] = GetSSDChipCablesAssembly(fgkSSDChipCablesHeight[iChipCablesHeight+2]); | |
1075 | SetSSDModuleCombiTransMatrix(fgkSSDChipCablesHeight[iChipCablesHeight+2]); | |
1076 | TGeoCombiTrans* ssdmoduleglobalcombitrans = | |
1077 | new TGeoCombiTrans("SSDModuleGlobalCombiTrans", | |
1078 | fgkSSDModuleStiffenerPosition[0], | |
1079 | fgkSSDModuleStiffenerPosition[1],0.,NULL); | |
1080 | TGeoHMatrix* ssdmodulehmatrix[fgkSSDModuleCombiTransNumber]; | |
1081 | TGeoVolume* ssdmodule = new TGeoVolumeAssembly("SSDModule"); | |
1082 | for(Int_t i=0; i<fgkSSDModuleCombiTransNumber; i++){ | |
1083 | ssdmodulehmatrix[i] = new TGeoHMatrix((*ssdmoduleglobalcombitrans) | |
1084 | * (*fSSDModuleCombiTransMatrix[i])); | |
1085 | ssdmodule->AddNode(i==fgkSSDModuleCombiTransNumber-1 ? ssdmodulevolume[3] : | |
1086 | ssdmodulevolume[i],i!=fgkSSDModuleCombiTransNumber-1?1:2, | |
1087 | ssdmodulehmatrix[i]); | |
1088 | } | |
1089 | return ssdmodule; | |
1090 | } | |
1091 | ///////////////////////////////////////////////////////////////////////////////// | |
1092 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensor(){ | |
1093 | ///////////////////////////////////////////////////////////// | |
1094 | // Method generating SSD Sensor | |
1095 | ///////////////////////////////////////////////////////////// | |
1096 | Double_t ssdsensitivelength = fgkSSDSensorLength-2.*fgkSSDSensorInsensitiveLength; | |
1097 | Double_t ssdsensitivewidth = fgkSSDSensorWidth-2.*fgkSSDSensorInsensitiveWidth; | |
1098 | TGeoBBox* ssdsensorsensitiveshape = new TGeoBBox("SSDSensorSensitiveShape", | |
1099 | 0.5*ssdsensitivelength, | |
1100 | 0.5*ssdsensitivewidth, | |
1101 | 0.5*fgkSSDSensorHeight); | |
1102 | TGeoVolume* ssdsensorsensitive = | |
1103 | new TGeoVolume(fgkSSDSensitiveVolName,ssdsensorsensitiveshape,fSSDSensorMedium); | |
1104 | ssdsensorsensitive->SetLineColor(fColorSilicon); | |
1105 | TGeoBBox* ssdsensorinsensitiveshape[2]; | |
1106 | ssdsensorinsensitiveshape[0] = new TGeoBBox("SSDSensorInsensitiveShape1", | |
1107 | 0.5*fgkSSDSensorLength, | |
1108 | 0.5*fgkSSDSensorInsensitiveWidth, | |
1109 | 0.5*fgkSSDSensorHeight); | |
1110 | ssdsensorinsensitiveshape[1] = new TGeoBBox("SSDSensorInsensitiveShape2", | |
1111 | 0.5*fgkSSDSensorInsensitiveWidth, | |
1112 | 0.5*ssdsensitivewidth, | |
1113 | 0.5*fgkSSDSensorHeight); | |
1114 | const char* ssdsensorinsensitivename[2] = {"SSDSensorInsensitive1", | |
1115 | "SSDSensorInsensitive2"}; | |
1116 | TGeoVolume* ssdsensorinsensitive[2]; | |
1117 | for(Int_t i=0; i<2; i++){ ssdsensorinsensitive[i] = | |
1118 | new TGeoVolume(ssdsensorinsensitivename[i],ssdsensorinsensitiveshape[i], | |
1119 | fSSDSensorMedium); | |
1120 | ssdsensorinsensitive[i]->SetLineColor(fColorCarbonFiber); | |
1121 | } | |
1122 | TGeoVolume* ssdsensorinsensitivevol = | |
1123 | new TGeoVolumeAssembly("SSDSensorInsensitiveVol"); | |
1124 | for(Int_t i=0; i<4; i++) | |
1125 | ssdsensorinsensitivevol->AddNode(i%2==0 ? ssdsensorinsensitive[0]: | |
1126 | ssdsensorinsensitive[1],i<2?1:2, | |
1127 | new TGeoTranslation(0.5*(1.-TMath::Power(-1.,i))*(i==1? 1.:-1.) | |
1128 | * (ssdsensorsensitiveshape->GetDX()+ssdsensorinsensitiveshape[1]->GetDX()), | |
1129 | 0.5*(1.+TMath::Power(-1.,i))*(i==0?-1.: 1.) | |
1130 | * (ssdsensorsensitiveshape->GetDY()+ssdsensorinsensitiveshape[0]->GetDY()),0.)); | |
1131 | TGeoVolume* ssdsensor = new TGeoVolumeAssembly("SSDSensor"); | |
1132 | ssdsensor->AddNode(ssdsensorsensitive,1),ssdsensor->AddNode(ssdsensorinsensitivevol,1); | |
1133 | return ssdsensor; | |
1134 | } | |
1135 | ///////////////////////////////////////////////////////////////////////////////// | |
1136 | TGeoVolume* AliITSv11GeometrySSD::GetSSDChipAssembly() const{ | |
1137 | ///////////////////////////////////////////////////////////// | |
1138 | // Method generating SSD Chip Assembly | |
1139 | ///////////////////////////////////////////////////////////// | |
1140 | const Int_t kssdchiprownumber = 2; | |
1141 | TGeoBBox* ssdchipcompshape[2]; | |
1142 | ssdchipcompshape[0] = new TGeoBBox("SSDChipCompShape", | |
1143 | 0.5*fgkSSDChipLength, | |
1144 | 0.5*fgkSSDChipWidth, | |
1145 | 0.5*(fgkSSDChipHeight-fgkSSDChipGlueHeight)); | |
1146 | ssdchipcompshape[1] = new TGeoBBox("SSDChipGlueCompShape", | |
1147 | 0.5*fgkSSDChipLength, | |
1148 | 0.5*fgkSSDChipWidth, | |
1149 | 0.5*fgkSSDChipGlueHeight); | |
1150 | TGeoVolume* ssdchipcomp[2]; | |
1151 | ssdchipcomp[0] = new TGeoVolume("SSDChipComp",ssdchipcompshape[0],fSSDChipMedium); | |
1152 | ssdchipcomp[1] = new TGeoVolume("SSDChipGlueComp",ssdchipcompshape[1], | |
1153 | fSSDChipGlueMedium); | |
1154 | ssdchipcomp[0]->SetLineColor(fColorSilicon); | |
1155 | ssdchipcomp[1]->SetLineColor(fColorEpoxy); | |
1156 | TGeoTranslation* ssdchipcomptrans[2]; | |
1157 | ssdchipcomptrans[0] = new TGeoTranslation(0.,0.,-ssdchipcompshape[1]->GetDZ()); | |
1158 | ssdchipcomptrans[1] = new TGeoTranslation(0.,0.,ssdchipcompshape[0]->GetDZ()); | |
1159 | TGeoVolume* ssdchip = new TGeoVolumeAssembly("SSDChip"); | |
1160 | for(Int_t i=0; i<2; i++) ssdchip->AddNode(ssdchipcomp[i],1,ssdchipcomptrans[i]); | |
1161 | Double_t ssdchipseparation[2] = {fgkSSDChipLength+fgkSSDChipSeparationLength, | |
1162 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] | |
1163 | - 2.*(fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist | |
1164 | - 0.5*fgkSSDChipWidth)}; | |
1165 | TGeoVolume* ssdchipassembly = new TGeoVolumeAssembly("SSDChipAssembly"); | |
1166 | for(Int_t i=0; i<kssdchiprownumber; i++) | |
1167 | for(Int_t j=0; j<fgkSSDChipNumber; j++) | |
1168 | ssdchipassembly->AddNode(ssdchip,fgkSSDChipNumber*i+j+1, | |
1169 | new TGeoTranslation(j*ssdchipseparation[0],i*ssdchipseparation[1],0.)); | |
1170 | return ssdchipassembly; | |
1171 | } | |
1172 | ///////////////////////////////////////////////////////////////////////////////// | |
1173 | TGeoVolume* AliITSv11GeometrySSD::GetSSDStiffenerAssembly(){ | |
1174 | ///////////////////////////////////////////////////////////// | |
1175 | // Method generating SSD Stiffener Assembly | |
1176 | ///////////////////////////////////////////////////////////// | |
1177 | const Int_t kssdstiffenernumber = 2; | |
1178 | Double_t ssdstiffenerseparation = fgkSSDSensorLength | |
1179 | - 2.*fgkSSDModuleStiffenerPosition[1] | |
1180 | - fgkSSDStiffenerWidth; | |
1181 | TGeoVolume* ssdstiffener = new TGeoVolumeAssembly("SSDStiffener"); | |
1182 | //////////////////////////// | |
1183 | // Stiffener Volumes | |
1184 | /////////////////////////// | |
1185 | const Int_t kstiffenerboxnumber = 6; | |
1186 | TGeoBBox* ssdstiffenerboxshapes[kstiffenerboxnumber]; | |
1187 | ssdstiffenerboxshapes[0] = new TGeoBBox("SSDStiffenerBoxShape1", | |
1188 | 0.5* fgkSSDStiffenerLength, | |
1189 | 0.5* fgkSSDStiffenerWidth, | |
1190 | 0.5*(fgkSSDStiffenerHeight | |
1191 | - fgkSSDConnectorHeight)); | |
1192 | ssdstiffenerboxshapes[1] = new TGeoBBox("SSDStiffenerBoxShape2", | |
1193 | 0.5*(fgkSSDConnectorPosition[0] | |
1194 | - 2.0* fgkSSDConnectorLength | |
1195 | - fgkSSDConnectorSeparation), | |
1196 | 0.5* fgkSSDStiffenerWidth, | |
1197 | 0.5* fgkSSDConnectorHeight); | |
1198 | ssdstiffenerboxshapes[2] = new TGeoBBox("SSDStiffenerBoxShape3", | |
1199 | 0.5*(fgkSSDConnectorSeparation | |
1200 | + 2.* fgkSSDConnectorLength), | |
1201 | 0.5* fgkSSDConnectorPosition[1], | |
1202 | 0.5* fgkSSDConnectorHeight); | |
1203 | ssdstiffenerboxshapes[3] = new TGeoBBox("SSDStiffenerBoxShape4", | |
1204 | ssdstiffenerboxshapes[2]->GetDX(), | |
1205 | 0.5*(fgkSSDStiffenerWidth | |
1206 | - fgkSSDConnectorPosition[1] | |
1207 | - fgkSSDConnectorWidth), | |
1208 | 0.5* fgkSSDConnectorHeight); | |
1209 | ssdstiffenerboxshapes[4] = new TGeoBBox("SSDStiffenerBoxShape5", | |
1210 | 0.5* fgkSSDConnectorSeparation, | |
1211 | 0.5* fgkSSDConnectorWidth, | |
1212 | 0.5* fgkSSDConnectorHeight); | |
1213 | ssdstiffenerboxshapes[5] = new TGeoBBox("SSDStiffenerBoxShape6", | |
1214 | 0.5*(fgkSSDStiffenerLength | |
1215 | - fgkSSDConnectorPosition[0]), | |
1216 | 0.5* fgkSSDStiffenerWidth, | |
1217 | 0.5* fgkSSDConnectorHeight); | |
1218 | TGeoVolume* ssdstiffenerbox[kstiffenerboxnumber]; | |
1219 | char ssdtiffenerboxname[30]; | |
1220 | for(Int_t i=0; i<kstiffenerboxnumber; i++){ | |
1221 | sprintf(ssdtiffenerboxname,"SSDStiffenerBox%i",i+1); | |
1222 | ssdstiffenerbox[i] = new TGeoVolume(ssdtiffenerboxname,ssdstiffenerboxshapes[i], | |
1223 | fSSDStiffenerMedium); | |
1224 | ssdstiffenerbox[i]->SetLineColor(fColorStiffener); | |
1225 | } | |
1226 | //////////////////////////// | |
1227 | // Connector | |
1228 | /////////////////////////// | |
1229 | TGeoBBox* ssdconnectorshape = new TGeoBBox("SSDConnectorShape", | |
1230 | 0.5*fgkSSDConnectorLength, | |
1231 | 0.5*fgkSSDConnectorWidth, | |
1232 | 0.5*fgkSSDConnectorHeight); | |
1233 | TGeoVolume* ssdconnector = new TGeoVolume("SSDConnector",ssdconnectorshape, | |
1234 | fSSDStiffenerConnectorMedium); | |
1235 | ssdconnector->SetLineColor(fColorAl); | |
1236 | const Int_t kssdconnectornumber = 2; | |
1237 | TGeoTranslation* ssdconnectortrans[kssdconnectornumber]; | |
1238 | ssdconnectortrans[0] = new TGeoTranslation("SSDConnectorTrans1", | |
1239 | - ssdstiffenerboxshapes[0]->GetDX()+fgkSSDConnectorPosition[0] | |
1240 | - fgkSSDConnectorSeparation-1.5*fgkSSDConnectorLength, | |
1241 | ssdstiffenerboxshapes[0]->GetDY()-fgkSSDConnectorPosition[1] | |
1242 | - ssdconnectorshape->GetDY(), | |
1243 | ssdstiffenerboxshapes[0]->GetDZ()+ssdconnectorshape->GetDZ()); | |
1244 | ssdconnectortrans[1] = new TGeoTranslation("SSDConnectorTrans2", | |
1245 | - ssdstiffenerboxshapes[0]->GetDX()+fgkSSDConnectorPosition[0] | |
1246 | - 0.5*fgkSSDConnectorLength, | |
1247 | ssdstiffenerboxshapes[0]->GetDY()-fgkSSDConnectorPosition[1] | |
1248 | - ssdconnectorshape->GetDY(), | |
1249 | ssdstiffenerboxshapes[0]->GetDZ()+ssdconnectorshape->GetDZ()); | |
1250 | for(Int_t i=0; i<kssdconnectornumber; i++) | |
1251 | ssdstiffener->AddNode(ssdconnector,i+1,ssdconnectortrans[i]); | |
1252 | ////////////////////////////////////// | |
1253 | // TGeoTranslation for Stiffener Boxes | |
1254 | ////////////////////////////////////// | |
1255 | TGeoTranslation* ssdstiffenerboxtrans[kstiffenerboxnumber]; | |
1256 | ssdstiffenerboxtrans[0] = new TGeoTranslation("SSDStiffenerBoxTrans1",0.,0.,0.); | |
1257 | ssdstiffenerboxtrans[1] = new TGeoTranslation("SSDStiffenerBoxTrans2", | |
1258 | - (ssdstiffenerboxshapes[0]->GetDX()-ssdstiffenerboxshapes[1]->GetDX()), | |
1259 | 0., | |
1260 | ssdstiffenerboxshapes[0]->GetDZ()+ssdstiffenerboxshapes[1]->GetDZ()); | |
1261 | ssdstiffenerboxtrans[2] = new TGeoTranslation("SSDStiffenerBoxTrans3", | |
1262 | - ssdstiffenerboxshapes[0]->GetDX()-ssdstiffenerboxshapes[2]->GetDX() | |
1263 | + fgkSSDConnectorPosition[0], | |
1264 | ssdstiffenerboxshapes[0]->GetDY()-ssdstiffenerboxshapes[2]->GetDY(), | |
1265 | ssdstiffenerboxshapes[0]->GetDZ()+ssdstiffenerboxshapes[2]->GetDZ()); | |
1266 | ssdstiffenerboxtrans[3] = new TGeoTranslation("SSDStiffenerBoxTrans4", | |
1267 | - ssdstiffenerboxshapes[0]->GetDX()-ssdstiffenerboxshapes[3]->GetDX() | |
1268 | + fgkSSDConnectorPosition[0], | |
1269 | - ssdstiffenerboxshapes[0]->GetDY()+ssdstiffenerboxshapes[3]->GetDY(), | |
1270 | ssdstiffenerboxshapes[0]->GetDZ()+ssdstiffenerboxshapes[3]->GetDZ()); | |
1271 | ssdstiffenerboxtrans[4] = new TGeoTranslation("SSDStiffenerBoxTrans5", | |
1272 | - ssdstiffenerboxshapes[0]->GetDX()+fgkSSDConnectorPosition[0] | |
1273 | - 0.5*fgkSSDConnectorSeparation-2.*ssdconnectorshape->GetDX(), | |
1274 | ssdstiffenerboxshapes[0]->GetDY()-fgkSSDConnectorPosition[1] | |
1275 | - ssdconnectorshape->GetDY(), | |
1276 | ssdstiffenerboxshapes[0]->GetDZ()+ssdconnectorshape->GetDZ()); | |
1277 | ssdstiffenerboxtrans[5] = new TGeoTranslation("SSDStiffenerBoxTrans6", | |
1278 | - ssdstiffenerboxshapes[0]->GetDX()+fgkSSDConnectorPosition[0] | |
1279 | + ssdstiffenerboxshapes[5]->GetDX(), | |
1280 | 0., | |
1281 | ssdstiffenerboxshapes[0]->GetDZ()+ssdstiffenerboxshapes[5]->GetDZ()); | |
1282 | for(Int_t i=0; i<kstiffenerboxnumber; i++) | |
1283 | ssdstiffener->AddNode(ssdstiffenerbox[i],1,ssdstiffenerboxtrans[i]); | |
1284 | TGeoCombiTrans* ssdstiffenercombitrans[kssdstiffenernumber]; | |
1285 | char ssdstiffenercombitransname[30]; | |
1286 | for(Int_t i=0; i<kssdstiffenernumber; i++){ | |
1287 | sprintf(ssdstiffenercombitransname,"SSDStiffenerCombiTrans%i",i+1); | |
1288 | ssdstiffenercombitrans[i] = new TGeoCombiTrans(ssdstiffenercombitransname, | |
1289 | 0.,i*ssdstiffenerseparation,0.,new TGeoRotation("",180*(1-i),0.,0.)); | |
1290 | } | |
1291 | //////////////////////////// | |
1292 | // Capacitor 0603-2200 nF | |
1293 | /////////////////////////// | |
1294 | const Int_t knapacitor0603number = 5; | |
1295 | TGeoBBox* capacitor0603shape = new TGeoBBox("Capacitor0603Shape", | |
1296 | 0.5*fgkSSDCapacitor0603Length, | |
1297 | 0.5*fgkSSDCapacitor0603Width, | |
1298 | 0.5*fgkSSDCapacitor0603Height); | |
1299 | TGeoVolume* capacitor0603 = new TGeoVolume("Capacitor0603",capacitor0603shape, | |
1300 | fSSDStiffener0603CapacitorMedium); | |
1301 | capacitor0603->SetLineColor(fColorAl); | |
1302 | //////////////////////////// | |
1303 | // Capacitor 1812-330 nF | |
1304 | /////////////////////////// | |
1305 | TGeoBBox* capacitor1812shape = new TGeoBBox("Capacitor1812Shape", | |
1306 | 0.5*fgkSSDCapacitor1812Length, | |
1307 | 0.5*fgkSSDCapacitor1812Width, | |
1308 | 0.5*fgkSSDCapacitor1812Height); | |
1309 | TGeoVolume* capacitor1812 = new TGeoVolume("Capacitor1812",capacitor1812shape, | |
1310 | fSSDStiffener1812CapacitorMedium); | |
1311 | capacitor1812->SetLineColor(fColorAl); | |
1312 | TGeoTranslation* capacitor1812trans = new TGeoTranslation("Capacitor1812Trans", | |
1313 | 0., | |
1314 | 0.5*fgkSSDStiffenerWidth+ssdstiffenerseparation | |
1315 | - capacitor1812shape->GetDY()-fgkSSDConnectorPosition[1], | |
1316 | ssdstiffenerboxshapes[0]->GetDZ()+fgkSSDConnectorHeight | |
1317 | + 0.5*fgkSSDCapacitor1812Height); | |
1318 | //////////////////////////// | |
1319 | //Hybrid Wire | |
1320 | //////////////////////////// | |
1321 | Double_t wirex = 2.*(fgkSSDConnectorPosition[0]-0.5*fgkSSDStiffenerLength | |
1322 | - 0.5*fgkSSDConnectorLength)-fgkSSDConnectorLength | |
1323 | - fgkSSDConnectorSeparation; | |
1324 | Double_t wirey = ssdstiffenerseparation+fgkSSDStiffenerWidth | |
1325 | - 2.*fgkSSDConnectorPosition[1]-fgkSSDConnectorWidth; | |
1326 | Double_t ssdwireradius = TMath::Sqrt(TMath::Power(wirex,2.) | |
1327 | + TMath::Power(wirey,2)); | |
1328 | Double_t wireangle = TMath::ATan(wirex/wirey); | |
1329 | TGeoTube *hybridwireshape = new TGeoTube("HybridWireShape", 0., | |
1330 | fgkSSDWireRadius, 0.5*ssdwireradius); | |
1331 | TGeoVolume* hybridwire = new TGeoVolume("HybridWire",hybridwireshape, | |
1332 | fSSDStiffenerHybridWireMedium); | |
1333 | hybridwire->SetLineColor(fColorPhynox); | |
1334 | TGeoCombiTrans* hybridwirecombitrans[2]; | |
1335 | hybridwirecombitrans[0] = new TGeoCombiTrans("HybridWireCombiTrans1", | |
1336 | 0.5*fgkSSDStiffenerLength-fgkSSDConnectorPosition[0] | |
1337 | + 1.5*fgkSSDConnectorLength+fgkSSDConnectorSeparation, | |
1338 | 0.5*ssdwireradius-0.5*fgkSSDStiffenerWidth | |
1339 | + fgkSSDConnectorPosition[1]+0.5*fgkSSDConnectorWidth, | |
1340 | ssdstiffenerboxshapes[0]->GetDZ()+fgkSSDConnectorHeight | |
1341 | + fgkSSDWireRadius, | |
1342 | new TGeoRotation("HybridWireRot1",0.,90.,0.)); | |
1343 | hybridwirecombitrans[1] = new TGeoCombiTrans("HybridWireCombiTrans2", | |
1344 | 0., | |
1345 | - 0.5*fgkSSDConnectorWidth+fgkSSDWireRadius, | |
1346 | 0., | |
1347 | new TGeoRotation("HybridWireRot2", | |
1348 | - wireangle*TMath::RadToDeg(),0.,0.)); | |
1349 | TGeoHMatrix* hybridwirematrix = new TGeoHMatrix(); | |
1350 | hybridwirematrix->MultiplyLeft(hybridwirecombitrans[0]); | |
1351 | hybridwirematrix->MultiplyLeft(hybridwirecombitrans[1]); | |
1352 | //////////////////////////// | |
1353 | // Stiffener Assembly | |
1354 | /////////////////////////// | |
1355 | TGeoVolume* ssdstiffenerassembly = | |
1356 | new TGeoVolumeAssembly("SSDStiffenerAssembly"); | |
1357 | ssdstiffenerassembly->AddNode(hybridwire,1,hybridwirematrix); | |
1358 | for(Int_t i=0; i<kssdstiffenernumber; i++) { | |
1359 | ssdstiffenerassembly->AddNode(ssdstiffener,i+1,ssdstiffenercombitrans[i]); | |
1360 | for(Int_t j=1; j<knapacitor0603number+1; j++){ | |
1361 | ssdstiffenerassembly->AddNode(capacitor0603,knapacitor0603number*i+j,new TGeoTranslation("",(j-3. | |
1362 | )/6*fgkSSDStiffenerLength, | |
1363 | i*ssdstiffenerseparation+ | |
1364 | 0.5*((i==0? 1:-1)*fgkSSDStiffenerWidth | |
1365 | +(i==0? -1:+1)*fgkSSDCapacitor0603Width), | |
1366 | -0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor0603Height))); | |
1367 | } | |
1368 | if(i==1) ssdstiffenerassembly->AddNode(capacitor1812,1,capacitor1812trans); | |
1369 | } | |
1370 | return ssdstiffenerassembly; | |
1371 | } | |
1372 | ///////////////////////////////////////////////////////////////////////////////// | |
1373 | TGeoVolume* AliITSv11GeometrySSD::GetSSDChipCables(Double_t SSDChipCablesHeigth, | |
1374 | char* side){ | |
1375 | ///////////////////////////////////////////////////////////// | |
1376 | // Method generating SSD Chip Cables | |
1377 | ///////////////////////////////////////////////////////////// | |
1378 | const Int_t kssdchipcableslaynumber = 2; | |
1379 | Int_t ssdchipcablescolor[2] = {fColorAl,fColorPolyhamide}; | |
1380 | Double_t ssdchipcablesradius[2]; | |
1381 | ssdchipcablesradius[0] = 0.25*(SSDChipCablesHeigth | |
1382 | - fgkSSDChipCablesHeight[0] | |
1383 | - fgkSSDChipCablesHeight[1]); | |
1384 | ssdchipcablesradius[1] = ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0]; | |
1385 | Double_t ssdchipcablespiecelength = 0.5*(fgkSSDChipCablesWidth[0] | |
1386 | - 2.*TMath::Pi()*ssdchipcablesradius[0] | |
1387 | - ssdchipcablesradius[0] | |
1388 | - fgkSSDChipCablesWidth[1] | |
1389 | - fgkSSDChipCablesWidth[2] | |
1390 | - (side=="Right" ? 0 : | |
1391 | fgkSSDModuleStiffenerPosition[1] | |
1392 | + TMath::Pi()*(0.5*fgkSSDSensorHeight | |
1393 | + fgkSSDChipCablesHeight[0] | |
1394 | + fgkSSDChipCablesHeight[1]))); | |
1395 | ////////////////////////// | |
1396 | //Box and Tube Seg Shapes | |
1397 | ////////////////////////// | |
1398 | char* ssdchipcablesboxshapename[2*kssdchipcableslaynumber] = | |
1399 | {"SSDChipCablesBoxLay0Shape0","SSDChipCablesBoxLay0Shape1", | |
1400 | "SSDChipCablesBoxLay1Shape0","SSDChipCablesBoxLay1Shape1"}; | |
1401 | char* ssdchipcablestubesegshapename[2*kssdchipcableslaynumber] = | |
1402 | {"SSDChipCablesTubeSegLay0Shape0","SSDChipCablesTubeSegLay0Shape1", | |
1403 | "SSDChipCablesTubeSegLay1Shape0","SSDChipCablesTubeSegLay1Shape1"}; | |
1404 | TGeoBBox** ssdchipcablesboxshape[kssdchipcableslaynumber]; | |
1405 | TGeoTubeSeg** ssdchipcablestubesegshape[kssdchipcableslaynumber]; | |
1406 | for(Int_t i=0; i<kssdchipcableslaynumber; i++){ | |
1407 | ssdchipcablesboxshape[i] = new TGeoBBox*[2]; | |
1408 | ssdchipcablestubesegshape[i] = new TGeoTubeSeg*[2+(side=="Right" ? 0 : 1)]; | |
1409 | ssdchipcablesboxshape[i][0] = new TGeoBBox(ssdchipcablesboxshapename[2*i], | |
1410 | 0.5*ssdchipcablespiecelength, | |
1411 | 0.5*fgkSSDChipCablesLength[1], | |
1412 | 0.5*fgkSSDChipCablesHeight[i]); | |
1413 | ssdchipcablesboxshape[i][1] = new TGeoBBox(ssdchipcablesboxshapename[2*i+1], | |
1414 | 0.5*(ssdchipcablespiecelength+ssdchipcablesradius[0] | |
1415 | + (side=="Right" ? 0. : fgkSSDModuleStiffenerPosition[1])), | |
1416 | 0.5*fgkSSDChipCablesLength[1],0.5*fgkSSDChipCablesHeight[i]); | |
1417 | ssdchipcablestubesegshape[i][0] = | |
1418 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i], | |
1419 | ssdchipcablesradius[1]-i*fgkSSDChipCablesHeight[1], | |
1420 | ssdchipcablesradius[i],0.5*fgkSSDChipCablesLength[1], | |
1421 | 0.,180.); | |
1422 | ssdchipcablestubesegshape[i][1] = | |
1423 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i+1], | |
1424 | ssdchipcablesradius[0]+i*fgkSSDChipCablesHeight[0], | |
1425 | ssdchipcablesradius[0]+fgkSSDChipCablesHeight[0] | |
1426 | + i*fgkSSDChipCablesHeight[1], | |
1427 | 0.5*fgkSSDChipCablesLength[1],0.,180.); | |
1428 | if(side!="Right") ssdchipcablestubesegshape[i][2] = | |
1429 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i], | |
1430 | 0.5*fgkSSDSensorHeight+(1-i)*fgkSSDChipCablesHeight[1], | |
1431 | 0.5*fgkSSDSensorHeight+(1-i)*fgkSSDChipCablesHeight[0] | |
1432 | + fgkSSDChipCablesHeight[1], | |
1433 | 0.5*fgkSSDChipCablesLength[1],0.,180.); | |
1434 | } | |
1435 | ////////////////////////// | |
1436 | //Box under Chip | |
1437 | ////////////////////////// | |
1438 | char ssdunderchipcablesboxshapename[30]; | |
1439 | char ssdunderchipcablesboxname[30]; | |
1440 | char ssdunderchipcablesboxtransname[30]; | |
1441 | TGeoBBox* ssdunderchipcablesboxshape[kssdchipcableslaynumber]; | |
1442 | TGeoVolume* ssdunderchipcablesbox[kssdchipcableslaynumber]; | |
1443 | TGeoTranslation* ssdunderchipcablesboxtrans[kssdchipcableslaynumber]; | |
1444 | for(Int_t i=0; i<kssdchipcableslaynumber; i++){ | |
1445 | sprintf(ssdunderchipcablesboxshapename,"SSDUnderChipCablesBoxShape%i",i+1); | |
1446 | sprintf(ssdunderchipcablesboxname,"SSDUnderChipCablesBox%i",i+1); | |
1447 | sprintf(ssdunderchipcablesboxtransname,"SSDUnderChipCablesBoxTrans%i",i+1); | |
1448 | ssdunderchipcablesboxshape[i] = | |
1449 | new TGeoBBox(ssdunderchipcablesboxshapename, | |
1450 | 0.5*fgkSSDChipWidth, | |
1451 | 0.5*fgkSSDChipCablesLength[1], | |
1452 | 0.5*fgkSSDChipCablesHeight[i]); | |
1453 | ssdunderchipcablesbox[i] = new TGeoVolume(ssdunderchipcablesboxname, | |
1454 | ssdunderchipcablesboxshape[i], | |
1455 | (i==0?fSSDAlTraceChipCableMedium:fSSDKaptonChipCableMedium)); | |
1456 | ssdunderchipcablesbox[i]->SetLineColor(ssdchipcablescolor[i]); | |
1457 | ssdunderchipcablesboxtrans[i] = | |
1458 | new TGeoTranslation(ssdunderchipcablesboxtransname, | |
1459 | (side=="Right"?-1.:1.)*0.5*fgkSSDChipWidth, | |
1460 | 0.5*(fgkSSDChipCablesLength[0]-fgkSSDChipCablesLength[1]) | |
1461 | +0.5*fgkSSDChipCablesLength[1], | |
1462 | (i==0?1.:-1.)*0.5*fgkSSDChipCablesHeight[1-i]); | |
1463 | } | |
1464 | ////////////////// | |
1465 | //Trapezoid Shapes | |
1466 | ////////////////// | |
1467 | const Int_t kssdchipcablesvertexnumber = 2; | |
1468 | const Int_t kssdchipcablestrapezoidnumber = 2; | |
1469 | TVector3** ssdchipcablestrapezoidvertex[kssdchipcablesvertexnumber]; | |
1470 | for(Int_t i = 0; i< kssdchipcablestrapezoidnumber; i++) | |
1471 | ssdchipcablestrapezoidvertex[i] = new TVector3*[kssdchipcablesvertexnumber]; | |
1472 | //First Shape Vertex Positioning | |
1473 | ssdchipcablestrapezoidvertex[0][0] = new TVector3(); | |
1474 | ssdchipcablestrapezoidvertex[0][1] = | |
1475 | new TVector3(0.5*(fgkSSDChipCablesLength[0]-fgkSSDChipCablesLength[1])); | |
1476 | //Second Shape Vertex Positioning | |
1477 | ssdchipcablestrapezoidvertex[1][0] = | |
1478 | new TVector3(*ssdchipcablestrapezoidvertex[0][0]); | |
1479 | ssdchipcablestrapezoidvertex[1][1] = | |
1480 | new TVector3(*ssdchipcablestrapezoidvertex[0][1]); | |
1481 | //Setting the names of shapes and volumes | |
1482 | char* ssdchipcablestrapezoidboxshapename[kssdchipcablestrapezoidnumber] = | |
1483 | {"SSDChipCablesTrapezoidBoxShape1","SSDChipCablesTrapezoidBoxShape2"}; | |
1484 | char* ssdchipcablestrapezoidshapename[kssdchipcablestrapezoidnumber] = | |
1485 | {"SSDChipCablesTrapezoidShape1","SSDChipCablesTrapezoidShape2"}; | |
1486 | char* ssdchipcablestrapezoidboxname[kssdchipcablestrapezoidnumber] = | |
1487 | {"SSDChipCablesTrapezoidBox1","SSDChipCablesTrapezoidBox2"}; | |
1488 | char* ssdhipcablestrapezoidname[kssdchipcablestrapezoidnumber] = | |
1489 | {"SSDChipCablesTrapezoid1","SSDChipCablesTrapezoid2"}; | |
1490 | char* ssdchipcablestrapezoidassemblyname[kssdchipcablestrapezoidnumber] = | |
1491 | {"SSDChipCablesTrapezoidAssembly1","SSDChipCablesTrapezoidAssembly2"}; | |
1492 | //Setting the Shapes | |
1493 | TGeoBBox* ssdchipcablestrapezoidboxshape[kssdchipcablestrapezoidnumber]; | |
1494 | TGeoArb8* ssdchipcablestrapezoidshape[kssdchipcablestrapezoidnumber]; | |
1495 | //Setting the Volumes | |
1496 | TGeoVolume* ssdchipcablestrapezoidbox[kssdchipcablestrapezoidnumber]; | |
1497 | TGeoVolume* ssdchipcablestrapezoid[kssdchipcablestrapezoidnumber]; | |
1498 | TGeoVolume* ssdchipcablestrapezoidassembly[kssdchipcablestrapezoidnumber]; | |
1499 | Double_t ssdchipcablestrapezoidwidth[kssdchipcablesvertexnumber] = | |
1500 | {fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2],fgkSSDChipCablesWidth[1]}; | |
1501 | for(Int_t i=0; i<kssdchipcablestrapezoidnumber; i++){ | |
1502 | ssdchipcablestrapezoidboxshape[i] = | |
1503 | new TGeoBBox(ssdchipcablestrapezoidboxshapename[i], | |
1504 | 0.5*fgkSSDChipCablesLength[1], | |
1505 | 0.5*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]), | |
1506 | 0.5*fgkSSDChipCablesHeight[i]); | |
1507 | ssdchipcablestrapezoidshape[i] = | |
1508 | GetTrapezoidShape(ssdchipcablestrapezoidvertex[i], | |
1509 | ssdchipcablestrapezoidwidth, | |
1510 | fgkSSDChipCablesHeight[i], | |
1511 | ssdchipcablestrapezoidshapename[i]); | |
1512 | ssdchipcablestrapezoidbox[i] = | |
1513 | new TGeoVolume(ssdchipcablestrapezoidboxname[i], | |
1514 | ssdchipcablestrapezoidboxshape[i], | |
1515 | (i==0?fSSDAlTraceChipCableMedium:fSSDKaptonChipCableMedium)); | |
1516 | ssdchipcablestrapezoid[i] = new TGeoVolume(ssdhipcablestrapezoidname[i], | |
1517 | ssdchipcablestrapezoidshape[i], | |
1518 | (i==0?fSSDAlTraceChipCableMedium:fSSDKaptonChipCableMedium)); | |
1519 | ssdchipcablestrapezoidbox[i]->SetLineColor(ssdchipcablescolor[i]); | |
1520 | ssdchipcablestrapezoid[i]->SetLineColor(ssdchipcablescolor[i]); | |
1521 | ssdchipcablestrapezoidassembly[i] = | |
1522 | new TGeoVolumeAssembly(ssdchipcablestrapezoidassemblyname[i]); | |
1523 | ssdchipcablestrapezoidassembly[i]->AddNode(ssdchipcablestrapezoidbox[i],1, | |
1524 | new TGeoTranslation(0.5*fgkSSDChipCablesLength[1], | |
1525 | 0.5*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]),0.)); | |
1526 | ssdchipcablestrapezoidassembly[i]->AddNode(ssdchipcablestrapezoid[i],0, | |
1527 | new TGeoCombiTrans(0.,0.,0.,new TGeoRotation("",90.,180.,-90.))); | |
1528 | ssdchipcablestrapezoidassembly[i]->AddNode(ssdchipcablestrapezoid[i],1, | |
1529 | new TGeoTranslation(fgkSSDChipCablesLength[1],0.,0.)); | |
1530 | } | |
1531 | ///////////////////////////// | |
1532 | //Box and Tube Seg CombiTrans | |
1533 | ///////////////////////////// | |
1534 | TGeoTranslation* ssdchipcablesboxtrans[2*kssdchipcableslaynumber]; | |
1535 | ssdchipcablesboxtrans[0] = | |
1536 | new TGeoTranslation("SSDChipCablesLay1Box1Trans",0.,0.,0.); | |
1537 | ssdchipcablesboxtrans[1] = | |
1538 | new TGeoTranslation("SSDChipCablesLay1Box2Trans", | |
1539 | ssdchipcablesboxshape[0][1]->GetDX() | |
1540 | - 0.5*ssdchipcablespiecelength, | |
1541 | 0.0, | |
1542 | - 2.*ssdchipcablesradius[0] | |
1543 | - fgkSSDChipCablesHeight[0]); | |
1544 | ssdchipcablesboxtrans[2] = new TGeoTranslation("SSDChipCablesLay2Box1Trans", | |
1545 | 0.0, | |
1546 | 0.0, | |
1547 | 0.5*(fgkSSDChipCablesHeight[0] | |
1548 | + fgkSSDChipCablesHeight[1])); | |
1549 | ssdchipcablesboxtrans[3] = | |
1550 | new TGeoTranslation("SSDChipCablesLay2Box2Trans", | |
1551 | ssdchipcablesboxshape[1][1]->GetDX() | |
1552 | - 0.5*ssdchipcablespiecelength, | |
1553 | 0.0, | |
1554 | - 2.*ssdchipcablesradius[0] | |
1555 | - 0.5*fgkSSDChipCablesHeight[1] | |
1556 | - 1.5*fgkSSDChipCablesHeight[0]); | |
1557 | TGeoRotation* ssdchipcablesrot[3]; | |
1558 | ssdchipcablesrot[0] = new TGeoRotation("SSDChipCablesRot1",0.,90.,0.); | |
1559 | ssdchipcablesrot[1] = new TGeoRotation("SSDChipCablesRot2",90.,90.,-90.); | |
1560 | ssdchipcablesrot[2] = new TGeoRotation("SSDChipCablesRot3",90.,-90.,-90.); | |
1561 | TGeoCombiTrans* ssdchipcablestubesegcombitrans[2*(kssdchipcableslaynumber+1)]; | |
1562 | // TGeoCombiTrans* SSDChipCablesTubeSegCombiTrans[2*(SSDChipCablesLayNumber+ | |
1563 | // (side=="Right" ? 0 : 1))]; | |
1564 | ssdchipcablestubesegcombitrans[0] = | |
1565 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg1CombiTrans", | |
1566 | 0.5*ssdchipcablespiecelength, | |
1567 | 0.0, | |
1568 | ssdchipcablesradius[0] | |
1569 | - 0.5*fgkSSDChipCablesHeight[0], | |
1570 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); | |
1571 | ssdchipcablestubesegcombitrans[1] = | |
1572 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg2CombiTrans", | |
1573 | - 0.5*ssdchipcablespiecelength, | |
1574 | 0.0, | |
1575 | - ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0], | |
1576 | new TGeoRotation((*ssdchipcablesrot[2])*(*ssdchipcablesrot[0]))); | |
1577 | ssdchipcablestubesegcombitrans[2] = | |
1578 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg1CombiTrans", | |
1579 | 0.5*ssdchipcablespiecelength, | |
1580 | 0.0, | |
1581 | ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0], | |
1582 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); | |
1583 | ssdchipcablestubesegcombitrans[3] = | |
1584 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg2CombiTrans", | |
1585 | - 0.5*ssdchipcablespiecelength, | |
1586 | 0.0, | |
1587 | - ssdchipcablesradius[0]+0.5*fgkSSDChipCablesHeight[0] | |
1588 | - fgkSSDChipCablesHeight[0], | |
1589 | new TGeoRotation((*ssdchipcablesrot[2])*(*ssdchipcablesrot[0]))); | |
1590 | ssdchipcablestubesegcombitrans[4] = | |
1591 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg4CombiTrans", | |
1592 | 0.5*ssdchipcablespiecelength+ssdchipcablesradius[0] | |
1593 | + fgkSSDModuleStiffenerPosition[1], | |
1594 | 0.0, | |
1595 | - 2.*ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0] | |
1596 | - (0.5*fgkSSDSensorHeight+fgkSSDChipCablesHeight[0] | |
1597 | + fgkSSDChipCablesHeight[1]), | |
1598 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); | |
1599 | ssdchipcablestubesegcombitrans[5] = | |
1600 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg5CombiTrans", | |
1601 | 0.5*ssdchipcablespiecelength+ssdchipcablesradius[0] | |
1602 | + fgkSSDModuleStiffenerPosition[1], | |
1603 | 0.0, | |
1604 | - 2.*ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0] | |
1605 | - (0.5*fgkSSDSensorHeight+fgkSSDChipCablesHeight[0] | |
1606 | + fgkSSDChipCablesHeight[1]), | |
1607 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); | |
1608 | TGeoCombiTrans* ssdchipcablestrapezoidcombitrans[kssdchipcableslaynumber]; | |
1609 | ssdchipcablestrapezoidcombitrans[0] = (side=="Right" ? | |
1610 | new TGeoCombiTrans("SSDChipCableLay1TrapezoidRightCombiTrans", | |
1611 | 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] | |
1612 | + ssdchipcablesradius[0], | |
1613 | - 0.5*fgkSSDChipCablesLength[1], | |
1614 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0], | |
1615 | new TGeoRotation("",90.,0.,0.)) : | |
1616 | new TGeoCombiTrans("SSDChipCableLay1TrapezoidLeftCombiTrans", | |
1617 | - 2.*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]) | |
1618 | + 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] | |
1619 | + ssdchipcablesradius[0]+fgkSSDModuleStiffenerPosition[1], | |
1620 | 0.5*fgkSSDChipCablesLength[1], | |
1621 | - 2.*(fgkSSDChipCablesHeight[0]+fgkSSDChipCablesHeight[1]) | |
1622 | - 2.*ssdchipcablesradius[0]-fgkSSDSensorHeight, | |
1623 | new TGeoRotation("",-90.,0.,0.))); | |
1624 | ssdchipcablestrapezoidcombitrans[1] = (side=="Right" ? | |
1625 | new TGeoCombiTrans("SSDChipCableLay2TrapezoidRightCombiTrans", | |
1626 | 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] | |
1627 | + ssdchipcablesradius[0], | |
1628 | - 0.5*fgkSSDChipCablesLength[1], | |
1629 | - 0.5*(fgkSSDChipCablesHeight[0]+fgkSSDChipCablesHeight[1]) | |
1630 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0], | |
1631 | new TGeoRotation("",90.,0.,0.)) : | |
1632 | new TGeoCombiTrans("SSDChipCableLay2TrapezoidLeftCombiTrans", | |
1633 | - 2.*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]) | |
1634 | + 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] | |
1635 | + ssdchipcablesradius[0]+fgkSSDModuleStiffenerPosition[1], | |
1636 | 0.5*fgkSSDChipCablesLength[1],-0.5*(fgkSSDChipCablesHeight[0] | |
1637 | + fgkSSDChipCablesHeight[1])-fgkSSDChipCablesHeight[1] | |
1638 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0] | |
1639 | - fgkSSDSensorHeight,new TGeoRotation("",-90.,0.,0.))); | |
1640 | ////////////////////////// | |
1641 | //Box and Tube Seg Volumes | |
1642 | ////////////////////////// | |
1643 | char* ssdchipcablesboxname[2*kssdchipcableslaynumber] = | |
1644 | {"SSDChipCablesLay1Box1","SSDChipCablesLay1Box2", | |
1645 | "SSDChipCablesLay2Box1","SSDChipCablesLay2Box2"}; | |
1646 | char* ssdchiprightcablestubesegname[2*kssdchipcableslaynumber] = | |
1647 | {"SSDChipRightCablesLay1TubeSeg1","SSDChipRightCablesLay1TubeSeg2", | |
1648 | "SSDChipRightCablesLay2TubeSeg1","SSDChipRightCablesLay2TubeSeg2"}; | |
1649 | char* ssdchipLeftcablestubesegname[2*kssdchipcableslaynumber] = | |
1650 | {"SSDChipLeftCablesLay1TubeSeg1","SSDChipLeftCablesLay1TubeSeg2", | |
1651 | "SSDChipLeftCablesLay2TubeSeg1","SSDChipLeftCablesLay2TubeSeg2"}; | |
1652 | char* ssdchipcableslayassemblyname[kssdchipcableslaynumber] = | |
1653 | {"SSDChipCablesLay1","SSDChipCablesLay2"}; | |
1654 | TGeoVolume** ssdchipcablesbox[kssdchipcableslaynumber]; | |
1655 | TGeoVolume** ssdchipcablestubeseg[kssdchipcableslaynumber]; | |
1656 | TGeoVolume* ssdchipcableslayassembly[kssdchipcableslaynumber]; | |
1657 | for(Int_t i=0; i<kssdchipcableslaynumber; i++){ | |
1658 | TGeoMedium* ssdchipcableslaymed = | |
1659 | (i==0?fSSDAlTraceChipCableMedium:fSSDKaptonChipCableMedium); | |
1660 | ssdchipcablesbox[i] = new TGeoVolume*[2]; | |
1661 | ssdchipcablestubeseg[i] = new TGeoVolume*[2+(side=="Right" ? 0 : 1)]; | |
1662 | ssdchipcablesbox[i][0] = new TGeoVolume(ssdchipcablesboxname[2*i], | |
1663 | ssdchipcablesboxshape[i][0],ssdchipcableslaymed); | |
1664 | ssdchipcablesbox[i][1] = new TGeoVolume(ssdchipcablesboxname[2*i+1], | |
1665 | ssdchipcablesboxshape[i][1],ssdchipcableslaymed); | |
1666 | ssdchipcablestubeseg[i][0] = new TGeoVolume(ssdchiprightcablestubesegname[2*i], | |
1667 | ssdchipcablestubesegshape[i][0],ssdchipcableslaymed); | |
1668 | ssdchipcablestubeseg[i][1] = new TGeoVolume(ssdchiprightcablestubesegname[2*i+1], | |
1669 | ssdchipcablestubesegshape[i][1],ssdchipcableslaymed); | |
1670 | ssdchipcablesbox[i][0]->SetLineColor(ssdchipcablescolor[i]); | |
1671 | ssdchipcablesbox[i][1]->SetLineColor(ssdchipcablescolor[i]); | |
1672 | ssdchipcablestubeseg[i][0]->SetLineColor(ssdchipcablescolor[i]); | |
1673 | ssdchipcablestubeseg[i][1]->SetLineColor(ssdchipcablescolor[i]); | |
1674 | ssdchipcableslayassembly[i] = new TGeoVolumeAssembly(ssdchipcableslayassemblyname[i]); | |
1675 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablesbox[i][0],1, | |
1676 | ssdchipcablesboxtrans[2*i]); | |
1677 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablesbox[i][1],1, | |
1678 | ssdchipcablesboxtrans[2*i+1]); | |
1679 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablestubeseg[i][0],1, | |
1680 | ssdchipcablestubesegcombitrans[2*i]); | |
1681 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablestubeseg[i][1],1, | |
1682 | ssdchipcablestubesegcombitrans[2*i+1]); | |
1683 | if(side!="Right"){ | |
1684 | ssdchipcablestubeseg[i][2] = new TGeoVolume(ssdchipLeftcablestubesegname[2*i], | |
1685 | ssdchipcablestubesegshape[i][2], | |
1686 | ssdchipcableslaymed); | |
1687 | ssdchipcablestubeseg[i][2]->SetLineColor(ssdchipcablescolor[i]); | |
1688 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablestubeseg[i][2],1, | |
1689 | ssdchipcablestubesegcombitrans[4+i]); | |
1690 | } | |
1691 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablestrapezoidassembly[i],1, | |
1692 | ssdchipcablestrapezoidcombitrans[i]); | |
1693 | } | |
1694 | TGeoCombiTrans* ssdchipcablescombitrans[kssdchipcableslaynumber]; | |
1695 | ssdchipcablescombitrans[0] = new TGeoCombiTrans("SSDChipCablesCombiTrans1", | |
1696 | (side=="Right" ? -1 : 1)*0.5*ssdchipcablespiecelength, | |
1697 | 0.5*fgkSSDChipCablesLength[0], | |
1698 | - (2.*ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0] | |
1699 | - 0.5*fgkSSDChipCablesHeight[1]), | |
1700 | new TGeoRotation("",(side=="Right" ? 0 : 1)*180.,0.,0.)); | |
1701 | ssdchipcablescombitrans[1] = new TGeoCombiTrans("SSDChipCablesCombiTrans2", | |
1702 | (side=="Right" ? -1 : 1)*0.5*ssdchipcablespiecelength, | |
1703 | 0.5*fgkSSDChipCablesLength[0], | |
1704 | - (2.*ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0] | |
1705 | - 0.5*fgkSSDChipCablesHeight[1]), | |
1706 | new TGeoRotation("",(side=="Right" ? 0 : 1)*180.,0.,0.)); | |
1707 | TGeoVolume* ssdchipcablesassembly = | |
1708 | new TGeoVolumeAssembly("SSDChipCables"); | |
1709 | for(Int_t i=0; i<kssdchipcableslaynumber; i++){ | |
1710 | ssdchipcablesassembly->AddNode(ssdchipcableslayassembly[i],1, | |
1711 | ssdchipcablescombitrans[i]); | |
1712 | ssdchipcablesassembly->AddNode(ssdunderchipcablesbox[i],1,ssdunderchipcablesboxtrans[i]); | |
1713 | } | |
1714 | return ssdchipcablesassembly; | |
1715 | } | |
1716 | ///////////////////////////////////////////////////////////////////////////////// | |
1717 | TGeoVolume* AliITSv11GeometrySSD::GetSSDChipCablesAssembly(Double_t SSDChipCablesHeigth){ | |
1718 | ///////////////////////////////////////////////////////////// | |
1719 | // Method generating SSD Chip Cables Assembly | |
1720 | ///////////////////////////////////////////////////////////// | |
1721 | const Int_t kchipcablesnumber = 2; | |
1722 | Double_t chipcablestransvector = fgkSSDSensorLength | |
1723 | - 2.*fgkSSDModuleStiffenerPosition[1] | |
1724 | - 2.*(fgkSSDStiffenerWidth | |
1725 | - fgkSSDStiffenerToChipDist-fgkSSDChipWidth); | |
1726 | char* ssdchipcablesname[kchipcablesnumber] = {"Right","Left"}; | |
1727 | TGeoVolume* ssdchipcables[kchipcablesnumber]; | |
1728 | TGeoVolume* ssdchipcablesassembly = | |
1729 | new TGeoVolumeAssembly("SSDChipCablesAssembly"); | |
1730 | for(Int_t i=0; i<kchipcablesnumber; i++) ssdchipcables[i] = | |
1731 | GetSSDChipCables(SSDChipCablesHeigth,ssdchipcablesname[i]); | |
1732 | for(Int_t i=0; i<kchipcablesnumber; i++) | |
1733 | for(Int_t j=0; j<fgkSSDChipNumber; j++) | |
1734 | ssdchipcablesassembly->AddNode(ssdchipcables[i],fgkSSDChipNumber*i+j+1, | |
1735 | new TGeoTranslation(-(ssdchipcablesname[i]=="Left" ? 1. : 0.) | |
1736 | * chipcablestransvector,(j-0.5)*fgkSSDChipCablesLength[0] | |
1737 | + 0.5*fgkSSDChipCablesLength[1],0.)); | |
1738 | return ssdchipcablesassembly; | |
1739 | } | |
1740 | ///////////////////////////////////////////////////////////////////////////////// | |
1741 | TGeoVolume* AliITSv11GeometrySSD::GetSSDFlex(Double_t ssdflexradius, Double_t SSDFlexHeigth){ | |
1742 | ///////////////////////////////////////////////////////////// | |
1743 | // Method generating SSD Flex | |
1744 | ///////////////////////////////////////////////////////////// | |
1745 | const Int_t kssdflexvolumenumber = 3; | |
1746 | TGeoVolume* ssdflexvolume[kssdflexvolumenumber]; | |
1747 | //////////////////////// | |
1748 | // Setting Display Color | |
1749 | //////////////////////// | |
1750 | Int_t ssdflexcolor; | |
1751 | ssdflexcolor = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fColorAl: fColorPolyhamide); | |
1752 | TGeoMedium* ssdflexmed = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fSSDAlTraceFlexMedium : | |
1753 | fSSDKaptonFlexMedium); | |
1754 | //////////////////////// | |
1755 | // SSDFlexTrapezoidShape | |
1756 | //////////////////////// | |
1757 | const Int_t kssdflexvertexnumber = 2; | |
1758 | Double_t ssdflexwidth[kssdflexvertexnumber] = {fgkSSDFlexWidth[1], | |
1759 | fgkSSDFlexWidth[0]}; | |
1760 | TVector3* ssdflexvertex[kssdflexvertexnumber]; | |
1761 | ssdflexvertex[0] = new TVector3(); | |
1762 | ssdflexvertex[1] = new TVector3(fgkSSDFlexLength[0]-fgkSSDFlexLength[1]); | |
1763 | TGeoArb8* ssdflextrapezoidshape = GetTrapezoidShape(ssdflexvertex, | |
1764 | ssdflexwidth,SSDFlexHeigth, | |
1765 | "SSDFlexTrapezoidShape"); | |
1766 | ssdflexvolume[0] = new TGeoVolume("SSDFlexTrapezoid",ssdflextrapezoidshape,ssdflexmed); | |
1767 | ssdflexvolume[0]->SetLineColor(ssdflexcolor); | |
1768 | ///////////////////////// | |
1769 | //SSDFlexTubeSeg Assembly | |
1770 | ///////////////////////// | |
1771 | const Int_t kssdflextubesegnumber = 2; | |
1772 | TGeoTubeSeg* ssdflextubesegshape[kssdflextubesegnumber]; | |
1773 | Double_t ssdflexradiusmax = (fgkSSDFlexLength[3]-fgkSSDFlexLength[2]) | |
1774 | / TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()); | |
1775 | ssdflextubesegshape[0] = new TGeoTubeSeg("SSDFlexTubeSegShape1", | |
1776 | ssdflexradius,ssdflexradius+SSDFlexHeigth, | |
1777 | 0.5*fgkSSDFlexWidth[0],0.,180.); | |
1778 | ssdflextubesegshape[1] = new TGeoTubeSeg("SSDFlexTubeSegShape2", | |
1779 | ssdflexradiusmax-ssdflexradius-SSDFlexHeigth, | |
1780 | ssdflexradiusmax-ssdflexradius,0.5*fgkSSDFlexWidth[0], | |
1781 | 0.,2.*fgkSSDFlexAngle); | |
1782 | TGeoRotation** ssdflextubsegrot[kssdflextubesegnumber]; | |
1783 | for(Int_t i = 0; i<kssdflextubesegnumber; i++) | |
1784 | ssdflextubsegrot[i] = new TGeoRotation*[2]; | |
1785 | ssdflextubsegrot[0][0] = new TGeoRotation("SSDFlexTubeSeg1Rot1", 0., 90., 0.); | |
1786 | ssdflextubsegrot[0][1] = new TGeoRotation("SSDFlexTubeSeg1Rot2",90., 90.,-90.); | |
1787 | ssdflextubsegrot[1][0] = new TGeoRotation("SSDFlexTubeSeg2Rot1", 0.,-90., 0.); | |
1788 | ssdflextubsegrot[1][1] = new TGeoRotation("SSDFlexTubeSeg2Rot2",90., 90.,-90.); | |
1789 | TGeoCombiTrans* ssdflextubesegcombitrans[kssdflextubesegnumber]; | |
1790 | ssdflextubesegcombitrans[0] = new TGeoCombiTrans("SSDFlexTubeSegCombiTrans1", | |
1791 | fgkSSDFlexLength[0],0.5*fgkSSDFlexWidth[0], | |
1792 | ssdflexradius+0.5*SSDFlexHeigth, | |
1793 | new TGeoRotation((*ssdflextubsegrot[0][1]) | |
1794 | * (*ssdflextubsegrot[0][0]))); | |
1795 | ssdflextubesegcombitrans[1] = new TGeoCombiTrans("SSDFlexTubeSegCombiTrans2", | |
1796 | fgkSSDFlexLength[0]-fgkSSDFlexLength[2], | |
1797 | 0.5*fgkSSDFlexWidth[0], | |
1798 | ssdflexradiusmax+0.5*SSDFlexHeigth+ssdflexradius, | |
1799 | new TGeoRotation((*ssdflextubsegrot[1][1]) | |
1800 | * (*ssdflextubsegrot[1][0]))); | |
1801 | ssdflexvolume[1] = new TGeoVolumeAssembly("SSDFlexTubeSegAssembly"); | |
1802 | TGeoVolume* ssdflextubeseg[kssdflextubesegnumber]; | |
1803 | char ssdflextubesegname[30]; | |
1804 | for(Int_t i=0; i<kssdflextubesegnumber; i++){ | |
1805 | sprintf(ssdflextubesegname,"SSDFlexTubeSeg%i",i+1); | |
1806 | ssdflextubeseg[i] = new TGeoVolume(ssdflextubesegname,ssdflextubesegshape[i], | |
1807 | ssdflexmed); | |
1808 | ssdflextubeseg[i]->SetLineColor(ssdflexcolor); | |
1809 | ssdflexvolume[1]->AddNode(ssdflextubeseg[i],1,ssdflextubesegcombitrans[i]); | |
1810 | } | |
1811 | /////////// | |
1812 | //Box Shape | |
1813 | /////////// | |
1814 | const Int_t kssdflexboxnumber = 7; | |
1815 | Double_t ssdflexboxlength[kssdflexboxnumber]; | |
1816 | ssdflexboxlength[0] = 0.5*(fgkSSDChipNumber | |
1817 | * fgkSSDChipLength+(fgkSSDChipNumber-1) | |
1818 | * fgkSSDChipSeparationLength | |
1819 | - fgkSSDModuleSensorSupportDistance-fgkSSDFlexHoleLength) | |
1820 | - (fgkSSDFlexLength[0]-fgkSSDFlexLength[1]); | |
1821 | ssdflexboxlength[1] = fgkSSDModuleSensorSupportDistance+fgkSSDFlexHoleLength; | |
1822 | ssdflexboxlength[2] = 0.5*(fgkSSDModuleSensorSupportDistance | |
1823 | - fgkSSDFlexHoleLength-fgkSSDFlexHoleWidth); | |
1824 | ssdflexboxlength[3] = fgkSSDFlexHoleWidth; | |
1825 | ssdflexboxlength[4] = fgkSSDFlexLength[1]-ssdflexboxlength[0] | |
1826 | - ssdflexboxlength[1]; | |
1827 | ssdflexboxlength[5] = fgkSSDFlexLength[2]; | |
1828 | ssdflexboxlength[6] = fgkSSDFlexFullLength-2.*fgkSSDFlexAngle | |
1829 | * TMath::DegToRad()*ssdflexradiusmax | |
1830 | - fgkSSDFlexLength[2]-TMath::Pi() | |
1831 | * fgkSSDStiffenerHeight-fgkSSDFlexLength[0]; | |
1832 | Double_t ssdflexboxwidth[kssdflexboxnumber]; | |
1833 | ssdflexboxwidth[0] = fgkSSDFlexWidth[0]; | |
1834 | ssdflexboxwidth[1] = fgkSSDFlexWidth[0]-fgkSSDFlexHoleWidth; | |
1835 | ssdflexboxwidth[2] = fgkSSDFlexHoleWidth; | |
1836 | ssdflexboxwidth[3] = ssdflexboxwidth[2]-fgkSSDFlexHoleLength; | |
1837 | ssdflexboxwidth[4] = fgkSSDFlexWidth[0]; | |
1838 | ssdflexboxwidth[5] = fgkSSDFlexWidth[0]; | |
1839 | ssdflexboxwidth[6] = fgkSSDFlexWidth[0]; | |
1840 | TGeoBBox* ssdflexboxshape[kssdflexboxnumber+1]; | |
1841 | for(Int_t i=0; i<kssdflexboxnumber+1; i++) ssdflexboxshape[i] = | |
1842 | (i!= kssdflexboxnumber ? new TGeoBBox("SSDFlexBoxShape", | |
1843 | 0.5*ssdflexboxlength[i], | |
1844 | 0.5*ssdflexboxwidth[i],0.5*SSDFlexHeigth) : | |
1845 | ssdflexboxshape[2]); | |
1846 | ////////////////////////////// | |
1847 | //SSDFlex Box Shape CombiTrans | |
1848 | ////////////////////////////// | |
1849 | TGeoCombiTrans* ssdflexboxcombitrans[kssdflexboxnumber+1]; | |
1850 | ssdflexboxcombitrans[0] = new TGeoCombiTrans("SSDFlexBoxCombiTrans0", | |
1851 | ssdflexvertex[1]->X()+0.5*ssdflexboxlength[0], | |
1852 | 0.5*fgkSSDFlexWidth[0],0.,0); | |
1853 | ssdflexboxcombitrans[1] = new TGeoCombiTrans("SSDFlexBoxCombiTrans1", | |
1854 | ssdflexvertex[1]->X()+ssdflexboxlength[0] | |
1855 | + 0.5*ssdflexboxlength[1], | |
1856 | fgkSSDFlexHoleWidth+0.5*ssdflexboxwidth[1],0.,0); | |
1857 | ssdflexboxcombitrans[2] = new TGeoCombiTrans("SSDFlexBoxCombiTrans2", | |
1858 | ssdflexvertex[1]->X()+ssdflexboxlength[0] | |
1859 | + fgkSSDFlexHoleLength+0.5*ssdflexboxlength[2], | |
1860 | 0.5*ssdflexboxwidth[2],0.,0); | |
1861 | ssdflexboxcombitrans[3] = new TGeoCombiTrans("SSDFlexBoxCombiTrans3", | |
1862 | ssdflexvertex[1]->X()+ssdflexboxlength[0] | |
1863 | + fgkSSDFlexHoleLength+ssdflexboxlength[2] | |
1864 | + 0.5*fgkSSDFlexHoleWidth, | |
1865 | fgkSSDFlexHoleLength+0.5*ssdflexboxwidth[3],0.,0); | |
1866 | ssdflexboxcombitrans[4] = new TGeoCombiTrans("SSDFlexBoxCombiTrans4", | |
1867 | ssdflexvertex[1]->X()+ssdflexboxlength[0] | |
1868 | + ssdflexboxlength[1]+0.5*ssdflexboxlength[4], | |
1869 | 0.5*fgkSSDFlexWidth[0],0.,0); | |
1870 | ssdflexboxcombitrans[5] = new TGeoCombiTrans("SSDFlexBoxCombiTrans5", | |
1871 | - 0.5*fgkSSDFlexLength[2]+fgkSSDFlexLength[0], | |
1872 | 0.5*fgkSSDFlexWidth[0], | |
1873 | 2.*ssdflexradius+SSDFlexHeigth,0); | |
1874 | ssdflexboxcombitrans[6] = new TGeoCombiTrans("SSDFlexBoxCombiTrans6", | |
1875 | - ssdflexboxshape[6]->GetDX() | |
1876 | + ssdflexboxshape[6]->GetDX() | |
1877 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()) | |
1878 | + fgkSSDFlexLength[0]-fgkSSDFlexLength[2] | |
1879 | - (ssdflexradiusmax-ssdflexradius-0.5*SSDFlexHeigth) | |
1880 | * TMath::Cos(fgkSSDFlexAngle*TMath::DegToRad()), | |
1881 | 0.5*fgkSSDFlexWidth[0],ssdflexboxshape[6]->GetDX() | |
1882 | *TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad()) | |
1883 | + SSDFlexHeigth+2.*ssdflexradius+(ssdflexradiusmax | |
1884 | - ssdflexradius-0.5*SSDFlexHeigth) | |
1885 | * TMath::Sin(fgkSSDFlexAngle*TMath::DegToRad()), | |
1886 | new TGeoRotation("",90.,2.*fgkSSDFlexAngle,-90.)); | |
1887 | ssdflexboxcombitrans[7] = new TGeoCombiTrans("SSDFlexBoxCombiTrans7", | |
1888 | ssdflexvertex[1]->X()+ssdflexboxlength[0] | |
1889 | + fgkSSDFlexHoleLength+1.5*ssdflexboxlength[2] | |
1890 | + ssdflexboxlength[3], | |
1891 | 0.5*ssdflexboxwidth[2],0.,0); | |
1892 | //////////////////////////// | |
1893 | //SSDFlex Box Shape Assembly | |
1894 | //////////////////////////// | |
1895 | ssdflexvolume[2] = new TGeoVolumeAssembly("SSDFlexBoxAssembly"); | |
1896 | TGeoVolume* ssdflexbox[kssdflexboxnumber+1]; | |
1897 | TGeoVolume* ssdendflex = GetSSDEndFlex(ssdflexboxlength[6],SSDFlexHeigth); | |
1898 | TGeoHMatrix* ssdendflexhmatrix = new TGeoHMatrix(); | |
1899 | TGeoRotation* ssdendflexrot = new TGeoRotation("SSDEndFlexRot",180.,0.,0); | |
1900 | ssdendflexhmatrix->MultiplyLeft(ssdendflexrot); | |
1901 | ssdendflexhmatrix->MultiplyLeft(ssdflexboxcombitrans[6]); | |
1902 | char ssdflexboxname[30]; | |
1903 | for(Int_t i=0; i<kssdflexboxnumber+1; i++){ | |
1904 | sprintf(ssdflexboxname,"SSDFlexBox%i",i!=kssdflexboxnumber?i+1:7); | |
1905 | if(i==6){ssdflexvolume[2]->AddNode(ssdendflex,1,ssdendflexhmatrix);} | |
1906 | else{ | |
1907 | ssdflexbox[i] = new TGeoVolume(ssdflexboxname,ssdflexboxshape[i], | |
1908 | ssdflexmed); | |
1909 | ssdflexbox[i]->SetLineColor(ssdflexcolor); | |
1910 | ssdflexvolume[2]->AddNode(ssdflexbox[i],1,ssdflexboxcombitrans[i]);} | |
1911 | } | |
1912 | ////////////////////// | |
1913 | //SSDFlex Construction | |
1914 | ////////////////////// | |
1915 | TGeoVolume* ssdflex = new TGeoVolumeAssembly("SSDFlex"); | |
1916 | for(Int_t i =0; i<kssdflexvolumenumber; i++) ssdflex->AddNode(ssdflexvolume[i],1); | |
1917 | return ssdflex; | |
1918 | } | |
1919 | ///////////////////////////////////////////////////////////////////////////////// | |
1920 | TGeoVolume* AliITSv11GeometrySSD::GetSSDEndFlex(Double_t SSDEndFlexLength, | |
1921 | Double_t SSDFlexHeigth){ | |
1922 | ///////////////////////////////////////////////////////////// | |
1923 | // Method generating SSD End Flex | |
1924 | ///////////////////////////////////////// | |
1925 | // Setting Display Color, Media and Index | |
1926 | ///////////////////////////////////////// | |
1927 | Int_t ssdflexcolor; | |
1928 | ssdflexcolor = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fColorAl: fColorPolyhamide); | |
1929 | TGeoMedium* ssdflexmed = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fSSDAlTraceFlexMedium : | |
1930 | fSSDKaptonFlexMedium); | |
1931 | //////////////////////// | |
1932 | const Int_t kssdendflexboxnumber = 5; | |
1933 | TGeoBBox* ssdendflexbboxshape[kssdendflexboxnumber]; | |
1934 | ssdendflexbboxshape[0] = new TGeoBBox("SSDFlexBoxShape1", | |
1935 | 0.5*SSDEndFlexLength,0.5*fgkSSDFlexWidth[0], | |
1936 | 0.5*SSDFlexHeigth); | |
1937 | ssdendflexbboxshape[1] = new TGeoBBox("SSDFlexBoxShape2", | |
1938 | 0.5*fgkSSDEndFlexCompLength[1], | |
1939 | 0.5*(fgkSSDEndFlexCompWidth[0]-fgkSSDFlexWidth[0])/2, | |
1940 | 0.5*SSDFlexHeigth); | |
1941 | ssdendflexbboxshape[2] = new TGeoBBox("SSDFlexBoxShape3", | |
1942 | 0.5*fgkSSDEndFlexCompLength[2], | |
1943 | 0.5*(fgkSSDEndFlexCompWidth[1]-fgkSSDFlexWidth[0])/2, | |
1944 | 0.5*SSDFlexHeigth); | |
1945 | ssdendflexbboxshape[3] = new TGeoBBox("SSDFlexBoxShape4", | |
1946 | 0.5*fgkSSDEndFlexCompLength[3], | |
1947 | 0.5*(fgkSSDEndFlexCompWidth[0]-fgkSSDFlexWidth[0])/2, | |
1948 | 0.5*SSDFlexHeigth); | |
1949 | ssdendflexbboxshape[4] = new TGeoBBox("SSDFlexBoxShape5", | |
1950 | 0.5*(fgkSSDEndFlexCompLength[4]+fgkSSDEndFlexCompLength[5]), | |
1951 | 0.25*(fgkSSDEndFlexCompWidth[2]-fgkSSDFlexWidth[0])/2, | |
1952 | 0.5*SSDFlexHeigth); | |
1953 | TGeoVolume* ssdendflexbbox[kssdendflexboxnumber]; | |
1954 | char ssdendflexbboxname[30]; | |
1955 | for(Int_t i=0; i<kssdendflexboxnumber; i++){ | |
1956 | sprintf(ssdendflexbboxname,"SSDEndFlexBBox%i",i+1); | |
1957 | ssdendflexbbox[i] = new TGeoVolume(ssdendflexbboxname, | |
1958 | ssdendflexbboxshape[i], | |
1959 | ssdflexmed); | |
1960 | ssdendflexbbox[i]->SetLineColor(ssdflexcolor); | |
1961 | } | |
1962 | TGeoVolume* ssdendflex = new TGeoVolumeAssembly("SSDEndFlex"); | |
1963 | Double_t partialsumlength = 0.; | |
1964 | for(Int_t i=0; i<kssdendflexboxnumber+1; i++) partialsumlength += fgkSSDEndFlexCompLength[i]; | |
1965 | Double_t referencelength = SSDEndFlexLength-partialsumlength; | |
1966 | ssdendflex->AddNode(ssdendflexbbox[0],1); | |
1967 | ssdendflex->AddNode(ssdendflexbbox[1],1,new TGeoTranslation( | |
1968 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1969 | + 0.5*fgkSSDEndFlexCompLength[1], | |
1970 | 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[1]->GetDY(), | |
1971 | 0.)); | |
1972 | ssdendflex->AddNode(ssdendflexbbox[1],2,new TGeoTranslation( | |
1973 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1974 | + 0.5*fgkSSDEndFlexCompLength[1], | |
1975 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[1]->GetDY(), | |
1976 | 0.)); | |
1977 | ssdendflex->AddNode(ssdendflexbbox[2],1,new TGeoTranslation( | |
1978 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1979 | + fgkSSDEndFlexCompLength[1]+0.5*fgkSSDEndFlexCompLength[2], | |
1980 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[2]->GetDY(), | |
1981 | 0.)); | |
1982 | ssdendflex->AddNode(ssdendflexbbox[2],2,new TGeoTranslation( | |
1983 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1984 | + fgkSSDEndFlexCompLength[1]+0.5*fgkSSDEndFlexCompLength[2], | |
1985 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[2]->GetDY(), | |
1986 | 0.)); | |
1987 | ssdendflex->AddNode(ssdendflexbbox[3],1,new TGeoTranslation( | |
1988 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1989 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] | |
1990 | + 0.5*fgkSSDEndFlexCompLength[3], | |
1991 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[3]->GetDY(), | |
1992 | 0.)); | |
1993 | ssdendflex->AddNode(ssdendflexbbox[3],2,new TGeoTranslation( | |
1994 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
1995 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] | |
1996 | + 0.5*fgkSSDEndFlexCompLength[3], | |
1997 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[3]->GetDY(), | |
1998 | 0.)); | |
1999 | ssdendflex->AddNode(ssdendflexbbox[4],1,new TGeoTranslation( | |
2000 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
2001 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] | |
2002 | + fgkSSDEndFlexCompLength[3]+0.5*(fgkSSDEndFlexCompLength[4]+fgkSSDEndFlexCompLength[5]), | |
2003 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[4]->GetDY(), | |
2004 | 0.)); | |
2005 | ssdendflex->AddNode(ssdendflexbbox[4],2,new TGeoTranslation( | |
2006 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
2007 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] | |
2008 | + fgkSSDEndFlexCompLength[3]+0.5*(fgkSSDEndFlexCompLength[4] | |
2009 | + fgkSSDEndFlexCompLength[5]), | |
2010 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[4]->GetDY(), | |
2011 | 0.)); | |
2012 | return ssdendflex; | |
2013 | } | |
2014 | ///////////////////////////////////////////////////////////////////////////////// | |
2015 | TGeoVolume* AliITSv11GeometrySSD::GetSSDFlexAssembly(){ | |
2016 | ///////////////////////////////////////////////////////////// | |
2017 | // Method generating SSD Flex Assembly | |
2018 | ///////////////////////////////////////////////////////////// | |
2019 | TGeoVolume* ssdflexassembly = new TGeoVolumeAssembly("SSDFlexAssembly"); | |
2020 | const Int_t kssdflexlayernumber = 4; | |
2021 | Double_t ssdflexheight[kssdflexlayernumber]; | |
2022 | Double_t ssdflexradius[kssdflexlayernumber]; | |
2023 | TGeoTranslation* ssdflextrans[kssdflexlayernumber]; | |
2024 | for(Int_t i=0; i<kssdflexlayernumber; i++){ | |
2025 | ssdflexheight[i] = (i%2==0 ? fgkSSDFlexHeight[0] : fgkSSDFlexHeight[1]); | |
2026 | ssdflexradius[i] = (i==0 ? fgkSSDStiffenerHeight : ssdflexradius[i-1] | |
2027 | + ssdflexheight[i-1]); | |
2028 | ssdflextrans[i] = new TGeoTranslation(0.,0.,-0.5*i*(ssdflexheight[0] | |
2029 | + ssdflexheight[1])); | |
2030 | ssdflexassembly->AddNode(GetSSDFlex(ssdflexradius[i],ssdflexheight[i]),i+1, | |
2031 | ssdflextrans[i]); | |
2032 | } | |
2033 | return ssdflexassembly; | |
2034 | } | |
2035 | ///////////////////////////////////////////////////////////////////////////////// | |
2036 | TGeoVolume* AliITSv11GeometrySSD::GetSSDCoolingBlockAssembly(){ | |
2037 | ///////////////////////////////////////////////////////////// | |
2038 | // Method generating SSD Cooling Block Assembly | |
2039 | ///////////////////////////////////////////////////////////// | |
2040 | const Int_t kssdcoolingblocktransnumber = 2; | |
2041 | Double_t ssdcoolingblocktransvector[kssdcoolingblocktransnumber] = | |
2042 | {fgkSSDModuleSensorSupportDistance+fgkSSDCoolingBlockLength, | |
2043 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] | |
2044 | - fgkSSDCoolingBlockWidth}; | |
2045 | TGeoVolume* ssdcoolingblock = GetSSDCoolingBlock(); | |
2046 | TGeoVolume* ssdcoolingblockassembly = | |
2047 | new TGeoVolumeAssembly("SSDCoolingBlockAssembly"); | |
2048 | for(Int_t i=0; i<kssdcoolingblocktransnumber; i++) | |
2049 | for(Int_t j=0; j<kssdcoolingblocktransnumber; j++) | |
2050 | ssdcoolingblockassembly->AddNode(ssdcoolingblock, | |
2051 | kssdcoolingblocktransnumber*i+j+1, | |
2052 | new TGeoTranslation(i*ssdcoolingblocktransvector[0], | |
2053 | j*ssdcoolingblocktransvector[1],0.)); | |
2054 | return ssdcoolingblockassembly; | |
2055 | } | |
2056 | ///////////////////////////////////////////////////////////////////////////////// | |
2057 | TGeoVolume* AliITSv11GeometrySSD::GetSSDCoolingBlock(){ | |
2058 | ///////////////////////////////////////////////////////////// | |
2059 | // Method generating SSD Cooling Block | |
2060 | ///////////////////////////////////////////////////////////// | |
2061 | // Center Cooling Block Hole | |
2062 | //////////////////////////// | |
2063 | Double_t coolingblockholeangle = TMath::ACos(0.5*fgkSSDCoolingBlockHoleLength[0] | |
2064 | /fgkSSDCoolingBlockHoleRadius[0])*TMath::RadToDeg(); | |
2065 | Double_t coolingblockholewidth = fgkSSDCoolingBlockWidth; | |
2066 | new TGeoTubeSeg("CoolingBlockHoleShape", | |
2067 | 0., | |
2068 | fgkSSDCoolingBlockHoleRadius[0], | |
2069 | 0.5*coolingblockholewidth, | |
2070 | 180.-coolingblockholeangle,360.+coolingblockholeangle); | |
2071 | TVector3* coolingblockholevertex[3]; | |
2072 | coolingblockholevertex[0] = new TVector3(); | |
2073 | coolingblockholevertex[1] = new TVector3(fgkSSDCoolingBlockHoleRadius[0] | |
2074 | * TMath::Cos((90.-coolingblockholeangle)*TMath::DegToRad()), | |
2075 | fgkSSDCoolingBlockHoleRadius[0] | |
2076 | * TMath::Sin((90.-coolingblockholeangle)*TMath::DegToRad())); | |
2077 | coolingblockholevertex[2] = new TVector3(coolingblockholevertex[1]->X(), | |
2078 | - coolingblockholevertex[1]->Y()); | |
2079 | GetTriangleShape(coolingblockholevertex, | |
2080 | coolingblockholewidth,"CoolingBlockTriangleHoleShape"); | |
2081 | TGeoRotation* coolingblockholerot = | |
2082 | new TGeoRotation("CoolingBlockHoleRot",90,0.,0.); | |
2083 | coolingblockholerot->RegisterYourself(); | |
2084 | new TGeoCompositeShape("CoolingTubeHoleShape", | |
2085 | "CoolingBlockTriangleHoleShape:CoolingBlockHoleRot+" | |
2086 | "CoolingBlockHoleShape"); | |
2087 | /////////////////////////// | |
2088 | // Cooling Block Trapezoids | |
2089 | /////////////////////////// | |
2090 | const Int_t kvertexnumber = 4; | |
2091 | const Int_t ktrapezoidnumber = 2; | |
2092 | TVector3** coolingblocktrapezoidvertex[ktrapezoidnumber]; | |
2093 | for(Int_t i = 0; i<ktrapezoidnumber; i++) coolingblocktrapezoidvertex[i] = | |
2094 | new TVector3*[kvertexnumber]; | |
2095 | Double_t coolingblockcomponentheight = fgkSSDCoolingBlockHeight[0] | |
2096 | - fgkSSDCoolingBlockHoleCenter | |
2097 | - fgkSSDCoolingBlockHoleRadius[0] | |
2098 | * TMath::Sin(coolingblockholeangle*TMath::DegToRad()); | |
2099 | Double_t coolingblocktrapezoidlength[ktrapezoidnumber] = | |
2100 | { fgkSSDCoolingBlockLength, | |
2101 | 0.5*(fgkSSDCoolingBlockLength-2. | |
2102 | * (fgkSSDCoolingBlockHoleLength[1] | |
2103 | - fgkSSDCoolingBlockHoleRadius[1]) | |
2104 | - fgkSSDCoolingBlockHoleLength[0])}; | |
2105 | Double_t coolingblocktrapezoidheigth[ktrapezoidnumber] = | |
2106 | { fgkSSDCoolingBlockHeight[0]-coolingblockcomponentheight | |
2107 | - fgkSSDCoolingBlockHeight[1]-fgkSSDCoolingBlockHeight[2] | |
2108 | - fgkSSDCoolingBlockHoleRadius[1], | |
2109 | coolingblockcomponentheight}; | |
2110 | Double_t coolingblocktrapezoidwidth[ktrapezoidnumber] = | |
2111 | {fgkSSDCoolingBlockWidth,fgkSSDCoolingBlockWidth}; | |
2112 | ////////////////////////// | |
2113 | //Vertex Positioning Shape | |
2114 | ////////////////////////// | |
2115 | coolingblocktrapezoidvertex[0][0] = new TVector3(); | |
2116 | coolingblocktrapezoidvertex[0][1] = new TVector3(coolingblocktrapezoidlength[0]); | |
2117 | coolingblocktrapezoidvertex[0][2] = new TVector3( | |
2118 | 0.5*(coolingblocktrapezoidvertex[0][1]->X() | |
2119 | - 2.*coolingblocktrapezoidlength[1] | |
2120 | - fgkSSDCoolingBlockHoleLength[0])); | |
2121 | coolingblocktrapezoidvertex[0][3] = | |
2122 | new TVector3(coolingblocktrapezoidvertex[0][1]->X() | |
2123 | - coolingblocktrapezoidvertex[0][2]->X()); | |
2124 | coolingblocktrapezoidvertex[1][0] = new TVector3(); | |
2125 | coolingblocktrapezoidvertex[1][1] = new TVector3(coolingblocktrapezoidlength[1]); | |
2126 | coolingblocktrapezoidvertex[1][2] = | |
2127 | new TVector3(coolingblocktrapezoidheigth[1] | |
2128 | / coolingblocktrapezoidheigth[0] | |
2129 | * coolingblocktrapezoidvertex[0][2]->X()); | |
2130 | coolingblocktrapezoidvertex[1][3] = | |
2131 | new TVector3(coolingblocktrapezoidvertex[1][1]->X()); | |
2132 | char* coolingblocktrapezoidshapename[ktrapezoidnumber] = | |
2133 | {"CoolingBlockTrapezoidShape0","CoolingBlockTrapezoidShape1"}; | |
2134 | TGeoArb8* coolingblocktrapezoidshape[ktrapezoidnumber]; | |
2135 | for(Int_t i = 0; i< ktrapezoidnumber; i++) coolingblocktrapezoidshape[i] = | |
2136 | GetArbShape(coolingblocktrapezoidvertex[i], | |
2137 | coolingblocktrapezoidwidth, | |
2138 | coolingblocktrapezoidheigth[i], | |
2139 | coolingblocktrapezoidshapename[i]); | |
2140 | TGeoTranslation* coolingblocktrapezoidtrans = | |
2141 | new TGeoTranslation("CoolingBlockTrapezoidTrans", | |
2142 | coolingblocktrapezoidvertex[0][2]->X(), | |
2143 | 0.0, | |
2144 | 0.5*(coolingblocktrapezoidheigth[0] | |
2145 | + coolingblocktrapezoidheigth[1])); | |
2146 | coolingblocktrapezoidtrans->RegisterYourself(); | |
2147 | TGeoCombiTrans* coolingblocktrapezoidcombitrans = | |
2148 | new TGeoCombiTrans("CoolingBlockTrapezoidCombiTrans", | |
2149 | coolingblocktrapezoidvertex[0][3]->X(), | |
2150 | fgkSSDCoolingBlockWidth, | |
2151 | 0.5*(coolingblocktrapezoidheigth[0] | |
2152 | + coolingblocktrapezoidheigth[1]), | |
2153 | new TGeoRotation("",180.,0.,0.)); | |
2154 | coolingblocktrapezoidcombitrans->RegisterYourself(); | |
2155 | new TGeoCompositeShape("CoolingBlockTrapezoidCompositeShape", | |
2156 | "CoolingBlockTrapezoidShape0+CoolingBlockTrapezoidShape1:CoolingBlockTrapezoidTrans+" | |
2157 | "CoolingBlockTrapezoidShape1:CoolingBlockTrapezoidCombiTrans"); | |
2158 | ///////////////////////////// | |
2159 | // Cooling Block Boxes Shapes | |
2160 | ///////////////////////////// | |
2161 | const Int_t kboxnumber = 3; | |
2162 | TGeoBBox* coolingblockboxshape[kboxnumber]; | |
2163 | coolingblockboxshape[0] = new TGeoBBox("CoolingBlockBoxShape0", | |
2164 | 0.5*fgkSSDCoolingBlockLength, | |
2165 | 0.5*fgkSSDCoolingBlockWidth, | |
2166 | 0.5*fgkSSDCoolingBlockHoleRadius[1]); | |
2167 | coolingblockboxshape[1] = new TGeoBBox("CoolingBlockBoxShape1", | |
2168 | 0.5*(fgkSSDCoolingBlockLength | |
2169 | - 2.*fgkSSDCoolingBlockHoleLength[1]), | |
2170 | 0.5*fgkSSDCoolingBlockWidth, | |
2171 | 0.5*fgkSSDCoolingBlockHeight[2]); | |
2172 | coolingblockboxshape[2] = new TGeoBBox("CoolingBlockBoxShape2", | |
2173 | 0.5*fgkSSDCoolingBlockLength, | |
2174 | 0.5*fgkSSDCoolingBlockWidth, | |
2175 | 0.5*fgkSSDCoolingBlockHeight[1]); | |
2176 | TGeoTranslation* coolingblockboxtrans[kboxnumber-1]; | |
2177 | coolingblockboxtrans[0] = new TGeoTranslation("CoolingBlockBoxTrans0",0.,0., | |
2178 | 0.5*(fgkSSDCoolingBlockHeight[1] | |
2179 | + fgkSSDCoolingBlockHoleRadius[1]) | |
2180 | + fgkSSDCoolingBlockHeight[2]); | |
2181 | coolingblockboxtrans[1] = new TGeoTranslation("CoolingBlockBoxTrans1", | |
2182 | 0.0, | |
2183 | 0.0, | |
2184 | 0.5*(fgkSSDCoolingBlockHeight[1] | |
2185 | + fgkSSDCoolingBlockHeight[2])); | |
2186 | for(Int_t i=0; i<kboxnumber-1; i++) coolingblockboxtrans[i]->RegisterYourself(); | |
2187 | new TGeoCompositeShape("CoolingBlockBoxCompositeShape", | |
2188 | "CoolingBlockBoxShape0:CoolingBlockBoxTrans0+" | |
2189 | "CoolingBlockBoxShape1:CoolingBlockBoxTrans1+CoolingBlockBoxShape2"); | |
2190 | /////////////////////// | |
2191 | // Cooling Block Shape | |
2192 | ////////////////////// | |
2193 | TGeoCombiTrans* coolingtubeholeshapecombitrans = | |
2194 | new TGeoCombiTrans("CoolingTubeHoleShapeCombiTrans", | |
2195 | 0.5*fgkSSDCoolingBlockLength, | |
2196 | 0.5*fgkSSDCoolingBlockWidth, | |
2197 | fgkSSDCoolingBlockHoleCenter, | |
2198 | new TGeoRotation("",0.,90.,0.)); | |
2199 | coolingtubeholeshapecombitrans->RegisterYourself(); | |
2200 | TGeoTranslation* coolingblocktrapezoidcompositeshapetrans = | |
2201 | new TGeoTranslation("CoolingBlockTrapezoidCompositeShapeTrans", | |
2202 | 0.0, | |
2203 | 0.0, | |
2204 | 0.5*coolingblocktrapezoidheigth[0]+fgkSSDCoolingBlockHeight[1]+ | |
2205 | fgkSSDCoolingBlockHeight[2]+fgkSSDCoolingBlockHoleRadius[1]); | |
2206 | coolingblocktrapezoidcompositeshapetrans->RegisterYourself(); | |
2207 | TGeoTranslation* coolingblockboxcompositeshapetrans = | |
2208 | new TGeoTranslation("CoolingBlockBoxCompositeShapeTrans", | |
2209 | 0.5*fgkSSDCoolingBlockLength, | |
2210 | 0.5*fgkSSDCoolingBlockWidth, | |
2211 | 0.5*fgkSSDCoolingBlockHeight[1]); | |
2212 | coolingblockboxcompositeshapetrans->RegisterYourself(); | |
2213 | TGeoCompositeShape* ssdoolingblockshape = | |
2214 | new TGeoCompositeShape("SSDCoolingBlockShape", | |
2215 | "CoolingBlockBoxCompositeShape:CoolingBlockBoxCompositeShapeTrans+" | |
2216 | "CoolingBlockTrapezoidCompositeShape:CoolingBlockTrapezoidCompositeShapeTrans-" | |
2217 | "CoolingTubeHoleShape:CoolingTubeHoleShapeCombiTrans"); | |
2218 | TGeoVolume* ssdcoolingblock = new TGeoVolume("SSDCoolingBlock", | |
2219 | ssdoolingblockshape,fSSDAlCoolBlockMedium); | |
2220 | return ssdcoolingblock; | |
2221 | } | |
2222 | ///////////////////////////////////////////////////////////////////////////////// | |
2223 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberJunction(Double_t width){ | |
2224 | ///////////////////////////////////////////////////////////// | |
2225 | // Method generating SSD Carbon Fiber Junction | |
2226 | ///////////////////////////////////////////////////////////// | |
2227 | const Int_t kvertexnumber = 4; | |
2228 | TVector3* vertex[kvertexnumber]; | |
2229 | vertex[0] = new TVector3(); | |
2230 | vertex[1] = new TVector3(fgkCarbonFiberJunctionLength,0.); | |
2231 | vertex[2] = new TVector3(fgkCarbonFiberJunctionLength | |
2232 | - fgkCarbonFiberJunctionEdge[1] | |
2233 | * TMath::Cos(fgkCarbonFiberJunctionAngle[1]*TMath::DegToRad()), | |
2234 | fgkCarbonFiberJunctionEdge[1]*TMath::Sin(fgkCarbonFiberJunctionAngle[1] | |
2235 | * TMath::DegToRad())); | |
2236 | vertex[3] = new TVector3(fgkCarbonFiberJunctionEdge[0] | |
2237 | * TMath::Cos(fgkCarbonFiberJunctionAngle[0]*TMath::DegToRad()), | |
2238 | fgkCarbonFiberJunctionEdge[0] | |
2239 | * TMath::Sin(fgkCarbonFiberJunctionAngle[0]*TMath::DegToRad())); | |
2240 | TGeoArb8* carbonfiberjunctionshapepiece = | |
2241 | new TGeoArb8("CarbonFiberJunctionShapePiece",0.5*width); | |
2242 | ////////////////////////////////// | |
2243 | //Setting the vertices in TGeoArb8 | |
2244 | ////////////////////////////////// | |
2245 | for(Int_t i = 0; i<2*kvertexnumber; i++) | |
2246 | carbonfiberjunctionshapepiece->SetVertex(i, | |
2247 | vertex[(i < kvertexnumber ? i: i-kvertexnumber)]->X(), | |
2248 | vertex[(i < kvertexnumber ? i : i-kvertexnumber)]->Y()); | |
2249 | TGeoRotation* carbonfiberjunctionrot = | |
2250 | new TGeoRotation("CarbonFiberJunctionRot", | |
2251 | 180., | |
2252 | 180., | |
2253 | 180-2.*fgkCarbonFiberJunctionAngle[0]); | |
2254 | TGeoVolume* carbonfiberjunctionpiece = | |
2255 | new TGeoVolume("CarbonFiberJunctionPiece", | |
2256 | carbonfiberjunctionshapepiece,fSSDCarbonFiberMedium); | |
2257 | TGeoVolume* carbonfiberjunction = | |
2258 | new TGeoVolumeAssembly("CarbonFiberJunction"); | |
2259 | carbonfiberjunctionpiece->SetLineColor(fColorCarbonFiber); | |
2260 | carbonfiberjunction->AddNode(carbonfiberjunctionpiece,1); | |
2261 | carbonfiberjunction->AddNode(carbonfiberjunctionpiece,2,carbonfiberjunctionrot); | |
2262 | return carbonfiberjunction; | |
2263 | } | |
2264 | ///////////////////////////////////////////////////////////////////////////////// | |
2265 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberJunctionAssembly(){ | |
2266 | ///////////////////////////////////////////////////////////// | |
2267 | // Method generating SSD Carbon Fiber Junction Assembly | |
2268 | ///////////////////////////////////////////////////////////// | |
2269 | SetCarbonFiberJunctionCombiTransMatrix(); | |
2270 | TGeoVolume* carbonfiberjunctionassembly = | |
2271 | new TGeoVolumeAssembly("CarbonFiberJunctionAssembly"); | |
2272 | TGeoVolume* carbonfiberjunction = | |
2273 | GetCarbonFiberJunction(fgkCarbonFiberJunctionWidth); | |
2274 | for(Int_t i=0; i<fgkCarbonFiberJunctionCombiTransNumber;i++) | |
2275 | carbonfiberjunctionassembly->AddNode(carbonfiberjunction,i+1, | |
2276 | fCarbonFiberJunctionCombiTransMatrix[i]); | |
2277 | return carbonfiberjunctionassembly; | |
2278 | } | |
2279 | ///////////////////////////////////////////////////////////////////////////////// | |
2280 | TList* AliITSv11GeometrySSD::GetLadderCableSegment(Double_t ssdendladdercablelength){ | |
2281 | ///////////////////////////////////////////////////////////// | |
2282 | // Method returning a List containing pointers to Ladder Cable Volumes | |
2283 | ///////////////////////////////////////////////////////////// | |
2284 | const Int_t kladdercablesegmentnumber = 2; | |
2285 | ///////////////////////////////////////// | |
2286 | // LadderSegmentBBox Volume | |
2287 | ///////////////////////////////////////// | |
2288 | TGeoBBox* laddercablesegmentbboxshape[kladdercablesegmentnumber]; | |
2289 | const char* laddercablesegmentbboxshapename[kladdercablesegmentnumber] = | |
2290 | {"LadderCableSegmentBBoxShape1","LadderCableSegmentBBoxShape2"}; | |
2291 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) laddercablesegmentbboxshape[i] = | |
2292 | new TGeoBBox(laddercablesegmentbboxshapename[i], | |
2293 | 0.5*fgkSSDFlexWidth[0], | |
2294 | 0.5*fgkSSDLadderCableWidth, | |
2295 | 0.5*fgkSSDFlexHeight[i]); | |
2296 | const char* laddercablesegmentbboxname[kladdercablesegmentnumber] = | |
2297 | {"LadderCableSegmentBBox1","LadderCableSegmentBBox2"}; | |
2298 | TGeoVolume* laddercablesegmentbbox[kladdercablesegmentnumber]; | |
2299 | for(Int_t i=0; i<kladdercablesegmentnumber; i++){ | |
2300 | laddercablesegmentbbox[i] = | |
2301 | new TGeoVolume(laddercablesegmentbboxname[i], | |
2302 | laddercablesegmentbboxshape[i], | |
2303 | (i==0?fSSDAlTraceLadderCableMedium: | |
2304 | fSSDKaptonLadderCableMedium)); | |
2305 | laddercablesegmentbbox[i]->SetLineColor(i==0 ? fColorAl : | |
2306 | fColorPolyhamide); | |
2307 | } | |
2308 | TGeoTranslation* laddercablesegmentbboxtrans[kladdercablesegmentnumber]; | |
2309 | laddercablesegmentbboxtrans[0] = | |
2310 | new TGeoTranslation("LadderCableSegmentBBoxTrans1", | |
2311 | 0.5*fgkSSDFlexWidth[0], | |
2312 | 0.5*fgkSSDLadderCableWidth, | |
2313 | 0.5*fgkSSDFlexHeight[0]); | |
2314 | laddercablesegmentbboxtrans[1] = | |
2315 | new TGeoTranslation("LadderCableSegmentBBoxTrans2", | |
2316 | 0.5*fgkSSDFlexWidth[0], | |
2317 | 0.5*fgkSSDLadderCableWidth, | |
2318 | fgkSSDFlexHeight[0] | |
2319 | +0.5*fgkSSDFlexHeight[1]); | |
2320 | TGeoVolume* laddercablesegmentbboxassembly = | |
2321 | new TGeoVolumeAssembly("LadderCableSegmentBBoxAssembly"); | |
2322 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) | |
2323 | laddercablesegmentbboxassembly->AddNode(laddercablesegmentbbox[i],1, | |
2324 | laddercablesegmentbboxtrans[i]); | |
2325 | ///////////////////////////////////////// | |
2326 | // LadderSegmentArb8 Volume | |
2327 | ///////////////////////////////////////// | |
2328 | const Int_t kvertexnumber = 4; | |
2329 | TVector3** laddercablesegmentvertexposition[kladdercablesegmentnumber]; | |
2330 | for(Int_t i = 0; i<kladdercablesegmentnumber; i++) laddercablesegmentvertexposition[i] = | |
2331 | new TVector3*[kvertexnumber]; | |
2332 | //Shape Vertex Positioning | |
2333 | for(Int_t i=0; i<kladdercablesegmentnumber; i++){ | |
2334 | laddercablesegmentvertexposition[i][0] = new TVector3(0.,i*fgkSSDFlexHeight[0]); | |
2335 | laddercablesegmentvertexposition[i][1] = new TVector3(fgkSSDLadderCableWidth, | |
2336 | i*fgkSSDFlexHeight[0]); | |
2337 | laddercablesegmentvertexposition[i][2] = new TVector3(0.,fgkSSDFlexHeight[0] | |
2338 | + fgkSSDFlexHeight[1] | |
2339 | + i*fgkSSDFlexHeight[0]); | |
2340 | laddercablesegmentvertexposition[i][3] = | |
2341 | new TVector3(laddercablesegmentvertexposition[i][1]->X(), | |
2342 | laddercablesegmentvertexposition[i][2]->Y()); | |
2343 | } | |
2344 | Double_t laddercablesegmentwidth[2][2] = {{fgkSSDFlexHeight[0],fgkSSDFlexHeight[0]}, | |
2345 | {fgkSSDFlexHeight[1],fgkSSDFlexHeight[1]}}; | |
2346 | char* laddercablesegmentarbshapename[kladdercablesegmentnumber] = | |
2347 | {"LadderCableSegmentArbShape1","LadderCableSegmentArbShape2"}; | |
2348 | TGeoArb8* laddercablesegmentarbshape[kladdercablesegmentnumber]; | |
2349 | for(Int_t i = 0; i< kladdercablesegmentnumber; i++) laddercablesegmentarbshape[i] = | |
2350 | GetArbShape(laddercablesegmentvertexposition[i], | |
2351 | laddercablesegmentwidth[i], | |
2352 | fgkCarbonFiberJunctionWidth-fgkSSDFlexWidth[0], | |
2353 | laddercablesegmentarbshapename[i]); | |
2354 | const char* laddercablesegmentarbname[kladdercablesegmentnumber] = | |
2355 | {"LadderCableSegmentArb1","LadderCableSegmentArb2"}; | |
2356 | TGeoVolume* laddercablesegmentarb[kladdercablesegmentnumber]; | |
2357 | for(Int_t i=0; i<kladdercablesegmentnumber; i++){ | |
2358 | laddercablesegmentarb[i] = | |
2359 | new TGeoVolume(laddercablesegmentarbname[i], | |
2360 | laddercablesegmentarbshape[i], | |
2361 | (i==0?fSSDAlTraceLadderCableMedium: | |
2362 | fSSDKaptonLadderCableMedium)); | |
2363 | laddercablesegmentarb[i]->SetLineColor(i==0 ? fColorAl : | |
2364 | fColorPolyhamide); | |
2365 | } | |
2366 | TGeoRotation* laddercablesegmentarbrot[kladdercablesegmentnumber]; | |
2367 | laddercablesegmentarbrot[0] = new TGeoRotation("LadderCableSegmentArbRot1", | |
2368 | 90.,90,-90.); | |
2369 | laddercablesegmentarbrot[1] = new TGeoRotation("LadderCableSegmentArbRot2", | |
2370 | 0.,90.,0.); | |
2371 | TGeoCombiTrans* laddercablesegmentarbcombitrans = | |
2372 | new TGeoCombiTrans("LadderCableSegmentArbCombiTrans", | |
2373 | 0.5*(fgkCarbonFiberJunctionWidth-fgkSSDFlexWidth[0]) | |
2374 | + fgkSSDFlexWidth[0],0.,0., | |
2375 | new TGeoRotation((*laddercablesegmentarbrot[1]) | |
2376 | *(*laddercablesegmentarbrot[0]))); | |
2377 | TGeoVolume* laddercablesegmentarbassembly = | |
2378 | new TGeoVolumeAssembly("LadderCableSegmentArbAssembly"); | |
2379 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) | |
2380 | laddercablesegmentarbassembly->AddNode(laddercablesegmentarb[i],1, | |
2381 | laddercablesegmentarbcombitrans); | |
2382 | ///////////////////////////////////////// | |
2383 | // End Ladder Cable Volume | |
2384 | ///////////////////////////////////////// | |
2385 | TGeoBBox* ladderendcablesegmentbboxshape[kladdercablesegmentnumber]; | |
2386 | const char* ladderendcablesegmentbboxshapename[kladdercablesegmentnumber] = | |
2387 | {"LadderEndCableSegmentBBoxShape1","LadderEndCableSegmentBBoxShape2"}; | |
2388 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) ladderendcablesegmentbboxshape[i] = | |
2389 | new TGeoBBox(ladderendcablesegmentbboxshapename[i], | |
2390 | 0.5*ssdendladdercablelength, | |
2391 | 0.5*fgkSSDLadderCableWidth, | |
2392 | 0.5*fgkSSDFlexHeight[i]); | |
2393 | const char* ladderendcablesegmentbboxname[kladdercablesegmentnumber] = | |
2394 | {"LadderEndCableSegmentBBox1","LadderEndCableSegmentBBox2"}; | |
2395 | TGeoVolume* ladderendcablesegmentbbox[kladdercablesegmentnumber]; | |
2396 | for(Int_t i=0; i<kladdercablesegmentnumber; i++){ | |
2397 | ladderendcablesegmentbbox[i] = | |
2398 | new TGeoVolume(ladderendcablesegmentbboxname[i], | |
2399 | ladderendcablesegmentbboxshape[i], | |
2400 | (i==0?fSSDAlTraceLadderCableMedium: | |
2401 | fSSDKaptonLadderCableMedium)); | |
2402 | ladderendcablesegmentbbox[i]->SetLineColor(i==0 ? fColorAl : | |
2403 | fColorPolyhamide); | |
2404 | } | |
2405 | TGeoTranslation* ladderendcablesegmentbboxtrans[kladdercablesegmentnumber]; | |
2406 | ladderendcablesegmentbboxtrans[0] = | |
2407 | new TGeoTranslation("LadderEndCableSegmentBBoxTrans0", | |
2408 | 0.5*ssdendladdercablelength, | |
2409 | 0.5*fgkSSDLadderCableWidth, | |
2410 | 0.5*fgkSSDFlexHeight[0]); | |
2411 | ladderendcablesegmentbboxtrans[1] = | |
2412 | new TGeoTranslation("LadderEndCableSegmentBBoxTrans1", | |
2413 | 0.5*ssdendladdercablelength, | |
2414 | 0.5*fgkSSDLadderCableWidth, | |
2415 | fgkSSDFlexHeight[0] | |
2416 | +0.5*fgkSSDFlexHeight[1]); | |
2417 | TGeoVolume* ladderendcablesegmentbboxassembly = | |
2418 | new TGeoVolumeAssembly("LadderEndCableSegmentBBoxAssembly"); | |
2419 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) | |
2420 | ladderendcablesegmentbboxassembly->AddNode(ladderendcablesegmentbbox[i],1, | |
2421 | ladderendcablesegmentbboxtrans[i]); | |
2422 | ///////////////////////////////////////// | |
2423 | TList* laddercablesegmentlist = new TList(); | |
2424 | laddercablesegmentlist->Add(laddercablesegmentbboxassembly); | |
2425 | laddercablesegmentlist->Add(laddercablesegmentarbassembly); | |
2426 | laddercablesegmentlist->Add(ladderendcablesegmentbboxassembly); | |
2427 | return laddercablesegmentlist; | |
2428 | } | |
2429 | ///////////////////////////////////////////////////////////////////////////////// | |
2430 | TGeoVolume* AliITSv11GeometrySSD::GetLadderCable(Int_t n, Double_t ssdendladdercablelength){ | |
2431 | ///////////////////////////////////////////////////////////// | |
2432 | // Method generating Ladder Cable Volumes Assemblies | |
2433 | ///////////////////////////////////////////////////////////// | |
2434 | TList* laddercablesegmentlist = GetLadderCableSegment(ssdendladdercablelength); | |
2435 | TGeoVolume* laddercable = new TGeoVolumeAssembly("LadderCable"); | |
2436 | for(Int_t i=0; i<n; i++){ | |
2437 | TGeoTranslation* laddercabletrans = new TGeoTranslation( | |
2438 | i*(fgkCarbonFiberJunctionWidth), | |
2439 | fgkSSDLadderCableWidth-fgkSSDFlexWidth[0], | |
2440 | i*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1])); | |
2441 | laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(0),i+1,laddercabletrans); | |
2442 | if(i!=n-1) laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(1),i+1,laddercabletrans); | |
2443 | } | |
2444 | TGeoTranslation* endladdercabletrans = new TGeoTranslation("EndLadderCableTrans", | |
2445 | (n-1)*fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0], | |
2446 | fgkSSDLadderCableWidth-fgkSSDFlexWidth[0], | |
2447 | (n-1)*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1])); | |
2448 | laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(2),1,endladdercabletrans); | |
2449 | return laddercable; | |
2450 | } | |
2451 | ///////////////////////////////////////////////////////////////////////////////// | |
2452 | TGeoVolume* AliITSv11GeometrySSD::GetLadderCableAssembly(Int_t n, Double_t ssdendladdercablelength){ | |
2453 | ///////////////////////////////////////////////////////////// | |
2454 | // Method generating Ladder Cable Volumes Assembly | |
2455 | ///////////////////////////////////////////////////////////// | |
2456 | TGeoVolume* laddercableassembly = new TGeoVolumeAssembly("LadderCableAssembly"); | |
2457 | char laddercabletransname[30]; | |
2458 | for(Int_t i=0; i<n; i++){ | |
2459 | sprintf(laddercabletransname,"LadderCableTrans%i",i+1); | |
2460 | laddercableassembly->AddNode(GetLadderCable(n-i,ssdendladdercablelength),i+1, | |
2461 | new TGeoTranslation(laddercabletransname,i*fgkCarbonFiberJunctionWidth,0.,0.)); | |
2462 | } | |
2463 | return laddercableassembly; | |
2464 | } | |
2465 | ///////////////////////////////////////////////////////////////////////////////// | |
2466 | TList* AliITSv11GeometrySSD::GetLadderCableAssemblyList(Int_t n, Double_t ssdendladdercablelength){ | |
2467 | ///////////////////////////////////////////////////////////// | |
2468 | // Method generating Ladder Cable List Assemblies | |
2469 | ///////////////////////////////////////////////////////////// | |
2470 | const Int_t kladdercableassemblynumber = 2; | |
2471 | TGeoVolume* laddercableassembly = GetLadderCableAssembly(n,ssdendladdercablelength); | |
2472 | TGeoVolume* ladderCable[kladdercableassemblynumber]; | |
2473 | char laddercableassemblyname[30]; | |
2474 | TList* laddercableassemblylist = new TList(); | |
2475 | for(Int_t i=0; i<kladdercableassemblynumber; i++){ | |
2476 | sprintf(laddercableassemblyname,"LadderCableAssembly%i",i+1); | |
2477 | ladderCable[i] = new TGeoVolumeAssembly(laddercableassemblyname); | |
2478 | ladderCable[i]->AddNode(laddercableassembly,i+1,i==0 ? NULL : | |
2479 | new TGeoCombiTrans((n-1) | |
2480 | * fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0], | |
2481 | 2.*fgkSSDLadderCableWidth+0.5*fgkSSDFlexWidth[0], | |
2482 | 0.,new TGeoRotation("",180,0.,0.))); | |
2483 | laddercableassemblylist->Add(ladderCable[i]); | |
2484 | } | |
2485 | return laddercableassemblylist; | |
2486 | } | |
2487 | ///////////////////////////////////////////////////////////////////////////////// | |
2488 | TList* AliITSv11GeometrySSD::GetEndLadderCarbonFiberJunctionAssembly(){ | |
2489 | ///////////////////////////////////////////////////////////// | |
2490 | // Method generating the End Ladder Carbon Fiber Junction Assembly | |
2491 | ///////////////////////////////////////////////////////////// | |
2492 | const Int_t kendlabbercarbonfiberjunctionumber = 2; | |
2493 | TGeoVolume* endladdercarbonfiberjunctionassembly[kendlabbercarbonfiberjunctionumber]; | |
2494 | endladdercarbonfiberjunctionassembly[0] = | |
2495 | new TGeoVolumeAssembly("EndLadderCarbonFiberJunctionAssembly1"); | |
2496 | endladdercarbonfiberjunctionassembly[1] = | |
2497 | new TGeoVolumeAssembly("EndLadderCarbonFiberJunctionAssembly2"); | |
2498 | TGeoVolume** endladdercarbonfiberjunction[kendlabbercarbonfiberjunctionumber]; | |
2499 | for(Int_t i=0; i<kendlabbercarbonfiberjunctionumber; i++) | |
2500 | endladdercarbonfiberjunction[i] = new TGeoVolume*[2]; | |
2501 | for(Int_t i=0; i<kendlabbercarbonfiberjunctionumber; i++){ | |
2502 | endladdercarbonfiberjunction[i][0] = | |
2503 | GetCarbonFiberJunction(fgkEndLadderCarbonFiberLowerJunctionLength[i]); | |
2504 | endladdercarbonfiberjunction[i][1] = | |
2505 | GetCarbonFiberJunction(fgkEndLadderCarbonFiberUpperJunctionLength[i]); | |
2506 | } | |
2507 | TList* endladdercarbonfiberjunctionlist = new TList(); | |
2508 | for(Int_t i=0; i<kendlabbercarbonfiberjunctionumber; i++){ | |
2509 | SetEndLadderCarbonFiberJunctionCombiTransMatrix(i); | |
2510 | for(Int_t j=0; j<fgkCarbonFiberJunctionCombiTransNumber; j++) | |
2511 | endladdercarbonfiberjunctionassembly[i]->AddNode(j==2 ? | |
2512 | endladdercarbonfiberjunction[i][1] : | |
2513 | endladdercarbonfiberjunction[i][0], | |
2514 | j+1,fEndLadderCarbonFiberJunctionCombiTransMatrix[j]); | |
2515 | endladdercarbonfiberjunctionlist->Add(endladdercarbonfiberjunctionassembly[i]); | |
2516 | } | |
2517 | return endladdercarbonfiberjunctionlist; | |
2518 | } | |
2519 | //////////////////////////////////////////////////////////////////////////////// | |
2520 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberSupport(){ | |
2521 | ///////////////////////////////////////////////////////////// | |
2522 | // Method generating the Carbon Fiber Support | |
2523 | ///////////////////////////////////////////////////////////// | |
2524 | const Int_t kvertexnumber = 4; | |
2525 | const Int_t kshapesnumber = 2; | |
2526 | TVector3** vertexposition[kshapesnumber]; | |
2527 | for(Int_t i=0; i<kshapesnumber; i++) vertexposition[i] = new TVector3*[kvertexnumber]; | |
2528 | Double_t carbonfibersupportxaxisEdgeproj = | |
2529 | fgkCarbonFiberSupportEdgeLength*TMath::Cos(fgkCarbonFiberJunctionAngle[0] | |
2530 | * TMath::DegToRad()); | |
2531 | Double_t theta = TMath::ATan(fgkCarbonFiberSupportYAxisLength | |
2532 | / fgkCarbonFiberSupportXAxisLength); | |
2533 | ///////////////////// | |
2534 | //Vertex Positioning | |
2535 | //////////////////// | |
2536 | vertexposition[0][0] = new TVector3(); | |
2537 | vertexposition[0][1] = new TVector3(fgkCarbonFiberSupportXAxisLength, | |
2538 | fgkCarbonFiberSupportYAxisLength); | |
2539 | vertexposition[0][2] = new TVector3(carbonfibersupportxaxisEdgeproj, | |
2540 | carbonfibersupportxaxisEdgeproj | |
2541 | * TMath::Tan(theta)); | |
2542 | vertexposition[0][3] = new TVector3(fgkCarbonFiberSupportXAxisLength | |
2543 | - carbonfibersupportxaxisEdgeproj, | |
2544 | fgkCarbonFiberSupportYAxisLength | |
2545 | - vertexposition[0][2]->Y()); | |
2546 | //////////////////////////////////////////////////// | |
2547 | //Setting the parameters for Isometry Transformation | |
2548 | //////////////////////////////////////////////////// | |
2549 | Double_t symmetryplaneposition = (fgkCarbonFiberSupportYAxisLength | |
2550 | + fgkCarbonFiberSupportTopEdgeDist[0] | |
2551 | + fgkCarbonFiberSupportWidth); | |
2552 | Double_t* param = new Double_t[4]; | |
2553 | param[0] = 0., param[1] = 1., param[2] = 0., param[3] = -symmetryplaneposition; | |
2554 | for(Int_t j=0; j<kvertexnumber; j++) vertexposition[1][j] = | |
2555 | new TVector3((GetReflection(vertexposition[0][j],param))->X(), | |
2556 | (GetReflection(vertexposition[0][j],param))->Y()); | |
2557 | char* carbonfibersupportshapename[kshapesnumber] = | |
2558 | {"CarbonFiberSupportShape1","CarbonFiberSupportShape2"}; | |
2559 | TGeoArb8* carbonfibersupportshape[kshapesnumber]; | |
2560 | Double_t width[2] = {fgkCarbonFiberSupportWidth,fgkCarbonFiberSupportWidth}; | |
2561 | Double_t carbonfibersupportheight = | |
2562 | carbonfibersupportxaxisEdgeproj*TMath::Tan(fgkCarbonFiberJunctionAngle[0] | |
2563 | *TMath::DegToRad()); | |
2564 | for(Int_t i = 0; i< kshapesnumber; i++) carbonfibersupportshape[i] = | |
2565 | GetArbShape(vertexposition[i],width,carbonfibersupportheight, | |
2566 | carbonfibersupportshapename[i],i==0 ? 1: -1); | |
2567 | ///////////////////////////////////// | |
2568 | //Setting Translations and Rotations: | |
2569 | ///////////////////////////////////// | |
2570 | TGeoTranslation* carbonfibersupporttrans = | |
2571 | new TGeoTranslation("CarbonFiberSupportTrans", | |
2572 | 0.0,0.0,0.5*carbonfibersupportheight); | |
2573 | carbonfibersupporttrans->RegisterYourself(); | |
2574 | TGeoRotation* carbonfibercompshaperot[2]; | |
2575 | carbonfibercompshaperot[0] = new TGeoRotation("CarbonFiberCompShapeRot1", | |
2576 | 0.0,180.0,0.0); | |
2577 | carbonfibercompshaperot[1] = new TGeoRotation("CarbonFiberCompShapeRot2", | |
2578 | 90.,-fgkCarbonFiberTriangleAngle,-90.); | |
2579 | Double_t transvector[3] = {fgkCarbonFiberTriangleLength | |
2580 | * TMath::Cos(fgkCarbonFiberTriangleAngle | |
2581 | * TMath::DegToRad()),0.,-fgkCarbonFiberTriangleLength | |
2582 | * TMath::Sin(fgkCarbonFiberTriangleAngle | |
2583 | * TMath::DegToRad())}; | |
2584 | TGeoCombiTrans* carbonfibersupportcombitrans = | |
2585 | new TGeoCombiTrans("CarbonFiberSupportCombiTrans", | |
2586 | transvector[0],2.*symmetryplaneposition | |
2587 | + transvector[1],transvector[2], | |
2588 | new TGeoRotation((*carbonfibercompshaperot[1]) | |
2589 | * (*carbonfibercompshaperot[0]))); | |
2590 | carbonfibersupportcombitrans->RegisterYourself(); | |
2591 | //////////////////////////////////////////////////////////////////////////////// | |
2592 | TGeoCompositeShape* carbonfibersupportcompshape = | |
2593 | new TGeoCompositeShape("CarbonFiberSupportCompShape", | |
2594 | "CarbonFiberSupportShape1:CarbonFiberSupportTrans+" | |
2595 | "CarbonFiberSupportShape2:CarbonFiberSupportTrans"); | |
2596 | TGeoVolume* carbonfibersupport = new TGeoVolume("CarbonFiberSupport", | |
2597 | carbonfibersupportcompshape,fSSDCarbonFiberMedium); | |
2598 | carbonfibersupport->SetLineColor(fColorCarbonFiber); | |
2599 | TGeoVolume* carbonfibersupportassembly = | |
2600 | new TGeoVolumeAssembly("CarbonFiberSupportAssembly"); | |
2601 | carbonfibersupportassembly->AddNode(carbonfibersupport,1); | |
2602 | carbonfibersupportassembly->AddNode(carbonfibersupport,2, | |
2603 | carbonfibersupportcombitrans); | |
2604 | return carbonfibersupportassembly; | |
2605 | } | |
2606 | //////////////////////////////////////////////////////////////////////////////// | |
2607 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberLowerSupport(Int_t ikind, Bool_t EndLadder){ | |
2608 | ///////////////////////////////////////////////////////////// | |
2609 | // Method generating the Carbon Fiber Lower Support | |
2610 | ///////////////////////////////////////////////////////////// | |
2611 | const Int_t kvertexnumber = 4; | |
2612 | const Int_t kshapesnumber = 2; | |
2613 | Double_t width[2] = {fgkCarbonFiberLowerSupportWidth, | |
2614 | fgkCarbonFiberLowerSupportWidth}; | |
2615 | TVector3** vertexposition[kshapesnumber]; | |
2616 | for(Int_t i = 0; i<kshapesnumber; i++) vertexposition[i] = | |
2617 | new TVector3*[kvertexnumber]; | |
2618 | //First Shape Vertex Positioning | |
2619 | vertexposition[0][0] = new TVector3(fgkCarbonFiberLowerSupportLowerLenght); | |
2620 | vertexposition[0][1] = new TVector3(fgkCarbonFiberTriangleLength | |
2621 | - fgkCarbonFiberLowerSupportLowerLenght); | |
2622 | vertexposition[0][2] = new TVector3(); | |
2623 | vertexposition[0][3] = new TVector3(fgkCarbonFiberTriangleLength); | |
2624 | //Second Shape Vertex Positioning | |
2625 | Double_t theta = TMath::ATan((fgkCarbonFiberLowerSupportVolumePosition[1] | |
2626 | - fgkCarbonFiberLowerSupportVolumePosition[0]) | |
2627 | / fgkCarbonFiberTriangleLength); | |
2628 | vertexposition[1][0] = new TVector3(vertexposition[0][0]->X(), | |
2629 | vertexposition[0][0]->X()*TMath::Tan(theta) | |
2630 | + fgkCarbonFiberLowerSupportVolumePosition[0]); | |
2631 | vertexposition[1][1] = new TVector3(vertexposition[0][1]->X(), | |
2632 | vertexposition[0][1]->X()*TMath::Tan(theta) | |
2633 | + fgkCarbonFiberLowerSupportVolumePosition[0]); | |
2634 | vertexposition[1][2] = new TVector3(0.,fgkCarbonFiberLowerSupportVolumePosition[0]); | |
2635 | vertexposition[1][3] = new TVector3(fgkCarbonFiberTriangleLength, | |
2636 | fgkCarbonFiberLowerSupportVolumePosition[1]); | |
2637 | char* carbonfiberlowersupportname[kshapesnumber] = | |
2638 | {"CarbonFiberLowerSupportShape1","CarbonFiberLowerSupportShape2"}; | |
2639 | TGeoArb8* carbonfiberlowersupportshape[kshapesnumber]; | |
2640 | for(Int_t i = 0; i< kshapesnumber; i++) carbonfiberlowersupportshape[i] = | |
2641 | GetArbShape(vertexposition[i],width, | |
2642 | fgkCarbonFiberLowerSupportHeight, | |
2643 | carbonfiberlowersupportname[i]); | |
2644 | /////////////////////////////////////////////////////// | |
2645 | TGeoTranslation* carbonfiberlowersupporttrans[kshapesnumber]; | |
2646 | carbonfiberlowersupporttrans[0] = | |
2647 | new TGeoTranslation("CarbonFiberLowerSupportTrans1", | |
2648 | 0.0, | |
2649 | vertexposition[1][3]->Y()+vertexposition[1][2]->Y(), | |
2650 | 0.0); | |
2651 | carbonfiberlowersupporttrans[1] = | |
2652 | new TGeoTranslation("CarbonFiberLowerSupportTrans2", | |
2653 | 0.0, | |
2654 | - vertexposition[1][3]->Y()-vertexposition[1][2]->Y(), | |
2655 | 0.0); | |
2656 | for(Int_t i = 0; i< kshapesnumber; i++) | |
2657 | carbonfiberlowersupporttrans[i]->RegisterYourself(); | |
2658 | /////////////////////////////////////////////////////// | |
2659 | TGeoCompositeShape* carbonfiberlowersupportcompshape; | |
2660 | if(EndLadder==false) | |
2661 | carbonfiberlowersupportcompshape = | |
2662 | new TGeoCompositeShape("CarbonFiberLowerSupportCompShape", | |
2663 | "CarbonFiberLowerSupportShape2+" | |
2664 | "CarbonFiberLowerSupportShape1:CarbonFiberLowerSupportTrans1"); | |
2665 | else | |
2666 | if(ikind==0) | |
2667 | carbonfiberlowersupportcompshape = | |
2668 | (TGeoCompositeShape*)carbonfiberlowersupportshape[0]; | |
2669 | else | |
2670 | carbonfiberlowersupportcompshape = | |
2671 | new TGeoCompositeShape("CarbonFiberLowerSupportCompShape", | |
2672 | "CarbonFiberLowerSupportShape1+" | |
2673 | "CarbonFiberLowerSupportShape1:CarbonFiberLowerSupportTrans1"); | |
2674 | TGeoVolume* carbonfiberlowersupport = new TGeoVolume("CarbonFiberLowerSupport", | |
2675 | carbonfiberlowersupportcompshape,fSSDCarbonFiberMedium); | |
2676 | carbonfiberlowersupport->SetLineColor(fColorCarbonFiber); | |
2677 | return carbonfiberlowersupport; | |
2678 | } | |
2679 | //////////////////////////////////////////////////////////////////////////////// | |
2680 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberAssemblySupport(){ | |
2681 | ///////////////////////////////////////////////////////////// | |
2682 | // Method generating the Carbon Fiber Assembly Support | |
2683 | ///////////////////////////////////////////////////////////// | |
2684 | SetCarbonFiberAssemblyCombiTransMatrix(); | |
2685 | TGeoVolume* carbonfiberassemblysupport = | |
2686 | new TGeoVolumeAssembly("CarbonFiberAssembly"); | |
2687 | TGeoVolume* carbonfiberassemblyvolumes[fgkCarbonFiberAssemblyCombiTransNumber]; | |
2688 | carbonfiberassemblyvolumes[0] = GetCarbonFiberJunctionAssembly(); | |
2689 | carbonfiberassemblyvolumes[1] = GetCarbonFiberSupport(); | |
2690 | carbonfiberassemblyvolumes[2] = GetCarbonFiberLowerSupport(); | |
2691 | for(Int_t i=0; i<fgkCarbonFiberAssemblyCombiTransNumber;i++) | |
2692 | carbonfiberassemblysupport->AddNode(carbonfiberassemblyvolumes[i],1, | |
2693 | fCarbonFiberAssemblyCombiTransMatrix[i]); | |
2694 | return carbonfiberassemblysupport; | |
2695 | } | |
2696 | //////////////////////////////////////////////////////////////////////////////// | |
2697 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeSupport(){ | |
2698 | ///////////////////////////////////////////////////////////// | |
2699 | // Method generating the Cooling Tube Support | |
2700 | ///////////////////////////////////////////////////////////// | |
2701 | const Int_t kvertexnumber = 3; | |
2702 | Double_t phi = TMath::ASin(0.5*fgkCoolingTubeSupportHeight | |
2703 | / fgkCoolingTubeSupportRmax)*TMath::RadToDeg(); | |
2704 | new TGeoTubeSeg("CoolingTubeSegShape",0.0, | |
2705 | fgkCoolingTubeSupportRmax, | |
2706 | 0.5*fgkCoolingTubeSupportWidth,phi, | |
2707 | 360-phi); | |
2708 | new TGeoTube("CoolingTubeHoleShape",0.0, | |
2709 | fgkCoolingTubeSupportRmin, | |
2710 | 0.5*fgkCoolingTubeSupportWidth); | |
2711 | TVector3* vertexposition[kvertexnumber]; | |
2712 | /////////////////////////// | |
2713 | //Shape Vertex Positioning | |
2714 | /////////////////////////// | |
2715 | vertexposition[0] = new TVector3(); | |
2716 | vertexposition[1] = new TVector3(fgkCoolingTubeSupportRmax | |
2717 | * TMath::Cos(phi*TMath::DegToRad()), | |
2718 | fgkCoolingTubeSupportRmax | |
2719 | * TMath::Sin(phi*TMath::DegToRad())); | |
2720 | vertexposition[2] = new TVector3(vertexposition[1]->X(), | |
2721 | - vertexposition[1]->Y()); | |
2722 | GetTriangleShape(vertexposition, | |
2723 | fgkCoolingTubeSupportWidth, | |
2724 | "CoolingTubeTriangleShape"); | |
2725 | Double_t* boxorigin = new Double_t[3]; | |
2726 | Double_t boxlength = fgkCoolingTubeSupportLength-fgkCoolingTubeSupportRmax | |
2727 | - vertexposition[1]->X(); | |
2728 | boxorigin[0] = vertexposition[1]->X()+0.5*boxlength, boxorigin[1] = boxorigin[2] = 0.; | |
2729 | new TGeoBBox("CoolingTubeBoxShape",0.5*boxlength, | |
2730 | 0.5*fgkCoolingTubeSupportHeight, | |
2731 | 0.5*fgkCoolingTubeSupportWidth,boxorigin); | |
2732 | TGeoCompositeShape* coolingtubesupportshape = | |
2733 | new TGeoCompositeShape("CoolingTubeSupportShape", | |
2734 | "(CoolingTubeSegShape+CoolingTubeTriangleShape" | |
2735 | "+CoolingTubeBoxShape)-CoolingTubeHoleShape"); | |
2736 | TGeoVolume* coolingtubesupport = new TGeoVolume("CoolingTubeSupport", | |
2737 | coolingtubesupportshape,fSSDTubeHolderMedium); | |
2738 | return coolingtubesupport; | |
2739 | } | |
2740 | //////////////////////////////////////////////////////////////////////////////// | |
2741 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeSupportAssembly(){ | |
2742 | ///////////////////////////////////////////////////////////// | |
2743 | // Method generating the Cooling Tube Support Assembly | |
2744 | ///////////////////////////////////////////////////////////// | |
2745 | TGeoVolume* coolingtubesupportassembly = | |
2746 | new TGeoVolumeAssembly("CoolingTubeSupportAssembly"); | |
2747 | TGeoVolume* coolingtubesupport = GetCoolingTubeSupport(); | |
2748 | SetCoolingTubeSupportCombiTransMatrix(); | |
2749 | for(Int_t i=0; i<fgkCoolingTubeSupportCombiTransNumber;i++) | |
2750 | coolingtubesupportassembly->AddNode(coolingtubesupport,i+1, | |
2751 | fCoolingTubeSupportCombiTransMatrix[i]); | |
2752 | return coolingtubesupportassembly; | |
2753 | } | |
2754 | //////////////////////////////////////////////////////////////////////////////// | |
2755 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTube() const{ | |
2756 | ///////////////////////////////////////////////////////////// | |
2757 | // Method generating the Cooling Tube | |
2758 | ///////////////////////////////////////////////////////////// | |
2759 | TGeoVolume* coolingtubeassembly = new TGeoVolumeAssembly("CoolingTubeAssembly"); | |
2760 | TGeoTube *coolingtubeshape = new TGeoTube("CoolingTubeShape", fgkCoolingTubeRmin, | |
2761 | fgkCoolingTubeRmax, fgkCoolingTubeLength/2.0); | |
2762 | TGeoVolume* coolingtube = new TGeoVolume("CoolingTube", | |
2763 | coolingtubeshape,fSSDCoolingTubePhynox); | |
2764 | TGeoTube *coolingtubeinteriorshape = new TGeoTube("CoolingTubeInteriorShape", | |
2765 | 0, fgkCoolingTubeRmin, | |
2766 | fgkCoolingTubeLength/2.0); | |
2767 | TGeoVolume *coolingtubeinterior = new TGeoVolume("CoolingTubeInterior", | |
2768 | coolingtubeinteriorshape,fSSDCoolingTubeWater); | |
2769 | coolingtubeassembly->AddNode(coolingtube,1); | |
2770 | coolingtubeassembly->AddNode(coolingtubeinterior,2); | |
2771 | return coolingtubeassembly; | |
2772 | } | |
2773 | //////////////////////////////////////////////////////////////////////////////// | |
2774 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeAssembly(){ | |
2775 | ///////////////////////////////////////////////////////////// | |
2776 | // Method generating the Cooling Tube Assembly | |
2777 | ///////////////////////////////////////////////////////////// | |
2778 | TGeoVolume* coolingtubeassembly = new TGeoVolumeAssembly("CoolingTubeAssembly"); | |
2779 | TGeoVolume* coolingtube = GetCoolingTube(); | |
2780 | SetCoolingTubeCombiTransMatrix(); | |
2781 | for(Int_t i=0; i<fgkCoolingTubeCombiTransNumber;i++) | |
2782 | coolingtubeassembly->AddNode(coolingtube,i+1,fCoolingTubeTransMatrix[i]); | |
2783 | return coolingtubeassembly; | |
2784 | } | |
2785 | //////////////////////////////////////////////////////////////////////////////// | |
2786 | TGeoVolume* AliITSv11GeometrySSD::GetLadderSegment(Int_t iChipCablesHeight){ | |
2787 | ///////////////////////////////////////////////////////////// | |
2788 | // Method generating the basic Ladder Segment element which will be replicated | |
2789 | ///////////////////////////////////////////////////////////// | |
2790 | TGeoVolume*laddersegment = new TGeoVolumeAssembly("LadderSegment"); | |
2791 | TGeoVolume* laddersegmentvolumes[fgkLadderSegmentCombiTransNumber]; | |
2792 | laddersegmentvolumes[0] = GetCarbonFiberAssemblySupport(); | |
2793 | laddersegmentvolumes[1] = GetSSDModule(iChipCablesHeight); | |
2794 | laddersegmentvolumes[2] = GetSSDSensorSupportAssembly(iChipCablesHeight); | |
2795 | laddersegmentvolumes[3] = GetCoolingTubeSupportAssembly(); | |
2796 | laddersegmentvolumes[4] = GetCoolingTubeAssembly(); | |
2797 | SetLadderSegmentCombiTransMatrix(); | |
2798 | for(Int_t i=0; i<fgkLadderSegmentCombiTransNumber; i++) | |
2799 | laddersegment->AddNode(laddersegmentvolumes[i],1, | |
2800 | fLadderSegmentCombiTransMatrix[i]); | |
2801 | return laddersegment; | |
2802 | } | |
2803 | //////////////////////////////////////////////////////////////////////////////// | |
2804 | TList* AliITSv11GeometrySSD::GetEndLadderSegment(){ | |
2805 | ///////////////////////////////////////////////////////////// | |
2806 | // Method generating the Terminal Ladder Segment | |
2807 | ///////////////////////////////////////////////////////////// | |
2808 | const Int_t kendladdersegmentnumber = 2; | |
2809 | TList* endladdercarbonfiberjunctionlist = GetEndLadderCarbonFiberJunctionAssembly(); | |
2810 | TGeoVolume* endladdersegment[kendladdersegmentnumber]; | |
2811 | endladdersegment[0] = new TGeoVolumeAssembly("EndLadderSegment1"); | |
2812 | endladdersegment[1] = new TGeoVolumeAssembly("EndLadderSegment2"); | |
2813 | TGeoVolume** laddersegmentvolumes[kendladdersegmentnumber]; | |
2814 | const Int_t kladdersegmentvolumenumber = 4; | |
2815 | for(Int_t i=0; i<kendladdersegmentnumber; i++) laddersegmentvolumes[i] = | |
2816 | new TGeoVolume*[kladdersegmentvolumenumber]; | |
2817 | laddersegmentvolumes[0][0] = (TGeoVolume*)endladdercarbonfiberjunctionlist->At(0); | |
2818 | laddersegmentvolumes[0][1] = GetCarbonFiberSupport(); | |
2819 | laddersegmentvolumes[0][2] = GetSSDMountingBlock(); | |
2820 | laddersegmentvolumes[0][3] = GetCarbonFiberLowerSupport(0,true); | |
2821 | laddersegmentvolumes[1][0] = (TGeoVolume*)endladdercarbonfiberjunctionlist->At(1); | |
2822 | laddersegmentvolumes[1][1] = laddersegmentvolumes[0][1]; | |
2823 | laddersegmentvolumes[1][2] = laddersegmentvolumes[0][2]; | |
2824 | laddersegmentvolumes[1][3] = GetCarbonFiberLowerSupport(1,true); | |
2825 | TList* endladdersegmentlist = new TList(); | |
2826 | for(Int_t i=0; i<kendladdersegmentnumber; i++){ | |
2827 | SetEndLadderSegmentCombiTransMatrix(i); | |
2828 | for(Int_t j=0; j<kladdersegmentvolumenumber; j++) | |
2829 | endladdersegment[i]->AddNode(laddersegmentvolumes[i][j],1, | |
2830 | fEndLadderSegmentCombiTransMatrix[j]); | |
2831 | endladdersegmentlist->Add(endladdersegment[i]); | |
2832 | } | |
2833 | return endladdersegmentlist; | |
2834 | } | |
2835 | //////////////////////////////////////////////////////////////////////////////// | |
2836 | TGeoVolume* AliITSv11GeometrySSD::GetSSDMountingBlock(){ | |
2837 | ///////////////////////////////////////////////////////////// | |
2838 | // Method generating the Mounting Block | |
2839 | ///////////////////////////////////////////////////////////// | |
2840 | // Mounting Block Boxes Shapes | |
2841 | /////////////////////////////////////// | |
2842 | const Int_t kmountingblockboxnumber = 3; | |
2843 | TGeoBBox* mountingblockboxshape[kmountingblockboxnumber]; | |
2844 | mountingblockboxshape[0] = new TGeoBBox("MountingBlockBoxShape0", | |
2845 | 0.25*(fgkSSDMountingBlockLength[0] | |
2846 | - fgkSSDMountingBlockLength[1]), | |
2847 | 0.5*fgkSSDMountingBlockWidth, | |
2848 | 0.5*fgkSSDMountingBlockHeight[0]); | |
2849 | mountingblockboxshape[1] = new TGeoBBox("MountingBlockBoxShape1", | |
2850 | 0.25*(fgkSSDMountingBlockLength[1] | |
2851 | - fgkSSDMountingBlockLength[2]), | |
2852 | 0.5*fgkSSDMountingBlockWidth, | |
2853 | 0.5*(fgkSSDMountingBlockHeight[1] | |
2854 | - fgkSSDMountingBlockHeight[3])); | |
2855 | mountingblockboxshape[2] = new TGeoBBox("MountingBlockBoxShape2", | |
2856 | 0.5*fgkSSDMountingBlockLength[2], | |
2857 | 0.5*fgkSSDMountingBlockWidth, | |
2858 | 0.5*(fgkSSDMountingBlockHeight[2] | |
2859 | - fgkSSDMountingBlockHeight[3])); | |
2860 | TGeoTranslation* mountingblockboxtrans[kmountingblockboxnumber+2]; | |
2861 | mountingblockboxtrans[0] = new TGeoTranslation("MountingBlockBoxTrans0",0.,0.,0.); | |
2862 | mountingblockboxtrans[1] = new TGeoTranslation("MountingBlockBoxTrans1", | |
2863 | mountingblockboxshape[0]->GetDX() | |
2864 | + mountingblockboxshape[1]->GetDX(), | |
2865 | 0.0, | |
2866 | mountingblockboxshape[1]->GetDZ() | |
2867 | - mountingblockboxshape[0]->GetDZ() | |
2868 | + fgkSSDMountingBlockHeight[3]); | |
2869 | mountingblockboxtrans[2] = new TGeoTranslation("MountingBlockBoxTrans2", | |
2870 | mountingblockboxshape[0]->GetDX() | |
2871 | + 2.*mountingblockboxshape[1]->GetDX() | |
2872 | + mountingblockboxshape[2]->GetDX(), | |
2873 | 0.0, | |
2874 | mountingblockboxshape[2]->GetDZ() | |
2875 | - mountingblockboxshape[0]->GetDZ() | |
2876 | + fgkSSDMountingBlockHeight[3]); | |
2877 | mountingblockboxtrans[3] = new TGeoTranslation("MountingBlockBoxTrans3", | |
2878 | mountingblockboxshape[0]->GetDX() | |
2879 | + mountingblockboxshape[1]->GetDX() | |
2880 | + 2.*(mountingblockboxshape[1]->GetDX() | |
2881 | + mountingblockboxshape[2]->GetDX()), | |
2882 | 0.0, | |
2883 | mountingblockboxshape[1]->GetDZ() | |
2884 | - mountingblockboxshape[0]->GetDZ() | |
2885 | + fgkSSDMountingBlockHeight[3]); | |
2886 | mountingblockboxtrans[4] = new TGeoTranslation("MountingBlockBoxTrans4", | |
2887 | 2.*(mountingblockboxshape[0]->GetDX() | |
2888 | + 2.*mountingblockboxshape[1]->GetDX() | |
2889 | + mountingblockboxshape[2]->GetDX()), | |
2890 | 0.0, | |
2891 | 0.0); | |
2892 | for(Int_t i=0; i<kmountingblockboxnumber+2; i++) | |
2893 | mountingblockboxtrans[i]->RegisterYourself(); | |
2894 | /////////////////////////////////////// | |
2895 | // Mounting Block Trapezoid Hole Shapes | |
2896 | /////////////////////////////////////// | |
2897 | const Int_t kholetrapezoidvertexnumber = 4; | |
2898 | TVector3* holetrapezoidvertex[kholetrapezoidvertexnumber]; | |
2899 | holetrapezoidvertex[0] = new TVector3(); | |
2900 | holetrapezoidvertex[1] = new TVector3(fgkSSDMountingBlockHoleTrapezoidHeight); | |
2901 | holetrapezoidvertex[2] = new TVector3(*holetrapezoidvertex[0]); | |
2902 | holetrapezoidvertex[3] = new TVector3(*holetrapezoidvertex[1]); | |
2903 | Double_t holetrapezoidwidth[2] = {fgkSSDMountingBlockHoleTrapezoidUpBasis | |
2904 | + 2.*mountingblockboxshape[1]->GetDX() | |
2905 | * TMath::Tan(fgkSSDMountingBlockHoleTrapezoidAngle | |
2906 | * TMath::DegToRad()), | |
2907 | fgkSSDMountingBlockHoleTrapezoidUpBasis}; | |
2908 | GetArbShape(holetrapezoidvertex, | |
2909 | holetrapezoidwidth, | |
2910 | 2.*mountingblockboxshape[1]->GetDX(), | |
2911 | "HoleTrapezoidShape"); | |
2912 | TGeoRotation* holetrapezoidshaperot[2]; | |
2913 | holetrapezoidshaperot[0] = new TGeoRotation("HoleTrapezoidShapeRot0", | |
2914 | 90.,-90.,-90.); | |
2915 | holetrapezoidshaperot[1] = new TGeoRotation("HoleTrapezoidShapeRot1", | |
2916 | -180.,0.,0.); | |
2917 | TGeoCombiTrans* holetrapezoidshapecombitrans = | |
2918 | new TGeoCombiTrans("HoleTrapezoidShapeCombiTrans", | |
2919 | mountingblockboxshape[0]->GetDX() | |
2920 | + 3.*mountingblockboxshape[1]->GetDX() | |
2921 | + 2.*mountingblockboxshape[2]->GetDX(), | |
2922 | 0.5*fgkSSDMountingBlockWidth, | |
2923 | - fgkSSDMountingBlockHoleTrapezoidHeight | |
2924 | + 2.*mountingblockboxshape[1]->GetDZ() | |
2925 | - mountingblockboxshape[0]->GetDZ() | |
2926 | + fgkSSDMountingBlockHeight[3], | |
2927 | new TGeoRotation((*holetrapezoidshaperot[1]) | |
2928 | * (*holetrapezoidshaperot[0]))); | |
2929 | holetrapezoidshapecombitrans->RegisterYourself(); | |
2930 | /////////////////////////////////// | |
2931 | // Mounting Block Screw Hole Shapes | |
2932 | /////////////////////////////////// | |
2933 | const Int_t kmountingblocktubenumber = 2; | |
2934 | TGeoTube* mountingblocktubeshape[kmountingblocktubenumber]; | |
2935 | mountingblocktubeshape[0] = new TGeoTube("MountingBlockTubeShape0",0.0, | |
2936 | fgkSSDMountingBlockHoleRadius, | |
2937 | mountingblockboxshape[0]->GetDZ()); | |
2938 | mountingblocktubeshape[1] = new TGeoTube("MountingBlockTubeShape1",0.0, | |
2939 | fgkSSDMountingBlockHoleRadius, | |
2940 | mountingblockboxshape[2]->GetDZ()); | |
2941 | TGeoTranslation* mountingblocktubetrans[2*kmountingblocktubenumber]; | |
2942 | mountingblocktubetrans[0] = new TGeoTranslation("MountingBlockTubeTrans0", | |
2943 | - 0.5*(fgkSSDMountingBlockLength[0] | |
2944 | - fgkSSDMountingBlockHoleTubeLength[0]), | |
2945 | 0.5*fgkSSDMountingBlockWidth | |
2946 | - fgkSSDMountingBlockHoleTubeWidth[0],0.); | |
2947 | mountingblocktubetrans[1] = new TGeoTranslation("MountingBlockTubeTrans1", | |
2948 | - 0.5*(fgkSSDMountingBlockLength[0] | |
2949 | - fgkSSDMountingBlockHoleTubeLength[0]) | |
2950 | + fgkSSDMountingBlockHoleTubeLength[0], | |
2951 | - 0.5*fgkSSDMountingBlockWidth | |
2952 | + fgkSSDMountingBlockHoleTubeWidth[0], | |
2953 | 0.); | |
2954 | mountingblocktubetrans[2] = new TGeoTranslation("MountingBlockTubeTrans2", | |
2955 | - mountingblockboxshape[0]->GetDX() | |
2956 | + 0.5*fgkSSDMountingBlockLength[0] | |
2957 | - fgkSSDMountingBlockHoleTubeLength[1], | |
2958 | 0.5*fgkSSDMountingBlockWidth | |
2959 | - fgkSSDMountingBlockHoleTubeWidth[0], | |
2960 | mountingblockboxshape[2]->GetDZ() | |
2961 | - mountingblockboxshape[0]->GetDZ() | |
2962 | + fgkSSDMountingBlockHeight[3]); | |
2963 | mountingblocktubetrans[3] = new TGeoTranslation("MountingBlockTubeTrans3", | |
2964 | - mountingblockboxshape[0]->GetDX() | |
2965 | + 0.5*fgkSSDMountingBlockLength[0], | |
2966 | - 0.5*fgkSSDMountingBlockWidth | |
2967 | + fgkSSDMountingBlockHoleTubeWidth[1], | |
2968 | mountingblockboxshape[2]->GetDZ() | |
2969 | - mountingblockboxshape[0]->GetDZ() | |
2970 | + fgkSSDMountingBlockHeight[3]); | |
2971 | for(Int_t i=0; i<2*kmountingblocktubenumber; i++) | |
2972 | mountingblocktubetrans[i]->RegisterYourself(); | |
2973 | new TGeoCompositeShape("MountingBlockMainShape", | |
2974 | "MountingBlockBoxShape0:MountingBlockBoxTrans0+" | |
2975 | "MountingBlockBoxShape1:MountingBlockBoxTrans1+" | |
2976 | "MountingBlockBoxShape2:MountingBlockBoxTrans2+" | |
2977 | "MountingBlockBoxShape1:MountingBlockBoxTrans3+" | |
2978 | "MountingBlockBoxShape0:MountingBlockBoxTrans4"); | |
2979 | //////////////////////////////////////////// | |
2980 | // Mounting Block Screw Composite Hole Shapes | |
2981 | //////////////////////////////////////////// | |
2982 | const Int_t kmountingblockholetubesegnumber = 4; | |
2983 | new TGeoTubeSeg("MountingBlockHoleTubeSegShape", | |
2984 | 0.0, | |
2985 | fgkSSDMountingBlockScrewHoleRadius[0], | |
2986 | 0.5*fgkSSDMountingBlockScrewHoleHeigth,-90.,180.); | |
2987 | TGeoCombiTrans* mountingblockholetubesegcombitrans[kmountingblockholetubesegnumber]; | |
2988 | char* mountingblockholetubesegcombitransname[kmountingblockholetubesegnumber] = | |
2989 | { "MountingBlockHoleTubeSegCombiTrans0", | |
2990 | "MountingBlockHoleTubeSegCombiTrans1", | |
2991 | "MountingBlockHoleTubeSegCombiTrans2", | |
2992 | "MountingBlockHoleTubeSegCombiTrans3"}; | |
2993 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ | |
2994 | mountingblockholetubesegcombitrans[i] = | |
2995 | new TGeoCombiTrans(mountingblockholetubesegcombitransname[i], | |
2996 | 0.5*fgkSSDMountingBlockScrewHoleEdge*TMath::Sqrt(2) | |
2997 | * TMath::Cos(45*(2*i+1)*TMath::DegToRad()), | |
2998 | 0.5*fgkSSDMountingBlockScrewHoleEdge*TMath::Sqrt(2) | |
2999 | * TMath::Sin(45*(2*i+1)*TMath::DegToRad()), | |
3000 | 0.0, | |
3001 | new TGeoRotation("",90.*i,0.,0.)); | |
3002 | mountingblockholetubesegcombitrans[i]->RegisterYourself(); | |
3003 | } | |
3004 | TGeoBBox* mountingblockholeboxshape = | |
3005 | new TGeoBBox("MountingBlockHoleBoxShape", | |
3006 | 0.5*fgkSSDMountingBlockScrewHoleEdge, | |
3007 | 0.5*fgkSSDMountingBlockScrewHoleEdge, | |
3008 | 0.5*fgkSSDMountingBlockScrewHoleHeigth); | |
3009 | TGeoCompositeShape* mountingblockscrewhole[2]; | |
3010 | mountingblockscrewhole[0] = | |
3011 | new TGeoCompositeShape("MountingBlockScrewHole0", | |
3012 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans0+" | |
3013 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans1+" | |
3014 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans2+" | |
3015 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans3+" | |
3016 | "MountingBlockHoleBoxShape"); | |
3017 | new TGeoTubeSeg("MountingBlockLowerHoleTubeSegShape", | |
3018 | 0.0, | |
3019 | fgkSSDMountingBlockScrewHoleRadius[1], | |
3020 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3021 | - fgkSSDMountingBlockScrewHoleHeigth | |
3022 | - fgkSSDMountingBlockHeight[3]),0.,90.); | |
3023 | TGeoCombiTrans* mountingblocklowerholetubesegcombitrans[kmountingblockholetubesegnumber]; | |
3024 | char* mountingblocklowerholetubesegcombitransname[kmountingblockholetubesegnumber] = | |
3025 | { "MountingBlockLowerHoleTubeSegCombiTrans0", | |
3026 | "MountingBlockLowerHoleTubeSegCombiTrans1", | |
3027 | "MountingBlockLowerHoleTubeSegCombiTrans2", | |
3028 | "MountingBlockLowerHoleTubeSegCombiTrans3"}; | |
3029 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ | |
3030 | mountingblocklowerholetubesegcombitrans[i] = | |
3031 | new TGeoCombiTrans(mountingblocklowerholetubesegcombitransname[i], | |
3032 | 0.5*(fgkSSDMountingBlockScrewHoleEdge | |
3033 | - 2.*fgkSSDMountingBlockScrewHoleRadius[1]) | |
3034 | * TMath::Sqrt(2)*TMath::Cos(45*(2*i+1)*TMath::DegToRad()), | |
3035 | 0.5*(fgkSSDMountingBlockScrewHoleEdge | |
3036 | - 2.0*fgkSSDMountingBlockScrewHoleRadius[1]) | |
3037 | * TMath::Sqrt(2)*TMath::Sin(45*(2*i+1)*TMath::DegToRad()),0., | |
3038 | new TGeoRotation("",90.*i,0.,0.)); | |
3039 | mountingblocklowerholetubesegcombitrans[i]->RegisterYourself(); | |
3040 | } | |
3041 | Double_t fgkSSDMountingBlockLowerScrewHoleEdge = fgkSSDMountingBlockScrewHoleEdge | |
3042 | - 2.*fgkSSDMountingBlockScrewHoleRadius[1]; | |
3043 | TGeoBBox* mountingblocklowerholeboxshape[2]; | |
3044 | mountingblocklowerholeboxshape[0] = | |
3045 | new TGeoBBox("MountingBlockLowerHoleBoxShape0", | |
3046 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3047 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3048 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3049 | - fgkSSDMountingBlockScrewHoleHeigth | |
3050 | - fgkSSDMountingBlockHeight[3])); | |
3051 | mountingblocklowerholeboxshape[1] = | |
3052 | new TGeoBBox("MountingBlockLowerHoleBoxShape1", | |
3053 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3054 | 0.5*fgkSSDMountingBlockScrewHoleRadius[1], | |
3055 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3056 | - fgkSSDMountingBlockScrewHoleHeigth | |
3057 | - fgkSSDMountingBlockHeight[3])); | |
3058 | TGeoCombiTrans* mountingblocklowerholeBoxcombitrans[kmountingblockholetubesegnumber]; | |
3059 | char* mountingBlockLowerHoleBoxCombiTransName[kmountingblockholetubesegnumber] = | |
3060 | { "MountingBlockLowerHoleBoxCombiTrans0", | |
3061 | "MountingBlockLowerHoleBoxCombiTrans1", | |
3062 | "MountingBlockLowerHoleBoxCombiTrans2", | |
3063 | "MountingBlockLowerHoleBoxCombiTrans3"}; | |
3064 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ | |
3065 | mountingblocklowerholeBoxcombitrans[i] = | |
3066 | new TGeoCombiTrans(mountingBlockLowerHoleBoxCombiTransName[i], | |
3067 | 0.5*(fgkSSDMountingBlockLowerScrewHoleEdge | |
3068 | + fgkSSDMountingBlockScrewHoleRadius[1]) | |
3069 | * TMath::Cos(90*(i+1)*TMath::DegToRad()), | |
3070 | 0.5*(fgkSSDMountingBlockLowerScrewHoleEdge | |
3071 | + fgkSSDMountingBlockScrewHoleRadius[1]) | |
3072 | * TMath::Sin(90*(i+1)*TMath::DegToRad()),0., | |
3073 | new TGeoRotation("",90.*i,0.,0.)); | |
3074 | mountingblocklowerholeBoxcombitrans[i]->RegisterYourself(); | |
3075 | } | |
3076 | mountingblockscrewhole[1] = new TGeoCompositeShape("MountingBlockScrewHole1", | |
3077 | "MountingBlockLowerHoleTubeSegShape:MountingBlockLowerHoleTubeSegCombiTrans0+" | |
3078 | "MountingBlockLowerHoleTubeSegShape:MountingBlockLowerHoleTubeSegCombiTrans1+" | |
3079 | "MountingBlockLowerHoleTubeSegShape:MountingBlockLowerHoleTubeSegCombiTrans2+" | |
3080 | "MountingBlockLowerHoleTubeSegShape:MountingBlockLowerHoleTubeSegCombiTrans3+" | |
3081 | "MountingBlockLowerHoleBoxShape0+" | |
3082 | "MountingBlockLowerHoleBoxShape1:MountingBlockLowerHoleBoxCombiTrans0+" | |
3083 | "MountingBlockLowerHoleBoxShape1:MountingBlockLowerHoleBoxCombiTrans1+" | |
3084 | "MountingBlockLowerHoleBoxShape1:MountingBlockLowerHoleBoxCombiTrans2+" | |
3085 | "MountingBlockLowerHoleBoxShape1:MountingBlockLowerHoleBoxCombiTrans3"); | |
3086 | TGeoTranslation* mountingblockscrewhole1trans = | |
3087 | new TGeoTranslation("MountingBlockScrewHole1Trans",0.,0., | |
3088 | - mountingblocklowerholeboxshape[0]->GetDZ() | |
3089 | - mountingblockholeboxshape->GetDZ()); | |
3090 | mountingblockscrewhole1trans->RegisterYourself(); | |
3091 | new TGeoCompositeShape("MountingBlockHole", | |
3092 | "MountingBlockScrewHole0+MountingBlockScrewHole1:MountingBlockScrewHole1Trans"); | |
3093 | TGeoTranslation* mountingblockholetrans = new TGeoTranslation("MountingBlockHoleTrans", | |
3094 | 0.5*fgkSSDMountingBlockLength[0] | |
3095 | - mountingblockboxshape[0]->GetDZ(), | |
3096 | 0.0, | |
3097 | 2.*mountingblockboxshape[2]->GetDZ() | |
3098 | - mountingblockboxshape[0]->GetDZ() | |
3099 | + fgkSSDMountingBlockHeight[3] | |
3100 | - mountingblockholeboxshape->GetDZ()); | |
3101 | mountingblockholetrans->RegisterYourself(); | |
3102 | TGeoCompositeShape* mountingblockshape = new TGeoCompositeShape("MountingBlockShape", | |
3103 | "MountingBlockMainShape-(MountingBlockTubeShape0:MountingBlockTubeTrans0+" | |
3104 | "MountingBlockTubeShape0:MountingBlockTubeTrans1+" | |
3105 | "MountingBlockTubeShape1:MountingBlockTubeTrans2+" | |
3106 | "MountingBlockTubeShape1:MountingBlockTubeTrans3+" | |
3107 | "HoleTrapezoidShape:HoleTrapezoidShapeCombiTrans+" | |
3108 | "MountingBlockHole:MountingBlockHoleTrans)"); | |
3109 | TGeoVolume* ssdmountingblock = new TGeoVolume("SSDMountingBlock", | |
3110 | mountingblockshape,fSSDMountingBlockMedium); | |
3111 | return ssdmountingblock; | |
3112 | } | |
3113 | //////////////////////////////////////////////////////////////////////////////// | |
3114 | TGeoVolume* AliITSv11GeometrySSD::GetLadder(Int_t iLayer){ | |
3115 | ///////////////////////////////////////////////////////////// | |
3116 | // Method generating the Layer5 or Layer6 Ladder | |
3117 | ///////////////////////////////////////////////////////////// | |
3118 | TGeoVolume* ladder = new TGeoVolumeAssembly(iLayer==5 ? "ITSssdLay5Ladd" | |
3119 | : "ITSssdLay6Ladd"); | |
3120 | TGeoVolume* laddersegment[2]; | |
3121 | laddersegment[0] = GetLadderSegment(0); | |
3122 | laddersegment[1] = GetLadderSegment(1); | |
3123 | TList* endladdersegmentlist = GetEndLadderSegment(); | |
3124 | Double_t beamaxistransvector = fgkCarbonFiberJunctionWidth; | |
3125 | Int_t ssdlaysensorsnumber = (iLayer==5 ? | |
3126 | fgkSSDLay5SensorsNumber : | |
3127 | fgkSSDLay6SensorsNumber); | |
3128 | for(Int_t i=0; i<ssdlaysensorsnumber; i++) ladder->AddNode(i%2==0 ? | |
3129 | laddersegment[iLayer==5 ? 0 : 1] : | |
3130 | laddersegment[iLayer==5 ? 1 : 0], | |
3131 | ssdlaysensorsnumber-i-1,new TGeoTranslation(-0.5*fgkCarbonFiberTriangleLength, | |
3132 | beamaxistransvector*i,0.)); | |
3133 | ladder->AddNode((TGeoVolume*)endladdersegmentlist->At(0),1, | |
3134 | new TGeoTranslation("",-0.5*fgkCarbonFiberTriangleLength, | |
3135 | fgkCarbonFiberJunctionWidth*ssdlaysensorsnumber,0.)); | |
3136 | ladder->AddNode((TGeoVolume*)endladdersegmentlist->At(1),1, | |
3137 | new TGeoCombiTrans("",0.5*fgkCarbonFiberTriangleLength, | |
3138 | 0.,0.,new TGeoRotation("",180.,0.,0.))); | |
3139 | ///////////////////////////////////////////////////////////////////////////// | |
3140 | /// Placing Ladder Cables | |
3141 | ///////////////////////////////////////////////////////////////////////////// | |
3142 | SetLadderCableCombiTransMatrix(iLayer); | |
3143 | Int_t sidecablenumber[2] = {0,0}; | |
3144 | switch(iLayer){ | |
3145 | case 5: | |
3146 | sidecablenumber[0] = fgkSSDLay5SensorsNumber/2+1; | |
3147 | sidecablenumber[1] = sidecablenumber[0]-2; | |
3148 | break; | |
3149 | case 6: | |
3150 | sidecablenumber[0] = (fgkSSDLay6SensorsNumber-1)/2+1; | |
3151 | sidecablenumber[1] = sidecablenumber[0]-1; | |
3152 | break; | |
3153 | } | |
3154 | const Double_t* carbonfibertomoduleposition = | |
3155 | fLadderSegmentCombiTransMatrix[1]->GetTranslation(); | |
3156 | Double_t ssdendladdercablelength[4]; | |
3157 | ssdendladdercablelength[0] = carbonfibertomoduleposition[1] | |
3158 | + fgkSSDSensorLength | |
3159 | - fgkSSDModuleStiffenerPosition[1] | |
3160 | - fgkSSDStiffenerWidth | |
3161 | - fgkSSDFlexWidth[0] | |
3162 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
3163 | ssdendladdercablelength[1] = carbonfibertomoduleposition[1] | |
3164 | + fgkSSDModuleStiffenerPosition[1] | |
3165 | + fgkSSDStiffenerWidth | |
3166 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
3167 | ssdendladdercablelength[2] = ssdendladdercablelength[1] | |
3168 | - fgkEndLadderCarbonFiberLowerJunctionLength[1] | |
3169 | + fgkEndLadderCarbonFiberLowerJunctionLength[0]; | |
3170 | ssdendladdercablelength[3] = fgkCarbonFiberJunctionWidth-(fgkSSDSensorLength | |
3171 | + carbonfibertomoduleposition[1] | |
3172 | - fgkSSDModuleStiffenerPosition[1] | |
3173 | - fgkSSDStiffenerWidth) | |
3174 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
3175 | TList* laddercableassemblylist[4]; | |
3176 | const Int_t kendladdercablesnumber = 4; | |
3177 | for(Int_t i=0; i<kendladdercablesnumber; i++){ | |
3178 | laddercableassemblylist[i] = | |
3179 | GetLadderCableAssemblyList(sidecablenumber[i<2?0:1], | |
3180 | ssdendladdercablelength[i]); | |
3181 | ladder->AddNode((TGeoVolume*)laddercableassemblylist[i]->At(i%2==0?0:1), | |
3182 | i<2?1:2,fLadderCableCombiTransMatrix[i]); | |
3183 | } | |
3184 | return ladder; | |
3185 | } | |
3186 | //////////////////////////////////////////////////////////////////////////////// | |
3187 | TGeoVolume* AliITSv11GeometrySSD::GetLayer(Int_t iLayer){ | |
3188 | ///////////////////////////////////////////////////////////// | |
3189 | // Method generating the Layer5 or Layer6 | |
3190 | ///////////////////////////////////////////////////////////// | |
3191 | TGeoVolume* layer = new TGeoVolumeAssembly(iLayer==5 ? "ITSssdLayer5" | |
3192 | : "ITSssdLayer6"); | |
3193 | TGeoVolume* ladder = GetLadder(iLayer); | |
3194 | ///////////////////////////////////////////////////// | |
3195 | // Setting the CombiTransformation to pass ITS center | |
3196 | ///////////////////////////////////////////////////// | |
3197 | Double_t itscentertransz = iLayer==5 ? fgkSSDLay5LadderLength | |
3198 | - fgkLay5CenterITSPosition: | |
3199 | fgkSSDLay6LadderLength | |
3200 | - fgkLay6CenterITSPosition; | |
3201 | Double_t itssensorytrans = fgkSSDModuleCoolingBlockToSensor | |
3202 | + 0.5* fgkCoolingTubeSupportHeight | |
3203 | -(iLayer==5 ? fgkSSDSensorSideSupportHeight[1] | |
3204 | - fgkSSDSensorSideSupportHeight[0]: 0.); | |
3205 | TGeoRotation* itscenterrot[3]; | |
3206 | itscenterrot[0] = new TGeoRotation("ITSCenterRot0",90.,180.,-90.); | |
3207 | itscenterrot[1] = new TGeoRotation("ITSCenterRot1",0.,90.,0.); | |
3208 | itscenterrot[2] = new TGeoRotation((*itscenterrot[1])*(*itscenterrot[0])); | |
3209 | TGeoCombiTrans* itscentercombitrans = new TGeoCombiTrans("ITSCenterCombiTrans",0., | |
3210 | fgkSSDMountingBlockHeight[1]+itssensorytrans, | |
3211 | fgkEndLadderCarbonFiberLowerJunctionLength[1] | |
3212 | - itscentertransz,itscenterrot[2]); | |
3213 | ///////////////////////////////////////////////////// | |
3214 | // Setting the Ladder into the Layer | |
3215 | ///////////////////////////////////////////////////// | |
3216 | TGeoCombiTrans* lay5laddercombitrans[fgkSSDLay5LadderNumber]; | |
3217 | TGeoCombiTrans* lay6laddercombitrans[fgkSSDLay6LadderNumber]; | |
3218 | TGeoHMatrix* lay5ladderhmatrix[fgkSSDLay5LadderNumber]; | |
3219 | TGeoHMatrix* lay6ladderhmatrix[fgkSSDLay6LadderNumber]; | |
3220 | if(iLayer==5){ | |
3221 | Double_t lay5ladderangleposition = 360./fgkSSDLay5LadderNumber; | |
3222 | char lay5laddercombitransname[30], lay5ladderrotname[30]; | |
3223 | for(Int_t i=0; i<fgkSSDLay5LadderNumber;i++){ | |
3224 | sprintf(lay5laddercombitransname,"Lay5LadderCombiTrans%i",i); | |
3225 | sprintf(lay5ladderrotname,"Lay5LaddeRot%i",i); | |
3226 | Double_t lay5layerradius = (i%2==0 ? fgkSSDLay5RadiusMin: fgkSSDLay5RadiusMax); | |
3227 | lay5laddercombitrans[i] = new TGeoCombiTrans(lay5laddercombitransname, | |
3228 | lay5layerradius * TMath::Cos((i+1) | |
3229 | * lay5ladderangleposition*TMath::DegToRad()), | |
3230 | lay5layerradius * TMath::Sin((i+1) | |
3231 | * lay5ladderangleposition*TMath::DegToRad()),0., | |
3232 | new TGeoRotation(lay5ladderrotname,(i+1) | |
3233 | * lay5ladderangleposition-90,0.,0.)); | |
3234 | lay5ladderhmatrix[i] = new TGeoHMatrix((*lay5laddercombitrans[i]) | |
3235 | * (*itscentercombitrans)); | |
3236 | layer->AddNode(ladder,i,lay5ladderhmatrix[i]); | |
3237 | } | |
3238 | } | |
3239 | else{ | |
3240 | Double_t lay6ladderangleposition = 360./fgkSSDLay6LadderNumber; | |
3241 | char lay6laddercombitransname[30], lay6ladderrotname[30]; | |
3242 | for(Int_t i=0; i<fgkSSDLay6LadderNumber;i++){ | |
3243 | sprintf(lay6laddercombitransname,"Lay6LadderCombiTrans%i",i); | |
3244 | sprintf(lay6ladderrotname,"Lay6LaddeRot%i",i); | |
3245 | Double_t lay6layerradius = (i%2==0 ? fgkSSDLay6RadiusMin: fgkSSDLay6RadiusMax); | |
3246 | lay6laddercombitrans[i] = new TGeoCombiTrans(lay6laddercombitransname, | |
3247 | lay6layerradius * TMath::Cos((i+1) | |
3248 | * lay6ladderangleposition*TMath::DegToRad()), | |
3249 | lay6layerradius * TMath::Sin((i+1) | |
3250 | * lay6ladderangleposition*TMath::DegToRad()),0., | |
3251 | new TGeoRotation(lay6ladderrotname,(i+1) | |
3252 | * lay6ladderangleposition-90,0.,0.)); | |
3253 | lay6ladderhmatrix[i] = new TGeoHMatrix((*lay6laddercombitrans[i]) | |
3254 | * (*itscentercombitrans)); | |
3255 | layer->AddNode(ladder,i,lay6ladderhmatrix[i]); | |
3256 | } | |
3257 | } | |
3258 | return layer; | |
3259 | } | |
3260 | //////////////////////////////////////////////////////////////////////////////// | |
3261 | void AliITSv11GeometrySSD::Layer5(TGeoVolume* moth){ | |
3262 | ///////////////////////////////////////////////////////////// | |
3263 | // Insert the layer 5 in the mother volume. | |
3264 | ///////////////////////////////////////////////////////////// | |
3265 | if (! moth) { | |
3266 | printf("Error::AliITSv11GeometrySSD: Can't insert layer5, mother is null!\n"); | |
3267 | return; | |
3268 | }; | |
3269 | fMotherVol = moth; | |
3270 | moth->AddNode(GetLayer(5),1,0); | |
3271 | } | |
3272 | //////////////////////////////////////////////////////////////////////////////// | |
3273 | void AliITSv11GeometrySSD::Layer6(TGeoVolume* moth){ | |
3274 | ///////////////////////////////////////////////////////////// | |
3275 | // Insert the layer 6 in the mother volume. | |
3276 | ///////////////////////////////////////////////////////////// | |
3277 | if (! moth) { | |
3278 | printf("Error::AliITSv11GeometrySSD: Can't insert layer6, mother is null!\n"); | |
3279 | return; | |
3280 | }; | |
3281 | fMotherVol = moth; | |
3282 | moth->AddNode(GetLayer(6),1,0); | |
3283 | } | |
3284 | //////////////////////////////////////////////////////////////////////////////// | |
3285 | TGeoArb8* AliITSv11GeometrySSD::GetTrapezoidShape(TVector3* vertexpos[], | |
3286 | Double_t* width, Double_t height, char* shapename) const{ | |
3287 | ///////////////////////////////////////////////////////////// | |
3288 | // Method generating a trapezoid shape | |
3289 | ///////////////////////////////////////////////////////////// | |
3290 | const Int_t kvertexnumber = 4; | |
3291 | const Int_t ktransvectnumber = 2; | |
3292 | TVector3* vertex[kvertexnumber]; | |
3293 | TVector3* transvector[2]; | |
3294 | for(Int_t i=0; i<ktransvectnumber; i++) | |
3295 | transvector[i] = new TVector3(0.,width[i]); | |
3296 | ///////////////////////////////////////////////////////////// | |
3297 | //Setting the vertices | |
3298 | ///////////////////////////////////////////////////////////// | |
3299 | vertex[0] = new TVector3(*vertexpos[0]); | |
3300 | vertex[1] = new TVector3(*vertexpos[1]); | |
3301 | vertex[2] = new TVector3(*vertex[1]+*transvector[1]); | |
3302 | vertex[3] = new TVector3(*vertex[0]+*transvector[0]); | |
3303 | TGeoArb8* trapezoidshape = new TGeoArb8(shapename,0.5*height); | |
3304 | for(Int_t i=0; i<2*kvertexnumber; i++) | |
3305 | trapezoidshape->SetVertex(i,vertex[(i<kvertexnumber ? i : i-kvertexnumber)]->X(), | |
3306 | vertex[(i<kvertexnumber ? i : i-kvertexnumber)]->Y()); | |
3307 | return trapezoidshape; | |
3308 | } | |
3309 | //////////////////////////////////////////////////////////////////////////////// | |
3310 | TGeoArb8* AliITSv11GeometrySSD::GetArbShape(TVector3* vertexpos[], Double_t* width, | |
3311 | Double_t height, char* shapename, Int_t isign) const{ | |
3312 | ///////////////////////////////////////////////////////////// | |
3313 | // Method generating an Arb shape | |
3314 | ///////////////////////////////////////////////////////////// | |
3315 | const Int_t kvertexnumber = 8; | |
3316 | const Int_t ktransvectnumber = 2; | |
3317 | TVector3* vertex[kvertexnumber]; | |
3318 | TVector3* transvector[2]; | |
3319 | for(Int_t i=0; i<ktransvectnumber; i++) transvector[i] = new TVector3(0.,width[i]); | |
3320 | ///////////////////////////////////////////////////////////// | |
3321 | //Setting the vertices for TGeoArb8 | |
3322 | ///////////////////////////////////////////////////////////// | |
3323 | vertex[0] = new TVector3(*vertexpos[0]); | |
3324 | vertex[1] = new TVector3(*vertexpos[1]); | |
3325 | vertex[2] = new TVector3(*vertex[1]+isign*(*transvector[0])); | |
3326 | vertex[3] = new TVector3(*vertex[0]+isign*(*transvector[0])); | |
3327 | vertex[4] = new TVector3(*vertexpos[2]); | |
3328 | vertex[5] = new TVector3(*vertexpos[3]); | |
3329 | vertex[6] = new TVector3(*vertex[5]+isign*(*transvector[1])); | |
3330 | vertex[7] = new TVector3(*vertex[4]+isign*(*transvector[1])); | |
3331 | ///////////////////////////////////////////////////////////// | |
3332 | TGeoArb8* arbshape = new TGeoArb8(shapename,0.5*height); | |
3333 | for(Int_t i = 0; i<kvertexnumber;i++) | |
3334 | arbshape->SetVertex(i,vertex[i]->X(),vertex[i]->Y()); | |
3335 | return arbshape; | |
3336 | } | |
3337 | //////////////////////////////////////////////////////////////////////////////// | |
3338 | TGeoArb8* AliITSv11GeometrySSD::GetTriangleShape(TVector3* vertexpos[], | |
3339 | Double_t height, char* shapename) const{ | |
3340 | ///////////////////////////////////////////////////////////// | |
3341 | // Method generating a triangle shape | |
3342 | ///////////////////////////////////////////////////////////// | |
3343 | const Int_t kvertexnumber = 4; | |
3344 | TVector3* vertex[kvertexnumber]; | |
3345 | ////////////////////////////////////// | |
3346 | //Setting the vertices for TGeoArb8 | |
3347 | //////////////////////////////////// | |
3348 | for(Int_t i = 0; i<kvertexnumber; i++) | |
3349 | vertex[i] = new TVector3(i!=kvertexnumber-1?*vertexpos[i]:*vertex[kvertexnumber-1-i]); | |
3350 | TGeoArb8* triangleshape = new TGeoArb8(shapename,0.5*height); | |
3351 | for(Int_t i = 0; i<2*kvertexnumber; i++) | |
3352 | triangleshape->SetVertex(i,vertex[(i < kvertexnumber ? i: i-kvertexnumber)]->X(), | |
3353 | vertex[(i < kvertexnumber ? i : i-kvertexnumber)]->Y()); | |
3354 | return triangleshape; | |
3355 | } | |
3356 | //////////////////////////////////////////////////////////////////////////////// | |
3357 | TVector3* AliITSv11GeometrySSD::GetReflection(TVector3* vector,Double_t* param) const{ | |
3358 | ///////////////////////////////////////////////////////////// | |
3359 | // Given an axis specified by param, it gives the reflection of the point | |
3360 | // respect to the axis | |
3361 | ///////////////////////////////////////////////////////////// | |
3362 | TVector3* n = new TVector3(param[0],param[1],param[2]); | |
3363 | Double_t d = ((*vector)*(*n)+param[3])/n->Mag2(); | |
3364 | TVector3* reflectedvector = new TVector3(*vector-2*d*(*n)); | |
3365 | return reflectedvector; | |
3366 | } | |
3367 | //////////////////////////////////////////////////////////////////////////////// | |
3368 | TGeoCombiTrans* AliITSv11GeometrySSD::AddTranslationToCombiTrans(TGeoCombiTrans* ct, | |
3369 | Double_t dx, | |
3370 | Double_t dy, | |
3371 | Double_t dz) const{ | |
3372 | ///////////////////////////////////////////////////////////// | |
3373 | // Add a dx,dy,dz translation to the initial TGeoCombiTrans | |
3374 | ///////////////////////////////////////////////////////////// | |
3375 | TGeoCombiTrans* combiTrans = new TGeoCombiTrans(*ct); | |
3376 | const Double_t *vect = combiTrans->GetTranslation(); | |
3377 | Double_t newvect[3] = {vect[0]+dx, vect[1]+dy, vect[2]+dz}; | |
3378 | combiTrans->SetTranslation(newvect); | |
3379 | return combiTrans; | |
3380 | } | |
3381 | //////////////////////////////////////////////////////////////////////////////// | |
3382 | TGeoMedium* AliITSv11GeometrySSD::GetMedium(const char* mediumName) { | |
3383 | ///////////////////////////////////////////////////////////// | |
3384 | // Method returning the Medium type | |
3385 | ///////////////////////////////////////////////////////////// | |
3386 | char ch[30]; | |
3387 | sprintf(ch, "ITS_%s",mediumName); | |
3388 | TGeoMedium* medium = gGeoManager->GetMedium(ch); | |
3389 | if (! medium) | |
3390 | printf("Error(AliITSv11GeometrySSD)::medium %s not found !\n", mediumName); | |
3391 | return medium; | |
3392 | } | |
3393 | //////////////////////////////////////////////////////////////////////////////// | |
3394 | //To be interfaced with AliRoot Materials file | |
3395 | //////////////////////////////////////////////////////////////////////////////// | |
3396 | /*void AliITSv11GeometrySSD::CreateMaterials(){ | |
3397 | /////////////////////////////////// | |
3398 | // This part has to be modified | |
3399 | /////////////////////////////////// | |
3400 | // Float_t ifield = 2.000; | |
3401 | // Float_t fieldm = 10.000; | |
3402 | // Int_t ifield = gAlice->Field()->Integ(); | |
3403 | // Float_t fieldm = gAlice->Field()->Max(); | |
3404 | /////////////////////////////////// | |
3405 | // Silicon for Sensor | |
3406 | /////////////////////////////////// | |
3407 | Int_t SINumber = 0; | |
3408 | TGeoMaterial* SiMaterial = new TGeoMaterial("SiMaterial"); | |
3409 | TGeoMedium* Silicon = new TGeoMedium("Silicon",SINumber,SiMaterial); | |
3410 | fSSDSensorMedium = Silicon; | |
3411 | /////////////////////////////////// | |
3412 | // Silicon Mixture for Sensor | |
3413 | /////////////////////////////////// | |
3414 | Int_t SiMixtureNumber = 1; | |
3415 | TGeoMaterial* SiMixtureMaterial = new TGeoMaterial("SiMixtureMaterial"); | |
3416 | TGeoMedium* SiliconMixture = new TGeoMedium("SiliconMixture",SiMixtureNumber,SiMixtureMaterial); | |
3417 | fSSDChipMedium = SiliconMixture; | |
3418 | /////////////////////////////////// | |
3419 | // Stiffener Components Materials | |
3420 | /////////////////////////////////// | |
3421 | Int_t K1100Number = 2; | |
3422 | TGeoMaterial* K1100Material = new TGeoMaterial("K1100Material"); | |
3423 | TGeoMedium* K1100 = new TGeoMedium("K1100",K1100Number,K1100Material); | |
3424 | fSSDStiffenerMedium = K1100; | |
3425 | /////////////////////////// | |
3426 | // Stiffener Connectors | |
3427 | /////////////////////////// | |
3428 | Int_t SnMaterialNumber = 3; | |
3429 | TGeoMaterial* SnMaterial = new TGeoMaterial("SnMaterial"); | |
3430 | TGeoMedium* SnMedium = new TGeoMedium("SnMedium",SnMaterialNumber, | |
3431 | SnMaterial); | |
3432 | fSSDStiffenerConnectorMedium = SnMedium; | |
3433 | //////////////////////////////// | |
3434 | // Stiffener 0603-1812 Capacitor | |
3435 | //////////////////////////////// | |
3436 | Int_t Al2O3Number = 4; | |
3437 | TGeoMaterial* Al2O3Material = new TGeoMaterial("Al2O3Material"); | |
3438 | TGeoMedium* Al2O3Medium = new TGeoMedium("Al2O3Medium", | |
3439 | Al2O3Number, | |
3440 | Al2O3Material); | |
3441 | fSSDStiffener0603CapacitorMedium = Al2O3Medium; | |
3442 | fSSDStiffener1812CapacitorMedium = Al2O3Medium; | |
3443 | /////////////////////////// | |
3444 | // Stiffener Hybrid Wire | |
3445 | /////////////////////////// | |
3446 | Int_t CuHybridWireNumber = 5; | |
3447 | TGeoMaterial* CuHybridWireMaterial = new TGeoMaterial("CuHybridWireMaterial"); | |
3448 | TGeoMedium* CuHybridWireMedium = new TGeoMedium("CuHybridWireMedium", | |
3449 | CuHybridWireNumber, | |
3450 | CuHybridWireMaterial); | |
3451 | fSSDStiffenerHybridWireMedium = CuHybridWireMedium; | |
3452 | /////////////////////////// | |
3453 | // Al for Cooling Block | |
3454 | /////////////////////////// | |
3455 | Int_t AlCoolBlockNumber = 6; | |
3456 | TGeoMaterial* AlCoolBlockMaterial = new TGeoMaterial("AlCoolBlockMaterial"); | |
3457 | TGeoMedium* AlCoolBlockMedium = new TGeoMedium("AlCoolBlockMedium", | |
3458 | AlCoolBlockNumber, | |
3459 | AlCoolBlockMaterial); | |
3460 | fSSDAlCoolBlockMedium = AlCoolBlockMedium; | |
3461 | ////////////////////////////////////////////////////// | |
3462 | // Kapton and Al for Chip Cable Flex and Ladder Cables | |
3463 | ////////////////////////////////////////////////////// | |
3464 | Int_t KaptonBlockNumber = 7; | |
3465 | TGeoMaterial* KaptonMaterial = new TGeoMaterial("KaptonMaterial"); | |
3466 | TGeoMedium* KaptonMedium = new TGeoMedium("KaptonMedium", | |
3467 | KaptonBlockNumber, | |
3468 | KaptonMaterial); | |
3469 | Int_t AlTraceBlockNumber = 8; | |
3470 | TGeoMaterial* AlTraceMaterial = new TGeoMaterial("AlTraceMaterial"); | |
3471 | TGeoMedium* AlTraceMedium = new TGeoMedium("AlTraceMedium", | |
3472 | AlTraceBlockNumber, | |
3473 | AlTraceMaterial); | |
3474 | fSSDKaptonChipCableMedium = KaptonMedium; | |
3475 | fSSDAlTraceChipCableMedium = AlTraceMedium; | |
3476 | fSSDKaptonFlexMedium = KaptonMedium; | |
3477 | fSSDAlTraceFlexMedium = AlTraceMedium; | |
3478 | fSSDKaptonLadderCableMedium = KaptonMedium; | |
3479 | fSSDAlTraceLadderCableMedium = AlTraceMedium; | |
3480 | ///////////////////////////////////////////////////////////////// | |
3481 | // M55J for Carbon Fiber, CarbonFiber Lower Support and Junction | |
3482 | ////////////////////////////////////////////////////////////////// | |
3483 | Int_t M55JNumber = 9; | |
3484 | TGeoMaterial* M55JMaterial = new TGeoMaterial("M55JMaterial"); | |
3485 | TGeoMedium* M55JMedium = new TGeoMedium("M55JMedium",M55JNumber, | |
3486 | M55JMaterial); | |
3487 | fSSDCarbonFiberMedium = M55JMedium; | |
3488 | fSSDMountingBlockMedium = M55JMedium; | |
3489 | ///////////////////////////////////////////////////////////////// | |
3490 | // G10 for Detector Leg, TubeHolder | |
3491 | ////////////////////////////////////////////////////////////////// | |
3492 | Int_t G10Number = 10; | |
3493 | TGeoMaterial* G10Material = new TGeoMaterial("G10Material"); | |
3494 | TGeoMedium* G10Medium = new TGeoMedium("G10Medium",G10Number, | |
3495 | G10Material); | |
3496 | fSSDTubeHolderMedium = G10Medium; | |
3497 | fSSDSensorSupportMedium = G10Medium; | |
3498 | ///////////////////////////////////////////////////////////////// | |
3499 | // Water and Phynox for Cooling Tube | |
3500 | ////////////////////////////////////////////////////////////////// | |
3501 | Int_t WaterNumber = 11; | |
3502 | TGeoMaterial* WaterMaterial = new TGeoMaterial("WaterMaterial"); | |
3503 | TGeoMedium* WaterMedium = new TGeoMedium("WaterMedium",WaterNumber, | |
3504 | WaterMaterial); | |
3505 | fSSDCoolingTubeWater = WaterMedium; | |
3506 | Int_t PhynoxNumber = 12; | |
3507 | TGeoMaterial* PhynoxMaterial = new TGeoMaterial("PhynoxMaterial"); | |
3508 | TGeoMedium* PhynoxMedium = new TGeoMedium("PhynoxMedium",PhynoxNumber, | |
3509 | PhynoxMaterial); | |
3510 | fSSDCoolingTubePhynox = PhynoxMedium; | |
3511 | } | |
3512 | */ | |
3513 | void AliITSv11GeometrySSD::CreateMaterials(){ | |
3514 | /////////////////////////////////// | |
3515 | // This part has to be modified | |
3516 | /////////////////////////////////// | |
3517 | /////////////////////////////////// | |
3518 | // Silicon for Sensor | |
3519 | /////////////////////////////////// | |
3520 | fSSDSensorMedium = GetMedium("Si"); | |
3521 | /////////////////////////////////// | |
3522 | // Silicon Mixture for Sensor | |
3523 | /////////////////////////////////// | |
3524 | fSSDChipMedium = GetMedium("SPD SI CHIP$"); | |
3525 | fSSDChipGlueMedium = GetMedium("EPOXY$"); | |
3526 | /////////////////////////////////// | |
3527 | // Stiffener Components Materials | |
3528 | /////////////////////////////////// | |
3529 | fSSDStiffenerMedium = GetMedium("ITSsddCarbonM55J"); | |
3530 | /////////////////////////// | |
3531 | // Stiffener Connectors | |
3532 | /////////////////////////// | |
3533 | fSSDStiffenerConnectorMedium = GetMedium("COPPER"); | |
3534 | //////////////////////////////// | |
3535 | // Stiffener 0603-1812 Capacitor | |
3536 | //////////////////////////////// | |
3537 | fSSDStiffener0603CapacitorMedium = GetMedium("SDD ruby sph. Al2O3"); | |
3538 | fSSDStiffener1812CapacitorMedium = GetMedium("SDD ruby sph. Al2O3"); | |
3539 | /////////////////////////// | |
3540 | // Stiffener Hybrid Wire | |
3541 | /////////////////////////// | |
3542 | fSSDStiffenerHybridWireMedium = GetMedium("COPPER"); | |
3543 | /////////////////////////// | |
3544 | // Al for Cooling Block | |
3545 | /////////////////////////// | |
3546 | fSSDAlCoolBlockMedium = GetMedium("ITSal"); | |
3547 | ////////////////////////////////////////////////////// | |
3548 | // Kapton and Al for Chip Cable Flex and Ladder Cables | |
3549 | ////////////////////////////////////////////////////// | |
3550 | fSSDKaptonChipCableMedium = GetMedium("KAPTONH(POLYCH2)"); | |
3551 | fSSDAlTraceChipCableMedium = GetMedium("ITSal"); | |
3552 | fSSDKaptonFlexMedium = GetMedium("KAPTONH(POLYCH2)"); | |
3553 | fSSDAlTraceFlexMedium = GetMedium("ITSal"); | |
3554 | fSSDKaptonLadderCableMedium = GetMedium("KAPTONH(POLYCH2)"); | |
3555 | fSSDAlTraceLadderCableMedium = GetMedium("ITSal"); | |
3556 | ///////////////////////////////////////////////////////////////// | |
3557 | // M55J for Carbon Fiber, CarbonFiber Lower Support and Junction | |
3558 | ////////////////////////////////////////////////////////////////// | |
3559 | fSSDCarbonFiberMedium = GetMedium("GEN C (M55J)$"); | |
3560 | ///////////////////////////////////////////////////////////////// | |
3561 | // G10 for Detector Leg, TubeHolder | |
3562 | ////////////////////////////////////////////////////////////////// | |
3563 | fSSDTubeHolderMedium = GetMedium("G10FR4$"); | |
3564 | fSSDSensorSupportMedium = GetMedium("G10FR4$"); | |
3565 | fSSDMountingBlockMedium = GetMedium("G10FR4$"); | |
3566 | fSSDMountingBlockMedium = GetMedium("G10FR4$"); | |
3567 | ///////////////////////////////////////////////////////////////// | |
3568 | // Water and Phynox for Cooling Tube | |
3569 | ////////////////////////////////////////////////////////////////// | |
3570 | fSSDCoolingTubeWater = GetMedium("WATER"); | |
3571 | fSSDCoolingTubePhynox = GetMedium("INOX$"); | |
3572 | } | |
3573 | ///////////////////////////////////////////////////////////////////// | |
3574 |