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