42int main(
int argc,
char **argv)
62 JParser<> zap(
"Program to determine the energy loss due to visible delta-rays.");
77 catch(
const exception &error) {
81 if (option.find(
'R') == string::npos) { option +=
'R'; }
82 if (option.find(
'S') == string::npos) { option +=
'S'; }
98 const double Tmin = (
T_GeV.is_valid() ?
99 T_GeV.constrain(JDeltaRays::getTmin()) : JDeltaRays::getTmin());
103 const double xmin = -3.00;
104 const double xmax = +9.25;
106 TH1D h0(
"h0",
NULL, 320, xmin, xmax);
107 TH1D h1(
"h1",
NULL, 320, xmin, xmax);
109 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
111 const double x = h0.GetBinCenter(i);
112 const double E = pow(10.0,x);
116 0.5 * getKineticEnergy(E, MASS_ELECTRON));
118 if (
T_GeV.is_valid()) { Tmax =
T_GeV.constrain(Tmax); }
135 dEdx = JDeltaRays::getEnergyLoss(E,
MASS_LEPTON, Tmin, Tmax, Z, A) * 1.0e3;
145 h0.SetBinContent(i,
dEdx);
146 h1.SetBinContent(i,
dNdx);
151 TF1 f1(
"f1",
"[0] + [1]*x + [2]*x*x + [3]*x*x*x");
153 if (option.find(
'W') == string::npos) {
157 f1.SetParameter(0, h0.GetMinimum());
158 f1.SetParameter(1, (h0.GetMaximum() - h0.GetMinimum()) / (h0.GetXaxis()->GetXmax() - h0.GetXaxis()->GetXmin()));
159 f1.SetParameter(2, 0.0);
160 f1.SetParameter(3, 0.0);
162 f1.SetLineColor(
kRed);
166 const TFitResultPtr result = h0.Fit(&f1, option.c_str(),
"same", xmin, xmax);
168 cout <<
"chi2/NDF " << result->Chi2() <<
'/' << result->Ndf() <<
endl;
171 cout <<
"\t// dE/dX = a + bx + cx^2 + dx^3; // [MeV g^-1 cm^2]; x = log10(E/GeV);" <<
endl;
173 for (
int i = 0; i != 4; ++i) {
174 cout <<
"\tstatic const double " << (
char) (
'a' + i) <<
" = " <<
SCIENTIFIC(10,3) << f1.GetParameter(i) <<
";" <<
endl;
180 for (
double E = 0.5 * (Emin +
Emax); ; E = 0.5 * (Emin +
Emax)) {
182 const double Tmax = JDeltaRays::getTmax(E,
MASS_LEPTON);
184 if (fabs(Tmax - Tmin) < precision) {
185 cout <<
"\tstatic const double Emin = " <<
FIXED(7,5) << E <<
"; // [GeV]" <<
endl;