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 // G4AdjointTrackingAction class implementatio 27 // 28 // Author: L. Desorgher, SpaceIT GmbH 29 // Contract: ESA contract 21435/08/NL/AT 30 // Customer: ESA/ESTEC 31 // ------------------------------------------- 32 33 #include "G4AdjointTrackingAction.hh" 34 35 #include "G4AdjointSteppingAction.hh" 36 #include "G4ParticleTable.hh" 37 #include "G4Track.hh" 38 39 // ------------------------------------------- 40 // 41 G4AdjointTrackingAction::G4AdjointTrackingActi 42 : theAdjointSteppingAction(anAction) 43 {} 44 45 // ------------------------------------------- 46 // 47 void G4AdjointTrackingAction::PreUserTrackingA 48 { 49 G4String partType = aTrack->GetParticleDefin 50 if (G4StrUtil::contains(partType, "adjoint") 51 is_adjoint_tracking_mode = true; 52 theAdjointSteppingAction->SetPrimWeight(aT 53 } 54 else { 55 is_adjoint_tracking_mode = false; 56 if (theUserFwdTrackingAction != nullptr) { 57 theUserFwdTrackingAction->PreUserTrackin 58 } 59 } 60 theAdjointSteppingAction->SetAdjointTracking 61 } 62 63 // ------------------------------------------- 64 // 65 void G4AdjointTrackingAction::PostUserTracking 66 { 67 // important to have it here ! 68 // 69 last_weight = theAdjointSteppingAction->GetL 70 last_ekin = theAdjointSteppingAction->GetLas 71 72 if (! is_adjoint_tracking_mode) { 73 if (theUserFwdTrackingAction != nullptr) { 74 theUserFwdTrackingAction->PostUserTracki 75 } 76 } 77 else if (theAdjointSteppingAction->GetDidAdj 78 last_pos = theAdjointSteppingAction->GetLa 79 last_direction = theAdjointSteppingAction- 80 last_direction /= last_direction.mag(); 81 last_cos_th = last_direction.z(); 82 G4ParticleDefinition* aPartDef = theAdjoin 83 last_fwd_part_name = aPartDef->GetParticle 84 last_fwd_part_name.erase(0, 4); 85 last_fwd_part_PDGEncoding = 86 G4ParticleTable::GetParticleTable()->Fin 87 last_ekin = theAdjointSteppingAction->GetL 88 last_ekin_nuc = last_ekin; 89 if (aPartDef->GetParticleType() == "adjoin 90 auto nb_nuc = G4double(aPartDef->GetBary 91 last_ekin_nuc /= nb_nuc; 92 } 93 94 last_fwd_part_index = -1; 95 std::size_t i = 0; 96 while (i < pListOfPrimaryFwdParticles->siz 97 if ((*pListOfPrimaryFwdParticles)[i]->Ge 98 last_fwd_part_index = (G4int)i; 99 } 100 ++i; 101 } 102 103 // Fill the vectors 104 // 105 last_pos_vec.push_back(last_pos); 106 last_direction_vec.push_back(last_directio 107 last_ekin_vec.push_back(last_ekin); 108 last_ekin_nuc_vec.push_back(last_ekin_nuc) 109 last_cos_th_vec.push_back(last_cos_th); 110 last_weight_vec.push_back(last_weight); 111 last_fwd_part_PDGEncoding_vec.push_back(la 112 last_fwd_part_index_vec.push_back(last_fwd 113 } 114 else { 115 } 116 } 117 118 // ------------------------------------------- 119 // 120 void G4AdjointTrackingAction::ClearEndOfAdjoin 121 { 122 last_pos_vec.clear(); 123 last_direction_vec.clear(); 124 last_ekin_vec.clear(); 125 last_ekin_nuc_vec.clear(); 126 last_cos_th_vec.clear(); 127 last_weight_vec.clear(); 128 last_fwd_part_PDGEncoding_vec.clear(); 129 last_fwd_part_index_vec.clear(); 130 } 131