23 ClusterNumber= ExtClusterNumber;
24 StartClusterNumber = ExtClusterNumber;
26 NumberOfCryostatEdges =12;
27 NumberOfDifferentZValues = 4;
28 NumberOfXYInput = (NumberOfDifferentZValues*2-1)*2;
29 NumberOfFrontArb8 = 5;
30 NumberOfTopArb8 = NumberOfFrontArb8;
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/PndGeoHypGeTripleClusterParfile.txt";
39 ParametersInputFile.open(Filename.data());
40 FillZValues(NumberOfDifferentZValues);
41 FillInputArray(NumberOfCryostatEdges,NumberOfXYInput);
42 ParametersInputFile.close();
44 CryostatFrontThickness= ZValuesInputArray[1]-ZValuesInputArray[0];
45 CryostatLowerArb8Heigt = ZValuesInputArray[2]-ZValuesInputArray[1];
46 CryostatMiddleArb8Heigt= ZValuesInputArray[3]-ZValuesInputArray[2];
48 CryostatTopThickness=0.5;
54 cout <<
"Destrucor called" << endl;
58 delete Crystal1Rotation;
59 delete Crystal2Rotation;
60 delete Crystal3Rotation;
67 Crystal1Number = *CrystalNumber;
69 Crystal2Number = *CrystalNumber;
71 Crystal3Number = *CrystalNumber;
79 TripleCrystalXOffset = 3.5441;
80 TripleCrystalYOffset = 3.0694;
81 TripleCrystalZOffset = 0.7343;
83 Crystal1Rotation =
new TGeoRotation(
"Crystal1Rotation", -90,4.62,90);
84 Crystal1Rotation ->RegisterYourself();
85 Crystal2Rotation =
new TGeoRotation(
"Crystal2Rotation", 30,4.62,-30);
86 Crystal2Rotation ->RegisterYourself();
87 Crystal3Rotation =
new TGeoRotation(
"Crystal2Rotation", 150,+4.62,-30);
88 Crystal3Rotation ->RegisterYourself();
91 Crystal1Position =
new TGeoCombiTrans(TripleCrystalXOffset,0,-TripleCrystalZOffset,Crystal1Rotation);
92 Crystal1Position->RegisterYourself();
93 Crystal2Position =
new TGeoCombiTrans(-TripleCrystalXOffset/2,TripleCrystalYOffset,-TripleCrystalZOffset,Crystal2Rotation);
94 Crystal2Position->RegisterYourself();
95 Crystal3Position =
new TGeoCombiTrans(-TripleCrystalXOffset/2,-TripleCrystalYOffset,-TripleCrystalZOffset,Crystal3Rotation);
96 Crystal3Position->RegisterYourself();
103 Crystal1->PlaceCrystal(ClusterAssembly,Crystal1Position);
104 Crystal2->PlaceCrystal(ClusterAssembly,Crystal2Position);
105 Crystal3->PlaceCrystal(ClusterAssembly,Crystal3Position);
112 string CompositeShapeExpression;
115 CryostatFrontArb8XY_1 =
new Double_t[16];
116 BuildTArb8FrontArray(CryostatFrontArb8XY_1, 2,3,4,1, NumberOfXYInput);
117 CryostatFrontArb8XY_2 =
new Double_t[16];
118 BuildTArb8FrontArray(CryostatFrontArb8XY_2, 5,6,7,4, NumberOfXYInput);
119 CryostatFrontArb8XY_3 =
new Double_t[16];
120 BuildTArb8FrontArray(CryostatFrontArb8XY_3, 4,7,8,1, NumberOfXYInput);
121 CryostatFrontArb8XY_4 =
new Double_t[16];
122 BuildTArb8FrontArray(CryostatFrontArb8XY_4, 8,9,12,1, NumberOfXYInput);
123 CryostatFrontArb8XY_5 =
new Double_t[16];
124 BuildTArb8FrontArray(CryostatFrontArb8XY_5, 9,10,11,12, NumberOfXYInput);
126 CryostatFrontArb8_1 =
new TGeoArb8 (
"CryostatTripleFrontArb8_1",CryostatFrontThickness/2,CryostatFrontArb8XY_1);
127 CryostatFrontArb8_2 =
new TGeoArb8 (
"CryostatTripleFrontArb8_2",CryostatFrontThickness/2,CryostatFrontArb8XY_2);
128 CryostatFrontArb8_3 =
new TGeoArb8 (
"CryostatTripleFrontArb8_3",CryostatFrontThickness/2,CryostatFrontArb8XY_3);
129 CryostatFrontArb8_4 =
new TGeoArb8 (
"CryostatTripleFrontArb8_4",CryostatFrontThickness/2,CryostatFrontArb8XY_4);
130 CryostatFrontArb8_5 =
new TGeoArb8 (
"CryostatTripleFrontArb8_5",CryostatFrontThickness/2,CryostatFrontArb8XY_5);
132 CryostatFrontTranslation =
new TGeoTranslation(
"CryostatTripleFrontTranslation",0,0,CryostatFrontThickness/2);
133 CryostatFrontTranslation->RegisterYourself();
135 for (Int_t
i = 1;
i < NumberOfFrontArb8+1;
i++)
138 sprintf(buffer,
"CryostatTripleFrontArb8_%d : CryostatTripleFrontTranslation",
i);
139 CompositeShapeExpression += buffer;
142 CompositeShapeExpression +=
"+";
148 CryostatLowerArb8XY_1 =
new Double_t[16];
149 BuildTArb8Array(CryostatLowerArb8XY_1, 1,2,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
150 CryostatLowerArb8XY_2 =
new Double_t[16];
151 BuildTArb8Array(CryostatLowerArb8XY_2, 2,3,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
152 CryostatLowerArb8XY_3 =
new Double_t[16];
153 BuildTArb8Array(CryostatLowerArb8XY_3, 3,4,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
154 CryostatLowerArb8XY_4 =
new Double_t[16];
155 BuildTArb8Array(CryostatLowerArb8XY_4, 4,5,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
156 CryostatLowerArb8XY_5 =
new Double_t[16];
157 BuildTArb8Array(CryostatLowerArb8XY_5, 5,6,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
158 CryostatLowerArb8XY_6 =
new Double_t[16];
159 BuildTArb8Array(CryostatLowerArb8XY_6, 6,7,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
160 CryostatLowerArb8XY_7 =
new Double_t[16];
161 BuildTArb8Array(CryostatLowerArb8XY_7, 7,8,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
162 CryostatLowerArb8XY_8 =
new Double_t[16];
163 BuildTArb8Array(CryostatLowerArb8XY_8, 8,9,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
164 CryostatLowerArb8XY_9 =
new Double_t[16];
165 BuildTArb8Array(CryostatLowerArb8XY_9, 9,10,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
166 CryostatLowerArb8XY_10 =
new Double_t[16];
167 BuildTArb8Array(CryostatLowerArb8XY_10, 10,11,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
168 CryostatLowerArb8XY_11 =
new Double_t[16];
169 BuildTArb8Array(CryostatLowerArb8XY_11, 11,12,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
170 CryostatLowerArb8XY_12 =
new Double_t[16];
171 BuildTArb8Array(CryostatLowerArb8XY_12, 12,1,1,2, NumberOfDifferentZValues-1, NumberOfXYInput);
174 CryostatLowerArb8_1 =
new TGeoArb8 (
"CryostatTripleLowerArb8_1",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_1);
175 CryostatLowerArb8_2 =
new TGeoArb8 (
"CryostatTripleLowerArb8_2",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_2);
176 CryostatLowerArb8_3 =
new TGeoArb8 (
"CryostatTripleLowerArb8_3",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_3);
177 CryostatLowerArb8_4 =
new TGeoArb8 (
"CryostatTripleLowerArb8_4",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_4);
178 CryostatLowerArb8_5 =
new TGeoArb8 (
"CryostatTripleLowerArb8_5",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_5);
179 CryostatLowerArb8_6 =
new TGeoArb8 (
"CryostatTripleLowerArb8_6",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_6);
180 CryostatLowerArb8_7 =
new TGeoArb8 (
"CryostatTripleLowerArb8_7",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_7);
181 CryostatLowerArb8_8 =
new TGeoArb8 (
"CryostatTripleLowerArb8_8",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_8);
182 CryostatLowerArb8_9 =
new TGeoArb8 (
"CryostatTripleLowerArb8_9",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_9);
183 CryostatLowerArb8_10 =
new TGeoArb8 (
"CryostatTripleLowerArb8_10",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_10);
184 CryostatLowerArb8_11 =
new TGeoArb8 (
"CryostatTripleLowerArb8_11",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_11);
185 CryostatLowerArb8_12 =
new TGeoArb8 (
"CryostatTripleLowerArb8_12",CryostatLowerArb8Heigt/2,CryostatLowerArb8XY_12);
187 CryostatLowerTranslation =
new TGeoTranslation(
"CryostatTripleLowerTranslation",0,0,CryostatFrontThickness+CryostatLowerArb8Heigt/2);
188 CryostatLowerTranslation->RegisterYourself();
190 for (Int_t
i = 1;
i < NumberOfCryostatEdges+1;
i++)
193 sprintf(buffer,
"CryostatTripleLowerArb8_%d : CryostatTripleLowerTranslation",
i);
194 CompositeShapeExpression += buffer;
197 CompositeShapeExpression +=
"+";
203 CryostatMiddleArb8XY_1 =
new Double_t[16];
204 BuildTArb8Array(CryostatMiddleArb8XY_1, 1,2,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
205 CryostatMiddleArb8XY_2 =
new Double_t[16];
206 BuildTArb8Array(CryostatMiddleArb8XY_2, 2,3,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
207 CryostatMiddleArb8XY_3 =
new Double_t[16];
208 BuildTArb8Array(CryostatMiddleArb8XY_3, 3,4,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
209 CryostatMiddleArb8XY_4 =
new Double_t[16];
210 BuildTArb8Array(CryostatMiddleArb8XY_4, 4,5,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
211 CryostatMiddleArb8XY_5 =
new Double_t[16];
212 BuildTArb8Array(CryostatMiddleArb8XY_5, 5,6,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
213 CryostatMiddleArb8XY_6 =
new Double_t[16];
214 BuildTArb8Array(CryostatMiddleArb8XY_6, 6,7,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
215 CryostatMiddleArb8XY_7 =
new Double_t[16];
216 BuildTArb8Array(CryostatMiddleArb8XY_7, 7,8,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
217 CryostatMiddleArb8XY_8 =
new Double_t[16];
218 BuildTArb8Array(CryostatMiddleArb8XY_8, 8,9,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
219 CryostatMiddleArb8XY_9 =
new Double_t[16];
220 BuildTArb8Array(CryostatMiddleArb8XY_9, 9,10,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
221 CryostatMiddleArb8XY_10 =
new Double_t[16];
222 BuildTArb8Array(CryostatMiddleArb8XY_10, 10,11,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
223 CryostatMiddleArb8XY_11 =
new Double_t[16];
224 BuildTArb8Array(CryostatMiddleArb8XY_11, 11,12,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
225 CryostatMiddleArb8XY_12 =
new Double_t[16];
226 BuildTArb8Array(CryostatMiddleArb8XY_12, 12,1,2,3, NumberOfDifferentZValues-1, NumberOfXYInput);
229 CryostatMiddleArb8_1 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_1",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_1);
230 CryostatMiddleArb8_2 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_2",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_2);
231 CryostatMiddleArb8_3 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_3",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_3);
232 CryostatMiddleArb8_4 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_4",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_4);
233 CryostatMiddleArb8_5 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_5",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_5);
234 CryostatMiddleArb8_6 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_6",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_6);
235 CryostatMiddleArb8_7 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_7",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_7);
236 CryostatMiddleArb8_8 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_8",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_8);
237 CryostatMiddleArb8_9 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_9",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_9);
238 CryostatMiddleArb8_10 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_10",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_10);
239 CryostatMiddleArb8_11 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_11",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_11);
240 CryostatMiddleArb8_12 =
new TGeoArb8 (
"CryostatTripleMiddleArb8_12",CryostatMiddleArb8Heigt/2,CryostatMiddleArb8XY_12);
242 CryostatMiddleTranslation =
new TGeoTranslation(
"CryostatTripleMiddleTranslation",0,0,CryostatFrontThickness +CryostatLowerArb8Heigt+CryostatMiddleArb8Heigt/2);
243 CryostatMiddleTranslation->RegisterYourself();
245 for (Int_t
i = 1;
i < NumberOfCryostatEdges+1;
i++)
248 sprintf(buffer,
"CryostatTripleMiddleArb8_%d : CryostatTripleMiddleTranslation",
i);
249 CompositeShapeExpression += buffer;
250 if (
i< NumberOfCryostatEdges)
252 CompositeShapeExpression +=
"+";
254 if (
i==NumberOfCryostatEdges && MakeTop )
256 CompositeShapeExpression +=
"+";
262 CryostatTopArb8XY_1 =
new Double_t[16];
263 BuildTArb8TopArray(CryostatTopArb8XY_1, 2,3,4,1, NumberOfDifferentZValues-1, NumberOfXYInput);
264 CryostatTopArb8XY_2 =
new Double_t[16];
265 BuildTArb8TopArray(CryostatTopArb8XY_2, 5,6,7,4, NumberOfDifferentZValues-1, NumberOfXYInput);
266 CryostatTopArb8XY_3 =
new Double_t[16];
267 BuildTArb8TopArray(CryostatTopArb8XY_3, 4,7,8,1, NumberOfDifferentZValues-1, NumberOfXYInput);
268 CryostatTopArb8XY_4 =
new Double_t[16];
269 BuildTArb8TopArray(CryostatTopArb8XY_4, 8,9,12,1, NumberOfDifferentZValues-1, NumberOfXYInput);
270 CryostatTopArb8XY_5 =
new Double_t[16];
271 BuildTArb8TopArray(CryostatTopArb8XY_5, 9,10,11,12, NumberOfDifferentZValues-1, NumberOfXYInput);
273 CryostatTopArb8_1 =
new TGeoArb8 (
"CryostatTripleTopArb8_1",CryostatTopThickness/2,CryostatTopArb8XY_1);
274 CryostatTopArb8_2 =
new TGeoArb8 (
"CryostatTripleTopArb8_2",CryostatTopThickness/2,CryostatTopArb8XY_2);
275 CryostatTopArb8_3 =
new TGeoArb8 (
"CryostatTripleTopArb8_3",CryostatTopThickness/2,CryostatTopArb8XY_3);
276 CryostatTopArb8_4 =
new TGeoArb8 (
"CryostatTripleTopArb8_4",CryostatTopThickness/2,CryostatTopArb8XY_4);
277 CryostatTopArb8_5 =
new TGeoArb8 (
"CryostatTripleTopArb8_5",CryostatTopThickness/2,CryostatTopArb8XY_5);
279 CryostatTopTranslation =
new TGeoTranslation(
"CryostatTripleTopTranslation",0,0,CryostatFrontThickness +CryostatLowerArb8Heigt+CryostatMiddleArb8Heigt+CryostatUpperArb8Heigt+CryostatTopThickness/2);
280 CryostatTopTranslation->RegisterYourself();
285 for (Int_t
i = 1;
i < NumberOfTopArb8+1;
i++)
288 sprintf(buffer,
"CryostatTripleTopArb8_%d : CryostatTripleTopTranslation",
i);
289 CompositeShapeExpression += buffer;
290 if (
i<NumberOfTopArb8)
292 CompositeShapeExpression +=
"+";
301 CryostatShape =
new TGeoCompositeShape(
"CryostatShape",CompositeShapeExpression.data() );
302 Cryostat =
new TGeoVolume(
"Cryostat",CryostatShape,Al);
303 Cryostat->SetLineColor(kGreen);
304 Cryostat->SetFillColor(kGreen);
306 CryostatCombiTrans =
new TGeoCombiTrans(
"CryostatCombiTrans",0,0,0,
new TGeoRotation(
"CryostatRotation",0,180,0));
307 CryostatCombiTrans->RegisterYourself();
309 ClusterAssembly->AddNode(Cryostat,ClusterNumber,CryostatCombiTrans);
317 cout <<
"Nothing to Print, use higher number to go deeper in the tree." << endl;
321 cout <<
"Printing the content of the cluster assembly." << endl;
322 cout <<endl <<
"Number of Nodes in cluster assembly: " << ClusterAssembly->GetNdaughters() << endl;
323 ClusterAssembly->PrintNodes();
327 cout <<
"Printing the content of the crystal assemblies." << endl;
328 cout <<endl<<
"Number of Nodes in crystal assembly 1: " << Crystal1->GetNdaughters() << endl;
329 Crystal1->PrintNodes();
330 cout <<endl<<
"Number of Nodes in crystal assembly 2: " << Crystal2->GetNdaughters() << endl;
331 Crystal2->PrintNodes();
332 cout <<endl <<
"Number of Nodes in crystal assembly 3: " << Crystal3->GetNdaughters() << endl;
333 Crystal3->PrintNodes();
void BuildCrystals(Int_t *CrystalNumber)
ClassImp(PndGeoHypGeTripleCluster) PndGeoHypGeTripleCluster
void PrintNodes(Int_t nLevels)
~PndGeoHypGeTripleCluster()
PndGeoHypGeTripleCluster()