35 #ifndef G4CASCADE_COALESCENCE_HH 
   36 #define G4CASCADE_COALESCENCE_HH 
   59   typedef std::vector<size_t> ClusterCandidate; 
 
   67   std::vector<ClusterCandidate> allClusters;    
 
   68   std::set<size_t> triedClusters;       
 
   69   std::set<size_t> usedNucleons;        
 
   72   const std::vector<G4InuclElementaryParticle>* thisHadrons;
 
   74   ClusterCandidate thisCluster;         
 
   78   void selectCandidates();
 
   80   void removeNucleons();
 
   83   void tryClusters(
size_t idx1, 
size_t idx2);
 
   84   void tryClusters(
size_t idx1, 
size_t idx2, 
size_t idx3);
 
   85   void tryClusters(
size_t idx1, 
size_t idx2, 
size_t idx3, 
size_t idx4);
 
   88   void fillCluster(
size_t idx1, 
size_t idx2);
 
   89   void fillCluster(
size_t idx1, 
size_t idx2, 
size_t idx3);
 
   90   void fillCluster(
size_t idx1, 
size_t idx2, 
size_t idx3, 
size_t idx4);
 
   93   size_t clusterHash(
const ClusterCandidate& clus) 
const;
 
   96   bool clusterTried(
const ClusterCandidate& clus)
 const {
 
   97     return triedClusters.find(clusterHash(clus)) != triedClusters.end();
 
  101   bool nucleonUsed(
size_t idx)
 const {
 
  102     return usedNucleons.find(idx) != usedNucleons.end();
 
  106   bool allNucleons(
const ClusterCandidate& clus) 
const;
 
  107   bool goodCluster(
const ClusterCandidate& clus) 
const;
 
  108   G4int clusterType(
const ClusterCandidate& aCluster) 
const;
 
  112     return (*thisHadrons)[idx];
 
  116   bool makeLightIon(
const ClusterCandidate& aCluster);
 
  119   G4LorentzVector getClusterMomentum(
const ClusterCandidate& aCluster) 
const;
 
  121   G4double maxDeltaP(
const ClusterCandidate& aCluster) 
const;
 
  124   void reportArgs(
const G4String& 
name, 
const ClusterCandidate& clus) 
const;