/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/KalFitAlg/KalFitAlg-00-07-55-p03/src/KalFitReadGdml.cxx

Go to the documentation of this file.
00001 
00002 
00003 #include "G4Geo/MdcG4Geo.h"
00004 #include "G4Geo/BesG4Geo.h"
00005 #include "KalFitAlg/KalFitAlg.h"
00006 #include "KalFitAlg/KalFitTrack.h"
00007 #include "G4Material.hh"
00008 #include "G4Tubs.hh"
00009 #include "GDMLProcessor.hh"
00010 
00011 
00012 void KalFitAlg::setBesFromGdml(void){
00013 
00014         int i(0);
00015         double Z(0.),A(0.),Ionization(0.),Density(0.),Radlen(0.);
00016 
00017         G4LogicalVolume *logicalMdc = 0;
00018         MdcG4Geo* aMdcG4Geo = new MdcG4Geo();
00019         logicalMdc = aMdcG4Geo->GetTopVolume();   
00020 
00022         G4Material* mdcMaterial = logicalMdc->GetMaterial();  
00023 
00024         for(i=0; i<mdcMaterial->GetElementVector()->size(); i++){
00025                 Z += (mdcMaterial->GetElement(i)->GetZ())*
00026                         (mdcMaterial->GetFractionVector()[i]);
00027                 A += (mdcMaterial->GetElement(i)->GetA())*
00028                         (mdcMaterial->GetFractionVector()[i]);
00029         }
00030         Ionization = mdcMaterial->GetIonisation()->GetMeanExcitationEnergy();
00031         Density = mdcMaterial->GetDensity()/(g/cm3);
00032         Radlen = mdcMaterial->GetRadlen();
00033         std::cout<<"mdcgas: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00034         KalFitMaterial FitMdcMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.); 
00035         _BesKalmanFitMaterials.push_back(FitMdcMaterial);
00036         KalFitTrack::mdcGasRadlen_ = Radlen/10.;
00037 
00039         G4LogicalVolume* innerWallFilm1Volume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("LogicalMdcInnerFilm1"));
00040         G4Material* innerWallFilm1Material = innerWallFilm1Volume->GetMaterial();
00041         G4Tubs* innerwallFilm1Tub = dynamic_cast<G4Tubs*>(innerWallFilm1Volume->GetSolid());
00042 
00043         Z = 0.;
00044         A = 0.;
00045         for(i=0; i<innerWallFilm1Material->GetElementVector()->size(); i++){    
00046                 Z += (innerWallFilm1Material->GetElement(i)->GetZ())*
00047                         (innerWallFilm1Material->GetFractionVector()[i]); 
00048                 A += (innerWallFilm1Material->GetElement(i)->GetA())*   
00049                         (innerWallFilm1Material->GetFractionVector()[i]);
00050         }
00051 
00052         Ionization = innerWallFilm1Material->GetIonisation()->GetMeanExcitationEnergy();
00053         Density = innerWallFilm1Material->GetDensity()/(g/cm3);
00054         Radlen = innerWallFilm1Material->GetRadlen();
00055         std::cout<<"Mdc innerwall Film1, Al: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00056         KalFitMaterial FitInnerwallFilm1Material(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00057         _BesKalmanFitMaterials.push_back(FitInnerwallFilm1Material);
00058 
00059 
00061         G4LogicalVolume* innerwallVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicalMdcSegment2"));
00062         G4Material* innerwallMaterial = innerwallVolume->GetMaterial();
00063         G4Tubs* innerwallTub = dynamic_cast<G4Tubs*>(innerwallVolume->GetSolid());
00064 
00065         Z = 0.;
00066         A = 0.;
00067         for(i=0; i<innerwallMaterial->GetElementVector()->size(); i++){    
00068                 Z += (innerwallMaterial->GetElement(i)->GetZ())*
00069                         (innerwallMaterial->GetFractionVector()[i]); 
00070                 A += (innerwallMaterial->GetElement(i)->GetA())*        
00071                         (innerwallMaterial->GetFractionVector()[i]);
00072         }
00073 
00074         Ionization = innerwallMaterial->GetIonisation()->GetMeanExcitationEnergy();
00075         Density = innerwallMaterial->GetDensity()/(g/cm3);
00076         Radlen = innerwallMaterial->GetRadlen();
00077         std::cout<<"Mdc innerwall, Al: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00078         KalFitMaterial FitInnerwallMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00079         _BesKalmanFitMaterials.push_back(FitInnerwallMaterial);
00080 
00082         G4LogicalVolume* innerWallFilm0Volume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("LogicalMdcInnerFilm0"));
00083         G4Material* innerWallFilm0Material = innerWallFilm0Volume->GetMaterial();
00084         G4Tubs* innerwallFilm0Tub = dynamic_cast<G4Tubs*>(innerWallFilm0Volume->GetSolid());
00085 
00086         Z = 0.;
00087         A = 0.;
00088         for(i=0; i<innerWallFilm0Material->GetElementVector()->size(); i++){    
00089                 Z += (innerWallFilm0Material->GetElement(i)->GetZ())*
00090                         (innerWallFilm0Material->GetFractionVector()[i]); 
00091                 A += (innerWallFilm0Material->GetElement(i)->GetA())*   
00092                         (innerWallFilm0Material->GetFractionVector()[i]);
00093         }
00094 
00095         Ionization = innerWallFilm0Material->GetIonisation()->GetMeanExcitationEnergy();
00096         Density = innerWallFilm0Material->GetDensity()/(g/cm3);
00097         Radlen = innerWallFilm0Material->GetRadlen();
00098         std::cout<<"Mdc innerwall Film0, Al: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00099         KalFitMaterial FitInnerwallFilm0Material(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00100         _BesKalmanFitMaterials.push_back(FitInnerwallFilm0Material);
00101 
00103         G4LogicalVolume *logicalBes = 0;
00104         BesG4Geo* aBesG4Geo = new BesG4Geo();
00105         logicalBes = aBesG4Geo->GetTopVolume();
00106 
00108         G4LogicalVolume* logicalAirVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicalWorld"));
00109         G4Material* airMaterial = logicalAirVolume->GetMaterial();
00110         Z = 0.;
00111         A = 0.;
00112         for(i=0; i<airMaterial->GetElementVector()->size(); i++){
00113                 Z += (airMaterial->GetElement(i)->GetZ())*
00114                         (airMaterial->GetFractionVector()[i]);
00115                 A += (airMaterial->GetElement(i)->GetA())*
00116                         (airMaterial->GetFractionVector()[i]);
00117         }
00118 
00119         Ionization = airMaterial->GetIonisation()->GetMeanExcitationEnergy();
00120         Density = airMaterial->GetDensity()/(g/cm3);
00121         Radlen = airMaterial->GetRadlen();
00122         std::cout<<"air: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00123         KalFitMaterial FitAirMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00124         _BesKalmanFitMaterials.push_back(FitAirMaterial);
00125 
00127         G4LogicalVolume* logicalOuterBeVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicalouterBe"));
00128         G4Material* outerBeMaterial = logicalOuterBeVolume->GetMaterial();
00129 
00130         G4Tubs* outerBeTub = dynamic_cast<G4Tubs*>(logicalOuterBeVolume->GetSolid());
00131         Z = 0.;
00132         A = 0.;
00133         for(i=0; i<outerBeMaterial->GetElementVector()->size(); i++){   
00134                 Z += (outerBeMaterial->GetElement(i)->GetZ())*
00135                         (outerBeMaterial->GetFractionVector()[i]);   
00136                 A += (outerBeMaterial->GetElement(i)->GetA())*   
00137                         (outerBeMaterial->GetFractionVector()[i]);
00138         }
00139         Ionization =  outerBeMaterial->GetIonisation()->GetMeanExcitationEnergy();
00140         Density = outerBeMaterial->GetDensity()/(g/cm3);
00141         Radlen = outerBeMaterial->GetRadlen();
00142         std::cout<<"outer beryllium: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00143         KalFitMaterial FitOuterBeMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00144         _BesKalmanFitMaterials.push_back(FitOuterBeMaterial);
00145 
00146 
00148         G4LogicalVolume* logicalOilLayerVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicaloilLayer"));
00149         G4Material* oilLayerMaterial = logicalOilLayerVolume->GetMaterial();
00150         G4Tubs* oilLayerTub = dynamic_cast<G4Tubs*>(logicalOilLayerVolume->GetSolid());
00151 
00152         Z = 0.;
00153         A = 0.;
00154         for(i=0; i<oilLayerMaterial->GetElementVector()->size(); i++){        
00155                 Z += (oilLayerMaterial->GetElement(i)->GetZ())*
00156                         (oilLayerMaterial->GetFractionVector()[i]);             
00157                 A += (oilLayerMaterial->GetElement(i)->GetA())*             
00158                         (oilLayerMaterial->GetFractionVector()[i]);
00159         }
00160         Ionization = oilLayerMaterial->GetIonisation()->GetMeanExcitationEnergy();
00161         Density = oilLayerMaterial->GetDensity()/(g/cm3);
00162         Radlen = oilLayerMaterial->GetRadlen();
00163         std::cout<<"cooling oil: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00164         KalFitMaterial FitOilLayerMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00165         _BesKalmanFitMaterials.push_back(FitOilLayerMaterial);
00166 
00167 
00169         G4LogicalVolume* logicalInnerBeVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicalinnerBe"));
00170         G4Material* innerBeMaterial = logicalInnerBeVolume->GetMaterial();
00171         G4Tubs* innerBeTub = dynamic_cast<G4Tubs*>(logicalInnerBeVolume->GetSolid());
00172         Z = 0.;
00173         A = 0.;
00174         for(i=0; i<innerBeMaterial->GetElementVector()->size(); i++){
00175                 Z += (innerBeMaterial->GetElement(i)->GetZ())*
00176                         (innerBeMaterial->GetFractionVector()[i]);
00177                 A += (innerBeMaterial->GetElement(i)->GetA())*
00178                         (innerBeMaterial->GetFractionVector()[i]);
00179         }
00180 
00181         Ionization = innerBeMaterial->GetIonisation()->GetMeanExcitationEnergy();
00182         Density = innerBeMaterial->GetDensity()/(g/cm3);
00183         Radlen = innerBeMaterial->GetRadlen();
00184         std::cout<<"inner beryllium: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00185         KalFitMaterial FitInnerBeMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00186         _BesKalmanFitMaterials.push_back(FitInnerBeMaterial);
00187 
00188 
00190         G4LogicalVolume* logicalGoldLayerVolume = const_cast<G4LogicalVolume*>(GDMLProcessor::GetInstance()->GetLogicalVolume("logicalgoldLayer"));
00191         G4Material* goldLayerMaterial = logicalGoldLayerVolume->GetMaterial();
00192         G4Tubs* goldLayerTub = dynamic_cast<G4Tubs*>(logicalGoldLayerVolume->GetSolid());
00193 
00194         Z = 0.;
00195         A = 0.;
00196         for(i=0; i<goldLayerMaterial->GetElementVector()->size(); i++){
00197                 Z += (goldLayerMaterial->GetElement(i)->GetZ())*
00198                         (goldLayerMaterial->GetFractionVector()[i]);
00199                 A += (goldLayerMaterial->GetElement(i)->GetA())*
00200                         (goldLayerMaterial->GetFractionVector()[i]);
00201         }
00202         Ionization = goldLayerMaterial->GetIonisation()->GetMeanExcitationEnergy();
00203         Density = goldLayerMaterial->GetDensity()/(g/cm3);
00204         Radlen = goldLayerMaterial->GetRadlen();
00205         std::cout<<"gold layer: Z: "<<Z<<" A: "<<(A/(g/mole))<<" Ionization: "<<(Ionization/eV)<<" Density: "<<Density<<" Radlen: "<<Radlen<<std::endl;
00206         KalFitMaterial FitGoldLayerMaterial(Z,A/g/mole,Ionization/eV,Density,Radlen/10.);
00207         _BesKalmanFitMaterials.push_back(FitGoldLayerMaterial);
00208 
00209 
00211         double radius, thick, length , z0;
00212 
00214         radius = innerwallFilm1Tub->GetInnerRadius()/(cm);
00215         thick  = innerwallFilm1Tub->GetOuterRadius()/(cm) - innerwallFilm1Tub->GetInnerRadius()/(cm);
00216         length = 2.0*innerwallFilm1Tub->GetZHalfLength()/(cm);
00217         z0     = 0.0;
00218         std::cout<<"innerwallFilm1: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl;
00219         KalFitCylinder innerwallFilm1Cylinder(&_BesKalmanFitMaterials[1], radius, thick, length , z0);
00220         _BesKalmanFitWalls.push_back(innerwallFilm1Cylinder);
00221 
00222 
00224         radius = innerwallTub->GetInnerRadius()/(cm);
00225         thick  = innerwallTub->GetOuterRadius()/(cm) - innerwallTub->GetInnerRadius()/(cm);
00226         length = 2.0*innerwallTub->GetZHalfLength()/(cm);
00227         z0     = 0.0;
00228         std::cout<<"innerwall: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl;
00229         KalFitCylinder innerwallCylinder(&_BesKalmanFitMaterials[2], radius, thick, length , z0);
00230         _BesKalmanFitWalls.push_back(innerwallCylinder);
00231 
00233         radius = innerwallFilm0Tub->GetInnerRadius()/(cm);
00234         thick  = innerwallFilm0Tub->GetOuterRadius()/(cm) - innerwallFilm0Tub->GetInnerRadius()/(cm);
00235         length = 2.0*innerwallFilm0Tub->GetZHalfLength()/(cm);
00236         z0     = 0.0;
00237         std::cout<<"innerwallFilm0: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl;
00238         KalFitCylinder innerwallFilm0Cylinder(&_BesKalmanFitMaterials[3], radius, thick, length , z0);
00239         _BesKalmanFitWalls.push_back(innerwallFilm0Cylinder);
00240 
00242         radius = outerBeTub->GetOuterRadius()/(cm);
00243         thick  = innerwallTub->GetInnerRadius()/(cm) - outerBeTub->GetOuterRadius()/(cm);
00244         length = 2.0*innerwallTub->GetZHalfLength()/(cm);
00245         z0     = 0.0;
00246         std::cout<<"outer air: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl;
00247         KalFitCylinder outerAirCylinder(&_BesKalmanFitMaterials[4], radius, thick, length , z0);
00248         _BesKalmanFitWalls.push_back(outerAirCylinder);
00249 
00251         radius = outerBeTub->GetInnerRadius()/(cm);
00252         thick  = outerBeTub->GetOuterRadius()/(cm) - outerBeTub->GetInnerRadius()/(cm);
00253         length = 2.0*outerBeTub->GetZHalfLength()/(cm);
00254         z0     = 0.0;
00255         std::cout<<"outer Be: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl; 
00256         KalFitCylinder outerBeCylinder(&_BesKalmanFitMaterials[5], radius, thick, length , z0);
00257         _BesKalmanFitWalls.push_back(outerBeCylinder);
00258 
00260         radius = oilLayerTub->GetInnerRadius()/(cm);
00261         thick  = oilLayerTub->GetOuterRadius()/(cm) - oilLayerTub->GetInnerRadius()/(cm);
00262         length = 2.0*oilLayerTub->GetZHalfLength()/(cm);
00263         z0     = 0.0;
00264         std::cout<<"oil layer: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl; 
00265         KalFitCylinder oilLayerCylinder(&_BesKalmanFitMaterials[6], radius, thick, length , z0);
00266         _BesKalmanFitWalls.push_back(oilLayerCylinder);
00267 
00269         radius = innerBeTub->GetInnerRadius()/(cm);
00270         thick  = innerBeTub->GetOuterRadius()/(cm) - innerBeTub->GetInnerRadius()/(cm);
00271         length = 2.0*innerBeTub->GetZHalfLength()/(cm);
00272         z0     = 0.0;
00273         std::cout<<"inner Be: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl; 
00274         KalFitCylinder innerBeCylinder(&_BesKalmanFitMaterials[7], radius, thick, length , z0);
00275         _BesKalmanFitWalls.push_back(innerBeCylinder);
00276 
00278         radius = goldLayerTub->GetInnerRadius()/(cm);
00279         thick  = goldLayerTub->GetOuterRadius()/(cm) - goldLayerTub->GetInnerRadius()/(cm);
00280         length = 2.0*goldLayerTub->GetZHalfLength()/(cm);
00281         z0     = 0.0;
00282         std::cout<<"gold layer: "<<" radius: "<<radius<<" thick:"<<thick<<" length: "<<length<<std::endl; 
00283         KalFitCylinder goldLayerCylinder(&_BesKalmanFitMaterials[8], radius, thick, length , z0);
00284         _BesKalmanFitWalls.push_back(goldLayerCylinder);
00285 }
00286 
00287 
00288 
00289 

Generated on Tue Nov 29 23:13:24 2016 for BOSS_7.0.2 by  doxygen 1.4.7