]>
Commit | Line | Data |
---|---|---|
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 | } |