14     const Int_t     kNofDisks = 3;   
 
   16     const Double_t  kDiskVolInnerRadius[kNofDisks]    = { 4.50,  4.50,  4.50  };   
 
   17     const Double_t  kDiskVolOuterRadius[kNofDisks]    = { 45.00, 56.00, 74.0  };   
 
   18     const Double_t  kDiskZPosition  [kNofDisks]    = { 119.40, 155.40, 188.50 };   
 
   21     const Int_t     kDiskNFoils     [kNofDisks]    = {  2  ,  2  ,  4  };   
 
   22     const Double_t  kMiddleROBarHfTh[kNofDisks]    = {  2.35,  2.35,  2.35 }; 
 
   23     const Double_t  kHalfStationThickness = 6.00;
 
   25     const Double_t carbonRingInnerRadius[kNofDisks]    = { 40.0, 51.0, 69.0 };
 
   26     const Double_t carbonRingOuterRadius[kNofDisks]    = { 40.2, 51.2, 69.2 };
 
   27     const Double_t carbonRingHalfThickness = 1.5;
 
   29     const Double_t copperRingInnerRadius[kNofDisks]    = { 39.9, 50.9, 68.9 };
 
   30     const Double_t copperRingOuterRadius[kNofDisks]    = { 40.1, 51.1, 69.1 };
 
   31     const Double_t copperRingHalfThickness = 3.75;
 
   33     const Double_t AlRingInnerRadius[kNofDisks]    = { 40.1, 51.1, 69.1 };
 
   34     const Double_t AlRingOuterRadius[kNofDisks]    = { 44.7, 55.7, 73.7 };
 
   35     const Double_t AlRingHalfThickness = 3.75;
 
   37     const Double_t  SegmentHalfThickness = 0.25; 
 
   38     const Int_t     NofSegments = 24;
 
   40     const Double_t  FirstSegmentAngle = 7.5;
 
   41     const TString   newsegment [NofSegments] = { 
"seg1" ,
"seg2" ,
"seg3" ,
"seg4" ,
"seg5" ,
"seg6" ,
"seg7" ,
"seg8" ,
 
   42                                                  "seg9" ,
"seg10",
"seg11",
"seg12",
"seg13",
"seg14",
"seg15",
"seg16",
 
   43                                                  "seg17",
"seg18",
"seg19",
"seg20",
"seg21",
"seg22",
"seg23",
"seg24"  };
 
   45     const Double_t moduleRingInnerRadius[kNofDisks]    = { 40.15, 51.15, 69.15 };
 
   46     const Double_t moduleRingOuterRadius[kNofDisks]    = { 44.65, 55.65, 73.65 };
 
   47     const Double_t moduleRingHalfThickness = 3.75;
 
   49     const Double_t  moduleSegmentHalfThickness = 1.30; 
 
   50     const Int_t     NofmoduleSegments = 24;
 
   52     const Double_t  FirstmoduleSegmentAngle = 0.0 ;
 
   53     const TString   newmodulesegment [NofmoduleSegments] = { 
"moduleseg1" ,
"moduleseg2" ,
"moduleseg3" ,
"moduleseg4" ,
"moduleseg5" ,
"moduleseg6" ,
"moduleseg7" ,
"moduleseg8" ,
 
   54                                                              "moduleseg9" ,
"moduleseg10",
"moduleseg11",
"moduleseg12",
"moduleseg13",
"moduleseg14",
"moduleseg15",
"moduleseg16",
 
   55                                                              "moduleseg17",
"moduleseg18",
"moduleseg19",
"moduleseg20",
"moduleseg21",
"moduleseg22",
"moduleseg23",
"moduleseg24"  };
 
   57     const Double_t AlumiRingInnerRadius[kNofDisks]    = { 44.7, 55.7, 73.7 };
 
   58     const Double_t AlumiRingOuterRadius[kNofDisks]    = { 45.0, 56.0, 74.0 };
 
   59     const Double_t AlumiRingHalfThickness = 3.75;
 
   61     const Double_t coverRingInnerRadius[kNofDisks]    = { 39.9, 50.9, 68.9 };
 
   62     const Double_t coverRingOuterRadius[kNofDisks]    = { 45.0, 56.0, 74.0 };
 
   63     const Double_t coverRingHalfThickness = 0.2;
 
   67     const Double_t rcopperbarHalfThickness = 17.0;
 
   71     const Double_t lcopperbarHalfThickness = 16.0;
 
   74     const Int_t     kNofLayers = 47;
 
   75     const TString   kLayerName [kNofLayers] = { 
"window_foil_out_aluminium",
"WindowF_kapton",               
 
   77                                                 "WindowF_aluminium",
"CathodeF_kapton",
"CathodeF_aluminium", 
 
   79                                                 "Gem1_Sensor_GEMmixture",      
 
   81                                                 "Gem1F_copper",
"Gem1_kapton",
"Gem1B_copper",             
 
   83                                                 "Gem2F_copper",
"Gem2_kapton",
"Gem2B_copper",                                   
 
   85                                                 "Gem3F_copper",
"Gem3_kapton",
"Gem3B_copper",                                   
 
   88                                                 "PadF_copper",
"Pad_kapton",
"PadB_copper", 
 
   91                                                 "Gem4F_copper",
"Gem4_kapton",
"Gem4B_copper",             
 
   93                                                 "Gem5F_copper",
"Gem5_kapton",
"Gem5B_copper",                                  
 
   95                                                 "Gem6F_copper",
"Gem6_kapton",
"Gem6B_copper", 
 
   97                                                 "Gem6_Sensor_GEMmixture",    
 
   99                                                 "CathodeB_aluminium",
"CathodeB_kapton",
"WindowB_aluminium",                                   
 
  101                                                 "WindowB_kapton",
"window_foil_in_aluminium" };               
 
  102     const Double_t kLayerThick[kNofLayers] = {  0.0001,   0.0007,                                                              
 
  104                                                 0.0001,   0.0007,   0.0001,                                                    
 
  108                                                 0.0005,   0.0050,   0.0005,                                                    
 
  110                                                 0.0005,   0.0050,   0.0005,                                                    
 
  112                                                 0.0005,   0.0050,   0.0005,                                                    
 
  118                                                 0.0005,   0.0050,   0.0005,                                                    
 
  120                                                 0.0005,   0.0050,   0.0005,                                                    
 
  122                                                 0.0005,   0.0050,   0.0005,                                                    
 
  126                                                 0.0001,   0.0007,  0.0001,                                                     
 
  129    const Double_t kDiskOuterRadius[kNofLayers][kNofDisks] = {  38.95,  49.95,  67.95,      39.40,  50.40,  68.40,
 
  131                                                                38.45,  49.45,  67.45,      39.40,  50.40,  68.40,     38.45, 49.45, 67.45,
 
  135                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,     38.10,  49.45, 67.45,
 
  137                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,     38.10,  49.45, 67.45,
 
  139                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,     38.10,  49.45, 67.45,
 
  142                                                                44.90,  55.90,  73.90,      44.90,  55.90,  73.90,    44.90,  55.90, 73.90,
 
  145                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,    38.10,  49.45, 67.45,
 
  147                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,    38.10,  49.45, 67.45,
 
  149                                                                38.10,  49.45,  67.45,      39.05,  50.40,  68.40,    38.10,  49.45, 67.45,
 
  153                                                                38.45,  49.45,  67.45,      39.40,  50.40,  68.40,    38.45,  49.45, 67.45,
 
  155                                                                39.40,  50.40,  68.40,      38.95, 49.45, 67.95  };
 
  156    const Double_t kDiskInnerRadius[kNofLayers][kNofDisks] = {  4.50,   4.50,   4.50,       4.50,  4.50,   4.50,
 
  158                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  162                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  164                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  166                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  169                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  172                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  174                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  176                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  180                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50,      4.50,   4.50,   4.50,
 
  182                                                                4.50,   4.50,   4.50,       4.50,  4.50,   4.50  };
 
  189     const Int_t     NofHLayers = 14;
 
  190     const TString   HLayersName [NofHLayers] = {  
"windowF_ring_carbon",             
 
  191                                                   "cathodeF_ring_GlassFiber",         
 
  192                                                   "gem_ring1_GlassFiber",
 
  193                                                   "gem_ring2_GlassFiber",           
 
  194                                                   "gem_ring3_GlassFiber",    
 
  195                                                   "gem_ring4_GlassFiber",                 
 
  196                                                   "padplaneF_support_GlassFiber",
 
  197                                                   "padplaneB_support_GlassFiber",
 
  198                                                   "gem_ring5_GlassFiber",
 
  199                                                   "gem_ring6_GlassFiber",           
 
  200                                                   "gem_ring7_GlassFiber",                                  
 
  201                                                   "gem_ring8_GlassFiber",                                   
 
  202                                                   "cathodeB_ring_GlassFiber",                                 
 
  203                                                   "windowB_ring_carbon"  };               
 
  204     const Double_t HLayersThick[NofHLayers] =  {    1.00,                                               
 
  218     const Double_t  HZPosition[NofHLayers][kNofDisks] = {  -1.9426,   -1.9426,   -1.9426,  
 
  219                                                            -1.5417,   -1.5417,   -1.5417,
 
  220                                                            -0.1372,   -0.1372,   -0.1372,
 
  221                                                            -0.1262,   -0.1262,   -0.1262,
 
  222                                                            -0.1152,   -0.1152,   -0.1152,
 
  223                                                            -0.1042,   -0.1042,   -0.1042,
 
  224                                                            -0.0517,   -0.0517,   -0.0517,
 
  225                                                             0.0517,    0.0517,    0.0517, 
 
  226                                                             0.1042,    0.1042,    0.1042,
 
  227                                                             0.1152,    0.1152,    0.1152,
 
  228                                                             0.1262,    0.1262,    0.1262,
 
  229                                                             0.1372,    0.1372,    0.1372,
 
  230                                                             1.5417,    1.5417,    1.5417,
 
  231                                                             1.9426,    1.9426,    1.9426  }; 
 
  232    const Double_t HOuterRadius[NofHLayers][kNofDisks] = {  39.90,     50.90,      68.90,
 
  245                                                            39.90,     50.90,      68.90  };
 
  246     const Double_t HInnerRadius[NofHLayers][kNofDisks] = { 39.65,     50.65,      68.65,
 
  259                                                            39.65,     50.65,      68.65   };
 
  267    const Double_t  HTY[NofHLayers][kNofDisks] = { 25.0, 45.0, 65.0,   
 
  282   const Int_t    kSensorStripType [2]    = {  3  ,  2   };  
 
  284   const Double_t kSensorStripAngle[2][2] = {  0.  ,  0.  ,  0.  ,  0.  };
 
  285   const Double_t kSensorStripPitch[2][2] = {  0.04,  0.04,  0.04,  0.04}; 
 
  289   for ( Int_t ilayer = 0 ; ilayer < kNofLayers ; ilayer++ ) {
 
  290     cout << kLayerName[ilayer].Data() << 
" -> " << kLayerThick[ilayer] << endl;
 
  291     firstLayerOffset += kLayerThick[ilayer];
 
  294   cout << 
"total thickness is " << firstLayerOffset << endl;
 
  295   firstLayerOffset = firstLayerOffset/2.;
 
  296   firstLayerOffset = -0.001*(TMath::Floor(1000.*firstLayerOffset));
 
  297   cout << 
"first layer offset is " << firstLayerOffset << endl;
 
  300   TString vmcWorkdir = getenv(
"VMCWORKDIR");
 
  302   TString outfile= 
"../../geometry/gem_3Stations_realistic_v1.root";
 
  305   TFile* 
fi = 
new TFile(outfile,
"RECREATE");  
 
  307   cout << 
"created output file" << endl;
 
  308   FairGeoLoader* 
geoLoad = 
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
 
  309   FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
 
  310   cout << 
"geoface setmediafile" << endl;
 
  311   geoFace->setMediaFile(
"../../geometry/media_pnd.geo");
 
  312   cout << 
"geoface readmedia" << endl;
 
  313   geoFace->readMedia();
 
  314   cout << 
"geoface print" << endl;
 
  316   cout << 
"geoface done" << endl;
 
  318   FairGeoMedia *
Media =  geoFace->getMedia();
 
  319   FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
 
  325   FairGeoMedium *CbmMediumCopper    = Media->getMedium(
"copper");
 
  326   FairGeoMedium *CbmMediumKapton    = Media->getMedium(
"kapton");
 
  327   FairGeoMedium *CbmMediumArCO2     = Media->getMedium(
"GEMmixture"); 
 
  328   FairGeoMedium *CbmMediumUranium   = Media->getMedium(
"uranium");
 
  329   FairGeoMedium *CbmMediumGlassFiber= Media->getMedium(
"GlassFiber");
 
  331   Int_t 
nmed=geobuild->createMedium(CbmMediumAir);
 
  332   nmed=geobuild->createMedium(CbmMediumPWO);
 
  333   nmed=geobuild->createMedium(CbmMediumCarbon);
 
  334   nmed=geobuild->createMedium(CbmMediumAluminium);
 
  335   nmed=geobuild->createMedium(CbmMediumCopper);
 
  336   nmed=geobuild->createMedium(CbmMediumKapton);
 
  337   nmed=geobuild->createMedium(CbmMediumArCO2);
 
  338   nmed=geobuild->createMedium(CbmMediumUranium);
 
  339   nmed=geobuild->createMedium(CbmMediumGlassFiber);
 
  342   TGeoManager* 
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
 
  344   TGeoVolume *
top = 
new TGeoVolumeAssembly(
"Gem");
 
  346   gGeoMan->SetTopVolume(top);
 
  348   cout << 
"-------------------------------------------------------------------" << endl;
 
  349   TList* mediaList = (TList*)gGeoMan->GetListOfMedia();
 
  351   cout << 
"media known: " << mediaList->GetEntries() << 
"." << endl;
 
  352   for ( Int_t itemp = 0 ; itemp < mediaList->GetEntries() ; itemp++ ) {
 
  353     TGeoMedium* 
medium = (TGeoMedium*)mediaList->At(itemp);
 
  354     cout << 
"medium " << itemp << 
" name is " << medium->GetName() << endl;
 
  356   cout << 
"-------------------------------------------------------------------" << endl;
 
  358   TGeoRotation* 
dummyrot = 
new TGeoRotation();
 
  360   TGeoVolumeAssembly* 
SubunitVol = 
new TGeoVolumeAssembly(
"Gem_Disks");
 
  363    TGeoShape          *DiskShape[kNofDisks];
 
  364    TGeoVolume         *DiskVol  [kNofDisks];
 
  365    TGeoTranslation    *DiskTrans[kNofDisks];
 
  366    TGeoCombiTrans     *DiskCombi[kNofDisks];
 
  368    TGeoShape          *carbonRingShape[kNofDisks];
 
  369    TGeoVolume         *carbonRingVol  [kNofDisks];  
 
  370    TGeoTranslation    *carbonRingTrans[kNofDisks];
 
  371    TGeoCombiTrans     *carbonRingCombi[kNofDisks];
 
  373    TGeoShape          *copperRingShape[kNofDisks];
 
  374    TGeoVolume         *copperRingVol  [kNofDisks];  
 
  375    TGeoTranslation    *copperRingTrans[kNofDisks];
 
  376    TGeoCombiTrans     *copperRingCombi[kNofDisks];
 
  378    TGeoShape          *coverRingShape[kNofDisks];
 
  379    TGeoVolume         *coverRingVol  [kNofDisks];  
 
  380    TGeoTranslation    *coverRingTrans[kNofDisks];
 
  381    TGeoCombiTrans     *coverRingCombi[kNofDisks];
 
  383    TGeoShape          *tAcopperbarShape;
 
  384    TGeoVolume         *tAcopperbarVol  ;  
 
  385    TGeoTranslation    *tAcopperbarTrans;
 
  386    TGeoRotation       *tAcopperbarRot;
 
  387    TGeoCombiTrans     *tAcopperbarCombi;
 
  389    TGeoShape          *tBcopperbarShape;
 
  390    TGeoVolume         *tBcopperbarVol  ;  
 
  391    TGeoTranslation    *tBcopperbarTrans;
 
  392    TGeoRotation       *tBcopperbarRot;
 
  393    TGeoCombiTrans     *tBcopperbarCombi;
 
  395    TGeoShape          *dAcopperbarShape;
 
  396    TGeoVolume         *dAcopperbarVol  ;  
 
  397    TGeoTranslation    *dAcopperbarTrans;
 
  398    TGeoRotation       *dAcopperbarRot;
 
  399    TGeoCombiTrans     *dAcopperbarCombi;
 
  401    TGeoShape          *dBcopperbarShape;
 
  402    TGeoVolume         *dBcopperbarVol  ;  
 
  403    TGeoTranslation    *dBcopperbarTrans;
 
  404    TGeoRotation       *dBcopperbarRot;
 
  405    TGeoCombiTrans     *dBcopperbarCombi;
 
  407    TGeoShape          *AlRingShape[kNofDisks][NofSegments];
 
  408    TGeoVolume         *AlRingVol  [kNofDisks][NofSegments];  
 
  409    TGeoTranslation    *AlRingTrans[kNofDisks][NofSegments];
 
  410    TGeoCombiTrans     *AlRingCombi[kNofDisks][NofSegments];
 
  412    TGeoShape          *moduleRingShape[kNofDisks][NofmoduleSegments];
 
  413    TGeoVolume         *moduleRingVol  [kNofDisks][NofmoduleSegments];  
 
  414    TGeoTranslation    *moduleRingTrans[kNofDisks][NofmoduleSegments];
 
  415    TGeoCombiTrans     *moduleRingCombi[kNofDisks][NofmoduleSegments];
 
  417    TGeoShape          *AlumiRingShape[kNofDisks];
 
  418    TGeoVolume         *AlumiRingVol  [kNofDisks];  
 
  419    TGeoTranslation    *AlumiRingTrans[kNofDisks];
 
  420    TGeoCombiTrans     *AlumiRingCombi[kNofDisks];
 
  422    TGeoShape          *DiskLayersShapeA     [kNofLayers][kNofDisks][4]; 
 
  423    TGeoShape          *DiskLayersShapeB     [kNofLayers][kNofDisks][4];
 
  424    TGeoSubtraction    *DiskLayersSubtr      [kNofLayers][kNofDisks][4];
 
  425    TGeoShape          *DiskLayersShapeC     [kNofLayers][kNofDisks][4]; 
 
  426    TGeoShape          *DiskLayersShapeHole  [kNofLayers][kNofDisks][4];
 
  427    TGeoCompositeShape *DiskLayersShapecompos[kNofLayers][kNofDisks][4];
 
  428    TGeoVolume         *DiskLayersVol        [kNofLayers][kNofDisks][4];
 
  429    TGeoTranslation    *DiskLayersTranshA    [kNofLayers][kNofDisks][4];
 
  430    TGeoTranslation    *DiskLayersTranshB    [kNofLayers][kNofDisks][4];
 
  431    TGeoTranslation    *DiskLayersTrans      [kNofLayers][kNofDisks][4];
 
  432    TGeoCombiTrans     *DiskLayersCombi      [kNofLayers][kNofDisks][4];
 
  434    TGeoShape            *HLayersShapeTube  [NofHLayers][kNofDisks];
 
  435    TGeoShape            *HLayersShapeBox   [NofHLayers][kNofDisks];
 
  436    TGeoShape            *HLayersShapePlate [NofHLayers][kNofDisks];  
 
  437    TGeoShape            *HLayersShapeHT    [NofHLayers][kNofDisks];  
 
  438    TGeoShape            *HLayersShapeHTM   [NofHLayers][kNofDisks];  
 
  439    TGeoShape            *HLayersShapeHTD   [NofHLayers][kNofDisks]; 
 
  440    TGeoCompositeShape   *HLayersShapecompos[NofHLayers][kNofDisks]; 
 
  441    TGeoVolume           *HLayersVolcomp    [NofHLayers][kNofDisks];
 
  442    TGeoTranslation      *HLayersTranstA    [NofHLayers][kNofDisks];
 
  443    TGeoTranslation      *HLayersTranstB    [NofHLayers][kNofDisks];  
 
  444    TGeoTranslation      *HLayersTranstC    [NofHLayers][kNofDisks];  
 
  445    TGeoTranslation      *HLayersTranstD    [NofHLayers][kNofDisks];  
 
  446    TGeoTranslation      *HLayersTranstE    [NofHLayers][kNofDisks];  
 
  447    TGeoTranslation      *HLayersTranstF    [NofHLayers][kNofDisks];  
 
  448    TGeoRotation         *HLayersRotrA      [NofHLayers][kNofDisks];
 
  449    TGeoShape            *HLayersShape      [NofHLayers][kNofDisks];
 
  450    TGeoVolume           *HLayersVol        [NofHLayers][kNofDisks];
 
  451    TGeoTranslation      *HLayersTrans      [NofHLayers][kNofDisks];
 
  452    TGeoCombiTrans       *HLayersCombi      [NofHLayers][kNofDisks];
 
  454    TGeoShape            *RiddleShapeTubeA ; 
 
  455    TGeoShape            *RiddleShapeTubeB ; 
 
  456    TGeoShape            *RiddleShapeCone  ; 
 
  457    TGeoShape            *RiddleShapeTubeC ; 
 
  458    TGeoShape            *RiddleShapeTubeD ; 
 
  459    TGeoShape            *RiddleShapeTubeE ; 
 
  460    TGeoShape            *RiddleShapeTubeF ; 
 
  461    TGeoSubtraction      *RiddleSubtr      ;
 
  462    TGeoCompositeShape   *RiddleShapecompos;
 
  463    TGeoVolume           *RiddleVolcomp    ;
 
  464    TGeoTranslation      *RiddleTrans      ;
 
  465    TGeoTranslation      *RiddleTransTubeA ;
 
  466    TGeoTranslation      *RiddleTransCone  ;
 
  467    TGeoTranslation      *RiddleTransTubeC ;
 
  468    TGeoTranslation      *RiddleTransTubeD ;
 
  469    TGeoTranslation      *RiddleTransTubeE ;
 
  470    TGeoCombiTrans       *RiddleCombi      ;
 
  471    TGeoTranslation      *RiddleTransTubeF[4][100] ;
 
  472    TGeoCombiTrans       *RiddleCombiTranshole[4][100] ;
 
  473    TGeoRotation         *RiddleRothole[4][100] ;
 
  475   TString outParFileName = Form(
"%s/macro/params/gem_3Stations_realistic_v1.digi.par",vmcWorkdir.Data());
 
  478   cout << 
"parameter file = \"" << outParFileName.Data() << 
"\"" << endl;
 
  480   ofstream pout(outParFileName.Data());
 
  481   pout.setf(ios::fixed);
 
  483   pout << 
"#################################################################" << endl;
 
  484   pout << 
"# Digitization parameters for GEM                                " << endl;
 
  485   pout << 
"# with 3 Stations                                                " << endl;
 
  486   pout << 
"# Format:                                                        " << endl;
 
  487   pout << 
"# Description of parameters:                                     " << endl;
 
  488   pout << 
"# [PndGemDetectors]                                              " << endl;
 
  489   pout << 
"# parameters:d station_number, ZPos, rotation_angle, number_of_sensors, \\" << endl;
 
  490   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;
 
  491   pout << 
"#                 sensor_number, ...." << endl;
 
  492   pout << 
"#             station_number, ..." << endl;
 
  493   pout << 
"#################################################################" << endl;
 
  494   pout << 
"[PndGemDetectors]" << setprecision(4) << endl;
 
  496   pout << 
"parameters:Double_t \\" << endl;
 
  498   for ( Int_t istat = 0 ; istat < kNofDisks ; istat++ ) {
 
  500     pout << 
"                   " << istat+1 << 
",  " 
  501          << setw(9) << kDiskZPosition[istat]
 
  502          << 
",  0.0, " << 2 << 
", \\" << endl;
 
  504     DiskShape[istat] = 
new TGeoTube  (Form(
"disk%dshape",istat+1),kDiskVolInnerRadius[istat],kDiskVolOuterRadius[istat],kHalfStationThickness);
 
  505     DiskVol  [istat] = 
new TGeoVolume(Form(
"Gem_Disk%d_Volume",istat+1),DiskShape[istat],gGeoMan->GetMedium(
"GEMmixture"));
 
  506     DiskTrans[istat] = 
new TGeoTranslation(0.,0.,kDiskZPosition[istat]);
 
  507     cout << 
"station " << kDiskVolInnerRadius[istat] << 
" " << kDiskVolOuterRadius[istat] << 
" at " << kDiskZPosition[istat] << endl;
 
  508     DiskCombi[istat] = 
new TGeoCombiTrans(*DiskTrans[istat],*dummyrot); 
 
  509     DiskCombi[istat]->SetName(Form(
"Gem_Disk%d_Volume",istat+1));
 
  510     DiskCombi[istat]->RegisterYourself();
 
  511     DiskVol[istat]->SetLineColor(kYellow);
 
  514     carbonRingShape[istat] = 
new TGeoTube  (Form(
"carbonRing%dshape",istat+1),carbonRingInnerRadius[istat],carbonRingOuterRadius[istat],carbonRingHalfThickness);
 
  515     carbonRingVol  [istat] = 
new TGeoVolume(Form(
"Gem_carbonRing%d_Volume",istat+1),carbonRingShape[istat],gGeoMan->GetMedium(
"carbon"));
 
  516     carbonRingTrans[istat] = 
new TGeoTranslation(0.,0.,-1.5);
 
  517     cout << 
"carbonRing " << carbonRingInnerRadius[istat] << 
" " << carbonRingOuterRadius[istat] << endl;
 
  518     carbonRingCombi[istat] = 
new TGeoCombiTrans(*carbonRingTrans[istat],*dummyrot); 
 
  519     carbonRingCombi[istat]->SetName(Form(
"Gem_carbonRing%d_Volume",istat+1));
 
  520     carbonRingCombi[istat]->RegisterYourself();
 
  521     carbonRingVol[istat]->SetLineColor(kMagenta);
 
  523     DiskVol[istat]->AddNode(carbonRingVol  [istat],0,carbonRingCombi[istat]);
 
  526     copperRingShape[istat] = 
new TGeoTube  (Form(
"copperRing%dshape",istat+1),copperRingInnerRadius[istat],copperRingOuterRadius[istat],copperRingHalfThickness);
 
  527     copperRingVol  [istat] = 
new TGeoVolume(Form(
"Gem_copperRing%d_Volume",istat+1),copperRingShape[istat],gGeoMan->GetMedium(
"copper"));
 
  528     copperRingTrans[istat] = 
new TGeoTranslation(0.,0.,3.75);
 
  529     cout << 
"copperRing " << copperRingInnerRadius[istat] << 
" " << copperRingOuterRadius[istat] << endl;
 
  530     copperRingCombi[istat] = 
new TGeoCombiTrans(*copperRingTrans[istat],*dummyrot); 
 
  531     copperRingCombi[istat]->SetName(Form(
"Gem_copperRing%d_Volume",istat+1));
 
  532     copperRingCombi[istat]->RegisterYourself();
 
  533     copperRingVol[istat]->SetLineColor(kYellow-5);
 
  535     DiskVol[istat]->AddNode(copperRingVol  [istat],0,copperRingCombi[istat]);
 
  538       Double_t segmentAngularSize = SegmentHalfThickness/AlRingInnerRadius[istat]*360.;
 
  539            for ( Int_t isegm = 0 ; isegm < NofSegments ; isegm++ ) {
 
  540                  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;
 
  541            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. );
 
  542            AlRingVol[istat][isegm]   = 
new TGeoVolume (Form(
"Gem_AlRing%d_Volume",istat+1,isegm+1),AlRingShape[istat][isegm],gGeoMan->GetMedium(
"aluminium")); 
 
  543            AlRingTrans[istat][isegm] = 
new TGeoTranslation (0.,0.,3.75);
 
  544             cout << 
"AlRing " << AlRingInnerRadius[istat] << 
" " << AlRingOuterRadius[istat] << endl;
 
  545            AlRingCombi[istat][isegm] = 
new TGeoCombiTrans (*AlRingTrans[istat][isegm],*dummyrot);
 
  546            AlRingCombi[istat][isegm]->SetName(Form(
"Gem_AlRing%d_Volume",istat+1,isegm+1));
 
  547            AlRingCombi[istat][isegm]->RegisterYourself(); 
 
  548            AlRingVol[istat][isegm]->SetLineColor(kCyan-9);
 
  550            DiskVol[istat]->AddNode(AlRingVol[istat][isegm],0,AlRingCombi[istat][isegm]);
 
  555       Double_t modulesegmentAngularSize = moduleSegmentHalfThickness/moduleRingInnerRadius[istat]*360.;
 
  556            for ( Int_t imodulesegm = 0 ; imodulesegm < NofmoduleSegments ; imodulesegm++ ) {
 
  557                  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;
 
  558           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. );
 
  559           moduleRingVol[istat][imodulesegm]   = 
new TGeoVolume (Form(
"Gem_moduleRing%d_Volume",istat+1,imodulesegm+1),moduleRingShape[istat][imodulesegm],gGeoMan->GetMedium(
"copper")); 
 
  560           moduleRingTrans[istat][imodulesegm] = 
new TGeoTranslation (0.,0.,3.65);
 
  561             cout << 
"moduleRing " << moduleRingInnerRadius[istat] << 
" " << moduleRingOuterRadius[istat] << endl;
 
  562           moduleRingCombi[istat][imodulesegm] = 
new TGeoCombiTrans (*moduleRingTrans[istat][imodulesegm],*dummyrot);
 
  563           moduleRingCombi[istat][imodulesegm]->SetName(Form(
"Gem_moduleRing%d_Volume",istat+1,imodulesegm+1));
 
  564           moduleRingCombi[istat][imodulesegm]->RegisterYourself(); 
 
  565           moduleRingVol[istat][imodulesegm]->SetLineColor(kGreen);
 
  567           DiskVol[istat]->AddNode(moduleRingVol[istat][imodulesegm],0,moduleRingCombi[istat][imodulesegm]);
 
  571      AlumiRingShape[istat] = 
new TGeoTube  (Form(
"AlumiRing%dshape",istat+1),AlumiRingInnerRadius[istat],AlumiRingOuterRadius[istat],AlumiRingHalfThickness);
 
  572      AlumiRingVol  [istat] = 
new TGeoVolume(Form(
"Gem_AlumiRing%d_Volume",istat+1),AlumiRingShape[istat],gGeoMan->GetMedium(
"aluminium"));
 
  573      AlumiRingTrans[istat] = 
new TGeoTranslation(0.,0.,3.75);
 
  574      cout << 
"AlumiRing " << AlumiRingInnerRadius[istat] << 
" " << AlumiRingOuterRadius[istat] << endl;
 
  575      AlumiRingCombi[istat] = 
new TGeoCombiTrans(*AlumiRingTrans[istat],*dummyrot); 
 
  576      AlumiRingCombi[istat]->SetName(Form(
"Gem_AlumiRing%d_Volume",istat+1));
 
  577      AlumiRingCombi[istat]->RegisterYourself();
 
  578      AlumiRingVol[istat]->SetLineColor(kCyan-9);
 
  580      DiskVol[istat]->AddNode(AlumiRingVol[istat],0,AlumiRingCombi[istat]);
 
  583     coverRingShape[istat] = 
new TGeoTube  (Form(
"coverRing%dshape",istat+1),coverRingInnerRadius[istat],coverRingOuterRadius[istat],coverRingHalfThickness);
 
  584     coverRingVol  [istat] = 
new TGeoVolume(Form(
"Gem_coverRing%d_Volume",istat+1),coverRingShape[istat],gGeoMan->GetMedium(
"GlassFiber"));
 
  585     coverRingTrans[istat] = 
new TGeoTranslation(0.,0.,7.75);
 
  586     cout << 
"coverRing " << coverRingInnerRadius[istat] << 
" " << coverRingOuterRadius[istat] << endl;
 
  587     coverRingCombi[istat] = 
new TGeoCombiTrans(*coverRingTrans[istat],*dummyrot); 
 
  588     coverRingCombi[istat]->SetName(Form(
"Gem_coverRing%d_Volume",istat+1));
 
  589     coverRingCombi[istat]->RegisterYourself();
 
  590     coverRingVol[istat]->SetLineColor(kGreen+3);
 
  592     DiskVol[istat]->AddNode(coverRingVol  [istat],0,coverRingCombi[istat]);
 
  595     for ( Int_t jlay = 0 ; jlay < NofHLayers ; jlay++ ) {
 
  597     cout << 
"doing Hlayers " << jlay << endl;
 
  599     HLayersShapeTube[jlay][istat] = 
new TGeoTube  (Form(
"T%dT%s",istat+1,HLayersName[jlay].Data()),HInnerRadius[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
 
  600     HLayersShapeHT[jlay][istat]   = 
new TGeoTube  (Form(
"H%dH%s",istat+1,HLayersName[jlay].Data()),0.0,4.60,HLayersThick[jlay]);
 
  601     HLayersShapeHTM[jlay][istat]  = 
new TGeoTube  (Form(
"HTM%dHTM%s",istat+1,HLayersName[jlay].Data()),0.0,4.40,HLayersThick[jlay]+0.0002);
 
  602     HLayersShapeHTD[jlay][istat]  = 
new TGeoTube  (Form(
"HTD%dHTD%s",istat+1,HLayersName[jlay].Data()),0.0,1.90,HLayersThick[jlay]+0.0001);
 
  603                cout << 
"Tube name is " << HLayersShapeTube[jlay][istat]->GetName() << endl;
 
  605     HLayersShapeBox[jlay][istat]   = 
new TGeoBBox(Form(
"B%dB%s",istat+1,HLayersName[jlay].Data()),HXBoxWidth[jlay][istat],HOuterRadius[jlay][istat],HLayersThick[jlay]);
 
  606     HLayersShapePlate[jlay][istat] = 
new TGeoBBox(Form(
"P%dP%s",istat+1,HLayersName[jlay].Data()),HXPlateWidth[jlay][istat],HYPlateWidth[jlay][istat],HLayersThick[jlay]+0.0001);
 
  608     HLayersTranstA[jlay][istat] = 
new TGeoTranslation(
"tA",HTX,HTY[jlay][istat],HTZ);
 
  609      HLayersTranstA[jlay][istat] ->RegisterYourself();
 
  610     HLayersTranstB[jlay][istat] = 
new TGeoTranslation(
"tB",HTX,-HTY[jlay][istat],HTZ);
 
  611      HLayersTranstB[jlay][istat] ->RegisterYourself();
 
  612     HLayersTranstC[jlay][istat] = 
new TGeoTranslation(
"tC",HTX,HTY[jlay][istat]+9.0,HTZ);
 
  613      HLayersTranstC[jlay][istat] ->RegisterYourself();
 
  614     HLayersTranstD[jlay][istat] = 
new TGeoTranslation(
"tD",HTX,HTY[jlay][istat]-9.0,HTZ);
 
  615      HLayersTranstD[jlay][istat] ->RegisterYourself();
 
  616     HLayersTranstE[jlay][istat] = 
new TGeoTranslation(
"tE",HTX,-HTY[jlay][istat]+9.0,HTZ);
 
  617      HLayersTranstE[jlay][istat] ->RegisterYourself();
 
  618     HLayersTranstF[jlay][istat] = 
new TGeoTranslation(
"tF",HTX,-HTY[jlay][istat]-9.0,HTZ);
 
  619      HLayersTranstF[jlay][istat] ->RegisterYourself();
 
  621     HLayersShapecompos[jlay][istat] = 
new TGeoCompositeShape(Form(
"compos%dcompos%s",istat+1,HLayersName[jlay].Data()),
 
  622                                                              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)",
 
  623                                                                   istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
 
  624                                                                   istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data(),
 
  625                                                                   istat+1,HLayersName[jlay].Data(),istat+1,HLayersName[jlay].Data()));
 
  627       cout << 
"composite name is " <<  HLayersShapecompos[jlay][istat] -> GetName() << endl;
 
  629         TString HlayersMaterial = HLayersName[jlay].Data();
 
  630         HlayersMaterial.Remove(0,HlayersMaterial.Last(
'_')+1);
 
  631                 cout << 
"THE HMATERIAL IS \"" << HlayersMaterial.Data() << 
"\"" << endl;
 
  632                 HLayersVolcomp[jlay][istat] = 
new TGeoVolume(Form(
"GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()),HLayersShapecompos[jlay][istat],gGeoMan->GetMedium(HlayersMaterial.Data()));
 
  633                 cout << 
"COMP name is " <<  HLayersVolcomp[jlay][istat]  -> GetName() << endl;
 
  634         cout << 
"Hlayersmaterial = " << HlayersMaterial.Data() << endl;
 
  636           if ( HlayersMaterial.Contains(
"carbon" ) )
 
  638                 if ( HlayersMaterial.Contains(
"GlassFiber" ) )
 
  641                 cout << 
"STATION " << istat << 
" LAYER " << jlay << 
" POSITION " << HZPosition[jlay][istat] << endl;
 
  643                 HLayersTrans[jlay][istat] = 
new TGeoTranslation(0.0,0.0,HZPosition[jlay][istat]);
 
  644           HLayersCombi[jlay][istat] = 
new TGeoCombiTrans(*HLayersTrans[jlay][istat],*dummyrot); 
 
  645           HLayersCombi[jlay][istat]->SetName(Form(
"GEMHLayersCOMP%dGEMHLayersCOMP%s",istat+1,HLayersName[jlay].Data()));
 
  646           HLayersCombi[jlay][istat]->RegisterYourself();
 
  647           DiskVol[istat]->AddNode( HLayersVolcomp[jlay][istat],0,HLayersCombi[jlay][istat] );
 
  651     Double_t layerPosition = firstLayerOffset;
 
  653     Int_t sensorNumber = 0;
 
  655     for ( Int_t ilay = 0 ; ilay < kNofLayers ; ilay++ ) {
 
  656       cout << 
"doing layer " << ilay << endl;
 
  657       layerPosition += kLayerThick[ilay]/2.;
 
  658         if ( kLayerName[ilay].Contains(
"space") && kLayerThick[ilay] > 0.7 ) {
 
  659           cout << 
"***** THE THICK SPACE LAYER IS AT " << layerPosition << endl;
 
  661       if ( kLayerName[ilay].Contains(
"space") && kLayerName[ilay].Length() == 5 ) {
 
  662         layerPosition += kLayerThick[ilay]/2.;
 
  666                  cout << 
" HAHA, got layer " << kLayerName[ilay].Data() << endl;
 
  670       cout << 
"will do loop over segments" << endl;
 
  671       for ( Int_t iseg = 0 ; iseg < 1 ; iseg++ ) {
 
  672         cout << 
"segment " << iseg << endl;
 
  673         DiskLayersShapeA[ilay][istat][iseg] = 
new TGeoTube(Form(
"disk%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
 
  674                                                            kDiskInnerRadius[ilay][istat],kDiskOuterRadius[ilay][istat],
 
  675                                                            kLayerThick[ilay]/2.);
 
  676         DiskLayersShapeB[ilay][istat][iseg] = 
new TGeoBBox   (Form(
"robo%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
 
  677                                                               kMiddleROBarHfTh[istat]/2.,
 
  678                                                               kDiskOuterRadius[ilay][istat],
 
  680         DiskLayersSubtr[ilay][istat][iseg] = 
new TGeoSubtraction(DiskLayersShapeA[ilay][istat][iseg],
 
  681                                                                   DiskLayersShapeB[ilay][istat][iseg]);
 
  684         DiskLayersShapeC[ilay][istat][iseg] = 
new TGeoCompositeShape(Form(
"comp%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
 
  685                                                                      DiskLayersSubtr[ilay][istat][iseg]);
 
  686         segBegin += segPhiSpan;
 
  687         cout << 
" segBegin " << segBegin << endl;
 
  689         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);
 
  691          DiskLayersTranshA[ilay][istat][iseg] = 
new TGeoTranslation(
"hA",HoleTX,HoleTY,HoleTZ);
 
  692            DiskLayersTranshA[ilay][istat][iseg] ->RegisterYourself();
 
  693          DiskLayersTranshB[ilay][istat][iseg] = 
new TGeoTranslation(
"hB",HoleTX,-HoleTY,HoleTZ);
 
  694            DiskLayersTranshB[ilay][istat][iseg] ->RegisterYourself();
 
  696         DiskLayersShapecompos[ilay][istat][iseg] = 
new TGeoCompositeShape(Form(
"compos%dseg%d%sshape",istat+1,iseg+1,kLayerName[ilay].Data()),
 
  697                                                                           Form(
"comp%dseg%d%sshape-(Hole%dseg%d%sshape:hA)-(Hole%dseg%d%sshape:hB)",
 
  698                                                                                istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data(),istat+1,iseg+1,kLayerName[ilay].Data()));
 
  701         TString layerMaterial = kLayerName[ilay].Data();
 
  702         layerMaterial.Remove(0,layerMaterial.Last(
'_')+1);
 
  703                 cout << 
"THE MATERIAL IS \"" << layerMaterial.Data() << 
"\"" << endl;
 
  704         DiskLayersVol[ilay][istat][iseg] = 
new TGeoVolume(Form(
"Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()),
 
  705                                                             DiskLayersShapecompos[ilay][istat][iseg],
 
  706                                                             gGeoMan->GetMedium(layerMaterial.Data()));
 
  709         cout << 
"layer material = " << layerMaterial.Data() << endl;
 
  710         if ( layerMaterial.Contains(
"air" ) )
 
  711           DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kGray+1);
 
  712         if ( layerMaterial.Contains(
"copper" ) )
 
  713           DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kOrange+1);
 
  714         if ( layerMaterial.Contains(
"kapton" ) )
 
  715           DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kOrange+2);
 
  716         if ( layerMaterial.Contains(
"aluminium" ) )
 
  717           DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kCyan-9);
 
  718         if ( layerMaterial.Contains(
"GEMmixture" ) )
 
  719           DiskLayersVol[ilay][istat][iseg]->
SetLineColor(kYellow);
 
  720         if ( layerMaterial.Contains(
"carbon" ) )
 
  722         if ( layerMaterial.Contains(
"GlassFiber" ) )
 
  723           DiskLayersVol[jlay][istat][iseg]->
SetLineColor(kGreen+3);
 
  725         DiskLayersTrans[ilay][istat][iseg] = 
new TGeoTranslation(0.,0.,layerPosition);
 
  726         DiskLayersCombi[ilay][istat][iseg] = 
new TGeoCombiTrans(*DiskLayersTrans[ilay][istat][iseg],*dummyrot);
 
  727         DiskLayersCombi[ilay][istat][iseg]->SetName(Form(
"Gem_Disk%d_Seg%d_%s",istat+1,iseg+1,kLayerName[ilay].Data()));
 
  728         DiskLayersCombi[ilay][istat][iseg]->RegisterYourself();
 
  729         DiskVol[istat]->AddNode(DiskLayersVol[ilay][istat][iseg],0,DiskLayersCombi[ilay][istat][iseg]);       
 
  733       cout << 
"volume " << kLayerName[ilay] << 
" from "  
  734            << setprecision(10) << kDiskZPosition[istat]+layerPosition-kLayerThick[ilay]/2. << 
" to " 
  735            << setprecision(10) << kDiskZPosition[istat]+layerPosition+kLayerThick[ilay]/2. << endl;
 
  737       if ( kLayerName[ilay].Contains(
"Gem") && kLayerName[ilay].Contains(
"Sensor") ) {
 
  738         Double_t newRadius = kDiskInnerRadius[ilay][istat];
 
  741         cout << 
"rad = " << kDiskInnerRadius[ilay][istat] << 
" pitch = " << kSensorStripPitch[sensorNumber][0] << 
" for sensor " << sensorNumber << endl;
 
  742         if (  kSensorStripType[sensorNumber] != 2 ) {
 
  743           nofStrips = TMath::Ceil(2.*
TMath::Pi()*kDiskInnerRadius[ilay][istat]/kSensorStripPitch[sensorNumber][0]);
 
  744           newRadius = nofStrips*kSensorStripPitch[sensorNumber][0]/2./
TMath::Pi();
 
  746         cout << 
"!!!! " << istat << 
" " << ilay << 
" > there shall be " << nofStrips << 
" strips here so the radius should be " << newRadius << endl;
 
  747         pout << 
"                        " << sensorNumber+1 << 
",  " << kSensorStripType[sensorNumber] << 
",  "  
  748              << setw(9) << 0. << 
",  " 
  749              << setw(9) << 0. << 
",  "  
  750              << setw(9) << kDiskZPosition[istat]+layerPosition << 
",  " 
  751              << setw(9) << 0. << 
",  " 
  752              << setw(9) << newRadius << 
",  " 
  753              << setw(9) << kDiskOuterRadius[ilay][istat] << 
",  " 
  754              << setw(9) << kLayerThick[ilay] << 
",  " 
  755              << setw(9) << kSensorStripAngle[sensorNumber][0] << 
",  " 
  757              << setw(9) << kMiddleROBarHfTh[istat] << 
",  " 
  758              << setw(9) << kSensorStripPitch[sensorNumber][0] << 
",  " 
  759              << setw(9) << kSensorStripPitch[sensorNumber][1] << ((istat==kNofDisks-1&&sensorNumber==1)?
"":
", \\") 
 
  764         layerPosition += kLayerThick[ilay]/2.;
 
  767     SubunitVol->AddNode(DiskVol[istat],0,DiskCombi[istat]);
 
  771   pout << 
"TrackFinderOnHits_ParThetaA: Double_t  59.4" << endl
 
  772        << 
"TrackFinderOnHits_ParThetaB: Double_t -0.02" << endl
 
  773        << 
"TrackFinderOnHits_ParTheta0: Double_t  56.1372" << endl
 
  774        << 
"TrackFinderOnHits_ParTheta1: Double_t -0.000564362" << endl
 
  775        << 
"TrackFinderOnHits_ParTheta2: Double_t -0.181828" << endl
 
  776        << 
"TrackFinderOnHits_ParTheta3: Double_t  0.284289" << endl
 
  777        << 
"TrackFinderOnHits_ParRadPhi0:Double_t  0.9944432" << endl
 
  778        << 
"TrackFinderOnHits_ParRadPhi2:Double_t -0.000590706" << endl
 
  779        << 
"TrackFinderOnHits_ParMat0:   Double_t \\" << endl
 
  781        << 
"                                      -2.32143e-6,    0.00067270,    0.10209" << endl      
 
  782        << 
"TrackFinderOnHits_ParMat1:   Double_t \\" << endl
 
  784        << 
"                                      -7.49458e-10,   -6.6929e-7,    0.000739251" << endl  
 
  785        << 
"##########################################################################################" << flush;
 
  788   RiddleShapeTubeA = 
new TGeoTube  (
"TubeA" , 44.0, 47.0, 0.5 );
 
  789   RiddleShapeTubeB = 
new TGeoTube  (
"TubeB" , 47.0, 47.1, 10.0 );
 
  790   RiddleShapeCone  = 
new TGeoCone  (
"Cone"  , 20.0, 47.0, 47.1, 71.0, 71.1 );
 
  791   RiddleShapeTubeC = 
new TGeoTube  (
"TubeC" , 71.0, 74.5, 0.5 );
 
  792   RiddleShapeTubeD = 
new TGeoTube  (
"TubeD" , 74.5, 75.0, 10.1 );
 
  793   RiddleShapeTubeE = 
new TGeoTube  (
"TubeE" , 71.5, 75.0, 0.5 );
 
  794   RiddleShapeTubeF = 
new TGeoTube  (
"TubeF" , 0.0,  8.0,  2.0 );
 
  796   RiddleTransTubeA = 
new TGeoTranslation(
"trA",0.0,0.0,9.50);
 
  797      RiddleTransTubeA ->RegisterYourself();
 
  798   RiddleTransCone = 
new  TGeoTranslation(
"trB",0.0,0.0,39.50);
 
  799     RiddleTransCone ->RegisterYourself();
 
  800   RiddleTransTubeC = 
new TGeoTranslation(
"trC",0.0,0.0,60.0);
 
  801      RiddleTransTubeC ->RegisterYourself();
 
  802   RiddleTransTubeD = 
new TGeoTranslation(
"trD",0.0,0.0,69.50);
 
  803      RiddleTransTubeD ->RegisterYourself();
 
  804   RiddleTransTubeE = 
new TGeoTranslation(
"trE",0.0,0.0,79.50);
 
  805      RiddleTransTubeE ->RegisterYourself();
 
  811       const Int_t  NofHoles = 16.0;
 
  813       const Int_t NofHolesRows = 4;
 
  815       Double_t holePosR[4] = {46,52,64,75}; 
 
  816       Double_t holePosD[4] = {90,-60,-60,90}; 
 
  817       Double_t holePosZ[4] = {10,30,50,70}; 
 
  819       TString RiddleshapeFormula = 
"TubeA+(TubeB:trA)+(Cone:trB)+(TubeC:trC)+(TubeD:trD)+(TubeE:trE)" ;
 
  822       for ( Int_t irow = 0 ; irow < NofHolesRows ; irow++ ) {
 
  823         for ( Int_t ihole= 0 ; ihole < NofHoles ; ihole++ ) {
 
  825           Double_t holePosA = ihole*rotDeltaAngle;
 
  829           RiddleTransTubeF[irow][ihole] = 
new TGeoTranslation(Form(
"trF%d_%d",irow+1, ihole+1) , holePosX, holePosY,holePosZ[irow]);
 
  830           RiddleTransTubeF[irow][ihole] ->RegisterYourself();
 
  832           RiddleRothole[irow][ihole] = 
new TGeoRotation(Form(
"ro%d_%d" , irow+1, ihole+1) ,holePosA+90, holePosD[irow],20);
 
  833           RiddleRothole[irow][ihole] ->RegisterYourself();
 
  835           RiddleCombiTranshole[irow][ihole] = 
new TGeoCombiTrans( *RiddleTransTubeF[irow][ihole] , *RiddleRothole[irow][ihole] );
 
  837           RiddleCombiTranshole[irow][ihole] ->SetName(Form(
"TR%d_%d",irow+1, ihole+1));
 
  838           RiddleCombiTranshole[irow][ihole] ->RegisterYourself();
 
  840           RiddleshapeFormula += Form(
"-(TubeF:TR%d_%d)" , irow+1,ihole+1 );
 
  844         cout<< 
" RiddleshapeFormula = \"" <<RiddleshapeFormula.Data()<< 
"\""<< endl;
 
  846         RiddleShapecompos = 
new TGeoCompositeShape(
"riddle", RiddleshapeFormula ); 
 
  850   RiddleVolcomp = 
new TGeoVolume(
"GEMriddleCOMP", RiddleShapecompos,gGeoMan->GetMedium(
"carbon"));
 
  853   RiddleTrans = 
new TGeoTranslation(0.0,0.0,117.0);
 
  854           RiddleCombi = 
new TGeoCombiTrans(*RiddleTrans,*dummyrot); 
 
  855           RiddleCombi->SetName(
"GEMriddleCOMP");
 
  856           RiddleCombi->RegisterYourself();
 
  857           RiddleVolcomp->SetLineColor(kGray+1);
 
  858           SubunitVol->AddNode(RiddleVolcomp,0,RiddleCombi);
 
  861      tAcopperbarShape = 
new TGeoBBox  (
"tAcopperbarshape",lcopperbarx,lcopperbary,lcopperbarHalfThickness);
 
  862      tAcopperbarVol   = 
new TGeoVolume(
"GEM_tAcopperbarVolume",tAcopperbarShape,gGeoMan->GetMedium(
"copper"));
 
  863      tAcopperbarTrans = 
new TGeoTranslation(0.,46.1,141.);
 
  864      tAcopperbarRot   = 
new TGeoRotation(
"tAcopperbarrot",0.0,-25.0,0.0);
 
  865      tAcopperbarRot ->RegisterYourself();
 
  866      tAcopperbarCombi = 
new TGeoCombiTrans(*tAcopperbarTrans,*tAcopperbarRot); 
 
  867      tAcopperbarCombi->SetName(
"GEM_tAcopperbar_Volume");
 
  868      tAcopperbarCombi->RegisterYourself();
 
  869      tAcopperbarVol->SetLineColor(kOrange+1);
 
  870      SubunitVol->AddNode(tAcopperbarVol,0,tAcopperbarCombi);
 
  872      tBcopperbarShape = 
new TGeoBBox  (
"tBcopperbarshape",rcopperbarx,rcopperbary,rcopperbarHalfThickness);
 
  873      tBcopperbarVol   = 
new TGeoVolume(
"GEM_tBcopperbarVolume",tBcopperbarShape,gGeoMan->GetMedium(
"copper"));
 
  874      tBcopperbarTrans = 
new TGeoTranslation(0.,62.5,175.);
 
  875      tBcopperbarRot   = 
new TGeoRotation(
"tBcopperbarrot",0.0,-35.0,0.0);
 
  876      tBcopperbarRot ->RegisterYourself();
 
  877      tBcopperbarCombi = 
new TGeoCombiTrans(*tBcopperbarTrans,*tBcopperbarRot); 
 
  878      tBcopperbarCombi->SetName(
"GEM_tBcopperbar_Volume");
 
  879      tBcopperbarCombi->RegisterYourself();
 
  880      tBcopperbarVol->SetLineColor(kOrange+1);
 
  881      SubunitVol->AddNode(tBcopperbarVol,0,tBcopperbarCombi);
 
  883      dAcopperbarShape = 
new TGeoBBox  (
"dAcopperbarshape",lcopperbarx,lcopperbary,lcopperbarHalfThickness);
 
  884      dAcopperbarVol   = 
new TGeoVolume(
"GEM_dAcopperbarVolume",dAcopperbarShape,gGeoMan->GetMedium(
"copper"));
 
  885      dAcopperbarTrans = 
new TGeoTranslation(0.,-46.1,141.);
 
  886      dAcopperbarRot   = 
new TGeoRotation(
"dAcopperbarrot",0.0,25.0,0.0);
 
  887      dAcopperbarRot ->RegisterYourself();
 
  888      dAcopperbarCombi = 
new TGeoCombiTrans(*dAcopperbarTrans,*dAcopperbarRot); 
 
  889      dAcopperbarCombi->SetName(
"GEM_dAcopperbar_Volume");
 
  890      dAcopperbarCombi->RegisterYourself();
 
  891      dAcopperbarVol->SetLineColor(kOrange+1);
 
  892      SubunitVol->AddNode(dAcopperbarVol,0,dAcopperbarCombi);
 
  894      dBcopperbarShape = 
new TGeoBBox  (
"dBcopperbarshape",rcopperbarx,rcopperbary,rcopperbarHalfThickness);
 
  895      dBcopperbarVol   = 
new TGeoVolume(
"GEM_dBcopperbarVolume",dBcopperbarShape,gGeoMan->GetMedium(
"copper"));
 
  896      dBcopperbarTrans = 
new TGeoTranslation(0.,-62.5,175.);
 
  897      dBcopperbarRot   = 
new TGeoRotation(
"dBcopperbarrot",0.0,35.0,0.0);
 
  898      dBcopperbarRot ->RegisterYourself();
 
  899      dBcopperbarCombi = 
new TGeoCombiTrans(*dBcopperbarTrans,*dBcopperbarRot); 
 
  900      dBcopperbarCombi->SetName(
"GEM_dBcopperbar_Volume");
 
  901      dBcopperbarCombi->RegisterYourself();
 
  902      dBcopperbarVol->SetLineColor(kOrange+1);
 
  903      SubunitVol->AddNode(dBcopperbarVol,0,dBcopperbarCombi);
 
  906   top->AddNode(SubunitVol,0,
new TGeoCombiTrans());
 
  921   gGeoMan->CloseGeometry();
 
FairGeoMedium * CbmMediumCarbon
FairGeoMedium * CbmMediumAluminium
FairGeoBuilder * geobuild
FairGeoMedium * CbmMediumAir
FairGeoMedium * CbmMediumPWO
FairGeoInterface * geoFace
vDisk SetLineColor(colYellow)