Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file SAXSSteppingAction.cc 27 /// \brief Definition of the SAXSSteppingActio 28 // 29 //....oooOO0OOooo........oooOO0OOooo........oo 30 31 #ifdef G4MULTITHREADED 32 # include "G4MTRunManager.hh" 33 #else 34 # include "G4RunManager.hh" 35 #endif 36 37 #include "SAXSDetectorConstruction.hh" 38 #include "SAXSEventAction.hh" 39 #include "SAXSSteppingAction.hh" 40 41 #include "G4AnalysisManager.hh" 42 #include "G4Event.hh" 43 #include "G4EventManager.hh" 44 #include "G4HCofThisEvent.hh" 45 #include "G4OpticalPhoton.hh" 46 #include "G4SDManager.hh" 47 #include "G4Step.hh" 48 #include "G4SystemOfUnits.hh" 49 #include "G4Track.hh" 50 #include "G4Trajectory.hh" 51 #include "G4TrajectoryContainer.hh" 52 #include "G4UImanager.hh" 53 #include "G4VHitsCollection.hh" 54 #include "G4VVisManager.hh" 55 #include "G4ios.hh" 56 57 #include <cmath> 58 59 //....oooOO0OOooo........oooOO0OOooo........oo 60 61 SAXSSteppingAction::SAXSSteppingAction(SAXSEve 62 : G4UserSteppingAction(), fEventAction(event 63 {} 64 65 //....oooOO0OOooo........oooOO0OOooo........oo 66 67 SAXSSteppingAction::~SAXSSteppingAction() {} 68 69 //....oooOO0OOooo........oooOO0OOooo........oo 70 71 void SAXSSteppingAction::UserSteppingAction(co 72 { 73 // DetectorConstruction instance 74 const SAXSDetectorConstruction* detectorCons 75 static_cast<const SAXSDetectorConstruction 76 G4RunManager::GetRunManager()->GetUserDe 77 78 // get Phantom volume 79 fPhantom = detectorConstruction->GetPhantom( 80 81 // get pre and post step points 82 G4StepPoint* preStepPoint = step->GetPreStep 83 G4StepPoint* postStepPoint = step->GetPostSt 84 85 // get the volume of the current step 86 G4LogicalVolume* volume = preStepPoint->GetT 87 88 // get track and particle name 89 G4Track* track = step->GetTrack(); 90 G4int ID = track->GetTrackID(); 91 G4String partName = track->GetDefinition()-> 92 93 // update the primary particle (event) weigh 94 G4double PrimaryWeight = 1.; 95 if (partName == "gamma" && ID == 1) { 96 PrimaryWeight = track->GetWeight(); 97 fEventAction->UpdateEventWeight(PrimaryWei 98 } 99 100 // if the particle is not a primary photon s 101 if (volume != fPhantom || partName != "gamma 102 103 // if it is a new event, reset variable valu 104 G4int eventNumber = G4RunManager::GetRunMana 105 if (eventNumber != fEventNumber) { 106 fEventNumber = eventNumber; 107 fNSe = 0; 108 } 109 110 // identify the process that occurred 111 G4String Process; 112 if (postStepPoint->GetProcessDefinedStep() ! 113 Process = postStepPoint->GetProcessDefined 114 } 115 else { 116 Process = "UserLimit"; 117 } 118 // G4cout << "Process: " << Process << G4end 119 G4int ProcIndex = -1; 120 if (Process == "Transportation" || Process = 121 ProcIndex = 0; 122 } 123 if (Process == "Rayl" || Process == "biasWra 124 ProcIndex = 1; 125 fNSe++; 126 fEventAction->AddNRi(); 127 } 128 if (Process == "compt" || Process == "biasWr 129 ProcIndex = 2; 130 fNSe++; 131 fEventAction->AddNCi(); 132 } 133 if (Process == "phot" || Process == "biasWra 134 if (Process == "conv" || Process == "biasWra 135 if (Process == "photonNuclear" || Process == 136 ProcIndex = 5; 137 } 138 if (Process == "PowderDiffraction" || Proces 139 ProcIndex = 6; 140 fNSe++; 141 fEventAction->AddNDi(); 142 } 143 // G4cout << "ProcIndex: " << ProcIndex << G 144 145 // calculate the scattering angle 146 G4ThreeVector mom1 = preStepPoint->GetMoment 147 G4ThreeVector mom2 = postStepPoint->GetMomen 148 G4double theta = mom1.angle(mom2); 149 150 // fill the Scattering ntuple 151 G4AnalysisManager* analysisManager = G4Analy 152 if (theta > 1e-6) { // record only if the a 153 analysisManager->FillNtupleIColumn(1, 0, P 154 analysisManager->FillNtupleDColumn(1, 1, p 155 analysisManager->FillNtupleDColumn(1, 2, t 156 analysisManager->FillNtupleDColumn(1, 3, t 157 analysisManager->AddNtupleRow(1); 158 } 159 } 160 161 //....oooOO0OOooo........oooOO0OOooo........oo 162