12 double Z( 0. ), A( 0. ), Ionization( 0. ), Density( 0. ), Radlen( 0. );
14 G4LogicalVolume* logicalMdc = 0;
19 G4Material* mdcMaterial = logicalMdc->GetMaterial();
21 for ( i = 0; i < mdcMaterial->GetElementVector()->size(); i++ )
23 Z += ( mdcMaterial->GetElement( i )->GetZ() ) * ( mdcMaterial->GetFractionVector()[i] );
24 A += ( mdcMaterial->GetElement( i )->GetA() ) * ( mdcMaterial->GetFractionVector()[i] );
26 Ionization = mdcMaterial->GetIonisation()->GetMeanExcitationEnergy();
27 Density = mdcMaterial->GetDensity() / ( g / cm3 );
28 Radlen = mdcMaterial->GetRadlen();
29 std::cout <<
"mdcgas: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
30 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
31 <<
" Radlen: " << Radlen << std::endl;
32 KalFitMaterial FitMdcMaterial( Z, A / g / mole, Ionization / eV, Density, Radlen / 10. );
33 _BesKalmanFitMaterials.push_back( FitMdcMaterial );
37 G4LogicalVolume* innerWallFilm1Volume =
const_cast<G4LogicalVolume*
>(
38 GDMLProcessor::GetInstance()->GetLogicalVolume(
"LogicalMdcInnerFilm1" ) );
39 G4Material* innerWallFilm1Material = innerWallFilm1Volume->GetMaterial();
40 G4Tubs* innerwallFilm1Tub =
dynamic_cast<G4Tubs*
>( innerWallFilm1Volume->GetSolid() );
44 for ( i = 0; i < innerWallFilm1Material->GetElementVector()->size(); i++ )
46 Z += ( innerWallFilm1Material->GetElement( i )->GetZ() ) *
47 ( innerWallFilm1Material->GetFractionVector()[i] );
48 A += ( innerWallFilm1Material->GetElement( i )->GetA() ) *
49 ( innerWallFilm1Material->GetFractionVector()[i] );
52 Ionization = innerWallFilm1Material->GetIonisation()->GetMeanExcitationEnergy();
53 Density = innerWallFilm1Material->GetDensity() / ( g / cm3 );
54 Radlen = innerWallFilm1Material->GetRadlen();
55 std::cout <<
"Mdc innerwall Film1, Al: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
56 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
57 <<
" Radlen: " << Radlen << std::endl;
58 KalFitMaterial FitInnerwallFilm1Material( Z, A / g / mole, Ionization / eV, Density,
60 _BesKalmanFitMaterials.push_back( FitInnerwallFilm1Material );
63 G4LogicalVolume* innerwallVolume =
const_cast<G4LogicalVolume*
>(
64 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicalMdcSegment2" ) );
65 G4Material* innerwallMaterial = innerwallVolume->GetMaterial();
66 G4Tubs* innerwallTub =
dynamic_cast<G4Tubs*
>( innerwallVolume->GetSolid() );
70 for ( i = 0; i < innerwallMaterial->GetElementVector()->size(); i++ )
72 Z += ( innerwallMaterial->GetElement( i )->GetZ() ) *
73 ( innerwallMaterial->GetFractionVector()[i] );
74 A += ( innerwallMaterial->GetElement( i )->GetA() ) *
75 ( innerwallMaterial->GetFractionVector()[i] );
78 Ionization = innerwallMaterial->GetIonisation()->GetMeanExcitationEnergy();
79 Density = innerwallMaterial->GetDensity() / ( g / cm3 );
80 Radlen = innerwallMaterial->GetRadlen();
81 std::cout <<
"Mdc innerwall, Al: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
82 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
83 <<
" Radlen: " << Radlen << std::endl;
84 KalFitMaterial FitInnerwallMaterial( Z, A / g / mole, Ionization / eV, Density,
86 _BesKalmanFitMaterials.push_back( FitInnerwallMaterial );
89 G4LogicalVolume* innerWallFilm0Volume =
const_cast<G4LogicalVolume*
>(
90 GDMLProcessor::GetInstance()->GetLogicalVolume(
"LogicalMdcInnerFilm0" ) );
91 G4Material* innerWallFilm0Material = innerWallFilm0Volume->GetMaterial();
92 G4Tubs* innerwallFilm0Tub =
dynamic_cast<G4Tubs*
>( innerWallFilm0Volume->GetSolid() );
96 for ( i = 0; i < innerWallFilm0Material->GetElementVector()->size(); i++ )
98 Z += ( innerWallFilm0Material->GetElement( i )->GetZ() ) *
99 ( innerWallFilm0Material->GetFractionVector()[i] );
100 A += ( innerWallFilm0Material->GetElement( i )->GetA() ) *
101 ( innerWallFilm0Material->GetFractionVector()[i] );
104 Ionization = innerWallFilm0Material->GetIonisation()->GetMeanExcitationEnergy();
105 Density = innerWallFilm0Material->GetDensity() / ( g / cm3 );
106 Radlen = innerWallFilm0Material->GetRadlen();
107 std::cout <<
"Mdc innerwall Film0, Al: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
108 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
109 <<
" Radlen: " << Radlen << std::endl;
110 KalFitMaterial FitInnerwallFilm0Material( Z, A / g / mole, Ionization / eV, Density,
112 _BesKalmanFitMaterials.push_back( FitInnerwallFilm0Material );
115 G4LogicalVolume* logicalBes = 0;
120 G4LogicalVolume* logicalAirVolume =
const_cast<G4LogicalVolume*
>(
121 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicalWorld" ) );
122 G4Material* airMaterial = logicalAirVolume->GetMaterial();
125 for ( i = 0; i < airMaterial->GetElementVector()->size(); i++ )
127 Z += ( airMaterial->GetElement( i )->GetZ() ) * ( airMaterial->GetFractionVector()[i] );
128 A += ( airMaterial->GetElement( i )->GetA() ) * ( airMaterial->GetFractionVector()[i] );
131 Ionization = airMaterial->GetIonisation()->GetMeanExcitationEnergy();
132 Density = airMaterial->GetDensity() / ( g / cm3 );
133 Radlen = airMaterial->GetRadlen();
134 std::cout <<
"air: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
135 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
136 <<
" Radlen: " << Radlen << std::endl;
137 KalFitMaterial FitAirMaterial( Z, A / g / mole, Ionization / eV, Density, Radlen / 10. );
138 _BesKalmanFitMaterials.push_back( FitAirMaterial );
141 G4LogicalVolume* logicalOuterBeVolume =
const_cast<G4LogicalVolume*
>(
142 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicalouterBe" ) );
143 G4Material* outerBeMaterial = logicalOuterBeVolume->GetMaterial();
145 G4Tubs* outerBeTub =
dynamic_cast<G4Tubs*
>( logicalOuterBeVolume->GetSolid() );
148 for ( i = 0; i < outerBeMaterial->GetElementVector()->size(); i++ )
150 Z += ( outerBeMaterial->GetElement( i )->GetZ() ) *
151 ( outerBeMaterial->GetFractionVector()[i] );
152 A += ( outerBeMaterial->GetElement( i )->GetA() ) *
153 ( outerBeMaterial->GetFractionVector()[i] );
155 Ionization = outerBeMaterial->GetIonisation()->GetMeanExcitationEnergy();
156 Density = outerBeMaterial->GetDensity() / ( g / cm3 );
157 Radlen = outerBeMaterial->GetRadlen();
158 std::cout <<
"outer beryllium: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
159 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
160 <<
" Radlen: " << Radlen << std::endl;
161 KalFitMaterial FitOuterBeMaterial( Z, A / g / mole, Ionization / eV, Density, Radlen / 10. );
162 _BesKalmanFitMaterials.push_back( FitOuterBeMaterial );
165 G4LogicalVolume* logicalOilLayerVolume =
const_cast<G4LogicalVolume*
>(
166 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicaloilLayer" ) );
167 G4Material* oilLayerMaterial = logicalOilLayerVolume->GetMaterial();
168 G4Tubs* oilLayerTub =
dynamic_cast<G4Tubs*
>( logicalOilLayerVolume->GetSolid() );
172 for ( i = 0; i < oilLayerMaterial->GetElementVector()->size(); i++ )
174 Z += ( oilLayerMaterial->GetElement( i )->GetZ() ) *
175 ( oilLayerMaterial->GetFractionVector()[i] );
176 A += ( oilLayerMaterial->GetElement( i )->GetA() ) *
177 ( oilLayerMaterial->GetFractionVector()[i] );
179 Ionization = oilLayerMaterial->GetIonisation()->GetMeanExcitationEnergy();
180 Density = oilLayerMaterial->GetDensity() / ( g / cm3 );
181 Radlen = oilLayerMaterial->GetRadlen();
182 std::cout <<
"cooling oil: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
183 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
184 <<
" Radlen: " << Radlen << std::endl;
185 KalFitMaterial FitOilLayerMaterial( Z, A / g / mole, Ionization / eV, Density,
187 _BesKalmanFitMaterials.push_back( FitOilLayerMaterial );
190 G4LogicalVolume* logicalInnerBeVolume =
const_cast<G4LogicalVolume*
>(
191 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicalinnerBe" ) );
192 G4Material* innerBeMaterial = logicalInnerBeVolume->GetMaterial();
193 G4Tubs* innerBeTub =
dynamic_cast<G4Tubs*
>( logicalInnerBeVolume->GetSolid() );
196 for ( i = 0; i < innerBeMaterial->GetElementVector()->size(); i++ )
198 Z += ( innerBeMaterial->GetElement( i )->GetZ() ) *
199 ( innerBeMaterial->GetFractionVector()[i] );
200 A += ( innerBeMaterial->GetElement( i )->GetA() ) *
201 ( innerBeMaterial->GetFractionVector()[i] );
204 Ionization = innerBeMaterial->GetIonisation()->GetMeanExcitationEnergy();
205 Density = innerBeMaterial->GetDensity() / ( g / cm3 );
206 Radlen = innerBeMaterial->GetRadlen();
207 std::cout <<
"inner beryllium: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
208 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
209 <<
" Radlen: " << Radlen << std::endl;
210 KalFitMaterial FitInnerBeMaterial( Z, A / g / mole, Ionization / eV, Density, Radlen / 10. );
211 _BesKalmanFitMaterials.push_back( FitInnerBeMaterial );
214 G4LogicalVolume* logicalGoldLayerVolume =
const_cast<G4LogicalVolume*
>(
215 GDMLProcessor::GetInstance()->GetLogicalVolume(
"logicalgoldLayer" ) );
216 G4Material* goldLayerMaterial = logicalGoldLayerVolume->GetMaterial();
217 G4Tubs* goldLayerTub =
dynamic_cast<G4Tubs*
>( logicalGoldLayerVolume->GetSolid() );
221 for ( i = 0; i < goldLayerMaterial->GetElementVector()->size(); i++ )
223 Z += ( goldLayerMaterial->GetElement( i )->GetZ() ) *
224 ( goldLayerMaterial->GetFractionVector()[i] );
225 A += ( goldLayerMaterial->GetElement( i )->GetA() ) *
226 ( goldLayerMaterial->GetFractionVector()[i] );
228 Ionization = goldLayerMaterial->GetIonisation()->GetMeanExcitationEnergy();
229 Density = goldLayerMaterial->GetDensity() / ( g / cm3 );
230 Radlen = goldLayerMaterial->GetRadlen();
231 std::cout <<
"gold layer: Z: " << Z <<
" A: " << ( A / ( g / mole ) )
232 <<
" Ionization: " << ( Ionization / eV ) <<
" Density: " << Density
233 <<
" Radlen: " << Radlen << std::endl;
234 KalFitMaterial FitGoldLayerMaterial( Z, A / g / mole, Ionization / eV, Density,
236 _BesKalmanFitMaterials.push_back( FitGoldLayerMaterial );
239 double radius, thick, length, z0;
242 radius = innerwallFilm1Tub->GetInnerRadius() / ( cm );
244 innerwallFilm1Tub->GetOuterRadius() / (cm)-innerwallFilm1Tub->GetInnerRadius() / ( cm );
245 length = 2.0 * innerwallFilm1Tub->GetZHalfLength() / ( cm );
247 std::cout <<
"innerwallFilm1: "
248 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
250 KalFitCylinder innerwallFilm1Cylinder( &_BesKalmanFitMaterials[1], radius, thick, length,
252 _BesKalmanFitWalls.push_back( innerwallFilm1Cylinder );
255 radius = innerwallTub->GetInnerRadius() / ( cm );
256 thick = innerwallTub->GetOuterRadius() / (cm)-innerwallTub->GetInnerRadius() / ( cm );
257 length = 2.0 * innerwallTub->GetZHalfLength() / ( cm );
259 std::cout <<
"innerwall: "
260 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
262 KalFitCylinder innerwallCylinder( &_BesKalmanFitMaterials[2], radius, thick, length, z0 );
263 _BesKalmanFitWalls.push_back( innerwallCylinder );
266 radius = innerwallFilm0Tub->GetInnerRadius() / ( cm );
268 innerwallFilm0Tub->GetOuterRadius() / (cm)-innerwallFilm0Tub->GetInnerRadius() / ( cm );
269 length = 2.0 * innerwallFilm0Tub->GetZHalfLength() / ( cm );
271 std::cout <<
"innerwallFilm0: "
272 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
274 KalFitCylinder innerwallFilm0Cylinder( &_BesKalmanFitMaterials[3], radius, thick, length,
276 _BesKalmanFitWalls.push_back( innerwallFilm0Cylinder );
280 radius = outerBeTub->GetOuterRadius() / ( cm );
281 thick = innerwallFilm0Tub->GetInnerRadius() / ( cm )-outerBeTub->GetOuterRadius() / ( cm );
282 length = 2.0 * innerwallTub->GetZHalfLength() / ( cm );
284 std::cout <<
"outer air: "
285 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
287 KalFitCylinder outerAirCylinder( &_BesKalmanFitMaterials[4], radius, thick, length, z0 );
288 _BesKalmanFitWalls.push_back( outerAirCylinder );
291 radius = outerBeTub->GetInnerRadius() / ( cm );
292 thick = outerBeTub->GetOuterRadius() / (cm)-outerBeTub->GetInnerRadius() / ( cm );
293 length = 2.0 * outerBeTub->GetZHalfLength() / ( cm );
295 std::cout <<
"outer Be: "
296 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
298 KalFitCylinder outerBeCylinder( &_BesKalmanFitMaterials[5], radius, thick, length, z0 );
299 _BesKalmanFitWalls.push_back( outerBeCylinder );
302 radius = oilLayerTub->GetInnerRadius() / ( cm );
303 thick = oilLayerTub->GetOuterRadius() / (cm)-oilLayerTub->GetInnerRadius() / ( cm );
304 length = 2.0 * oilLayerTub->GetZHalfLength() / ( cm );
306 std::cout <<
"oil layer: "
307 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
309 KalFitCylinder oilLayerCylinder( &_BesKalmanFitMaterials[6], radius, thick, length, z0 );
310 _BesKalmanFitWalls.push_back( oilLayerCylinder );
313 radius = innerBeTub->GetInnerRadius() / ( cm );
314 thick = innerBeTub->GetOuterRadius() / (cm)-innerBeTub->GetInnerRadius() / ( cm );
315 length = 2.0 * innerBeTub->GetZHalfLength() / ( cm );
317 std::cout <<
"inner Be: "
318 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
320 KalFitCylinder innerBeCylinder( &_BesKalmanFitMaterials[7], radius, thick, length, z0 );
321 _BesKalmanFitWalls.push_back( innerBeCylinder );
324 radius = goldLayerTub->GetInnerRadius() / ( cm );
325 thick = goldLayerTub->GetOuterRadius() / (cm)-goldLayerTub->GetInnerRadius() / ( cm );
326 length = 2.0 * goldLayerTub->GetZHalfLength() / ( cm );
328 std::cout <<
"gold layer: "
329 <<
" radius: " << radius <<
" thick:" << thick <<
" length: " << length
331 KalFitCylinder goldLayerCylinder( &_BesKalmanFitMaterials[8], radius, thick, length, z0 );
332 _BesKalmanFitWalls.push_back( goldLayerCylinder );
334 std::cout <<
"exit from KalFitAlg::setBesFromGdml()" << std::endl;