GENIEGenerator
Loading...
Searching...
No Matches
KineUtils.h
Go to the documentation of this file.
1//____________________________________________________________________________
2/*!
3
4\namespace genie::utils::kinematics
5
6\brief Kinematical utilities
7
8\author Costas Andreopoulos <c.andreopoulos \at cern.ch>
9 University of Liverpool
10
11 Changes required to implement the GENIE Boosted Dark Matter module
12 were installed by Josh Berger (Univ. of Wisconsin)
13
14\created November 26, 2004
15
16\cpright Copyright (c) 2003-2025, The GENIE Collaboration
17 For the full text of the license visit http://copyright.genie-mc.org
18*/
19//____________________________________________________________________________
20
21#ifndef _KINE_UTILS_H_
22#define _KINE_UTILS_H_
23
29
30namespace genie {
31namespace utils {
32
33namespace kinematics
34{
35 //-- methods used for computing phase space volumes
36 double PhaseSpaceVolume (const Interaction * const i, KinePhaseSpace_t ps);
37
38 //-- methods used for computing the Jacobians associated with phase space transformations
39 double Jacobian (const Interaction * const i, KinePhaseSpace_t f, KinePhaseSpace_t t);
41 KinePhaseSpace_t a, KinePhaseSpace_t b, bool & fwd);
42
43 //-- kinematical limits
44 Range1D_t InelWLim (double Ev, double M, double ml);
45 Range1D_t InelQ2Lim_W (double Ev, double M, double ml, double W, double Q2min_cut = controls::kMinQ2Limit);
46 Range1D_t Inelq2Lim_W (double Ev, double M, double ml, double W, double q2min_cut = -1*controls::kMinQ2Limit);
47 Range1D_t InelQ2Lim (double Ev, double M, double ml, double Q2min_cut = controls::kMinQ2Limit);
48 Range1D_t Inelq2Lim (double Ev, double M, double ml, double q2min_cut = -1*controls::kMinQ2Limit);
49 Range1D_t InelXLim (double Ev, double M, double ml);
50 Range1D_t InelYLim (double Ev, double M, double ml);
51 Range1D_t InelYLim_X (double Ev, double M, double ml, double x);
52 Range1D_t CohW2Lim (double Mn, double m_produced, double mlep, double Ev, double Q2);
53 Range1D_t CohNuLim (double W2min, double W2max, double Q2, double Mn, double xsi);
54 Range1D_t CohYLim (double Mn, double m_produced, double mlep, double Ev, double Q2, double xsi);
55 Range1D_t CohYLim (double EvL, double ml);
56 Range1D_t CohXLim (void);
57 Range1D_t CohQ2Lim (double Mn, double m_produced, double mlep, double Ev);
58 Range1D_t Cohq2Lim (double Mn, double m_produced, double mlep, double Ev);
59 Range1D_t CEvNSQ2Lim (double Ev);
60 Range1D_t DarkWLim (double Ev, double M, double ml);
61 Range1D_t DarkQ2Lim_W (double Ev, double M, double ml, double W, double Q2min_cut = controls::kMinQ2Limit);
62 Range1D_t Darkq2Lim_W (double Ev, double M, double ml, double W, double q2min_cut = -1*controls::kMinQ2Limit);
63 Range1D_t DarkQ2Lim (double Ev, double M, double ml, double Q2min_cut = controls::kMinQ2Limit);
64 Range1D_t Darkq2Lim (double Ev, double M, double ml, double q2min_cut = -1*controls::kMinQ2Limit);
65 Range1D_t DarkXLim (double Ev, double M, double ml);
66 Range1D_t DarkYLim (double Ev, double M, double ml);
67 Range1D_t DarkYLim_X (double Ev, double M, double ml, double x);
68
69 //-- helpers for kinematic limits
70 double CohW2Min(double Mn, double m_produced);
71
72 //-- kinematical variable transforms
73 double QD2toQ2 (double QD2);
74 double Q2toQD2 (double Q2);
75 void WQ2toXY (double Ev, double M, double W, double Q2, double & x, double & y);
76 void XYtoWQ2 (double Ev, double M, double & W, double & Q2, double x, double y);
77 void XQ2toWY (double Ev, double M, double & W, double Q2, double x, double & y);
78 double XYtoW (double Ev, double M, double x, double y);
79 double XYtoQ2 (double Ev, double M, double x, double y);
80 double Q2YtoX (double Ev, double M, double Q2, double y);
81
82 void UpdateWQ2FromXY(const Interaction * in);
83 void UpdateXYFromWQ2(const Interaction * in);
84 void UpdateWYFromXQ2(const Interaction * in);
85 void UpdateXFromQ2Y(const Interaction * in);
86
87 //-- methods used to apply cuts to kinematical limits
88 void ApplyCutsToKineLimits (Range1D_t & r, double min, double max);
89
90 double Q2 (const Interaction * const i);
91 double W (const Interaction * const i);
92
93 //-- charm threshold and slow rescaling variable
94 bool IsAboveCharmThreshold (double x, double Q2, double M, double mc);
95 double SlowRescalingVar (double x, double Q2, double M, double mc);
96
97 //-- Functions used to define differential cross section distribution envelopes
98 //-- for importance sampling in kinematical selection modules
99 double RESImportanceSamplingEnvelope(double * x, double * par);
100 double DISImportanceSamplingEnvelope(double * x, double * par);
101 double COHImportanceSamplingEnvelope(double * x, double * par);
102
104 {
105 Range1D_t InelWLim (double El, double ml, double M);
106 Range1D_t InelQ2Lim_W (double El, double ml, double M, double W);
107 Range1D_t Inelq2Lim_W (double El, double ml, double M, double W);
108 Range1D_t InelQ2Lim (double El, double ml, double M);
109 Range1D_t Inelq2Lim (double El, double ml, double M);
110 Range1D_t InelXLim (double El, double ml, double M);
111 Range1D_t InelYLim (double El, double ml, double M);
112 Range1D_t InelYLim_X (double El, double ml, double M, double x);
113
114 static const double kMinQ2Limit = 0.02; // GeV^2 // Q2 threshold relevant for em scattering events
115 }
116
117} // kinematics namespace
118} // utils namespace
119} // genie namespace
120
121#endif // _KINE_UTILS_H_
Summary information for an interaction.
Definition Interaction.h:56
A simple [min,max] interval for doubles.
Definition Range1.h:43
const double a
static const double kMinQ2Limit
Definition Controls.h:41
Range1D_t InelXLim(double El, double ml, double M)
Range1D_t InelWLim(double El, double ml, double M)
Range1D_t Inelq2Lim(double El, double ml, double M)
Range1D_t Inelq2Lim_W(double El, double ml, double M, double W)
Range1D_t InelQ2Lim_W(double El, double ml, double M, double W)
Range1D_t InelYLim(double El, double ml, double M)
Range1D_t InelQ2Lim(double El, double ml, double M)
Range1D_t InelYLim_X(double El, double ml, double M, double x)
Kinematical utilities.
Range1D_t CohW2Lim(double Mn, double m_produced, double mlep, double Ev, double Q2)
double CohW2Min(double Mn, double m_produced)
Range1D_t InelQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
Range1D_t CohXLim(void)
double Q2YtoX(double Ev, double M, double Q2, double y)
void UpdateXYFromWQ2(const Interaction *in)
Range1D_t DarkWLim(double Ev, double M, double ml)
Range1D_t Cohq2Lim(double Mn, double m_produced, double mlep, double Ev)
double SlowRescalingVar(double x, double Q2, double M, double mc)
void UpdateWQ2FromXY(const Interaction *in)
double W(const Interaction *const i)
void WQ2toXY(double Ev, double M, double W, double Q2, double &x, double &y)
Range1D_t Darkq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
Range1D_t DarkQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
bool IsAboveCharmThreshold(double x, double Q2, double M, double mc)
double QD2toQ2(double QD2)
double COHImportanceSamplingEnvelope(double *x, double *par)
Range1D_t CEvNSQ2Lim(double Ev)
void XYtoWQ2(double Ev, double M, double &W, double &Q2, double x, double y)
void UpdateWYFromXQ2(const Interaction *in)
double DISImportanceSamplingEnvelope(double *x, double *par)
Range1D_t DarkYLim_X(double Ev, double M, double ml, double x)
double XYtoW(double Ev, double M, double x, double y)
Range1D_t CohYLim(double Mn, double m_produced, double mlep, double Ev, double Q2, double xsi)
Range1D_t DarkYLim(double Ev, double M, double ml)
double Q2(const Interaction *const i)
Range1D_t CohNuLim(double W2min, double W2max, double Q2, double Mn, double xsi)
Range1D_t InelWLim(double Ev, double M, double ml)
void ApplyCutsToKineLimits(Range1D_t &r, double min, double max)
Range1D_t DarkQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
bool TransformMatched(KinePhaseSpace_t ia, KinePhaseSpace_t ib, KinePhaseSpace_t a, KinePhaseSpace_t b, bool &fwd)
Range1D_t Inelq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
Range1D_t CohQ2Lim(double Mn, double m_produced, double mlep, double Ev)
Range1D_t DarkXLim(double Ev, double M, double ml)
Range1D_t Darkq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
void UpdateXFromQ2Y(const Interaction *in)
double RESImportanceSamplingEnvelope(double *x, double *par)
double PhaseSpaceVolume(const Interaction *const i, KinePhaseSpace_t ps)
Definition KineUtils.cxx:36
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Range1D_t InelYLim_X(double Ev, double M, double ml, double x)
Range1D_t InelXLim(double Ev, double M, double ml)
Range1D_t InelQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
double XYtoQ2(double Ev, double M, double x, double y)
Range1D_t Inelq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
void XQ2toWY(double Ev, double M, double &W, double Q2, double x, double &y)
double Q2toQD2(double Q2)
Range1D_t InelYLim(double Ev, double M, double ml)
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
enum genie::EKinePhaseSpace KinePhaseSpace_t