DetectorConstruction Class Reference

#include <DetectorConstruction.hh>

Inheritance diagram for DetectorConstruction:

Inheritance graph
[legend]
Collaboration diagram for DetectorConstruction:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 DetectorConstruction ()
 ~DetectorConstruction ()
void SetWorldMaterial (G4String)
void SetSpacecraftMaterial (G4String)
void SetCabinMaterial (G4String)
void SetFloorMaterial (G4String)
void SetAstronautMaterial (G4String)
void SetWorldSizeXY (G4double val)
void SetWorldSizeZ (G4double val)
void SetSpacecraftRadius (G4double val)
void SetSpacecraftLength (G4double val)
void SetSpacecraftThickness (G4double val)
void SetCabinRadius (G4double val)
void SetCabinLength (G4double val)
void SetFloorThickness (G4double val)
void SetFloorWidth (G4double val)
void SetFloorLength (G4double val)
void SetFloorYcenter (G4double val)
void SetAstronautHeight (G4double val)
void SetAstronautTopWidth (G4double val)
void SetAstronautBottomWidth (G4double val)
void SetAstronautPosition (G4double val)
G4VPhysicalVolume * Construct ()
void UpdateGeometry ()
G4Material * GetWorldMaterial ()
G4Material * GetSpacecraftMaterial ()
G4Material * GetCabinMaterial ()
G4Material * GetFloorMaterial ()
G4Material * GetAstronautMaterial ()
G4double GetWorldSizeXY ()
G4double GetWorldSizeZ ()
G4double GetSpacecraftRadius ()
G4double GetSpacecraftLength ()
G4double GetSpacecraftThickness ()
G4double GetCabinRadius ()
G4double GetCabinLength ()
G4double GetFloorThickness ()
G4double GetFloorWidth ()
G4double GetFloorLength ()
G4double GetFloorYcenter ()
G4double GetAstronautHeight ()
G4double GetAstronautTopWidth ()
G4double GetAstronautBottomWidth ()
G4double GetAstronautPosition ()
void PrintParameters ()

Private Member Functions

void DefineMaterials ()
G4VPhysicalVolume * ConstructVolumes ()

Private Attributes

G4Material * m_worldMaterial
G4Material * m_spacecraftMaterial
G4Material * m_cabinMaterial
G4Material * m_floorMaterial
G4Material * m_astronautMaterial
G4VPhysicalVolume * m_physiWorld
G4double m_worldSizeXY
G4double m_worldSizeZ
G4double m_spacecraftRadius
G4double m_spacecraftLength
G4double m_spacecraftThickness
G4double m_cabinRadius
G4double m_cabinLength
G4double m_floorThickness
G4double m_floorWidth
G4double m_floorLength
G4double m_floorYcenter
G4double m_astronautHeight
G4double m_astronautTopWidth
G4double m_astronautBottomWidth
G4double m_astronautPosition


Detailed Description

Definition at line 18 of file DetectorConstruction.hh.


Constructor & Destructor Documentation

DetectorConstruction::DetectorConstruction (  ) 

Definition at line 27 of file DetectorConstruction.cc.

00028 {  
00029   DefineMaterials();
00030   
00031   //define geometrical parameters
00032   //
00033   m_cabinRadius = 50*cm;       
00034   m_cabinLength = 80*cm;
00035   m_spacecraftThickness = 2*cm;
00036   
00037   m_floorThickness = 2*cm;
00038 
00039   m_astronautHeight = 50*cm;
00040   m_astronautTopWidth = 40*cm;
00041   m_astronautBottomWidth = 60*cm;
00042 }

DetectorConstruction::~DetectorConstruction (  ) 

Definition at line 46 of file DetectorConstruction.cc.

00047 { }


Member Function Documentation

void DetectorConstruction::SetWorldMaterial ( G4String  materialChoice  ) 

Definition at line 320 of file DetectorConstruction.cc.

00321 {
00322   // search the material by its name   
00323   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
00324   if (pttoMaterial) m_worldMaterial = pttoMaterial;
00325 }

void DetectorConstruction::SetSpacecraftMaterial ( G4String  materialChoice  ) 

Definition at line 329 of file DetectorConstruction.cc.

00330 {
00331   // search the material by its name   
00332   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
00333   if (pttoMaterial) m_spacecraftMaterial = pttoMaterial;
00334 }

void DetectorConstruction::SetCabinMaterial ( G4String  materialChoice  ) 

Definition at line 338 of file DetectorConstruction.cc.

00339 {
00340   // search the material by its name   
00341   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
00342   if (pttoMaterial) m_cabinMaterial = pttoMaterial;
00343 }

void DetectorConstruction::SetFloorMaterial ( G4String  materialChoice  ) 

Definition at line 347 of file DetectorConstruction.cc.

00348 {
00349   // search the material by its name   
00350   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
00351   if (pttoMaterial) m_floorMaterial = pttoMaterial;
00352 }

void DetectorConstruction::SetAstronautMaterial ( G4String  materialChoice  ) 

Definition at line 356 of file DetectorConstruction.cc.

00357 {
00358   // search the material by its name   
00359   G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);     
00360   if (pttoMaterial) m_astronautMaterial = pttoMaterial;
00361 }

void DetectorConstruction::SetWorldSizeXY ( G4double  val  )  [inline]

Definition at line 33 of file DetectorConstruction.hh.

00033 {m_worldSizeXY = val;};

void DetectorConstruction::SetWorldSizeZ ( G4double  val  )  [inline]

Definition at line 34 of file DetectorConstruction.hh.

00034 {m_worldSizeZ = val;};

void DetectorConstruction::SetSpacecraftRadius ( G4double  val  )  [inline]

Definition at line 35 of file DetectorConstruction.hh.

00035 {m_spacecraftRadius = val;};

void DetectorConstruction::SetSpacecraftLength ( G4double  val  )  [inline]

Definition at line 36 of file DetectorConstruction.hh.

00036 {m_spacecraftLength = val;};

void DetectorConstruction::SetSpacecraftThickness ( G4double  val  )  [inline]

Definition at line 37 of file DetectorConstruction.hh.

00037 {m_spacecraftThickness = val;};

void DetectorConstruction::SetCabinRadius ( G4double  val  )  [inline]

Definition at line 38 of file DetectorConstruction.hh.

00038 {m_cabinRadius = val;};

void DetectorConstruction::SetCabinLength ( G4double  val  )  [inline]

Definition at line 39 of file DetectorConstruction.hh.

00039 {m_cabinLength = val;};

void DetectorConstruction::SetFloorThickness ( G4double  val  )  [inline]

Definition at line 40 of file DetectorConstruction.hh.

00040 {m_floorThickness = val;};

void DetectorConstruction::SetFloorWidth ( G4double  val  )  [inline]

Definition at line 41 of file DetectorConstruction.hh.

00041 {m_floorWidth = val;};

void DetectorConstruction::SetFloorLength ( G4double  val  )  [inline]

Definition at line 42 of file DetectorConstruction.hh.

00042 {m_floorLength = val;};

void DetectorConstruction::SetFloorYcenter ( G4double  val  )  [inline]

Definition at line 43 of file DetectorConstruction.hh.

00043 {m_floorYcenter = val;};

void DetectorConstruction::SetAstronautHeight ( G4double  val  )  [inline]

Definition at line 44 of file DetectorConstruction.hh.

00044 {m_astronautHeight = val;};

void DetectorConstruction::SetAstronautTopWidth ( G4double  val  )  [inline]

Definition at line 45 of file DetectorConstruction.hh.

00045 {m_astronautTopWidth = val;};

void DetectorConstruction::SetAstronautBottomWidth ( G4double  val  )  [inline]

Definition at line 46 of file DetectorConstruction.hh.

00046 {m_astronautBottomWidth = val;};

void DetectorConstruction::SetAstronautPosition ( G4double  val  )  [inline]

Definition at line 47 of file DetectorConstruction.hh.

00047 {m_astronautPosition = val;};

G4VPhysicalVolume * DetectorConstruction::Construct (  ) 

Definition at line 51 of file DetectorConstruction.cc.

00052 {
00053   return ConstructVolumes();
00054 }

void DetectorConstruction::UpdateGeometry (  ) 

Definition at line 367 of file DetectorConstruction.cc.

00368 {
00369   G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes());
00370 }

G4Material* DetectorConstruction::GetWorldMaterial (  )  [inline]

Definition at line 55 of file DetectorConstruction.hh.

00055 {return m_worldMaterial;};                                  

G4Material* DetectorConstruction::GetSpacecraftMaterial (  )  [inline]

Definition at line 56 of file DetectorConstruction.hh.

00056 {return m_spacecraftMaterial;};

G4Material* DetectorConstruction::GetCabinMaterial (  )  [inline]

Definition at line 57 of file DetectorConstruction.hh.

00057 {return m_cabinMaterial;};     

G4Material* DetectorConstruction::GetFloorMaterial (  )  [inline]

Definition at line 58 of file DetectorConstruction.hh.

00058 {return m_floorMaterial;};

G4Material* DetectorConstruction::GetAstronautMaterial (  )  [inline]

Definition at line 59 of file DetectorConstruction.hh.

00059 {return m_astronautMaterial;};

G4double DetectorConstruction::GetWorldSizeXY (  )  [inline]

Definition at line 61 of file DetectorConstruction.hh.

Referenced by PrimaryGeneratorAction::GeneratePrimaries().

00061 {return m_worldSizeXY;};

G4double DetectorConstruction::GetWorldSizeZ (  )  [inline]

Definition at line 62 of file DetectorConstruction.hh.

Referenced by PrimaryGeneratorAction::GeneratePrimaries().

00062 {return m_worldSizeZ;};

G4double DetectorConstruction::GetSpacecraftRadius (  )  [inline]

Definition at line 63 of file DetectorConstruction.hh.

00063 {return m_spacecraftRadius;};            

G4double DetectorConstruction::GetSpacecraftLength (  )  [inline]

Definition at line 64 of file DetectorConstruction.hh.

00064 {return m_spacecraftLength;};    

G4double DetectorConstruction::GetSpacecraftThickness (  )  [inline]

Definition at line 65 of file DetectorConstruction.hh.

00065 {return m_spacecraftThickness;};

G4double DetectorConstruction::GetCabinRadius (  )  [inline]

Definition at line 66 of file DetectorConstruction.hh.

00066 {return m_cabinRadius;};            

G4double DetectorConstruction::GetCabinLength (  )  [inline]

Definition at line 67 of file DetectorConstruction.hh.

00067 {return m_cabinLength;};         

G4double DetectorConstruction::GetFloorThickness (  )  [inline]

Definition at line 68 of file DetectorConstruction.hh.

00068 {return m_floorThickness;};     

G4double DetectorConstruction::GetFloorWidth (  )  [inline]

Definition at line 69 of file DetectorConstruction.hh.

00069 {return m_floorWidth;};     

G4double DetectorConstruction::GetFloorLength (  )  [inline]

Definition at line 70 of file DetectorConstruction.hh.

00070 {return m_floorLength;};

G4double DetectorConstruction::GetFloorYcenter (  )  [inline]

Definition at line 71 of file DetectorConstruction.hh.

00071 {return m_floorYcenter;};     

G4double DetectorConstruction::GetAstronautHeight (  )  [inline]

Definition at line 72 of file DetectorConstruction.hh.

00072 {return m_astronautHeight;};

G4double DetectorConstruction::GetAstronautTopWidth (  )  [inline]

Definition at line 73 of file DetectorConstruction.hh.

00073 {return m_astronautTopWidth;};

G4double DetectorConstruction::GetAstronautBottomWidth (  )  [inline]

Definition at line 74 of file DetectorConstruction.hh.

00074 {return m_astronautBottomWidth;};

G4double DetectorConstruction::GetAstronautPosition (  )  [inline]

Definition at line 75 of file DetectorConstruction.hh.

00075 {return m_astronautPosition;};

void DetectorConstruction::PrintParameters (  ) 

Definition at line 288 of file DetectorConstruction.cc.

Referenced by ConstructVolumes().

00289 {
00290   G4cout << "\n---------------------------------------------------------\n";
00291   G4cout 
00292     << "---> World : (" << m_worldSizeXY/m << " X " << m_worldSizeXY/m << " X "
00293                         << m_worldSizeZ/m << ") m of "
00294                         << m_worldMaterial->GetName() << G4endl;
00295   G4cout
00296     << "---> Spacecraft : radius = " << G4BestUnit(m_spacecraftRadius,"Length")
00297     << "\t length = " << G4BestUnit(m_spacecraftLength,"Length")
00298     << "\t thickness = " << G4BestUnit(m_spacecraftThickness,"Length")        
00299     << "\t material : " << m_spacecraftMaterial->GetName() << G4endl;
00300   G4cout
00301     << "---> Cabin : radius = " << G4BestUnit(m_cabinRadius,"Length")
00302     << "\t length = " << G4BestUnit(m_cabinLength,"Length")
00303     << "\t material : " << m_cabinMaterial->GetName() << G4endl;
00304   G4cout
00305     << "---> Floor : thickness = " << G4BestUnit(m_floorThickness,"Length")
00306     << "\t width = " << G4BestUnit(m_floorWidth,"Length")    
00307     << "\t length = " << G4BestUnit(m_floorLength,"Length")
00308     << "\t material : " << m_floorMaterial->GetName() << G4endl;
00309   G4cout
00310     << "---> Astronaut : height = " << G4BestUnit(m_astronautHeight,"Length")
00311     << "\t bottom width = " << G4BestUnit(m_astronautBottomWidth,"Length")
00312     << "\t top width = " << G4BestUnit(m_astronautTopWidth,"Length")
00313     << "\t material : " << m_astronautMaterial->GetName() << G4endl;            
00314   G4cout << "\n---------------------------------------------------------\n";
00315   G4cout << G4endl;
00316 }

void DetectorConstruction::DefineMaterials (  )  [private]

Definition at line 58 of file DetectorConstruction.cc.

Referenced by DetectorConstruction().

00059 { 
00060   //
00061   // define simple materials
00062   //
00063   G4double Z,A,density;
00064   
00065   G4Material* Al =
00066   new G4Material("Aluminium", Z=13., A=26.98*g/mole, density=2.700*g/cm3);
00067   
00068   //
00069   // build compounds from Elements
00070   //
00071   G4Element* H  = new G4Element("Hydrogen" ,"H" , Z=1., A= 1.01*g/mole);  
00072   G4Element* N  = new G4Element("Nitrogen" ,"N" , Z=7., A=14.01*g/mole);
00073   G4Element* O  = new G4Element("Oxygen"   ,"O" , Z=8., A=16.00*g/mole);
00074 
00075   G4int ncomponents, natoms;
00076   G4double fractionmass;  
00077   
00078   G4Material* Air = 
00079   new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
00080   Air->AddElement(N, fractionmass=70.*perCent);
00081   Air->AddElement(O, fractionmass=30.*perCent);
00082 
00083   G4Material* H2O = 
00084   new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
00085   H2O->AddElement(H, natoms=2);
00086   H2O->AddElement(O, natoms=1);
00087         
00088   // Vacuum standard definition...
00089   //
00090   G4Material* Vacuum =
00091   new G4Material("Galactic", Z=1., A=1.01*g/mole, density= 1.e-10*g/cm3,
00092                            kStateGas, 2.73*kelvin, 3.e-18*pascal);
00093                            
00094   //associate materials
00095   //
00096   m_worldMaterial = Vacuum;
00097   m_spacecraftMaterial = m_floorMaterial = Al;
00098   m_cabinMaterial = Air;
00099   m_astronautMaterial = H2O;
00100                              
00101   // Print
00102   //
00103   G4cout << *(G4Material::GetMaterialTable()) << G4endl;
00104 }

G4VPhysicalVolume * DetectorConstruction::ConstructVolumes (  )  [private]

Definition at line 108 of file DetectorConstruction.cc.

Referenced by Construct(), and UpdateGeometry().

00109 {
00110   // Cleanup old geometry
00111   G4GeometryManager::GetInstance()->OpenGeometry();
00112   G4PhysicalVolumeStore::GetInstance()->Clean();
00113   G4LogicalVolumeStore::GetInstance()->Clean();
00114   G4SolidStore::GetInstance()->Clean();
00115   
00116   //define geometrical parameters
00117   //    
00118   m_spacecraftRadius = m_cabinRadius + m_spacecraftThickness;       
00119   m_spacecraftLength = m_cabinLength + 2*m_spacecraftThickness;
00120   
00121   m_floorYcenter   = - 0.5*m_cabinRadius;
00122   G4double floorYtop      = m_floorYcenter + 0.5*m_floorThickness;
00123   G4double floorYbottom   = m_floorYcenter - 0.5*m_floorThickness;      
00124   m_floorWidth =
00125           2*std::sqrt(m_cabinRadius*m_cabinRadius - floorYbottom*floorYbottom);
00126   m_floorLength    = m_cabinLength;
00127     
00128   m_worldSizeXY = 2.2*m_spacecraftRadius;
00129   m_worldSizeZ  = 1.1*m_spacecraftLength;
00130   
00131   m_astronautPosition = floorYtop + 0.5*m_astronautHeight;
00132   
00133     
00134   // World volume
00135   //
00136 
00137   G4Box*
00138   solidWorld = new G4Box("World",                                  //its name
00139                  m_worldSizeXY/2,m_worldSizeXY/2,m_worldSizeZ/2);  //its size
00140   
00141   G4LogicalVolume*  
00142   logicWorld = new G4LogicalVolume(solidWorld,          //its solid
00143                                    m_worldMaterial,     //its material
00144                                    "World");            //its name
00145 
00146   m_physiWorld = new G4PVPlacement(0,                   //no rotation
00147                                  G4ThreeVector(),       //at (0,0,0)
00148                                  logicWorld,            //its logical volume
00149                                  "World",               //its name
00150                                  0,                     //its mother  volume
00151                                  false,                 //no boolean operation
00152                                  0);                    //copy number
00153                                  
00154   // SpaceCraft volume
00155   //
00156   G4Tubs*
00157   solidSpacecraft = new G4Tubs("Spacecraft",            //name
00158                          0*cm, m_spacecraftRadius,      //r1, r2
00159                          0.5*m_spacecraftLength,        //half-length 
00160                          0., twopi);                    //teta1, teta2
00161                          
00162   G4LogicalVolume*    
00163   logicSpacecraft = new G4LogicalVolume(solidSpacecraft,   //solid
00164                                     m_spacecraftMaterial,  //material
00165                                         "Spacecraft");     //name
00166   
00167                     new G4PVPlacement(0,                //no rotation
00168                                   G4ThreeVector(0,0,0), //position
00169                                   logicSpacecraft,      //logicalVolume
00170                                   "Spacecraft",         //name
00171                                    logicWorld,          //mother
00172                                    false,               //no boolean
00173                                    0);                  //copy nb
00174   
00175   // Cabin
00176   //
00177   G4Tubs*
00178   solidCabin = new G4Tubs("Cabin",                      //name
00179                          0*cm, m_cabinRadius,           //r1, r2
00180                          0.5*m_cabinLength,             //half-length 
00181                          0., 360*deg);                  //teta1, teta2
00182                          
00183   G4LogicalVolume*    
00184   logicCabin = new G4LogicalVolume(solidCabin,          //solid
00185                                    m_cabinMaterial,     //material
00186                                    "Cabin");            //name
00187                                           
00188                new G4PVPlacement(0,                     //no rotation
00189                                  G4ThreeVector(0,0,0),  //position
00190                                  logicCabin,            //logicalVolume
00191                                  "Cabin",               //name
00192                                   logicSpacecraft,      //mother
00193                                   false,                //no boolean
00194                                   0);                   //copy nb
00195   
00196 
00197   // Floor
00198   //
00199   G4Box*
00200   solidFloor = new G4Box("Floor",                                    //name
00201               m_floorWidth/2,m_floorLength/2,m_floorThickness/2);    //size
00202                     
00203   G4LogicalVolume*  
00204   logicFloor = new G4LogicalVolume(solidFloor, m_floorMaterial, "Floor");
00205   
00206   //rotation matrix to place the floor within cabin
00207   G4RotationMatrix* rotm1 = new G4RotationMatrix();
00208   rotm1->rotateX(90*deg);
00209 
00210               new G4PVPlacement(rotm1,                  //rotation
00211                                  G4ThreeVector(0,m_floorYcenter,0), //position 
00212                                  logicFloor,            //logicalVolume 
00213                                  "Floor",               //name 
00214                                  logicCabin,            //mother
00215                                  false,                 //no boolean
00216                                  0);                    //copy nb
00217                                  
00218   // Astronaut
00219   //
00220   G4Trd*
00221    solidAstronaut = new G4Trd("Astronaut",              //name
00222                0.5 * m_astronautBottomWidth,            //dx1
00223                0.5 * m_astronautTopWidth,               //dx2
00224                0.5 * m_astronautBottomWidth,            //dy1
00225                0.5 * m_astronautTopWidth,               //dy2
00226                0.5 * m_astronautHeight);                //dz
00227 
00228                          
00229   G4LogicalVolume*    
00230   logicAstronaut = new G4LogicalVolume(solidAstronaut,  //solid
00231                                    m_astronautMaterial, //material
00232                                    "Astronaut");        //name
00233                                    
00234   //rotation matrix to place astronaut within cabin
00235   G4RotationMatrix* rotm2 = new G4RotationMatrix();
00236   rotm2->rotateX(90*deg);
00237   
00238   //translation vector to place astronaut within cabin
00239   G4ThreeVector position = G4ThreeVector(0.,m_astronautPosition,0.);                               
00240                                           
00241                new G4PVPlacement(rotm2,                 //no rotation
00242                                  position,              //position
00243                                  logicAstronaut,        //logicalVolume
00244                                  "Astronaut",           //name
00245                                   logicCabin,           //mother
00246                                   false,                //no boolean
00247                                   0);                   //copy nb
00248   //colour attributes
00249   //
00250   
00251   G4VisAttributes* colourWhite= new G4VisAttributes(G4Colour(1.,1.,1.)); 
00252   colourWhite->SetVisibility(true);
00253   colourWhite->SetForceSolid(false);
00254   
00255   G4VisAttributes* colourGrey= new G4VisAttributes(G4Colour(0.5,0.5,0.5)); 
00256   colourGrey->SetVisibility(true);
00257   colourGrey->SetForceSolid(false);
00258   
00259   G4VisAttributes* colourCyan= new G4VisAttributes(G4Colour(0.,1.,1.)); 
00260   colourCyan->SetVisibility(true);
00261   colourCyan->SetForceSolid(false);
00262 
00263   G4VisAttributes* colourMagenta= new G4VisAttributes(G4Colour(1.,0.,1.)); 
00264   colourMagenta->SetVisibility(true);
00265   colourMagenta->SetForceSolid(true);
00266 
00267   G4VisAttributes* colourBlue= new G4VisAttributes(G4Colour(0.,0.,1.)); 
00268   colourBlue->SetVisibility(true);
00269   colourBlue->SetForceSolid(false);
00270   
00271   logicWorld->SetVisAttributes(colourGrey);
00272   logicSpacecraft->SetVisAttributes(colourCyan);
00273   logicCabin->SetVisAttributes(colourCyan);
00274   logicFloor->SetVisAttributes(colourWhite);
00275   logicAstronaut->SetVisAttributes(colourBlue);
00276     
00277   //print parameters
00278   //
00279   PrintParameters();
00280   
00281   // always return Physical World
00282   //
00283   return m_physiWorld;
00284 }


Member Data Documentation

G4VPhysicalVolume* DetectorConstruction::m_physiWorld [private]

Definition at line 92 of file DetectorConstruction.hh.

Referenced by ConstructVolumes().

Definition at line 107 of file DetectorConstruction.hh.

Referenced by ConstructVolumes(), GetFloorYcenter(), and SetFloorYcenter().


The documentation for this class was generated from the following files:

Generated on Fri Nov 21 10:20:02 2008 for jour2b by  doxygen 1.5.7.1