Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 /* 27 * G4VITSteppingVerbose.hh 28 * 29 * Created on: Jun 22, 2015 30 * Author: mkaramit 31 */ 32 33 #ifndef SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MANAGEMENT_INCLUDE_G4VITSTEPPINGVERBOSE_HH_ 34 #define SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MANAGEMENT_INCLUDE_G4VITSTEPPINGVERBOSE_HH_ 35 36 #include "globals.hh" // Include from 'global' 37 #include <vector> 38 39 class G4Navigator; 40 class G4VPhysicalVolume; 41 class G4VSensitiveDetector; 42 #include "G4VProcess.hh" 43 class G4ProcessVector; 44 class G4Track; 45 46 //#include "G4TrackVector.hh" // Include from 'tracking' 47 #include "G4StepStatus.hh" // Include from 'track' 48 class G4UserSteppingAction; 49 class G4StepPoint; 50 #include "G4TouchableHandle.hh" 51 52 #include "G4ForceCondition.hh" //enum 'track' 53 #include "G4GPILSelection.hh" //enum 'track' 54 #include "G4ITStepProcessor.hh" 55 #include "G4VITProcess.hh" 56 57 class G4VParticleChange; 58 class G4ITStepProcessorState; 59 //class ProcessGeneralInfo; 60 //class G4VPhysicalVolume; 61 //class G4ProcessVector; 62 63 #include <G4UImessenger.hh> 64 65 class G4UIcmdWithAnInteger; 66 67 class G4VITSteppingVerbose : G4UImessenger 68 { 69 public: 70 G4VITSteppingVerbose(); 71 ~G4VITSteppingVerbose() override; 72 73 public: 74 75 virtual void TrackingStarted(G4Track* track); 76 virtual void TrackingEnded(G4Track* track); 77 78 virtual void DoItStarted() = 0; 79 virtual void PreStepVerbose(G4Track*) = 0; 80 virtual void PostStepVerbose(G4Track*) = 0; 81 82 // these methods are invoked in the SteppingManager 83 virtual void NewStep() = 0; 84 void CopyState(); 85 86 virtual void StepInfoForLeadingTrack() = 0; 87 88 virtual void AtRestDoItInvoked() = 0; 89 virtual void AtRestDoItOneByOne() = 0; 90 91 virtual void PostStepDoItAllDone() = 0; 92 virtual void PostStepDoItOneByOne() = 0; 93 94 virtual void AlongStepDoItAllDone() = 0; 95 virtual void AlongStepDoItOneByOne() = 0; 96 97 virtual void StepInfo() = 0; 98 virtual void DPSLStarted() = 0; 99 virtual void DPSLUserLimit() = 0; 100 virtual void DPSLPostStep() = 0; 101 virtual void DPSLAlongStep() = 0; 102 virtual void VerboseTrack() = 0; 103 virtual void VerboseParticleChange() = 0; 104 105 //____________________________________________________________________________ 106 107 inline void SetVerbose(int flag) 108 { 109 fVerboseLevel = flag; 110 } 111 112 inline G4int GetVerbose() 113 { 114 return fVerboseLevel; 115 } 116 117 //____________________________________________________________________________ 118 119 void SetNewValue(G4UIcommand * command, 120 G4String newValue) override; 121 122 G4String GetCurrentValue(G4UIcommand * command) override; 123 124 125 //____________________________________________________________________________ 126 127 void SetStepProcessor(const G4ITStepProcessor* stepProcessor) 128 { 129 this->fpStepProcessor = stepProcessor; 130 } 131 132 void TrackBanner(G4Track* track, const G4String& message); 133 134 protected: 135 const G4ITStepProcessor* fpStepProcessor; 136 137 G4UIcmdWithAnInteger* fpVerboseUI; 138 G4ITStepProcessorState* fpState; 139 const ProcessGeneralInfo* fpProcessGeneralInfo; 140 141 G4double PhysicalStep; 142 G4StepStatus fStepStatus; 143 144 const G4VParticleChange* fParticleChange; 145 const G4Track* fTrack; 146 const G4TrackVector* fSecondary; 147 const G4Step* fStep; 148 G4StepPoint* fPreStepPoint; 149 G4StepPoint* fPostStepPoint; 150 151 const G4VPhysicalVolume* fCurrentVolume; 152 // G4VSensitiveDetector* fSensitive; 153 const G4VITProcess* fCurrentProcess; 154 // The pointer to the process of which DoIt or 155 // GetPhysicalInteractionLength has been just executed. 156 157 G4ProcessVector* fAtRestDoItVector; 158 G4ProcessVector* fAlongStepDoItVector; 159 G4ProcessVector* fPostStepDoItVector; 160 161 G4ProcessVector* fAtRestGetPhysIntVector; 162 G4ProcessVector* fAlongStepGetPhysIntVector; 163 G4ProcessVector* fPostStepGetPhysIntVector; 164 165 size_t MAXofAtRestLoops; 166 size_t MAXofAlongStepLoops; 167 size_t MAXofPostStepLoops; 168 169 size_t fAtRestDoItProcTriggered; 170 size_t fPostStepDoItProcTriggered; 171 172 G4int fN2ndariesAtRestDoIt; 173 G4int fN2ndariesAlongStepDoIt; 174 G4int fN2ndariesPostStepDoIt; 175 // These are the numbers of secondaries generated by the process 176 // just executed. 177 178 // G4Navigator *fNavigator; 179 180 G4int fVerboseLevel; 181 182 using G4SelectedAtRestDoItVector = std::vector<G4int>; 183 using G4SelectedAlongStepDoItVector = std::vector<G4int>; 184 using G4SelectedPostStepDoItVector = std::vector<G4int>; 185 G4SelectedAtRestDoItVector* fSelectedAtRestDoItVector; 186 G4SelectedPostStepDoItVector* fSelectedPostStepDoItVector; 187 188 G4double fPreviousStepSize; 189 190 G4TouchableHandle fTouchableHandle; 191 192 // G4SteppingControl StepControlFlag; 193 194 G4double physIntLength; 195 G4ForceCondition fCondition; 196 G4GPILSelection fGPILSelection; 197 // Above three variables are for the method 198 // DefinePhysicalStepLength(). To pass these information to 199 // the method Verbose, they are kept at here. Need a more 200 // elegant mechanism. 201 }; 202 203 #endif /* SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MANAGEMENT_INCLUDE_G4VITSTEPPINGVERBOSE_HH_ */ 204