// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // /// \file B1SteppingAction.cc /// \brief Implementation of the B1SteppingAction class #include "B1SteppingAction.hh" #include "B1EventAction.hh" #include "B1DetectorConstruction.hh" #include "G4DynamicParticle.hh" #include "G4Step.hh" #include "G4Event.hh" #include "G4RunManager.hh" #include "g4analysis.hh" #include "G4LogicalVolume.hh" #include "G4Track.hh" #include "G4ParticleMomentum.hh" #include "G4SteppingManager.hh" #include "G4ios.hh" #include "G4SteppingManager.hh" #include "G4Step.hh" #include "G4StepPoint.hh" #include "G4VPhysicalVolume.hh" #include "G4ios.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... B1SteppingAction::B1SteppingAction(B1EventAction* eventAction, G4bool PrimaryPositronElectronExitFlag, G4bool SecondaryPhotonsExitFlag, G4bool SecondaryMuonsExitFlag, G4bool SecondaryPosEleExitFlag, G4bool PrimaryPositronElectronEnteringFlag, G4bool RegeneratedPositronFlag, G4int TargExt) : G4UserSteppingAction(), fEventAction(eventAction), fPrimaryPositronElectronExitFlag(PrimaryPositronElectronExitFlag), fSecondaryPhotonsExitFlag(SecondaryPhotonsExitFlag), fSecondaryMuonsExitFlag(SecondaryMuonsExitFlag), fSecondaryPosEleExitFlag(SecondaryPosEleExitFlag), fPrimaryPositronElectronEnteringFlag(PrimaryPositronElectronEnteringFlag), fRegeneratedPositronFlag(RegeneratedPositronFlag), fTargExt(TargExt), fScoringVolume(0), fScoringVolume2(0) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... B1SteppingAction::~B1SteppingAction() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void B1SteppingAction::UserSteppingAction(const G4Step* step) { auto analysisManager = G4AnalysisManager::Instance(); if (!fScoringVolume) { const B1DetectorConstruction* detectorConstruction = static_cast (G4RunManager::GetRunManager()->GetUserDetectorConstruction()); fScoringVolume = detectorConstruction->GetScoringVolume(); fScoringVolume2 = detectorConstruction->GetScoringVolume2(); } // get volume of the current step G4LogicalVolume* volume = step->GetPreStepPoint()->GetTouchableHandle() ->GetVolume()->GetLogicalVolume(); G4VPhysicalVolume* ThisVol = step->GetPreStepPoint()->GetTouchableHandle()->GetVolume(); G4VPhysicalVolume* NextVol = step->GetPostStepPoint()->GetTouchableHandle()->GetVolume(); if (volume == fScoringVolume) { G4double edepStep = step->GetTotalEnergyDeposit(); fEventAction->AddEdep(edepStep); } if (volume == fScoringVolume2) { G4double edepStep2 = step->GetTotalEnergyDeposit(); fEventAction->AddEdep2(edepStep2); } // G4String TargetExt; if (fTargExt==1) TargetExt="Target1"; else if (fTargExt==2) TargetExt="Target2"; // Retrieve the secondary particles G4SteppingManager* steppingManager = fpSteppingManager; fSecondary = steppingManager -> GetfSecondary(); G4String secondaryParticleName; G4String process; G4int fSectrackID; G4int fSsecparID; G4String volumeName; for(size_t lp1=0;lp1<(*fSecondary).size(); lp1++) { secondaryParticleName = (*fSecondary)[lp1]->GetDefinition() -> GetParticleName(); // name of the secondary process = (*fSecondary)[lp1]-> GetCreatorProcess()-> GetProcessName(); // process creating it fSectrackID = (*fSecondary)[lp1]->GetTrackID(); //track id fSsecparID = (*fSecondary)[lp1]->GetParentID(); //parent id volumeName = (*fSecondary)[lp1] -> GetVolume() -> GetName(); // volume where secondary was generated // G4cerr << G4endl; // G4cerr << "Event n°: " << lp1 << G4endl; // G4cerr << "secondaryParticleName: " << (*fSecondary)[lp1]->GetDefinition() -> GetParticleName() << G4endl; // G4cerr << "process: " << (*fSecondary)[lp1]-> GetCreatorProcess()-> GetProcessName() << G4endl; // G4cerr << "fSectrackID: " << (*fSecondary)[lp1]->GetTrackID() << G4endl; // G4cerr << "fSsecparID: " << (*fSecondary)[lp1]->GetParentID() << G4endl; // G4cerr << "volumeName: " << (*fSecondary)[lp1] -> GetVolume() -> GetName() << G4endl; //G4cerr << G4endl; // } //get primary particles if (fPrimaryPositronElectronExitFlag){ if(NextVol && ThisVol->GetName()==TargetExt && NextVol->GetName()=="World" && step->GetTrack()->GetParentID()==00 && (step->GetTrack()->GetDynamicParticle()->GetPDGcode()==11 || step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-11)) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(1,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(1,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(1,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(1,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(1,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(1,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(1,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(1,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(1,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(1,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(1,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(1,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(1,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(1,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(1,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(1,17, ParID); analysisManager->AddNtupleRow(1); } } //get secondary muons if (fSecondaryMuonsExitFlag){ if(NextVol && ThisVol->GetName()==TargetExt && NextVol->GetName()=="World" && step->GetTrack()->GetParentID()!=00 && (step->GetTrack()->GetDynamicParticle()->GetPDGcode()==13 || step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-13)) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(1,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(1,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(1,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(1,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(1,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(1,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(1,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(1,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(1,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(1,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(1,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(1,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(1,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(1,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(1,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(1,17, ParID); analysisManager->AddNtupleRow(1); } } //get secondary positrons-electrons if (fSecondaryPosEleExitFlag){ if(NextVol && ThisVol->GetName()==TargetExt && NextVol->GetName()=="World" && step->GetTrack()->GetParentID()!=00 && (step->GetTrack()->GetDynamicParticle()->GetPDGcode()==11 || step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-11)) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(1,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(1,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(1,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(1,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(1,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(1,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(1,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(1,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(1,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(1,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(1,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(1,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(1,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(1,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(1,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(1,17, ParID); analysisManager->AddNtupleRow(1); } } //get secondary photons if (fSecondaryPhotonsExitFlag){ if(!step->GetTrack()->GetNextVolume() && step->GetTrack()->GetParentID()!=00 && step->GetTrack()->GetDynamicParticle()->GetPDGcode()==22 ) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(1,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(1,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(1,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(1,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(1,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(1,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(1,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(1,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(1,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(1,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(1,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(1,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(1,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(1,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(1,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(1,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(1,17, ParID); analysisManager->AddNtupleRow(1); } } //get beam information if (fPrimaryPositronElectronEnteringFlag){ if(NextVol && ThisVol->GetName()=="World" && NextVol->GetName()=="Target1" && step->GetTrack()->GetParentID()==00 && (step->GetTrack()->GetDynamicParticle()->GetPDGcode()==11 || step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-11)) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(2,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(2,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(2,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(2,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(2,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(2,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(2,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(2,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(2,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(2,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(2,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(2,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(2,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(2,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(2,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(2,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(2,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(2,17, ParID); analysisManager->AddNtupleRow(2); } } //get regenerated positrons if (fRegeneratedPositronFlag){ if(NextVol && ThisVol->GetName()=="World" && NextVol->GetName()=="Regenerator" && step->GetTrack()->GetParentID()!=00 && step->GetTrack()->GetDynamicParticle()->GetPDGcode()==22 ) { int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(3,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(3,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(3,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(3,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(3,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(3,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(3,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(3,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(3,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(3,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(3,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(3,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(3,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(3,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(3,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(3,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(3,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(3,17, ParID); analysisManager->AddNtupleRow(3); } // if(NextVol && ThisVol->GetName()=="Regenerator" && NextVol->GetName()=="World" && step->GetTrack()->GetParentID()!=00 && step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-11 ) { if(NextVol && ThisVol->GetName()=="Regenerator" && NextVol->GetName()=="World" && step->GetTrack()->GetParentID() == fSsecparID && step->GetTrack()->GetTrackID() == fSectrackID && step->GetTrack()->GetDynamicParticle()->GetPDGcode()==-11 ) { G4cout << "Process " << process << G4endl; int pdg = step->GetTrack()->GetParticleDefinition()->GetPDGEncoding(); analysisManager->FillNtupleDColumn(4,0, pdg); double kinEnergy = step->GetTrack()->GetDynamicParticle()->GetKineticEnergy(); analysisManager->FillNtupleDColumn(4,1, kinEnergy); double MomDirx = step->GetTrack()->GetMomentumDirection().x(); analysisManager->FillNtupleDColumn(4,2, MomDirx); double MomDiry = step->GetTrack()->GetMomentumDirection().y(); analysisManager->FillNtupleDColumn(4,3, MomDiry); double MomDirz = step->GetTrack()->GetMomentumDirection().z(); analysisManager->FillNtupleDColumn(4,4, MomDirz); double Vertx = step->GetTrack()->GetVertexPosition().x(); analysisManager->FillNtupleDColumn(4,5, Vertx); double Verty = step->GetTrack()->GetVertexPosition().y(); analysisManager->FillNtupleDColumn(4,6, Verty); double Vertz = step->GetTrack()->GetVertexPosition().z(); analysisManager->FillNtupleDColumn(4,7, Vertz); double Mom = step->GetTrack()->GetDynamicParticle()->GetTotalMomentum(); analysisManager->FillNtupleDColumn(4,8, Mom); double Dirxsp = step->GetTrack()->GetPosition().x(); analysisManager->FillNtupleDColumn(4,9, Dirxsp); double Dirysp = step->GetTrack()->GetPosition().y(); analysisManager->FillNtupleDColumn(4,10, Dirysp); double Dirzsp = step->GetTrack()->GetPosition().z(); analysisManager->FillNtupleDColumn(4,11, Dirzsp); double Momx = step->GetTrack()->GetDynamicParticle()->GetMomentum().x(); analysisManager->FillNtupleDColumn(4,12, Momx); double Momy = step->GetTrack()->GetDynamicParticle()->GetMomentum().y(); analysisManager->FillNtupleDColumn(4,13, Momy); double Momz = step->GetTrack()->GetDynamicParticle()->GetMomentum().z(); analysisManager->FillNtupleDColumn(4,14, Momz); double xprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().x())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(4,15, xprime); double yprime=atan((step->GetTrack()->GetDynamicParticle()->GetMomentum().y())/(step->GetTrack()->GetDynamicParticle()->GetMomentum().z())); analysisManager->FillNtupleDColumn(4,16, yprime); double ParID=step->GetTrack()->GetParentID(); analysisManager->FillNtupleDColumn(4,17, ParID); analysisManager->AddNtupleRow(4); } } } if (volume != fScoringVolume || volume != fScoringVolume2) return; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......