Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4Step class implementation << 27 // 23 // 28 // Authors: << 24 // $Id: G4Step.cc,v 1.5 2001/07/11 10:08:39 gunter Exp $ 29 // Katsuya Amako (e-mail: Katsuya.Amako@kek << 25 // GEANT4 tag $Name: geant4-05-00 $ 30 // Takashi Sasaki (e-mail: Takashi.Sasaki@ke << 26 // 31 // Revisions: << 27 // 32 // Hisaya Kurashige, 1998-2007 << 28 //--------------------------------------------------------------- 33 // ------------------------------------------- << 29 // >> 30 // G4Step.cc >> 31 // >> 32 // Description: >> 33 // This class represents the Step of a particle tracked. >> 34 // It includes information of >> 35 // 1) List of Step points which compose the Step, >> 36 // 2) static information of particle which generated the >> 37 // Step, >> 38 // 3) trackID and parent particle ID of the Step, >> 39 // 4) termination condition of the Step, >> 40 // >> 41 // Contact: >> 42 // Questions and comments to this code should be sent to >> 43 // Katsuya Amako (e-mail: Katsuya.Amako@kek.jp) >> 44 // Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp) >> 45 // >> 46 // --------------------------------------------------------------- 34 47 35 #include "G4Step.hh" 48 #include "G4Step.hh" 36 49 37 // ------------------------------------------- << 50 //////////////// 38 G4Step::G4Step() 51 G4Step::G4Step() >> 52 //////////////// 39 { 53 { 40 fpPreStepPoint = new G4StepPoint(); 54 fpPreStepPoint = new G4StepPoint(); 41 fpPostStepPoint = new G4StepPoint(); 55 fpPostStepPoint = new G4StepPoint(); 42 << 43 secondaryInCurrentStep = new std::vector<con << 44 } 56 } 45 57 46 // ------------------------------------------- << 58 ///////////////// 47 G4Step::~G4Step() 59 G4Step::~G4Step() >> 60 ///////////////// 48 { 61 { 49 delete fpPreStepPoint; 62 delete fpPreStepPoint; 50 delete fpPostStepPoint; 63 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 } 64 } 173 65