00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 #ifndef G4FermiFragmentsPool_hh 
00037 #define G4FermiFragmentsPool_hh 1
00038 
00039 #include "globals.hh"
00040 #include "G4VFermiFragment.hh"
00041 #include "G4FermiConfiguration.hh"
00042 #include <vector>
00043 
00044 class G4FermiFragmentsPool
00045 {
00046 public:
00047 
00048   static G4FermiFragmentsPool* Instance();
00049 
00050   ~G4FermiFragmentsPool();
00051 
00052   const std::vector<G4FermiConfiguration*>* 
00053   GetConfigurationList(G4int Z, G4int A, G4double mass);
00054 
00055   const G4VFermiFragment* GetFragment(G4int Z, G4int A);
00056 
00057   inline G4int GetMaxZ() const;
00058 
00059   inline G4int GetMaxA() const;
00060   
00061 private:
00062 
00063   G4FermiFragmentsPool();
00064 
00065   void Initialise();
00066 
00067   G4bool IsExist(G4int Z, G4int A, std::vector<const G4VFermiFragment*>&);
00068 
00069   inline G4bool IsAvailable(G4int Z, G4int A);
00070 
00071   static G4FermiFragmentsPool* theInstance;
00072 
00073   std::vector<const G4VFermiFragment*> fragment_pool;
00074 
00075   G4int maxZ;
00076   G4int maxA;
00077   G4int verbose;
00078  
00079   
00080   std::vector<G4FermiConfiguration*> list1[17]; 
00081   std::vector<G4FermiConfiguration*> list2[17]; 
00082   std::vector<G4FermiConfiguration*> list3[17];
00083   std::vector<G4FermiConfiguration*> list4[17];
00084   
00085   std::vector<G4FermiConfiguration*> listextra;
00086 };
00087 
00088 inline G4bool G4FermiFragmentsPool::IsAvailable(G4int Z, G4int A)
00089 {
00090   G4bool res = true;
00091   if     (2 == Z && 5 == A) { res = false; }
00092   else if(3 == Z && 5 == A) { res = false; }
00093   else if(4 == Z && 8 == A) { res = false; }
00094   else if(5 == Z && 9 == A) { res = false; }
00095   return res;
00096 }
00097 
00098 inline G4int G4FermiFragmentsPool::GetMaxZ() const
00099 {
00100   return maxZ;
00101 }
00102 
00103 inline G4int G4FermiFragmentsPool::GetMaxA() const
00104 {
00105   return maxA;
00106 }
00107 
00108 #endif
00109