00001 #include "BDSGlobalConstants.hh"
00002 #include "BDSMaterials.hh"
00003 #include "BDSTerminator.hh"
00004 #include "BDSTerminatorSD.hh"
00005 #include "BDSTerminatorUserLimits.hh"
00006 #include "G4Box.hh"
00007 #include "G4LogicalVolume.hh"
00008 #include "G4VPhysicalVolume.hh"
00009 #include "G4VisAttributes.hh"
00010 #include "G4UserLimits.hh"
00011 #include "G4SDManager.hh"
00012 #include "BDSDebug.hh"
00013 #include "parser/enums.h"
00014
00015 BDSTerminator::BDSTerminator(G4String name, G4double length):
00016 BDSAcceleratorComponent(name, length, 0, "terminator")
00017 {
00018
00019 }
00020
00021 void BDSTerminator::BuildContainerLogicalVolume()
00022 {
00023
00024 G4double radius = BDSGlobalConstants::Instance()->GetSamplerDiameter() * 0.5;
00025 containerSolid = new G4Box(name + "_container_solid",
00026 radius,
00027 radius,
00028 chordLength * 0.5);
00029 containerLogicalVolume = new G4LogicalVolume(containerSolid,
00030 emptyMaterial,
00031 name + "_container_lv");
00032
00033
00034 G4SDManager* SDMan = G4SDManager::GetSDMpointer();
00035 G4VSensitiveDetector* theTerminator = new BDSTerminatorSD(name);
00036 SDMan->AddNewDetector(theTerminator);
00037 containerLogicalVolume->SetSensitiveDetector(theTerminator);
00038
00039
00040 containerLogicalVolume->SetUserLimits(new BDSTerminatorUserLimits(DBL_MAX,DBL_MAX,DBL_MAX,0.,0.));
00041
00042
00043
00044
00045 SetExtentX(-radius,radius);
00046 SetExtentY(-radius,radius);
00047 SetExtentZ(-chordLength*0.5, chordLength*0.5);
00048 }
00049
00050 BDSTerminator::~BDSTerminator()
00051 {;}
00052
00053 void AddTerminatorToEndOfBeamline(ElementList* beamline_list)
00054 {
00055 #ifdef BDSDEBUG
00056 G4cout << __METHOD_NAME__ << ": adding terminator element to end of beamline" << G4endl;
00057 #endif
00058
00059
00060 struct Element e;
00061 e.type = _TERMINATOR;
00062 e.name = "Terminator";
00063 e.lst = NULL;
00064 beamline_list->push_back(e);
00065 }