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 // 27 /// \file eventgenerator/pythia/pythia8decayer 28 /// \brief Implementation of the Py8DecayerPhy 29 /// 30 /// \author J. Yarba; FNAL 31 32 #include "Py8DecayerPhysics.hh" 33 34 #include "Py8Decayer.hh" 35 36 #include "G4Decay.hh" 37 #include "G4DecayTable.hh" 38 #include "G4ParticleDefinition.hh" 39 #include "G4ProcessManager.hh" 40 41 // factory 42 // 43 #include "G4PhysicsConstructorFactory.hh" 44 // 45 // register it with contructor factory 46 // 47 G4_DECLARE_PHYSCONSTR_FACTORY(Py8DecayerPhysic 48 49 //....oooOO0OOooo........oooOO0OOooo........oo 50 51 Py8DecayerPhysics::Py8DecayerPhysics(G4int) : 52 53 //....oooOO0OOooo........oooOO0OOooo........oo 54 55 Py8DecayerPhysics::~Py8DecayerPhysics() {} 56 57 //....oooOO0OOooo........oooOO0OOooo........oo 58 59 void Py8DecayerPhysics::ConstructParticle() 60 { 61 // Nothing needs to be done here 62 } 63 64 //....oooOO0OOooo........oooOO0OOooo........oo 65 66 void Py8DecayerPhysics::ConstructProcess() 67 { 68 // Adding external decayer to G4Decay proces 69 // G4Decay will use the external decayer if 70 // assigned to an unstable particle and that 71 // have its decay table. 72 73 // Loop over all particles instantiated and 74 // decay table for tau's and B+/- so that th 75 // the external decayer (Pythia8). 76 77 // NOTE: The extDecayer will be deleted in G 78 79 Py8Decayer* extDecayer = new Py8Decayer(); 80 G4bool setOnce = true; 81 82 auto particleIterator = GetParticleIterator( 83 particleIterator->reset(); 84 while ((*particleIterator)()) { 85 G4ParticleDefinition* particle = particleI 86 87 // remove native/existing decay table for 88 // a)tau's 89 // b) B+/- 90 // so that G4Decay will use the external d 91 if (std::abs(particle->GetPDGEncoding()) = 92 if (particle->GetDecayTable()) { 93 delete particle->GetDecayTable(); 94 particle->SetDecayTable(nullptr); 95 /* 96 if ( verboseLevel > 1 ) { 97 G4cout << "Use ext decaye 98 << particleIterator-> 99 << G4endl; 100 } 101 */ 102 } 103 } 104 105 if (setOnce) 106 // One G4Decay object is shared by all uns 107 // Thus, we set the external decayer only 108 { 109 G4ProcessManager* pmanager = particle->G 110 G4ProcessVector* processVector = pmanage 111 for (size_t i = 0; i < processVector->le 112 G4Decay* decay = dynamic_cast<G4Decay* 113 if (decay) { 114 decay->SetExtDecayer(extDecayer); 115 setOnce = false; 116 } 117 } 118 } 119 } 120 121 return; 122 } 123 124 //....oooOO0OOooo........oooOO0OOooo........oo 125