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 // Please cite the following paper if you use 27 // Nucl.Instrum.Meth.B260:20-27, 2007 28 29 #include "SteppingAction.hh" 30 #include "G4AnalysisManager.hh" 31 #include "G4SystemOfUnits.hh" 32 33 //....oooOO0OOooo........oooOO0OOooo........oo 34 35 SteppingAction::SteppingAction(RunAction* run, 36 :fRun(run),fDetector(det) 37 {} 38 39 //....oooOO0OOooo........oooOO0OOooo........oo 40 41 SteppingAction::~SteppingAction() 42 {} 43 44 //....oooOO0OOooo........oooOO0OOooo........oo 45 46 void SteppingAction::UserSteppingAction(const 47 48 { 49 50 G4AnalysisManager* man = G4AnalysisManager::In 51 52 53 if ( (step->GetTrack()->GetDynamicParticle()- 54 G4Proton::ProtonDefinition()) 55 56 /* 57 // for doublet 58 59 && (step->GetPostStepPoint()->GetPosition( 60 && (step->GetPostStepPoint()->GetPosi 61 */ 62 63 // for triplet and whole line 64 65 && (step->GetPostStepPoint()->GetPosi 66 && (step->GetPostStepPoint()->GetPosi 67 && (step->GetPreStepPoint()->GetTouch 68 GetLogicalVolume()->GetName 69 && (step->GetPostStepPoint()->GetTouc 70 GetLogicalVolume()->GetName( 71 ) 72 73 { 74 fXIn = step->GetPostStepPoint()->GetP 75 fYIn = step->GetPostStepPoint()->GetP 76 fZIn = step->GetPostStepPoint()->GetP 77 fE = step->GetTrack()->GetKineticEn 78 79 G4ThreeVector angleIn; 80 angleIn = step->GetTrack()->GetMoment 81 82 fThetaIn = std::asin(angleIn[0]/std:: 83 *angleIn[0]+angleIn[1]*angl 84 fPhiIn = std::asin(angleIn[1]/std::sq 85 *angleIn[0]+angleIn[1]*angl 86 87 G4cout << " =>IMAGE : X(microns)=" 88 <<" Y(microns)="<< fYIn/microm 89 << (fThetaIn/mrad) << " PHI(mr 90 G4cout << G4endl; 91 92 if (fDetector->GetCoef()==1) 93 { 94 fRun->AddRow(); 95 fRun->AddToXVector(fXIn/um); 96 fRun->AddToYVector(fYIn/um); 97 fRun->AddToThetaVector(fThetaIn/mra 98 fRun->AddToPhiVector(fPhiIn/mrad); 99 } 100 101 //Fill ntuple 3 102 man->FillNtupleDColumn(3,0,fXIn/um); 103 man->FillNtupleDColumn(3,1,fYIn/um); 104 man->FillNtupleDColumn(3,2,fThetaIn/mrad); 105 man->FillNtupleDColumn(3,3,fPhiIn/mrad); 106 man->AddNtupleRow(3); 107 108 } 109 110 if (fDetector->GetProfile()==1) 111 { 112 113 if ( 114 (step->GetTrack()->GetDynamicParti 115 && (step->GetPreStepPoint()->GetTouch 116 ->GetVolume()->GetLogicalVolume() 117 && (step->GetPostStepPoint()->GetTouc 118 ->GetVolume()->GetLogicalVolume()- 119 ) 120 { 121 fXIn = step->GetPostStepPoint()->GetP 122 fYIn = step->GetPostStepPoint()->GetP 123 fZIn = step->GetPostStepPoint()->GetP 124 125 //Fill ntuple 1 126 man->FillNtupleDColumn(1,0,fXIn/um); 127 man->FillNtupleDColumn(1,1,fYIn/um); 128 man->FillNtupleDColumn(1,2,fZIn/um); 129 man->AddNtupleRow(1); 130 } 131 } 132 133 if (fDetector->GetGrid()==1) 134 { 135 136 if ( 137 (step->GetTrack()->GetDynamicParti 138 && (step->GetPreStepPoint()->GetTouch 139 ->GetVolume()->GetLogicalVolume() 140 && (step->GetPostStepPoint()->GetTouc 141 ->GetVolume()->GetLogicalVolume() 142 ) 143 { 144 fXIn = step->GetPostStepPoint()->GetP 145 fYIn = step->GetPostStepPoint()->GetP 146 fE = step->GetTrack()->GetKineticEn 147 148 //Fill ntuple 2 149 man->FillNtupleDColumn(2,0,fXIn/um); 150 man->FillNtupleDColumn(2,1,fYIn/um); 151 man->FillNtupleDColumn(2,2,fE/MeV); 152 man->AddNtupleRow(2); 153 } 154 } 155 156 // end 157 } 158