GENIEGenerator
Loading...
Searching...
No Matches
GSLXSecFunc.h
Go to the documentation of this file.
1//_____________________________________________________________________________________
2/*!
3
4\namespace genie::utils::gsl
5
6\brief GENIE differential cross section function wrappers for GSL integrators.
7
8\author Costas Andreopoulos <c.andreopoulos \at cern.ch>
9 University of Liverpool
10
11\created Sep 01, 2009
12
13\cpright Copyright (c) 2003-2025, The GENIE Collaboration
14 For the full text of the license visit http://copyright.genie-mc.org
15*/
16//_____________________________________________________________________________________
17
18#ifndef _GENIE_XSEC_FUNCTION_GSL_WRAPPERS_H_
19#define _GENIE_XSEC_FUNCTION_GSL_WRAPPERS_H_
20
21#include <Math/IFunction.h>
22#include <Math/IntegratorMultiDim.h>
24
25#include <string>
26using std::string;
27
28namespace genie {
29
30class XSecAlgorithmI;
31class Interaction;
32
33namespace utils {
34namespace gsl {
35
36//.....................................................................................
37//
38// genie::utils::gsl::dXSec_dQ2_E
39// A 1-D cross section function: dxsec/dQ2 = f(Q2)|(fixed E)
40//
41class dXSec_dQ2_E: public ROOT::Math::IBaseFunctionOneDim
42{
43public:
44 dXSec_dQ2_E(const XSecAlgorithmI * m, const Interaction * i, double scale=1.);
46
47 // ROOT::Math::IBaseFunctionOneDim interface
48 unsigned int NDim (void) const;
49 double DoEval (double xin) const;
50 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
51
52private:
55 double fScale; // can set to -1. for use with GSL minimizer
56};
57
58//.....................................................................................
59//
60// genie::utils::gsl::dXSec_dy_E
61// A 1-D cross section function: dxsec/dy = f(y)|(fixed E)
62//
63class dXSec_dy_E: public ROOT::Math::IBaseFunctionOneDim
64{
65public:
66 dXSec_dy_E(const XSecAlgorithmI * m, const Interaction * i);
68
69 // ROOT::Math::IBaseFunctionOneDim interface
70 unsigned int NDim (void) const;
71 double DoEval (double xin) const;
72 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
73
74private:
77};
78
79//.....................................................................................
80//
81// genie::utils::gsl::dXSec_dEDNu_E
82// A 1-D cross section function: dxsec/dEDNu = f(EDNu)|(fixed E)
83//
84class dXSec_dEDNu_E: public ROOT::Math::IBaseFunctionOneDim
85{
86public:
87 dXSec_dEDNu_E(const XSecAlgorithmI * m, const Interaction * i,
88 double DNuMass, double scale=1.);
90
91 // ROOT::Math::IBaseFunctionOneDim interface
92 unsigned int NDim (void) const;
93 double DoEval (double xin) const;
94 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
95 Range1D_t IntegrationRange(void) const;
96
97private:
100 double fDNuMass;
101 double fScale; // can set to -1. for use with GSL minimizer
102};
103
104//.....................................................................................
105//
106// genie::utils::gsl::d2XSec_dxdy_E
107// A 2-D cross section function: d2xsec/dxdy = f(x,y)|(fixed E)
108//
109class d2XSec_dxdy_E: public ROOT::Math::IBaseFunctionMultiDim
110{
111public:
112 d2XSec_dxdy_E(const XSecAlgorithmI * m, const Interaction * i);
114
115 // ROOT::Math::IBaseFunctionMultiDim interface
116 unsigned int NDim (void) const;
117 double DoEval (const double * xin) const;
118 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
119
120private:
123};
124
125//.....................................................................................
126//
127// genie::utils::gsl::d2XSec_dlog10xdlog10Q2_E
128// A 2-D cross section function: d2xsec/dlog10xdQlog102 = f(log10x,log10Q2)|(fixed E)
129//
130class d2XSec_dlog10xdlog10Q2_E: public ROOT::Math::IBaseFunctionMultiDim
131{
132public:
133 d2XSec_dlog10xdlog10Q2_E(const XSecAlgorithmI * m, const Interaction * i, double scale=1.);
135
136 // ROOT::Math::IBaseFunctionMultiDim interface
137 unsigned int NDim (void) const;
138 double DoEval (const double * xin) const;
139 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
140
141private:
144 double fScale; // can set to -1. for use with GSL minimizer
145};
146
147//.....................................................................................
148//
149// genie::utils::gsl::d2XSec_dQ2dy_E
150// A 2-D cross section function: d2xsec/dQ2dy = f(Q^2,y)|(fixed E)
151//
152class d2XSec_dQ2dy_E: public ROOT::Math::IBaseFunctionMultiDim
153{
154public:
155 d2XSec_dQ2dy_E(const XSecAlgorithmI * m, const Interaction * i);
157
158 // ROOT::Math::IBaseFunctionMultiDim interface
159 unsigned int NDim (void) const;
160 double DoEval (const double * xin) const;
161 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
162
163private:
166};
167
168//.....................................................................................
169//
170// genie::utils::gsl::d2XSec_dQ2dydt_E
171// A 3-D cross section function: d3xsec/dQ2dydt = f(Q^2,y,t)|(fixed E)
172//
173class d2XSec_dQ2dydt_E: public ROOT::Math::IBaseFunctionMultiDim
174{
175public:
176 d2XSec_dQ2dydt_E(const XSecAlgorithmI * m, const Interaction * i);
178
179 // ROOT::Math::IBaseFunctionMultiDim interface
180 unsigned int NDim (void) const;
181 double DoEval (const double * xin) const;
182 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
183
184private:
187};
188
189//.....................................................................................
190//
191// genie::utils::gsl::d3XSec_dxdydt_E
192// A 3-D cross section function: d3xsec/dxdydt = f(x,y,t)|(fixed E)
193//
194class d3XSec_dxdydt_E: public ROOT::Math::IBaseFunctionMultiDim
195{
196public:
197 d3XSec_dxdydt_E(const XSecAlgorithmI * m, const Interaction * i);
199
200 // ROOT::Math::IBaseFunctionMultiDim interface
201 unsigned int NDim (void) const;
202 double DoEval (const double * xin) const;
203 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
204
205private:
208};
209
210//.....................................................................................
211//
212// genie::utils::gsl::d2XSec_dWdQ2_E
213// A 2-D cross section function: d2xsec/dWdQ2 = f(W,Q2)|(fixed E)
214//
215class d2XSec_dWdQ2_E: public ROOT::Math::IBaseFunctionMultiDim
216{
217public:
218 d2XSec_dWdQ2_E(const XSecAlgorithmI * m, const Interaction * i);
220
221 // ROOT::Math::IBaseFunctionMultiDim interface
222 unsigned int NDim (void) const;
223 double DoEval (const double * xin) const;
224 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
225
226private:
229};
230
231//.....................................................................................
232//
233// genie::utils::gsl::d2XSec_dxdy_Ex
234// A 1-D cross section function: d2xsec/dxdy = f(y)|(fixed:E,x)
235//
236class d2XSec_dxdy_Ex: public ROOT::Math::IBaseFunctionOneDim
237{
238public:
239 d2XSec_dxdy_Ex(const XSecAlgorithmI * m, const Interaction * i, double x);
241
242 // ROOT::Math::IBaseFunctionOneDim interface
243 unsigned int NDim (void) const;
244 double DoEval (double xin) const;
245 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
246
247private:
250 double fx;
251};
252
253//.....................................................................................
254//
255// genie::utils::gsl::d2XSec_dxdy_Ey
256// A 1-D cross section function: d2xsec/dxdy = f(x)|(fixed:E,y)
257//
258class d2XSec_dxdy_Ey: public ROOT::Math::IBaseFunctionOneDim
259{
260public:
261 d2XSec_dxdy_Ey(const XSecAlgorithmI * m, const Interaction * i, double x);
263
264 // ROOT::Math::IBaseFunctionOneDim interface
265 unsigned int NDim (void) const;
266 double DoEval (double xin) const;
267 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
268
269private:
272 double fy;
273};
274
275//.....................................................................................
276//
277// genie::utils::gsl::d2XSec_dWdQ2_EW
278// A 1-D cross section function: d2xsec/dWdQ2= f(Q2)|(fixed:E,W)
279//
280class d2XSec_dWdQ2_EW: public ROOT::Math::IBaseFunctionOneDim
281{
282public:
283 d2XSec_dWdQ2_EW( const XSecAlgorithmI * m, const Interaction * i, double W);
285
286 // ROOT::Math::IBaseFunctionOneDim interface
287 unsigned int NDim (void) const;
288 double DoEval (double xin) const;
289 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
290
291private:
294 double fW;
295};
296
297//.....................................................................................
298//
299// genie::utils::gsl::d2XSec_dWdQ2_EQ2
300// A 1-D cross section function: d2xsec/dWdQ2= f(W)|(fixed:E,Q2)
301//
302class d2XSec_dWdQ2_EQ2: public ROOT::Math::IBaseFunctionOneDim
303{
304public:
305 d2XSec_dWdQ2_EQ2(const XSecAlgorithmI * m, const Interaction * i, double Q2);
307
308 // ROOT::Math::IBaseFunctionOneDim interface
309 unsigned int NDim (void) const;
310 double DoEval (double xin) const;
311 ROOT::Math::IBaseFunctionOneDim * Clone (void) const;
312
313private:
316 double fQ2;
317};
318
319//.....................................................................................
320
321//.....................................................................................
322//
323//
324//
325class d5XSecAR : public ROOT::Math::IBaseFunctionMultiDim
326{
327public:
328 d5XSecAR(const XSecAlgorithmI * m, const Interaction * i);
329 ~d5XSecAR();
330 // ROOT::Math::IBaseFunctionMultiDim interface
331 unsigned int NDim (void) const;
332 double DoEval (const double * xin) const;
333 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
334 void SetFlip(bool b) { flip = b; }
335
336private:
339 bool flip;
340};
341
342
343//.....................................................................................
344//
345// genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi
346// A 5-D cross section function (fixed E_nu)
347//
348class d5Xsec_dEldOmegaldOmegapi: public ROOT::Math::IBaseFunctionMultiDim
349{
350public:
353
354 // ROOT::Math::IBaseFunctionMultiDim interface
355 unsigned int NDim (void) const;
356 double DoEval (const double * xin) const;
357 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
358
359private:
362};
363
364///.....................................................................................
365///
366/// genie::utils::gsl::d4Xsec_dEldThetaldOmegapi
367/// A 4-D cross section function (fixed E_nu)
368/// DANIEL - for the Alvarez-Russo cross-section
369///
370class d4Xsec_dEldThetaldOmegapi: public ROOT::Math::IBaseFunctionMultiDim
371{
372public:
375
376 // ROOT::Math::IBaseFunctionMultiDim interface
377 unsigned int NDim (void) const;
378 double DoEval (const double * xin) const;
379 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
380
381 double GetFactor() const;
382 void SetFactor(double factor);
383
384private:
387 double fFactor;
388};
389///.....................................................................................
390///
391/// genie::utils::gsl::d3Xsec_dOmegaldThetapi
392/// A 3-D cross section function (fixed E_nu)
393/// Steve Dennis - for the Alvarez-Russo cross-section
394///
395class d3Xsec_dOmegaldThetapi: public ROOT::Math::IBaseFunctionMultiDim
396{
397public:
400
401 // ROOT::Math::IBaseFunctionMultiDim interface
402 unsigned int NDim (void) const;
403 double DoEval (const double * xin) const;
404 d3Xsec_dOmegaldThetapi * Clone (void) const;
405
406 // Specific to this class
407 void SetE_lep (double E_lepton) const;
408 // Yes, it's a const setter
409 // Needed because DoEval must be const, but dXSec_dElep_AR::DoEval() must call this
410
411private:
414 mutable double fElep;
415};
416///.....................................................................................
417///
418/// genie::utils::gsl::dXSec_dElep_AR
419/// A 1-D cross section function: dxsec/dElep
420/// Used for Alvarez-Ruso coherent.
421///
422class dXSec_dElep_AR: public ROOT::Math::IBaseFunctionOneDim
423{
424public:
425 dXSec_dElep_AR(const XSecAlgorithmI * m, const Interaction * i,
426 string gsl_nd_integrator_type, double gsl_relative_tolerance,
427 unsigned int max_n_calls);
430
431 // ROOT::Math::IBaseFunctionOneDim interface
432 dXSec_dElep_AR * Clone (void) const;
433 double DoEval (double xin) const;
434
435private:
438
440
441 mutable ROOT::Math::IntegratorMultiDim integrator;
442
443 double kine_min[3];
444 double kine_max[3];
445
448 unsigned int fGSLMaxCalls;
449};
450
451///.....................................................................................
452///
453/// dXSec_Log_Wrapper
454/// Redistributes variables over a range to a e^-x distribution.
455/// Allows the integrator to use a logarithmic series of points while calling uniformly.
456class dXSec_Log_Wrapper: public ROOT::Math::IBaseFunctionMultiDim
457{
458 public:
459 dXSec_Log_Wrapper(const ROOT::Math::IBaseFunctionMultiDim * fn,
460 bool * ifLog, double * min, double * maxes);
462
463 // ROOT::Math::IBaseFunctionMultiDim interface
464 unsigned int NDim (void) const;
465 double DoEval (const double * xin) const;
466 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
467
468 private:
469 const ROOT::Math::IBaseFunctionMultiDim * fFn;
470 bool * fIfLog;
471 double * fMins;
472 double * fMaxes;
473};
474
475//.....................................................................................
476//
477// genie::utils::gsl::d2Xsec_dn1dn2_E
478// A 2-D cross section function: d2xsec/dn1dn2 = f(n1,n2)|(fixed E)
479//
480class d2Xsec_dn1dn2_E: public ROOT::Math::IBaseFunctionMultiDim
481{
482 public:
483 d2Xsec_dn1dn2_E(const XSecAlgorithmI * m, const Interaction * i, double scale=1. );
485 // ROOT::Math::IBaseFunctionMultiDim interface
486 unsigned int NDim (void) const;
487 double DoEval (const double * xin) const;
488 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
489 private:
492 double fScale; // can set to -1. for use with GSL minimizer
493};
494
495//.....................................................................................
496//
497// genie::utils::gsl::d2Xsec_dn1dn2dn3_E
498// A 3-D cross section function: d2xsec/dn1dn2dn3 = f(n1,n2,n3)|(fixed E)
499//
500class d2Xsec_dn1dn2dn3_E: public ROOT::Math::IBaseFunctionMultiDim
501{
502 public:
503 d2Xsec_dn1dn2dn3_E(const XSecAlgorithmI * m, const Interaction * i, double scale=1. );
505 // ROOT::Math::IBaseFunctionMultiDim interface
506 unsigned int NDim (void) const;
507 double DoEval (const double * xin) const;
508 ROOT::Math::IBaseFunctionMultiDim * Clone (void) const;
509 private:
512 double fScale; // can set to -1. for use with GSL minimizer
513};
514
515
516} // gsl namespace
517} // utils namespace
518} // genie namespace
519
520#endif
Summary information for an interaction.
Definition Interaction.h:56
A simple [min,max] interval for doubles.
Definition Range1.h:43
Cross Section Calculation Interface.
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
d2XSec_dQ2dy_E(const XSecAlgorithmI *m, const Interaction *i)
const Interaction * fInteraction
unsigned int NDim(void) const
double DoEval(const double *xin) const
const XSecAlgorithmI * fModel
double DoEval(const double *xin) const
unsigned int NDim(void) const
d2XSec_dQ2dydt_E(const XSecAlgorithmI *m, const Interaction *i)
const XSecAlgorithmI * fModel
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
unsigned int NDim(void) const
d2XSec_dWdQ2_EQ2(const XSecAlgorithmI *m, const Interaction *i, double Q2)
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
double DoEval(double xin) const
const XSecAlgorithmI * fModel
double DoEval(double xin) const
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
d2XSec_dWdQ2_EW(const XSecAlgorithmI *m, const Interaction *i, double W)
const XSecAlgorithmI * fModel
unsigned int NDim(void) const
const XSecAlgorithmI * fModel
const Interaction * fInteraction
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
double DoEval(const double *xin) const
unsigned int NDim(void) const
d2XSec_dWdQ2_E(const XSecAlgorithmI *m, const Interaction *i)
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
double DoEval(const double *xin) const
d2XSec_dlog10xdlog10Q2_E(const XSecAlgorithmI *m, const Interaction *i, double scale=1.)
d2XSec_dxdy_E(const XSecAlgorithmI *m, const Interaction *i)
const Interaction * fInteraction
double DoEval(const double *xin) const
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
unsigned int NDim(void) const
const XSecAlgorithmI * fModel
unsigned int NDim(void) const
double DoEval(double xin) const
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
const Interaction * fInteraction
const XSecAlgorithmI * fModel
d2XSec_dxdy_Ex(const XSecAlgorithmI *m, const Interaction *i, double x)
unsigned int NDim(void) const
const Interaction * fInteraction
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
const XSecAlgorithmI * fModel
double DoEval(double xin) const
d2XSec_dxdy_Ey(const XSecAlgorithmI *m, const Interaction *i, double x)
double DoEval(const double *xin) const
d2Xsec_dn1dn2_E(const XSecAlgorithmI *m, const Interaction *i, double scale=1.)
unsigned int NDim(void) const
const XSecAlgorithmI * fModel
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
double DoEval(const double *xin) const
d2Xsec_dn1dn2dn3_E(const XSecAlgorithmI *m, const Interaction *i, double scale=1.)
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
unsigned int NDim(void) const
double DoEval(const double *xin) const
const XSecAlgorithmI * fModel
d3XSec_dxdydt_E(const XSecAlgorithmI *m, const Interaction *i)
double DoEval(const double *xin) const
d3Xsec_dOmegaldThetapi(const XSecAlgorithmI *m, const Interaction *i)
void SetE_lep(double E_lepton) const
d3Xsec_dOmegaldThetapi * Clone(void) const
double DoEval(const double *xin) const
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
d4Xsec_dEldThetaldOmegapi(const XSecAlgorithmI *m, const Interaction *i)
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
double DoEval(const double *xin) const
const Interaction * fInteraction
d5XSecAR(const XSecAlgorithmI *m, const Interaction *i)
unsigned int NDim(void) const
const XSecAlgorithmI * fModel
double DoEval(const double *xin) const
d5Xsec_dEldOmegaldOmegapi(const XSecAlgorithmI *m, const Interaction *i)
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
const ROOT::Math::IBaseFunctionMultiDim * fFn
dXSec_Log_Wrapper(const ROOT::Math::IBaseFunctionMultiDim *fn, bool *ifLog, double *min, double *maxes)
double DoEval(const double *xin) const
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
Range1D_t IntegrationRange(void) const
const Interaction * fInteraction
Definition GSLXSecFunc.h:99
const XSecAlgorithmI * fModel
Definition GSLXSecFunc.h:98
dXSec_dEDNu_E(const XSecAlgorithmI *m, const Interaction *i, double DNuMass, double scale=1.)
double DoEval(double xin) const
unsigned int NDim(void) const
const genie::utils::gsl::d3Xsec_dOmegaldThetapi * func
dXSec_dElep_AR * Clone(void) const
const XSecAlgorithmI * fModel
double DoEval(double xin) const
const Interaction * fInteraction
dXSec_dElep_AR(const XSecAlgorithmI *m, const Interaction *i, string gsl_nd_integrator_type, double gsl_relative_tolerance, unsigned int max_n_calls)
ROOT::Math::IntegratorMultiDim integrator
dXSec_dQ2_E(const XSecAlgorithmI *m, const Interaction *i, double scale=1.)
double DoEval(double xin) const
const Interaction * fInteraction
Definition GSLXSecFunc.h:54
unsigned int NDim(void) const
const XSecAlgorithmI * fModel
Definition GSLXSecFunc.h:53
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
dXSec_dy_E(const XSecAlgorithmI *m, const Interaction *i)
const Interaction * fInteraction
Definition GSLXSecFunc.h:76
const XSecAlgorithmI * fModel
Definition GSLXSecFunc.h:75
ROOT::Math::IBaseFunctionOneDim * Clone(void) const
double DoEval(double xin) const
unsigned int NDim(void) const
Simple utilities for integrating GSL in the GENIE framework.
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25