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 // 00027 // $Id$ 00028 // 00029 // ---------------- G4QEnvironment ---------------- 00030 // by Mikhail Kossov, August 2000. 00031 // header for Multy Quasmon Environment in the CHIPS Model 00032 // ------------------------------------------------------------ 00033 // Short description: The G4QEnvironment class corresponds to the nuclear 00034 // environment, containing excited nucleons or nuclear clusters 00035 // (G4Quasmons). In the constructer the nucleus (G4QNucleus) is clusterized 00036 // and then the projectile hadron (or hadrons) can create one (or a few) 00037 // Quasmons, which are fragmented by the Fragment member function. As a 00038 // result a vector of G4QHadrons is created, which can include the residual 00039 // nucleus in the ground state. 00040 //--------------------------------------------------------------------- 00041 00042 #ifndef G4QEnvironment_h 00043 #define G4QEnvironment_h 1 00044 00045 #include "G4RandomDirection.hh" 00046 #include "G4QuasmonVector.hh" 00047 #include "G4QFreeScattering.hh" 00048 #include "G4QThd.hh" 00049 00050 class G4QEnvironment 00051 { 00052 public: 00053 G4QEnvironment(const G4QNucleus& theEnv); // Create Env and add Quasmons 00054 // later 00055 G4QEnvironment(const G4QHadronVector& projHadrons, const G4int targPDG); 00056 G4QEnvironment(const G4QEnvironment& right); // copy QEnvironment by value 00057 G4QEnvironment(G4QEnvironment* right); // copy QEnvironment by pointer 00058 ~G4QEnvironment(); // Public Destructor 00059 00060 // Overloaded operators 00061 const G4QEnvironment& operator=(const G4QEnvironment& right); 00062 G4bool operator==(const G4QEnvironment &right) const; 00063 G4bool operator!=(const G4QEnvironment &right) const; 00064 00065 //Selectors 00066 G4QNucleus GetEnvironment() const; 00067 G4QuasmonVector* GetQuasmons(); // User is responsible for Destroy/Clear/Delete 00068 G4QHadronVector* GetQHadrons(); // User is responsible for Destroy/Clear/Delete 00069 G4QHadronVector* GetProjectiles(); // User is responsible for Destroy/Clear/Delete 00070 00071 // Modifiers 00072 void AddQuasmon(G4Quasmon* Q); // Add aQuasmon to theEnvironment 00073 G4QHadronVector* Fragment(); // User must clear and destroy the G4QHadronVec 00074 00075 // External managment 00076 void DecayBaryon(G4QHadron* dB, G4QHadronVector* HV); // Decay baryon 00077 void DecayMeson(G4QHadron* dB, G4QHadronVector* HV); // Decay meson 00078 void DecayAntistrange(G4QHadron* aS, G4QHadronVector* HV);// Decay AntiStrNuc 00079 void CheckMassShell(G4QHadronVector* HV); // All hadrons on mass shell 00080 00081 // Static functions 00082 static void SetParameters(G4double solAn=0.4,G4bool efFlag=false,G4double piThresh=141.4, 00083 G4double mpisq=20000., G4double dinum=1880.); 00084 static void OpenElectromagneticDecays(); 00085 static void CloseElectromagneticDecays(); 00086 00087 protected: 00088 void CleanUpQHadrons(); // Only another G4QEnvironment issue can use it (can make mess) 00089 void FillQHadrons(G4QHadronVector* input); //Only another G4QEnvironment issue can use it 00090 00091 private: 00092 G4QHadronVector* FSInteraction(); // Final State Interaction after Hadronization 00093 G4QHadronVector HadronizeQEnvironment(); // Main HadronizationFunction used in Fragment 00094 void CopyAndDeleteHadronVector(G4QHadronVector* HV);//Copy HadrVect to Output 00095 void CreateQuasmon(const G4QContent& pQC, const G4LorentzVector& p4M, G4bool f=false); 00096 void InitClustersVector(G4int maxC, G4int maxA);//Init.NucClust's for 1st int 00097 void CleanUp(); // Makes theEnvironment=vacuum & kill Quasmons 00098 void PrepareInteractionProbabilities(const G4QContent& projQC, G4double AP); 00099 void EvaporateResidual(G4QHadron* h, G4bool f=true);// Evaporate NuclearFragm 00100 G4bool CheckGroundState(G4Quasmon* quasm,G4bool corFlag=false);//as G4Q for QHV 00101 G4bool DecayInEnvQ(G4Quasmon* quasm); // Use befor evaporation in PANIC case 00102 00103 // Body 00104 private: 00105 // Static Parameters 00106 static G4bool WeakDecays; // Flag for opening WeakDecays (notUsed: allAreClosed) 00107 static G4bool ElMaDecays; // Flag for opening ElectroMagDecays (true by default) 00108 static G4bool EnergyFlux; // Flag for Energy Flux use instead of Multy Quasmon 00109 static G4double SolidAngle; // Part of Solid Angle to capture secondaries(@@A-dep) 00110 static G4double PiPrThresh; // Pion Production Threshold for gammas 00111 static G4double M2ShiftVir; // Shift for M2=-Q2=m_pi^2 of the virtual gamma 00112 static G4double DiNuclMass; // Double Nucleon Mass for virtual normalization 00113 // Output hadrons 00114 G4QHadronVector theQHadrons; // Vector of generated secondary hadrons 00115 // Internal working objects 00116 G4QHadronVector intQHadrons; // Vector of postponed secondary hadrons 00117 G4QCHIPSWorld* theWorld; // the CHIPS World 00118 G4int nBarClust; // Maximum BarionNumber of clusters (To optimize calc) 00119 G4double f2all; // Ratio of freeNucleons to free+denseNucleons 00120 G4QuasmonVector theQuasmons; // Intermediate vectorOfQuasmons before fragmentation 00121 G4QCandidateVector theQCandidates; // Vector of possible candidates to clusters 00122 G4QNucleus theEnvironment; // InitialNucleus (later ResidualNuclearEnvironment) 00123 G4LorentzVector tot4Mom; // Total 4-momentum in the reaction 00124 G4int totCharge; // Total charge in the reaction (for current control) 00125 G4int totBaryoN; // Total baryon number in the reaction (for cur.cont) 00126 G4QHadronVector theProjectiles; // Vector of projectiles in the interaction 00127 G4int theTargetPDG; // PDG of the target nucleus in the interaction 00128 G4QFreeScattering* theQFScat; // Pointer to the CHIPS Quasi-Free Scatterer 00129 }; 00130 00131 // Inline functions 00132 inline G4bool G4QEnvironment::operator==(const G4QEnvironment &rhs) const 00133 {return this == &rhs;} 00134 inline G4bool G4QEnvironment::operator!=(const G4QEnvironment &rhs) const 00135 {return this != &rhs;} 00136 inline G4QNucleus G4QEnvironment::GetEnvironment() const {return theEnvironment;} 00137 00138 #endif