FairRoot/PandaRoot
PndGeoHypGeDEGAS.cxx
Go to the documentation of this file.
1 // ******** Implementation of class to build HypGe Triple Cluster Geometry *************
2 // by steinen@kph.uni-mainz.de
3 #include "PndGeoHypGeDEGAS.h"
4 //#include "PndGeoHypGeCrystal.h"
5 #include <iostream>
6 
7 using namespace std;
8 
10 
11 // ----- Default constructor -------------------------------------------
13 {
14  // Constructor
15 }
16 
17 PndGeoHypGeDEGAS::PndGeoHypGeDEGAS(TGeoMedium *ExtGe, TGeoMedium *ExtAl,Int_t ExtClusterNumber)
18 {
19  MakeTop = true;
20 
21  Ge = ExtGe;
22  Al = ExtAl;
23  ClusterNumber= ExtClusterNumber;
24  StartClusterNumber = ExtClusterNumber;
25 
26  NumberOfCryostatEdges =12;
27  NumberOfDifferentZValues = 5;
28  NumberOfXYInput = (NumberOfDifferentZValues*2-1)*2;
29  NumberOfFrontArb8 = 5;
30  NumberOfTopArb8 = NumberOfFrontArb8;
31 
32  //read coordinates from file
33  char* InputTitleBuffer;
34  ZValuesInputArray = new Double_t[NumberOfDifferentZValues];
35  CoordinatesInputArray = new Double_t[NumberOfCryostatEdges*NumberOfXYInput];
36  string Filename = getenv("VMCWORKDIR");
37  Filename +="/hypGe/geometry/PndGeoHypGeDEGASParfile.txt";
38 
39  ParametersInputFile.open(Filename.data());
40  FillZValues(NumberOfDifferentZValues);
41  FillInputArray(NumberOfCryostatEdges,NumberOfXYInput);
42  ParametersInputFile.close();
43 
44  CryostatFrontThickness= ZValuesInputArray[1]-ZValuesInputArray[0];
45  CryostatLowerArb8Heigt = ZValuesInputArray[2]-ZValuesInputArray[1];
46  CryostatMiddleArb8Heigt= ZValuesInputArray[3]-ZValuesInputArray[2];
47  CryostatUpperArb8Heigt= ZValuesInputArray[4]-ZValuesInputArray[3];
48  CryostatTopThickness=0.5;
49 }
50 
51 // ------- destructor --------------
53 {
54  cout << "Destrucor called" << endl;
55  delete Crystal1;
56  delete Crystal2;
57  delete Crystal3;
58  delete Crystal1Rotation;
59  delete Crystal2Rotation;
60  delete Crystal3Rotation;
61 };
62 
63 // --------------- build the crystals --------------------------
64 void PndGeoHypGeDEGAS::BuildCrystals(Int_t *CrystalNumber)
65 {
66  //create 3 crystal objects. The copy number of a crystal is composed of the number of the cluster and a running number for every placed crystal like e.g.: cluster 4, crystal 9: 409 ; cluster 11, crystal 32: 1132
67  Crystal1Number = *CrystalNumber;
68  *CrystalNumber+=1;
69  Crystal2Number = *CrystalNumber;
70  *CrystalNumber+=1;
71  Crystal3Number = *CrystalNumber;
72  *CrystalNumber+=1;
73  Crystal1 = new PndGeoHypGeCrystal(Ge,Al,100*ClusterNumber+Crystal1Number);
74  Crystal2 = new PndGeoHypGeCrystal(Ge,Al,100*ClusterNumber+Crystal2Number);
75  Crystal3 = new PndGeoHypGeCrystal(Ge,Al,100*ClusterNumber+Crystal3Number);
76 
77  //set positions of the 3 crystals
78  //measured from cad drawing, values compared to central point on the front surface of the cryostat head
79 
80  TripleCrystalXOffset = 3.5428;
81  TripleCrystalYOffset = 3.0682;
82  TripleCrystalZOffset = 0.7701;
83 
84  Crystal1Rotation = new TGeoRotation("Crystal1Rotation", -90,4.62,90); //angles measured in CAD drawing
85  Crystal1Rotation ->RegisterYourself();
86  Crystal2Rotation = new TGeoRotation("Crystal2Rotation", 30,4.62,-30);
87  Crystal2Rotation ->RegisterYourself();
88  Crystal3Rotation = new TGeoRotation("Crystal2Rotation", 150,+4.62,-30);
89  Crystal3Rotation ->RegisterYourself();
90 
91 
92  Crystal1Position = new TGeoCombiTrans(TripleCrystalXOffset,0,-TripleCrystalZOffset,Crystal1Rotation);
93  Crystal1Position->RegisterYourself();
94  Crystal2Position = new TGeoCombiTrans(-TripleCrystalXOffset/2,TripleCrystalYOffset,-TripleCrystalZOffset,Crystal2Rotation);
95  Crystal2Position->RegisterYourself();
96  Crystal3Position = new TGeoCombiTrans(-TripleCrystalXOffset/2,-TripleCrystalYOffset,-TripleCrystalZOffset,Crystal3Rotation);
97  Crystal3Position->RegisterYourself();
98 
99 
100 
101 
102 
103 
104  Crystal1->PlaceCrystal(ClusterAssembly,Crystal1Position);
105  Crystal2->PlaceCrystal(ClusterAssembly,Crystal2Position);
106  Crystal3->PlaceCrystal(ClusterAssembly,Crystal3Position);
107 }
108 // --------------- build the cryostat --------------------------
110 {
111  // the cryostat is a combination front, side and top parts. The front and the top is build of 5 TGeoArb8. The side parts are split into 12 lower and 12 middle. All are TGeoArb8. This parts are all combined to a TGeoCompositeShape
112 
113  string CompositeShapeExpression;
114 //the front of the cryostat
115 
116  CryostatFrontArb8XY_1 = new Double_t[16];
117  BuildTArb8FrontArray(CryostatFrontArb8XY_1, 2,3,4,1, NumberOfXYInput);
118  CryostatFrontArb8XY_2 = new Double_t[16];
119  BuildTArb8FrontArray(CryostatFrontArb8XY_2, 5,6,7,4, NumberOfXYInput);
120  CryostatFrontArb8XY_3 = new Double_t[16];
121  BuildTArb8FrontArray(CryostatFrontArb8XY_3, 4,7,8,1, NumberOfXYInput);
122  CryostatFrontArb8XY_4 = new Double_t[16];
123  BuildTArb8FrontArray(CryostatFrontArb8XY_4, 8,9,12,1, NumberOfXYInput);
124  CryostatFrontArb8XY_5 = new Double_t[16];
125  BuildTArb8FrontArray(CryostatFrontArb8XY_5, 9,10,11,12, NumberOfXYInput);
126 
127  CryostatFrontArb8_1 = new TGeoArb8 ("CryostatTripleFrontArb8_1",CryostatFrontThickness/2,CryostatFrontArb8XY_1);
128  CryostatFrontArb8_2 = new TGeoArb8 ("CryostatTripleFrontArb8_2",CryostatFrontThickness/2,CryostatFrontArb8XY_2);
129  CryostatFrontArb8_3 = new TGeoArb8 ("CryostatTripleFrontArb8_3",CryostatFrontThickness/2,CryostatFrontArb8XY_3);
130  CryostatFrontArb8_4 = new TGeoArb8 ("CryostatTripleFrontArb8_4",CryostatFrontThickness/2,CryostatFrontArb8XY_4);
131  CryostatFrontArb8_5 = new TGeoArb8 ("CryostatTripleFrontArb8_5",CryostatFrontThickness/2,CryostatFrontArb8XY_5);
132 
133  CryostatFrontTranslation = new TGeoTranslation("CryostatTripleFrontTranslation",0,0,CryostatFrontThickness/2);
134  CryostatFrontTranslation->RegisterYourself();
135 
136  for (Int_t i = 1; i < NumberOfFrontArb8+1; i++)
137  {
138  char buffer[100];
139  sprintf(buffer, "CryostatTripleFrontArb8_%d : CryostatTripleFrontTranslation",i);
140  CompositeShapeExpression += buffer;
141  CompositeShapeExpression += "+";
142  }
143 
144 //the lower part of the cryostat
145 
146  CryostatLowerArb8XY_1 = new Double_t[16];
147  BuildTArb8Array(CryostatLowerArb8XY_1, 1,2,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
148  CryostatLowerArb8XY_2 = new Double_t[16];
149  BuildTArb8Array(CryostatLowerArb8XY_2, 2,3,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
150  CryostatLowerArb8XY_3 = new Double_t[16];
151  BuildTArb8Array(CryostatLowerArb8XY_3, 3,4,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
152  CryostatLowerArb8XY_4 = new Double_t[16];
153  BuildTArb8Array(CryostatLowerArb8XY_4, 4,5,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
154  CryostatLowerArb8XY_5 = new Double_t[16];
155  BuildTArb8Array(CryostatLowerArb8XY_5, 5,6,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
156  CryostatLowerArb8XY_6 = new Double_t[16];
157  BuildTArb8Array(CryostatLowerArb8XY_6, 6,7,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
158  CryostatLowerArb8XY_7 = new Double_t[16];
159  BuildTArb8Array(CryostatLowerArb8XY_7, 7,8,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
160  CryostatLowerArb8XY_8 = new Double_t[16];
161  BuildTArb8Array(CryostatLowerArb8XY_8, 8,9,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
162  CryostatLowerArb8XY_9 = new Double_t[16];
163  BuildTArb8Array(CryostatLowerArb8XY_9, 9,10,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
164  CryostatLowerArb8XY_10 = new Double_t[16];
165  BuildTArb8Array(CryostatLowerArb8XY_10, 10,11,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
166  CryostatLowerArb8XY_11 = new Double_t[16];
167  BuildTArb8Array(CryostatLowerArb8XY_11, 11,12,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
168  CryostatLowerArb8XY_12 = new Double_t[16];
169  BuildTArb8Array(CryostatLowerArb8XY_12, 12,1,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
170 
171 
172  CryostatLowerArb8_1 = new TGeoArb8 ("CryostatTripleLowerArb8_1",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_1);
173  CryostatLowerArb8_2 = new TGeoArb8 ("CryostatTripleLowerArb8_2",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_2);
174  CryostatLowerArb8_3 = new TGeoArb8 ("CryostatTripleLowerArb8_3",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_3);
175  CryostatLowerArb8_4 = new TGeoArb8 ("CryostatTripleLowerArb8_4",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_4);
176  CryostatLowerArb8_5 = new TGeoArb8 ("CryostatTripleLowerArb8_5",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_5);
177  CryostatLowerArb8_6 = new TGeoArb8 ("CryostatTripleLowerArb8_6",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_6);
178  CryostatLowerArb8_7 = new TGeoArb8 ("CryostatTripleLowerArb8_7",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_7);
179  CryostatLowerArb8_8 = new TGeoArb8 ("CryostatTripleLowerArb8_8",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_8);
180  CryostatLowerArb8_9 = new TGeoArb8 ("CryostatTripleLowerArb8_9",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_9);
181  CryostatLowerArb8_10 = new TGeoArb8 ("CryostatTripleLowerArb8_10",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_10);
182  CryostatLowerArb8_11 = new TGeoArb8 ("CryostatTripleLowerArb8_11",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_11);
183  CryostatLowerArb8_12 = new TGeoArb8 ("CryostatTripleLowerArb8_12",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_12);
184 
185  CryostatLowerTranslation = new TGeoTranslation("CryostatTripleLowerTranslation",0,0,CryostatFrontThickness+CryostatLowerArb8Heigt/2);
186  CryostatLowerTranslation->RegisterYourself();
187 
188  for (Int_t i = 1; i < NumberOfCryostatEdges+1; i++)
189  {
190  char buffer[100];
191  sprintf(buffer, "CryostatTripleLowerArb8_%d : CryostatTripleLowerTranslation",i);
192  CompositeShapeExpression += buffer;
193  //if (i<NumberOfCryostatEdges) //uncomment if last part of composite shape
194  {
195  CompositeShapeExpression += "+";
196  }
197  }
198 
199 //the middle part of the cryostat
200 
201  CryostatMiddleArb8XY_1 = new Double_t[16];
202  BuildTArb8Array(CryostatMiddleArb8XY_1, 1,2,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
203  CryostatMiddleArb8XY_2 = new Double_t[16];
204  BuildTArb8Array(CryostatMiddleArb8XY_2, 2,3,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
205  CryostatMiddleArb8XY_3 = new Double_t[16];
206  BuildTArb8Array(CryostatMiddleArb8XY_3, 3,4,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
207  CryostatMiddleArb8XY_4 = new Double_t[16];
208  BuildTArb8Array(CryostatMiddleArb8XY_4, 4,5,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
209  CryostatMiddleArb8XY_5 = new Double_t[16];
210  BuildTArb8Array(CryostatMiddleArb8XY_5, 5,6,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
211  CryostatMiddleArb8XY_6 = new Double_t[16];
212  BuildTArb8Array(CryostatMiddleArb8XY_6, 6,7,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
213  CryostatMiddleArb8XY_7 = new Double_t[16];
214  BuildTArb8Array(CryostatMiddleArb8XY_7, 7,8,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
215  CryostatMiddleArb8XY_8 = new Double_t[16];
216  BuildTArb8Array(CryostatMiddleArb8XY_8, 8,9,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
217  CryostatMiddleArb8XY_9 = new Double_t[16];
218  BuildTArb8Array(CryostatMiddleArb8XY_9, 9,10,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
219  CryostatMiddleArb8XY_10 = new Double_t[16];
220  BuildTArb8Array(CryostatMiddleArb8XY_10, 10,11,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
221  CryostatMiddleArb8XY_11 = new Double_t[16];
222  BuildTArb8Array(CryostatMiddleArb8XY_11, 11,12,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
223  CryostatMiddleArb8XY_12 = new Double_t[16];
224  BuildTArb8Array(CryostatMiddleArb8XY_12, 12,1,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
225 
226 
227  CryostatMiddleArb8_1 = new TGeoArb8 ("CryostatTripleMiddleArb8_1",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_1);
228  CryostatMiddleArb8_2 = new TGeoArb8 ("CryostatTripleMiddleArb8_2",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_2);
229  CryostatMiddleArb8_3 = new TGeoArb8 ("CryostatTripleMiddleArb8_3",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_3);
230  CryostatMiddleArb8_4 = new TGeoArb8 ("CryostatTripleMiddleArb8_4",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_4);
231  CryostatMiddleArb8_5 = new TGeoArb8 ("CryostatTripleMiddleArb8_5",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_5);
232  CryostatMiddleArb8_6 = new TGeoArb8 ("CryostatTripleMiddleArb8_6",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_6);
233  CryostatMiddleArb8_7 = new TGeoArb8 ("CryostatTripleMiddleArb8_7",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_7);
234  CryostatMiddleArb8_8 = new TGeoArb8 ("CryostatTripleMiddleArb8_8",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_8);
235  CryostatMiddleArb8_9 = new TGeoArb8 ("CryostatTripleMiddleArb8_9",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_9);
236  CryostatMiddleArb8_10 = new TGeoArb8 ("CryostatTripleMiddleArb8_10",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_10);
237  CryostatMiddleArb8_11 = new TGeoArb8 ("CryostatTripleMiddleArb8_11",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_11);
238  CryostatMiddleArb8_12 = new TGeoArb8 ("CryostatTripleMiddleArb8_12",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_12);
239 
240  CryostatMiddleTranslation = new TGeoTranslation("CryostatTripleMiddleTranslation",0,0,CryostatFrontThickness +CryostatLowerArb8Heigt+CryostatMiddleArb8Heigt/2);
241  CryostatMiddleTranslation->RegisterYourself();
242 
243  for (Int_t i = 1; i < NumberOfCryostatEdges+1; i++)
244  {
245  char buffer[100];
246  sprintf(buffer, "CryostatTripleMiddleArb8_%d : CryostatTripleMiddleTranslation",i);
247  CompositeShapeExpression += buffer;
248  CompositeShapeExpression += "+";
249 // if (i< NumberOfCryostatEdges)
250 // {
251 // CompositeShapeExpression += "+";
252 // }
253 // if (i==NumberOfCryostatEdges && MakeTop )
254 // {
255 // CompositeShapeExpression += "+";
256 // }
257  }
258 
259  //the upper part of the cryostat
260 
261  CryostatUpperArb8XY_1 = new Double_t[16];
262  BuildTArb8Array(CryostatUpperArb8XY_1, 1,2,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
263  CryostatUpperArb8XY_2 = new Double_t[16];
264  BuildTArb8Array(CryostatUpperArb8XY_2, 2,3,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
265  CryostatUpperArb8XY_3 = new Double_t[16];
266  BuildTArb8Array(CryostatUpperArb8XY_3, 3,4,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
267  CryostatUpperArb8XY_4 = new Double_t[16];
268  BuildTArb8Array(CryostatUpperArb8XY_4, 4,5,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
269  CryostatUpperArb8XY_5 = new Double_t[16];
270  BuildTArb8Array(CryostatUpperArb8XY_5, 5,6,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
271  CryostatUpperArb8XY_6 = new Double_t[16];
272  BuildTArb8Array(CryostatUpperArb8XY_6, 6,7,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
273  CryostatUpperArb8XY_7 = new Double_t[16];
274  BuildTArb8Array(CryostatUpperArb8XY_7, 7,8,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
275  CryostatUpperArb8XY_8 = new Double_t[16];
276  BuildTArb8Array(CryostatUpperArb8XY_8, 8,9,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
277  CryostatUpperArb8XY_9 = new Double_t[16];
278  BuildTArb8Array(CryostatUpperArb8XY_9, 9,10,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
279  CryostatUpperArb8XY_10 = new Double_t[16];
280  BuildTArb8Array(CryostatUpperArb8XY_10, 10,11,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
281  CryostatUpperArb8XY_11 = new Double_t[16];
282  BuildTArb8Array(CryostatUpperArb8XY_11, 11,12,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
283  CryostatUpperArb8XY_12 = new Double_t[16];
284  BuildTArb8Array(CryostatUpperArb8XY_12, 12,1,3,4, NumberOfDifferentZValues-1, NumberOfXYInput);
285 
286 
287  CryostatUpperArb8_1 = new TGeoArb8 ("CryostatTripleUpperArb8_1",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_1);
288  CryostatUpperArb8_2 = new TGeoArb8 ("CryostatTripleUpperArb8_2",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_2);
289  CryostatUpperArb8_3 = new TGeoArb8 ("CryostatTripleUpperArb8_3",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_3);
290  CryostatUpperArb8_4 = new TGeoArb8 ("CryostatTripleUpperArb8_4",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_4);
291  CryostatUpperArb8_5 = new TGeoArb8 ("CryostatTripleUpperArb8_5",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_5);
292  CryostatUpperArb8_6 = new TGeoArb8 ("CryostatTripleUpperArb8_6",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_6);
293  CryostatUpperArb8_7 = new TGeoArb8 ("CryostatTripleUpperArb8_7",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_7);
294  CryostatUpperArb8_8 = new TGeoArb8 ("CryostatTripleUpperArb8_8",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_8);
295  CryostatUpperArb8_9 = new TGeoArb8 ("CryostatTripleUpperArb8_9",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_9);
296  CryostatUpperArb8_10 = new TGeoArb8 ("CryostatTripleUpperArb8_10",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_10);
297  CryostatUpperArb8_11 = new TGeoArb8 ("CryostatTripleUpperArb8_11",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_11);
298  CryostatUpperArb8_12 = new TGeoArb8 ("CryostatTripleUpperArb8_12",CryostatUpperArb8Heigt/2,CryostatUpperArb8XY_12);
299 
300 
301  CryostatUpperTranslation = new TGeoTranslation("CryostatTripleUpperTranslation",0,0,CryostatFrontThickness +CryostatLowerArb8Heigt+CryostatMiddleArb8Heigt+CryostatUpperArb8Heigt/2);
302  CryostatUpperTranslation->RegisterYourself();
303 
304  for (Int_t i = 1; i < NumberOfCryostatEdges+1; i++)
305  {
306  char buffer[100];
307  sprintf(buffer, "CryostatTripleUpperArb8_%d : CryostatTripleUpperTranslation",i);
308  CompositeShapeExpression += buffer;
309 
310  if (i<NumberOfCryostatEdges)
311  {
312  CompositeShapeExpression += "+";
313  }
314  if (i==NumberOfCryostatEdges && MakeTop )
315  {
316  CompositeShapeExpression += "+";
317  }
318  }
319 
320 //the top of the cryostat
321 
322  CryostatTopArb8XY_1 = new Double_t[16];
323  BuildTArb8TopArray(CryostatTopArb8XY_1, 2,3,4,1, NumberOfDifferentZValues-1, NumberOfXYInput);
324  CryostatTopArb8XY_2 = new Double_t[16];
325  BuildTArb8TopArray(CryostatTopArb8XY_2, 5,6,7,4, NumberOfDifferentZValues-1, NumberOfXYInput);
326  CryostatTopArb8XY_3 = new Double_t[16];
327  BuildTArb8TopArray(CryostatTopArb8XY_3, 4,7,8,1, NumberOfDifferentZValues-1, NumberOfXYInput);
328  CryostatTopArb8XY_4 = new Double_t[16];
329  BuildTArb8TopArray(CryostatTopArb8XY_4, 8,9,12,1, NumberOfDifferentZValues-1, NumberOfXYInput);
330  CryostatTopArb8XY_5 = new Double_t[16];
331  BuildTArb8TopArray(CryostatTopArb8XY_5, 9,10,11,12, NumberOfDifferentZValues-1, NumberOfXYInput);
332 
333  CryostatTopArb8_1 = new TGeoArb8 ("CryostatTripleTopArb8_1",CryostatTopThickness/2,CryostatTopArb8XY_1);
334  CryostatTopArb8_2 = new TGeoArb8 ("CryostatTripleTopArb8_2",CryostatTopThickness/2,CryostatTopArb8XY_2);
335  CryostatTopArb8_3 = new TGeoArb8 ("CryostatTripleTopArb8_3",CryostatTopThickness/2,CryostatTopArb8XY_3);
336  CryostatTopArb8_4 = new TGeoArb8 ("CryostatTripleTopArb8_4",CryostatTopThickness/2,CryostatTopArb8XY_4);
337  CryostatTopArb8_5 = new TGeoArb8 ("CryostatTripleTopArb8_5",CryostatTopThickness/2,CryostatTopArb8XY_5);
338 
339  CryostatTopTranslation = new TGeoTranslation("CryostatTripleTopTranslation",0,0,CryostatFrontThickness +CryostatLowerArb8Heigt+CryostatMiddleArb8Heigt+CryostatUpperArb8Heigt+CryostatTopThickness/2);
340  CryostatTopTranslation->RegisterYourself();
341 
342 
343  if (MakeTop)
344  {
345  for (Int_t i = 1; i < NumberOfTopArb8+1; i++)
346  {
347  char buffer[100];
348  sprintf(buffer, "CryostatTripleTopArb8_%d : CryostatTripleTopTranslation",i);
349  CompositeShapeExpression += buffer;
350  if (i<NumberOfTopArb8) //uncomment if last part of composite shape
351  {
352  CompositeShapeExpression += "+";
353  }
354  }
355  }
356 
357  //cout << CompositeShapeExpression << endl;
358 
359 
360  //combine the cryostat
361  CryostatShape = new TGeoCompositeShape("CryostatShape",CompositeShapeExpression.data() );
362  Cryostat = new TGeoVolume("Cryostat",CryostatShape,Al);
363  Cryostat->SetLineColor(kGreen);
364  Cryostat->SetFillColor(kGreen);
365  //bring the Cryostat in the right position
366  CryostatCombiTrans = new TGeoCombiTrans("CryostatCombiTrans",0,0,0,new TGeoRotation("CryostatRotation",0,180,0));
367  CryostatCombiTrans->RegisterYourself();
368 
369  ClusterAssembly->AddNode(Cryostat,ClusterNumber,CryostatCombiTrans);
370 };
371 
372 // --------------- Prints the nodes of a cluster -----------------
373 void PndGeoHypGeDEGAS::PrintNodes(Int_t nLevels )
374 {
375  if (nLevels == 0)
376  {
377  cout << "Nothing to Print, use higher number to go deeper in the tree." << endl;
378  }
379  if (nLevels > 0)
380  {
381  cout << "Printing the content of the cluster assembly." << endl;
382  cout <<endl << "Number of Nodes in cluster assembly: " << ClusterAssembly->GetNdaughters() << endl;
383  ClusterAssembly->PrintNodes();
384  }
385  if (nLevels > 1)
386  {
387  cout << "Printing the content of the crystal assemblies." << endl;
388  cout <<endl<< "Number of Nodes in crystal assembly 1: " << Crystal1->GetNdaughters() << endl;
389  Crystal1->PrintNodes();
390  cout <<endl<< "Number of Nodes in crystal assembly 2: " << Crystal2->GetNdaughters() << endl;
391  Crystal2->PrintNodes();
392  cout <<endl << "Number of Nodes in crystal assembly 3: " << Crystal3->GetNdaughters() << endl;
393  Crystal3->PrintNodes();
394  }
395 }
void PrintNodes(Int_t nLevels)
Int_t i
Definition: run_full.C:25
void BuildCrystals(Int_t *CrystalNumber)
Double_t
ClassImp(PndGeoHypGeDEGAS) PndGeoHypGeDEGAS