Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 /// \file eventgenerator/pythia/pythia8decayer 27 /// \file eventgenerator/pythia/pythia8decayer/src/Py8DecayerPhysics.cc 28 /// \brief Implementation of the Py8DecayerPhy 28 /// \brief Implementation of the Py8DecayerPhysics class 29 /// 29 /// 30 /// \author J. Yarba; FNAL 30 /// \author J. Yarba; FNAL 31 31 32 #include "Py8DecayerPhysics.hh" 32 #include "Py8DecayerPhysics.hh" 33 << 34 #include "Py8Decayer.hh" 33 #include "Py8Decayer.hh" 35 34 36 #include "G4Decay.hh" << 37 #include "G4DecayTable.hh" << 38 #include "G4ParticleDefinition.hh" 35 #include "G4ParticleDefinition.hh" 39 #include "G4ProcessManager.hh" 36 #include "G4ProcessManager.hh" >> 37 #include "G4Decay.hh" >> 38 #include "G4DecayTable.hh" 40 39 41 // factory 40 // factory 42 // 41 // 43 #include "G4PhysicsConstructorFactory.hh" 42 #include "G4PhysicsConstructorFactory.hh" 44 // 43 // 45 // register it with contructor factory 44 // register it with contructor factory 46 // 45 // 47 G4_DECLARE_PHYSCONSTR_FACTORY(Py8DecayerPhysic 46 G4_DECLARE_PHYSCONSTR_FACTORY(Py8DecayerPhysics); 48 47 49 //....oooOO0OOooo........oooOO0OOooo........oo 48 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 50 49 51 Py8DecayerPhysics::Py8DecayerPhysics(G4int) : << 50 Py8DecayerPhysics::Py8DecayerPhysics(G4int) >> 51 : G4VPhysicsConstructor("Py8DecayerPhysics") >> 52 { >> 53 } 52 54 53 //....oooOO0OOooo........oooOO0OOooo........oo 55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 54 56 55 Py8DecayerPhysics::~Py8DecayerPhysics() {} << 57 Py8DecayerPhysics::~Py8DecayerPhysics() >> 58 { >> 59 } 56 60 57 //....oooOO0OOooo........oooOO0OOooo........oo 61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 58 62 59 void Py8DecayerPhysics::ConstructParticle() 63 void Py8DecayerPhysics::ConstructParticle() 60 { 64 { 61 // Nothing needs to be done here << 65 // Nothing needs to be done here 62 } 66 } 63 67 64 //....oooOO0OOooo........oooOO0OOooo........oo 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 65 69 66 void Py8DecayerPhysics::ConstructProcess() 70 void Py8DecayerPhysics::ConstructProcess() 67 { 71 { 68 // Adding external decayer to G4Decay proces << 72 // Adding external decayer to G4Decay process (per each thread). 69 // G4Decay will use the external decayer if << 73 // G4Decay will use the external decayer if G4Decay process is 70 // assigned to an unstable particle and that << 74 // assigned to an unstable particle and that particle does not 71 // have its decay table. << 75 // have its decay table. 72 << 76 73 // Loop over all particles instantiated and << 77 // Loop over all particles instantiated and remove already-assigned 74 // decay table for tau's and B+/- so that th << 78 // decay table for tau's and B+/- so that they will decay through 75 // the external decayer (Pythia8). << 79 // the external decayer (Pythia8). 76 << 80 77 // NOTE: The extDecayer will be deleted in G << 81 // NOTE: The extDecayer will be deleted in G4Decay destructor 78 << 82 79 Py8Decayer* extDecayer = new Py8Decayer(); << 83 Py8Decayer* extDecayer = new Py8Decayer(); 80 G4bool setOnce = true; << 84 G4bool setOnce = true; 81 << 85 82 auto particleIterator = GetParticleIterator( << 86 auto particleIterator=GetParticleIterator(); 83 particleIterator->reset(); << 87 particleIterator->reset(); 84 while ((*particleIterator)()) { << 88 while ((*particleIterator)()) 85 G4ParticleDefinition* particle = particleI << 89 { 86 << 90 G4ParticleDefinition* particle = particleIterator->value(); 87 // remove native/existing decay table for << 91 88 // a)tau's << 92 // remove native/existing decay table for 89 // b) B+/- << 93 // a)tau's 90 // so that G4Decay will use the external d << 94 // b) B+/- 91 if (std::abs(particle->GetPDGEncoding()) = << 95 // so that G4Decay will use the external decayer 92 if (particle->GetDecayTable()) { << 96 if ( std::abs(particle->GetPDGEncoding()) == 15 || 93 delete particle->GetDecayTable(); << 97 std::abs(particle->GetPDGEncoding()) == 521 ) 94 particle->SetDecayTable(nullptr); << 98 { 95 /* << 99 if ( particle->GetDecayTable() ) 96 if ( verboseLevel > 1 ) { << 100 { 97 G4cout << "Use ext decaye << 101 delete particle->GetDecayTable(); 98 << particleIterator-> << 102 particle->SetDecayTable(nullptr); 99 << G4endl; << 103 /* 100 } << 104 if ( verboseLevel > 1 ) { 101 */ << 105 G4cout << "Use ext decayer for: " >> 106 << particleIterator->value()->GetParticleName() >> 107 << G4endl; >> 108 } >> 109 */ >> 110 } 102 } 111 } 103 } << 104 112 105 if (setOnce) << 113 if(setOnce) 106 // One G4Decay object is shared by all uns << 114 // One G4Decay object is shared by all unstable particles (per thread). 107 // Thus, we set the external decayer only << 115 // Thus, we set the external decayer only once. 108 { << 116 { 109 G4ProcessManager* pmanager = particle->G << 117 G4ProcessManager* pmanager = particle->GetProcessManager(); 110 G4ProcessVector* processVector = pmanage << 118 G4ProcessVector* processVector = pmanager->GetProcessList(); 111 for (size_t i = 0; i < processVector->le << 119 for ( size_t i=0; i<processVector->length(); ++i ) 112 G4Decay* decay = dynamic_cast<G4Decay* << 120 { 113 if (decay) { << 121 G4Decay* decay = dynamic_cast<G4Decay*>((*processVector)[i]); 114 decay->SetExtDecayer(extDecayer); << 122 if ( decay ) 115 setOnce = false; << 123 { >> 124 decay->SetExtDecayer(extDecayer); >> 125 setOnce = false; >> 126 } 116 } 127 } 117 } << 128 } 118 } << 129 } 119 } << 120 130 121 return; << 131 return; 122 } 132 } 123 133 124 //....oooOO0OOooo........oooOO0OOooo........oo 134 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 125 135