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 // G4ClonedSmoothTrajectory class implementati 27 // 28 // Makoto Asai (JLab) - Oct.2024 29 // ------------------------------------------- 30 31 #include "G4ClonedSmoothTrajectory.hh" 32 #include "G4SmoothTrajectory.hh" 33 34 #include "G4AttDef.hh" 35 #include "G4AttDefStore.hh" 36 #include "G4AttValue.hh" 37 #include "G4ParticleTable.hh" 38 #include "G4ClonedSmoothTrajectoryPoint.hh" 39 #include "G4UIcommand.hh" 40 #include "G4UnitsTable.hh" 41 #include "G4AutoLock.hh" 42 43 // #define G4ATTDEBUG 44 #ifdef G4ATTDEBUG 45 # include "G4AttCheck.hh" 46 #endif 47 48 G4Allocator<G4ClonedSmoothTrajectory>*& aClone 49 { 50 static G4Allocator<G4ClonedSmoothTrajectory> 51 return _instance; 52 } 53 54 G4ClonedSmoothTrajectory::G4ClonedSmoothTrajec 55 { 56 ParticleName = right.ParticleName; 57 PDGCharge = right.PDGCharge; 58 PDGEncoding = right.PDGEncoding; 59 fTrackID = right.fTrackID; 60 fParentID = right.fParentID; 61 initialKineticEnergy = right.initialKineticE 62 initialMomentum = right.initialMomentum; 63 positionRecord = new G4TrajectoryPointContai 64 65 for (auto& i : *right.positionRecord) { 66 auto rightPoint = (G4ClonedSmoothTrajector 67 positionRecord->push_back(new G4ClonedSmoo 68 } 69 } 70 71 G4ClonedSmoothTrajectory::~G4ClonedSmoothTraje 72 { 73 if (positionRecord != nullptr) { 74 for (auto& i : *positionRecord) { 75 delete i; 76 } 77 positionRecord->clear(); 78 delete positionRecord; 79 } 80 } 81 82 void G4ClonedSmoothTrajectory::ShowTrajectory( 83 { 84 // Invoke the default implementation in G4VT 85 // 86 G4VTrajectory::ShowTrajectory(os); 87 88 // ... or override with your own code here. 89 } 90 91 void G4ClonedSmoothTrajectory::DrawTrajectory( 92 { 93 // Invoke the default implementation in G4VT 94 // 95 G4VTrajectory::DrawTrajectory(); 96 97 // ... or override with your own code here. 98 } 99 100 const std::map<G4String, G4AttDef>* G4ClonedSm 101 { 102 G4bool isNew; 103 std::map<G4String, G4AttDef>* store = G4AttD 104 if (isNew) { 105 G4String ID("ID"); 106 (*store)[ID] = G4AttDef(ID, "Track ID", "P 107 108 G4String PID("PID"); 109 (*store)[PID] = G4AttDef(PID, "Parent ID", 110 111 G4String PN("PN"); 112 (*store)[PN] = G4AttDef(PN, "Particle Name 113 114 G4String Ch("Ch"); 115 (*store)[Ch] = G4AttDef(Ch, "Charge", "Phy 116 117 G4String PDG("PDG"); 118 (*store)[PDG] = G4AttDef(PDG, "PDG Encodin 119 120 G4String IKE("IKE"); 121 (*store)[IKE] = G4AttDef(IKE, "Initial kin 122 123 G4String IMom("IMom"); 124 (*store)[IMom] = G4AttDef(IMom, "Initial m 125 126 G4String IMag("IMag"); 127 (*store)[IMag] = 128 G4AttDef(IMag, "Initial momentum magnitu 129 130 G4String NTP("NTP"); 131 (*store)[NTP] = G4AttDef(NTP, "No. of poin 132 } 133 return store; 134 } 135 136 std::vector<G4AttValue>* G4ClonedSmoothTraject 137 { 138 auto values = new std::vector<G4AttValue>; 139 140 values->push_back(G4AttValue("ID", G4UIcomma 141 142 values->push_back(G4AttValue("PID", G4UIcomm 143 144 values->push_back(G4AttValue("PN", ParticleN 145 146 values->push_back(G4AttValue("Ch", G4UIcomma 147 148 values->push_back(G4AttValue("PDG", G4UIcomm 149 150 values->push_back(G4AttValue("IKE", G4BestUn 151 152 values->push_back(G4AttValue("IMom", G4BestU 153 154 values->push_back(G4AttValue("IMag", G4BestU 155 156 values->push_back(G4AttValue("NTP", G4UIcomm 157 158 #ifdef G4ATTDEBUG 159 G4cout << G4AttCheck(values, GetAttDefs()); 160 #endif 161 162 return values; 163 } 164 165 void G4ClonedSmoothTrajectory::AppendStep(cons 166 { 167 positionRecord->push_back(new G4ClonedSmooth 168 aStep->GetPostStepPoint()->GetPosition(), 169 } 170 171 G4ParticleDefinition* G4ClonedSmoothTrajectory 172 { 173 return (G4ParticleTable::GetParticleTable()- 174 } 175 176 void G4ClonedSmoothTrajectory::MergeTrajectory 177 { 178 if (secondTrajectory == nullptr) return; 179 180 auto seco = (G4ClonedSmoothTrajectory*)secon 181 G4int ent = seco->GetPointEntries(); 182 183 // initial point of the second trajectory sh 184 // 185 for (G4int i = 1; i < ent; ++i) { 186 positionRecord->push_back((*(seco->positio 187 } 188 delete (*seco->positionRecord)[0]; 189 seco->positionRecord->clear(); 190 } 191