src/BDSWorld.cc

00001 #include "BDSWorld.hh"
00002 #include "BDSBeamlineNavigator.hh"
00003 #include "BDSMaterials.hh"
00004 #include "BDSTunnelCavity.hh"
00005 #include "G4Box.hh"
00006 #include "G4PVPlacement.hh"
00007 
00008 /*
00009 BDSWorld* BDSWorld::_instance = 0;
00010 
00011 BDSWorld* BDSWorld::Instance(){
00012   if(_instance==0) {
00013     _instance = new BDSWorld();
00014   }
00015   return _instance;
00016 }
00017 */
00018 
00019 BDSWorld::BDSWorld(){
00020   _size = new G4ThreeVector(0.,0.,0.);
00021   _material = BDSMaterials::Instance()->GetMaterial(BDSGlobalConstants::Instance()->GetSoilMaterialName()),
00022   build();
00023   G4cout << "BDSWorld - placing" << G4endl;
00024   place();
00025 }
00026 
00027 BDSWorld::~BDSWorld(){
00028   delete _size;
00029   /*
00030   delete _solidVolume;
00031                   //                gFlashRegion.back()->SetUserLimits(new G4UserLimits(var->GetLength()/10.0));
00032                   //                MultipleSensVols[i]->SetUserLimits(new G4UserLimits(var->GetLength()/10.0));
00033 b
00034   delete _logicalVolume;
00035   delete _physicalVolume;
00036   delete _instance;
00037   */
00038 }
00039 
00040 void BDSWorld::build(){
00041   G4cout << "BDSWorld::build() - constructSolid()" << G4endl;
00042   constructSolid();
00043   G4cout << "BDSWorld::build() - constructLogical()" << G4endl;
00044   constructLogical();
00045   G4cout << "BDSWorld::build() - setVisAttributes()" << G4endl;
00046   setVisAttributes();
00047   G4cout << "BDSWorld::build() - setUseLimits()" << G4endl;
00048   setUserLimits();
00049   G4cout << "BDSWorld::build() - finished()" << G4endl;
00050 }
00051 
00052 
00053 void BDSWorld::constructSolid(){
00054   calcSize();
00055   G4cout << "BDSWorld::constructSolid - making solid volume..." << G4endl;
00056   _solidVolume = new G4Box("World", _size->x(), _size->y(), _size->z());
00057   _solidVolume->DumpInfo();
00058 }
00059 
00060 void BDSWorld::calcSize(){
00061   G4cout << "BDSWorld::calcSize() - " << G4endl;
00062   _size->setX((BDSTunnelCavity::Instance()->widthMax()->x()+BDSGlobalConstants::Instance()->GetTunnelSoilThickness())/2.0);
00063   _size->setY((BDSTunnelCavity::Instance()->widthMax()->y()+BDSGlobalConstants::Instance()->GetTunnelSoilThickness())/2.0);
00064   _size->setZ((BDSTunnelCavity::Instance()->widthMax()->z())/2.0);
00065   G4cout << "BDSWorld::calcSize() - size x, y, z = " << _size->x()/m << " " << _size->y()/m << " " << _size->z()/m << " m" << G4endl;
00066 }
00067 
00068 void BDSWorld::constructLogical(){
00069   G4cout << "BDSWorld::constructLogical - making logical volume..." << G4endl;
00070   _logicalVolume = new G4LogicalVolume(_solidVolume,
00071                                        _material,
00072                                        "world_logical");
00073   G4cout << "BDSWorld::constructLogical - finished." << G4endl;
00074 }
00075 
00076 void BDSWorld::setVisAttributes(){
00077   _visAttributes = new G4VisAttributes(true);
00078   _logicalVolume->SetVisAttributes(_visAttributes);
00079 }
00080 
00081 void BDSWorld::setUserLimits(){
00082 #ifndef NOUSERLIMITS
00083   _userLimits =new G4UserLimits();
00084   _userLimits->SetMaxAllowedStep(10*m);
00085   _userLimits->SetUserMinEkine(BDSGlobalConstants::Instance()->GetThresholdCutCharged());
00086   _userLimits->SetUserMaxTime(BDSGlobalConstants::Instance()->GetMaxTime());
00087   _logicalVolume->SetUserLimits(_userLimits);
00088 #endif
00089 }
00090 
00091 void BDSWorld::place(){
00092   G4cout << "BDSWorld::place - " << G4endl;
00093   G4ThreeVector zeroThreeVector = G4ThreeVector(0,0,0);
00094   _physicalVolume = new G4PVPlacement(0, // no rotation
00095                                       zeroThreeVector,     // at (0,0,0)
00096                                       _logicalVolume,      
00097                                       "world_physical_volume",
00098                                       NULL,                // its mother  volume
00099                                       false,               // no boolean operation
00100                                       0,                   // copy number
00101                                       false
00102                                       );
00103   
00104 }
00105 
00106 G4VPhysicalVolume* BDSWorld::physicalVolume(){
00107   return _physicalVolume;
00108 }
00109 
00110 G4LogicalVolume* BDSWorld::logicalVolume(){
00111   return _logicalVolume;
00112 
00113 }
00114 
00115 G4UserLimits* BDSWorld::userLimits(){
00116   return _userLimits;
00117 }

Generated on 27 Aug 2013 for BDSIM by  doxygen 1.4.7