File indexing completed on 2026-06-02 08:51:48
0001 #ifndef DVCS_PROCESS_MODULE_H
0002 #define DVCS_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/DVCS/DVCSConvolCoeffFunctionKinematic.h"
0019 #include "../../../beans/convol_coeff_function/DVCS/DVCSConvolCoeffFunctionResult.h"
0020 #include "../../../beans/gpd/GPDType.h"
0021 #include "../../../beans/List.h"
0022 #include "../../../beans/observable/DVCS/DVCSObservableKinematic.h"
0023 #include "../../../beans/observable/DVCS/DVCSObservableResult.h"
0024 #include "../../../beans/process/VCSSubProcessType.h"
0025 #include "../../../utils/type/PhysicalType.h"
0026 #include "../ProcessModule.h"
0027
0028 namespace PARTONS {
0029 class DVCSConvolCoeffFunctionModule;
0030 class DVCSScalesModule;
0031 class DVCSXiConverterModule;
0032 }
0033
0034 namespace PARTONS {
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 class DVCSProcessModule: public ProcessModule<DVCSObservableKinematic,
0045 DVCSObservableResult> {
0046
0047 public:
0048
0049 static const std::string DVCS_PROCESS_MODULE_CLASS_NAME;
0050
0051
0052
0053
0054 virtual ~DVCSProcessModule();
0055
0056 virtual DVCSProcessModule* 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 DVCSObservableResult compute(double beamHelicity, double beamCharge,
0064 NumA::Vector3D targetPolarization,
0065 const DVCSObservableKinematic& 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 DVCSObservableResult compute(double beamHelicity, double beamCharge,
0080 NumA::Vector3D targetPolarization,
0081 const DVCSObservableKinematic& 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 DVCSConvolCoeffFunctionKinematic& kinematic) const;
0094
0095
0096
0097
0098
0099
0100 DVCSScalesModule* getScaleModule() const;
0101
0102
0103
0104
0105 void setScaleModule(DVCSScalesModule* pScaleModule);
0106
0107
0108
0109
0110 DVCSXiConverterModule* getXiConverterModule() const;
0111
0112
0113
0114
0115 void setXiConverterModule(DVCSXiConverterModule* pXiConverterModule);
0116
0117
0118
0119
0120 DVCSConvolCoeffFunctionModule* getConvolCoeffFunctionModule() const;
0121
0122
0123
0124
0125 void setConvolCoeffFunctionModule(
0126 DVCSConvolCoeffFunctionModule* 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
0146
0147
0148 void setConvolCoeffFunction(const DVCSConvolCoeffFunctionKinematic& kin,
0149 const DVCSConvolCoeffFunctionResult& result);
0150
0151 protected:
0152
0153
0154
0155
0156 DVCSProcessModule(const std::string &className);
0157
0158
0159
0160
0161
0162 DVCSProcessModule(const DVCSProcessModule& other);
0163
0164 virtual void setKinematics(const DVCSObservableKinematic& kinematic);
0165 virtual void setExperimentalConditions(double beamHelicity,
0166 double beamCharge, NumA::Vector3D targetPolarization);
0167 virtual void initModule();
0168 virtual void isModuleWellConfigured();
0169
0170 double m_xB;
0171 double m_t;
0172 double m_Q2;
0173 double m_E;
0174 double m_phi;
0175
0176 double m_beamHelicity;
0177 double m_beamCharge;
0178 NumA::Vector3D m_targetPolarization;
0179
0180 double m_tmin;
0181 double m_tmax;
0182 double m_xBmin;
0183 double m_y;
0184 double m_epsilon;
0185
0186 DVCSScalesModule* m_pScaleModule;
0187 DVCSXiConverterModule* m_pXiConverterModule;
0188 DVCSConvolCoeffFunctionModule* m_pConvolCoeffFunctionModule;
0189
0190 DVCSConvolCoeffFunctionResult m_dvcsConvolCoeffFunctionResult;
0191 DVCSConvolCoeffFunctionKinematic m_lastCCFKinematics;
0192
0193
0194
0195
0196
0197
0198 void computeConvolCoeffFunction(const DVCSObservableKinematic& kinematic,
0199 const List<GPDType> & gpdType = List<GPDType>());
0200
0201
0202
0203
0204
0205
0206 std::complex<double> getConvolCoeffFunctionValue(GPDType::Type gpdType);
0207 };
0208
0209 }
0210
0211 #endif