79{
80 TGeoVolume *
top=gGeoManager->GetTopVolume();
82 TGeoMedium *tungsten =gGeoManager->GetMedium("tungsten");
83
85 TGeoMedium *iron =gGeoManager->GetMedium("iron");
87 TGeoMedium *water =gGeoManager->GetMedium("H2O");
89 TGeoMedium *mo =gGeoManager->GetMedium("molybdenum");
90 TGeoVolume *tTarget = new TGeoVolumeAssembly("TargetArea");
91
95
98 TGeoVolume *slit;
99
100 for (Int_t i=0;
i<
fnS;
i++) {
101 TString nmi =
"Target_"; nmi +=
i+1;
102 TString sm =
"Slit_"; sm +=
i+1;
105 if (
fM.at(i)==
"tungsten") {
material = tungsten;};
106
107
110 }
111 else {
113 }
114 if (
fM.at(i)==
"molybdenum") {
116 }
else {
target->SetLineColor(38);};
117 tTarget->AddNode(target, 1,
new TGeoTranslation(0, 0, zPos +
fL.at(i)/2.) );
118 if (i < slots){
120 slit = gGeoManager->MakeTube(sm, water, 0.,
fDiameter/2.,
fsl/2.);
121 }
122 else {
124 }
125 slit->SetLineColor(7);
126 tTarget->AddNode(slit, 1,
new TGeoTranslation(0, 0, zPos+
fL.at(i)+
fsl/2.) );
128 } else {
130 }
131 }
134
135 for (Int_t i=0;
i<
fnS-1;
i++) {
136 TString nmi =
"Target_"; nmi +=
i;
137 TString sm =
"Slit_"; sm +=
i;
138 TGeoVolume *
target = gGeoManager->MakeTube(nmi, tungsten, 0, 25, dZ/2.);
140 tTarget->AddNode(target, 1, new TGeoTranslation(0, 0, zPos+dZ/2.));
141 TGeoVolume *slit = gGeoManager->MakeTube(sm, water, 0, 25,
fsl/2.);
142 slit->SetLineColor(7);
143 tTarget->AddNode(slit, 1,
new TGeoTranslation(0, 0, zPos+dZ+
fsl/2.));
145 }
146 TString nmi =
"Target_"; nmi +=
fnS;
147 TGeoVolume *
target = gGeoManager->MakeTube(nmi, tungsten, 0, 25, dZ/2.);
149 tTarget->AddNode(target, 1, new TGeoTranslation(0, 0, zPos+dZ/2.));
150 }
151 else{
152
153 TGeoVolume *
target = gGeoManager->MakeTube(
"Target", tungsten, 0, 25, fTargetLength/2.);
155 tTarget->AddNode(target, 1,
new TGeoTranslation(0, 0,
fTargetZ));
156 }
157
160
161 TGeoVolume *absorber;
162 absorber = gGeoManager->MakeTube(
"Absorber", iron, 0, 400,
fAbsorberLength/2.);
163 absorber->SetLineColor(42);
164 tTarget->AddNode(absorber, 1,
new TGeoTranslation(0, 0,
fAbsorberZ-zPos));
165 }
166
168 Float_t xTot = 400./2.;
169 Float_t yTot = 400./2.;
170 Float_t spaceTopBot = 10.;
171 Float_t spaceSide = 5.;
172 TGeoVolume *moreShieldingTopBot = gGeoManager->MakeBox("moreShieldingTopBot", iron, xTot, yTot/2., fTargetLength/2.);
173 moreShieldingTopBot->SetLineColor(33);
174 tTarget->AddNode(moreShieldingTopBot, 1,
new TGeoTranslation(0.,
fDiameter/2. +spaceTopBot+yTot/2.,fTargetLength/2.));
175 tTarget->AddNode(moreShieldingTopBot, 2,
new TGeoTranslation(0.,-
fDiameter/2. -spaceTopBot-yTot/2.,fTargetLength/2.));
176 TGeoVolume *moreShieldingSide = gGeoManager->MakeBox(
"moreShieldingSide", iron, xTot/2., (
fDiameter+1.9*spaceTopBot)/2., fTargetLength/2.);
177 moreShieldingSide->SetLineColor(33);
178 tTarget->AddNode(moreShieldingSide, 1,
new TGeoTranslation(
fDiameter/2.+spaceSide+xTot/2.,0.,fTargetLength/2.));
179 tTarget->AddNode(moreShieldingSide, 2,
new TGeoTranslation(-
fDiameter/2.-spaceSide-xTot/2.,0.,fTargetLength/2.));
180 }else{
181 TGeoVolume *moreShielding = gGeoManager->MakeTube("MoreShielding", iron, 30, 400, fTargetLength/2.);
182 moreShielding->SetLineColor(43);
183 tTarget->AddNode(moreShielding, 1, new TGeoTranslation(0, 0, fTargetLength/2.));
184 }
185 top->AddNode(tTarget, 1,
new TGeoTranslation(0, 0,
fTargetZ - fTargetLength/2.));
186
188 cout <<
"target and absorber positioned at " <<
fTargetZ <<
" "<<
fAbsorberZ <<
" m"<< endl;
189 }else{
190 cout <<
"target at " <<
fTargetZ/100. <<
"m "<< endl;
191 }
192}
Int_t InitMedium(const char *name)
std::vector< std::string > fM