]>
Commit | Line | Data |
---|---|---|
d7599219 | 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" | |
d7599219 | 24 | #include "TGeoMatrix.h" |
25 | #include <TGeoManager.h> | |
d7599219 | 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" | |
44285dfa | 33 | #include "AliITSv11GeometrySSD.h" |
d7599219 | 34 | ///////////////////////////////////////////////////////////////////////////////// |
35 | //Parameters for SSD Geometry | |
36 | ///////////////////////////////////////////////////////////////////////////////// | |
37 | // Layer5 (lengths are in mm and angles in degrees) | |
38 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 39 | const Double_t AliITSv11GeometrySSD::fgkSSDLay5LadderLength = 950.7*fgkmm; |
d7599219 | 40 | const Int_t AliITSv11GeometrySSD::fgkSSDLay5SensorsNumber = 22; |
41 | const Int_t AliITSv11GeometrySSD::fgkSSDLay5LadderNumber = 34; | |
9acf2ecc | 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; | |
d7599219 | 45 | ///////////////////////////////////////////////////////////////////////////////// |
46 | // Layer6 (lengths are in mm and angles in degrees) | |
47 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 48 | const Double_t AliITSv11GeometrySSD::fgkSSDLay6LadderLength = 1068.0*fgkmm; |
d7599219 | 49 | const Int_t AliITSv11GeometrySSD::fgkSSDLay6SensorsNumber = 25; |
50 | const Int_t AliITSv11GeometrySSD::fgkSSDLay6LadderNumber = 38; | |
9acf2ecc | 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; | |
d7599219 | 54 | ///////////////////////////////////////////////////////////////////////////////// |
55 | // SSD Chips and Hybrid (lengths are in mm and angles in degrees) | |
56 | ///////////////////////////////////////////////////////////////////////////////// | |
57 | const Int_t AliITSv11GeometrySSD::fgkSSDChipNumber = 6; | |
9acf2ecc | 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; | |
d7599219 | 62 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueLength = fgkSSDChipLength; |
63 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueWidth = fgkSSDChipWidth; | |
9acf2ecc | 64 | const Double_t AliITSv11GeometrySSD::fgkSSDChipGlueHeight = 0.030*fgkmm; |
d7599219 | 65 | ///////////////////////////////////////////////////////////////////////////////// |
66 | // Stiffener (lengths are in mm and angles in degrees) | |
67 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 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; | |
d7599219 | 85 | const Double_t AliITSv11GeometrySSD::fgkSSDConnectorHeight = |
9acf2ecc | 86 | 0.25*fgkSSDStiffenerHeight; |
d7599219 | 87 | ///////////////////////////////////////////////////////////////////////////////// |
88 | // Cooling Block (lengths are in mm and angles in degrees) | |
89 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 90 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockLength = 3.000*fgkmm; |
91 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockWidth = 4.000*fgkmm; | |
d7599219 | 92 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHeight[3] = |
9acf2ecc | 93 | {1.950*fgkmm, 0.240*fgkmm, 0.300*fgkmm}; |
d7599219 | 94 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleRadius[2] = |
9acf2ecc | 95 | {1.000*fgkmm, 0.120*fgkmm}; |
d7599219 | 96 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleLength[2] = |
9acf2ecc | 97 | {1.900*fgkmm, 0.400*fgkmm}; |
d7599219 | 98 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleCenter = |
9acf2ecc | 99 | 1.500*fgkmm; |
d7599219 | 100 | const Double_t AliITSv11GeometrySSD::fgkSSDCoolingBlockHoleHeight = |
9acf2ecc | 101 | 0.300*fgkmm; |
d7599219 | 102 | ///////////////////////////////////////////////////////////////////////////////// |
103 | // SSD Sensor (lengths are in mm and angles in degrees) | |
104 | ///////////////////////////////////////////////////////////////////////////////// | |
105 | const char* AliITSv11GeometrySSD::fgkSSDSensitiveVolName = | |
106 | "SSDSensorSensitiveVol"; | |
9acf2ecc | 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; | |
d7599219 | 110 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorOverlap = |
9acf2ecc | 111 | fgkSSDSensorLength-39.1*fgkmm; |
112 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorInsensitiveLength = 1.*fgkmm; | |
113 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorInsensitiveWidth = 1.*fgkmm; | |
d7599219 | 114 | ///////////////////////////////////////////////////////////////////////////////// |
115 | // Flex (lengths are in mm and angles in degrees) | |
116 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 117 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexFullLength = 106.000*fgkmm; |
d7599219 | 118 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexLength[4] = |
119 | {0.5*(fgkSSDStiffenerLength+fgkSSDChipNumber*fgkSSDChipLength | |
120 | +(fgkSSDChipNumber-1)*fgkSSDChipSeparationLength), | |
121 | 0.5*(fgkSSDStiffenerLength+fgkSSDChipNumber*fgkSSDChipLength | |
9acf2ecc | 122 | +(fgkSSDChipNumber-1)*fgkSSDChipSeparationLength)-4.000*fgkmm, |
123 | 9.500*fgkmm, 10.000*fgkmm}; | |
d7599219 | 124 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexWidth[2] = |
9acf2ecc | 125 | { 9.340*fgkmm, 5.380*fgkmm}; |
d7599219 | 126 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHeight[2] = |
9acf2ecc | 127 | { 0.030*fgkmm, 0.020*fgkmm}; |
d7599219 | 128 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexAngle = 30.000; |
9acf2ecc | 129 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHoleLength = 1.430*fgkmm; |
130 | const Double_t AliITSv11GeometrySSD::fgkSSDFlexHoleWidth = 3.000*fgkmm; | |
d7599219 | 131 | const Double_t AliITSv11GeometrySSD::fgkSSDEndFlexCompLength[6] = |
9acf2ecc | 132 | {3.30*fgkmm,4.12*fgkmm,4.22*fgkmm,1.70*fgkmm,0.75*fgkmm,7.18*fgkmm}; |
d7599219 | 133 | const Double_t AliITSv11GeometrySSD:: fgkSSDEndFlexCompWidth[3] = |
9acf2ecc | 134 | {15.03*fgkmm,23.48*fgkmm,12.28*fgkmm}; |
d7599219 | 135 | ///////////////////////////////////////////////////////////////////////////////// |
136 | // SSD Ladder Cable (lengths are in mm and angles in degrees) | |
137 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 138 | const Double_t AliITSv11GeometrySSD::fgkSSDLadderCableWidth = 23.5*fgkmm; |
d7599219 | 139 | ///////////////////////////////////////////////////////////////////////////////// |
140 | // SSD Module (lengths are in mm and angles in degrees) | |
141 | ///////////////////////////////////////////////////////////////////////////////// | |
142 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleStiffenerPosition[2] = | |
9acf2ecc | 143 | { 1.000*fgkmm, 3.900*fgkmm}; |
d7599219 | 144 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleSensorSupportDistance = |
9acf2ecc | 145 | 45.600*fgkmm; |
d7599219 | 146 | const Double_t AliITSv11GeometrySSD::fgkSSDModuleCoolingBlockToSensor = |
9acf2ecc | 147 | 5.075*fgkmm; |
d7599219 | 148 | ///////////////////////////////////////////////////////////////////////////////// |
149 | // Sensor Support (lengths are in mm and angles in degrees) | |
150 | ///////////////////////////////////////////////////////////////////////////////// | |
151 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportLength = | |
9acf2ecc | 152 | 5.800*fgkmm; |
d7599219 | 153 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportWidth = |
9acf2ecc | 154 | 2.000*fgkmm; |
d7599219 | 155 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportHeight[2] = |
9acf2ecc | 156 | { 4.620*fgkmm, 5.180*fgkmm}; |
d7599219 | 157 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportThickness[2] = |
9acf2ecc | 158 | { 0.450*fgkmm, 0.450*fgkmm}; |
d7599219 | 159 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorSideSupportPosition = |
160 | 0.5*(fgkSSDModuleSensorSupportDistance | |
161 | + fgkSSDSensorSideSupportThickness[0]) | |
162 | - fgkSSDSensorSideSupportLength; | |
163 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportLength = | |
9acf2ecc | 164 | 5.250*fgkmm; |
d7599219 | 165 | const Double_t AliITSv11GeometrySSD::fgkSSDSensorCenterSupportWidth = |
9acf2ecc | 166 | 1.680*fgkmm; |
d7599219 | 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 = | |
9acf2ecc | 173 | 19.000*fgkmm; |
d7599219 | 174 | ///////////////////////////////////////////////////////////////////////////////// |
175 | // Chip Cables (lengths are in mm and angles in degrees) | |
176 | ///////////////////////////////////////////////////////////////////////////////// | |
177 | const Double_t AliITSv11GeometrySSD::fgkSSDChipCablesLength[2] = | |
9acf2ecc | 178 | {73.12/fgkSSDChipNumber*fgkmm,fgkSSDChipLength+2.*0.19*fgkmm}; |
d7599219 | 179 | const Double_t AliITSv11GeometrySSD::fgkSSDChipCablesHeight[4] = |
9acf2ecc | 180 | { 0.014*fgkmm, 0.010*fgkmm, fgkSSDModuleCoolingBlockToSensor |
d7599219 | 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] = | |
9acf2ecc | 188 | { 11.000*fgkmm, 0.800*fgkmm, 0.600*fgkmm}; |
d7599219 | 189 | ///////////////////////////////////////////////////////////////////////////////// |
190 | // Carbon Fiber Junction Parameters (lengths are in mm and angles in degrees) | |
191 | ///////////////////////////////////////////////////////////////////////////////// | |
192 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionLength = | |
9acf2ecc | 193 | 3.820*fgkmm; |
d7599219 | 194 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionWidth = |
195 | fgkSSDSensorLength-fgkSSDSensorOverlap; | |
196 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionEdge[2] = | |
9acf2ecc | 197 | { 0.86*fgkmm, 0.30*fgkmm}; |
d7599219 | 198 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionAngle[2] = |
199 | { 30.00, 90.00}; | |
200 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberJunctionToSensorSupport = | |
9acf2ecc | 201 | 1.78*fgkmm; |
d7599219 | 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] = | |
9acf2ecc | 210 | { 0.751*fgkmm, 0.482*fgkmm}; |
d7599219 | 211 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportEdgeLength = |
9acf2ecc | 212 | 1.630*fgkmm; |
d7599219 | 213 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberSupportWidth = |
9acf2ecc | 214 | 0.950*fgkmm; |
d7599219 | 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 | |
9acf2ecc | 225 | = 0.950*fgkmm; |
d7599219 | 226 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportLowerLenght |
9acf2ecc | 227 | = 1.600*fgkmm; |
d7599219 | 228 | const Double_t AliITSv11GeometrySSD::fgkCarbonFiberLowerSupportHeight |
9acf2ecc | 229 | = 0.830*fgkmm; |
d7599219 | 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] = | |
9acf2ecc | 253 | {fgkEndLadderCarbonFiberLowerJunctionLength[0]-20.4*fgkmm, |
254 | fgkEndLadderCarbonFiberLowerJunctionLength[1]-20.6*fgkmm}; | |
d7599219 | 255 | const Double_t AliITSv11GeometrySSD::fgkEndLadderMountingBlockPosition[2] = |
9acf2ecc | 256 | {fgkEndLadderCarbonFiberLowerJunctionLength[0]-16.50*fgkmm, |
257 | fgkEndLadderCarbonFiberLowerJunctionLength[1]-31.50*fgkmm}; | |
d7599219 | 258 | ///////////////////////////////////////////////////////////////////////////////// |
259 | // Cooling Tube Support (lengths are in mm and angles in degrees) | |
260 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 261 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportRmax = 1.45*fgkmm; |
d7599219 | 262 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportRmin |
263 | = fgkSSDCoolingBlockHoleRadius[0]; | |
9acf2ecc | 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; | |
d7599219 | 267 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportSeparation = |
268 | fgkSSDSensorLength-2.*fgkSSDSensorOverlap; | |
9acf2ecc | 269 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSupportToCarbonFiber = 11.70*fgkmm; |
d7599219 | 270 | ///////////////////////////////////////////////////////////////////////////////// |
271 | // Cooling Tube (lengths are in mm and angles in degrees) | |
272 | ///////////////////////////////////////////////////////////////////////////////// | |
273 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmax = | |
274 | fgkCoolingTubeSupportRmin; | |
9acf2ecc | 275 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeRmin = 0.96*fgkmm; |
d7599219 | 276 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeLength = |
277 | fgkCarbonFiberJunctionWidth; | |
278 | const Double_t AliITSv11GeometrySSD::fgkCoolingTubeSeparation = | |
279 | fgkSSDModuleSensorSupportDistance+fgkSSDCoolingBlockLength; | |
d7599219 | 280 | ///////////////////////////////////////////////////////////////////////////////// |
281 | // SSD Mounting Block Parameters (lengths are in mm and angles in degrees) | |
282 | ///////////////////////////////////////////////////////////////////////////////// | |
283 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockLength[3] = | |
9acf2ecc | 284 | { 60.0*fgkmm, 42.2*fgkmm, 34.0*fgkmm}; |
d7599219 | 285 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHeight[4] = |
9acf2ecc | 286 | { 4.0*fgkmm, 8.0*fgkmm, 5.0*fgkmm, 0.2*fgkmm}; |
d7599219 | 287 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockWidth = |
9acf2ecc | 288 | 20.0*fgkmm; |
d7599219 | 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 = | |
9acf2ecc | 294 | 2.5*fgkmm; |
d7599219 | 295 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTubeLength[2] = |
9acf2ecc | 296 | { 56.0*fgkmm, 12.0*fgkmm}; |
d7599219 | 297 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleTubeWidth[2] = |
9acf2ecc | 298 | { 5.0*fgkmm, 2.9*fgkmm}; |
d7599219 | 299 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockHoleRadius = |
9acf2ecc | 300 | 1.0*fgkmm; |
d7599219 | 301 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleEdge = |
9acf2ecc | 302 | 6.0*fgkmm; |
d7599219 | 303 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleHeigth = |
9acf2ecc | 304 | 4.0*fgkmm; |
d7599219 | 305 | const Double_t AliITSv11GeometrySSD::fgkSSDMountingBlockScrewHoleRadius[2] = |
9acf2ecc | 306 | { 1.5*fgkmm,fgkSSDMountingBlockScrewHoleEdge/6.}; |
d7599219 | 307 | ///////////////////////////////////////////////////////////////////////////////// |
44285dfa | 308 | ClassImp(AliITSv11GeometrySSD) |
309 | ///////////////////////////////////////////////////////////////////////////////// | |
9acf2ecc | 310 | AliITSv11GeometrySSD::AliITSv11GeometrySSD(): |
311 | AliITSv11Geometry(), | |
44285dfa | 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): | |
9acf2ecc | 351 | AliITSv11Geometry(s.GetDebug()), |
44285dfa | 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 | //////////////////////// | |
d7599219 | 387 | CreateMaterials(); |
388 | } | |
389 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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 | ///////////////////////////////////////////////////////////////////////////////// | |
d7599219 | 405 | // Setting the transformation Matrices |
406 | ///////////////////////////////////////////////////////////////////////////////// | |
407 | void AliITSv11GeometrySSD::SetSSDSensorSupportCombiTransMatrix(){ | |
44285dfa | 408 | ///////////////////////////////////////////////////////////// |
409 | // Method generating CombiTrans Matrix for SSD Sensor Support | |
410 | ///////////////////////////////////////////////////////////// | |
d7599219 | 411 | //Translation Parameters SSDSensorSupportAssembly: |
412 | //////////////////////////////////////////////////////// | |
44285dfa | 413 | const Double_t kssdsensorsupporttransx[3] = {-0.5*fgkSSDSensorSideSupportWidth, |
d7599219 | 414 | 0.5*fgkSSDSensorSideSupportWidth, |
415 | 0.5*fgkSSDSensorCenterSupportThickness[0] | |
416 | - fgkSSDSensorCenterSupportPosition}; | |
44285dfa | 417 | const Double_t kssdsensorsupporttransy[3] = |
d7599219 | 418 | {0.5*fgkSSDSensorSideSupportThickness[0], |
419 | -0.5*fgkSSDSensorSideSupportThickness[0] | |
420 | -fgkSSDModuleSensorSupportDistance, | |
421 | 0.5*fgkSSDSensorCenterSupportWidth | |
422 | -0.5*fgkSSDModuleSensorSupportDistance}; | |
44285dfa | 423 | const Double_t kssdsensorsupporttransz[3] = {0.,0., |
d7599219 | 424 | fgkSSDSensorCenterSupportThickness[0]}; |
425 | //////////////////////////////////////////////////////// | |
426 | //Rotational Parameters SSDSensorSupportAssembly: | |
427 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 431 | //////////////////////////////////////////////////////////////// |
432 | //Name of CombiTrans Transformation of SSDSensorSupportAssembly: | |
433 | //////////////////////////////////////////////////////////////// | |
44285dfa | 434 | char ssdsensorsupportcombitransname[40]; |
435 | char ssdsensorsupportrotname[40]; | |
436 | TGeoCombiTrans *ssdsensorsupportlocalmatrix[fgkSSDSensorSupportCombiTransNumber]; | |
d7599219 | 437 | for(Int_t i=0; i<fgkSSDSensorSupportCombiTransNumber; i++){ |
44285dfa | 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]; | |
d7599219 | 450 | } |
451 | } | |
452 | ///////////////////////////////////////////////////////////////////////////////// | |
453 | void AliITSv11GeometrySSD::SetSSDModuleCombiTransMatrix(Double_t SSDChipCablesHeigth){ | |
44285dfa | 454 | ///////////////////////////////////////////////////////////// |
455 | // Method generating CombiTrans Matrix for SSD Module | |
456 | ///////////////////////////////////////////////////////////// | |
457 | //Translation Parameters SSDModuleAssembly: | |
458 | //////////////////////////////////////////////////////// | |
459 | const Double_t kssdmoduletransx[7] = {0.5*fgkSSDStiffenerLength, | |
d7599219 | 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)}; | |
44285dfa | 472 | const Double_t kssdmoduletransy[7] = {0.5*fgkSSDStiffenerWidth, |
d7599219 | 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}; | |
44285dfa | 483 | const Double_t kssdmoduletransz[7] = {0.5*fgkSSDStiffenerHeight, |
d7599219 | 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 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 497 | //////////////////////////////////////////////////////// |
498 | //Name of CombiTrans Transformation of SSDModuleAssembly: | |
499 | //////////////////////////////////////////////////////// | |
44285dfa | 500 | const char* ssdmodulecombitransname[7] = {"SSDStiffenerCombiTrans", |
d7599219 | 501 | "SSDChipCombiTrans", |
502 | "SSDSensorCombiTrans", | |
503 | "SSDFlex0CombiTrans", | |
504 | "SSDCoolingBlockCombiTrans", | |
505 | "SSDChipCablesCombiTrans", | |
506 | "SSDFlex1CombiTrans"}; | |
44285dfa | 507 | const char* ssdmodulerotname[7] = {"SSDStiffenerRotName", |
d7599219 | 508 | "SSDChipRotName", |
509 | "SSDSensorRotName", | |
510 | "SSDFlex0RotName", | |
511 | "SSDCoolingBlockRotName", | |
512 | "SSDChipCablesRotName", | |
513 | "SSDFlex1RotName"}; | |
44285dfa | 514 | TGeoCombiTrans *ssdmodulelocalmatrix[fgkSSDModuleCombiTransNumber]; |
d7599219 | 515 | for(Int_t i=0; i<fgkSSDModuleCombiTransNumber; i++){ |
44285dfa | 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]; | |
d7599219 | 526 | } |
527 | } | |
528 | ///////////////////////////////////////////////////////////////////////////////// | |
529 | void AliITSv11GeometrySSD::SetCarbonFiberJunctionCombiTransMatrix(){ | |
44285dfa | 530 | ///////////////////////////////////////////////////////////// |
531 | // Method generating CombiTrans Matrix for Carbon Fiber Junction | |
532 | ///////////////////////////////////////////////////////////// | |
d7599219 | 533 | //Translation Parameters CarbonFiberJunction: |
534 | //////////////////////////////////////////////////////// | |
44285dfa | 535 | const Double_t kcarbonfiberjunctiontransx[3] = |
d7599219 | 536 | { 0.0,fgkCarbonFiberTriangleLength,fgkCarbonFiberTriangleLength |
537 | * TMath::Cos(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
44285dfa | 538 | const Double_t kcarbonfiberjunctiontransy[3] = |
d7599219 | 539 | { 0.0, 0.0,fgkCarbonFiberTriangleLength |
540 | * TMath::Sin(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
44285dfa | 541 | const Double_t kcarbonfiberjunctiontransz[3] = { 0.0, 0.0, 0.0}; |
d7599219 | 542 | //////////////////////////////////////////////////////// |
543 | //Rotational Parameters CarbonFiberJunction: | |
544 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 548 | /////////////////////////////////////////////////////////// |
549 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
550 | /////////////////////////////////////////////////////////// | |
44285dfa | 551 | char carbonfiberjunctioncombitransname[40]; |
552 | char carbonfiberjunctionrotname[40]; | |
553 | TGeoCombiTrans *carbonfiberjunctionlocalmatrix[fgkCarbonFiberJunctionCombiTransNumber]; | |
d7599219 | 554 | for(Int_t i=0; i<fgkCarbonFiberJunctionCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 567 | } |
568 | } | |
569 | ///////////////////////////////////////////////////////////////////////////////// | |
570 | void AliITSv11GeometrySSD::SetEndLadderCarbonFiberJunctionCombiTransMatrix(Int_t i){ | |
44285dfa | 571 | ///////////////////////////////////////////////////////////// |
572 | // Method generating CombiTrans Matrix for End Ladder Carbon Fiber Junction | |
573 | ///////////////////////////////////////////////////////////// | |
d7599219 | 574 | //Translation Parameters EndLadderCarbonFiberJunction: |
575 | //////////////////////////////////////////////////////// | |
44285dfa | 576 | const Double_t kendladdercarbonfiberjunctiontransx[3] = |
d7599219 | 577 | { 0.0,fgkCarbonFiberTriangleLength,fgkCarbonFiberTriangleLength |
578 | * TMath::Cos(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
44285dfa | 579 | const Double_t kendladdercarbonfiberjunctiontransy[3] = |
d7599219 | 580 | { 0.0, 0.0,fgkCarbonFiberTriangleLength |
581 | * TMath::Sin(fgkCarbonFiberTriangleAngle*TMath::DegToRad())}; | |
44285dfa | 582 | const Double_t kendladdercarbonfiberjunctiontransz[3] = { 0.0, 0.0, |
d7599219 | 583 | 0.5*(fgkEndLadderCarbonFiberLowerJunctionLength[i] |
584 | -fgkEndLadderCarbonFiberUpperJunctionLength[i])}; | |
585 | //////////////////////////////////////////////////////// | |
586 | //Rotational Parameters EndLadderCarbonFiberJunction: | |
587 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 591 | /////////////////////////////////////////////////////////// |
592 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
593 | /////////////////////////////////////////////////////////// | |
44285dfa | 594 | char endladdercarbonfiberjunctioncombitransname[40]; |
595 | char endladdercarbonfiberjunctionrotname[40]; | |
596 | TGeoCombiTrans *endladdercarbonfiberjunctionlocalmatrix[fgkEndLadderCarbonFiberJunctionCombiTransNumber]; | |
d7599219 | 597 | for(Int_t i=0; i<fgkEndLadderCarbonFiberJunctionCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 611 | } |
612 | } | |
613 | //////////////////////////////////////////////////////////////////////////////// | |
614 | void AliITSv11GeometrySSD::SetCarbonFiberAssemblyCombiTransMatrix(){ | |
44285dfa | 615 | ///////////////////////////////////////////////////////////// |
616 | // Method generating CombiTrans Matrix for Carbon fiber Assembly | |
617 | ///////////////////////////////////////////////////////////// | |
d7599219 | 618 | //Translation Parameters CarbonFiberAssembly: |
619 | //////////////////////////////////////////////////////// | |
44285dfa | 620 | const Double_t kcarbonfiberassemblytransx[3] = { 0.0, 0.0, 0.0}; |
621 | const Double_t kcarbonfiberassemblytransy[3] = | |
d7599219 | 622 | { 0.5*fgkCarbonFiberJunctionWidth, 0.0, |
623 | fgkCarbonFiberJunctionWidth-fgkCarbonFiberLowerSupportWidth | |
624 | - fgkCarbonFiberLowerSupportVolumePosition[0] | |
625 | - fgkCarbonFiberLowerSupportVolumePosition[1]}; | |
44285dfa | 626 | const Double_t kcarbonfiberassemblytransz[3] = |
d7599219 | 627 | { 0.0, 0.0,- 0.5*fgkCarbonFiberLowerSupportHeight}; |
628 | //////////////////////////////////////////////////////// | |
629 | //Rotational Parameters CarbonFiberAssembly: | |
630 | //////////////////////////////////////////////////////// | |
44285dfa | 631 | const Double_t kcarbonfiberassemblyrotphi[3] = { 0., 90., 0.}; |
632 | const Double_t kcarbonfiberassemblyrottheta[3] = { 90., | |
d7599219 | 633 | -fgkCarbonFiberTriangleAngle, 0.}; |
44285dfa | 634 | const Double_t kcarbonfiberassemblyrotpsi[3] = { 0.,- 90., 0.}; |
d7599219 | 635 | /////////////////////////////////////////////////////////// |
636 | //Name of CombiTrans Transformation of CarbonFiberAssembly: | |
637 | /////////////////////////////////////////////////////////// | |
44285dfa | 638 | char carbonfiberassemblycombitransname[30]; |
639 | char carbonfiberassemblyrotname[30]; | |
640 | TGeoCombiTrans *carbonfiberassemblylocalmatrix[fgkCarbonFiberAssemblyCombiTransNumber]; | |
d7599219 | 641 | for(Int_t i=0; i<fgkCarbonFiberAssemblyCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 654 | } |
655 | } | |
656 | ///////////////////////////////////////////////////////////////////////////////// | |
657 | void AliITSv11GeometrySSD::SetCoolingTubeSupportCombiTransMatrix(){ | |
44285dfa | 658 | ///////////////////////////////////////////////////////////// |
659 | // Method generating CombiTrans Matrix for Cooling Tube Support | |
660 | ///////////////////////////////////////////////////////////// | |
d7599219 | 661 | //Translation Parameters CoolingTubeSupport: |
662 | //////////////////////////////////////////////////////// | |
44285dfa | 663 | Double_t phi = TMath::ASin(0.5*fgkCoolingTubeSupportHeight |
d7599219 | 664 | /fgkCoolingTubeSupportRmax); |
44285dfa | 665 | const Double_t kcoolingtubesupporttransx[2] = |
666 | {0.,2.*fgkCoolingTubeSupportRmax*TMath::Cos(phi) | |
d7599219 | 667 | + 2.*(fgkCoolingTubeSupportLength |
44285dfa | 668 | - fgkCoolingTubeSupportRmax*(1.+TMath::Cos(phi))) |
d7599219 | 669 | + fgkCarbonFiberTriangleLength |
670 | - 2.0*fgkCarbonFiberJunctionLength}; | |
44285dfa | 671 | const Double_t kcoolingtubesupporttransy[2] = { 0.0, 0.0}; |
672 | const Double_t kcoolingtubesupporttransz[2] = { 0.0, 0.0}; | |
d7599219 | 673 | //////////////////////////////////////////////////////// |
674 | //Rotational Parameters CoolingTubeSupport: | |
675 | //////////////////////////////////////////////////////// | |
44285dfa | 676 | const Double_t kcoolingsubesupportrotphi[2] = { 0., 180.}; |
677 | const Double_t kcoolingsubesupportrottheta[2] = { 0., 0.}; | |
678 | const Double_t kcoolingsubesupportrotpsi[2] = { 0., 0.}; | |
d7599219 | 679 | /////////////////////////////////////////////////////////// |
680 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
681 | /////////////////////////////////////////////////////////// | |
44285dfa | 682 | char coolingtubesupportcombitransname[40]; |
683 | char coolingtubesupportrotname[40]; | |
684 | TGeoCombiTrans *coolingtubesupportlocalmatrix[fgkCoolingTubeSupportCombiTransNumber]; | |
d7599219 | 685 | for(Int_t i=0; i<fgkCoolingTubeSupportCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 698 | } |
699 | } | |
700 | ///////////////////////////////////////////////////////////////////////////////// | |
701 | void AliITSv11GeometrySSD::SetCoolingTubeCombiTransMatrix(){ | |
44285dfa | 702 | ///////////////////////////////////////////////////////////// |
703 | // Method generating CombiTrans Matrix for Cooling Tube | |
704 | ///////////////////////////////////////////////////////////// | |
d7599219 | 705 | //Translation Parameters CoolingTube: |
706 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 710 | //////////////////////////////////////////////////////// |
711 | //Rotational Parameters CoolingTube: | |
712 | //////////////////////////////////////////////////////// | |
44285dfa | 713 | const Double_t kcoolingtuberotphi[2] = { 0., 0.}; |
714 | const Double_t kcoolingtuberottheta[2] = { 90., 90.}; | |
715 | const Double_t kcoolingtuberotpsi[2] = { 0., 0.}; | |
d7599219 | 716 | /////////////////////////////////////////////////////////// |
717 | //Name of CombiTrans Transformation of CarbonFiberJunction: | |
718 | /////////////////////////////////////////////////////////// | |
44285dfa | 719 | const char* coolingtubecombitransname[fgkCoolingTubeCombiTransNumber] = |
d7599219 | 720 | {"CoolingTubeCombiTrans0","CoolingTubeCombiTrans1"}; |
44285dfa | 721 | const char* coolingtuberotationname[fgkCoolingTubeCombiTransNumber] = |
d7599219 | 722 | {"CoolingTubeRotation0","CoolingTubeRotation1"}; |
44285dfa | 723 | TGeoCombiTrans *coolingtubelocalmatrix[fgkCoolingTubeCombiTransNumber]; |
d7599219 | 724 | for(Int_t i=0; i<fgkCoolingTubeCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 735 | } |
736 | } | |
737 | ///////////////////////////////////////////////////////////////////////////////// | |
738 | void AliITSv11GeometrySSD::SetLadderSegmentCombiTransMatrix(){ | |
44285dfa | 739 | ///////////////////////////////////////////////////////////// |
740 | // Method generating CombiTrans Matrix for SSD Ladder Segment | |
741 | ///////////////////////////////////////////////////////////// | |
d7599219 | 742 | //Translation Parameters LadderSegment: |
743 | //////////////////////////////////////////////////////// | |
44285dfa | 744 | const Double_t kladdersegmenttransx[fgkLadderSegmentCombiTransNumber] = { 0., |
d7599219 | 745 | - 0.5*(fgkSSDSensorWidth-fgkCarbonFiberTriangleLength), |
746 | fgkCarbonFiberTriangleLength+fgkCarbonFiberJunctionToSensorSupport, | |
747 | fgkCarbonFiberJunctionLength-(fgkCoolingTubeSupportLength | |
748 | - fgkCoolingTubeSupportRmax), | |
749 | 0.5*(fgkCarbonFiberTriangleLength-fgkCoolingTubeSeparation)}; | |
44285dfa | 750 | const Double_t kladdersegmenttransy[fgkLadderSegmentCombiTransNumber] = { 0., |
d7599219 | 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}; | |
44285dfa | 763 | const Double_t kladdersegmenttransz[fgkLadderSegmentCombiTransNumber] = { 0., |
d7599219 | 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 | //////////////////////////////////////////////////////// | |
44285dfa | 772 | const Double_t kladdersegmentrotphi[fgkLadderSegmentCombiTransNumber] = |
d7599219 | 773 | { 0., 0.,- 90., 0., 0.}; |
44285dfa | 774 | const Double_t kladdersegmentrottheta[fgkLadderSegmentCombiTransNumber] = |
d7599219 | 775 | { 0., 0., 0., 90., 0.}; |
44285dfa | 776 | const Double_t kladdersegmentrotpsi[fgkLadderSegmentCombiTransNumber] = |
d7599219 | 777 | { 0., 0., 0., 0., 0.}; |
778 | ////////////////////////////////////////////////////// | |
779 | //Name of CombiTrans Transformation of LadderSegment: | |
780 | ////////////////////////////////////////////////////// | |
44285dfa | 781 | char laddersegmentcombitransname[40]; |
782 | char laddersegmentrotname[40]; | |
783 | TGeoCombiTrans *laddersegmentlocalmatrix[fgkLadderSegmentCombiTransNumber]; | |
d7599219 | 784 | for(Int_t i=0; i<fgkLadderSegmentCombiTransNumber; i++) { |
44285dfa | 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]; | |
d7599219 | 797 | } |
798 | } | |
799 | ///////////////////////////////////////////////////////////////////////////////// | |
800 | void AliITSv11GeometrySSD::SetEndLadderSegmentCombiTransMatrix(Int_t i){ | |
44285dfa | 801 | ///////////////////////////////////////////////////////////// |
802 | // Method generating CombiTrans Matrix for SSD End Ladder Segment | |
803 | ///////////////////////////////////////////////////////////// | |
d7599219 | 804 | //Translation Parameters EndLadderSegment: |
805 | //////////////////////////////////////////////////////// | |
44285dfa | 806 | const Double_t kendladdersegmenttransx[fgkEndLadderSegmentCombiTransNumber] = |
807 | {0.0, | |
d7599219 | 808 | 0.0, |
44285dfa | 809 | - 0.25*(fgkSSDMountingBlockLength[0] |
810 | + fgkSSDMountingBlockLength[1]) | |
811 | + 0.5*fgkCarbonFiberTriangleLength, | |
d7599219 | 812 | 0.0}; |
44285dfa | 813 | const Double_t kendladdersegmenttransy[fgkEndLadderSegmentCombiTransNumber] = |
d7599219 | 814 | {0.5*fgkEndLadderCarbonFiberLowerJunctionLength[i], |
44285dfa | 815 | i==0 ? 0. : fgkCarbonFiberLowerSupportWidth, |
816 | fgkEndLadderMountingBlockPosition[i], | |
d7599219 | 817 | (1-i)*(fgkEndLadderMountingBlockPosition[i] |
818 | + 0.5*fgkSSDMountingBlockWidth)}; | |
44285dfa | 819 | const Double_t kendladdersegmenttransz[fgkEndLadderSegmentCombiTransNumber] = |
820 | {0.0, | |
d7599219 | 821 | 0.0, |
822 | - fgkSSDMountingBlockHeight[1] | |
823 | + 0.5*fgkSSDMountingBlockHeight[0], | |
44285dfa | 824 | - 0.5*fgkCarbonFiberLowerSupportHeight}; |
d7599219 | 825 | //////////////////////////////////////////////////////// |
826 | //Rotational Parameters EndLadderSegment: | |
827 | //////////////////////////////////////////////////////// | |
44285dfa | 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.}; | |
d7599219 | 834 | //////////////////////////////////////////////////////// |
835 | //Name of CombiTrans Transformation of EndLadderSegment: | |
836 | //////////////////////////////////////////////////////// | |
44285dfa | 837 | char endladdersegmentcombitransname[30]; |
838 | char endladdersegmentrotname[30]; | |
839 | TGeoCombiTrans *endladdersegmentlocalmatrix[fgkEndLadderSegmentCombiTransNumber]; | |
d7599219 | 840 | for(Int_t i=0; i<fgkEndLadderSegmentCombiTransNumber; i++){ |
44285dfa | 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]; | |
d7599219 | 853 | } |
854 | } | |
855 | ///////////////////////////////////////////////////////////////////////////////// | |
856 | void AliITSv11GeometrySSD::SetLadderCableCombiTransMatrix(Int_t iLayer){ | |
44285dfa | 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] | |
d7599219 | 863 | + fgkSSDFlexHeight[1]; |
44285dfa | 864 | Double_t ssdflexradiusmax = (fgkSSDFlexLength[3]-fgkSSDFlexLength[2]) |
d7599219 | 865 | / TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()); |
44285dfa | 866 | Double_t ssdladdercabletransx[3]; |
867 | ssdladdercabletransx[0] = (ssdflexradiusmax-fgkSSDFlexHeight[1]-ssdflexradius) | |
d7599219 | 868 | * TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad()) |
869 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()); | |
44285dfa | 870 | ssdladdercabletransx[1] = ((ssdflexradiusmax-fgkSSDFlexHeight[1]-ssdflexradius) |
871 | - ssdladdercabletransx[0] | |
d7599219 | 872 | / TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad())) |
873 | * TMath::Cos(fgkSSDFlexAngle*TMath::DegToRad()); | |
44285dfa | 874 | ssdladdercabletransx[2] = (fgkSSDFlexFullLength-2.*fgkSSDFlexAngle |
875 | * TMath::DegToRad()*ssdflexradiusmax | |
d7599219 | 876 | - fgkSSDFlexLength[2]-TMath::Pi() |
877 | * fgkSSDStiffenerHeight-fgkSSDFlexLength[0] | |
878 | - fgkSSDLadderCableWidth) | |
879 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()); | |
44285dfa | 880 | Double_t ssdladdercabletransz[3] = {ssdladdercabletransx[0] |
d7599219 | 881 | * TMath::Tan(2.*fgkSSDFlexAngle*TMath::DegToRad()), |
44285dfa | 882 | ssdladdercabletransx[1] |
d7599219 | 883 | * TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()), |
44285dfa | 884 | ssdladdercabletransx[2] |
d7599219 | 885 | * TMath::Tan(2.*fgkSSDFlexAngle*TMath::DegToRad())}; |
44285dfa | 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] = | |
d7599219 | 905 | new TGeoCombiTrans(-0.5*fgkCarbonFiberTriangleLength, |
906 | 0.,0.,NULL); | |
44285dfa | 907 | localladdercablecombitransmatrix[0][1] = fLadderSegmentCombiTransMatrix[1]; |
908 | localladdercablecombitransmatrix[0][2] = | |
d7599219 | 909 | new TGeoCombiTrans(fgkSSDModuleStiffenerPosition[0], |
910 | fgkSSDModuleStiffenerPosition[1],0.,0); | |
44285dfa | 911 | localladdercablecombitransmatrix[0][3] = fSSDModuleCombiTransMatrix[6]; |
912 | localladdercablecombitransmatrix[0][4] = | |
913 | new TGeoCombiTrans(-ssdladdercabletransx[0] | |
914 | - ssdladdercabletransx[1]-ssdladdercabletransx[2] | |
d7599219 | 915 | + fgkSSDFlexLength[0]-fgkSSDFlexLength[2], |
916 | 0., | |
917 | 0.5*fgkSSDFlexHeight[0]+2.*(fgkSSDFlexHeight[0] | |
918 | + fgkSSDFlexHeight[1])+2.*fgkSSDStiffenerHeight | |
44285dfa | 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.) | |
d7599219 | 960 | * fgkCarbonFiberJunctionWidth, |
44285dfa | 961 | laddercabletransvector[2]); |
962 | fLadderCableCombiTransMatrix[i] = new TGeoCombiTrans(*laddercabletrans, | |
963 | *laddercablerot); | |
d7599219 | 964 | } |
44285dfa | 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 | } | |
d7599219 | 972 | ///////////////////////////////////////////////////////////////////////////////// |
973 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupportShape(Double_t length, | |
974 | Double_t height,Double_t width,Double_t* thickness){ | |
44285dfa | 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]; | |
d7599219 | 984 | //First Shape Vertex Positioning |
44285dfa | 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]); | |
d7599219 | 989 | //Second Shape Vertex Positioning |
44285dfa | 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] = | |
d7599219 | 995 | {"SSDSensorSupportShape1","SSDSensorSupportShape2"}; |
44285dfa | 996 | TGeoArb8* lSSDSensorSupportShape[kshapesnumber]; |
997 | for(Int_t i = 0; i< kshapesnumber; i++) lSSDSensorSupportShape[i] = | |
998 | GetArbShape(vertexposition[i],shapewidth,i==0 ? | |
d7599219 | 999 | thickness[1]: thickness[0], |
44285dfa | 1000 | ssdsensorsupportshapename[i]); |
d7599219 | 1001 | ///////////////////////////////////// |
1002 | //Setting Translations and Rotations: | |
1003 | ///////////////////////////////////// | |
44285dfa | 1004 | TGeoRotation* ssdsensorsupportshaperot[2]; |
1005 | ssdsensorsupportshaperot[0] = | |
d7599219 | 1006 | new TGeoRotation("SSDSensorSupportShapeRot1",180.,0.,0.); |
44285dfa | 1007 | ssdsensorsupportshaperot[1] = |
d7599219 | 1008 | new TGeoRotation("SSDSensorSupportShapeRot2",90.,90.,-90.); |
44285dfa | 1009 | TGeoTranslation* ssdsensorsupportshapetrans = |
d7599219 | 1010 | new TGeoTranslation("SSDSensorSupportShapeTrans",0.,0., |
1011 | 0.5*thickness[0]); | |
44285dfa | 1012 | TGeoCombiTrans* ssdsensorsupportcombitrans = |
d7599219 | 1013 | new TGeoCombiTrans("SSDSensorSupportCombiTrans",0.5*thickness[0],width,0., |
44285dfa | 1014 | new TGeoRotation((*ssdsensorsupportshaperot[1]) |
1015 | * (*ssdsensorsupportshaperot[0]))); | |
1016 | TGeoVolume* ssdsensorsupportcompvolume = | |
d7599219 | 1017 | new TGeoVolumeAssembly("SSDSensorSupportCompVolume"); |
44285dfa | 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; | |
d7599219 | 1025 | } |
1026 | ///////////////////////////////////////////////////////////////////////////////// | |
1027 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupport(Int_t VolumeKind, Int_t n){ | |
44285dfa | 1028 | ///////////////////////////////////////////////////////////// |
1029 | // Method generating SSD Sensor Support | |
1030 | ///////////////////////////////////////////////////////////// | |
1031 | TGeoVolume* ssdsensorsupport; | |
1032 | Double_t sidesupporthickness[2] = {fgkSSDSensorSideSupportThickness[0], | |
d7599219 | 1033 | fgkSSDSensorSideSupportThickness[1]}; |
44285dfa | 1034 | VolumeKind == 0 ? ssdsensorsupport = GetSSDSensorSupportShape( |
d7599219 | 1035 | fgkSSDSensorSideSupportLength, |
1036 | fgkSSDSensorSideSupportHeight[(n==0 ? 0 : 1)], | |
1037 | fgkSSDSensorSideSupportWidth, | |
44285dfa | 1038 | sidesupporthickness) : |
1039 | ssdsensorsupport = GetSSDSensorSupportShape(fgkSSDSensorCenterSupportLength, | |
d7599219 | 1040 | fgkSSDSensorCenterSupportHeight[(n==0 ? 0 : 1)], |
1041 | fgkSSDSensorCenterSupportWidth, | |
44285dfa | 1042 | sidesupporthickness); |
1043 | return ssdsensorsupport; | |
d7599219 | 1044 | } |
1045 | ///////////////////////////////////////////////////////////////////////////////// | |
1046 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensorSupportAssembly(Int_t n){ | |
44285dfa | 1047 | ///////////////////////////////////////////////////////////// |
1048 | // Method generating SSD Sensor Support Assembly | |
1049 | ///////////////////////////////////////////////////////////// | |
1050 | TGeoVolume* ssdsensorsupportassembly = | |
d7599219 | 1051 | new TGeoVolumeAssembly("SSDSensorSupportAssembly"); |
44285dfa | 1052 | const Int_t kvolumenumber = 2; |
1053 | TGeoVolume* ssdsensorsupport[kvolumenumber]; | |
1054 | for(Int_t i=0; i<kvolumenumber; i++) ssdsensorsupport[i] = | |
d7599219 | 1055 | GetSSDSensorSupport(i,n); |
1056 | SetSSDSensorSupportCombiTransMatrix(); | |
1057 | for(Int_t i=0; i<fgkSSDSensorSupportCombiTransNumber; i++) | |
44285dfa | 1058 | ssdsensorsupportassembly->AddNode((i<2 ? ssdsensorsupport[0]: |
1059 | ssdsensorsupport[1]), | |
1060 | i+1,fSSDSensorSupportCombiTransMatrix[i]); | |
1061 | return ssdsensorsupportassembly; | |
d7599219 | 1062 | } |
1063 | ///////////////////////////////////////////////////////////////////////////////// | |
1064 | TGeoVolume* AliITSv11GeometrySSD::GetSSDModule(Int_t iChipCablesHeight){ | |
44285dfa | 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]); | |
d7599219 | 1075 | SetSSDModuleCombiTransMatrix(fgkSSDChipCablesHeight[iChipCablesHeight+2]); |
44285dfa | 1076 | TGeoCombiTrans* ssdmoduleglobalcombitrans = |
d7599219 | 1077 | new TGeoCombiTrans("SSDModuleGlobalCombiTrans", |
1078 | fgkSSDModuleStiffenerPosition[0], | |
1079 | fgkSSDModuleStiffenerPosition[1],0.,NULL); | |
44285dfa | 1080 | TGeoHMatrix* ssdmodulehmatrix[fgkSSDModuleCombiTransNumber]; |
1081 | TGeoVolume* ssdmodule = new TGeoVolumeAssembly("SSDModule"); | |
d7599219 | 1082 | for(Int_t i=0; i<fgkSSDModuleCombiTransNumber; i++){ |
44285dfa | 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]); | |
d7599219 | 1088 | } |
44285dfa | 1089 | return ssdmodule; |
d7599219 | 1090 | } |
1091 | ///////////////////////////////////////////////////////////////////////////////// | |
1092 | TGeoVolume* AliITSv11GeometrySSD::GetSSDSensor(){ | |
44285dfa | 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, | |
d7599219 | 1101 | 0.5*fgkSSDSensorHeight); |
44285dfa | 1102 | TGeoVolume* ssdsensorsensitive = |
1103 | new TGeoVolume(fgkSSDSensitiveVolName,ssdsensorsensitiveshape,fSSDSensorMedium); | |
1104 | ssdsensorsensitive->SetLineColor(fColorSilicon); | |
1105 | TGeoBBox* ssdsensorinsensitiveshape[2]; | |
1106 | ssdsensorinsensitiveshape[0] = new TGeoBBox("SSDSensorInsensitiveShape1", | |
d7599219 | 1107 | 0.5*fgkSSDSensorLength, |
1108 | 0.5*fgkSSDSensorInsensitiveWidth, | |
1109 | 0.5*fgkSSDSensorHeight); | |
44285dfa | 1110 | ssdsensorinsensitiveshape[1] = new TGeoBBox("SSDSensorInsensitiveShape2", |
d7599219 | 1111 | 0.5*fgkSSDSensorInsensitiveWidth, |
44285dfa | 1112 | 0.5*ssdsensitivewidth, |
d7599219 | 1113 | 0.5*fgkSSDSensorHeight); |
44285dfa | 1114 | const char* ssdsensorinsensitivename[2] = {"SSDSensorInsensitive1", |
d7599219 | 1115 | "SSDSensorInsensitive2"}; |
44285dfa | 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); | |
d7599219 | 1121 | } |
44285dfa | 1122 | TGeoVolume* ssdsensorinsensitivevol = |
d7599219 | 1123 | new TGeoVolumeAssembly("SSDSensorInsensitiveVol"); |
1124 | for(Int_t i=0; i<4; i++) | |
44285dfa | 1125 | ssdsensorinsensitivevol->AddNode(i%2==0 ? ssdsensorinsensitive[0]: |
1126 | ssdsensorinsensitive[1],i<2?1:2, | |
d7599219 | 1127 | new TGeoTranslation(0.5*(1.-TMath::Power(-1.,i))*(i==1? 1.:-1.) |
44285dfa | 1128 | * (ssdsensorsensitiveshape->GetDX()+ssdsensorinsensitiveshape[1]->GetDX()), |
d7599219 | 1129 | 0.5*(1.+TMath::Power(-1.,i))*(i==0?-1.: 1.) |
44285dfa | 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; | |
d7599219 | 1134 | } |
1135 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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", | |
d7599219 | 1143 | 0.5*fgkSSDChipLength, |
1144 | 0.5*fgkSSDChipWidth, | |
1145 | 0.5*(fgkSSDChipHeight-fgkSSDChipGlueHeight)); | |
44285dfa | 1146 | ssdchipcompshape[1] = new TGeoBBox("SSDChipGlueCompShape", |
d7599219 | 1147 | 0.5*fgkSSDChipLength, |
1148 | 0.5*fgkSSDChipWidth, | |
1149 | 0.5*fgkSSDChipGlueHeight); | |
44285dfa | 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, | |
d7599219 | 1162 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] |
1163 | - 2.*(fgkSSDStiffenerWidth-fgkSSDStiffenerToChipDist | |
1164 | - 0.5*fgkSSDChipWidth)}; | |
44285dfa | 1165 | TGeoVolume* ssdchipassembly = new TGeoVolumeAssembly("SSDChipAssembly"); |
1166 | for(Int_t i=0; i<kssdchiprownumber; i++) | |
d7599219 | 1167 | for(Int_t j=0; j<fgkSSDChipNumber; j++) |
44285dfa | 1168 | ssdchipassembly->AddNode(ssdchip,fgkSSDChipNumber*i+j+1, |
1169 | new TGeoTranslation(j*ssdchipseparation[0],i*ssdchipseparation[1],0.)); | |
1170 | return ssdchipassembly; | |
d7599219 | 1171 | } |
1172 | ///////////////////////////////////////////////////////////////////////////////// | |
1173 | TGeoVolume* AliITSv11GeometrySSD::GetSSDStiffenerAssembly(){ | |
44285dfa | 1174 | ///////////////////////////////////////////////////////////// |
1175 | // Method generating SSD Stiffener Assembly | |
1176 | ///////////////////////////////////////////////////////////// | |
1177 | const Int_t kssdstiffenernumber = 2; | |
1178 | Double_t ssdstiffenerseparation = fgkSSDSensorLength | |
d7599219 | 1179 | - 2.*fgkSSDModuleStiffenerPosition[1] |
1180 | - fgkSSDStiffenerWidth; | |
44285dfa | 1181 | TGeoVolume* ssdstiffener = new TGeoVolumeAssembly("SSDStiffener"); |
d7599219 | 1182 | //////////////////////////// |
1183 | // Stiffener Volumes | |
1184 | /////////////////////////// | |
44285dfa | 1185 | const Int_t kstiffenerboxnumber = 6; |
1186 | TGeoBBox* ssdstiffenerboxshapes[kstiffenerboxnumber]; | |
1187 | ssdstiffenerboxshapes[0] = new TGeoBBox("SSDStiffenerBoxShape1", | |
d7599219 | 1188 | 0.5* fgkSSDStiffenerLength, |
1189 | 0.5* fgkSSDStiffenerWidth, | |
1190 | 0.5*(fgkSSDStiffenerHeight | |
1191 | - fgkSSDConnectorHeight)); | |
44285dfa | 1192 | ssdstiffenerboxshapes[1] = new TGeoBBox("SSDStiffenerBoxShape2", |
d7599219 | 1193 | 0.5*(fgkSSDConnectorPosition[0] |
1194 | - 2.0* fgkSSDConnectorLength | |
1195 | - fgkSSDConnectorSeparation), | |
1196 | 0.5* fgkSSDStiffenerWidth, | |
1197 | 0.5* fgkSSDConnectorHeight); | |
44285dfa | 1198 | ssdstiffenerboxshapes[2] = new TGeoBBox("SSDStiffenerBoxShape3", |
d7599219 | 1199 | 0.5*(fgkSSDConnectorSeparation |
1200 | + 2.* fgkSSDConnectorLength), | |
1201 | 0.5* fgkSSDConnectorPosition[1], | |
1202 | 0.5* fgkSSDConnectorHeight); | |
44285dfa | 1203 | ssdstiffenerboxshapes[3] = new TGeoBBox("SSDStiffenerBoxShape4", |
1204 | ssdstiffenerboxshapes[2]->GetDX(), | |
d7599219 | 1205 | 0.5*(fgkSSDStiffenerWidth |
1206 | - fgkSSDConnectorPosition[1] | |
1207 | - fgkSSDConnectorWidth), | |
1208 | 0.5* fgkSSDConnectorHeight); | |
44285dfa | 1209 | ssdstiffenerboxshapes[4] = new TGeoBBox("SSDStiffenerBoxShape5", |
d7599219 | 1210 | 0.5* fgkSSDConnectorSeparation, |
1211 | 0.5* fgkSSDConnectorWidth, | |
1212 | 0.5* fgkSSDConnectorHeight); | |
44285dfa | 1213 | ssdstiffenerboxshapes[5] = new TGeoBBox("SSDStiffenerBoxShape6", |
d7599219 | 1214 | 0.5*(fgkSSDStiffenerLength |
1215 | - fgkSSDConnectorPosition[0]), | |
1216 | 0.5* fgkSSDStiffenerWidth, | |
1217 | 0.5* fgkSSDConnectorHeight); | |
44285dfa | 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); | |
d7599219 | 1225 | } |
1226 | //////////////////////////// | |
1227 | // Connector | |
1228 | /////////////////////////// | |
44285dfa | 1229 | TGeoBBox* ssdconnectorshape = new TGeoBBox("SSDConnectorShape", |
d7599219 | 1230 | 0.5*fgkSSDConnectorLength, |
1231 | 0.5*fgkSSDConnectorWidth, | |
1232 | 0.5*fgkSSDConnectorHeight); | |
44285dfa | 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] | |
d7599219 | 1240 | - fgkSSDConnectorSeparation-1.5*fgkSSDConnectorLength, |
44285dfa | 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] | |
d7599219 | 1246 | - 0.5*fgkSSDConnectorLength, |
44285dfa | 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]); | |
d7599219 | 1252 | ////////////////////////////////////// |
1253 | // TGeoTranslation for Stiffener Boxes | |
1254 | ////////////////////////////////////// | |
44285dfa | 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()), | |
d7599219 | 1259 | 0., |
44285dfa | 1260 | ssdstiffenerboxshapes[0]->GetDZ()+ssdstiffenerboxshapes[1]->GetDZ()); |
1261 | ssdstiffenerboxtrans[2] = new TGeoTranslation("SSDStiffenerBoxTrans3", | |
1262 | - ssdstiffenerboxshapes[0]->GetDX()-ssdstiffenerboxshapes[2]->GetDX() | |
d7599219 | 1263 | + fgkSSDConnectorPosition[0], |
44285dfa | 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() | |
d7599219 | 1268 | + fgkSSDConnectorPosition[0], |
44285dfa | 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(), | |
d7599219 | 1280 | 0., |
44285dfa | 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.)); | |
d7599219 | 1290 | } |
1291 | //////////////////////////// | |
1292 | // Capacitor 0603-2200 nF | |
1293 | /////////////////////////// | |
44285dfa | 1294 | const Int_t knapacitor0603number = 5; |
1295 | TGeoBBox* capacitor0603shape = new TGeoBBox("Capacitor0603Shape", | |
d7599219 | 1296 | 0.5*fgkSSDCapacitor0603Length, |
1297 | 0.5*fgkSSDCapacitor0603Width, | |
1298 | 0.5*fgkSSDCapacitor0603Height); | |
44285dfa | 1299 | TGeoVolume* capacitor0603 = new TGeoVolume("Capacitor0603",capacitor0603shape, |
1300 | fSSDStiffener0603CapacitorMedium); | |
1301 | capacitor0603->SetLineColor(fColorAl); | |
d7599219 | 1302 | //////////////////////////// |
1303 | // Capacitor 1812-330 nF | |
1304 | /////////////////////////// | |
44285dfa | 1305 | TGeoBBox* capacitor1812shape = new TGeoBBox("Capacitor1812Shape", |
d7599219 | 1306 | 0.5*fgkSSDCapacitor1812Length, |
1307 | 0.5*fgkSSDCapacitor1812Width, | |
1308 | 0.5*fgkSSDCapacitor1812Height); | |
44285dfa | 1309 | TGeoVolume* capacitor1812 = new TGeoVolume("Capacitor1812",capacitor1812shape, |
1310 | fSSDStiffener1812CapacitorMedium); | |
1311 | capacitor1812->SetLineColor(fColorAl); | |
1312 | TGeoTranslation* capacitor1812trans = new TGeoTranslation("Capacitor1812Trans", | |
d7599219 | 1313 | 0., |
44285dfa | 1314 | 0.5*fgkSSDStiffenerWidth+ssdstiffenerseparation |
1315 | - capacitor1812shape->GetDY()-fgkSSDConnectorPosition[1], | |
1316 | ssdstiffenerboxshapes[0]->GetDZ()+fgkSSDConnectorHeight | |
d7599219 | 1317 | + 0.5*fgkSSDCapacitor1812Height); |
1318 | //////////////////////////// | |
1319 | //Hybrid Wire | |
1320 | //////////////////////////// | |
44285dfa | 1321 | Double_t wirex = 2.*(fgkSSDConnectorPosition[0]-0.5*fgkSSDStiffenerLength |
d7599219 | 1322 | - 0.5*fgkSSDConnectorLength)-fgkSSDConnectorLength |
1323 | - fgkSSDConnectorSeparation; | |
44285dfa | 1324 | Double_t wirey = ssdstiffenerseparation+fgkSSDStiffenerWidth |
d7599219 | 1325 | - 2.*fgkSSDConnectorPosition[1]-fgkSSDConnectorWidth; |
44285dfa | 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", | |
d7599219 | 1336 | 0.5*fgkSSDStiffenerLength-fgkSSDConnectorPosition[0] |
1337 | + 1.5*fgkSSDConnectorLength+fgkSSDConnectorSeparation, | |
44285dfa | 1338 | 0.5*ssdwireradius-0.5*fgkSSDStiffenerWidth |
d7599219 | 1339 | + fgkSSDConnectorPosition[1]+0.5*fgkSSDConnectorWidth, |
44285dfa | 1340 | ssdstiffenerboxshapes[0]->GetDZ()+fgkSSDConnectorHeight |
d7599219 | 1341 | + fgkSSDWireRadius, |
1342 | new TGeoRotation("HybridWireRot1",0.,90.,0.)); | |
44285dfa | 1343 | hybridwirecombitrans[1] = new TGeoCombiTrans("HybridWireCombiTrans2", |
d7599219 | 1344 | 0., |
1345 | - 0.5*fgkSSDConnectorWidth+fgkSSDWireRadius, | |
1346 | 0., | |
1347 | new TGeoRotation("HybridWireRot2", | |
44285dfa | 1348 | - wireangle*TMath::RadToDeg(),0.,0.)); |
1349 | TGeoHMatrix* hybridwirematrix = new TGeoHMatrix(); | |
1350 | hybridwirematrix->MultiplyLeft(hybridwirecombitrans[0]); | |
1351 | hybridwirematrix->MultiplyLeft(hybridwirecombitrans[1]); | |
d7599219 | 1352 | //////////////////////////// |
1353 | // Stiffener Assembly | |
1354 | /////////////////////////// | |
44285dfa | 1355 | TGeoVolume* ssdstiffenerassembly = |
d7599219 | 1356 | new TGeoVolumeAssembly("SSDStiffenerAssembly"); |
44285dfa | 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. | |
d7599219 | 1362 | )/6*fgkSSDStiffenerLength, |
44285dfa | 1363 | i*ssdstiffenerseparation+ |
d7599219 | 1364 | 0.5*((i==0? 1:-1)*fgkSSDStiffenerWidth |
1365 | +(i==0? -1:+1)*fgkSSDCapacitor0603Width), | |
1366 | -0.5*(fgkSSDStiffenerHeight+fgkSSDCapacitor0603Height))); | |
1367 | } | |
44285dfa | 1368 | if(i==1) ssdstiffenerassembly->AddNode(capacitor1812,1,capacitor1812trans); |
d7599219 | 1369 | } |
44285dfa | 1370 | return ssdstiffenerassembly; |
d7599219 | 1371 | } |
1372 | ///////////////////////////////////////////////////////////////////////////////// | |
1373 | TGeoVolume* AliITSv11GeometrySSD::GetSSDChipCables(Double_t SSDChipCablesHeigth, | |
1374 | char* side){ | |
44285dfa | 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 | |
d7599219 | 1382 | - fgkSSDChipCablesHeight[0] |
1383 | - fgkSSDChipCablesHeight[1]); | |
44285dfa | 1384 | ssdchipcablesradius[1] = ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0]; |
1385 | Double_t ssdchipcablespiecelength = 0.5*(fgkSSDChipCablesWidth[0] | |
1386 | - 2.*TMath::Pi()*ssdchipcablesradius[0] | |
1387 | - ssdchipcablesradius[0] | |
d7599219 | 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 | ////////////////////////// | |
44285dfa | 1398 | char* ssdchipcablesboxshapename[2*kssdchipcableslaynumber] = |
d7599219 | 1399 | {"SSDChipCablesBoxLay0Shape0","SSDChipCablesBoxLay0Shape1", |
1400 | "SSDChipCablesBoxLay1Shape0","SSDChipCablesBoxLay1Shape1"}; | |
44285dfa | 1401 | char* ssdchipcablestubesegshapename[2*kssdchipcableslaynumber] = |
d7599219 | 1402 | {"SSDChipCablesTubeSegLay0Shape0","SSDChipCablesTubeSegLay0Shape1", |
1403 | "SSDChipCablesTubeSegLay1Shape0","SSDChipCablesTubeSegLay1Shape1"}; | |
44285dfa | 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, | |
d7599219 | 1411 | 0.5*fgkSSDChipCablesLength[1], |
1412 | 0.5*fgkSSDChipCablesHeight[i]); | |
44285dfa | 1413 | ssdchipcablesboxshape[i][1] = new TGeoBBox(ssdchipcablesboxshapename[2*i+1], |
1414 | 0.5*(ssdchipcablespiecelength+ssdchipcablesradius[0] | |
d7599219 | 1415 | + (side=="Right" ? 0. : fgkSSDModuleStiffenerPosition[1])), |
1416 | 0.5*fgkSSDChipCablesLength[1],0.5*fgkSSDChipCablesHeight[i]); | |
44285dfa | 1417 | ssdchipcablestubesegshape[i][0] = |
1418 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i], | |
1419 | ssdchipcablesradius[1]-i*fgkSSDChipCablesHeight[1], | |
1420 | ssdchipcablesradius[i],0.5*fgkSSDChipCablesLength[1], | |
d7599219 | 1421 | 0.,180.); |
44285dfa | 1422 | ssdchipcablestubesegshape[i][1] = |
1423 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i+1], | |
1424 | ssdchipcablesradius[0]+i*fgkSSDChipCablesHeight[0], | |
1425 | ssdchipcablesradius[0]+fgkSSDChipCablesHeight[0] | |
d7599219 | 1426 | + i*fgkSSDChipCablesHeight[1], |
1427 | 0.5*fgkSSDChipCablesLength[1],0.,180.); | |
44285dfa | 1428 | if(side!="Right") ssdchipcablestubesegshape[i][2] = |
1429 | new TGeoTubeSeg(ssdchipcablestubesegshapename[2*i], | |
d7599219 | 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 | ////////////////////////// | |
44285dfa | 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, | |
d7599219 | 1450 | 0.5*fgkSSDChipWidth, |
1451 | 0.5*fgkSSDChipCablesLength[1], | |
1452 | 0.5*fgkSSDChipCablesHeight[i]); | |
44285dfa | 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, | |
d7599219 | 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 | ////////////////// | |
44285dfa | 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]; | |
d7599219 | 1472 | //First Shape Vertex Positioning |
44285dfa | 1473 | ssdchipcablestrapezoidvertex[0][0] = new TVector3(); |
1474 | ssdchipcablestrapezoidvertex[0][1] = | |
d7599219 | 1475 | new TVector3(0.5*(fgkSSDChipCablesLength[0]-fgkSSDChipCablesLength[1])); |
1476 | //Second Shape Vertex Positioning | |
44285dfa | 1477 | ssdchipcablestrapezoidvertex[1][0] = |
1478 | new TVector3(*ssdchipcablestrapezoidvertex[0][0]); | |
1479 | ssdchipcablestrapezoidvertex[1][1] = | |
1480 | new TVector3(*ssdchipcablestrapezoidvertex[0][1]); | |
d7599219 | 1481 | //Setting the names of shapes and volumes |
44285dfa | 1482 | char* ssdchipcablestrapezoidboxshapename[kssdchipcablestrapezoidnumber] = |
d7599219 | 1483 | {"SSDChipCablesTrapezoidBoxShape1","SSDChipCablesTrapezoidBoxShape2"}; |
44285dfa | 1484 | char* ssdchipcablestrapezoidshapename[kssdchipcablestrapezoidnumber] = |
d7599219 | 1485 | {"SSDChipCablesTrapezoidShape1","SSDChipCablesTrapezoidShape2"}; |
44285dfa | 1486 | char* ssdchipcablestrapezoidboxname[kssdchipcablestrapezoidnumber] = |
d7599219 | 1487 | {"SSDChipCablesTrapezoidBox1","SSDChipCablesTrapezoidBox2"}; |
44285dfa | 1488 | char* ssdhipcablestrapezoidname[kssdchipcablestrapezoidnumber] = |
d7599219 | 1489 | {"SSDChipCablesTrapezoid1","SSDChipCablesTrapezoid2"}; |
44285dfa | 1490 | char* ssdchipcablestrapezoidassemblyname[kssdchipcablestrapezoidnumber] = |
d7599219 | 1491 | {"SSDChipCablesTrapezoidAssembly1","SSDChipCablesTrapezoidAssembly2"}; |
1492 | //Setting the Shapes | |
44285dfa | 1493 | TGeoBBox* ssdchipcablestrapezoidboxshape[kssdchipcablestrapezoidnumber]; |
1494 | TGeoArb8* ssdchipcablestrapezoidshape[kssdchipcablestrapezoidnumber]; | |
d7599219 | 1495 | //Setting the Volumes |
44285dfa | 1496 | TGeoVolume* ssdchipcablestrapezoidbox[kssdchipcablestrapezoidnumber]; |
1497 | TGeoVolume* ssdchipcablestrapezoid[kssdchipcablestrapezoidnumber]; | |
1498 | TGeoVolume* ssdchipcablestrapezoidassembly[kssdchipcablestrapezoidnumber]; | |
1499 | Double_t ssdchipcablestrapezoidwidth[kssdchipcablesvertexnumber] = | |
d7599219 | 1500 | {fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2],fgkSSDChipCablesWidth[1]}; |
44285dfa | 1501 | for(Int_t i=0; i<kssdchipcablestrapezoidnumber; i++){ |
1502 | ssdchipcablestrapezoidboxshape[i] = | |
1503 | new TGeoBBox(ssdchipcablestrapezoidboxshapename[i], | |
d7599219 | 1504 | 0.5*fgkSSDChipCablesLength[1], |
1505 | 0.5*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]), | |
1506 | 0.5*fgkSSDChipCablesHeight[i]); | |
44285dfa | 1507 | ssdchipcablestrapezoidshape[i] = |
1508 | GetTrapezoidShape(ssdchipcablestrapezoidvertex[i], | |
1509 | ssdchipcablestrapezoidwidth, | |
d7599219 | 1510 | fgkSSDChipCablesHeight[i], |
44285dfa | 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, | |
d7599219 | 1524 | new TGeoTranslation(0.5*fgkSSDChipCablesLength[1], |
1525 | 0.5*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]),0.)); | |
44285dfa | 1526 | ssdchipcablestrapezoidassembly[i]->AddNode(ssdchipcablestrapezoid[i],0, |
d7599219 | 1527 | new TGeoCombiTrans(0.,0.,0.,new TGeoRotation("",90.,180.,-90.))); |
44285dfa | 1528 | ssdchipcablestrapezoidassembly[i]->AddNode(ssdchipcablestrapezoid[i],1, |
d7599219 | 1529 | new TGeoTranslation(fgkSSDChipCablesLength[1],0.,0.)); |
1530 | } | |
1531 | ///////////////////////////// | |
1532 | //Box and Tube Seg CombiTrans | |
1533 | ///////////////////////////// | |
44285dfa | 1534 | TGeoTranslation* ssdchipcablesboxtrans[2*kssdchipcableslaynumber]; |
1535 | ssdchipcablesboxtrans[0] = | |
d7599219 | 1536 | new TGeoTranslation("SSDChipCablesLay1Box1Trans",0.,0.,0.); |
44285dfa | 1537 | ssdchipcablesboxtrans[1] = |
d7599219 | 1538 | new TGeoTranslation("SSDChipCablesLay1Box2Trans", |
44285dfa | 1539 | ssdchipcablesboxshape[0][1]->GetDX() |
1540 | - 0.5*ssdchipcablespiecelength, | |
d7599219 | 1541 | 0.0, |
44285dfa | 1542 | - 2.*ssdchipcablesradius[0] |
d7599219 | 1543 | - fgkSSDChipCablesHeight[0]); |
44285dfa | 1544 | ssdchipcablesboxtrans[2] = new TGeoTranslation("SSDChipCablesLay2Box1Trans", |
d7599219 | 1545 | 0.0, |
1546 | 0.0, | |
1547 | 0.5*(fgkSSDChipCablesHeight[0] | |
1548 | + fgkSSDChipCablesHeight[1])); | |
44285dfa | 1549 | ssdchipcablesboxtrans[3] = |
d7599219 | 1550 | new TGeoTranslation("SSDChipCablesLay2Box2Trans", |
44285dfa | 1551 | ssdchipcablesboxshape[1][1]->GetDX() |
1552 | - 0.5*ssdchipcablespiecelength, | |
d7599219 | 1553 | 0.0, |
44285dfa | 1554 | - 2.*ssdchipcablesradius[0] |
d7599219 | 1555 | - 0.5*fgkSSDChipCablesHeight[1] |
1556 | - 1.5*fgkSSDChipCablesHeight[0]); | |
44285dfa | 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] = | |
d7599219 | 1565 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg1CombiTrans", |
44285dfa | 1566 | 0.5*ssdchipcablespiecelength, |
d7599219 | 1567 | 0.0, |
44285dfa | 1568 | ssdchipcablesradius[0] |
d7599219 | 1569 | - 0.5*fgkSSDChipCablesHeight[0], |
44285dfa | 1570 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); |
1571 | ssdchipcablestubesegcombitrans[1] = | |
d7599219 | 1572 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg2CombiTrans", |
44285dfa | 1573 | - 0.5*ssdchipcablespiecelength, |
d7599219 | 1574 | 0.0, |
44285dfa | 1575 | - ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0], |
1576 | new TGeoRotation((*ssdchipcablesrot[2])*(*ssdchipcablesrot[0]))); | |
1577 | ssdchipcablestubesegcombitrans[2] = | |
d7599219 | 1578 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg1CombiTrans", |
44285dfa | 1579 | 0.5*ssdchipcablespiecelength, |
d7599219 | 1580 | 0.0, |
44285dfa | 1581 | ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0], |
1582 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); | |
1583 | ssdchipcablestubesegcombitrans[3] = | |
d7599219 | 1584 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg2CombiTrans", |
44285dfa | 1585 | - 0.5*ssdchipcablespiecelength, |
d7599219 | 1586 | 0.0, |
44285dfa | 1587 | - ssdchipcablesradius[0]+0.5*fgkSSDChipCablesHeight[0] |
d7599219 | 1588 | - fgkSSDChipCablesHeight[0], |
44285dfa | 1589 | new TGeoRotation((*ssdchipcablesrot[2])*(*ssdchipcablesrot[0]))); |
1590 | ssdchipcablestubesegcombitrans[4] = | |
d7599219 | 1591 | new TGeoCombiTrans("SSDChipCablesLay1TubeSeg4CombiTrans", |
44285dfa | 1592 | 0.5*ssdchipcablespiecelength+ssdchipcablesradius[0] |
d7599219 | 1593 | + fgkSSDModuleStiffenerPosition[1], |
1594 | 0.0, | |
44285dfa | 1595 | - 2.*ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0] |
d7599219 | 1596 | - (0.5*fgkSSDSensorHeight+fgkSSDChipCablesHeight[0] |
1597 | + fgkSSDChipCablesHeight[1]), | |
44285dfa | 1598 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); |
1599 | ssdchipcablestubesegcombitrans[5] = | |
d7599219 | 1600 | new TGeoCombiTrans("SSDChipCablesLay2TubeSeg5CombiTrans", |
44285dfa | 1601 | 0.5*ssdchipcablespiecelength+ssdchipcablesradius[0] |
d7599219 | 1602 | + fgkSSDModuleStiffenerPosition[1], |
1603 | 0.0, | |
44285dfa | 1604 | - 2.*ssdchipcablesradius[0]-0.5*fgkSSDChipCablesHeight[0] |
d7599219 | 1605 | - (0.5*fgkSSDSensorHeight+fgkSSDChipCablesHeight[0] |
1606 | + fgkSSDChipCablesHeight[1]), | |
44285dfa | 1607 | new TGeoRotation((*ssdchipcablesrot[1])*(*ssdchipcablesrot[0]))); |
1608 | TGeoCombiTrans* ssdchipcablestrapezoidcombitrans[kssdchipcableslaynumber]; | |
1609 | ssdchipcablestrapezoidcombitrans[0] = (side=="Right" ? | |
d7599219 | 1610 | new TGeoCombiTrans("SSDChipCableLay1TrapezoidRightCombiTrans", |
44285dfa | 1611 | 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] |
1612 | + ssdchipcablesradius[0], | |
d7599219 | 1613 | - 0.5*fgkSSDChipCablesLength[1], |
44285dfa | 1614 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0], |
d7599219 | 1615 | new TGeoRotation("",90.,0.,0.)) : |
1616 | new TGeoCombiTrans("SSDChipCableLay1TrapezoidLeftCombiTrans", | |
1617 | - 2.*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]) | |
44285dfa | 1618 | + 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] |
1619 | + ssdchipcablesradius[0]+fgkSSDModuleStiffenerPosition[1], | |
d7599219 | 1620 | 0.5*fgkSSDChipCablesLength[1], |
1621 | - 2.*(fgkSSDChipCablesHeight[0]+fgkSSDChipCablesHeight[1]) | |
44285dfa | 1622 | - 2.*ssdchipcablesradius[0]-fgkSSDSensorHeight, |
d7599219 | 1623 | new TGeoRotation("",-90.,0.,0.))); |
44285dfa | 1624 | ssdchipcablestrapezoidcombitrans[1] = (side=="Right" ? |
d7599219 | 1625 | new TGeoCombiTrans("SSDChipCableLay2TrapezoidRightCombiTrans", |
44285dfa | 1626 | 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] |
1627 | + ssdchipcablesradius[0], | |
d7599219 | 1628 | - 0.5*fgkSSDChipCablesLength[1], |
1629 | - 0.5*(fgkSSDChipCablesHeight[0]+fgkSSDChipCablesHeight[1]) | |
44285dfa | 1630 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0], |
d7599219 | 1631 | new TGeoRotation("",90.,0.,0.)) : |
1632 | new TGeoCombiTrans("SSDChipCableLay2TrapezoidLeftCombiTrans", | |
1633 | - 2.*(fgkSSDChipCablesWidth[1]+fgkSSDChipCablesWidth[2]) | |
44285dfa | 1634 | + 0.5*ssdchipcablespiecelength+ssdchipcablestrapezoidwidth[0] |
1635 | + ssdchipcablesradius[0]+fgkSSDModuleStiffenerPosition[1], | |
d7599219 | 1636 | 0.5*fgkSSDChipCablesLength[1],-0.5*(fgkSSDChipCablesHeight[0] |
1637 | + fgkSSDChipCablesHeight[1])-fgkSSDChipCablesHeight[1] | |
44285dfa | 1638 | - fgkSSDChipCablesHeight[0]-2.*ssdchipcablesradius[0] |
d7599219 | 1639 | - fgkSSDSensorHeight,new TGeoRotation("",-90.,0.,0.))); |
1640 | ////////////////////////// | |
1641 | //Box and Tube Seg Volumes | |
1642 | ////////////////////////// | |
44285dfa | 1643 | char* ssdchipcablesboxname[2*kssdchipcableslaynumber] = |
d7599219 | 1644 | {"SSDChipCablesLay1Box1","SSDChipCablesLay1Box2", |
1645 | "SSDChipCablesLay2Box1","SSDChipCablesLay2Box2"}; | |
44285dfa | 1646 | char* ssdchiprightcablestubesegname[2*kssdchipcableslaynumber] = |
d7599219 | 1647 | {"SSDChipRightCablesLay1TubeSeg1","SSDChipRightCablesLay1TubeSeg2", |
1648 | "SSDChipRightCablesLay2TubeSeg1","SSDChipRightCablesLay2TubeSeg2"}; | |
44285dfa | 1649 | char* ssdchipLeftcablestubesegname[2*kssdchipcableslaynumber] = |
d7599219 | 1650 | {"SSDChipLeftCablesLay1TubeSeg1","SSDChipLeftCablesLay1TubeSeg2", |
1651 | "SSDChipLeftCablesLay2TubeSeg1","SSDChipLeftCablesLay2TubeSeg2"}; | |
44285dfa | 1652 | char* ssdchipcableslayassemblyname[kssdchipcableslaynumber] = |
d7599219 | 1653 | {"SSDChipCablesLay1","SSDChipCablesLay2"}; |
44285dfa | 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]); | |
d7599219 | 1683 | if(side!="Right"){ |
44285dfa | 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]); | |
d7599219 | 1690 | } |
44285dfa | 1691 | ssdchipcableslayassembly[i]->AddNode(ssdchipcablestrapezoidassembly[i],1, |
1692 | ssdchipcablestrapezoidcombitrans[i]); | |
d7599219 | 1693 | } |
44285dfa | 1694 | TGeoCombiTrans* ssdchipcablescombitrans[kssdchipcableslaynumber]; |
1695 | ssdchipcablescombitrans[0] = new TGeoCombiTrans("SSDChipCablesCombiTrans1", | |
1696 | (side=="Right" ? -1 : 1)*0.5*ssdchipcablespiecelength, | |
d7599219 | 1697 | 0.5*fgkSSDChipCablesLength[0], |
44285dfa | 1698 | - (2.*ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0] |
d7599219 | 1699 | - 0.5*fgkSSDChipCablesHeight[1]), |
1700 | new TGeoRotation("",(side=="Right" ? 0 : 1)*180.,0.,0.)); | |
44285dfa | 1701 | ssdchipcablescombitrans[1] = new TGeoCombiTrans("SSDChipCablesCombiTrans2", |
1702 | (side=="Right" ? -1 : 1)*0.5*ssdchipcablespiecelength, | |
d7599219 | 1703 | 0.5*fgkSSDChipCablesLength[0], |
44285dfa | 1704 | - (2.*ssdchipcablesradius[0]-fgkSSDChipCablesHeight[0] |
d7599219 | 1705 | - 0.5*fgkSSDChipCablesHeight[1]), |
1706 | new TGeoRotation("",(side=="Right" ? 0 : 1)*180.,0.,0.)); | |
44285dfa | 1707 | TGeoVolume* ssdchipcablesassembly = |
d7599219 | 1708 | new TGeoVolumeAssembly("SSDChipCables"); |
44285dfa | 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]); | |
d7599219 | 1713 | } |
44285dfa | 1714 | return ssdchipcablesassembly; |
d7599219 | 1715 | } |
1716 | ///////////////////////////////////////////////////////////////////////////////// | |
1717 | TGeoVolume* AliITSv11GeometrySSD::GetSSDChipCablesAssembly(Double_t SSDChipCablesHeigth){ | |
44285dfa | 1718 | ///////////////////////////////////////////////////////////// |
1719 | // Method generating SSD Chip Cables Assembly | |
1720 | ///////////////////////////////////////////////////////////// | |
1721 | const Int_t kchipcablesnumber = 2; | |
1722 | Double_t chipcablestransvector = fgkSSDSensorLength | |
d7599219 | 1723 | - 2.*fgkSSDModuleStiffenerPosition[1] |
1724 | - 2.*(fgkSSDStiffenerWidth | |
1725 | - fgkSSDStiffenerToChipDist-fgkSSDChipWidth); | |
44285dfa | 1726 | char* ssdchipcablesname[kchipcablesnumber] = {"Right","Left"}; |
1727 | TGeoVolume* ssdchipcables[kchipcablesnumber]; | |
1728 | TGeoVolume* ssdchipcablesassembly = | |
d7599219 | 1729 | new TGeoVolumeAssembly("SSDChipCablesAssembly"); |
44285dfa | 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++) | |
d7599219 | 1733 | for(Int_t j=0; j<fgkSSDChipNumber; j++) |
44285dfa | 1734 | ssdchipcablesassembly->AddNode(ssdchipcables[i],fgkSSDChipNumber*i+j+1, |
1735 | new TGeoTranslation(-(ssdchipcablesname[i]=="Left" ? 1. : 0.) | |
1736 | * chipcablestransvector,(j-0.5)*fgkSSDChipCablesLength[0] | |
d7599219 | 1737 | + 0.5*fgkSSDChipCablesLength[1],0.)); |
44285dfa | 1738 | return ssdchipcablesassembly; |
d7599219 | 1739 | } |
1740 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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]; | |
d7599219 | 1747 | //////////////////////// |
1748 | // Setting Display Color | |
1749 | //////////////////////// | |
44285dfa | 1750 | Int_t ssdflexcolor; |
1751 | ssdflexcolor = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fColorAl: fColorPolyhamide); | |
1752 | TGeoMedium* ssdflexmed = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fSSDAlTraceFlexMedium : | |
1753 | fSSDKaptonFlexMedium); | |
d7599219 | 1754 | //////////////////////// |
1755 | // SSDFlexTrapezoidShape | |
1756 | //////////////////////// | |
44285dfa | 1757 | const Int_t kssdflexvertexnumber = 2; |
1758 | Double_t ssdflexwidth[kssdflexvertexnumber] = {fgkSSDFlexWidth[1], | |
d7599219 | 1759 | fgkSSDFlexWidth[0]}; |
44285dfa | 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, | |
d7599219 | 1765 | "SSDFlexTrapezoidShape"); |
44285dfa | 1766 | ssdflexvolume[0] = new TGeoVolume("SSDFlexTrapezoid",ssdflextrapezoidshape,ssdflexmed); |
1767 | ssdflexvolume[0]->SetLineColor(ssdflexcolor); | |
d7599219 | 1768 | ///////////////////////// |
1769 | //SSDFlexTubeSeg Assembly | |
1770 | ///////////////////////// | |
44285dfa | 1771 | const Int_t kssdflextubesegnumber = 2; |
1772 | TGeoTubeSeg* ssdflextubesegshape[kssdflextubesegnumber]; | |
1773 | Double_t ssdflexradiusmax = (fgkSSDFlexLength[3]-fgkSSDFlexLength[2]) | |
d7599219 | 1774 | / TMath::Tan(fgkSSDFlexAngle*TMath::DegToRad()); |
44285dfa | 1775 | ssdflextubesegshape[0] = new TGeoTubeSeg("SSDFlexTubeSegShape1", |
1776 | ssdflexradius,ssdflexradius+SSDFlexHeigth, | |
d7599219 | 1777 | 0.5*fgkSSDFlexWidth[0],0.,180.); |
44285dfa | 1778 | ssdflextubesegshape[1] = new TGeoTubeSeg("SSDFlexTubeSegShape2", |
1779 | ssdflexradiusmax-ssdflexradius-SSDFlexHeigth, | |
1780 | ssdflexradiusmax-ssdflexradius,0.5*fgkSSDFlexWidth[0], | |
d7599219 | 1781 | 0.,2.*fgkSSDFlexAngle); |
44285dfa | 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", | |
d7599219 | 1791 | fgkSSDFlexLength[0],0.5*fgkSSDFlexWidth[0], |
44285dfa | 1792 | ssdflexradius+0.5*SSDFlexHeigth, |
1793 | new TGeoRotation((*ssdflextubsegrot[0][1]) | |
1794 | * (*ssdflextubsegrot[0][0]))); | |
1795 | ssdflextubesegcombitrans[1] = new TGeoCombiTrans("SSDFlexTubeSegCombiTrans2", | |
d7599219 | 1796 | fgkSSDFlexLength[0]-fgkSSDFlexLength[2], |
1797 | 0.5*fgkSSDFlexWidth[0], | |
44285dfa | 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]); | |
d7599219 | 1810 | } |
1811 | /////////// | |
1812 | //Box Shape | |
1813 | /////////// | |
44285dfa | 1814 | const Int_t kssdflexboxnumber = 7; |
1815 | Double_t ssdflexboxlength[kssdflexboxnumber]; | |
1816 | ssdflexboxlength[0] = 0.5*(fgkSSDChipNumber | |
d7599219 | 1817 | * fgkSSDChipLength+(fgkSSDChipNumber-1) |
1818 | * fgkSSDChipSeparationLength | |
1819 | - fgkSSDModuleSensorSupportDistance-fgkSSDFlexHoleLength) | |
1820 | - (fgkSSDFlexLength[0]-fgkSSDFlexLength[1]); | |
44285dfa | 1821 | ssdflexboxlength[1] = fgkSSDModuleSensorSupportDistance+fgkSSDFlexHoleLength; |
1822 | ssdflexboxlength[2] = 0.5*(fgkSSDModuleSensorSupportDistance | |
d7599219 | 1823 | - fgkSSDFlexHoleLength-fgkSSDFlexHoleWidth); |
44285dfa | 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 | |
d7599219 | 1830 | - fgkSSDFlexLength[2]-TMath::Pi() |
1831 | * fgkSSDStiffenerHeight-fgkSSDFlexLength[0]; | |
44285dfa | 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]); | |
d7599219 | 1846 | ////////////////////////////// |
1847 | //SSDFlex Box Shape CombiTrans | |
1848 | ////////////////////////////// | |
44285dfa | 1849 | TGeoCombiTrans* ssdflexboxcombitrans[kssdflexboxnumber+1]; |
1850 | ssdflexboxcombitrans[0] = new TGeoCombiTrans("SSDFlexBoxCombiTrans0", | |
1851 | ssdflexvertex[1]->X()+0.5*ssdflexboxlength[0], | |
d7599219 | 1852 | 0.5*fgkSSDFlexWidth[0],0.,0); |
44285dfa | 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] | |
d7599219 | 1864 | + 0.5*fgkSSDFlexHoleWidth, |
44285dfa | 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], | |
d7599219 | 1869 | 0.5*fgkSSDFlexWidth[0],0.,0); |
44285dfa | 1870 | ssdflexboxcombitrans[5] = new TGeoCombiTrans("SSDFlexBoxCombiTrans5", |
d7599219 | 1871 | - 0.5*fgkSSDFlexLength[2]+fgkSSDFlexLength[0], |
1872 | 0.5*fgkSSDFlexWidth[0], | |
44285dfa | 1873 | 2.*ssdflexradius+SSDFlexHeigth,0); |
1874 | ssdflexboxcombitrans[6] = new TGeoCombiTrans("SSDFlexBoxCombiTrans6", | |
1875 | - ssdflexboxshape[6]->GetDX() | |
1876 | + ssdflexboxshape[6]->GetDX() | |
d7599219 | 1877 | * TMath::Cos(2.*fgkSSDFlexAngle*TMath::DegToRad()) |
1878 | + fgkSSDFlexLength[0]-fgkSSDFlexLength[2] | |
44285dfa | 1879 | - (ssdflexradiusmax-ssdflexradius-0.5*SSDFlexHeigth) |
d7599219 | 1880 | * TMath::Cos(fgkSSDFlexAngle*TMath::DegToRad()), |
44285dfa | 1881 | 0.5*fgkSSDFlexWidth[0],ssdflexboxshape[6]->GetDX() |
d7599219 | 1882 | *TMath::Sin(2.*fgkSSDFlexAngle*TMath::DegToRad()) |
44285dfa | 1883 | + SSDFlexHeigth+2.*ssdflexradius+(ssdflexradiusmax |
1884 | - ssdflexradius-0.5*SSDFlexHeigth) | |
d7599219 | 1885 | * TMath::Sin(fgkSSDFlexAngle*TMath::DegToRad()), |
1886 | new TGeoRotation("",90.,2.*fgkSSDFlexAngle,-90.)); | |
44285dfa | 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); | |
d7599219 | 1892 | //////////////////////////// |
1893 | //SSDFlex Box Shape Assembly | |
1894 | //////////////////////////// | |
44285dfa | 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);} | |
d7599219 | 1906 | else{ |
44285dfa | 1907 | ssdflexbox[i] = new TGeoVolume(ssdflexboxname,ssdflexboxshape[i], |
1908 | ssdflexmed); | |
1909 | ssdflexbox[i]->SetLineColor(ssdflexcolor); | |
1910 | ssdflexvolume[2]->AddNode(ssdflexbox[i],1,ssdflexboxcombitrans[i]);} | |
d7599219 | 1911 | } |
1912 | ////////////////////// | |
1913 | //SSDFlex Construction | |
1914 | ////////////////////// | |
44285dfa | 1915 | TGeoVolume* ssdflex = new TGeoVolumeAssembly("SSDFlex"); |
1916 | for(Int_t i =0; i<kssdflexvolumenumber; i++) ssdflex->AddNode(ssdflexvolume[i],1); | |
1917 | return ssdflex; | |
d7599219 | 1918 | } |
1919 | ///////////////////////////////////////////////////////////////////////////////// | |
1920 | TGeoVolume* AliITSv11GeometrySSD::GetSSDEndFlex(Double_t SSDEndFlexLength, | |
1921 | Double_t SSDFlexHeigth){ | |
44285dfa | 1922 | ///////////////////////////////////////////////////////////// |
1923 | // Method generating SSD End Flex | |
d7599219 | 1924 | ///////////////////////////////////////// |
1925 | // Setting Display Color, Media and Index | |
1926 | ///////////////////////////////////////// | |
44285dfa | 1927 | Int_t ssdflexcolor; |
1928 | ssdflexcolor = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fColorAl: fColorPolyhamide); | |
1929 | TGeoMedium* ssdflexmed = (SSDFlexHeigth == fgkSSDFlexHeight[0] ? fSSDAlTraceFlexMedium : | |
1930 | fSSDKaptonFlexMedium); | |
d7599219 | 1931 | //////////////////////// |
44285dfa | 1932 | const Int_t kssdendflexboxnumber = 5; |
1933 | TGeoBBox* ssdendflexbboxshape[kssdendflexboxnumber]; | |
1934 | ssdendflexbboxshape[0] = new TGeoBBox("SSDFlexBoxShape1", | |
d7599219 | 1935 | 0.5*SSDEndFlexLength,0.5*fgkSSDFlexWidth[0], |
1936 | 0.5*SSDFlexHeigth); | |
44285dfa | 1937 | ssdendflexbboxshape[1] = new TGeoBBox("SSDFlexBoxShape2", |
d7599219 | 1938 | 0.5*fgkSSDEndFlexCompLength[1], |
1939 | 0.5*(fgkSSDEndFlexCompWidth[0]-fgkSSDFlexWidth[0])/2, | |
1940 | 0.5*SSDFlexHeigth); | |
44285dfa | 1941 | ssdendflexbboxshape[2] = new TGeoBBox("SSDFlexBoxShape3", |
d7599219 | 1942 | 0.5*fgkSSDEndFlexCompLength[2], |
1943 | 0.5*(fgkSSDEndFlexCompWidth[1]-fgkSSDFlexWidth[0])/2, | |
1944 | 0.5*SSDFlexHeigth); | |
44285dfa | 1945 | ssdendflexbboxshape[3] = new TGeoBBox("SSDFlexBoxShape4", |
d7599219 | 1946 | 0.5*fgkSSDEndFlexCompLength[3], |
1947 | 0.5*(fgkSSDEndFlexCompWidth[0]-fgkSSDFlexWidth[0])/2, | |
1948 | 0.5*SSDFlexHeigth); | |
44285dfa | 1949 | ssdendflexbboxshape[4] = new TGeoBBox("SSDFlexBoxShape5", |
d7599219 | 1950 | 0.5*(fgkSSDEndFlexCompLength[4]+fgkSSDEndFlexCompLength[5]), |
1951 | 0.25*(fgkSSDEndFlexCompWidth[2]-fgkSSDFlexWidth[0])/2, | |
1952 | 0.5*SSDFlexHeigth); | |
44285dfa | 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); | |
d7599219 | 1961 | } |
44285dfa | 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] | |
d7599219 | 1969 | + 0.5*fgkSSDEndFlexCompLength[1], |
44285dfa | 1970 | 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[1]->GetDY(), |
d7599219 | 1971 | 0.)); |
44285dfa | 1972 | ssdendflex->AddNode(ssdendflexbbox[1],2,new TGeoTranslation( |
1973 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 1974 | + 0.5*fgkSSDEndFlexCompLength[1], |
44285dfa | 1975 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[1]->GetDY(), |
d7599219 | 1976 | 0.)); |
44285dfa | 1977 | ssdendflex->AddNode(ssdendflexbbox[2],1,new TGeoTranslation( |
1978 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 1979 | + fgkSSDEndFlexCompLength[1]+0.5*fgkSSDEndFlexCompLength[2], |
44285dfa | 1980 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[2]->GetDY(), |
d7599219 | 1981 | 0.)); |
44285dfa | 1982 | ssdendflex->AddNode(ssdendflexbbox[2],2,new TGeoTranslation( |
1983 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 1984 | + fgkSSDEndFlexCompLength[1]+0.5*fgkSSDEndFlexCompLength[2], |
44285dfa | 1985 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[2]->GetDY(), |
d7599219 | 1986 | 0.)); |
44285dfa | 1987 | ssdendflex->AddNode(ssdendflexbbox[3],1,new TGeoTranslation( |
1988 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 1989 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] |
1990 | + 0.5*fgkSSDEndFlexCompLength[3], | |
44285dfa | 1991 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[3]->GetDY(), |
d7599219 | 1992 | 0.)); |
44285dfa | 1993 | ssdendflex->AddNode(ssdendflexbbox[3],2,new TGeoTranslation( |
1994 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 1995 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] |
1996 | + 0.5*fgkSSDEndFlexCompLength[3], | |
44285dfa | 1997 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[3]->GetDY(), |
d7599219 | 1998 | 0.)); |
44285dfa | 1999 | ssdendflex->AddNode(ssdendflexbbox[4],1,new TGeoTranslation( |
2000 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 2001 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] |
2002 | + fgkSSDEndFlexCompLength[3]+0.5*(fgkSSDEndFlexCompLength[4]+fgkSSDEndFlexCompLength[5]), | |
44285dfa | 2003 | + 0.5*fgkSSDFlexWidth[0]+ssdendflexbboxshape[4]->GetDY(), |
d7599219 | 2004 | 0.)); |
44285dfa | 2005 | ssdendflex->AddNode(ssdendflexbbox[4],2,new TGeoTranslation( |
2006 | - 0.5*SSDEndFlexLength+referencelength+fgkSSDEndFlexCompLength[0] | |
d7599219 | 2007 | + fgkSSDEndFlexCompLength[1]+fgkSSDEndFlexCompLength[2] |
2008 | + fgkSSDEndFlexCompLength[3]+0.5*(fgkSSDEndFlexCompLength[4] | |
2009 | + fgkSSDEndFlexCompLength[5]), | |
44285dfa | 2010 | - 0.5*fgkSSDFlexWidth[0]-ssdendflexbboxshape[4]->GetDY(), |
d7599219 | 2011 | 0.)); |
44285dfa | 2012 | return ssdendflex; |
d7599219 | 2013 | } |
2014 | ///////////////////////////////////////////////////////////////////////////////// | |
2015 | TGeoVolume* AliITSv11GeometrySSD::GetSSDFlexAssembly(){ | |
44285dfa | 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]); | |
d7599219 | 2032 | } |
44285dfa | 2033 | return ssdflexassembly; |
d7599219 | 2034 | } |
2035 | ///////////////////////////////////////////////////////////////////////////////// | |
2036 | TGeoVolume* AliITSv11GeometrySSD::GetSSDCoolingBlockAssembly(){ | |
44285dfa | 2037 | ///////////////////////////////////////////////////////////// |
2038 | // Method generating SSD Cooling Block Assembly | |
2039 | ///////////////////////////////////////////////////////////// | |
2040 | const Int_t kssdcoolingblocktransnumber = 2; | |
2041 | Double_t ssdcoolingblocktransvector[kssdcoolingblocktransnumber] = | |
d7599219 | 2042 | {fgkSSDModuleSensorSupportDistance+fgkSSDCoolingBlockLength, |
2043 | fgkSSDSensorLength-2.*fgkSSDModuleStiffenerPosition[1] | |
2044 | - fgkSSDCoolingBlockWidth}; | |
44285dfa | 2045 | TGeoVolume* ssdcoolingblock = GetSSDCoolingBlock(); |
2046 | TGeoVolume* ssdcoolingblockassembly = | |
d7599219 | 2047 | new TGeoVolumeAssembly("SSDCoolingBlockAssembly"); |
44285dfa | 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; | |
d7599219 | 2055 | } |
2056 | ///////////////////////////////////////////////////////////////////////////////// | |
2057 | TGeoVolume* AliITSv11GeometrySSD::GetSSDCoolingBlock(){ | |
44285dfa | 2058 | ///////////////////////////////////////////////////////////// |
2059 | // Method generating SSD Cooling Block | |
2060 | ///////////////////////////////////////////////////////////// | |
d7599219 | 2061 | // Center Cooling Block Hole |
2062 | //////////////////////////// | |
44285dfa | 2063 | Double_t coolingblockholeangle = TMath::ACos(0.5*fgkSSDCoolingBlockHoleLength[0] |
d7599219 | 2064 | /fgkSSDCoolingBlockHoleRadius[0])*TMath::RadToDeg(); |
44285dfa | 2065 | Double_t coolingblockholewidth = fgkSSDCoolingBlockWidth; |
2066 | new TGeoTubeSeg("CoolingBlockHoleShape", | |
d7599219 | 2067 | 0., |
2068 | fgkSSDCoolingBlockHoleRadius[0], | |
44285dfa | 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()), | |
d7599219 | 2075 | fgkSSDCoolingBlockHoleRadius[0] |
44285dfa | 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 = | |
d7599219 | 2082 | new TGeoRotation("CoolingBlockHoleRot",90,0.,0.); |
44285dfa | 2083 | coolingblockholerot->RegisterYourself(); |
2084 | new TGeoCompositeShape("CoolingTubeHoleShape", | |
d7599219 | 2085 | "CoolingBlockTriangleHoleShape:CoolingBlockHoleRot+" |
2086 | "CoolingBlockHoleShape"); | |
2087 | /////////////////////////// | |
2088 | // Cooling Block Trapezoids | |
2089 | /////////////////////////// | |
44285dfa | 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] | |
d7599219 | 2096 | - fgkSSDCoolingBlockHoleCenter |
2097 | - fgkSSDCoolingBlockHoleRadius[0] | |
44285dfa | 2098 | * TMath::Sin(coolingblockholeangle*TMath::DegToRad()); |
2099 | Double_t coolingblocktrapezoidlength[ktrapezoidnumber] = | |
d7599219 | 2100 | { fgkSSDCoolingBlockLength, |
2101 | 0.5*(fgkSSDCoolingBlockLength-2. | |
2102 | * (fgkSSDCoolingBlockHoleLength[1] | |
2103 | - fgkSSDCoolingBlockHoleRadius[1]) | |
2104 | - fgkSSDCoolingBlockHoleLength[0])}; | |
44285dfa | 2105 | Double_t coolingblocktrapezoidheigth[ktrapezoidnumber] = |
2106 | { fgkSSDCoolingBlockHeight[0]-coolingblockcomponentheight | |
d7599219 | 2107 | - fgkSSDCoolingBlockHeight[1]-fgkSSDCoolingBlockHeight[2] |
2108 | - fgkSSDCoolingBlockHoleRadius[1], | |
44285dfa | 2109 | coolingblockcomponentheight}; |
2110 | Double_t coolingblocktrapezoidwidth[ktrapezoidnumber] = | |
d7599219 | 2111 | {fgkSSDCoolingBlockWidth,fgkSSDCoolingBlockWidth}; |
2112 | ////////////////////////// | |
2113 | //Vertex Positioning Shape | |
2114 | ////////////////////////// | |
44285dfa | 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] | |
d7599219 | 2120 | - fgkSSDCoolingBlockHoleLength[0])); |
44285dfa | 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] = | |
d7599219 | 2133 | {"CoolingBlockTrapezoidShape0","CoolingBlockTrapezoidShape1"}; |
44285dfa | 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 = | |
d7599219 | 2141 | new TGeoTranslation("CoolingBlockTrapezoidTrans", |
44285dfa | 2142 | coolingblocktrapezoidvertex[0][2]->X(), |
d7599219 | 2143 | 0.0, |
44285dfa | 2144 | 0.5*(coolingblocktrapezoidheigth[0] |
2145 | + coolingblocktrapezoidheigth[1])); | |
2146 | coolingblocktrapezoidtrans->RegisterYourself(); | |
2147 | TGeoCombiTrans* coolingblocktrapezoidcombitrans = | |
d7599219 | 2148 | new TGeoCombiTrans("CoolingBlockTrapezoidCombiTrans", |
44285dfa | 2149 | coolingblocktrapezoidvertex[0][3]->X(), |
d7599219 | 2150 | fgkSSDCoolingBlockWidth, |
44285dfa | 2151 | 0.5*(coolingblocktrapezoidheigth[0] |
2152 | + coolingblocktrapezoidheigth[1]), | |
d7599219 | 2153 | new TGeoRotation("",180.,0.,0.)); |
44285dfa | 2154 | coolingblocktrapezoidcombitrans->RegisterYourself(); |
d7599219 | 2155 | new TGeoCompositeShape("CoolingBlockTrapezoidCompositeShape", |
2156 | "CoolingBlockTrapezoidShape0+CoolingBlockTrapezoidShape1:CoolingBlockTrapezoidTrans+" | |
2157 | "CoolingBlockTrapezoidShape1:CoolingBlockTrapezoidCombiTrans"); | |
2158 | ///////////////////////////// | |
2159 | // Cooling Block Boxes Shapes | |
2160 | ///////////////////////////// | |
44285dfa | 2161 | const Int_t kboxnumber = 3; |
2162 | TGeoBBox* coolingblockboxshape[kboxnumber]; | |
2163 | coolingblockboxshape[0] = new TGeoBBox("CoolingBlockBoxShape0", | |
d7599219 | 2164 | 0.5*fgkSSDCoolingBlockLength, |
2165 | 0.5*fgkSSDCoolingBlockWidth, | |
2166 | 0.5*fgkSSDCoolingBlockHoleRadius[1]); | |
44285dfa | 2167 | coolingblockboxshape[1] = new TGeoBBox("CoolingBlockBoxShape1", |
d7599219 | 2168 | 0.5*(fgkSSDCoolingBlockLength |
2169 | - 2.*fgkSSDCoolingBlockHoleLength[1]), | |
2170 | 0.5*fgkSSDCoolingBlockWidth, | |
2171 | 0.5*fgkSSDCoolingBlockHeight[2]); | |
44285dfa | 2172 | coolingblockboxshape[2] = new TGeoBBox("CoolingBlockBoxShape2", |
d7599219 | 2173 | 0.5*fgkSSDCoolingBlockLength, |
2174 | 0.5*fgkSSDCoolingBlockWidth, | |
2175 | 0.5*fgkSSDCoolingBlockHeight[1]); | |
44285dfa | 2176 | TGeoTranslation* coolingblockboxtrans[kboxnumber-1]; |
2177 | coolingblockboxtrans[0] = new TGeoTranslation("CoolingBlockBoxTrans0",0.,0., | |
d7599219 | 2178 | 0.5*(fgkSSDCoolingBlockHeight[1] |
2179 | + fgkSSDCoolingBlockHoleRadius[1]) | |
2180 | + fgkSSDCoolingBlockHeight[2]); | |
44285dfa | 2181 | coolingblockboxtrans[1] = new TGeoTranslation("CoolingBlockBoxTrans1", |
d7599219 | 2182 | 0.0, |
2183 | 0.0, | |
2184 | 0.5*(fgkSSDCoolingBlockHeight[1] | |
2185 | + fgkSSDCoolingBlockHeight[2])); | |
44285dfa | 2186 | for(Int_t i=0; i<kboxnumber-1; i++) coolingblockboxtrans[i]->RegisterYourself(); |
d7599219 | 2187 | new TGeoCompositeShape("CoolingBlockBoxCompositeShape", |
2188 | "CoolingBlockBoxShape0:CoolingBlockBoxTrans0+" | |
2189 | "CoolingBlockBoxShape1:CoolingBlockBoxTrans1+CoolingBlockBoxShape2"); | |
2190 | /////////////////////// | |
2191 | // Cooling Block Shape | |
2192 | ////////////////////// | |
44285dfa | 2193 | TGeoCombiTrans* coolingtubeholeshapecombitrans = |
d7599219 | 2194 | new TGeoCombiTrans("CoolingTubeHoleShapeCombiTrans", |
2195 | 0.5*fgkSSDCoolingBlockLength, | |
2196 | 0.5*fgkSSDCoolingBlockWidth, | |
2197 | fgkSSDCoolingBlockHoleCenter, | |
2198 | new TGeoRotation("",0.,90.,0.)); | |
44285dfa | 2199 | coolingtubeholeshapecombitrans->RegisterYourself(); |
2200 | TGeoTranslation* coolingblocktrapezoidcompositeshapetrans = | |
d7599219 | 2201 | new TGeoTranslation("CoolingBlockTrapezoidCompositeShapeTrans", |
2202 | 0.0, | |
2203 | 0.0, | |
44285dfa | 2204 | 0.5*coolingblocktrapezoidheigth[0]+fgkSSDCoolingBlockHeight[1]+ |
d7599219 | 2205 | fgkSSDCoolingBlockHeight[2]+fgkSSDCoolingBlockHoleRadius[1]); |
44285dfa | 2206 | coolingblocktrapezoidcompositeshapetrans->RegisterYourself(); |
2207 | TGeoTranslation* coolingblockboxcompositeshapetrans = | |
d7599219 | 2208 | new TGeoTranslation("CoolingBlockBoxCompositeShapeTrans", |
2209 | 0.5*fgkSSDCoolingBlockLength, | |
2210 | 0.5*fgkSSDCoolingBlockWidth, | |
2211 | 0.5*fgkSSDCoolingBlockHeight[1]); | |
44285dfa | 2212 | coolingblockboxcompositeshapetrans->RegisterYourself(); |
2213 | TGeoCompositeShape* ssdoolingblockshape = | |
d7599219 | 2214 | new TGeoCompositeShape("SSDCoolingBlockShape", |
2215 | "CoolingBlockBoxCompositeShape:CoolingBlockBoxCompositeShapeTrans+" | |
2216 | "CoolingBlockTrapezoidCompositeShape:CoolingBlockTrapezoidCompositeShapeTrans-" | |
2217 | "CoolingTubeHoleShape:CoolingTubeHoleShapeCombiTrans"); | |
44285dfa | 2218 | TGeoVolume* ssdcoolingblock = new TGeoVolume("SSDCoolingBlock", |
2219 | ssdoolingblockshape,fSSDAlCoolBlockMedium); | |
2220 | return ssdcoolingblock; | |
d7599219 | 2221 | } |
2222 | ///////////////////////////////////////////////////////////////////////////////// | |
2223 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberJunction(Double_t width){ | |
44285dfa | 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 | |
d7599219 | 2232 | - fgkCarbonFiberJunctionEdge[1] |
2233 | * TMath::Cos(fgkCarbonFiberJunctionAngle[1]*TMath::DegToRad()), | |
2234 | fgkCarbonFiberJunctionEdge[1]*TMath::Sin(fgkCarbonFiberJunctionAngle[1] | |
2235 | * TMath::DegToRad())); | |
44285dfa | 2236 | vertex[3] = new TVector3(fgkCarbonFiberJunctionEdge[0] |
d7599219 | 2237 | * TMath::Cos(fgkCarbonFiberJunctionAngle[0]*TMath::DegToRad()), |
2238 | fgkCarbonFiberJunctionEdge[0] | |
2239 | * TMath::Sin(fgkCarbonFiberJunctionAngle[0]*TMath::DegToRad())); | |
44285dfa | 2240 | TGeoArb8* carbonfiberjunctionshapepiece = |
d7599219 | 2241 | new TGeoArb8("CarbonFiberJunctionShapePiece",0.5*width); |
2242 | ////////////////////////////////// | |
2243 | //Setting the vertices in TGeoArb8 | |
2244 | ////////////////////////////////// | |
44285dfa | 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 = | |
d7599219 | 2250 | new TGeoRotation("CarbonFiberJunctionRot", |
2251 | 180., | |
2252 | 180., | |
2253 | 180-2.*fgkCarbonFiberJunctionAngle[0]); | |
44285dfa | 2254 | TGeoVolume* carbonfiberjunctionpiece = |
d7599219 | 2255 | new TGeoVolume("CarbonFiberJunctionPiece", |
44285dfa | 2256 | carbonfiberjunctionshapepiece,fSSDCarbonFiberMedium); |
2257 | TGeoVolume* carbonfiberjunction = | |
d7599219 | 2258 | new TGeoVolumeAssembly("CarbonFiberJunction"); |
44285dfa | 2259 | carbonfiberjunctionpiece->SetLineColor(fColorCarbonFiber); |
2260 | carbonfiberjunction->AddNode(carbonfiberjunctionpiece,1); | |
2261 | carbonfiberjunction->AddNode(carbonfiberjunctionpiece,2,carbonfiberjunctionrot); | |
2262 | return carbonfiberjunction; | |
d7599219 | 2263 | } |
2264 | ///////////////////////////////////////////////////////////////////////////////// | |
2265 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberJunctionAssembly(){ | |
44285dfa | 2266 | ///////////////////////////////////////////////////////////// |
2267 | // Method generating SSD Carbon Fiber Junction Assembly | |
2268 | ///////////////////////////////////////////////////////////// | |
d7599219 | 2269 | SetCarbonFiberJunctionCombiTransMatrix(); |
44285dfa | 2270 | TGeoVolume* carbonfiberjunctionassembly = |
d7599219 | 2271 | new TGeoVolumeAssembly("CarbonFiberJunctionAssembly"); |
44285dfa | 2272 | TGeoVolume* carbonfiberjunction = |
d7599219 | 2273 | GetCarbonFiberJunction(fgkCarbonFiberJunctionWidth); |
2274 | for(Int_t i=0; i<fgkCarbonFiberJunctionCombiTransNumber;i++) | |
44285dfa | 2275 | carbonfiberjunctionassembly->AddNode(carbonfiberjunction,i+1, |
2276 | fCarbonFiberJunctionCombiTransMatrix[i]); | |
2277 | return carbonfiberjunctionassembly; | |
d7599219 | 2278 | } |
2279 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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] = | |
d7599219 | 2290 | {"LadderCableSegmentBBoxShape1","LadderCableSegmentBBoxShape2"}; |
44285dfa | 2291 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) laddercablesegmentbboxshape[i] = |
2292 | new TGeoBBox(laddercablesegmentbboxshapename[i], | |
d7599219 | 2293 | 0.5*fgkSSDFlexWidth[0], |
2294 | 0.5*fgkSSDLadderCableWidth, | |
2295 | 0.5*fgkSSDFlexHeight[i]); | |
44285dfa | 2296 | const char* laddercablesegmentbboxname[kladdercablesegmentnumber] = |
d7599219 | 2297 | {"LadderCableSegmentBBox1","LadderCableSegmentBBox2"}; |
44285dfa | 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 : | |
d7599219 | 2306 | fColorPolyhamide); |
2307 | } | |
44285dfa | 2308 | TGeoTranslation* laddercablesegmentbboxtrans[kladdercablesegmentnumber]; |
2309 | laddercablesegmentbboxtrans[0] = | |
d7599219 | 2310 | new TGeoTranslation("LadderCableSegmentBBoxTrans1", |
2311 | 0.5*fgkSSDFlexWidth[0], | |
2312 | 0.5*fgkSSDLadderCableWidth, | |
2313 | 0.5*fgkSSDFlexHeight[0]); | |
44285dfa | 2314 | laddercablesegmentbboxtrans[1] = |
d7599219 | 2315 | new TGeoTranslation("LadderCableSegmentBBoxTrans2", |
2316 | 0.5*fgkSSDFlexWidth[0], | |
2317 | 0.5*fgkSSDLadderCableWidth, | |
2318 | fgkSSDFlexHeight[0] | |
2319 | +0.5*fgkSSDFlexHeight[1]); | |
44285dfa | 2320 | TGeoVolume* laddercablesegmentbboxassembly = |
d7599219 | 2321 | new TGeoVolumeAssembly("LadderCableSegmentBBoxAssembly"); |
44285dfa | 2322 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) |
2323 | laddercablesegmentbboxassembly->AddNode(laddercablesegmentbbox[i],1, | |
2324 | laddercablesegmentbboxtrans[i]); | |
d7599219 | 2325 | ///////////////////////////////////////// |
2326 | // LadderSegmentArb8 Volume | |
2327 | ///////////////////////////////////////// | |
44285dfa | 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]; | |
d7599219 | 2332 | //Shape Vertex Positioning |
44285dfa | 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, | |
d7599219 | 2336 | i*fgkSSDFlexHeight[0]); |
44285dfa | 2337 | laddercablesegmentvertexposition[i][2] = new TVector3(0.,fgkSSDFlexHeight[0] |
d7599219 | 2338 | + fgkSSDFlexHeight[1] |
2339 | + i*fgkSSDFlexHeight[0]); | |
44285dfa | 2340 | laddercablesegmentvertexposition[i][3] = |
2341 | new TVector3(laddercablesegmentvertexposition[i][1]->X(), | |
2342 | laddercablesegmentvertexposition[i][2]->Y()); | |
d7599219 | 2343 | } |
44285dfa | 2344 | Double_t laddercablesegmentwidth[2][2] = {{fgkSSDFlexHeight[0],fgkSSDFlexHeight[0]}, |
d7599219 | 2345 | {fgkSSDFlexHeight[1],fgkSSDFlexHeight[1]}}; |
44285dfa | 2346 | char* laddercablesegmentarbshapename[kladdercablesegmentnumber] = |
d7599219 | 2347 | {"LadderCableSegmentArbShape1","LadderCableSegmentArbShape2"}; |
44285dfa | 2348 | TGeoArb8* laddercablesegmentarbshape[kladdercablesegmentnumber]; |
2349 | for(Int_t i = 0; i< kladdercablesegmentnumber; i++) laddercablesegmentarbshape[i] = | |
2350 | GetArbShape(laddercablesegmentvertexposition[i], | |
2351 | laddercablesegmentwidth[i], | |
d7599219 | 2352 | fgkCarbonFiberJunctionWidth-fgkSSDFlexWidth[0], |
44285dfa | 2353 | laddercablesegmentarbshapename[i]); |
2354 | const char* laddercablesegmentarbname[kladdercablesegmentnumber] = | |
d7599219 | 2355 | {"LadderCableSegmentArb1","LadderCableSegmentArb2"}; |
44285dfa | 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 : | |
d7599219 | 2364 | fColorPolyhamide); |
2365 | } | |
44285dfa | 2366 | TGeoRotation* laddercablesegmentarbrot[kladdercablesegmentnumber]; |
2367 | laddercablesegmentarbrot[0] = new TGeoRotation("LadderCableSegmentArbRot1", | |
d7599219 | 2368 | 90.,90,-90.); |
44285dfa | 2369 | laddercablesegmentarbrot[1] = new TGeoRotation("LadderCableSegmentArbRot2", |
d7599219 | 2370 | 0.,90.,0.); |
44285dfa | 2371 | TGeoCombiTrans* laddercablesegmentarbcombitrans = |
d7599219 | 2372 | new TGeoCombiTrans("LadderCableSegmentArbCombiTrans", |
2373 | 0.5*(fgkCarbonFiberJunctionWidth-fgkSSDFlexWidth[0]) | |
2374 | + fgkSSDFlexWidth[0],0.,0., | |
44285dfa | 2375 | new TGeoRotation((*laddercablesegmentarbrot[1]) |
2376 | *(*laddercablesegmentarbrot[0]))); | |
2377 | TGeoVolume* laddercablesegmentarbassembly = | |
d7599219 | 2378 | new TGeoVolumeAssembly("LadderCableSegmentArbAssembly"); |
44285dfa | 2379 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) |
2380 | laddercablesegmentarbassembly->AddNode(laddercablesegmentarb[i],1, | |
2381 | laddercablesegmentarbcombitrans); | |
d7599219 | 2382 | ///////////////////////////////////////// |
2383 | // End Ladder Cable Volume | |
2384 | ///////////////////////////////////////// | |
44285dfa | 2385 | TGeoBBox* ladderendcablesegmentbboxshape[kladdercablesegmentnumber]; |
2386 | const char* ladderendcablesegmentbboxshapename[kladdercablesegmentnumber] = | |
d7599219 | 2387 | {"LadderEndCableSegmentBBoxShape1","LadderEndCableSegmentBBoxShape2"}; |
44285dfa | 2388 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) ladderendcablesegmentbboxshape[i] = |
2389 | new TGeoBBox(ladderendcablesegmentbboxshapename[i], | |
2390 | 0.5*ssdendladdercablelength, | |
d7599219 | 2391 | 0.5*fgkSSDLadderCableWidth, |
2392 | 0.5*fgkSSDFlexHeight[i]); | |
44285dfa | 2393 | const char* ladderendcablesegmentbboxname[kladdercablesegmentnumber] = |
d7599219 | 2394 | {"LadderEndCableSegmentBBox1","LadderEndCableSegmentBBox2"}; |
44285dfa | 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 : | |
d7599219 | 2403 | fColorPolyhamide); |
2404 | } | |
44285dfa | 2405 | TGeoTranslation* ladderendcablesegmentbboxtrans[kladdercablesegmentnumber]; |
2406 | ladderendcablesegmentbboxtrans[0] = | |
d7599219 | 2407 | new TGeoTranslation("LadderEndCableSegmentBBoxTrans0", |
44285dfa | 2408 | 0.5*ssdendladdercablelength, |
d7599219 | 2409 | 0.5*fgkSSDLadderCableWidth, |
2410 | 0.5*fgkSSDFlexHeight[0]); | |
44285dfa | 2411 | ladderendcablesegmentbboxtrans[1] = |
d7599219 | 2412 | new TGeoTranslation("LadderEndCableSegmentBBoxTrans1", |
44285dfa | 2413 | 0.5*ssdendladdercablelength, |
d7599219 | 2414 | 0.5*fgkSSDLadderCableWidth, |
2415 | fgkSSDFlexHeight[0] | |
2416 | +0.5*fgkSSDFlexHeight[1]); | |
44285dfa | 2417 | TGeoVolume* ladderendcablesegmentbboxassembly = |
d7599219 | 2418 | new TGeoVolumeAssembly("LadderEndCableSegmentBBoxAssembly"); |
44285dfa | 2419 | for(Int_t i=0; i<kladdercablesegmentnumber; i++) |
2420 | ladderendcablesegmentbboxassembly->AddNode(ladderendcablesegmentbbox[i],1, | |
2421 | ladderendcablesegmentbboxtrans[i]); | |
d7599219 | 2422 | ///////////////////////////////////////// |
44285dfa | 2423 | TList* laddercablesegmentlist = new TList(); |
2424 | laddercablesegmentlist->Add(laddercablesegmentbboxassembly); | |
2425 | laddercablesegmentlist->Add(laddercablesegmentarbassembly); | |
2426 | laddercablesegmentlist->Add(ladderendcablesegmentbboxassembly); | |
2427 | return laddercablesegmentlist; | |
d7599219 | 2428 | } |
2429 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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"); | |
d7599219 | 2436 | for(Int_t i=0; i<n; i++){ |
44285dfa | 2437 | TGeoTranslation* laddercabletrans = new TGeoTranslation( |
d7599219 | 2438 | i*(fgkCarbonFiberJunctionWidth), |
2439 | fgkSSDLadderCableWidth-fgkSSDFlexWidth[0], | |
2440 | i*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1])); | |
44285dfa | 2441 | laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(0),i+1,laddercabletrans); |
2442 | if(i!=n-1) laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(1),i+1,laddercabletrans); | |
d7599219 | 2443 | } |
44285dfa | 2444 | TGeoTranslation* endladdercabletrans = new TGeoTranslation("EndLadderCableTrans", |
d7599219 | 2445 | (n-1)*fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0], |
2446 | fgkSSDLadderCableWidth-fgkSSDFlexWidth[0], | |
2447 | (n-1)*(fgkSSDFlexHeight[0]+fgkSSDFlexHeight[1])); | |
44285dfa | 2448 | laddercable->AddNode((TGeoVolume*)laddercablesegmentlist->At(2),1,endladdercabletrans); |
2449 | return laddercable; | |
d7599219 | 2450 | } |
2451 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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]; | |
d7599219 | 2458 | for(Int_t i=0; i<n; i++){ |
44285dfa | 2459 | sprintf(laddercabletransname,"LadderCableTrans%i",i+1); |
2460 | laddercableassembly->AddNode(GetLadderCable(n-i,ssdendladdercablelength),i+1, | |
2461 | new TGeoTranslation(laddercabletransname,i*fgkCarbonFiberJunctionWidth,0.,0.)); | |
d7599219 | 2462 | } |
44285dfa | 2463 | return laddercableassembly; |
d7599219 | 2464 | } |
2465 | ///////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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 : | |
d7599219 | 2479 | new TGeoCombiTrans((n-1) |
2480 | * fgkCarbonFiberJunctionWidth+fgkSSDFlexWidth[0], | |
2481 | 2.*fgkSSDLadderCableWidth+0.5*fgkSSDFlexWidth[0], | |
2482 | 0.,new TGeoRotation("",180,0.,0.))); | |
44285dfa | 2483 | laddercableassemblylist->Add(ladderCable[i]); |
d7599219 | 2484 | } |
44285dfa | 2485 | return laddercableassemblylist; |
d7599219 | 2486 | } |
2487 | ///////////////////////////////////////////////////////////////////////////////// | |
2488 | TList* AliITSv11GeometrySSD::GetEndLadderCarbonFiberJunctionAssembly(){ | |
44285dfa | 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] = | |
d7599219 | 2495 | new TGeoVolumeAssembly("EndLadderCarbonFiberJunctionAssembly1"); |
44285dfa | 2496 | endladdercarbonfiberjunctionassembly[1] = |
d7599219 | 2497 | new TGeoVolumeAssembly("EndLadderCarbonFiberJunctionAssembly2"); |
44285dfa | 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] = | |
d7599219 | 2503 | GetCarbonFiberJunction(fgkEndLadderCarbonFiberLowerJunctionLength[i]); |
44285dfa | 2504 | endladdercarbonfiberjunction[i][1] = |
d7599219 | 2505 | GetCarbonFiberJunction(fgkEndLadderCarbonFiberUpperJunctionLength[i]); |
2506 | } | |
44285dfa | 2507 | TList* endladdercarbonfiberjunctionlist = new TList(); |
2508 | for(Int_t i=0; i<kendlabbercarbonfiberjunctionumber; i++){ | |
d7599219 | 2509 | SetEndLadderCarbonFiberJunctionCombiTransMatrix(i); |
2510 | for(Int_t j=0; j<fgkCarbonFiberJunctionCombiTransNumber; j++) | |
44285dfa | 2511 | endladdercarbonfiberjunctionassembly[i]->AddNode(j==2 ? |
2512 | endladdercarbonfiberjunction[i][1] : | |
2513 | endladdercarbonfiberjunction[i][0], | |
2514 | j+1,fEndLadderCarbonFiberJunctionCombiTransMatrix[j]); | |
2515 | endladdercarbonfiberjunctionlist->Add(endladdercarbonfiberjunctionassembly[i]); | |
d7599219 | 2516 | } |
44285dfa | 2517 | return endladdercarbonfiberjunctionlist; |
d7599219 | 2518 | } |
2519 | //////////////////////////////////////////////////////////////////////////////// | |
2520 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberSupport(){ | |
44285dfa | 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 = | |
d7599219 | 2529 | fgkCarbonFiberSupportEdgeLength*TMath::Cos(fgkCarbonFiberJunctionAngle[0] |
2530 | * TMath::DegToRad()); | |
44285dfa | 2531 | Double_t theta = TMath::ATan(fgkCarbonFiberSupportYAxisLength |
d7599219 | 2532 | / fgkCarbonFiberSupportXAxisLength); |
2533 | ///////////////////// | |
2534 | //Vertex Positioning | |
2535 | //////////////////// | |
44285dfa | 2536 | vertexposition[0][0] = new TVector3(); |
2537 | vertexposition[0][1] = new TVector3(fgkCarbonFiberSupportXAxisLength, | |
d7599219 | 2538 | fgkCarbonFiberSupportYAxisLength); |
44285dfa | 2539 | vertexposition[0][2] = new TVector3(carbonfibersupportxaxisEdgeproj, |
2540 | carbonfibersupportxaxisEdgeproj | |
2541 | * TMath::Tan(theta)); | |
2542 | vertexposition[0][3] = new TVector3(fgkCarbonFiberSupportXAxisLength | |
2543 | - carbonfibersupportxaxisEdgeproj, | |
d7599219 | 2544 | fgkCarbonFiberSupportYAxisLength |
44285dfa | 2545 | - vertexposition[0][2]->Y()); |
d7599219 | 2546 | //////////////////////////////////////////////////// |
2547 | //Setting the parameters for Isometry Transformation | |
2548 | //////////////////////////////////////////////////// | |
44285dfa | 2549 | Double_t symmetryplaneposition = (fgkCarbonFiberSupportYAxisLength |
d7599219 | 2550 | + fgkCarbonFiberSupportTopEdgeDist[0] |
2551 | + fgkCarbonFiberSupportWidth); | |
2552 | Double_t* param = new Double_t[4]; | |
44285dfa | 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] = | |
d7599219 | 2558 | {"CarbonFiberSupportShape1","CarbonFiberSupportShape2"}; |
44285dfa | 2559 | TGeoArb8* carbonfibersupportshape[kshapesnumber]; |
2560 | Double_t width[2] = {fgkCarbonFiberSupportWidth,fgkCarbonFiberSupportWidth}; | |
2561 | Double_t carbonfibersupportheight = | |
2562 | carbonfibersupportxaxisEdgeproj*TMath::Tan(fgkCarbonFiberJunctionAngle[0] | |
d7599219 | 2563 | *TMath::DegToRad()); |
44285dfa | 2564 | for(Int_t i = 0; i< kshapesnumber; i++) carbonfibersupportshape[i] = |
2565 | GetArbShape(vertexposition[i],width,carbonfibersupportheight, | |
2566 | carbonfibersupportshapename[i],i==0 ? 1: -1); | |
d7599219 | 2567 | ///////////////////////////////////// |
2568 | //Setting Translations and Rotations: | |
2569 | ///////////////////////////////////// | |
44285dfa | 2570 | TGeoTranslation* carbonfibersupporttrans = |
d7599219 | 2571 | new TGeoTranslation("CarbonFiberSupportTrans", |
44285dfa | 2572 | 0.0,0.0,0.5*carbonfibersupportheight); |
2573 | carbonfibersupporttrans->RegisterYourself(); | |
2574 | TGeoRotation* carbonfibercompshaperot[2]; | |
2575 | carbonfibercompshaperot[0] = new TGeoRotation("CarbonFiberCompShapeRot1", | |
d7599219 | 2576 | 0.0,180.0,0.0); |
44285dfa | 2577 | carbonfibercompshaperot[1] = new TGeoRotation("CarbonFiberCompShapeRot2", |
d7599219 | 2578 | 90.,-fgkCarbonFiberTriangleAngle,-90.); |
44285dfa | 2579 | Double_t transvector[3] = {fgkCarbonFiberTriangleLength |
d7599219 | 2580 | * TMath::Cos(fgkCarbonFiberTriangleAngle |
2581 | * TMath::DegToRad()),0.,-fgkCarbonFiberTriangleLength | |
2582 | * TMath::Sin(fgkCarbonFiberTriangleAngle | |
2583 | * TMath::DegToRad())}; | |
44285dfa | 2584 | TGeoCombiTrans* carbonfibersupportcombitrans = |
d7599219 | 2585 | new TGeoCombiTrans("CarbonFiberSupportCombiTrans", |
44285dfa | 2586 | transvector[0],2.*symmetryplaneposition |
2587 | + transvector[1],transvector[2], | |
2588 | new TGeoRotation((*carbonfibercompshaperot[1]) | |
2589 | * (*carbonfibercompshaperot[0]))); | |
2590 | carbonfibersupportcombitrans->RegisterYourself(); | |
d7599219 | 2591 | //////////////////////////////////////////////////////////////////////////////// |
44285dfa | 2592 | TGeoCompositeShape* carbonfibersupportcompshape = |
d7599219 | 2593 | new TGeoCompositeShape("CarbonFiberSupportCompShape", |
2594 | "CarbonFiberSupportShape1:CarbonFiberSupportTrans+" | |
2595 | "CarbonFiberSupportShape2:CarbonFiberSupportTrans"); | |
44285dfa | 2596 | TGeoVolume* carbonfibersupport = new TGeoVolume("CarbonFiberSupport", |
2597 | carbonfibersupportcompshape,fSSDCarbonFiberMedium); | |
2598 | carbonfibersupport->SetLineColor(fColorCarbonFiber); | |
2599 | TGeoVolume* carbonfibersupportassembly = | |
d7599219 | 2600 | new TGeoVolumeAssembly("CarbonFiberSupportAssembly"); |
44285dfa | 2601 | carbonfibersupportassembly->AddNode(carbonfibersupport,1); |
2602 | carbonfibersupportassembly->AddNode(carbonfibersupport,2, | |
2603 | carbonfibersupportcombitrans); | |
2604 | return carbonfibersupportassembly; | |
d7599219 | 2605 | } |
2606 | //////////////////////////////////////////////////////////////////////////////// | |
2607 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberLowerSupport(Int_t ikind, Bool_t EndLadder){ | |
44285dfa | 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, | |
d7599219 | 2614 | fgkCarbonFiberLowerSupportWidth}; |
44285dfa | 2615 | TVector3** vertexposition[kshapesnumber]; |
2616 | for(Int_t i = 0; i<kshapesnumber; i++) vertexposition[i] = | |
2617 | new TVector3*[kvertexnumber]; | |
d7599219 | 2618 | //First Shape Vertex Positioning |
44285dfa | 2619 | vertexposition[0][0] = new TVector3(fgkCarbonFiberLowerSupportLowerLenght); |
2620 | vertexposition[0][1] = new TVector3(fgkCarbonFiberTriangleLength | |
d7599219 | 2621 | - fgkCarbonFiberLowerSupportLowerLenght); |
44285dfa | 2622 | vertexposition[0][2] = new TVector3(); |
2623 | vertexposition[0][3] = new TVector3(fgkCarbonFiberTriangleLength); | |
d7599219 | 2624 | //Second Shape Vertex Positioning |
44285dfa | 2625 | Double_t theta = TMath::ATan((fgkCarbonFiberLowerSupportVolumePosition[1] |
d7599219 | 2626 | - fgkCarbonFiberLowerSupportVolumePosition[0]) |
2627 | / fgkCarbonFiberTriangleLength); | |
44285dfa | 2628 | vertexposition[1][0] = new TVector3(vertexposition[0][0]->X(), |
2629 | vertexposition[0][0]->X()*TMath::Tan(theta) | |
d7599219 | 2630 | + fgkCarbonFiberLowerSupportVolumePosition[0]); |
44285dfa | 2631 | vertexposition[1][1] = new TVector3(vertexposition[0][1]->X(), |
2632 | vertexposition[0][1]->X()*TMath::Tan(theta) | |
d7599219 | 2633 | + fgkCarbonFiberLowerSupportVolumePosition[0]); |
44285dfa | 2634 | vertexposition[1][2] = new TVector3(0.,fgkCarbonFiberLowerSupportVolumePosition[0]); |
2635 | vertexposition[1][3] = new TVector3(fgkCarbonFiberTriangleLength, | |
d7599219 | 2636 | fgkCarbonFiberLowerSupportVolumePosition[1]); |
44285dfa | 2637 | char* carbonfiberlowersupportname[kshapesnumber] = |
d7599219 | 2638 | {"CarbonFiberLowerSupportShape1","CarbonFiberLowerSupportShape2"}; |
44285dfa | 2639 | TGeoArb8* carbonfiberlowersupportshape[kshapesnumber]; |
2640 | for(Int_t i = 0; i< kshapesnumber; i++) carbonfiberlowersupportshape[i] = | |
2641 | GetArbShape(vertexposition[i],width, | |
d7599219 | 2642 | fgkCarbonFiberLowerSupportHeight, |
44285dfa | 2643 | carbonfiberlowersupportname[i]); |
d7599219 | 2644 | /////////////////////////////////////////////////////// |
44285dfa | 2645 | TGeoTranslation* carbonfiberlowersupporttrans[kshapesnumber]; |
2646 | carbonfiberlowersupporttrans[0] = | |
d7599219 | 2647 | new TGeoTranslation("CarbonFiberLowerSupportTrans1", |
2648 | 0.0, | |
44285dfa | 2649 | vertexposition[1][3]->Y()+vertexposition[1][2]->Y(), |
d7599219 | 2650 | 0.0); |
44285dfa | 2651 | carbonfiberlowersupporttrans[1] = |
d7599219 | 2652 | new TGeoTranslation("CarbonFiberLowerSupportTrans2", |
2653 | 0.0, | |
44285dfa | 2654 | - vertexposition[1][3]->Y()-vertexposition[1][2]->Y(), |
d7599219 | 2655 | 0.0); |
44285dfa | 2656 | for(Int_t i = 0; i< kshapesnumber; i++) |
2657 | carbonfiberlowersupporttrans[i]->RegisterYourself(); | |
d7599219 | 2658 | /////////////////////////////////////////////////////// |
44285dfa | 2659 | TGeoCompositeShape* carbonfiberlowersupportcompshape; |
d7599219 | 2660 | if(EndLadder==false) |
44285dfa | 2661 | carbonfiberlowersupportcompshape = |
d7599219 | 2662 | new TGeoCompositeShape("CarbonFiberLowerSupportCompShape", |
2663 | "CarbonFiberLowerSupportShape2+" | |
2664 | "CarbonFiberLowerSupportShape1:CarbonFiberLowerSupportTrans1"); | |
2665 | else | |
2666 | if(ikind==0) | |
44285dfa | 2667 | carbonfiberlowersupportcompshape = |
2668 | (TGeoCompositeShape*)carbonfiberlowersupportshape[0]; | |
d7599219 | 2669 | else |
44285dfa | 2670 | carbonfiberlowersupportcompshape = |
d7599219 | 2671 | new TGeoCompositeShape("CarbonFiberLowerSupportCompShape", |
2672 | "CarbonFiberLowerSupportShape1+" | |
2673 | "CarbonFiberLowerSupportShape1:CarbonFiberLowerSupportTrans1"); | |
44285dfa | 2674 | TGeoVolume* carbonfiberlowersupport = new TGeoVolume("CarbonFiberLowerSupport", |
2675 | carbonfiberlowersupportcompshape,fSSDCarbonFiberMedium); | |
2676 | carbonfiberlowersupport->SetLineColor(fColorCarbonFiber); | |
2677 | return carbonfiberlowersupport; | |
d7599219 | 2678 | } |
2679 | //////////////////////////////////////////////////////////////////////////////// | |
2680 | TGeoVolume* AliITSv11GeometrySSD::GetCarbonFiberAssemblySupport(){ | |
44285dfa | 2681 | ///////////////////////////////////////////////////////////// |
2682 | // Method generating the Carbon Fiber Assembly Support | |
2683 | ///////////////////////////////////////////////////////////// | |
d7599219 | 2684 | SetCarbonFiberAssemblyCombiTransMatrix(); |
44285dfa | 2685 | TGeoVolume* carbonfiberassemblysupport = |
d7599219 | 2686 | new TGeoVolumeAssembly("CarbonFiberAssembly"); |
44285dfa | 2687 | TGeoVolume* carbonfiberassemblyvolumes[fgkCarbonFiberAssemblyCombiTransNumber]; |
2688 | carbonfiberassemblyvolumes[0] = GetCarbonFiberJunctionAssembly(); | |
2689 | carbonfiberassemblyvolumes[1] = GetCarbonFiberSupport(); | |
2690 | carbonfiberassemblyvolumes[2] = GetCarbonFiberLowerSupport(); | |
d7599219 | 2691 | for(Int_t i=0; i<fgkCarbonFiberAssemblyCombiTransNumber;i++) |
44285dfa | 2692 | carbonfiberassemblysupport->AddNode(carbonfiberassemblyvolumes[i],1, |
2693 | fCarbonFiberAssemblyCombiTransMatrix[i]); | |
2694 | return carbonfiberassemblysupport; | |
d7599219 | 2695 | } |
2696 | //////////////////////////////////////////////////////////////////////////////// | |
2697 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeSupport(){ | |
44285dfa | 2698 | ///////////////////////////////////////////////////////////// |
2699 | // Method generating the Cooling Tube Support | |
2700 | ///////////////////////////////////////////////////////////// | |
2701 | const Int_t kvertexnumber = 3; | |
2702 | Double_t phi = TMath::ASin(0.5*fgkCoolingTubeSupportHeight | |
d7599219 | 2703 | / fgkCoolingTubeSupportRmax)*TMath::RadToDeg(); |
d7599219 | 2704 | new TGeoTubeSeg("CoolingTubeSegShape",0.0, |
2705 | fgkCoolingTubeSupportRmax, | |
44285dfa | 2706 | 0.5*fgkCoolingTubeSupportWidth,phi, |
2707 | 360-phi); | |
d7599219 | 2708 | new TGeoTube("CoolingTubeHoleShape",0.0, |
2709 | fgkCoolingTubeSupportRmin, | |
2710 | 0.5*fgkCoolingTubeSupportWidth); | |
44285dfa | 2711 | TVector3* vertexposition[kvertexnumber]; |
d7599219 | 2712 | /////////////////////////// |
2713 | //Shape Vertex Positioning | |
2714 | /////////////////////////// | |
44285dfa | 2715 | vertexposition[0] = new TVector3(); |
2716 | vertexposition[1] = new TVector3(fgkCoolingTubeSupportRmax | |
2717 | * TMath::Cos(phi*TMath::DegToRad()), | |
d7599219 | 2718 | fgkCoolingTubeSupportRmax |
44285dfa | 2719 | * TMath::Sin(phi*TMath::DegToRad())); |
2720 | vertexposition[2] = new TVector3(vertexposition[1]->X(), | |
2721 | - vertexposition[1]->Y()); | |
2722 | GetTriangleShape(vertexposition, | |
d7599219 | 2723 | fgkCoolingTubeSupportWidth, |
2724 | "CoolingTubeTriangleShape"); | |
44285dfa | 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, | |
d7599219 | 2730 | 0.5*fgkCoolingTubeSupportHeight, |
44285dfa | 2731 | 0.5*fgkCoolingTubeSupportWidth,boxorigin); |
2732 | TGeoCompositeShape* coolingtubesupportshape = | |
d7599219 | 2733 | new TGeoCompositeShape("CoolingTubeSupportShape", |
2734 | "(CoolingTubeSegShape+CoolingTubeTriangleShape" | |
2735 | "+CoolingTubeBoxShape)-CoolingTubeHoleShape"); | |
44285dfa | 2736 | TGeoVolume* coolingtubesupport = new TGeoVolume("CoolingTubeSupport", |
2737 | coolingtubesupportshape,fSSDTubeHolderMedium); | |
2738 | return coolingtubesupport; | |
d7599219 | 2739 | } |
2740 | //////////////////////////////////////////////////////////////////////////////// | |
2741 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeSupportAssembly(){ | |
44285dfa | 2742 | ///////////////////////////////////////////////////////////// |
2743 | // Method generating the Cooling Tube Support Assembly | |
2744 | ///////////////////////////////////////////////////////////// | |
2745 | TGeoVolume* coolingtubesupportassembly = | |
d7599219 | 2746 | new TGeoVolumeAssembly("CoolingTubeSupportAssembly"); |
44285dfa | 2747 | TGeoVolume* coolingtubesupport = GetCoolingTubeSupport(); |
d7599219 | 2748 | SetCoolingTubeSupportCombiTransMatrix(); |
2749 | for(Int_t i=0; i<fgkCoolingTubeSupportCombiTransNumber;i++) | |
44285dfa | 2750 | coolingtubesupportassembly->AddNode(coolingtubesupport,i+1, |
2751 | fCoolingTubeSupportCombiTransMatrix[i]); | |
2752 | return coolingtubesupportassembly; | |
d7599219 | 2753 | } |
2754 | //////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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, | |
d7599219 | 2761 | fgkCoolingTubeRmax, fgkCoolingTubeLength/2.0); |
44285dfa | 2762 | TGeoVolume* coolingtube = new TGeoVolume("CoolingTube", |
2763 | coolingtubeshape,fSSDCoolingTubePhynox); | |
2764 | TGeoTube *coolingtubeinteriorshape = new TGeoTube("CoolingTubeInteriorShape", | |
d7599219 | 2765 | 0, fgkCoolingTubeRmin, |
2766 | fgkCoolingTubeLength/2.0); | |
44285dfa | 2767 | TGeoVolume *coolingtubeinterior = new TGeoVolume("CoolingTubeInterior", |
2768 | coolingtubeinteriorshape,fSSDCoolingTubeWater); | |
2769 | coolingtubeassembly->AddNode(coolingtube,1); | |
2770 | coolingtubeassembly->AddNode(coolingtubeinterior,2); | |
2771 | return coolingtubeassembly; | |
d7599219 | 2772 | } |
2773 | //////////////////////////////////////////////////////////////////////////////// | |
2774 | TGeoVolume* AliITSv11GeometrySSD::GetCoolingTubeAssembly(){ | |
44285dfa | 2775 | ///////////////////////////////////////////////////////////// |
2776 | // Method generating the Cooling Tube Assembly | |
2777 | ///////////////////////////////////////////////////////////// | |
2778 | TGeoVolume* coolingtubeassembly = new TGeoVolumeAssembly("CoolingTubeAssembly"); | |
2779 | TGeoVolume* coolingtube = GetCoolingTube(); | |
d7599219 | 2780 | SetCoolingTubeCombiTransMatrix(); |
2781 | for(Int_t i=0; i<fgkCoolingTubeCombiTransNumber;i++) | |
44285dfa | 2782 | coolingtubeassembly->AddNode(coolingtube,i+1,fCoolingTubeTransMatrix[i]); |
2783 | return coolingtubeassembly; | |
d7599219 | 2784 | } |
2785 | //////////////////////////////////////////////////////////////////////////////// | |
2786 | TGeoVolume* AliITSv11GeometrySSD::GetLadderSegment(Int_t iChipCablesHeight){ | |
44285dfa | 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 | } | |
d7599219 | 2803 | //////////////////////////////////////////////////////////////////////////////// |
2804 | TList* AliITSv11GeometrySSD::GetEndLadderSegment(){ | |
44285dfa | 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++){ | |
d7599219 | 2827 | SetEndLadderSegmentCombiTransMatrix(i); |
44285dfa | 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]); | |
d7599219 | 2832 | } |
44285dfa | 2833 | return endladdersegmentlist; |
d7599219 | 2834 | } |
2835 | //////////////////////////////////////////////////////////////////////////////// | |
2836 | TGeoVolume* AliITSv11GeometrySSD::GetSSDMountingBlock(){ | |
44285dfa | 2837 | ///////////////////////////////////////////////////////////// |
2838 | // Method generating the Mounting Block | |
2839 | ///////////////////////////////////////////////////////////// | |
d7599219 | 2840 | // Mounting Block Boxes Shapes |
2841 | /////////////////////////////////////// | |
44285dfa | 2842 | const Int_t kmountingblockboxnumber = 3; |
2843 | TGeoBBox* mountingblockboxshape[kmountingblockboxnumber]; | |
2844 | mountingblockboxshape[0] = new TGeoBBox("MountingBlockBoxShape0", | |
d7599219 | 2845 | 0.25*(fgkSSDMountingBlockLength[0] |
2846 | - fgkSSDMountingBlockLength[1]), | |
2847 | 0.5*fgkSSDMountingBlockWidth, | |
2848 | 0.5*fgkSSDMountingBlockHeight[0]); | |
44285dfa | 2849 | mountingblockboxshape[1] = new TGeoBBox("MountingBlockBoxShape1", |
d7599219 | 2850 | 0.25*(fgkSSDMountingBlockLength[1] |
2851 | - fgkSSDMountingBlockLength[2]), | |
2852 | 0.5*fgkSSDMountingBlockWidth, | |
2853 | 0.5*(fgkSSDMountingBlockHeight[1] | |
2854 | - fgkSSDMountingBlockHeight[3])); | |
44285dfa | 2855 | mountingblockboxshape[2] = new TGeoBBox("MountingBlockBoxShape2", |
d7599219 | 2856 | 0.5*fgkSSDMountingBlockLength[2], |
2857 | 0.5*fgkSSDMountingBlockWidth, | |
2858 | 0.5*(fgkSSDMountingBlockHeight[2] | |
2859 | - fgkSSDMountingBlockHeight[3])); | |
44285dfa | 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(), | |
d7599219 | 2865 | 0.0, |
44285dfa | 2866 | mountingblockboxshape[1]->GetDZ() |
2867 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2868 | + fgkSSDMountingBlockHeight[3]); |
44285dfa | 2869 | mountingblockboxtrans[2] = new TGeoTranslation("MountingBlockBoxTrans2", |
2870 | mountingblockboxshape[0]->GetDX() | |
2871 | + 2.*mountingblockboxshape[1]->GetDX() | |
2872 | + mountingblockboxshape[2]->GetDX(), | |
d7599219 | 2873 | 0.0, |
44285dfa | 2874 | mountingblockboxshape[2]->GetDZ() |
2875 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2876 | + fgkSSDMountingBlockHeight[3]); |
44285dfa | 2877 | mountingblockboxtrans[3] = new TGeoTranslation("MountingBlockBoxTrans3", |
2878 | mountingblockboxshape[0]->GetDX() | |
2879 | + mountingblockboxshape[1]->GetDX() | |
2880 | + 2.*(mountingblockboxshape[1]->GetDX() | |
2881 | + mountingblockboxshape[2]->GetDX()), | |
d7599219 | 2882 | 0.0, |
44285dfa | 2883 | mountingblockboxshape[1]->GetDZ() |
2884 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2885 | + fgkSSDMountingBlockHeight[3]); |
44285dfa | 2886 | mountingblockboxtrans[4] = new TGeoTranslation("MountingBlockBoxTrans4", |
2887 | 2.*(mountingblockboxshape[0]->GetDX() | |
2888 | + 2.*mountingblockboxshape[1]->GetDX() | |
2889 | + mountingblockboxshape[2]->GetDX()), | |
d7599219 | 2890 | 0.0, |
2891 | 0.0); | |
44285dfa | 2892 | for(Int_t i=0; i<kmountingblockboxnumber+2; i++) |
2893 | mountingblockboxtrans[i]->RegisterYourself(); | |
d7599219 | 2894 | /////////////////////////////////////// |
2895 | // Mounting Block Trapezoid Hole Shapes | |
2896 | /////////////////////////////////////// | |
44285dfa | 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() | |
d7599219 | 2905 | * TMath::Tan(fgkSSDMountingBlockHoleTrapezoidAngle |
2906 | * TMath::DegToRad()), | |
2907 | fgkSSDMountingBlockHoleTrapezoidUpBasis}; | |
44285dfa | 2908 | GetArbShape(holetrapezoidvertex, |
2909 | holetrapezoidwidth, | |
2910 | 2.*mountingblockboxshape[1]->GetDX(), | |
d7599219 | 2911 | "HoleTrapezoidShape"); |
44285dfa | 2912 | TGeoRotation* holetrapezoidshaperot[2]; |
2913 | holetrapezoidshaperot[0] = new TGeoRotation("HoleTrapezoidShapeRot0", | |
d7599219 | 2914 | 90.,-90.,-90.); |
44285dfa | 2915 | holetrapezoidshaperot[1] = new TGeoRotation("HoleTrapezoidShapeRot1", |
d7599219 | 2916 | -180.,0.,0.); |
44285dfa | 2917 | TGeoCombiTrans* holetrapezoidshapecombitrans = |
d7599219 | 2918 | new TGeoCombiTrans("HoleTrapezoidShapeCombiTrans", |
44285dfa | 2919 | mountingblockboxshape[0]->GetDX() |
2920 | + 3.*mountingblockboxshape[1]->GetDX() | |
2921 | + 2.*mountingblockboxshape[2]->GetDX(), | |
d7599219 | 2922 | 0.5*fgkSSDMountingBlockWidth, |
2923 | - fgkSSDMountingBlockHoleTrapezoidHeight | |
44285dfa | 2924 | + 2.*mountingblockboxshape[1]->GetDZ() |
2925 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2926 | + fgkSSDMountingBlockHeight[3], |
44285dfa | 2927 | new TGeoRotation((*holetrapezoidshaperot[1]) |
2928 | * (*holetrapezoidshaperot[0]))); | |
2929 | holetrapezoidshapecombitrans->RegisterYourself(); | |
d7599219 | 2930 | /////////////////////////////////// |
2931 | // Mounting Block Screw Hole Shapes | |
2932 | /////////////////////////////////// | |
44285dfa | 2933 | const Int_t kmountingblocktubenumber = 2; |
2934 | TGeoTube* mountingblocktubeshape[kmountingblocktubenumber]; | |
2935 | mountingblocktubeshape[0] = new TGeoTube("MountingBlockTubeShape0",0.0, | |
d7599219 | 2936 | fgkSSDMountingBlockHoleRadius, |
44285dfa | 2937 | mountingblockboxshape[0]->GetDZ()); |
2938 | mountingblocktubeshape[1] = new TGeoTube("MountingBlockTubeShape1",0.0, | |
d7599219 | 2939 | fgkSSDMountingBlockHoleRadius, |
44285dfa | 2940 | mountingblockboxshape[2]->GetDZ()); |
2941 | TGeoTranslation* mountingblocktubetrans[2*kmountingblocktubenumber]; | |
2942 | mountingblocktubetrans[0] = new TGeoTranslation("MountingBlockTubeTrans0", | |
d7599219 | 2943 | - 0.5*(fgkSSDMountingBlockLength[0] |
2944 | - fgkSSDMountingBlockHoleTubeLength[0]), | |
2945 | 0.5*fgkSSDMountingBlockWidth | |
2946 | - fgkSSDMountingBlockHoleTubeWidth[0],0.); | |
44285dfa | 2947 | mountingblocktubetrans[1] = new TGeoTranslation("MountingBlockTubeTrans1", |
d7599219 | 2948 | - 0.5*(fgkSSDMountingBlockLength[0] |
2949 | - fgkSSDMountingBlockHoleTubeLength[0]) | |
2950 | + fgkSSDMountingBlockHoleTubeLength[0], | |
2951 | - 0.5*fgkSSDMountingBlockWidth | |
2952 | + fgkSSDMountingBlockHoleTubeWidth[0], | |
2953 | 0.); | |
44285dfa | 2954 | mountingblocktubetrans[2] = new TGeoTranslation("MountingBlockTubeTrans2", |
2955 | - mountingblockboxshape[0]->GetDX() | |
d7599219 | 2956 | + 0.5*fgkSSDMountingBlockLength[0] |
2957 | - fgkSSDMountingBlockHoleTubeLength[1], | |
2958 | 0.5*fgkSSDMountingBlockWidth | |
2959 | - fgkSSDMountingBlockHoleTubeWidth[0], | |
44285dfa | 2960 | mountingblockboxshape[2]->GetDZ() |
2961 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2962 | + fgkSSDMountingBlockHeight[3]); |
44285dfa | 2963 | mountingblocktubetrans[3] = new TGeoTranslation("MountingBlockTubeTrans3", |
2964 | - mountingblockboxshape[0]->GetDX() | |
d7599219 | 2965 | + 0.5*fgkSSDMountingBlockLength[0], |
2966 | - 0.5*fgkSSDMountingBlockWidth | |
2967 | + fgkSSDMountingBlockHoleTubeWidth[1], | |
44285dfa | 2968 | mountingblockboxshape[2]->GetDZ() |
2969 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 2970 | + fgkSSDMountingBlockHeight[3]); |
44285dfa | 2971 | for(Int_t i=0; i<2*kmountingblocktubenumber; i++) |
2972 | mountingblocktubetrans[i]->RegisterYourself(); | |
d7599219 | 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 | //////////////////////////////////////////// | |
44285dfa | 2982 | const Int_t kmountingblockholetubesegnumber = 4; |
d7599219 | 2983 | new TGeoTubeSeg("MountingBlockHoleTubeSegShape", |
2984 | 0.0, | |
2985 | fgkSSDMountingBlockScrewHoleRadius[0], | |
2986 | 0.5*fgkSSDMountingBlockScrewHoleHeigth,-90.,180.); | |
44285dfa | 2987 | TGeoCombiTrans* mountingblockholetubesegcombitrans[kmountingblockholetubesegnumber]; |
2988 | char* mountingblockholetubesegcombitransname[kmountingblockholetubesegnumber] = | |
d7599219 | 2989 | { "MountingBlockHoleTubeSegCombiTrans0", |
2990 | "MountingBlockHoleTubeSegCombiTrans1", | |
2991 | "MountingBlockHoleTubeSegCombiTrans2", | |
2992 | "MountingBlockHoleTubeSegCombiTrans3"}; | |
44285dfa | 2993 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ |
2994 | mountingblockholetubesegcombitrans[i] = | |
2995 | new TGeoCombiTrans(mountingblockholetubesegcombitransname[i], | |
d7599219 | 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.)); | |
44285dfa | 3002 | mountingblockholetubesegcombitrans[i]->RegisterYourself(); |
d7599219 | 3003 | } |
44285dfa | 3004 | TGeoBBox* mountingblockholeboxshape = |
d7599219 | 3005 | new TGeoBBox("MountingBlockHoleBoxShape", |
3006 | 0.5*fgkSSDMountingBlockScrewHoleEdge, | |
3007 | 0.5*fgkSSDMountingBlockScrewHoleEdge, | |
3008 | 0.5*fgkSSDMountingBlockScrewHoleHeigth); | |
44285dfa | 3009 | TGeoCompositeShape* mountingblockscrewhole[2]; |
3010 | mountingblockscrewhole[0] = | |
d7599219 | 3011 | new TGeoCompositeShape("MountingBlockScrewHole0", |
3012 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans0+" | |
3013 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans1+" | |
3014 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans2+" | |
3015 | "MountingBlockHoleTubeSegShape:MountingBlockHoleTubeSegCombiTrans3+" | |
3016 | "MountingBlockHoleBoxShape"); | |
d7599219 | 3017 | new TGeoTubeSeg("MountingBlockLowerHoleTubeSegShape", |
3018 | 0.0, | |
3019 | fgkSSDMountingBlockScrewHoleRadius[1], | |
3020 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3021 | - fgkSSDMountingBlockScrewHoleHeigth | |
3022 | - fgkSSDMountingBlockHeight[3]),0.,90.); | |
44285dfa | 3023 | TGeoCombiTrans* mountingblocklowerholetubesegcombitrans[kmountingblockholetubesegnumber]; |
3024 | char* mountingblocklowerholetubesegcombitransname[kmountingblockholetubesegnumber] = | |
d7599219 | 3025 | { "MountingBlockLowerHoleTubeSegCombiTrans0", |
3026 | "MountingBlockLowerHoleTubeSegCombiTrans1", | |
3027 | "MountingBlockLowerHoleTubeSegCombiTrans2", | |
3028 | "MountingBlockLowerHoleTubeSegCombiTrans3"}; | |
44285dfa | 3029 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ |
3030 | mountingblocklowerholetubesegcombitrans[i] = | |
3031 | new TGeoCombiTrans(mountingblocklowerholetubesegcombitransname[i], | |
d7599219 | 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.)); | |
44285dfa | 3039 | mountingblocklowerholetubesegcombitrans[i]->RegisterYourself(); |
d7599219 | 3040 | } |
3041 | Double_t fgkSSDMountingBlockLowerScrewHoleEdge = fgkSSDMountingBlockScrewHoleEdge | |
3042 | - 2.*fgkSSDMountingBlockScrewHoleRadius[1]; | |
44285dfa | 3043 | TGeoBBox* mountingblocklowerholeboxshape[2]; |
3044 | mountingblocklowerholeboxshape[0] = | |
d7599219 | 3045 | new TGeoBBox("MountingBlockLowerHoleBoxShape0", |
3046 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3047 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3048 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3049 | - fgkSSDMountingBlockScrewHoleHeigth | |
3050 | - fgkSSDMountingBlockHeight[3])); | |
44285dfa | 3051 | mountingblocklowerholeboxshape[1] = |
d7599219 | 3052 | new TGeoBBox("MountingBlockLowerHoleBoxShape1", |
3053 | 0.5*fgkSSDMountingBlockLowerScrewHoleEdge, | |
3054 | 0.5*fgkSSDMountingBlockScrewHoleRadius[1], | |
3055 | 0.5*(fgkSSDMountingBlockHoleTubeWidth[0] | |
3056 | - fgkSSDMountingBlockScrewHoleHeigth | |
3057 | - fgkSSDMountingBlockHeight[3])); | |
44285dfa | 3058 | TGeoCombiTrans* mountingblocklowerholeBoxcombitrans[kmountingblockholetubesegnumber]; |
3059 | char* mountingBlockLowerHoleBoxCombiTransName[kmountingblockholetubesegnumber] = | |
d7599219 | 3060 | { "MountingBlockLowerHoleBoxCombiTrans0", |
3061 | "MountingBlockLowerHoleBoxCombiTrans1", | |
3062 | "MountingBlockLowerHoleBoxCombiTrans2", | |
3063 | "MountingBlockLowerHoleBoxCombiTrans3"}; | |
44285dfa | 3064 | for(Int_t i=0; i<kmountingblockholetubesegnumber; i++){ |
3065 | mountingblocklowerholeBoxcombitrans[i] = | |
3066 | new TGeoCombiTrans(mountingBlockLowerHoleBoxCombiTransName[i], | |
d7599219 | 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.)); | |
44285dfa | 3074 | mountingblocklowerholeBoxcombitrans[i]->RegisterYourself(); |
d7599219 | 3075 | } |
44285dfa | 3076 | mountingblockscrewhole[1] = new TGeoCompositeShape("MountingBlockScrewHole1", |
d7599219 | 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"); | |
44285dfa | 3086 | TGeoTranslation* mountingblockscrewhole1trans = |
d7599219 | 3087 | new TGeoTranslation("MountingBlockScrewHole1Trans",0.,0., |
44285dfa | 3088 | - mountingblocklowerholeboxshape[0]->GetDZ() |
3089 | - mountingblockholeboxshape->GetDZ()); | |
3090 | mountingblockscrewhole1trans->RegisterYourself(); | |
d7599219 | 3091 | new TGeoCompositeShape("MountingBlockHole", |
3092 | "MountingBlockScrewHole0+MountingBlockScrewHole1:MountingBlockScrewHole1Trans"); | |
44285dfa | 3093 | TGeoTranslation* mountingblockholetrans = new TGeoTranslation("MountingBlockHoleTrans", |
d7599219 | 3094 | 0.5*fgkSSDMountingBlockLength[0] |
44285dfa | 3095 | - mountingblockboxshape[0]->GetDZ(), |
d7599219 | 3096 | 0.0, |
44285dfa | 3097 | 2.*mountingblockboxshape[2]->GetDZ() |
3098 | - mountingblockboxshape[0]->GetDZ() | |
d7599219 | 3099 | + fgkSSDMountingBlockHeight[3] |
44285dfa | 3100 | - mountingblockholeboxshape->GetDZ()); |
3101 | mountingblockholetrans->RegisterYourself(); | |
3102 | TGeoCompositeShape* mountingblockshape = new TGeoCompositeShape("MountingBlockShape", | |
d7599219 | 3103 | "MountingBlockMainShape-(MountingBlockTubeShape0:MountingBlockTubeTrans0+" |
3104 | "MountingBlockTubeShape0:MountingBlockTubeTrans1+" | |
3105 | "MountingBlockTubeShape1:MountingBlockTubeTrans2+" | |
3106 | "MountingBlockTubeShape1:MountingBlockTubeTrans3+" | |
3107 | "HoleTrapezoidShape:HoleTrapezoidShapeCombiTrans+" | |
3108 | "MountingBlockHole:MountingBlockHoleTrans)"); | |
44285dfa | 3109 | TGeoVolume* ssdmountingblock = new TGeoVolume("SSDMountingBlock", |
3110 | mountingblockshape,fSSDMountingBlockMedium); | |
3111 | return ssdmountingblock; | |
d7599219 | 3112 | } |
3113 | //////////////////////////////////////////////////////////////////////////////// | |
3114 | TGeoVolume* AliITSv11GeometrySSD::GetLadder(Int_t iLayer){ | |
44285dfa | 3115 | ///////////////////////////////////////////////////////////// |
3116 | // Method generating the Layer5 or Layer6 Ladder | |
3117 | ///////////////////////////////////////////////////////////// | |
3118 | TGeoVolume* ladder = new TGeoVolumeAssembly(iLayer==5 ? "ITSssdLay5Ladd" | |
d7599219 | 3119 | : "ITSssdLay6Ladd"); |
44285dfa | 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 ? | |
d7599219 | 3126 | fgkSSDLay5SensorsNumber : |
3127 | fgkSSDLay6SensorsNumber); | |
44285dfa | 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], | |
9acf2ecc | 3131 | ssdlaysensorsnumber-i-1,new TGeoTranslation(-0.5*fgkCarbonFiberTriangleLength, |
44285dfa | 3132 | beamaxistransvector*i,0.)); |
3133 | ladder->AddNode((TGeoVolume*)endladdersegmentlist->At(0),1, | |
d7599219 | 3134 | new TGeoTranslation("",-0.5*fgkCarbonFiberTriangleLength, |
44285dfa | 3135 | fgkCarbonFiberJunctionWidth*ssdlaysensorsnumber,0.)); |
3136 | ladder->AddNode((TGeoVolume*)endladdersegmentlist->At(1),1, | |
d7599219 | 3137 | new TGeoCombiTrans("",0.5*fgkCarbonFiberTriangleLength, |
3138 | 0.,0.,new TGeoRotation("",180.,0.,0.))); | |
3139 | ///////////////////////////////////////////////////////////////////////////// | |
3140 | /// Placing Ladder Cables | |
3141 | ///////////////////////////////////////////////////////////////////////////// | |
3142 | SetLadderCableCombiTransMatrix(iLayer); | |
44285dfa | 3143 | Int_t sidecablenumber[2] = {0,0}; |
d7599219 | 3144 | switch(iLayer){ |
3145 | case 5: | |
44285dfa | 3146 | sidecablenumber[0] = fgkSSDLay5SensorsNumber/2+1; |
3147 | sidecablenumber[1] = sidecablenumber[0]-2; | |
d7599219 | 3148 | break; |
3149 | case 6: | |
44285dfa | 3150 | sidecablenumber[0] = (fgkSSDLay6SensorsNumber-1)/2+1; |
3151 | sidecablenumber[1] = sidecablenumber[0]-1; | |
d7599219 | 3152 | break; |
3153 | } | |
44285dfa | 3154 | const Double_t* carbonfibertomoduleposition = |
3155 | fLadderSegmentCombiTransMatrix[1]->GetTranslation(); | |
3156 | Double_t ssdendladdercablelength[4]; | |
3157 | ssdendladdercablelength[0] = carbonfibertomoduleposition[1] | |
d7599219 | 3158 | + fgkSSDSensorLength |
3159 | - fgkSSDModuleStiffenerPosition[1] | |
3160 | - fgkSSDStiffenerWidth | |
3161 | - fgkSSDFlexWidth[0] | |
3162 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
44285dfa | 3163 | ssdendladdercablelength[1] = carbonfibertomoduleposition[1] |
d7599219 | 3164 | + fgkSSDModuleStiffenerPosition[1] |
3165 | + fgkSSDStiffenerWidth | |
3166 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
44285dfa | 3167 | ssdendladdercablelength[2] = ssdendladdercablelength[1] |
d7599219 | 3168 | - fgkEndLadderCarbonFiberLowerJunctionLength[1] |
3169 | + fgkEndLadderCarbonFiberLowerJunctionLength[0]; | |
44285dfa | 3170 | ssdendladdercablelength[3] = fgkCarbonFiberJunctionWidth-(fgkSSDSensorLength |
3171 | + carbonfibertomoduleposition[1] | |
d7599219 | 3172 | - fgkSSDModuleStiffenerPosition[1] |
3173 | - fgkSSDStiffenerWidth) | |
3174 | + fgkEndLadderCarbonFiberLowerJunctionLength[1]; | |
44285dfa | 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]); | |
d7599219 | 3183 | } |
44285dfa | 3184 | return ladder; |
d7599219 | 3185 | } |
3186 | //////////////////////////////////////////////////////////////////////////////// | |
3187 | TGeoVolume* AliITSv11GeometrySSD::GetLayer(Int_t iLayer){ | |
44285dfa | 3188 | ///////////////////////////////////////////////////////////// |
3189 | // Method generating the Layer5 or Layer6 | |
3190 | ///////////////////////////////////////////////////////////// | |
3191 | TGeoVolume* layer = new TGeoVolumeAssembly(iLayer==5 ? "ITSssdLayer5" | |
d7599219 | 3192 | : "ITSssdLayer6"); |
44285dfa | 3193 | TGeoVolume* ladder = GetLadder(iLayer); |
d7599219 | 3194 | ///////////////////////////////////////////////////// |
3195 | // Setting the CombiTransformation to pass ITS center | |
3196 | ///////////////////////////////////////////////////// | |
44285dfa | 3197 | Double_t itscentertransz = iLayer==5 ? fgkSSDLay5LadderLength |
d7599219 | 3198 | - fgkLay5CenterITSPosition: |
3199 | fgkSSDLay6LadderLength | |
3200 | - fgkLay6CenterITSPosition; | |
44285dfa | 3201 | Double_t itssensorytrans = fgkSSDModuleCoolingBlockToSensor |
d7599219 | 3202 | + 0.5* fgkCoolingTubeSupportHeight |
3203 | -(iLayer==5 ? fgkSSDSensorSideSupportHeight[1] | |
3204 | - fgkSSDSensorSideSupportHeight[0]: 0.); | |
44285dfa | 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, | |
d7599219 | 3211 | fgkEndLadderCarbonFiberLowerJunctionLength[1] |
44285dfa | 3212 | - itscentertransz,itscenterrot[2]); |
d7599219 | 3213 | ///////////////////////////////////////////////////// |
3214 | // Setting the Ladder into the Layer | |
3215 | ///////////////////////////////////////////////////// | |
44285dfa | 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)); | |
9acf2ecc | 3236 | layer->AddNode(ladder,i,lay5ladderhmatrix[i]); |
44285dfa | 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)); | |
9acf2ecc | 3255 | layer->AddNode(ladder,i,lay6ladderhmatrix[i]); |
d7599219 | 3256 | } |
44285dfa | 3257 | } |
3258 | return layer; | |
d7599219 | 3259 | } |
3260 | //////////////////////////////////////////////////////////////////////////////// | |
3261 | void AliITSv11GeometrySSD::Layer5(TGeoVolume* moth){ | |
44285dfa | 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 | } | |
d7599219 | 3272 | //////////////////////////////////////////////////////////////////////////////// |
3273 | void AliITSv11GeometrySSD::Layer6(TGeoVolume* moth){ | |
44285dfa | 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 | } | |
d7599219 | 3284 | //////////////////////////////////////////////////////////////////////////////// |
3285 | TGeoArb8* AliITSv11GeometrySSD::GetTrapezoidShape(TVector3* vertexpos[], | |
44285dfa | 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 | ///////////////////////////////////////////////////////////// | |
d7599219 | 3297 | //Setting the vertices |
44285dfa | 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; | |
d7599219 | 3308 | } |
3309 | //////////////////////////////////////////////////////////////////////////////// | |
3310 | TGeoArb8* AliITSv11GeometrySSD::GetArbShape(TVector3* vertexpos[], Double_t* width, | |
44285dfa | 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 | ///////////////////////////////////////////////////////////// | |
d7599219 | 3321 | //Setting the vertices for TGeoArb8 |
44285dfa | 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; | |
d7599219 | 3336 | } |
3337 | //////////////////////////////////////////////////////////////////////////////// | |
3338 | TGeoArb8* AliITSv11GeometrySSD::GetTriangleShape(TVector3* vertexpos[], | |
44285dfa | 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]; | |
d7599219 | 3345 | ////////////////////////////////////// |
3346 | //Setting the vertices for TGeoArb8 | |
3347 | //////////////////////////////////// | |
44285dfa | 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; | |
d7599219 | 3355 | } |
3356 | //////////////////////////////////////////////////////////////////////////////// | |
44285dfa | 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; | |
d7599219 | 3366 | } |
3367 | //////////////////////////////////////////////////////////////////////////////// | |
3368 | TGeoCombiTrans* AliITSv11GeometrySSD::AddTranslationToCombiTrans(TGeoCombiTrans* ct, | |
3369 | Double_t dx, | |
3370 | Double_t dy, | |
3371 | Double_t dz) const{ | |
44285dfa | 3372 | ///////////////////////////////////////////////////////////// |
d7599219 | 3373 | // Add a dx,dy,dz translation to the initial TGeoCombiTrans |
44285dfa | 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; | |
d7599219 | 3380 | } |
3381 | //////////////////////////////////////////////////////////////////////////////// | |
d7599219 | 3382 | TGeoMedium* AliITSv11GeometrySSD::GetMedium(const char* mediumName) { |
44285dfa | 3383 | ///////////////////////////////////////////////////////////// |
3384 | // Method returning the Medium type | |
3385 | ///////////////////////////////////////////////////////////// | |
d7599219 | 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); | |
44285dfa | 3410 | fSSDSensorMedium = Silicon; |
d7599219 | 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); | |
44285dfa | 3417 | fSSDChipMedium = SiliconMixture; |
d7599219 | 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); | |
44285dfa | 3424 | fSSDStiffenerMedium = K1100; |
d7599219 | 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); | |
44285dfa | 3432 | fSSDStiffenerConnectorMedium = SnMedium; |
d7599219 | 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); | |
44285dfa | 3441 | fSSDStiffener0603CapacitorMedium = Al2O3Medium; |
3442 | fSSDStiffener1812CapacitorMedium = Al2O3Medium; | |
d7599219 | 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); | |
44285dfa | 3451 | fSSDStiffenerHybridWireMedium = CuHybridWireMedium; |
d7599219 | 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); | |
44285dfa | 3460 | fSSDAlCoolBlockMedium = AlCoolBlockMedium; |
d7599219 | 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); | |
44285dfa | 3474 | fSSDKaptonChipCableMedium = KaptonMedium; |
3475 | fSSDAlTraceChipCableMedium = AlTraceMedium; | |
3476 | fSSDKaptonFlexMedium = KaptonMedium; | |
3477 | fSSDAlTraceFlexMedium = AlTraceMedium; | |
3478 | fSSDKaptonLadderCableMedium = KaptonMedium; | |
3479 | fSSDAlTraceLadderCableMedium = AlTraceMedium; | |
d7599219 | 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); | |
44285dfa | 3487 | fSSDCarbonFiberMedium = M55JMedium; |
3488 | fSSDMountingBlockMedium = M55JMedium; | |
d7599219 | 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); | |
44285dfa | 3496 | fSSDTubeHolderMedium = G10Medium; |
3497 | fSSDSensorSupportMedium = G10Medium; | |
d7599219 | 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); | |
44285dfa | 3505 | fSSDCoolingTubeWater = WaterMedium; |
d7599219 | 3506 | Int_t PhynoxNumber = 12; |
3507 | TGeoMaterial* PhynoxMaterial = new TGeoMaterial("PhynoxMaterial"); | |
3508 | TGeoMedium* PhynoxMedium = new TGeoMedium("PhynoxMedium",PhynoxNumber, | |
3509 | PhynoxMaterial); | |
44285dfa | 3510 | fSSDCoolingTubePhynox = PhynoxMedium; |
d7599219 | 3511 | } |
3512 | */ | |
3513 | void AliITSv11GeometrySSD::CreateMaterials(){ | |
3514 | /////////////////////////////////// | |
3515 | // This part has to be modified | |
3516 | /////////////////////////////////// | |
3517 | /////////////////////////////////// | |
3518 | // Silicon for Sensor | |
3519 | /////////////////////////////////// | |
44285dfa | 3520 | fSSDSensorMedium = GetMedium("Si"); |
d7599219 | 3521 | /////////////////////////////////// |
3522 | // Silicon Mixture for Sensor | |
3523 | /////////////////////////////////// | |
44285dfa | 3524 | fSSDChipMedium = GetMedium("SPD SI CHIP$"); |
3525 | fSSDChipGlueMedium = GetMedium("EPOXY$"); | |
d7599219 | 3526 | /////////////////////////////////// |
3527 | // Stiffener Components Materials | |
3528 | /////////////////////////////////// | |
44285dfa | 3529 | fSSDStiffenerMedium = GetMedium("ITSsddCarbonM55J"); |
d7599219 | 3530 | /////////////////////////// |
3531 | // Stiffener Connectors | |
3532 | /////////////////////////// | |
44285dfa | 3533 | fSSDStiffenerConnectorMedium = GetMedium("COPPER"); |
d7599219 | 3534 | //////////////////////////////// |
3535 | // Stiffener 0603-1812 Capacitor | |
3536 | //////////////////////////////// | |
44285dfa | 3537 | fSSDStiffener0603CapacitorMedium = GetMedium("SDD ruby sph. Al2O3"); |
3538 | fSSDStiffener1812CapacitorMedium = GetMedium("SDD ruby sph. Al2O3"); | |
d7599219 | 3539 | /////////////////////////// |
3540 | // Stiffener Hybrid Wire | |
3541 | /////////////////////////// | |
44285dfa | 3542 | fSSDStiffenerHybridWireMedium = GetMedium("COPPER"); |
d7599219 | 3543 | /////////////////////////// |
3544 | // Al for Cooling Block | |
3545 | /////////////////////////// | |
44285dfa | 3546 | fSSDAlCoolBlockMedium = GetMedium("ITSal"); |
d7599219 | 3547 | ////////////////////////////////////////////////////// |
3548 | // Kapton and Al for Chip Cable Flex and Ladder Cables | |
3549 | ////////////////////////////////////////////////////// | |
44285dfa | 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"); | |
d7599219 | 3556 | ///////////////////////////////////////////////////////////////// |
3557 | // M55J for Carbon Fiber, CarbonFiber Lower Support and Junction | |
3558 | ////////////////////////////////////////////////////////////////// | |
44285dfa | 3559 | fSSDCarbonFiberMedium = GetMedium("GEN C (M55J)$"); |
d7599219 | 3560 | ///////////////////////////////////////////////////////////////// |
3561 | // G10 for Detector Leg, TubeHolder | |
3562 | ////////////////////////////////////////////////////////////////// | |
44285dfa | 3563 | fSSDTubeHolderMedium = GetMedium("G10FR4$"); |
3564 | fSSDSensorSupportMedium = GetMedium("G10FR4$"); | |
3565 | fSSDMountingBlockMedium = GetMedium("G10FR4$"); | |
3566 | fSSDMountingBlockMedium = GetMedium("G10FR4$"); | |
d7599219 | 3567 | ///////////////////////////////////////////////////////////////// |
3568 | // Water and Phynox for Cooling Tube | |
3569 | ////////////////////////////////////////////////////////////////// | |
44285dfa | 3570 | fSSDCoolingTubeWater = GetMedium("WATER"); |
3571 | fSSDCoolingTubePhynox = GetMedium("INOX$"); | |
d7599219 | 3572 | } |
3573 | ///////////////////////////////////////////////////////////////////// | |
44285dfa | 3574 |