File indexing completed on 2026-06-02 08:51:45
0001 #ifndef DDVCSCROSSSECTIONTOTAL_H
0002 #define DDVCSCROSSSECTIONTOTAL_H
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <gsl/gsl_rng.h>
0013 #include <stddef.h>
0014 #include <string>
0015 #include <utility>
0016
0017 #include "../../../../beans/gpd/GPDType.h"
0018 #include "../../../../beans/List.h"
0019 #include "../../../../utils/type/PhysicalType.h"
0020 #include "DDVCSCrossSectionUUMinus.h"
0021
0022 namespace PARTONS {
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 class DDVCSCrossSectionTotal: public DDVCSCrossSectionUUMinus {
0033
0034 public:
0035
0036 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEXb;
0037 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGET;
0038 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEQ2;
0039 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEQ2PRIM;
0040 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEPHI;
0041 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEPHIL;
0042 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGETHETAL;
0043
0044 static const std::string DDVCS_CROSSSECTION_TOTAL_RANGEY;
0045
0046 static const std::string DDVCS_CROSSSECTION_TOTAL_N0;
0047 static const std::string DDVCS_CROSSSECTION_TOTAL_N1;
0048
0049
0050
0051
0052 static const unsigned int classId;
0053
0054
0055
0056
0057 static double DDVCSCrossSectionTotalFunction(double* kin, size_t dim,
0058 void* par);
0059
0060
0061
0062
0063 static double DDVCSCrossSectionTotalFunctionAngle(double* kin, size_t dim,
0064 void* par);
0065
0066
0067
0068
0069
0070 DDVCSCrossSectionTotal(const std::string &className);
0071
0072
0073
0074
0075 virtual ~DDVCSCrossSectionTotal();
0076
0077 virtual DDVCSCrossSectionTotal* clone() const;
0078 virtual void configure(const ElemUtils::Parameters ¶meters);
0079
0080 size_t getNI0() const;
0081 void setNI0(size_t nI0);
0082 size_t getNI1() const;
0083 void setNI1(size_t nI1);
0084
0085 const std::pair<double, double>& getRangexB() const;
0086 void setRangexB(const std::pair<double, double>& rangexB);
0087 const std::pair<double, double>& getRangeT() const;
0088 void setRangeT(const std::pair<double, double>& rangeT);
0089 const std::pair<double, double>& getRangeQ2() const;
0090 void setRangeQ2(const std::pair<double, double>& rangeQ2);
0091 const std::pair<double, double>& getRangeQ2Prim() const;
0092 void setRangeQ2Prim(const std::pair<double, double>& rangeQ2Prim);
0093
0094 const std::pair<double, double>& getRangePhi() const;
0095 void setRangePhi(const std::pair<double, double>& rangePhi);
0096 const std::pair<double, double>& getRangePhiL() const;
0097 void setRangePhiL(const std::pair<double, double>& rangePhiL);
0098 const std::pair<double, double>& getRangeThetaL() const;
0099 void setRangeThetaL(const std::pair<double, double>& rangeThetaL);
0100
0101 const std::pair<double, double>& getRangeY() const;
0102 void setRangeY(const std::pair<double, double>& rangeY);
0103
0104 protected:
0105
0106
0107
0108
0109
0110 DDVCSCrossSectionTotal(const DDVCSCrossSectionTotal &other);
0111
0112 virtual PhysicalType<double> computeObservable(
0113 const DDVCSObservableKinematic& kinematic,
0114 const List<GPDType>& gpdType);
0115
0116 private:
0117
0118
0119
0120
0121 void printChangeOfRange(const std::string& func, const std::string& name,
0122 const std::pair<double, double>& oldValues,
0123 const std::pair<double, double>& newValues) const;
0124
0125
0126
0127
0128 std::pair<double, double> parseRange(const std::string& str) const;
0129
0130 size_t m_nI0;
0131 size_t m_nI1;
0132
0133 std::pair<double, double> m_rangexB;
0134 std::pair<double, double> m_rangeT;
0135 std::pair<double, double> m_rangeQ2;
0136 std::pair<double, double> m_rangeQ2Prim;
0137
0138 std::pair<double, double> m_rangePhi;
0139 std::pair<double, double> m_rangePhiL;
0140 std::pair<double, double> m_rangeThetaL;
0141
0142 std::pair<double, double> m_rangeY;
0143 };
0144
0145 struct DDVCSCrossSectionTotalParameters {
0146
0147 DDVCSCrossSectionTotal* m_pDDVCSCrossSectionTotal;
0148 gsl_rng* m_r;
0149 double m_y, m_t, m_Q2, m_Q2Prim;
0150 double m_E;
0151 List<GPDType> m_gpdType;
0152 std::pair<double, double> m_xBCut;
0153 };
0154
0155 }
0156
0157 #endif