39 const G4int G4CollisionComposite::nPoints = 32;
41 const G4double G4CollisionComposite::theT[nPoints] =
42 {.01, .03, .05, .1, .15, .2, .3, .4, .5, .6, .7, .8, .9, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0, 8.0, 10., 15, 20, 50, 100};
51 std::for_each(components.begin(), components.end(),
G4Delete());
70 crossSect = BufferedCrossSection(trk1,trk2);
79 std::vector<G4double> cxCache;
83 for (i=0; i<components.size(); i++)
89 partialCx = components[i]->CrossSection(trk1,trk2);
96 partialCxSum += partialCx;
97 cxCache.push_back(partialCx);
102 for (i=0; i<cxCache.size(); i++)
104 running += cxCache[i];
105 if (running > random)
107 return components[i]->FinalState(trk1, trk2);
121 G4bool isInCharge =
false;
128 G4CollisionVector::const_iterator iter;
129 for (iter = comps->begin(); iter != comps->end(); ++iter)
131 if ( ((*iter))->IsInCharge(trk1,trk2) ) isInCharge =
true;
138 void G4CollisionComposite::
143 for(i=0; i<theBuffer.size(); i++)
145 if(theBuffer[i].InCharge(aP, bP))
return;
152 for(
size_t tt=0; tt<maxE; tt++)
180 G4KineticTrack a(const_cast<G4ParticleDefinition *>(aP), atime, aPosition, a4Momentum);
181 G4KineticTrack b(const_cast<G4ParticleDefinition *>(bP), btime, bPosition, b4Momentum);
183 for (i=0; i<components.size(); i++)
187 crossSect += components[i]->CrossSection(
a,
b);
190 G4double sqrts = (a4Momentum+b4Momentum).mag();
191 aNewBuff.push_back(sqrts, crossSect);
193 theBuffer.push_back(aNewBuff);
201 for(
size_t i=0; i<theBuffer.size(); i++)
205 return theBuffer[i].CrossSection(trk1, trk2);
208 throw G4HadronicException(__FILE__, __LINE__,
"G4CollisionComposite::BufferedCrossSection - Blitz !!");
virtual const G4CollisionVector * GetComponents() const
CLHEP::Hep3Vector G4ThreeVector
virtual const G4VCrossSectionSource * GetCrossSectionSource() const
virtual ~G4CollisionComposite()
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4ParticleDefinition * GetDefinition() const
std::vector< G4VCollision * > G4CollisionVector
virtual G4KineticTrackVector * FinalState(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4double GetPDGMass() const
virtual G4bool IsInCharge(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const =0