26#ifndef G4CrossSectionBuffer_h
27#define G4CrossSectionBuffer_h
42 : theA(aA), theB(aB) {}
49 if(aB == theB) result =
true;
53 if(aB == theA) result =
true;
60 std::pair<G4double, G4double> aNew;
63 theData.push_back(aNew);
71 if(theData.size()==1)
return theData[theData.size()-1].second;
73 for(
size_t i=0; i<theData.size(); i++)
75 if(theData[i].first>sqrts)
79 x1 = theData[i].first;
80 y1 = theData[i].second;
81 x2 = theData[i+1].first;
82 y2 = theData[i+1].second;
84 else if(theData.size()-1==i)
86 x1 = theData[theData.size()-2].first;
87 y1 = theData[theData.size()-2].second;
88 x2 = theData[theData.size()-1].first;
89 y2 = theData[theData.size()-1].second;
93 x1 = theData[i-1].first;
94 y1 = theData[i-1].second;
95 x2 = theData[i].first;
96 y2 = theData[i].second;
103 G4double result = y1 + (sqrts-x1) * (y2-y1)/(x2-x1);
104 if(result<0) result = 0;
105 if(y1<0.01*CLHEP::millibarn) result = 0;
111 for(
size_t i=0;i<theData.size(); i++)
113 G4cerr <<
"sqrts = "<<theData[i].first<<
", X = "<<theData[i].second/CLHEP::millibarn<<
G4endl;
118 std::vector<std::pair<G4double, G4double> > theData;
G4double S(G4double temp)
G4GLOB_DLL std::ostream G4cerr
G4bool InCharge(const G4ParticleDefinition *aA, const G4ParticleDefinition *aB) const
void push_back(G4double S, G4double x)
G4CrossSectionBuffer(const G4ParticleDefinition *aA, const G4ParticleDefinition *aB)
G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
const G4LorentzVector & Get4Momentum() const