FairRoot/PandaRoot
Functions
create1StationsGem_firstStation.C File Reference
#include "iomanip.h"

Go to the source code of this file.

Functions

int create1StationsGem_firstStation ()
 

Function Documentation

int create1StationsGem_firstStation ( )

Definition at line 3 of file create1StationsGem_firstStation.C.

References CbmMediumAir, CbmMediumAluminium, CbmMediumCarbon, CbmMediumPWO, Double_t, dummyrot, fi, geobuild, geoFace, geoLoad, gGeoMan, Media, medium, nmed, outfile, Pi, SetLineColor(), SubunitVol, top, and TString.

4 { // create only GEM with one station
5  //----------------------------------------------------------------------------------------------------------------------------------------------
6  // Gem disk geometry parameters (R.Karabowicz)
7  //----------------------------------------------------------------------------------------------------------------------------------------------
8  // Done Some Changes By Nazila Divani-Veis ( since May 2015 ... ) create GEM first station at the ZPosition=119.40cm , (it is the smallest one )
9  //----------------------------------------------------------------------------------------------------------------------------------------------
10  // Try to get close to the CAD Geometry ( After could not use CadConverter ) //Some parameters from DL.
11  //----------------------------------------------------------------------------------------------------------------------------------------------
12  // Units are in [cm]
13  //---------------------------------------------------------------------------------------------------------------------------------------------
14 
15  const Int_t kNofDisks = 1; //number of GEM stations in form of disk
16 
17  const Double_t kDiskVolInnerRadius[kNofDisks] = { 4.50 }; // InnerRadius for one Station in form of disk
18  const Double_t kDiskVolOuterRadius[kNofDisks] = { 45.00 }; // OuterRadius for one Station in form of disk
19  const Double_t kDiskZPosition [kNofDisks] = { 119.40 }; // ZPosition for one Station in form of disk
20 
21 
22  const Int_t kDiskNFoils [kNofDisks] = { 2 }; // For modifying misalignment
23  const Double_t kMiddleROBarHfTh[kNofDisks] = { 2.35 }; // half thickness of space in the middle of foils [cm]
24  const Double_t kHalfStationThickness = 6.00;
25 
26  const Double_t carbonRingInnerRadius[kNofDisks] = { 40.0 };
27  const Double_t carbonRingOuterRadius[kNofDisks] = { 40.2 };
28  const Double_t carbonRingHalfThickness = 1.5;
29 
30  const Double_t copperRingInnerRadius[kNofDisks] = { 39.9 };
31  const Double_t copperRingOuterRadius[kNofDisks] = { 40.1 };
32  const Double_t copperRingHalfThickness = 3.75;
33 
34  const Double_t AlRingInnerRadius[kNofDisks] = { 40.1 };
35  const Double_t AlRingOuterRadius[kNofDisks] = { 44.7 };
36  const Double_t AlRingHalfThickness = 3.75;
37 
38  const Double_t SegmentHalfThickness = 0.25;
39  const Int_t NofSegments = 24;
40  const Double_t SegmentDeltaAngle = 360./(Double_t(NofSegments));
41  const Double_t FirstSegmentAngle = 7.5;
42  const TString newsegment [NofSegments] = { "seg1" ,"seg2" ,"seg3" ,"seg4" ,"seg5" ,"seg6" ,"seg7" ,"seg8" ,
43  "seg9" ,"seg10","seg11","seg12","seg13","seg14","seg15","seg16",
44  "seg17","seg18","seg19","seg20","seg21","seg22","seg23","seg24" };
45 
46  const Double_t moduleRingInnerRadius[kNofDisks] = { 40.15 };
47  const Double_t moduleRingOuterRadius[kNofDisks] = { 44.65 };
48  const Double_t moduleRingHalfThickness = 3.75;
49 
50  const Double_t moduleSegmentHalfThickness = 1.30;
51  const Int_t NofmoduleSegments = 24;
52  const Double_t moduleSegmentDeltaAngle = 360./(Double_t(NofmoduleSegments));
53  const Double_t FirstmoduleSegmentAngle = 0.0 ;
54  const TString newmodulesegment [NofmoduleSegments] = { "moduleseg1" ,"moduleseg2" ,"moduleseg3" ,"moduleseg4" ,"moduleseg5" ,"moduleseg6" ,"moduleseg7" ,"moduleseg8" ,
55  "moduleseg9" ,"moduleseg10","moduleseg11","moduleseg12","moduleseg13","moduleseg14","moduleseg15","moduleseg16",
56  "moduleseg17","moduleseg18","moduleseg19","moduleseg20","moduleseg21","moduleseg22","moduleseg23","moduleseg24" };
57 
58  const Double_t AlumiRingInnerRadius[kNofDisks] = { 44.7 };
59  const Double_t AlumiRingOuterRadius[kNofDisks] = { 45.0 };
60  const Double_t AlumiRingHalfThickness = 3.75;
61 
62  const Double_t coverRingInnerRadius[kNofDisks] = { 39.9 };
63  const Double_t coverRingOuterRadius[kNofDisks] = { 45.0 };
64  const Double_t coverRingHalfThickness = 0.2;
65 
66  //------------------------------------------------------------ main layers in shape of Disk----------------------------------------------------------------------
67  const Int_t kNofLayers = 47;
68  const TString kLayerName [kNofLayers] = { "window_foil_out_aluminium","WindowF_kapton",
69  "space", // these "spaces" belong to holding structure layers
70  "WindowF_aluminium","CathodeF_kapton","CathodeF_aluminium",
71  "space",
72  "Gem1_Sensor_GEMmixture", // sensitive layer
73  "space",
74  "Gem1F_copper","Gem1_kapton","Gem1B_copper",
75  "space",
76  "Gem2F_copper","Gem2_kapton","Gem2B_copper",
77  "space",
78  "Gem3F_copper","Gem3_kapton","Gem3B_copper",
79  "space",
80  "space",
81  "PadF_copper","Pad_kapton","PadB_copper",
82  "space",
83  "space",
84  "Gem4F_copper","Gem4_kapton","Gem4B_copper",
85  "space",
86  "Gem5F_copper","Gem5_kapton","Gem5B_copper",
87  "space",
88  "Gem6F_copper","Gem6_kapton","Gem6B_copper",
89  "space",
90  "Gem6_Sensor_GEMmixture", // sensitive layer
91  "space",
92  "CathodeB_aluminium","CathodeB_kapton","WindowB_aluminium",
93  "space",
94  "WindowB_kapton","window_foil_in_aluminium" };
95  const Double_t kLayerThick[kNofLayers] = { 0.0001, 0.0007, // 2 = 2 window
96  1.00, // windowF_ring_carbon=holding structure // +1 = 3 space
97  0.0001, 0.0007, 0.0001, // +3 = 6 window + cathode
98  0.80, // cathodeF_ring_GlassFiber=holding structure // +1 = 7 space
99  1.0020, // +1 = 8 SENSOR
100  0.0050, // gem_ring1_GlassFiber=holding structure // +1 = 9 space
101  0.0005, 0.0050, 0.0005, // +3 = 12 GEM Foil
102  0.0050, // gem_ring2_GlassFiber=holding structure // +1 = 13 space
103  0.0005, 0.0050, 0.0005, // +3 = 16 GEM Foil
104  0.0050, // gem_ring3_GlassFiber=holding structure // +1 = 17 space
105  0.0005, 0.0050, 0.0005, // +3 = 20 GEM Foil
106  0.0050, // gem_ring4_GlassFiber=holding structure // +1 = 21 space
107  0.10, // padplaneF_support_GlassFiber=holding structure // +1 = 22 space
108  0.001, 0.001, 0.001, // +3 = 25 PAD plane
109  0.10, // padplaneB_support_GlassFiber=holding structure // +1 = 26 space
110  0.0050, // gem_ring5_GlassFiber=holding structure // +1 = 27 space
111  0.0005, 0.0050, 0.0005, // +3 = 30 GEM Foil
112  0.0050, // gem_ring6_GlassFiber=holding structure // +1 = 31 space
113  0.0005, 0.0050, 0.0005, // +3 = 34 GEM Foil
114  0.0050, // gem_ring7_GlassFiber=holding structure // +1 = 35 space
115  0.0005, 0.0050, 0.0005, // +3 = 38 GEM Foil
116  0.0050, // gem_ring8_GlassFiber=holding structure // +1 = 39 space
117  1.0020, // +1 = 40 SENSOR
118  0.80, // cathodeB_ring_GlassFiber=holding structure // +1 = 41 space
119  0.0001, 0.0007, 0.0001, // +3 = 44 cathode + window
120  1.00, // windowB_ring_carbon=holding structure // +1 = 45 space
121  0.0007, 0.0001 }; // +2 = 47 window
122  const Double_t kDiskOuterRadius[kNofLayers][kNofDisks] = { 38.95, 39.40,
123  39.90,
124  38.45, 39.40, 38.45,
125  39.40,
126  38.45,
127  39.05,
128  38.10, 39.05, 38.10,
129  39.05,
130  38.10, 39.05, 38.10,
131  39.05,
132  38.10, 39.05, 38.10,
133  39.05,
134  45.00,
135  44.90, 44.90, 44.90,
136  45.00,
137  39.05,
138  38.10, 39.05, 38.10,
139  39.05,
140  38.10, 39.05, 38.10,
141  39.05,
142  38.10, 39.05, 38.10,
143  39.05,
144  38.45,
145  39.40,
146  38.45, 39.40, 38.45,
147  39.40,
148  39.40, 38.95 };
149  const Double_t kDiskInnerRadius[kNofLayers][kNofDisks] = { 4.50, 4.50,
150  4.50,
151  4.50, 4.50, 4.50,
152  4.50,
153  4.50,
154  4.50,
155  4.50, 4.50, 4.50,
156  4.50,
157  4.50, 4.50, 4.50,
158  4.50,
159  4.50, 4.50, 4.50,
160  4.50,
161  4.50,
162  4.50, 4.50, 4.50,
163  4.50,
164  4.50,
165  4.50, 4.50, 4.50,
166  4.50,
167  4.50, 4.50, 4.50,
168  4.50,
169  4.50, 4.50, 4.50,
170  4.50,
171  4.50,
172  4.50,
173  4.50, 4.50, 4.50,
174  4.50,
175  4.50, 4.50 };
176 
177  const Double_t HoleTZ = 0.0; // (top and down) holes Translation parameters
178  const Double_t HoleTX = 0.0;
179  const Double_t HoleTY = 31.50;
180 
181 //----------------------- holding structure layers ------------------------------------------------------------------------------------------------
182  const Int_t NofHLayers = 14;
183  const TString HLayersName [NofHLayers] = { "windowF_ring_carbon",
184  "cathodeF_ring_GlassFiber",
185  "gem_ring1_GlassFiber",
186  "gem_ring2_GlassFiber",
187  "gem_ring3_GlassFiber",
188  "gem_ring4_GlassFiber",
189  "padplaneF_support_GlassFiber",
190  "padplaneB_support_GlassFiber",
191  "gem_ring5_GlassFiber",
192  "gem_ring6_GlassFiber",
193  "gem_ring7_GlassFiber",
194  "gem_ring8_GlassFiber",
195  "cathodeB_ring_GlassFiber",
196  "windowB_ring_carbon" };
197  const Double_t HLayersThick[NofHLayers] = { 1.00,
198  0.80,
199  0.0050,
200  0.0050,
201  0.0050,
202  0.0050,
203  0.10,
204  0.10,
205  0.0050,
206  0.0050,
207  0.0050,
208  0.0050,
209  0.80,
210  1.00 };
211  const Double_t HZPosition[NofHLayers][kNofDisks] = { -1.9426,
212  -1.5417,
213  -0.1372,
214  -0.1262,
215  -0.1152,
216  -0.1042,
217  -0.0517,
218  0.0517,
219  0.1042,
220  0.1152,
221  0.1262,
222  0.1372,
223  1.5417,
224  1.9426 };
225  const Double_t HOuterRadius[NofHLayers][kNofDisks] = { 39.90,
226  39.40,
227  39.05,
228  39.05,
229  39.05,
230  39.05,
231  45.00,
232  45.00,
233  39.05,
234  39.05,
235  39.05,
236  39.05,
237  39.40,
238  39.90 };
239  const Double_t HInnerRadius[NofHLayers][kNofDisks] = { 39.65,
240  38.50,
241  38.05,
242  38.05,
243  38.05,
244  38.05,
245  38.50,
246  38.50,
247  38.05,
248  38.05,
249  38.05,
250  38.05,
251  38.50,
252  39.65 };
253 
254  const Double_t HXBoxWidth = 2.30; // Using to define holding structure layers holes
255  const Double_t HXPlateWidth = 1.90;
256  const Double_t HYPlateWidth = 10.0;
257 
258  const Double_t HTZ = 0.0; // Translation parameters for vertical holes
259  const Double_t HTX = 0.0;
260  const Double_t HTY[NofHLayers][kNofDisks] = { 25.0,
261  25.0,
262  25.0,
263  25.0,
264  25.0,
265  25.0,
266  25.0,
267  25.0,
268  25.0,
269  25.0,
270  25.0,
271  25.0,
272  25.0,
273  25.0 };
274 //-------------------------------------------------------------------------------------------------------------------------------------------------
275  const Int_t kSensorStripType [2] = { 3 , 2 };
276 
277  const Double_t kSensorStripAngle[2][2] = { 0. , 0. , 0. , 0. };
278  const Double_t kSensorStripPitch[2][2] = { 0.04, 0.04, 0.04, 0.04};
279 
280  Double_t firstLayerOffset = 0.;
281 
282  for ( Int_t ilayer = 0 ; ilayer < kNofLayers ; ilayer++ ) {
283  cout << kLayerName[ilayer].Data() << " -> " << kLayerThick[ilayer] << endl;
284  firstLayerOffset += kLayerThick[ilayer];
285  }
286 
287  cout << "total thickness is " << firstLayerOffset << endl;
288  firstLayerOffset = firstLayerOffset/2.;
289  firstLayerOffset = -0.001*(TMath::Floor(1000.*firstLayerOffset));
290  cout << "first layer offset is " << firstLayerOffset << endl;
291  //-----------------------------------------------------------------------------------------------
292 
293  TString vmcWorkdir = getenv("VMCWORKDIR");
294 
295  TString outfile= "../../geometry/gem_1Station_first_realistic_v1.root"; // it means GEM with one station which is its' first station
296 
297  TFile* fi = new TFile(outfile,"RECREATE");
298 
299  cout << "created output file" << endl;
300  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
301  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
302  cout << "geoface setmediafile" << endl;
303  geoFace->setMediaFile("../../geometry/media_pnd.geo");
304  cout << "geoface readmedia" << endl;
305  geoFace->readMedia();
306  cout << "geoface print" << endl;
307  geoFace->print();
308  cout << "geoface done" << endl;
309 
310  FairGeoMedia *Media = geoFace->getMedia();
311  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
312 
313  FairGeoMedium *CbmMediumAir = Media->getMedium("air");
314  FairGeoMedium *CbmMediumPWO = Media->getMedium("PWO");
315  FairGeoMedium *CbmMediumCarbon = Media->getMedium("carbon");
316  FairGeoMedium *CbmMediumAluminium = Media->getMedium("aluminium");
317  FairGeoMedium *CbmMediumCopper = Media->getMedium("copper");
318  FairGeoMedium *CbmMediumKapton = Media->getMedium("kapton");
319  FairGeoMedium *CbmMediumArCO2 = Media->getMedium("GEMmixture");
320  FairGeoMedium *CbmMediumUranium = Media->getMedium("uranium");
321  FairGeoMedium *CbmMediumGlassFiber= Media->getMedium("GlassFiber");
322 
323  Int_t nmed=geobuild->createMedium(CbmMediumAir);
324  nmed=geobuild->createMedium(CbmMediumPWO);
325  nmed=geobuild->createMedium(CbmMediumCarbon);
326  nmed=geobuild->createMedium(CbmMediumAluminium);
327  nmed=geobuild->createMedium(CbmMediumCopper);
328  nmed=geobuild->createMedium(CbmMediumKapton);
329  nmed=geobuild->createMedium(CbmMediumArCO2);
330  nmed=geobuild->createMedium(CbmMediumUranium);
331  nmed=geobuild->createMedium(CbmMediumGlassFiber);
332 
333 
334  TGeoManager* gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
335 
336  TGeoVolume *top = new TGeoVolumeAssembly("Gem");
337 
338  gGeoMan->SetTopVolume(top);
339 
340  cout << "-------------------------------------------------------------------" << endl;
341  TList* mediaList = (TList*)gGeoMan->GetListOfMedia();
342  cout << "media known: " << mediaList->GetEntries() << "." << endl;
343  for ( Int_t itemp = 0 ; itemp < mediaList->GetEntries() ; itemp++ ) {
344  TGeoMedium* medium = (TGeoMedium*)mediaList->At(itemp);
345  cout << "medium " << itemp << " name is " << medium->GetName() << endl;
346  }
347  cout << "-------------------------------------------------------------------" << endl;
348 
349  TGeoRotation* dummyrot = new TGeoRotation();
350 
351  TGeoVolumeAssembly* SubunitVol = new TGeoVolumeAssembly("Gem_Disks");
352 
353  //----------------------------------------------------------------------------------------
354  TGeoShape *DiskShape[kNofDisks];
355  TGeoVolume *DiskVol [kNofDisks];
356  TGeoTranslation *DiskTrans[kNofDisks];
357  TGeoCombiTrans *DiskCombi[kNofDisks];
358  //--------------------------------------------------------------------------------------------
359  TGeoShape *carbonRingShape[kNofDisks];
360  TGeoVolume *carbonRingVol [kNofDisks];
361  TGeoTranslation *carbonRingTrans[kNofDisks];
362  TGeoCombiTrans *carbonRingCombi[kNofDisks];
363  //------------------------------------------------------------------------------------------
364  TGeoShape *copperRingShape[kNofDisks];
365  TGeoVolume *copperRingVol [kNofDisks];
366  TGeoTranslation *copperRingTrans[kNofDisks];
367  TGeoCombiTrans *copperRingCombi[kNofDisks];
368  //-----------------------------------------------------------------------------------------
369  TGeoShape *coverRingShape[kNofDisks];
370  TGeoVolume *coverRingVol [kNofDisks];
371  TGeoTranslation *coverRingTrans[kNofDisks];
372  TGeoCombiTrans *coverRingCombi[kNofDisks];
373  //-----------------------------------------------------------------------------------------
374  TGeoShape *AlRingShape[kNofDisks][NofSegments];
375  TGeoVolume *AlRingVol [kNofDisks][NofSegments];
376  TGeoTranslation *AlRingTrans[kNofDisks][NofSegments];
377  TGeoCombiTrans *AlRingCombi[kNofDisks][NofSegments];
378  //-----------------------------------------------------------------------------------------
379  TGeoShape *moduleRingShape[kNofDisks][NofmoduleSegments];
380  TGeoVolume *moduleRingVol [kNofDisks][NofmoduleSegments];
381  TGeoTranslation *moduleRingTrans[kNofDisks][NofmoduleSegments];
382  TGeoCombiTrans *moduleRingCombi[kNofDisks][NofmoduleSegments];
383  //-----------------------------------------------------------------------------------------
384  TGeoShape *AlumiRingShape[kNofDisks];
385  TGeoVolume *AlumiRingVol [kNofDisks];
386  TGeoTranslation *AlumiRingTrans[kNofDisks];
387  TGeoCombiTrans *AlumiRingCombi[kNofDisks];
388  //----------------------------------------------------------------------------------------------
389  TGeoShape *DiskLayersShapeA [kNofLayers][kNofDisks][4]; // 4 is number of seg
390  TGeoShape *DiskLayersShapeB [kNofLayers][kNofDisks][4];
391  TGeoSubtraction *DiskLayersSubtr [kNofLayers][kNofDisks][4];
392  TGeoShape *DiskLayersShapeC [kNofLayers][kNofDisks][4]; // final, C = A-B
393  TGeoShape *DiskLayersShapeHole [kNofLayers][kNofDisks][4];
394  TGeoCompositeShape *DiskLayersShapecompos[kNofLayers][kNofDisks][4];
395  TGeoVolume *DiskLayersVol [kNofLayers][kNofDisks][4];
396  TGeoTranslation *DiskLayersTranshA [kNofLayers][kNofDisks][4];
397  TGeoTranslation *DiskLayersTranshB [kNofLayers][kNofDisks][4];
398  TGeoTranslation *DiskLayersTrans [kNofLayers][kNofDisks][4];
399  TGeoCombiTrans *DiskLayersCombi [kNofLayers][kNofDisks][4];
400  //------------------------------------------------------------------------------------------------
401  TGeoShape *HLayersShapeTube [NofHLayers][kNofDisks];
402  TGeoShape *HLayersShapeBox [NofHLayers][kNofDisks];
403  TGeoShape *HLayersShapePlate [NofHLayers][kNofDisks];
404  TGeoShape *HLayersShapeHT [NofHLayers][kNofDisks];
405  TGeoShape *HLayersShapeHTM [NofHLayers][kNofDisks];
406  TGeoShape *HLayersShapeHTD [NofHLayers][kNofDisks];
407  TGeoCompositeShape *HLayersShapecompos[NofHLayers][kNofDisks];
408  TGeoVolume *HLayersVolcomp [NofHLayers][kNofDisks];
409  TGeoTranslation *HLayersTranstA [NofHLayers][kNofDisks];
410  TGeoTranslation *HLayersTranstB [NofHLayers][kNofDisks];
411  TGeoTranslation *HLayersTranstC [NofHLayers][kNofDisks];
412  TGeoTranslation *HLayersTranstD [NofHLayers][kNofDisks];
413  TGeoTranslation *HLayersTranstE [NofHLayers][kNofDisks];
414  TGeoTranslation *HLayersTranstF [NofHLayers][kNofDisks];
415  TGeoRotation *HLayersRotrA [NofHLayers][kNofDisks];
416  TGeoShape *HLayersShape [NofHLayers][kNofDisks];
417  TGeoVolume *HLayersVol [NofHLayers][kNofDisks];
418  TGeoTranslation *HLayersTrans [NofHLayers][kNofDisks];
419  TGeoCombiTrans *HLayersCombi [NofHLayers][kNofDisks];
420  //----------------------------------------------------------------------------------------------
421  TString outParFileName = Form("%s/macro/params/gem_1Station_first_realistic_v1.digi.par",vmcWorkdir.Data());
422 
423  cout << "parameter file = \"" << outParFileName.Data() << "\"" << endl;
424 
425  ofstream pout(outParFileName.Data());
426  pout.setf(ios::fixed);
427 
428  pout << "#################################################################" << endl;
429  pout << "# Digitization parameters for GEM " << endl;
430  pout << "# with 1 Station " << endl;
431  pout << "# Format: " << endl;
432  pout << "# Description of parameters: " << endl;
433  pout << "# [PndGemDetectors] " << endl;
434  pout << "# parameters:d station_number, ZPos, rotation_angle, number_of_sensors, \\" << endl;
435  pout << "# sensor_number, sensor_type, pos_x, pos_y, pos_z, rotAngle, inn_rad, out_rad, thick, str_ang_0, str_ang_1, barWidth, pitch_0, pitch_1, \\" << endl;
436  pout << "# sensor_number, ...." << endl;
437  pout << "# station_number, ..." << endl;
438  pout << "#################################################################" << endl;
439  pout << "[PndGemDetectors]" << setprecision(4) << endl;
440 
441  pout << "parameters:Double_t \\" << endl;
442 
443  for ( Int_t istat = 0 ; istat < kNofDisks ; istat++ ) {
444 
445  pout << " " << istat+1 << ", "
446  << setw(9) << kDiskZPosition[istat]
447  << ", 0.0, " << 2 << ", \\" << endl;
448  //-----------------------------------GEM Disk------------------------------------------------------------------------------------------------------
449  DiskShape[istat] = new TGeoTube (Form("disk%dshape",istat+1),kDiskVolInnerRadius[istat],kDiskVolOuterRadius[istat],kHalfStationThickness);
450  DiskVol [istat] = new TGeoVolume(Form("Gem_Disk%d_Volume",istat+1),DiskShape[istat],gGeoMan->GetMedium("GEMmixture"));
451  DiskTrans[istat] = new TGeoTranslation(0.,0.,kDiskZPosition[istat]);
452  cout << "station " << kDiskVolInnerRadius[istat] << " " << kDiskVolOuterRadius[istat] << " at " << kDiskZPosition[istat] << endl;
453  DiskCombi[istat] = new TGeoCombiTrans(*DiskTrans[istat],*dummyrot);
454  DiskCombi[istat]->SetName(Form("Gem_Disk%d_Volume",istat+1));
455  DiskCombi[istat]->RegisterYourself();
456  DiskVol[istat]->SetLineColor(kYellow);
457  //------------------------------------------------------------------------------------------------------------------------------------------
458  //------------------------- Gas container Ring Bottom -------------------------------------------------------------------------------------
459  carbonRingShape[istat] = new TGeoTube (Form("carbonRing%dshape",istat+1),carbonRingInnerRadius[istat],carbonRingOuterRadius[istat],carbonRingHalfThickness);
460  carbonRingVol [istat] = new TGeoVolume(Form("Gem_carbonRing%d_Volume",istat+1),carbonRingShape[istat],gGeoMan->GetMedium("carbon"));
461  carbonRingTrans[istat] = new TGeoTranslation(0.,0.,-1.5);
462  cout << "carbonRing " << carbonRingInnerRadius[istat] << " " << carbonRingOuterRadius[istat] << endl;
463  carbonRingCombi[istat] = new TGeoCombiTrans(*carbonRingTrans[istat],*dummyrot);
464  carbonRingCombi[istat]->SetName(Form("Gem_carbonRing%d_Volume",istat+1));
465  carbonRingCombi[istat]->RegisterYourself();
466  carbonRingVol[istat]->SetLineColor(kMagenta);
467  //----------------------------------------------------------------------------------------------------------------------------------------
468  DiskVol[istat]->AddNode(carbonRingVol [istat],0,carbonRingCombi[istat]);
469  //------------------------------------------------------------------------------------------------------------------------------------------
470  //------------------------- Gas container Ring top -----------------------------------------------------------------------------------------
471  copperRingShape[istat] = new TGeoTube (Form("copperRing%dshape",istat+1),copperRingInnerRadius[istat],copperRingOuterRadius[istat],copperRingHalfThickness);
472  copperRingVol [istat] = new TGeoVolume(Form("Gem_copperRing%d_Volume",istat+1),copperRingShape[istat],gGeoMan->GetMedium("copper"));
473  copperRingTrans[istat] = new TGeoTranslation(0.,0.,3.75);
474  cout << "copperRing " << copperRingInnerRadius[istat] << " " << copperRingOuterRadius[istat] << endl;
475  copperRingCombi[istat] = new TGeoCombiTrans(*copperRingTrans[istat],*dummyrot);
476  copperRingCombi[istat]->SetName(Form("Gem_copperRing%d_Volume",istat+1));
477  copperRingCombi[istat]->RegisterYourself();
478  copperRingVol[istat]->SetLineColor(kYellow-5);
479  //----------------------------------------------------------------------------------------------------------------------------------------
480  DiskVol[istat]->AddNode(copperRingVol [istat],0,copperRingCombi[istat]);
481  //----------------------------------------------------------------------------------------------------------------------------------------
482  //----------------------segments for electronics --------------------------------------------------------------------------------------------------------
483  Double_t segmentAngularSize = SegmentHalfThickness/AlRingInnerRadius[istat]*360.;
484  for ( Int_t isegm = 0 ; isegm < NofSegments ; isegm++ ) {
485  cout << " Segment " << isegm << " with name " << newsegment[isegm] << " will be put at " << FirstSegmentAngle+isegm*SegmentDeltaAngle << " (in fact from " << FirstSegmentAngle+isegm*SegmentDeltaAngle-segmentAngularSize/2. << " to " << FirstSegmentAngle+isegm*SegmentDeltaAngle+segmentAngularSize/2. << ")" << endl;
486  AlRingShape[istat][isegm] = new TGeoTubeSeg (Form("AlRing%dshape",istat+1,isegm+1),AlRingInnerRadius[istat],AlRingOuterRadius[istat],AlRingHalfThickness,FirstSegmentAngle+isegm*SegmentDeltaAngle-segmentAngularSize/2.,FirstSegmentAngle+isegm*SegmentDeltaAngle+segmentAngularSize/2. );
487  AlRingVol[istat][isegm] = new TGeoVolume (Form("Gem_AlRing%d_Volume",istat+1,isegm+1),AlRingShape[istat][isegm],gGeoMan->GetMedium("aluminium"));
488  AlRingTrans[istat][isegm] = new TGeoTranslation (0.,0.,3.75);
489  cout << "AlRing " << AlRingInnerRadius[istat] << " " << AlRingOuterRadius[istat] << endl;
490  AlRingCombi[istat][isegm] = new TGeoCombiTrans (*AlRingTrans[istat][isegm],*dummyrot);
491  AlRingCombi[istat][isegm]->SetName(Form("Gem_AlRing%d_Volume",istat+1,isegm+1));
492  AlRingCombi[istat][isegm]->RegisterYourself();
493  AlRingVol[istat][isegm]->SetLineColor(kCyan-9);
494  //-----------------------------------------------------------------------------------------------------------------------------------------
495  DiskVol[istat]->AddNode(AlRingVol[istat][isegm],0,AlRingCombi[istat][isegm]);
496  //------------------------------------------------------------------------------------------------------------------------------------------
497  }
498  //----------------------------------------------------------------------------------------------------------------------------------------
499  //---------------------- electronic module --------------------------------------------------------------------------------------------------------
500  Double_t modulesegmentAngularSize = moduleSegmentHalfThickness/moduleRingInnerRadius[istat]*360.;
501  for ( Int_t imodulesegm = 0 ; imodulesegm < NofmoduleSegments ; imodulesegm++ ) {
502  cout << " moduleSegment " << imodulesegm << " with name " << newmodulesegment[imodulesegm] << " will be put at " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle << " (in fact from " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle-modulesegmentAngularSize/2. << " to " << FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle+modulesegmentAngularSize/2. << ")" << endl;
503  moduleRingShape[istat][imodulesegm] = new TGeoTubeSeg (Form("moduleRing%dshape",istat+1,imodulesegm+1),moduleRingInnerRadius[istat],moduleRingOuterRadius[istat],moduleRingHalfThickness,FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle-modulesegmentAngularSize/2.,FirstmoduleSegmentAngle+imodulesegm*moduleSegmentDeltaAngle+modulesegmentAngularSize/2. );
504  moduleRingVol[istat][imodulesegm] = new TGeoVolume (Form("Gem_moduleRing%d_Volume",istat+1,imodulesegm+1),moduleRingShape[istat][imodulesegm],gGeoMan->GetMedium("copper"));
505  moduleRingTrans[istat][imodulesegm] = new TGeoTranslation (0.,0.,3.65);
506  cout << "moduleRing " << moduleRingInnerRadius[istat] << " " << moduleRingOuterRadius[istat] << endl;
507  moduleRingCombi[istat][imodulesegm] = new TGeoCombiTrans (*moduleRingTrans[istat][imodulesegm],*dummyrot);
508  moduleRingCombi[istat][imodulesegm]->SetName(Form("Gem_moduleRing%d_Volume",istat+1,imodulesegm+1));
509  moduleRingCombi[istat][imodulesegm]->RegisterYourself();
510  moduleRingVol[istat][imodulesegm]->SetLineColor(kGreen);
511  //-----------------------------------------------------------------------------------------------------------------------------------------
512  DiskVol[istat]->AddNode(moduleRingVol[istat][imodulesegm],0,moduleRingCombi[istat][imodulesegm]);
513  //------------------------------------------------------------------------------------------------------------------------------------------
514  }
515  //---------------------------------Cooling Ring-------------------------------------------------------------------------------------------------------------
516  AlumiRingShape[istat] = new TGeoTube (Form("AlumiRing%dshape",istat+1),AlumiRingInnerRadius[istat],AlumiRingOuterRadius[istat],AlumiRingHalfThickness);
517  AlumiRingVol [istat] = new TGeoVolume(Form("Gem_AlumiRing%d_Volume",istat+1),AlumiRingShape[istat],gGeoMan->GetMedium("aluminium"));
518  AlumiRingTrans[istat] = new TGeoTranslation(0.,0.,3.75);
519  cout << "AlumiRing " << AlumiRingInnerRadius[istat] << " " << AlumiRingOuterRadius[istat] << endl;
520  AlumiRingCombi[istat] = new TGeoCombiTrans(*AlumiRingTrans[istat],*dummyrot);
521  AlumiRingCombi[istat]->SetName(Form("Gem_AlumiRing%d_Volume",istat+1));
522  AlumiRingCombi[istat]->RegisterYourself();
523  AlumiRingVol[istat]->SetLineColor(kCyan-9);
524  //----------------------------------------------------------------------------------------------------------------------------------------
525  DiskVol[istat]->AddNode(AlumiRingVol[istat],0,AlumiRingCombi[istat]);
526  //----------------------------------------------------------------------------------------------------------------------------------------
527  //------------------------- GEM tracker cover electronic module -----------------------------------------------------------------------------------------
528  coverRingShape[istat] = new TGeoTube (Form("coverRing%dshape",istat+1),coverRingInnerRadius[istat],coverRingOuterRadius[istat],coverRingHalfThickness);
529  coverRingVol [istat] = new TGeoVolume(Form("Gem_coverRing%d_Volume",istat+1),coverRingShape[istat],gGeoMan->GetMedium("GlassFiber"));
530  coverRingTrans[istat] = new TGeoTranslation(0.,0.,7.75);
531  cout << "coverRing " << coverRingInnerRadius[istat] << " " << coverRingOuterRadius[istat] << endl;
532  coverRingCombi[istat] = new TGeoCombiTrans(*coverRingTrans[istat],*dummyrot);
533  coverRingCombi[istat]->SetName(Form("Gem_coverRing%d_Volume",istat+1));
534  coverRingCombi[istat]->RegisterYourself();
535  coverRingVol[istat]->SetLineColor(kGreen+3);
536  //----------------------------------------------------------------------------------------------------------------------------------------
537  DiskVol[istat]->AddNode(coverRingVol [istat],0,coverRingCombi[istat]);
538  //----------------------------------------------------------------------------------------------------------------------------------------
540  for ( Int_t jlay = 0 ; jlay < NofHLayers ; jlay++ ) {
541  cout << "doing Hlayers " << jlay << endl;
542 
543  HLayersShapeTube[jlay][istat] = new TGeoTube (Form("T%dT%s",istat+1,HLayersName[jlay].Data()),HInnerRadius[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
544  HLayersShapeHT[jlay][istat] = new TGeoTube (Form("H%dH%s",istat+1,HLayersName[jlay].Data()),0.0,4.60,HLayersThick[jlay]);
545  HLayersShapeHTM[jlay][istat] = new TGeoTube (Form("HTM%dHTM%s",istat+1,HLayersName[jlay].Data()),0.0,4.40,HLayersThick[jlay]+0.0002);
546  HLayersShapeHTD[jlay][istat] = new TGeoTube (Form("HTD%dHTD%s",istat+1,HLayersName[jlay].Data()),0.0,1.90,HLayersThick[jlay]+0.0001);
547  cout << "Tube name is " << HLayersShapeTube[jlay][istat]->GetName() << endl;
548 
549  HLayersShapeBox[jlay][istat] = new TGeoBBox(Form("B%dB%s",istat+1,HLayersName[jlay].Data()),HXBoxWidth[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
550  HLayersShapePlate[jlay][istat] = new TGeoBBox(Form("P%dP%s",istat+1,HLayersName[jlay].Data()),HXPlateWidth[jlay][istat],HYPlateWidth[jlay][istat],HLayersThick[jlay]+0.0001);
551 
552  HLayersTranstA[jlay][istat] = new TGeoTranslation("tA",HTX,HTY[jlay][istat],HTZ);
553  HLayersTranstA[jlay][istat] ->RegisterYourself();
554  HLayersTranstB[jlay][istat] = new TGeoTranslation("tB",HTX,-HTY[jlay][istat],HTZ);
555  HLayersTranstB[jlay][istat] ->RegisterYourself();
556  HLayersTranstC[jlay][istat] = new TGeoTranslation("tC",HTX,HTY[jlay][istat]+9.0,HTZ);
557  HLayersTranstC[jlay][istat] ->RegisterYourself();
558  HLayersTranstD[jlay][istat] = new TGeoTranslation("tD",HTX,HTY[jlay][istat]-9.0,HTZ);
559  HLayersTranstD[jlay][istat] ->RegisterYourself();
560  HLayersTranstE[jlay][istat] = new TGeoTranslation("tE",HTX,-HTY[jlay][istat]+9.0,HTZ);
561  HLayersTranstE[jlay][istat] ->RegisterYourself();
562  HLayersTranstF[jlay][istat] = new TGeoTranslation("tF",HTX,-HTY[jlay][istat]-9.0,HTZ);
563  HLayersTranstF[jlay][istat] ->RegisterYourself();
564 
565  HLayersShapecompos[jlay][istat] = new TGeoCompositeShape(Form("compos%dcompos%s",istat+1,HLayersName[jlay].Data()),
566  Form("T%dT%s+B%dB%s+H%dH%s-HTM%dHTM%s-(P%dP%s:tA)-(HTD%dHTD%s:tC)-(HTD%dHTD%s:tD)-(P%dP%s:tB)-(HTD%dHTD%s:tE)-(HTD%dHTD%s:tF)",
567  istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
568  istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
569  istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data()));
570 
571  cout << "composite name is " << HLayersShapecompos[jlay][istat] -> GetName() << endl;
572 
573  TString HlayersMaterial = HLayersName[jlay].Data();
574  HlayersMaterial.Remove(0,HlayersMaterial.Last('_')+1);
575  cout << "THE HMATERIAL IS \"" << HlayersMaterial.Data() << "\"" << endl;
576  HLayersVolcomp[jlay][istat] = new TGeoVolume(Form("GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()),HLayersShapecompos[jlay][istat],gGeoMan->GetMedium(HlayersMaterial.Data()));
577  cout << "COMP name is " << HLayersVolcomp[jlay][istat] -> GetName() << endl;
578  cout << "Hlayersmaterial = " << HlayersMaterial.Data() << endl;
579 
580  if ( HlayersMaterial.Contains("carbon" ) )
581  HLayersVolcomp[jlay][istat]->SetLineColor(kPink);
582  if ( HlayersMaterial.Contains("GlassFiber" ) )
583  HLayersVolcomp[jlay][istat]->SetLineColor(kGreen+3);
584 
585  cout << "STATION " << istat << " LAYER " << jlay << " POSITION " << HZPosition[jlay][istat] << endl;
586 
587  HLayersTrans[jlay][istat] = new TGeoTranslation(0.0,0.0,HZPosition[jlay][istat]);
588  HLayersCombi[jlay][istat] = new TGeoCombiTrans(*HLayersTrans[jlay][istat],*dummyrot);
589  HLayersCombi[jlay][istat]->SetName(Form("GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()));
590  HLayersCombi[jlay][istat]->RegisterYourself();
591  DiskVol[istat]->AddNode( HLayersVolcomp[jlay][istat],0,HLayersCombi[jlay][istat] );
592  }
594 
595  Double_t layerPosition = firstLayerOffset;//-kLayerThick[0]/2.;
596 
597  Int_t sensorNumber = 0;
598 
599  for ( Int_t ilay = 0 ; ilay < kNofLayers ; ilay++ ) {
600  cout << "doing layer " << ilay << endl;
601  layerPosition += kLayerThick[ilay]/2.;
602  if ( kLayerName[ilay].Contains("space") && kLayerThick[ilay] > 0.7 ) {
603  cout << "***** THE THICK SPACE LAYER IS AT " << layerPosition << endl;
604  }
605  if ( kLayerName[ilay].Contains("space") && kLayerName[ilay].Length() == 5 ) {
606  layerPosition += kLayerThick[ilay]/2.;
607  continue;
608  }
609 
610  cout << " HAHA, got layer " << kLayerName[ilay].Data() << endl;
611 
612  Double_t segPhiSpan = 360./(Double_t(kDiskNFoils[istat]));
613  Double_t segBegin = 90.;
614  cout << "will do loop over segments" << endl;
615  for ( Int_t iseg = 0 ; iseg < 1 ; iseg++ ) {
616  cout << "segment " << iseg << endl;
617  DiskLayersShapeA[ilay][istat][iseg] = new TGeoTube(Form("disk%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
618  kDiskInnerRadius[ilay][istat],kDiskOuterRadius[ilay][istat],
619  kLayerThick[ilay]/2.);
620  DiskLayersShapeB[ilay][istat][iseg] = new TGeoBBox (Form("robo%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
621  kMiddleROBarHfTh[istat]/2.,
622  kDiskOuterRadius[ilay][istat],
623  kLayerThick[ilay]);
624  DiskLayersSubtr[ilay][istat][iseg] = new TGeoSubtraction(DiskLayersShapeA[ilay][istat][iseg],
625  DiskLayersShapeB[ilay][istat][iseg]);
626 
627 
628  DiskLayersShapeC[ilay][istat][iseg] = new TGeoCompositeShape(Form("comp%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
629  DiskLayersSubtr[ilay][istat][iseg]);
630  segBegin += segPhiSpan;
631  cout << " segBegin " << segBegin << endl;
632 
633  DiskLayersShapeHole[ilay][istat][iseg] = new TGeoTube(Form("Hole%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),0.0,3.80,kLayerThick[ilay]+0.001);
634 
635  DiskLayersTranshA[ilay][istat][iseg] = new TGeoTranslation("hA",HoleTX,HoleTY,HoleTZ);
636  DiskLayersTranshA[ilay][istat][iseg] ->RegisterYourself();
637  DiskLayersTranshB[ilay][istat][iseg] = new TGeoTranslation("hB",HoleTX,-HoleTY,HoleTZ);
638  DiskLayersTranshB[ilay][istat][iseg] ->RegisterYourself();
639 
640  DiskLayersShapecompos[ilay][istat][iseg] = new TGeoCompositeShape(Form("compos%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
641  Form("comp%dseg%d%sshape-(Hole%dseg%d%sshape:hA)-(Hole%dseg%d%sshape:hB)",
642  istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data()));
643 
644 
645  TString layerMaterial = kLayerName[ilay].Data();
646  layerMaterial.Remove(0,layerMaterial.Last('_')+1);
647  cout << "THE MATERIAL IS \"" << layerMaterial.Data() << "\"" << endl;
648  DiskLayersVol[ilay][istat][iseg] = new TGeoVolume(Form("Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()),
649  DiskLayersShapecompos[ilay][istat][iseg],
650  gGeoMan->GetMedium(layerMaterial.Data()));
651 
652 
653  cout << "layer material = " << layerMaterial.Data() << endl;
654  if ( layerMaterial.Contains("air" ) )
655  DiskLayersVol[ilay][istat][iseg]->SetLineColor(kGray+1);
656  if ( layerMaterial.Contains("copper" ) )
657  DiskLayersVol[ilay][istat][iseg]->SetLineColor(kOrange+1);
658  if ( layerMaterial.Contains("kapton" ) )
659  DiskLayersVol[ilay][istat][iseg]->SetLineColor(kOrange+4);
660  if ( layerMaterial.Contains("aluminium" ) )
661  DiskLayersVol[ilay][istat][iseg]->SetLineColor(kCyan-9);
662  if ( layerMaterial.Contains("GEMmixture" ) )
663  DiskLayersVol[ilay][istat][iseg]->SetLineColor(kYellow);
664  if ( layerMaterial.Contains("carbon" ) )
665  DiskLayersVol[jlay][istat][iseg]->SetLineColor(kPink);
666  if ( layerMaterial.Contains("GlassFiber" ) )
667  DiskLayersVol[jlay][istat][iseg]->SetLineColor(kGreen+3);
668 
669  DiskLayersTrans[ilay][istat][iseg] = new TGeoTranslation(0.,0.,layerPosition);
670  DiskLayersCombi[ilay][istat][iseg] = new TGeoCombiTrans(*DiskLayersTrans[ilay][istat][iseg],*dummyrot);
671  DiskLayersCombi[ilay][istat][iseg]->SetName(Form("Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()));
672  DiskLayersCombi[ilay][istat][iseg]->RegisterYourself();
673  DiskVol[istat]->AddNode(DiskLayersVol[ilay][istat][iseg],0,DiskLayersCombi[ilay][istat][iseg]);
674 
675  }
676  //-------------------------------------------------------------------------------------------------------------------------------
677  cout << "volume " << kLayerName[ilay] << " from "
678  << setprecision(10) << kDiskZPosition[istat]+layerPosition-kLayerThick[ilay]/2. << " to "
679  << setprecision(10) << kDiskZPosition[istat]+layerPosition+kLayerThick[ilay]/2. << endl;
680 
681  if ( kLayerName[ilay].Contains("Gem") && kLayerName[ilay].Contains("Sensor") ) {
682  Double_t newRadius = kDiskInnerRadius[ilay][istat];
683  Double_t nofStrips = 0;
684 
685  cout << "rad = " << kDiskInnerRadius[ilay][istat] << " pitch = " << kSensorStripPitch[sensorNumber][0] << " for sensor " << sensorNumber << endl;
686  if ( kSensorStripType[sensorNumber] != 2 ) {
687  nofStrips = TMath::Ceil(2.*TMath::Pi()*kDiskInnerRadius[ilay][istat]/kSensorStripPitch[sensorNumber][0]);
688  newRadius = nofStrips*kSensorStripPitch[sensorNumber][0]/2./TMath::Pi();
689  }
690  cout << "!!!! " << istat << " " << ilay << " > there shall be " << nofStrips << " strips here so the radius should be " << newRadius << endl;
691  pout << " " << sensorNumber+1 << ", " << kSensorStripType[sensorNumber] << ", "
692  << setw(9) << 0. << ", "
693  << setw(9) << 0. << ", "
694  << setw(9) << kDiskZPosition[istat]+layerPosition << ", "
695  << setw(9) << 0. << ", "
696  << setw(9) << newRadius << ", "
697  << setw(9) << kDiskOuterRadius[ilay][istat] << ", "
698  << setw(9) << kLayerThick[ilay] << ", "
699  << setw(9) << kSensorStripAngle[sensorNumber][0] << ", "
700  // << setw(9) << kSensorStripAngle[sensorNumber][1] << ", "
701  << setw(9) << kMiddleROBarHfTh[istat] << ", "
702  << setw(9) << kSensorStripPitch[sensorNumber][0] << ", "
703  << setw(9) << kSensorStripPitch[sensorNumber][1] << ((istat==kNofDisks-1&&sensorNumber==1)?"":", \\")
704  << endl;
705  sensorNumber++;
706  }
707 
708  layerPosition += kLayerThick[ilay]/2.;
709  }
710 
711  SubunitVol->AddNode(DiskVol[istat],0,DiskCombi[istat]);
712 
713  }
714 
715  pout << "TrackFinderOnHits_ParThetaA: Double_t 59.4" << endl
716  << "TrackFinderOnHits_ParThetaB: Double_t -0.02" << endl
717  << "TrackFinderOnHits_ParTheta0: Double_t 56.1372" << endl
718  << "TrackFinderOnHits_ParTheta1: Double_t -0.000564362" << endl
719  << "TrackFinderOnHits_ParTheta2: Double_t -0.181828" << endl
720  << "TrackFinderOnHits_ParTheta3: Double_t 0.284289" << endl
721  << "TrackFinderOnHits_ParRadPhi0:Double_t 0.9944432" << endl
722  << "TrackFinderOnHits_ParRadPhi2:Double_t -0.000590706" << endl
723  << "TrackFinderOnHits_ParMat0: Double_t \\" << endl
724  << " -2.31333e-6, 0.00067035, 0.10173" << endl
725  << "TrackFinderOnHits_ParMat1: Double_t \\" << endl
726  << " -7.46844e-10, -6.6696e-7, 0.000736672" << endl
727  << "##########################################################################################" << flush;
729 
730 
731  top->AddNode(SubunitVol,0,new TGeoCombiTrans());
732 
733  gGeoMan->CloseGeometry();
734  top->Write();
735  fi->Close();
736  top->Draw("ogl");
737  pout.close();
738 
739  return 0;
740 }
TGeoRotation * dummyrot
FairGeoLoader * geoLoad
FairGeoMedia * Media
TGeoManager * gGeoMan
FairGeoMedium * CbmMediumCarbon
TGeoVolume * top
FairGeoMedium * CbmMediumAluminium
TGeoVolume * SubunitVol
FairGeoBuilder * geobuild
TFile * fi
Double_t
TString medium
FairGeoMedium * CbmMediumAir
FairGeoMedium * CbmMediumPWO
FairGeoInterface * geoFace
vDisk SetLineColor(colYellow)
Double_t Pi
TString outfile