00001 #include "DsPmtModel.h"
00002
00003 #include "G4OpticalPhoton.hh"
00004 #include "G4FastTrack.hh"
00005 #include "G4TransportationManager.hh"
00006 #include "G4Navigator.hh"
00007 #include "G4VSensitiveDetector.hh"
00008
00009 class G4Hooks {
00010 public:
00011 G4Hooks()
00012 : fakeStep(new G4Step)
00013 , touchable(new G4TouchableHistory )
00014 , navi(new G4Navigator)
00015 , setup(false) { }
00016
00017 ~G4Hooks() {
00018 delete fakeStep;
00019 delete navi;
00020
00021 }
00022
00023 G4Step * fakeStep;
00024 G4TouchableHandle touchable;
00025 G4Navigator* navi;
00026 bool setup;
00027 };
00028
00029 DsPmtModel::DsPmtModel(const G4String& name, G4Envelope* volume, G4bool unique)
00030 : G4VFastSimulationModel(name,volume,unique)
00031 , m_hooks(new G4Hooks)
00032 {
00033 G4cout << "DsPmtModel " << name << " created" << G4endl;
00034 }
00035
00036 DsPmtModel::DsPmtModel(const G4String& name)
00037 : G4VFastSimulationModel(name)
00038 , m_hooks(new G4Hooks)
00039 {
00040 G4cout << "DsPmtModel " << name << " created" << G4endl;
00041 }
00042
00043 DsPmtModel::~DsPmtModel ()
00044 {
00045 delete m_hooks; m_hooks = 0;
00046 }
00047
00048
00049 G4bool DsPmtModel::IsApplicable(const G4ParticleDefinition& particle)
00050 {
00051 G4cout << "DsPmtModel checking if applicable to " << particle.GetParticleName() << G4endl;
00052 return &particle == G4OpticalPhoton::Definition();
00053 }
00054
00055 G4bool DsPmtModel::ModelTrigger(const G4FastTrack & )
00056 {
00057
00058 return true;
00059 }
00060
00061 void DsPmtModel::DoIt(const G4FastTrack& fastTrack, G4FastStep& fastStep)
00062 {
00063 const G4Track* track = fastTrack.GetPrimaryTrack();
00064 double energy = track->GetKineticEnergy();
00065
00066 fastStep.ProposeTrackStatus(fStopAndKill);
00067 fastStep.ProposePrimaryTrackPathLength(0.0);
00068 fastStep.ProposeTotalEnergyDeposited(energy);
00069 }