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 // File name: G4KaonMinusAbsorptionAtRest.hh 00027 // 00028 // Author: Christian V"olcker (Christian.Volcker@cern.ch), 00029 // 00030 // Creation date: 10. November 1997 00031 // 00032 // ------------------------------------------------------------------- 00033 00034 #ifndef G4KaonMinusAbsorptionAtRest_h 00035 #define G4KaonMinusAbsorptionAtRest_h 1 00036 00037 // Class Description: 00038 // 00039 // Process for nuclear absorption of K- at rest. 00040 // To be used in your physics list in case you need this physics. 00041 00042 #include "globals.hh" 00043 #include "Randomize.hh" 00044 #include "G4VRestProcess.hh" 00045 #include "G4ParticleTypes.hh" 00046 #include "G4Nucleus.hh" 00047 #include "G4DynamicParticle.hh" 00048 #include "G4DynamicParticleVector.hh" 00049 #include "G4NucleiProperties.hh" 00050 #include "G4HadronicProcessType.hh" 00051 00052 00053 // ********************************************************* 00054 class G4KaonMinusAbsorptionAtRest : public G4VRestProcess 00055 // ********************************************************* 00056 { 00057 private: 00058 // hide assignment operator as private 00059 G4KaonMinusAbsorptionAtRest& operator=(const G4KaonMinusAbsorptionAtRest &right); 00060 G4KaonMinusAbsorptionAtRest(const G4KaonMinusAbsorptionAtRest& ); 00061 public: 00062 G4KaonMinusAbsorptionAtRest(const G4String& processName ="KaonMinusAbsorptionAtRest", 00063 G4ProcessType aType = fHadronic ); 00064 ~G4KaonMinusAbsorptionAtRest(); 00065 00066 //override methods... 00067 public: 00068 G4bool IsApplicable(const G4ParticleDefinition& particle) { 00069 return( particle == *(G4KaonMinus::KaonMinus()) ); 00070 } 00071 00072 void PreparePhysicsTable(const G4ParticleDefinition&); 00073 00074 void BuildPhysicsTable(const G4ParticleDefinition&); 00075 00076 // the main method ... 00077 G4VParticleChange* AtRestDoIt(const G4Track& aTrack, const G4Step& aStep); 00078 00079 protected: // why?? might be private.... 00080 // zero mean lifetime 00081 G4double GetMeanLifeTime(const G4Track& aTrack, 00082 G4ForceCondition* ) 00083 { 00084 G4double result = 0; 00085 if(aTrack.GetMaterial()->GetNumberOfElements() == 1) 00086 if(aTrack.GetMaterial()->GetZ()<1.5) result = DBL_MAX; 00087 return result; 00088 } 00089 00090 private: 00091 // returns proton or neutron with fermi-momentum 00092 G4DynamicParticle GetAbsorbingNucleon(); 00093 00094 // returns proton or neutron particle definition; 00095 G4ParticleDefinition* SelectAbsorbingNucleon(); 00096 00097 // provides the neutron halo factor for absorption on nucleus surface. 00098 // in the G4Nucleus 00099 G4double NeutronHaloFactor(G4double Z, G4double N); 00100 00101 // creates the reaction products 00102 G4DynamicParticleVector* KaonNucleonReaction(); 00103 00104 // secondary pion absorption in parent nucleus 00105 // if TRUE, then add excitation energy to the Nucleus 00106 G4bool AbsorbPionByNucleus(G4DynamicParticle* aPion); 00107 00108 // secondary Sigma-Lambda conversion 00109 // if conversion Done, then add excitation energy to the Nucleus 00110 G4DynamicParticle *SigmaLambdaConversion(G4DynamicParticle* aSigma); 00111 00112 // instance variables ... 00113 private: 00114 // pointer to current stopped hadron 00115 const G4DynamicParticle *stoppedHadron; 00116 00117 // pointer to current target nucleus 00118 G4Nucleus* nucleus; 00119 00120 // some constant parameters 00121 00122 G4double pionAbsorptionRate; 00123 00124 // primary production rates ( for absorption on Carbon) 00125 00126 G4double rateLambdaZeroPiZero; 00127 G4double rateSigmaMinusPiPlus; 00128 G4double rateSigmaPlusPiMinus; 00129 G4double rateSigmaZeroPiZero; 00130 00131 G4double rateLambdaZeroPiMinus; 00132 G4double rateSigmaZeroPiMinus; 00133 G4double rateSigmaMinusPiZero; 00134 00135 00136 // Sigma Lambda Conversion rates 00137 // for sigma- p -> lambda n 00138 // sigma+ n -> lambda p 00139 // sigma- n -> lambda 00140 00141 G4double sigmaPlusLambdaConversionRate; 00142 G4double sigmaMinusLambdaConversionRate; 00143 G4double sigmaZeroLambdaConversionRate; 00144 00145 }; 00146 00147 #endif 00148