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