00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "BDSExecOptions.hh"
00014 #include "BDSGlobalConstants.hh"
00015 #include "BDSDump.hh"
00016 #include "G4Box.hh"
00017 #include "G4Tubs.hh"
00018 #include "G4VisAttributes.hh"
00019 #include "G4LogicalVolume.hh"
00020 #include "G4VPhysicalVolume.hh"
00021 #include "G4UserLimits.hh"
00022 #include "BDSDumpSD.hh"
00023 #include "BDSMaterials.hh"
00024 #include "G4SDManager.hh"
00025
00026 BDSDumpSD* BDSDumpSensDet;
00027
00028 int BDSDump::nDumps=0;
00029
00030 BDSDump::BDSDump (G4String name, G4double length):
00031 BDSAcceleratorComponent(name, length, 0, "dump")
00032 {
00033
00034 ++nDumps;
00035
00036 }
00037
00038 void BDSDump::BuildContainerLogicalVolume()
00039 {
00040 G4double radius = BDSGlobalConstants::Instance()->GetSamplerDiameter() * 0.5;
00041
00042 containerSolid = new G4Box(name + "_container_solid",
00043 radius,
00044 radius,
00045 chordLength*0.5);
00046
00047 containerLogicalVolume = new G4LogicalVolume(containerSolid,
00048 emptyMaterial,
00049 name + "_container_lv");
00050
00051 #ifndef NOUSERLIMITS
00052 G4UserLimits* itsOuterUserLimits = new G4UserLimits();
00053 itsOuterUserLimits->SetMaxAllowedStep(chordLength);
00054 itsOuterUserLimits->SetUserMinEkine(BDSGlobalConstants::Instance()->GetThresholdCutCharged());
00055 itsOuterUserLimits->SetUserMaxTime(BDSGlobalConstants::Instance()->GetMaxTime());
00056 containerLogicalVolume->SetUserLimits(itsOuterUserLimits);
00057 #endif
00058
00059 if(nDumps==0)
00060 {
00061 G4SDManager* SDMan = G4SDManager::GetSDMpointer();
00062 BDSDumpSensDet=new BDSDumpSD(name,"plane");
00063 SDMan->AddNewDetector(BDSDumpSensDet);
00064 }
00065 containerLogicalVolume->SetSensitiveDetector(BDSDumpSensDet);
00066 }
00067
00068 BDSDump::~BDSDump()
00069 {
00070 nDumps--;
00071 }