aa9bc63b |
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 | $Log$ |
162acd47 |
18 | Revision 1.1 2003/02/10 17:03:52 nilsen |
19 | New version and structure of ITS V11 geometry. Work still in progress. |
20 | |
aa9bc63b |
21 | $Id$ |
22 | */ |
23 | |
24 | #include <Riostream.h> |
25 | #include <stdio.h> |
26 | #include <stdlib.h> |
27 | #include <TMath.h> |
28 | #include <TGeometry.h> |
29 | #include <TNode.h> |
30 | #include <TTUBE.h> |
31 | #include <TTUBS.h> |
32 | #include <TPCON.h> |
33 | #include <TFile.h> // only required for Tracking function? |
34 | #include <TCanvas.h> |
35 | #include <TObjArray.h> |
36 | #include <TLorentzVector.h> |
37 | #include <TObjString.h> |
38 | #include <TClonesArray.h> |
39 | #include <TBRIK.h> |
40 | #include <TSystem.h> |
41 | #include <TVector3.h> |
162acd47 |
42 | #include <AliRun.h> |
43 | #include <AliITS.h> |
aa9bc63b |
44 | |
45 | #include "AliITSGeometrySSDCone.h" |
46 | |
47 | ClassImp(AliITSGeometrySSDCone) |
48 | |
49 | //______________________________________________________________________ |
162acd47 |
50 | AliITSGeometrySSDCone::AliITSGeometrySSDCone() : AliITSBaseGeometry(){ |
aa9bc63b |
51 | //Default Constructor for SSD Cone geometry |
52 | |
53 | SetScalemm(); |
54 | } |
55 | //______________________________________________________________________ |
162acd47 |
56 | AliITSGeometrySSDCone::AliITSGeometrySSDCone(AliITS *its,TVector3 &tran, |
57 | const char *moth,Int_t mat0): |
58 | AliITSBaseGeometry(its,0){ |
aa9bc63b |
59 | //Standard Constructor for SSD Cone geometry |
60 | // Inputs: |
61 | // Double_t z0 Z-axis shift of this volume |
62 | // Outputs: |
63 | // none. |
64 | // Return: |
65 | // none. |
66 | Double_t t; // some general angle and coordinates [degrees]. |
162acd47 |
67 | Double_t Z,Rmin,Rmax; // additional point not needed in call to pcons. |
aa9bc63b |
68 | |
162acd47 |
69 | fThickness = 13.0; //mm, Thickness of Rohacell+carbon fiber |
70 | fCthick=1.5; //mm, Carbon finber thickness |
71 | fRcurv=15.0; // mm, Radius of curvature. |
72 | fTc=51.0; // angle of SSD cone [degrees]. |
73 | fSintc=Sind(fTc);fCostc=Cosd(fTc);fTantc=Tand(fTc); |
74 | fZ0=0.0;fZouterMilled=13.5-5.0;fZcylinder=170.0;fZposts=196.0; |
75 | fNspoaks=12;fNposts=4;fNmounts=4; |
76 | fRoutMax=0.5*985.0;fRoutHole=0.5*965.0;fRoutMin=0.5*945.0; |
77 | fRholeMax=0.5*890.0;fRholeMin=0.5*740.0; |
78 | fRpostMin=316.0;fdRpost=23.0;fZpostMax=196.0;fPhi0Post=30.0; |
79 | fRinMax=0.5*590.0;fRinCylinder=0.5*597.0;fRinHole=0.5*575.0; |
80 | fRinMin=0.5*562.0;fdZin=15.0; |
81 | // SSD-SDD Thermal/Mechanical cylinder mounts |
82 | fNinScrews=40; |
83 | fPhi0Screws=0.5*360.0/((Double_t)fNinScrews);fRcylinderScrews= 0.5*570.0; |
84 | fDscrewHead=8.0;fDscrewShaft=4.6;fThScrewHeadHole=8.5; |
85 | // SDD mounting bracket, SSD part |
86 | fNssdSupports=3;fPhi0SDDsupports=90.0; |
87 | fRsddSupportPlate = 0.5*585.0;fThSDDsupportPlate=4.0; |
88 | fWsddSupportPlate = 70.0; |
89 | fSSDcf=26; // SSD support cone Carbon Fiber materal number. |
90 | fSSDfs=25; // SSD support cone inserto stesalite 4411w. |
91 | fSSDfo=68; // SSD support cone foam, Rohacell 50A. |
92 | fSSDsw=14; // SSD support cone screw material,Stainless steal |
93 | fNcD=0; // number of screw ends (copy number) |
94 | fNcE=0; // number of pin end (copy number) |
aa9bc63b |
95 | |
96 | SetScalemm(); |
162acd47 |
97 | // Poly-cone Volume A. Top part of SSD cone Carbon Fiber. |
98 | fA.Size(7,"SSD Suport cone Carbon Fiber Surface outer left"); |
99 | // Poly-cone Volume B. Stesalite inside volume A. |
100 | fB.Size(6,"SSD Suport cone Inserto Stesalite left edge"); |
101 | // Poly-cone Volume C. Foam inside volume A. |
102 | fC.Size(4,"SSD Suport cone Rohacell foam left edge"); |
103 | fD.SetName("Screw+stud used to mount things to the SSD support cone"); |
104 | fE.SetName("pin used to mount things to the SSD support cone"); |
105 | // Poly-cone Volume F. Foam in spoak reagion, inside volume A. |
106 | fF.Size(4,"SSD Top Suport cone Rohacell foam Spoak"); |
107 | fG.Size(4,"SSD spoak carbon fiber surfaces"); // Poly-cone Volume G. |
108 | fH.Size(4,"SSD support cone Rohacell foam Spoak"); // Poly-cone Volume H. |
109 | fI.Size(9,"SSD lower/inner right part of SSD cone"); //Poly-cone Volume I. |
110 | fJ.Size(4,"SSD inner most foam core"); // Poly-cone Volume J. |
111 | fK.Size(7,"SSD inner most inserto material"); // Poly-cone Volume K. |
112 | fL.Size(4,"SSD Bottom cone Rohacell foam Spoak"); // Poly-cone Volume L. |
113 | fM.Size(4,"SSD mounting post foam substitute, Inserto");//Poly-cone Vol. M |
114 | fN.Size(4,"SSD mounting post CF subsititute, Inserto");//Poly-cone Vol. N |
115 | fO.Size(3,"SSD mounting post, carbon fiber"); // Poly-cone Volume O. |
116 | fP.Size(3,"SSD mounting post, Inserto"); // Poly-cone Volume P. |
117 | fQ.Size(4,"SSD Thermal sheal stainless steel bolts");//Poly-cone Volume Q. |
118 | fR.SetName("Air in front of bolt (in stasolit)"); |
119 | fS.SetName("Air in front of Stainless Steal Screw end, N6"); |
120 | fT.Size(2,"SSD-SDD mounting bracket Inserto-> Al."); //Poly-cone Volume T. |
121 | fU.Size(4,"SSD-SDD mounting bracket CF->Al."); // Poly-cone Volume U. |
aa9bc63b |
122 | // Lets start with the upper left outer carbon fiber surface. |
123 | // Between za[2],rmaxa[2] and za[4],rmaxa[4] there is a curved section |
162acd47 |
124 | // given by rmaxa = rmaxa[2]-r*Sind(t) for 0<=t<=fTc and |
125 | // za = za[2] + r*Cosd(t) for 0<=t<=fTc. Simularly between za[1],rmina[1 |
aa9bc63b |
126 | // and za[3],rmina[3] there is a curve section given by |
162acd47 |
127 | // rmina = rmina[1]-r*Sind(t) for 0<=t<=fTc and za = za[1]+r&Sind(t) |
128 | // for t<=0<=fTc. These curves have been replaced by straight lines |
aa9bc63b |
129 | // between the equivelent points for simplicity. |
162acd47 |
130 | Double_t dza = fThickness/fSintc-(fRoutMax-fRoutMin)/fTantc; |
aa9bc63b |
131 | if(dza<=0){ // The number or order of the points are in error for a proper |
132 | // call to pcons! |
133 | Error("SSDcone","The definition of the points for a call to PCONS is" |
134 | " in error. abort."); |
135 | return; |
136 | } // end if |
162acd47 |
137 | fA.P0() = 0.0; |
138 | fA.dP() = 360.0; |
139 | fA.Z(0) = fZ0; |
140 | fA.Rn(0) = fRoutMin; |
141 | fA.Rx(0) = fRoutMax; |
142 | fA.Z(1) = fA.ZAt(0)+fZouterMilled - dza; // za[2] - dza. |
143 | fA.Rn(1) = fA.Rmin(0); |
144 | fA.Rx(1) = fA.Rmax(0); |
145 | fA.Z(2) = fA.ZAt(0)+fZouterMilled; //From Drawing ALR-0767 and ALR-0767/3 |
146 | fA.Rx(2) = fA.Rmax(0); |
147 | RadiusOfCurvature(fRcurv,0.0,fA.ZAt(1),fA.Rmin(1),fTc,fA.Z(3),fA.Rn(3)); |
148 | fA.Rn(2) = RminFrom2Points(fA,3,1,fA.ZAt(2)); |
149 | RadiusOfCurvature(fRcurv,0.0,fA.ZAt(2),fA.Rmax(2),fTc,fA.Z(4),fA.Rx(4)); |
150 | fA.Rn(4) = RminFromZSSDcone(fA.ZAt(4)); |
151 | fA.Rx(3) = RmaxFrom2Points(fA,4,2,fA.ZAt(3)); |
152 | fA.Rn(5) = fRholeMax; |
153 | fA.Z(5) = Zfrom2MinPoints(fA,4,3,fA.Rmin(5)); |
154 | fA.Rx(5) = RmaxFromZSSDcone(fA.ZAt(5)); |
155 | fA.Rn(6) = fRholeMax; |
156 | fA.Rx(6) = fA.Rmin(6); |
157 | fA.Z(6) = ZFromRmaxSSDcone(fA.Rmax(6)); |
aa9bc63b |
158 | // |
159 | // Now lets define the Inserto Stesalite 4411w material volume. |
162acd47 |
160 | fB.P0() = 0.0; |
161 | fB.dP() = 360.0; |
162 | fB.Z(0) = fA.ZAt(0); |
163 | fB.Rn(0) = fA.Rmin(0)+fCthick; |
164 | fB.Rx(0) = fA.Rmax(0)-fCthick; |
165 | fB.Z(1) = fA.ZAt(1); |
166 | fB.Rn(1) = fB.Rmin(0); |
167 | fB.Rx(1) = fB.Rmax(0); |
168 | fB.Z(2) = fA.ZAt(2); |
169 | fB.Rx(2) = fB.Rmax(1); |
170 | RadiusOfCurvature(fRcurv-fCthick,0.,fB.ZAt(2),fB.Rmax(2), |
171 | fTc,fB.Z(3),fB.Rx(3)); |
172 | RadiusOfCurvature(fRcurv+fCthick,0.,fB.ZAt(1),fB.Rmin(1), |
173 | fTc,fB.Z(4),fB.Rn(4)); |
174 | fB.Rn(2) = RminFrom2Points(fB,4,1,fB.ZAt(2)); |
175 | fB.Rn(3) = RminFrom2Points(fB,4,1,fB.ZAt(3)); |
176 | fB.Z(5) = fB.ZAt(4)+(fThickness-2.0*fCthick)/fSintc; |
177 | fB.Rn(5) = RmaxFromZSSDcone(fB.ZAt(5),-fCthick); |
178 | fB.Rx(5) = fB.Rmin(5); |
179 | fB.Rx(4) = RmaxFrom2Points(fB,5,3,fB.ZAt(4)); |
aa9bc63b |
180 | // |
181 | // Now lets define the Rohacell foam material volume. |
162acd47 |
182 | fC.P0() = 0.0; |
183 | fC.dP() = 360.0; |
184 | fC.Z(0) = fB.ZAt(4); |
185 | fC.Rn(0) = fB.Rmin(4); |
186 | fC.Rx(0) = fC.Rmin(0); |
187 | fC.Z(1) = fB.ZAt(5); |
188 | fC.Rx(1) = fB.Rmin(5); |
189 | fC.Rn(2) = fA.Rmin(5)+fCthick;//leave space for carbon fiber covering hole |
190 | fC.Z(2) = ZFromRminSSDcone(fC.Rn(2),+fCthick); |
191 | fC.Rn(1) = RminFrom2Points(fC,2,0,fC.ZAt(1)); |
192 | fC.Rx(3) = fA.Rmin(6)+fCthick; |
193 | fC.Rn(3) = fC.Rmax(3); |
194 | fC.Z(3) = ZFromRmaxSSDcone(fC.Rx(3),-fCthick); |
195 | fC.Rx(2) = RmaxFrom2Points(fC,3,1,fC.ZAt(2)); |
aa9bc63b |
196 | // |
197 | // In volume SCB, th Inserto Stesalite 4411w material volume, there |
198 | // are a number of Stainless steel screw and pin studs which will be |
199 | // filled with screws/studs. |
162acd47 |
200 | fD.Rn()=0.0,fD.Rx()=6.0,fD.Z()=0.5*10.0; // mm |
201 | fE.Rn()=0.0;fE.Rx()=6.0;fE.Z()=0.5*12.0; // mm |
aa9bc63b |
202 | // |
203 | // There is no carbon fiber between this upper left section and the |
204 | // SSD spoaks. We remove it by replacing it with Rohacell foam. |
162acd47 |
205 | t = fCthick/(0.5*(fRholeMax+fRholeMin));// It is not posible to get the |
aa9bc63b |
206 | // carbon fiber thickness uniform in this phi direction. We can only |
207 | // make it a fixed angular thickness. |
208 | t *= 180.0/TMath::Pi(); |
162acd47 |
209 | fF.P0() = 12.5+t; // degrees see drawing ALR-0767. |
210 | fF.dP() = 5.0 - 2.0*t; // degrees |
211 | fF.Z(0) = fC.ZAt(2); |
212 | fF.Rn(0) = fC.Rmin(3); |
213 | fF.Rx(0) = fF.Rmin(0); |
214 | fF.Rn(1) = fA.Rmin(5); |
215 | fF.Rx(1) = fF.Rmin(0); |
216 | fF.Z(1) = RminFromZSSDcone(fF.ZAt(1),+fCthick); |
217 | fF.Z(2) = fC.ZAt(3); |
218 | fF.Rn(2) = fF.Rmin(1); |
219 | fF.Rx(2) = fF.Rmax(1); |
220 | fF.Rn(3) = fA.Rmin(6); |
221 | fF.Rx(3) = fF.Rmin(3); |
222 | fF.Z(3) = ZFromRmaxSSDcone(fF.Rmax(3),-fCthick); |
aa9bc63b |
223 | //================================================================= |
224 | // Now for the spoak part of the SSD cone. |
225 | // It is not posible to inclue the radius of curvature between |
226 | // the spoak part and the upper left part of the SSD cone or lowwer right |
227 | // part. This would be discribed by the following curves. |
162acd47 |
228 | // R = Rmax - (5mm)*Sin(t) phi = phi0+(5mm*180/(Pi*fRoutHole))*Sin(t) |
aa9bc63b |
229 | // where 0<=t<=90 For the inner curve a simular equiation holds. |
162acd47 |
230 | fG.P0() = 12.5; // degrees see drawing ALR-0767. |
231 | fG.dP() = 5.0; // degrees |
232 | fG.Z(0) = fA.ZAt(5); |
233 | fG.Rn(0) = fA.Rmin(5); |
234 | fG.Rx(0) = fG.Rn(0); |
235 | fG.Z(1) = fA.ZAt(6); |
236 | fG.Rn(1) = RminFromZSSDcone(fG.ZAt(1)); |
237 | fG.Rx(1) = fG.Rmax(0); |
238 | fG.Rn(2) = fRholeMin; |
239 | fG.Z(2) = ZFromRminSSDcone(fG.Rmin(2)); |
240 | fG.Rx(2) = RmaxFromZSSDcone(fG.ZAt(2)); |
241 | fG.Rn(3) = fG.Rmin(2); |
242 | fG.Rx(3) = fG.Rmin(3); |
243 | fG.Z(3) = ZFromRmaxSSDcone(fG.Rmax(3)); |
aa9bc63b |
244 | // For the foam core. |
162acd47 |
245 | t = fCthick/(0.5*(fRholeMax+fRholeMin));// It is not posible to get the |
aa9bc63b |
246 | // carbon fiber thickness uniform in this phi direction. We can only |
247 | // make it a fixed angular thickness. |
248 | t *= 180.0/TMath::Pi(); |
162acd47 |
249 | fH.P0() = 5.0 - 2.0*t; // degrees |
250 | fH.dP() = 12.5+t; // degrees see drawing ALR-0767. |
251 | fH.Z(0) = fF.ZAt(1); |
252 | fH.Rn(0) = fG.Rmin(0); |
253 | fH.Rx(0) = fH.Rmin(0); |
254 | fH.Z(1) = fF.ZAt(3); |
255 | fH.Rn(1) = RminFromZSSDcone(fH.Z(1),-fCthick); |
256 | fH.Rx(1) = fH.Rmax(0); |
257 | fH.Z(2) = ZFromRminSSDcone(fG.Rmin(2),+fCthick); |
258 | fH.Rn(2) = fG.Rmin(2); |
259 | fH.Rx(2) = RmaxFromZSSDcone(fH.Z(2),-fCthick); |
260 | fH.Z(3) = ZFromRmaxSSDcone(fG.Rmin(3),-fCthick); |
261 | fH.Rn(3) = fG.Rmin(3); |
262 | fH.Rx(3) = fH.Rn(3); |
aa9bc63b |
263 | // |
264 | //================================================================== |
265 | // Now for the Inner most part of the SSD cone. |
162acd47 |
266 | fI.P0() = 0.0; |
267 | fI.dP() = 360.0; |
268 | fI.Z(0) = fG.ZAt(2); |
269 | fI.Rn(0) = fG.Rmin(2); |
270 | fI.Rx(0) = fI.Rmin(0); |
271 | fI.Z(1) = fG.ZAt(3); |
272 | fI.Rn(1) = RminFromZSSDcone(fI.ZAt(1)); |
273 | fI.Rx(1) = fI.Rmax(0); |
274 | fI.Rn(4) = fRinMin; |
275 | fI.Rn(5) = fRinMin; |
276 | RadiusOfCurvature(fRcurv,90.0,0.0,fRinMin,90.0-fTc,Z,fI.Rx(5)); // z dummy |
277 | fI.Z(5) = ZFromRmaxSSDcone(fI.Rx(5)); |
278 | fI.Z(6) = fZcylinder; |
279 | fI.Rn(6) = fRinMin; |
280 | fI.Z(7) = fI.Z(6); |
281 | fI.Rn(7) = fRinCylinder; |
282 | fI.Rn(8) = fRinCylinder; |
283 | fI.Rx(8) = fI.Rmin(8); |
284 | Rmin = fI.Rmin(5); |
285 | RadiusOfCurvature(fRcurv,90.0-fTc,fI.Z(5),fI.Rmax(5),90.0,Z,Rmax); |
286 | Rmax = fRinMax; |
287 | fI.Z(8) = Z+(fI.ZAt(5)-Z)*(fI.Rmax(8)-Rmax)/(fI.Rmax(7)-Rmax); |
288 | fI.Rx(6) = RmaxFrom2Points(fI,8,5,fI.ZAt(6)); |
289 | fI.Rx(7) = fI.Rmax(6); |
290 | fI.Z(3) = Z-fdZin; |
291 | fI.Z(4) = fI.ZAt(3); |
292 | fI.Rx(3) = RmaxFromZSSDcone(fI.ZAt(3)); |
293 | fI.Rx(4) = fI.Rx(3); |
294 | //rmin dummy |
295 | RadiusOfCurvature(fRcurv,90.,fI.ZAt(3),0.,90.-fTc,fI.Z(2),Rmin); |
296 | fI.Rn(2) = RminFromZSSDcone(fI.ZAt(2)); |
297 | fI.Rx(2) = RmaxFromZSSDcone(fI.ZAt(2)); |
298 | // z dummy |
299 | RadiusOfCurvature(fRcurv,90.-fTc,0.0,fI.Rmin(2),90.0,Z,fI.Rn(3)); |
aa9bc63b |
300 | // Now for Inserto volume at the inner most radius. |
162acd47 |
301 | fK.P0() = 0.0; |
302 | fK.dP() = 360.0; |
303 | fK.Z(1) = fI.ZAt(3)+fCthick; |
304 | fK.Rn(1) = fI.Rmin(3); |
305 | fK.Z(2) = fK.ZAt(1); |
306 | fK.Rn(2) = fI.Rmin(4); |
307 | fK.Rn(3) = fK.Rmin(2); |
308 | fK.Rn(4) = fK.Rmin(2); |
309 | fK.Rn(5) = fK.Rmin(2); |
310 | fK.Rx(5) = fI.Rmin(8); |
311 | fK.Z(6) = fI.ZAt(6); |
312 | fK.Rn(6) = fI.Rmin(6); |
313 | fK.Rx(6) = fI.Rmin(7); |
314 | RadiusOfCurvature(fRcurv+fCthick,90.0,fK.ZAt(1),fK.Rmin(1), |
315 | 90.0-fTc,fK.Z(0),fK.Rn(0)); |
316 | fK.Rx(0) = fK.Rmin(0); |
317 | fK.Z(3) = fK.ZAt(0)+(fThickness+2.0*fCthick)*fCostc;; |
318 | fK.Rx(3) = fK.Rmax(0)+(fThickness+2.0*fCthick)*fSintc; |
319 | fK.Rx(1) = RmaxFrom2Points(fK,3,0,fK.ZAt(1)); |
320 | fK.Rx(2) = fK.Rmax(1); |
321 | fK.Rx(4) = fI.Rmax(5)-fCthick*fSintc; |
322 | fK.Z(4) = ZFromRmaxSSDcone(fK.Rmax(4),-fCthick); |
323 | fK.Z(5) = fI.ZAt(5)-fRcurv*fCostc-fCthick; |
aa9bc63b |
324 | // Now for foam core at the inner most radius. |
162acd47 |
325 | fJ.P0() = 0.0; |
326 | fJ.dP() = 360.0; |
327 | fJ.Rn(0) = fI.Rmin(0)-fCthick; |
328 | fJ.Z(0) = ZFromRminSSDcone(fJ.Rmin(0),+fCthick); |
329 | fJ.Rx(0) = fJ.Rmin(0); |
330 | fJ.Rx(1) = fJ.Rmax(0); |
331 | fJ.Z(1) = ZFromRmaxSSDcone(fJ.Rmax(1),-fCthick); |
332 | fJ.Rn(1) = RminFromZSSDcone(fJ.ZAt(1),-fCthick); |
333 | fJ.Z(2) = fK.ZAt(0); |
334 | fJ.Rn(2) = fK.Rmin(0); |
335 | fJ.Rx(2) = RmaxFromZSSDcone(fJ.ZAt(2),-fCthick); |
336 | fJ.Z(3) = fK.ZAt(3); |
337 | fJ.Rn(3) = fK.Rmax(3); |
338 | fJ.Rx(3) = fJ.Rmin(3); |
aa9bc63b |
339 | // Now for foam core at the top of the inner most radius where |
340 | // the spoaks are. |
162acd47 |
341 | t = fCthick/(0.5*(fRholeMax+fRholeMin));// It is not posible to get the |
aa9bc63b |
342 | // carbon fiber thickness uniform in this phi direction. We can only |
343 | // make it a fixed angular thickness. |
344 | t *= 180.0/TMath::Pi(); |
162acd47 |
345 | fL.P0() = 5.0 - 2.0*t; // degrees |
346 | fL.dP() = 12.5+t; // degrees see drawing ALR-0767. |
347 | fL.Z(0) = fH.ZAt(2); |
348 | fL.Rn(0) = fI.Rmin(0); |
349 | fL.Rx(0) = fL.Rmin(0); |
350 | fL.Z(1) = fJ.ZAt(0); |
351 | fL.Rn(1) = fJ.Rmin(1); |
352 | fL.Rx(1) = fI.Rmax(1); |
353 | fL.Z(2) = fH.ZAt(3); |
354 | fL.Rn(2) = fL.Rmin(1); |
355 | fL.Rx(2) = fL.Rmax(1); |
356 | fL.Z(3) = fJ.ZAt(1); |
357 | fL.Rn(3) = fL.Rmin(2); |
358 | fL.Rx(3) = fL.Rmin(3); |
aa9bc63b |
359 | // Now for the SSD mounting posts |
162acd47 |
360 | fO.P0() = 180.0*fdRpost/(fRpostMin+0.5*fdRpost)/TMath::Pi(); // degrees |
361 | fO.dP() = fPhi0Post; // |
362 | fO.Rn(0) = fRpostMin+fdRpost; |
363 | fO.Rx(0) = fO.Rmin(0); |
364 | fO.Z(0) = ZFromRmaxSSDcone(fO.Rmax(0)); |
365 | fO.Rn(1) = fRpostMin; |
366 | fO.Z(1) = ZFromRmaxSSDcone(fO.Rmin(1)); |
367 | fO.Rx(1) = fO.Rmax(0); |
368 | fO.Z(2) = fZ0+fZpostMax; |
369 | fO.Rn(2) = fRpostMin; |
370 | fO.Rx(2) = fO.Rmin(2)+fdRpost; |
aa9bc63b |
371 | // Now for the SSD mounting posts |
162acd47 |
372 | t = 180.0*fCthick/(fRpostMin+0.5*fdRpost)/TMath::Pi(); |
373 | fP.dP() = fO.DPhi()-2.0*t; // degrees |
374 | fP.P0() = fO.Phi0()+t; // |
375 | fP.Rn(0) = fO.Rmin(0)-fCthick; |
376 | fP.Rx(0) = fP.Rmin(0); |
377 | fP.Z(0) = ZFromRmaxSSDcone(fP.Rmax(0)); |
378 | fP.Rn(1) = fO.Rmin(0)+fCthick; |
379 | fP.Rx(1) = fO.Rmin(0)-fCthick; |
380 | fP.Z(1) = ZFromRminSSDcone(fP.Rmin(1)); |
381 | fP.Rn(2) = fP.Rmin(1); |
382 | fP.Rx(2) = fP.Rmax(1); |
383 | fP.Z(2) = fZ0+fZpostMax; |
aa9bc63b |
384 | // This insrto continues into the SSD cone displacing the foam |
385 | // and the carbon fiber surface at those points where the posts are. |
162acd47 |
386 | fM.P0() = fP.Phi0(); |
387 | fM.dP() = fP.DPhi(); |
388 | fM.Rn(0) = fRpostMin+fdRpost-fCthick; |
389 | fM.Rx(0) = fM.Rmin(0); |
390 | fM.Z(0) = ZFromRminSSDcone(fM.Rmin(0),+fCthick); |
391 | fM.Rx(1) = fM.Rmax(0); |
392 | fM.Z(1) = ZFromRmaxSSDcone(fM.Rmax(1),-fCthick); |
393 | fM.Rn(1) = RminFromZSSDcone(fM.ZAt(1),+fCthick); |
394 | fM.Rn(2) = fRpostMin+fCthick; |
395 | fM.Z(2) = ZFromRminSSDcone(fM.Rmin(2),+fCthick); |
396 | fM.Rx(2) = RmaxFromZSSDcone(fM.ZAt(2),-fCthick); |
397 | fM.Rn(3) = fM.Rmin(2); |
398 | fM.Rx(3) = fM.Rmin(3); |
399 | fM.Z(3) = ZFromRmaxSSDcone(fM.Rmax(3),-fCthick); |
400 | // |
401 | fN.P0() = fP.Phi0(); |
402 | fN.dP() = fP.DPhi(); |
403 | fN.Z(0) = fM.ZAt(1); |
404 | fN.Rn(0) = fM.Rmax(1); |
405 | fN.Rx(0) = fN.Rmin(0); |
406 | fN.Rx(1) = fN.Rmax(0); |
407 | fN.Z(1) = ZFromRmaxSSDcone(fN.Rmax(1)); |
408 | fN.Rn(1) = RminFromZSSDcone(fN.ZAt(1),-fCthick); |
409 | fN.Z(2) = fM.ZAt(3); |
410 | fN.Rn(2) = fM.Rmin(3); |
411 | fN.Rx(2) = RmaxFromZSSDcone(fN.ZAt(2)); |
412 | fN.Rn(3) = fN.Rmin(2); |
413 | fN.Rx(3) = fN.Rmin(3); |
414 | fN.Z(3) = ZFromRmaxSSDcone(fN.Rmax(3)); |
415 | // Bolt heads holding the SSD-SDD tube to the SSD cone. |
416 | // Bolt -- PolyCone |
417 | fQ.P0() = 0.0; |
418 | fQ.dP() = 360.0; |
419 | fQ.Z(0) = fI.ZAt(4)-fThSDDsupportPlate; |
420 | fQ.Rn(0) = 0.0; |
421 | fQ.Rx(0) = 0.5*fDscrewHead; |
422 | fQ.Z(1) = fI.ZAt(4)-fThScrewHeadHole; |
423 | fQ.Rn(1) = 0.0; |
424 | fQ.Rx(1) = 0.5*fDscrewHead; |
425 | fQ.Z(2) = fQ.ZAt(1); |
426 | fQ.Rn(2) = 0.0; |
427 | fQ.Rx(2) = 0.5*fDscrewShaft; |
428 | fQ.Z(3) = fQ.ZAt(2); |
429 | fQ.Rn(3) = 0.0; |
430 | fQ.Rx(3) = fQ.Rmax(2); |
431 | // air infront of bolt (stasolit Volume K) -- Tube |
432 | fR.Z() = 0.5*(fThickness-fThScrewHeadHole); |
433 | fR.Rn() = 0.0; |
434 | fR.Rx() = 0.5*fDscrewHead; |
435 | // air infront of bolt (carbon fiber volume I) -- Tube |
436 | fS.Z() = 0.5*fThickness; |
437 | fS.Rn() = 0.0; |
438 | fS.Rx() = fR.Rmax(); |
439 | // SDD support plate, SSD side. |
440 | fT.dP() = 180.0*fWsddSupportPlate/(fRsddSupportPlate*TMath::Pi()); |
441 | fT.P0() = fPhi0SDDsupports=90.0; |
442 | fT.Z(0) = fK.ZAt(2); |
443 | fT.Rn(0) = fI.Rmin(4); |
444 | fT.Rx(0) = fRsddSupportPlate; |
445 | fT.Z(1) = fI.ZAt(4) - fThSDDsupportPlate; |
446 | fT.Rn(1) = fT.Rmin(0); |
447 | fT.Rx(1) = fT.Rmax(0); |
448 | // |
449 | fU.dP() = fT.DPhi(); |
450 | fU.P0() = fT.Phi0(); |
451 | fU.Z(2) = fI.ZAt(4); |
452 | fU.Rn(2) = fT.Rmin(0); |
453 | fU.Rx(2) = fT.Rmax(0); |
454 | fU.Z(3) = fT.ZAt(0); |
455 | fU.Rn(3) = fU.Rmin(2); |
456 | fU.Rx(3) = fU.Rmax(2); |
457 | fU.Z(1) = fU.ZAt(2); |
458 | fU.Rn(1) = fI.Rmin(3); |
459 | fU.Rx(1) = fU.Rmax(3); |
460 | fU.Rx(0) = fT.Rmax(0); |
461 | fU.Rn(0) = fU.Rmax(0); |
462 | fU.Z(0) = Zfrom2MinPoints(fI,2,3,fU.Rmax(0)); |
463 | // Debuging |
464 | Print(&cout); |
aa9bc63b |
465 | } |
466 | //______________________________________________________________________ |
162acd47 |
467 | void AliITSGeometrySSDCone::CreateG3Geometry(const char *moth, |
aa9bc63b |
468 | TVector3 &trans){ |
469 | // Calls Geant 3 geometry inilization routines with the information |
470 | // stored in this class. |
471 | // Inputs: |
472 | // none. |
473 | // Outputs: |
474 | // none. |
475 | // Return: |
476 | // none. |
477 | |
162acd47 |
478 | PolyCone(fA,fSSDcf); |
479 | PolyCone(fB,fSSDfs); |
480 | PolyCone(fC,fSSDfo); |
481 | Tube(fD,fSSDsw); |
482 | Tube(fE,fSSDsw); |
483 | PolyCone(fF,fSSDfo); |
484 | PolyCone(fG,fSSDcf); |
485 | PolyCone(fH,fSSDfo); |
486 | PolyCone(fI,fSSDcf); |
487 | PolyCone(fJ,fSSDfo); |
488 | PolyCone(fK,fSSDfs); |
489 | PolyCone(fL,fSSDfo); |
490 | PolyCone(fM,fSSDfo); |
491 | PolyCone(fN,fSSDfo); |
492 | PolyCone(fO,fSSDcf); |
493 | PolyCone(fP,fSSDfs); |
494 | PolyCone(fQ,fSSDfo); |
495 | Tube(fR,fSSDsw); |
496 | Tube(fS,fSSDsw); |
497 | PolyCone(fT,fSSDfo); |
498 | PolyCone(fU,fSSDfo); |
499 | return; |
500 | } |
501 | //______________________________________________________________________ |
502 | void AliITSGeometrySSDCone::PositionG3Geometry(AliITSBaseVolParams &moth, |
503 | Int_t cn,TVector3 &trans, |
504 | Int_t irot){ |
505 | // Positions ths whole object at t with rotatin irot coply number cn |
506 | // into volume moth. |
507 | // Inputs: |
508 | // const AliITSBaseVolParams *moth Mother volume where this object |
509 | // is to be placed. |
510 | // Int_t cn Copy number. |
511 | // TVector3 &t Translation vector for this whole volume |
512 | // Int_t irot rotation matrix number to be applyed to this |
513 | // volume. |
514 | // Output: |
515 | // none. |
516 | // Return: |
517 | // none. |
518 | Int_t i,j,k,l,irotSpoaks,irotPost; |
519 | Double_t t; |
520 | Bool_t init=kFALSE; |
521 | TVector3 zero(0.0,0.0,0.0),v(0.0,0.0,0.0); |
522 | |
523 | if(cn<=0) return; |
524 | if(cn==1) init=kTRUE; |
525 | Pos(fA,cn,moth,trans,0); |
526 | Pos(fI,cn,moth,trans,0); |
527 | Pos(fG,fNspoaks*(cn-1)+1,fA,trans,0); |
528 | irotSpoaks = irot; |
529 | j = 0; |
530 | for(i=fNspoaks*(cn-1)+2;i<fNspoaks*cn+1;i++){ |
531 | ZMatrix(++irot,((Double_t)j)*360./((Double_t)fNspoaks)); |
532 | Pos(fG,i,fA,trans,irot); |
533 | j++; |
534 | } // end for i |
535 | Pos(fO,fNposts*(cn-1)+1,moth,trans,0); |
536 | irotPost = irot; |
537 | j = 0; |
538 | for(i=fNposts*(cn-1)+2;i<fNposts*cn+1;i++){ |
539 | ZMatrix(++irot,((Double_t)j)*360./((Double_t)fNposts)); |
540 | Pos(fO,i,moth,trans,irot); |
541 | j++; |
542 | } // end for |
543 | if(!init) return; |
544 | // Inside volume A. |
545 | Pos(fB,1,fA,zero,0); |
546 | Pos(fC,1,fA,zero,0); |
547 | // Inside Volume B |
aa9bc63b |
548 | k=l=0; |
549 | for(i=0;i<2;i++){ // position for ITS-TPC mounting brackets |
550 | for(j=0;j<2;j++){ // 2 screws per bracket |
162acd47 |
551 | fNcD++; |
aa9bc63b |
552 | t = -5.0+10.0*((Double_t)j)+180.*((Double_t)i); |
162acd47 |
553 | v.SetX(fRoutHole*Sind(t)); |
554 | v.SetY(fRoutHole*Cosd(t)); |
555 | v.SetZ(fD.DzAt()); |
556 | Pos(fD,fNcD,fB,v,0); |
aa9bc63b |
557 | } // end for j |
558 | for(j=0;j<3;j++){ // 3 pins per bracket |
162acd47 |
559 | fNcE++; |
aa9bc63b |
560 | t = -3.0+3.0*((Double_t)j)+180.*((Double_t)i); |
162acd47 |
561 | v.SetX(fRoutHole*Sind(t)); |
562 | v.SetY(fRoutHole*Cosd(t)); |
563 | v.SetZ(fE.DzAt()); |
564 | Pos(fE,fNcE,fB,v,0); |
aa9bc63b |
565 | } // end for j |
566 | } // end for i |
567 | for(i=0;i<2;i++){ // position for ITS-rail mounting brackets |
568 | for(j=0;j<4;j++){ // 4 screws per bracket |
162acd47 |
569 | Double_t a[4]={0.0,2.0,5.0,7.0}; // Relative angles. |
570 | fNcD++; |
aa9bc63b |
571 | t = 90.0-a[j]+187.*((Double_t)i); |
162acd47 |
572 | v.SetX(fRoutHole*Sind(t)); |
573 | v.SetY(fRoutHole*Cosd(t)); |
574 | v.SetZ(fD.DzAt()); |
575 | Pos(fD,fNcD,fB,v,0); |
aa9bc63b |
576 | } // end for j |
577 | for(j=0;j<2;j++){ // 2 pins per bracket |
162acd47 |
578 | fNcE++; |
aa9bc63b |
579 | t = 88+7.0*((Double_t)j)+184.*((Double_t)i); |
162acd47 |
580 | v.SetX(fRoutHole*Sind(t)); |
581 | v.SetY(fRoutHole*Cosd(t)); |
582 | v.SetZ(fE.DzAt()); |
583 | Pos(fE,fNcE,fB,v,0); |
aa9bc63b |
584 | } // end for j |
585 | } // end for i |
162acd47 |
586 | for(i=0;i<fNmounts;i++){ // mounting holes/screws for beam |
587 | // pipe support and SPD cone support (dump side,non-dump |
588 | // side has them to). |
aa9bc63b |
589 | for(j=0;j<2;j++){ // 2 screws per bracket |
162acd47 |
590 | fNcD++; |
591 | t = 180.*20./(fRoutHole*TMath::Pi()); |
592 | t = 45.0+((Double_t)(j-1))*t+90.*((Double_t)i); |
593 | v.SetX(fRoutHole*Sind(t)); |
594 | v.SetY(fRoutHole*Cosd(t)); |
595 | v.SetZ(fD.DzAt()); |
596 | Pos(fD,fNcD,fB,v,0); |
aa9bc63b |
597 | } // end for j |
598 | for(j=0;j<1;j++){ // 1 pins per bracket |
162acd47 |
599 | fNcE++; |
aa9bc63b |
600 | t = 45.0+90.*((Double_t)i); |
162acd47 |
601 | v.SetX(fRoutHole*Sind(t)); |
602 | v.SetY(fRoutHole*Cosd(t)); |
603 | v.SetZ(fE.DzAt()); |
604 | Pos(fE,fNcE,fB,v,0); |
aa9bc63b |
605 | } // end for j |
606 | } // end for i |
162acd47 |
607 | Pos(fF,1,fA,zero,0); |
608 | Pos(fL,1,fI,zero,0); |
609 | for(i=1;i<fNspoaks;i++){ |
610 | Pos(fF,i+1,fA,zero,irotSpoaks+i); |
611 | Pos(fL,i+1,fA,zero,irotSpoaks+i); |
aa9bc63b |
612 | } // end for i |
162acd47 |
613 | Pos(fH,1,fG,zero,0); |
614 | Pos(fK,1,fI,zero,0); |
615 | Pos(fJ,1,fI,zero,0); |
616 | Pos(fP,1,fO,zero,0); |
617 | Pos(fM,1,fJ,zero,0); |
618 | Pos(fN,1,fI,zero,0); |
619 | for(i=1;i<fNposts;i++){ |
620 | Pos(fN,i+1,fJ,zero,irotPost+i); |
621 | Pos(fM,i+1,fI,zero,irotPost+i); |
aa9bc63b |
622 | } // end for i |
623 | return; |
624 | } |
625 | //______________________________________________________________________ |
162acd47 |
626 | void AliITSGeometrySSDCone::CreateG3Materials(){ |
aa9bc63b |
627 | // Fills the Geant 3 banks with Material and Medium definisions. |
628 | // Inputs: |
629 | // none. |
630 | // Outputs: |
631 | // none. |
632 | // Returns: |
633 | // none. |
162acd47 |
634 | Int_t i; |
635 | Int_t Z[5],N[5]; |
636 | Double_t W[5],dens; |
aa9bc63b |
637 | |
162acd47 |
638 | // epoxy |
639 | dens = 10.*GetA(1)+13.*GetA(6)+3.*GetA(8); |
640 | Z[0] = 1; W[0] = 10.*GetA(Z[0])/dens; // Hydrogen Content |
641 | Z[1] = 6; W[1] = 13.*GetA(Z[1])/dens; // Carbon Content |
642 | Z[2] = 8; W[2] = 3.*GetA(Z[2])/dens; // Oxegen |
643 | // Carbon fiber is about 64% carbon fiber and 36% epoxy by volume. |
644 | // Now need to add in the carbon fiber |
645 | W[0] *= 0.36*GetA(Z[0]); |
646 | W[1] = 0.36*W[1]*dens*GetA(Z[1]) + 0.64*GetA(Z[1]); |
647 | W[2] *= 0.36*GetA(Z[2]); |
648 | // Renormilize the weights |
649 | dens = 0.0; |
650 | for(i=0;i<3;i++){dens += W[i];} |
651 | for(i=0;i<3;i++){W[i] /= dens;} |
652 | dens = 1.7; // grams/cm^3 taken as density of G10 PDG book. |
653 | MixtureByWeight(fSSDcf,"Carbon Fiber for SSD support cone",Z,W,dens,3,0); |
654 | // epoxy |
655 | dens = 10.*GetA(1)+13.*GetA(6)+3.*GetA(8); |
656 | Z[0] = 1; W[0] = 10.*GetA(Z[0])/dens; // Hydrogen Content |
657 | Z[1] = 6; W[1] = 13.*GetA(Z[1])/dens; // Carbon Content |
658 | Z[2] = 8; W[2] = 3.*GetA(Z[2])/dens; // Oxegen |
659 | Z[3] = 14;W[3] = 0.0; // no Silicon in epoxy. |
660 | // glass fiber is about 64% carbon fiber and 36% epoxy by volume. |
661 | // Now need to add in the glass fiber |
662 | W[0] *= 0.36*GetA(Z[0]); |
663 | W[1] *= 0.36*GetA(Z[1]); |
664 | W[2] = 0.36*W[2]*dens*GetA(Z[2]) + 0.64*2.0*GetA(Z[2]); |
665 | W[3] = 0.64*GetA(Z[3]); // Si |
666 | // Renormilize the weights |
667 | dens = 0.0; |
668 | for(i=0;i<4;i++){dens += W[i];} |
669 | for(i=0;i<4;i++){W[i] /= dens;} |
670 | dens = 1.7; // grams/cm^3 taken as density of G10 PDG book. |
671 | MixtureByWeight(fSSDfs,"Inserto stealite 4411w for SSD support cone", |
672 | Z,W,dens,4,0); |
673 | // Rohacell 51 C14 H10 N2 O6 from Flavio Tosello |
674 | // http://cesweb.grantadesign.com/demo/index.do |
675 | Z[0] = 1; N[0] = 10; // Hydrogen Content |
676 | Z[1] = 6; N[1] = 14; // Carbon Content |
677 | Z[2] = 7; N[2] = 2; // Nitrogen Content |
678 | Z[3] = 8; N[3] = 6; // Oxigen Content |
679 | dens = 0.0513; // grams/cm^3 From Flavio Tosello |
680 | // http://www.emkayplatics.co.uk/roh51.html |
681 | MixtureByNumber(fSSDfo,"Foam core (Rohacell 51) for SSD support cone", |
682 | Z,N,dens,4,0); |
683 | // Stainless steel. Temperary values. |
684 | Z[0] = 6; W[0] = 0.5; // Carbon Content |
685 | Z[1] = 25; W[1] = 0.5; // Iron Content |
686 | dens = 7.87; // Grams/cm^3 density of iron used. |
687 | MixtureByWeight(fSSDsw,"Stainless steal screw, pin, and stud material", |
688 | Z,W,dens,2,0); |
aa9bc63b |
689 | } |
690 | //______________________________________________________________________ |
691 | void AliITSGeometrySSDCone::BuildDisplayGeometry(){ |
692 | // Fill Root geometry banks for fast simple ITS simulation event |
693 | // display. See Display.C, and related code, for more details. |
694 | // Inputs: |
695 | // none. |
696 | // Outputs: |
697 | // none. |
698 | // Return: |
699 | // none. |
700 | |
701 | // No need to display ITS cones. |
702 | } |
162acd47 |
703 | //______________________________________________________________________ |
704 | void AliITSGeometrySSDCone::Print(ostream *os){ |
705 | // Prints out the data kept in this class |
706 | // Inputs: |
707 | // ostream *os pointer to the output stream |
708 | // Outputs: |
709 | // none. |
710 | // Return: |
711 | // none. |
712 | |
713 | *os << "Object AliITSGeometrySSDCone" << endl; |
714 | *os << " Object fA" << endl << fA << endl; |
715 | *os << " Object fB" << endl << fB << endl; |
716 | *os << " Object fC" << endl << fC << endl; |
717 | *os << " Object fD" << endl << fD << endl; |
718 | *os << " Object fE" << endl << fE << endl; |
719 | *os << " Object fF" << endl << fF << endl; |
720 | *os << " Object fG" << endl << fG << endl; |
721 | *os << " Object fH" << endl << fH << endl; |
722 | *os << " Object fI" << endl << fI << endl; |
723 | *os << " Object fJ" << endl << fJ << endl; |
724 | *os << " Object fK" << endl << fK << endl; |
725 | *os << " Object fL" << endl << fL << endl; |
726 | *os << " Object fM" << endl << fM << endl; |
727 | *os << " Object fN" << endl << fN << endl; |
728 | *os << " Object fO" << endl << fO << endl; |
729 | *os << " Object fP" << endl << fP << endl; |
730 | *os << " Object fQ" << endl << fQ << endl; |
731 | *os << " Object fR" << endl << fR << endl; |
732 | *os << " Object fS" << endl << fS << endl; |
733 | *os << " Object fT" << endl << fT << endl; |
734 | *os << " Object fU" << endl << fU << endl; |
735 | return; |
736 | } |
737 | //______________________________________________________________________ |
738 | void AliITSGeometrySSDCone::Read(istream *is){ |
739 | // Read in data written with Print above. |
740 | // Inputs: |
741 | // istream *is Input stream pointer |
742 | // Output: |
743 | // none. |
744 | // Return: |
745 | // none. |
746 | char s[50]; |
747 | |
748 | is->getline(s,49); |
749 | is->getline(s,49); |
750 | *is >> fA; |
751 | is->getline(s,49); |
752 | *is >> fB; |
753 | is->getline(s,49); |
754 | *is >> fC; |
755 | is->getline(s,49); |
756 | *is >> fD; |
757 | is->getline(s,49); |
758 | *is >> fE; |
759 | is->getline(s,49); |
760 | *is >> fF; |
761 | is->getline(s,49); |
762 | *is >> fG; |
763 | is->getline(s,49); |
764 | *is >> fH; |
765 | is->getline(s,49); |
766 | *is >> fI; |
767 | is->getline(s,49); |
768 | *is >> fJ; |
769 | is->getline(s,49); |
770 | *is >> fK; |
771 | is->getline(s,49); |
772 | *is >> fL; |
773 | is->getline(s,49); |
774 | *is >> fM; |
775 | is->getline(s,49); |
776 | *is >> fN; |
777 | is->getline(s,49); |
778 | *is >> fO; |
779 | is->getline(s,49); |
780 | *is >> fP; |
781 | is->getline(s,49); |
782 | *is >> fQ; |
783 | is->getline(s,49); |
784 | *is >> fR; |
785 | is->getline(s,49); |
786 | *is >> fS; |
787 | is->getline(s,49); |
788 | *is >> fT; |
789 | is->getline(s,49); |
790 | *is >> fU; |
791 | return; |
792 | } |
793 | //______________________________________________________________________ |
794 | ostream &operator<<(ostream &os,AliITSGeometrySSDCone &s){ |
795 | // Operator << for C++ like output of AliITSGeometrySSDCone class. |
796 | // Inputs: |
797 | // ostream &os The output stream |
798 | // AliITSGeometrySSDCone &s The class to be outputed |
799 | // Outputs: |
800 | // none. |
801 | // Return: |
802 | // ostream &os The address of the output stream |
803 | |
804 | s.Print(&os); |
805 | return os; |
806 | } |
807 | //______________________________________________________________________ |
808 | istream &operator>>(istream &is,AliITSGeometrySSDCone &s){ |
809 | // Operator >> for C++ like input of AliITSGeometrySSDCone class. |
810 | // Inputs: |
811 | // istream &is The input stream |
812 | // AliITSGeometrySSDCone &s The class to be inputed |
813 | // Outputs: |
814 | // none. |
815 | // Return: |
816 | // istream &is The address of the input stream |
817 | |
818 | s.Read(&is); |
819 | return is; |
820 | } |