Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 7 // 6 // * the Geant4 Collaboration. It is provided << 8 // $Id: G4Step.cc,v 1.4 1999/12/15 14:53:56 gunter Exp $ 7 // * conditions of the Geant4 Software License << 9 // GEANT4 tag $Name: geant4-03-00 $ 8 // * LICENSE and available at http://cern.ch/ << 10 // 9 // * include a list of copyright holders. << 11 // 10 // * << 12 //--------------------------------------------------------------- 11 // * Neither the authors of this software syst << 13 // 12 // * institutes,nor the agencies providing fin << 14 // G4Step.cc 13 // * work make any representation or warran << 15 // 14 // * regarding this software system or assum << 16 // Description: 15 // * use. Please see the license in the file << 17 // This class represents the Step of a particle tracked. 16 // * for the full disclaimer and the limitatio << 18 // It includes information of 17 // * << 19 // 1) List of Step points which compose the Step, 18 // * This code implementation is the result << 20 // 2) static information of particle which generated the 19 // * technical work of the GEANT4 collaboratio << 21 // Step, 20 // * By using, copying, modifying or distri << 22 // 3) trackID and parent particle ID of the Step, 21 // * any work based on the software) you ag << 23 // 4) termination condition of the Step, 22 // * use in resulting scientific publicati << 24 // 23 // * acceptance of all terms of the Geant4 Sof << 25 // Contact: 24 // ******************************************* << 26 // Questions and comments to this code should be sent to 25 // << 27 // Katsuya Amako (e-mail: Katsuya.Amako@kek.jp) 26 // G4Step class implementation << 28 // Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp) 27 // << 29 // 28 // Authors: << 30 // --------------------------------------------------------------- 29 // Katsuya Amako (e-mail: Katsuya.Amako@kek << 30 // Takashi Sasaki (e-mail: Takashi.Sasaki@ke << 31 // Revisions: << 32 // Hisaya Kurashige, 1998-2007 << 33 // ------------------------------------------- << 34 31 35 #include "G4Step.hh" 32 #include "G4Step.hh" 36 33 37 // ------------------------------------------- << 34 //////////////// 38 G4Step::G4Step() 35 G4Step::G4Step() >> 36 //////////////// 39 { 37 { 40 fpPreStepPoint = new G4StepPoint(); 38 fpPreStepPoint = new G4StepPoint(); 41 fpPostStepPoint = new G4StepPoint(); 39 fpPostStepPoint = new G4StepPoint(); 42 << 43 secondaryInCurrentStep = new std::vector<con << 44 } 40 } 45 41 46 // ------------------------------------------- << 42 ///////////////// 47 G4Step::~G4Step() 43 G4Step::~G4Step() >> 44 ///////////////// 48 { 45 { 49 delete fpPreStepPoint; 46 delete fpPreStepPoint; 50 delete fpPostStepPoint; 47 delete fpPostStepPoint; 51 << 52 delete secondaryInCurrentStep; << 53 delete fSecondary; << 54 } << 55 << 56 // ------------------------------------------- << 57 G4Step::G4Step(const G4Step& right) << 58 : fTotalEnergyDeposit(right.fTotalEnergyDepo << 59 , fNonIonizingEnergyDeposit(right.fNonIonizi << 60 , fStepLength(right.fStepLength) << 61 , fpTrack(right.fpTrack) << 62 , fpSteppingControlFlag(right.fpSteppingCont << 63 , fFirstStepInVolume(right.fFirstStepInVolum << 64 , fLastStepInVolume(right.fLastStepInVolume) << 65 , nSecondaryByLastStep(right.nSecondaryByLas << 66 , secondaryInCurrentStep(right.secondaryInCu << 67 , fpVectorOfAuxiliaryPointsPointer(right.fpV << 68 { << 69 if(right.fpPreStepPoint != nullptr) << 70 { << 71 fpPreStepPoint = new G4StepPoint(*(right.f << 72 } << 73 else << 74 { << 75 fpPreStepPoint = new G4StepPoint(); << 76 } << 77 if(right.fpPostStepPoint != nullptr) << 78 { << 79 fpPostStepPoint = new G4StepPoint(*(right. << 80 } << 81 else << 82 { << 83 fpPostStepPoint = new G4StepPoint(); << 84 } << 85 << 86 if(right.fSecondary != nullptr) << 87 { << 88 fSecondary = new G4TrackVector(*(right.fSe << 89 } << 90 else << 91 { << 92 fSecondary = new G4TrackVector(); << 93 } << 94 << 95 // secondaryInCurrentStep is cleared << 96 secondaryInCurrentStep = new std::vector<con << 97 } << 98 << 99 // ------------------------------------------- << 100 G4Step& G4Step::operator=(const G4Step& right) << 101 { << 102 if(this != &right) << 103 { << 104 fTotalEnergyDeposit = right.f << 105 fNonIonizingEnergyDeposit = right.f << 106 fStepLength = right.f << 107 fpTrack = right.f << 108 fpSteppingControlFlag = right.f << 109 fFirstStepInVolume = right.f << 110 fLastStepInVolume = right.f << 111 nSecondaryByLastStep = right.n << 112 secondaryInCurrentStep = right.s << 113 fpVectorOfAuxiliaryPointsPointer = right.f << 114 << 115 delete fpPreStepPoint; << 116 << 117 if(right.fpPreStepPoint != nullptr) << 118 { << 119 fpPreStepPoint = new G4StepPoint(*(right << 120 } << 121 else << 122 { << 123 fpPreStepPoint = new G4StepPoint(); << 124 } << 125 << 126 delete fpPostStepPoint; << 127 << 128 if(right.fpPostStepPoint != nullptr) << 129 { << 130 fpPostStepPoint = new G4StepPoint(*(righ << 131 } << 132 else << 133 { << 134 fpPostStepPoint = new G4StepPoint(); << 135 } << 136 << 137 if(fSecondary != nullptr) << 138 { << 139 fSecondary->clear(); << 140 delete fSecondary; << 141 } << 142 if(right.fSecondary != nullptr) << 143 { << 144 fSecondary = new G4TrackVector(*(right.f << 145 } << 146 else << 147 { << 148 fSecondary = new G4TrackVector(); << 149 } << 150 << 151 // secondaryInCurrentStep is not copied << 152 if(secondaryInCurrentStep != nullptr) << 153 { << 154 secondaryInCurrentStep->clear(); << 155 delete secondaryInCurrentStep; << 156 } << 157 secondaryInCurrentStep = new std::vector<c << 158 } << 159 return *this; << 160 } << 161 << 162 // ------------------------------------------- << 163 const std::vector<const G4Track*>* G4Step::Get << 164 { << 165 secondaryInCurrentStep->clear(); << 166 std::size_t nSecondary = fSecondary->size(); << 167 for(std::size_t i = nSecondaryByLastStep; i << 168 { << 169 secondaryInCurrentStep->push_back((*fSecon << 170 } << 171 return secondaryInCurrentStep; << 172 } 48 } 173 49