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