00001 #include "BDSReadOutGeometry.hh"
00002
00003 #include "BDSAcceleratorModel.hh"
00004 #include "BDSDebug.hh"
00005 #include "BDSGlobalConstants.hh"
00006 #include "BDSMaterials.hh"
00007 #include "BDSUtilities.hh"
00008
00009 #include "globals.hh"
00010 #include "G4Box.hh"
00011 #include "G4CutTubs.hh"
00012 #include "G4LogicalVolume.hh"
00013 #include "G4Material.hh"
00014 #include "G4VReadOutGeometry.hh"
00015 #include "G4VSolid.hh"
00016
00017 BDSReadOutGeometry::BDSReadOutGeometry(G4String name):
00018 G4VReadOutGeometry(name)
00019 {;}
00020
00021 BDSReadOutGeometry::~BDSReadOutGeometry()
00022 {;}
00023
00024 G4VPhysicalVolume* BDSReadOutGeometry::Build()
00025 {
00026 return BDSAcceleratorModel::Instance()->GetReadOutWorldPV();
00027 }
00028
00029
00030 G4LogicalVolume* BDS::BuildReadOutVolume(G4String name,
00031 G4double chordLength,
00032 G4double angle)
00033 {
00034 #ifdef BDSDEBUG
00035 G4cout << __METHOD_NAME__ << G4endl;
00036 #endif
00037 if (!BDS::IsFinite(chordLength)) return NULL;
00038
00039 G4double roRadius = BDSGlobalConstants::Instance()->GetSamplerDiameter()*0.5;
00040 G4Material* roMaterial = BDSMaterials::Instance()->GetMaterial(BDSGlobalConstants::Instance()->GetEmptyMaterial());
00041 G4VSolid* roSolid = NULL;
00042 if (!BDS::IsFinite(angle))
00043 {
00044
00045 roSolid = new G4Box(name + "_ro_solid",
00046 roRadius,
00047 roRadius,
00048 chordLength*0.5);
00049 }
00050 else
00051 {
00052
00053 G4int orientation = BDS::CalculateOrientation(angle);
00054 G4double in_z = cos(0.5*fabs(angle*0.5));
00055 G4double in_x = sin(0.5*fabs(angle*0.5));
00056 G4ThreeVector inputface = G4ThreeVector(-orientation*in_x, 0.0, -1.0*in_z);
00057
00058 G4ThreeVector outputface = G4ThreeVector(-orientation*in_x, 0.0, in_z);
00059
00060 roSolid = new G4CutTubs(name + "_ro_solid",
00061 0,
00062 roRadius,
00063 chordLength*0.5,
00064 0,
00065 CLHEP::twopi,
00066 inputface,
00067 outputface);
00068 }
00069
00070
00071
00072 G4LogicalVolume* readOutLV = new G4LogicalVolume(roSolid,
00073 roMaterial,
00074 name + "_ro_lv");
00075
00076 return readOutLV;
00077 }