#include "SteppingAction.hh" #include "EventAction.hh" #include "G4ParticleTable.hh" #include "G4ParticleDefinition.hh" #include "G4ParticleTypes.hh" #include "DetectorConstruction.hh" #include "G4StepStatus.hh" #include "G4SteppingManager.hh" #include "Randomize.hh" #include "G4RunManager.hh" SteppingAction::SteppingAction(EventAction* EA):eventaction(EA), fScoringVolume(0) { } SteppingAction::~SteppingAction() { } void SteppingAction::UserSteppingAction(const G4Step* aStep) { /* G4cout << " Track: " << aStep->GetTrack()->GetTrackID() << " " << aStep->GetTrack()->GetDefinition()->GetParticleName() << " ParentID: " << aStep->GetTrack()->GetParentID() << G4endl; G4cout << " Step: " << aStep->GetTrack()->GetCurrentStepNumber() << " KinE: " << aStep->GetPreStepPoint()->GetKineticEnergy() << " dE: " << aStep->GetTotalEnergyDeposit() << " NofSecondariesThisStep: " << aStep->GetNumberOfSecondariesInCurrentStep() << G4endl; G4cout << " Secondaries: " << G4endl; for(G4int i=0;iGetNumberOfSecondariesInCurrentStep();i++) { G4cout << aStep->GetSecondaryInCurrentStep()->at(i)->GetDefinition()->GetParticleName() << " KinE: " << aStep->GetSecondaryInCurrentStep()->at(i)->GetKineticEnergy() << " CreatorProcess: " << aStep->GetSecondaryInCurrentStep()->at(i)->GetCreatorProcess()->GetProcessName() << " ParentID: " << aStep->GetSecondaryInCurrentStep()->at(i)->GetParentID() << G4endl; } */ const std::vector* secondary = aStep->GetSecondaryInCurrentStep(); //G4cout << " NofSecinThisStep: " << (*secondary).size() << G4endl; for(size_t lp=0; lp<(*secondary).size(); lp++) { /* if((*secondary)[lp]->GetDefinition() == G4Gamma::Gamma() && (*secondary)[lp]->GetKineticEnergy()/keV>650) { G4cout << "Secondary: " << (*secondary)[lp]->GetDefinition()->GetParticleName() << G4endl; G4cout << " KinE: " << (*secondary)[lp]->GetKineticEnergy()/keV << "\t Mom: " << (*secondary)[lp]->GetMomentum() << "\t Z: " << (*secondary)[lp]->GetDefinition()->GetAtomicNumber() << "\t A: " << (*secondary)[lp]->GetDefinition()->GetAtomicMass() << "\t PDGMass: " << (*secondary)[lp]->GetDefinition()->GetPDGMass() << "\t KinE from Mom: " << (sqrt(pow((*secondary)[lp]->GetDefinition()->GetPDGMass(),2)+pow((*secondary)[lp]->GetMomentum().mag(),2))-(*secondary)[lp]->GetDefinition()->GetPDGMass())/keV << G4endl; G4cout << "parent: " << aStep->GetTrack()->GetDefinition()->GetParticleName() << G4endl; G4cout << "TrackID: " << aStep->GetTrack()->GetTrackID() << "\t KinE: " << aStep->GetPreStepPoint()->GetKineticEnergy()/keV << "\t Mom: " << aStep->GetPreStepPoint()->GetMomentum() << "\t Pos: " << aStep->GetTrack()->GetPosition() << "\t Z: " << aStep->GetTrack()->GetDefinition()->GetAtomicNumber() << "\t A: " << aStep->GetTrack()->GetDefinition()->GetAtomicMass() << "\t PDGMass: " << aStep->GetTrack()->GetDefinition()->GetPDGMass() << "\t KinE from Mom: " << (sqrt(pow(aStep->GetTrack()->GetDefinition()->GetPDGMass(),2)+pow(aStep->GetPreStepPoint()->GetMomentum().mag(),2))-aStep->GetTrack()->GetDefinition()->GetPDGMass())/keV << G4endl; } */ eventaction->SetSecondaryInfo((*secondary)[lp]->GetKineticEnergy(),(*secondary)[lp]->GetMomentum(),(*secondary)[lp]->GetDefinition(),aStep->GetPreStepPoint()->GetKineticEnergy(),aStep->GetPreStepPoint()->GetMomentum(),aStep->GetTrack()->GetPosition(),aStep->GetTrack()->GetDefinition()); } if (!fScoringVolume) { const DetectorConstruction* detectorConstruction = static_cast (G4RunManager::GetRunManager()->GetUserDetectorConstruction()); fScoringVolume = detectorConstruction->GetScoringVolume(); } // get the status of the pre step point G4StepStatus PreStepStatus = aStep->GetPreStepPoint()->GetStepStatus(); // get the volume of the post step point G4LogicalVolume* PostStepPoint = aStep->GetPostStepPoint()->GetTouchableHandle()->GetVolume()->GetLogicalVolume(); // Check if if ((PreStepStatus == fGeomBoundary) && (PostStepPoint == fScoringVolume)){ G4cout<< " Position z" << aStep->GetPostStepPoint()->GetPosition().z() << G4endl; } }