/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSTerminator.cc

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   //SetName("Terminator_"+BDSGlobalConstants::Instance()->StringFromInt(nThisSampler)+"_"+name);
00019 }
00020 
00021 void BDSTerminator::BuildContainerLogicalVolume()
00022 {
00023   //Bascially a copy of BDSSampler but with different sensitive detector added
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   // SENSITIVE DETECTOR
00034   G4SDManager* SDMan    = G4SDManager::GetSDMpointer();
00035   G4VSensitiveDetector* theTerminator  = new BDSTerminatorSD(name);
00036   SDMan->AddNewDetector(theTerminator);
00037   containerLogicalVolume->SetSensitiveDetector(theTerminator);
00038   
00039   // USER LIMITS - the logic of killing particles on last turn
00040   containerLogicalVolume->SetUserLimits(new BDSTerminatorUserLimits(DBL_MAX,DBL_MAX,DBL_MAX,0.,0.));
00041   //these are default G4UserLimit values so everything will normally be tracked
00042   //BDSTerminatorUserLimits has the logic inside it to respond to turn number
00043 
00044   // register extents with BDSGeometryComponent base class
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   //based on void add_sampler in parser.h
00059   //create basic element with type teleporter and put on end
00060   struct Element e;
00061   e.type = _TERMINATOR;
00062   e.name = "Terminator";
00063   e.lst  = NULL; 
00064   beamline_list->push_back(e);
00065 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7