|
1
|
#include <iomanip>
|
|
2
|
#include <iostream>
|
|
3
|
#include "TGeoManager.h"
|
|
4
|
#include "TMath.h"
|
|
5
|
|
|
6
|
|
|
7
|
|
|
8
|
TGeoRotation *fZeroRotation = new TGeoRotation();
|
|
9
|
|
|
10
|
Double_t transX = 0.;
|
|
11
|
Double_t transY = 0.;
|
|
12
|
Double_t transZ = 0.;
|
|
13
|
|
|
14
|
TGeoManager* gGeoMan = NULL;
|
|
15
|
|
|
16
|
void create_target_geo()
|
|
17
|
{
|
|
18
|
fZeroRotation->RotateX(0.);
|
|
19
|
fZeroRotation->RotateY(0.);
|
|
20
|
fZeroRotation->RotateZ(0.);
|
|
21
|
|
|
22
|
FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
|
|
23
|
FairGeoInterface* geoFace = geoLoad->getGeoInterface();
|
|
24
|
TString geoPath = gSystem->Getenv("VMCWORKDIR");
|
|
25
|
TString medFile = geoPath + "/geometry/media_my.geo";
|
|
26
|
geoFace->setMediaFile(medFile);
|
|
27
|
geoFace->readMedia();
|
|
28
|
gGeoMan = gGeoManager;
|
|
29
|
|
|
30
|
|
|
31
|
|
|
32
|
TString geoFileName = geoPath + "/geometry/target.mygeo.root";
|
|
33
|
|
|
34
|
|
|
35
|
|
|
36
|
FairGeoMedia* geoMedia = geoFace->getMedia();
|
|
37
|
FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
|
|
38
|
|
|
39
|
FairGeoMedium* mBe = geoMedia->getMedium("beryllium");
|
|
40
|
if ( ! mBe ) Fatal("Main", "FairMedium beryllium not found");
|
|
41
|
geoBuild->createMedium(mBe);
|
|
42
|
TGeoMedium* pBe = gGeoMan->GetMedium("beryllium");
|
|
43
|
if ( ! pBe ) Fatal("Main", "Medium silicon not found");
|
|
44
|
|
|
45
|
FairGeoMedium* vacuum = geoMedia->getMedium("vacuum");
|
|
46
|
if ( ! vacuum ) Fatal("Main", "FairMedium vacuum not found");
|
|
47
|
geoBuild->createMedium(vacuum);
|
|
48
|
TGeoMedium* pMed0 = gGeoMan->GetMedium("vacuum");
|
|
49
|
|
|
50
|
|
|
51
|
|
|
52
|
|
|
53
|
FairGeoMedium* mborum11 = geoMedia->getMedium("borum11");
|
|
54
|
if ( ! mborum11 ) Fatal("Main", "FairMedium borum11 not found");
|
|
55
|
geoBuild->createMedium(mborum11);
|
|
56
|
TGeoMedium* pborum11 = gGeoMan->GetMedium("borum11");
|
|
57
|
if ( ! pborum11 ) Fatal("Main", "Medium borum11 not found");
|
|
58
|
|
|
59
|
FairGeoMedium* mSteel = geoMedia->getMedium("Steel");
|
|
60
|
if ( ! mSteel ) Fatal("Main", "FairMedium Steel not found");
|
|
61
|
geoBuild->createMedium(mSteel);
|
|
62
|
TGeoMedium* pSteel = gGeoMan->GetMedium("Steel");
|
|
63
|
if ( ! pSteel ) Fatal("Main", "Medium vacuum not found");
|
|
64
|
|
|
65
|
|
|
66
|
|
|
67
|
|
|
68
|
gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
|
|
69
|
gGeoMan->SetName("DETgeom");
|
|
70
|
TGeoVolume* top = new TGeoVolumeAssembly("TOP");
|
|
71
|
gGeoMan->SetTopVolume(top);
|
|
72
|
|
|
73
|
|
|
74
|
|
|
75
|
|
|
76
|
|
|
77
|
|
|
78
|
|
|
79
|
|
|
80
|
Double_t targetB11R = 1.5;
|
|
81
|
Double_t targetB11Z = 0.0007;
|
|
82
|
Double_t targetShellThickness=0.5;
|
|
83
|
|
|
84
|
Double_t targetShellZ =0.002;
|
|
85
|
|
|
86
|
|
|
87
|
|
|
88
|
Double_t targetShellRmin = targetB11R ;
|
|
89
|
Double_t targetShellRmax = targetB11R + targetShellThickness;
|
|
90
|
|
|
91
|
TGeoVolume *targetB11 = gGeoManager->MakeTube("targetB11", pborum11, 0, targetB11R, targetB11Z/2);
|
|
92
|
|
|
93
|
TGeoVolume * targetShell = gGeoManager->MakeTube("targetShell", pSteel, targetShellRmin, targetShellRmax, targetShellZ/2);
|
|
94
|
|
|
95
|
|
|
96
|
TGeoVolume* targetAss = new TGeoVolumeAssembly("target");
|
|
97
|
targetAss->AddNode(targetB11, 1, new TGeoCombiTrans(.0,.0,.0, fZeroRotation));
|
|
98
|
targetAss->AddNode(targetShell, 1, new TGeoCombiTrans(.0,.0,.0, fZeroRotation));
|
|
99
|
top->AddNode(targetAss, 1, new TGeoCombiTrans(transX, transY, transZ, fZeroRotation));
|
|
100
|
|
|
101
|
|
|
102
|
gGeoMan->CloseGeometry();
|
|
103
|
gGeoMan->CheckOverlaps(0.001);
|
|
104
|
gGeoMan->PrintOverlaps();
|
|
105
|
gGeoMan->Test();
|
|
106
|
|
|
107
|
TFile* geoFile = new TFile(geoFileName, "RECREATE");
|
|
108
|
top->Write();
|
|
109
|
geoFile->Close();
|
|
110
|
|
|
111
|
}
|