G4PromptPhotonEvaporation.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 // -------------------------------------------------------------------
00029 //
00030 //      GEANT4 class file
00031 //
00032 //      CERN, Geneva, Switzerland
00033 //
00034 //      File name:     G4PromptPhotonEvaporation
00035 //
00036 //      Author:        Vladimir Ivantchenko
00037 //
00038 //      Creation date: 20 December 2011
00039 //
00040 //Modifications:
00041 //
00042 // 
00043 // -------------------------------------------------------------------
00044 //
00045 
00046 #include "G4PromptPhotonEvaporation.hh"
00047 
00048 #include "globals.hh"
00049 #include "G4PhysicalConstants.hh"
00050 #include "G4SystemOfUnits.hh"
00051 #include "Randomize.hh"
00052 #include "G4Gamma.hh"
00053 #include "G4NuclearLevelManager.hh"
00054 #include "G4NuclearLevelStore.hh"
00055 
00056 #include "G4LorentzVector.hh"
00057 #include "G4VGammaTransition.hh"
00058 #include "G4Fragment.hh"
00059 #include "G4FragmentVector.hh"
00060 #include "G4ContinuumGammaDeexcitation.hh"
00061 #include "G4DiscreteGammaDeexcitation.hh"
00062 #include "G4E1Probability.hh"
00063 
00064 G4PromptPhotonEvaporation::G4PromptPhotonEvaporation()
00065   :fVerbose(0), fICM(true), fRDM(false), fMaxHalfTime(DBL_MAX),
00066    fEmissionProbability(0.0),levelManager(0),nucleus(0)
00067 {
00068   fNuclearLevelStore = G4NuclearLevelStore::GetInstance(); 
00069   theA = theZ = 0;
00070   fEnergyFermi = fExcEnergyMax = gammaE = 0.0;
00071 }
00072 
00073 G4PromptPhotonEvaporation::~G4PromptPhotonEvaporation()
00074 { 
00075 }
00076 
00077 G4double 
00078 G4PromptPhotonEvaporation::GetEmissionProbability(G4Fragment* theNucleus) 
00079 {
00080   fEmissionProbability = 0.0;
00081   nucleus = theNucleus;
00082   G4double ex = nucleus->GetExcitationEnergy();
00083 
00084   if(nucleus->GetZ_asInt() != theZ || nucleus->GetA_asInt() != theA) {
00085     G4int Z = nucleus->GetZ_asInt();
00086     G4int A = nucleus->GetA_asInt();
00087     fExcEnergyMax = -1.0;
00088     if(1 < A && ex > keV) {
00089       fEnergyFermi = G4NucleiProperties::GetNuclearMass(A-1, Z) 
00090         + neutron_mass_c2 - nucleus->GetGroundStateMass();
00091       fExcEnergyMax = fEnergyFermi + 15*MeV;
00092     }
00093     if(ex < fExcEnergyMax) {
00094 
00095       theZ = Z;
00096       theA = A;
00097       levelManager = fNuclearLevelStore->GetManager(Z,A);
00098 
00099       // continium transition
00100       if(ex >= fEnergyFermi) {
00101 
00102         // discrete transition
00103       } else {
00104       }
00105     }
00106   }
00107   return fEmissionProbability;
00108 }
00109 
00110 G4Fragment* 
00111 G4PromptPhotonEvaporation::EmittedFragment(G4Fragment* theNucleus)
00112 {
00113   //G4cout << "G4PromptPhotonEvaporation::EmittedFragment" << G4endl;
00114   
00115   G4Fragment* gamma = 0;
00116   if(theNucleus->GetExcitationEnergy() <= keV) { return gamma; }
00117   if(GetEmissionProbability(theNucleus) <= 0.0){ return gamma; }
00118 
00119   //G4cout << "G4PromptPhotonEvaporation::EmittedFragment" << G4endl;
00120   /*
00121     G4Fragment* gamma = _contDeexcitation->GenerateGamma();
00122     if(gamma) { 
00123       if (_verbose > 0) {
00124         G4cout << "G4PromptPhotonEvaporation::EmittedFragment continium deex: "   
00125                << gamma << G4endl;
00126         G4cout << "   Residual: " << nucleus << G4endl;
00127       }
00128       return gamma; 
00129     }
00130   }
00131 
00132   // Do one photon emission by the discrete deexcitation 
00133   _discrDeexcitation->SetNucleus(_nucleus);
00134   _discrDeexcitation->Initialize();
00135 
00136   if(_discrDeexcitation->CanDoTransition()) {  
00137     G4Fragment* gamma = _discrDeexcitation->GenerateGamma();
00138     if(gamma) { 
00139       if (_verbose > 0) {
00140         G4cout << "G4PromptPhotonEvaporation::EmittedFragment discrete deex: "   
00141                << gamma << G4endl;
00142         G4cout << "   Residual: " << nucleus << G4endl;
00143       }
00144       return gamma; 
00145     }
00146   }
00147  
00148   if (_verbose > 0) {
00149     G4cout << "G4PromptPhotonEvaporation unable emit gamma: " 
00150            << nucleus << G4endl;
00151   }
00152   */
00153   return gamma;
00154 }
00155 
00156 G4FragmentVector* 
00157 G4PromptPhotonEvaporation::BreakUpFragment(G4Fragment* theNucleus)
00158 {
00159   //G4cout << "G4PromptPhotonEvaporation::BreakUpFragment" << G4endl;
00160   G4FragmentVector* v = new G4FragmentVector();
00161   G4Fragment* gamma = 0;
00162   do {
00163     gamma = EmittedFragment(theNucleus);
00164     if(gamma) { v->push_back(gamma); }
00165   } while(gamma);
00166 
00167   return v;
00168 }
00169 
00170 G4FragmentVector* 
00171 G4PromptPhotonEvaporation::BreakUp(const G4Fragment& theNucleus)
00172 {
00173   //G4cout << "G4PromptPhotonEvaporation::BreakUp" << G4endl;
00174   G4Fragment* initialState = new G4Fragment(theNucleus);
00175   G4FragmentVector* v = BreakUpFragment(initialState);
00176   v->push_back(initialState);
00177   return v;
00178 }
00179 
00180 

Generated on Mon May 27 17:49:26 2013 for Geant4 by  doxygen 1.4.7