File indexing completed on 2026-06-02 08:51:48
0001 #ifndef DVMP_PROCESS_MODULE_H
0002 #define DVMP_PROCESS_MODULE_H
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include <ElementaryUtils/parameters/Parameters.h>
0012 #include <NumA/linear_algebra/vector/Vector3D.h>
0013 #include <complex>
0014 #include <map>
0015 #include <string>
0016
0017 #include "../../../beans/automation/BaseObjectData.h"
0018 #include "../../../beans/convol_coeff_function/DVMP/DVMPConvolCoeffFunctionKinematic.h"
0019 #include "../../../beans/convol_coeff_function/DVMP/DVMPConvolCoeffFunctionResult.h"
0020 #include "../../../beans/gpd/GPDType.h"
0021 #include "../../../beans/List.h"
0022 #include "../../../beans/PolarizationType.h"
0023 #include "../../../beans/MesonType.h"
0024 #include "../../../beans/observable/DVMP/DVMPObservableKinematic.h"
0025 #include "../../../beans/observable/DVMP/DVMPObservableResult.h"
0026 #include "../../../utils/type/PhysicalType.h"
0027 #include "../ProcessModule.h"
0028
0029 namespace PARTONS {
0030 class DVMPConvolCoeffFunctionModule;
0031 class DVMPScalesModule;
0032 class DVMPXiConverterModule;
0033 }
0034
0035 namespace PARTONS {
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 class DVMPProcessModule: public ProcessModule<DVMPObservableKinematic,
0046 DVMPObservableResult> {
0047
0048 public:
0049
0050 static const std::string DVMP_PROCESS_MODULE_CLASS_NAME;
0051
0052
0053
0054
0055 virtual ~DVMPProcessModule();
0056
0057 virtual DVMPProcessModule* clone() const = 0;
0058 virtual std::string toString() const;
0059 virtual void resolveObjectDependencies();
0060 virtual void run();
0061 virtual void configure(const ElemUtils::Parameters ¶meters);
0062 virtual void prepareSubModules(
0063 const std::map<std::string, BaseObjectData>& subModulesData);
0064 virtual List<GPDType> getListOfAvailableGPDTypeForComputation() const;
0065 virtual std::vector<double> test();
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078 DVMPObservableResult compute(double beamHelicity, double beamCharge,
0079 NumA::Vector3D targetPolarization,
0080 PolarizationType::Type mesonPolarization,
0081 const DVMPObservableKinematic& kinematic,
0082 const List<GPDType>& gpdType);
0083
0084
0085
0086
0087 virtual void resetPreviousKinematic();
0088
0089
0090
0091
0092 bool isPreviousCCFKinematicDifferent(
0093 const DVMPConvolCoeffFunctionKinematic& kinematic) const;
0094
0095
0096
0097
0098
0099
0100 DVMPScalesModule* getScaleModule() const;
0101
0102
0103
0104
0105 void setScaleModule(DVMPScalesModule* pScaleModule);
0106
0107
0108
0109
0110 DVMPXiConverterModule* getXiConverterModule() const;
0111
0112
0113
0114
0115 void setXiConverterModule(DVMPXiConverterModule* pXiConverterModule);
0116
0117
0118
0119
0120 DVMPConvolCoeffFunctionModule* getConvolCoeffFunctionModule() const;
0121
0122
0123
0124
0125 void setConvolCoeffFunctionModule(
0126 DVMPConvolCoeffFunctionModule* pConvolCoeffFunctionModule);
0127
0128
0129
0130
0131
0132
0133 virtual PhysicalType<double> CrossSection();
0134
0135
0136
0137
0138 void setConvolCoeffFunction(const DVMPConvolCoeffFunctionKinematic& kin,
0139 const DVMPConvolCoeffFunctionResult& result);
0140
0141 protected:
0142
0143
0144
0145
0146 DVMPProcessModule(const std::string &className);
0147
0148
0149
0150
0151
0152 DVMPProcessModule(const DVMPProcessModule& other);
0153
0154 virtual void setKinematics(const DVMPObservableKinematic& kinematic);
0155 virtual void setExperimentalConditions(double beamHelicity,
0156 double beamCharge, NumA::Vector3D targetPolarization,
0157 PolarizationType::Type mesonPolarization);
0158 virtual void initModule();
0159 virtual void isModuleWellConfigured();
0160
0161 double m_xB;
0162 double m_t;
0163 double m_Q2;
0164 double m_E;
0165 double m_phi;
0166 MesonType::Type m_mesonType;
0167
0168 double m_beamHelicity;
0169 double m_beamCharge;
0170 NumA::Vector3D m_targetPolarization;
0171 PolarizationType::Type m_mesonPolarization;
0172
0173 double m_tmin;
0174 double m_tmax;
0175 double m_xBmin;
0176 double m_y;
0177
0178 DVMPScalesModule* m_pScaleModule;
0179 DVMPXiConverterModule* m_pXiConverterModule;
0180 DVMPConvolCoeffFunctionModule* m_pConvolCoeffFunctionModule;
0181
0182 DVMPConvolCoeffFunctionResult m_dvcsConvolCoeffFunctionResult;
0183 DVMPConvolCoeffFunctionKinematic m_lastCCFKinematics;
0184
0185
0186
0187
0188
0189
0190
0191 void computeConvolCoeffFunction(const DVMPObservableKinematic& kinematic,
0192 PolarizationType::Type mesonPolarization,
0193 const List<GPDType> & gpdType = List<GPDType>());
0194
0195
0196
0197
0198
0199
0200 std::complex<double> getConvolCoeffFunctionValue(GPDType::Type gpdType);
0201 };
0202
0203 }
0204
0205 #endif