G4CollisionComposite Class Reference

#include <G4CollisionComposite.hh>

Inheritance diagram for G4CollisionComposite:

G4VCollision G4CollisionMesonBaryon G4CollisionMesonBaryonToResonance G4CollisionPN G4GeneralNNCollision G4CollisionNN G4CollisionNNToDeltaDelta G4CollisionNNToDeltaDelta1600 G4CollisionNNToDeltaDelta1620 G4CollisionNNToDeltaDelta1700 G4CollisionNNToDeltaDelta1900 G4CollisionNNToDeltaDelta1905 G4CollisionNNToDeltaDelta1910 G4CollisionNNToDeltaDelta1920 G4CollisionNNToDeltaDelta1930 G4CollisionNNToDeltaDelta1950 G4CollisionNNToDeltaDeltastar G4CollisionNNToDeltaNstar G4CollisionNNToNDelta G4CollisionNNToNDelta1600 G4CollisionNNToNDelta1620 G4CollisionNNToNDelta1700 G4CollisionNNToNDelta1900 G4CollisionNNToNDelta1905 G4CollisionNNToNDelta1910 G4CollisionNNToNDelta1920 G4CollisionNNToNDelta1930 G4CollisionNNToNDelta1950 G4CollisionNNToNDeltastar G4CollisionNNToNNstar G4CollisionNStarNToNN

Public Member Functions

 G4CollisionComposite ()
virtual ~G4CollisionComposite ()
virtual G4double CrossSection (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual G4KineticTrackVectorFinalState (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual G4bool IsInCharge (const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
void AddComponent (G4VCollision *aC)
virtual const G4VCrossSectionSourceGetCrossSectionSource () const
virtual const G4VAngularDistributionGetAngularDistribution () const
virtual const G4CollisionVectorGetComponents () const

Data Structures

struct  Register
struct  Resolve

Detailed Description

Definition at line 57 of file G4CollisionComposite.hh.


Constructor & Destructor Documentation

G4CollisionComposite::G4CollisionComposite (  ) 

Definition at line 44 of file G4CollisionComposite.cc.

00045 { 
00046 }

G4CollisionComposite::~G4CollisionComposite (  )  [virtual]

Definition at line 49 of file G4CollisionComposite.cc.

00050 { 
00051   std::for_each(components.begin(), components.end(), G4Delete());
00052 }


Member Function Documentation

void G4CollisionComposite::AddComponent ( G4VCollision aC  )  [inline]

Definition at line 72 of file G4CollisionComposite.hh.

Referenced by G4CollisionMesonBaryon::G4CollisionMesonBaryon(), G4CollisionMesonBaryonToResonance::G4CollisionMesonBaryonToResonance(), G4CollisionComposite::Resolve::operator()(), and G4CollisionComposite::Register::operator()().

00072 {components.push_back(aC);}

G4double G4CollisionComposite::CrossSection ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const [virtual]

Reimplemented from G4VCollision.

Reimplemented in G4CollisionNN.

Definition at line 55 of file G4CollisionComposite.cc.

References G4VCrossSectionSource::CrossSection(), GetCrossSectionSource(), and G4KineticTrack::GetDefinition().

00057 {
00058   G4double crossSect = 0.;
00059   const G4VCrossSectionSource* xSource = GetCrossSectionSource();
00060   if (xSource != 0)
00061   // There is a total cross section for this Collision
00062   {
00063     crossSect = xSource->CrossSection(trk1,trk2);
00064   }
00065   else
00066   {
00067     // waiting for mutable to enable buffering.
00068     const_cast<G4CollisionComposite *>(this)->BufferCrossSection(trk1.GetDefinition(), trk2.GetDefinition());
00069 //    G4cerr << "Buffer filled, reying with sqrts = "<< (trk1.Get4Momentum()+trk2.Get4Momentum()).mag() <<G4endl;
00070     crossSect = BufferedCrossSection(trk1,trk2);
00071   }
00072   return crossSect;
00073 }

G4KineticTrackVector * G4CollisionComposite::FinalState ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const [virtual]

Implements G4VCollision.

Definition at line 76 of file G4CollisionComposite.cc.

References G4UniformRand, and IsInCharge().

00078 {
00079   std::vector<G4double> cxCache;
00080   G4double partialCxSum = 0.0;
00081 
00082   size_t i;
00083   for (i=0; i<components.size(); i++) 
00084   {
00085     G4double partialCx;
00086 //    cout << "comp" << i << " " << components[i]()->GetName();
00087     if (components[i]->IsInCharge(trk1,trk2)) 
00088     {
00089       partialCx = components[i]->CrossSection(trk1,trk2);
00090     } 
00091     else 
00092     {
00093       partialCx = 0.0;
00094     }
00095 //    cout << "   cx=" << partialCx << endl;
00096     partialCxSum += partialCx;
00097     cxCache.push_back(partialCx);
00098   }
00099 
00100   G4double random = G4UniformRand()*partialCxSum;
00101   G4double running = 0;
00102   for (i=0; i<cxCache.size(); i++) 
00103   {
00104     running += cxCache[i];
00105     if (running > random) 
00106     {
00107       return components[i]->FinalState(trk1, trk2);
00108     }
00109   }
00110 //  G4cerr <<"in charge = "<<IsInCharge(trk1, trk2)<<G4endl;
00111 //  G4cerr <<"Cross-section = "<<CrossSection(trk1, trk2)/millibarn<<" "<<running<<" "<<cxCache.size()<<G4endl;
00112 //  G4cerr <<"Names = "<<trk1.GetDefinition()->GetParticleName()<<", "<<trk2.GetDefinition()->GetParticleName()<<G4endl;
00113 //  throw G4HadronicException(__FILE__, __LINE__, "G4CollisionComposite: no final state found!");
00114   return NULL;
00115 }

virtual const G4VAngularDistribution* G4CollisionComposite::GetAngularDistribution (  )  const [inline, virtual]

Implements G4VCollision.

Reimplemented in G4CollisionNN, and G4CollisionPN.

Definition at line 76 of file G4CollisionComposite.hh.

00076 { return 0; }

virtual const G4CollisionVector* G4CollisionComposite::GetComponents (  )  const [inline, virtual]

Reimplemented from G4VCollision.

Reimplemented in G4CollisionNN, G4CollisionNNToDeltaDelta1600, G4CollisionNNToDeltaDelta1620, G4CollisionNNToDeltaDelta1700, G4CollisionNNToDeltaDelta1900, G4CollisionNNToDeltaDelta1905, G4CollisionNNToDeltaDelta1910, G4CollisionNNToDeltaDelta1920, G4CollisionNNToDeltaDelta1930, G4CollisionNNToDeltaDelta1950, G4CollisionNNToNDelta, G4CollisionNNToNDelta1600, G4CollisionNNToNDelta1620, G4CollisionNNToNDelta1700, G4CollisionNNToNDelta1900, G4CollisionNNToNDelta1905, G4CollisionNNToNDelta1910, G4CollisionNNToNDelta1920, G4CollisionNNToNDelta1930, and G4CollisionNNToNDelta1950.

Definition at line 78 of file G4CollisionComposite.hh.

Referenced by IsInCharge().

00078 { return &components;}

virtual const G4VCrossSectionSource* G4CollisionComposite::GetCrossSectionSource (  )  const [inline, virtual]

Implements G4VCollision.

Reimplemented in G4CollisionNN, and G4CollisionPN.

Definition at line 75 of file G4CollisionComposite.hh.

Referenced by CrossSection().

00075 { return 0; }

G4bool G4CollisionComposite::IsInCharge ( const G4KineticTrack trk1,
const G4KineticTrack trk2 
) const [virtual]

Implements G4VCollision.

Reimplemented in G4GeneralNNCollision.

Definition at line 118 of file G4CollisionComposite.cc.

References GetComponents().

Referenced by FinalState().

00120 {
00121   G4bool isInCharge = false;
00122 
00123   // The composite is in charge if any of its components is in charge
00124 
00125   const G4CollisionVector* comps = GetComponents();
00126   if (comps)
00127     {
00128       G4CollisionVector::const_iterator iter;
00129       for (iter = comps->begin(); iter != comps->end(); ++iter)
00130         {
00131          if ( ((*iter))->IsInCharge(trk1,trk2) ) isInCharge = true;
00132         }
00133     }
00134 
00135   return isInCharge;
00136 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:39 2013 for Geant4 by  doxygen 1.4.7