29BDSPhysicsVectorLinear::BDSPhysicsVectorLinear(
const std::vector<G4double>& kineticEnergyIn,
30 const std::vector<G4double>& valuesIn):
31 kineticEnergy(kineticEnergyIn),
33 eKMin(kineticEnergy[0]),
34 eKMax(kineticEnergy.back()),
35 eKMinValue(values[0]),
36 eKMaxValue(values.back())
38 if (kineticEnergy.size() != valuesIn.size())
39 {
throw BDSException(__METHOD_NAME__,
"kinetic energy vector and values vector mismatch in size.");}
40 if (kineticEnergy.size() < 2)
41 {
throw BDSException(__METHOD_NAME__,
"must be at least 2 points in Ek vs value vectors.");}
52 auto indexGreaterThanOrEqual = std::lower_bound(kineticEnergy.begin(), kineticEnergy.end(), eK);
53 G4int index2 = (G4int)std::distance(kineticEnergy.begin(), indexGreaterThanOrEqual);
54 G4int index1 = index2 - 1;
55 G4double dx = (eK - kineticEnergy[index1]) / (kineticEnergy[index2] - kineticEnergy[index1]);
56 G4double result = values[index1]*(1.0 - dx) + values[index2]*dx;