Commit e8197f54 authored by Oskar Grocholski's avatar Oskar Grocholski
Browse files

Implementation of TCS with transversally polarized target

parent 248c6068
......@@ -11,7 +11,6 @@
#include <string>
#include "../../../utils/type/PhysicalType.h"
#include "../../../../../include/partons/FundamentalPhysicalConstants.h"
#include "TCSProcessBDP01.h"
namespace PARTONS {
......@@ -53,6 +52,8 @@ protected:
*/
TCSProcessBDPGW19(const TCSProcessBDPGW19& other);
void isModuleWellConfigured();
virtual PhysicalType<double> CrossSectionBH();
virtual PhysicalType<double> CrossSectionVCS();
virtual PhysicalType<double> CrossSectionInterf();
......
#include "../../../../../include/partons/modules/process/TCS/TCSProcessBDPGW19.h"
#include <ElementaryUtils/logger/CustomException.h>
#include <ElementaryUtils/string_utils/Formatter.h>
#include <cmath>
#include <complex>
#include "../../../../../include/partons/beans/gpd/GPDType.h"
#include "../../../../../include/partons/BaseObjectRegistry.h"
#include "../../../../../include/partons/FundamentalPhysicalConstants.h"
#include "../../../../../include/partons/utils/type/PhysicalUnit.h"
namespace PARTONS {
......@@ -24,22 +31,70 @@ TCSProcessBDPGW19* TCSProcessBDPGW19::clone() const {
return new TCSProcessBDPGW19(*this);
}
void TCSProcessBDPGW19::isModuleWellConfigured() {
isModuleWellConfigured();
if (m_t != m_tmin) {
ElemUtils::Formatter formatter;
formatter << "Input value of t = " << m_t << " different than t_min = "
<< m_tmin;
warn(__func__, formatter.str());
}
}
PhysicalType<double> TCSProcessBDPGW19::CrossSectionBH() {
return TCSProcessBDP01::CrossSectionBH() / PhysicalType<double>(2. * Constant::PI, PhysicalUnit::GEVm2);
return TCSProcessBDP01::CrossSectionBH();
}
PhysicalType<double> TCSProcessBDPGW19::CrossSectionVCS() {
return TCSProcessBDP01::CrossSectionVCS() / PhysicalType<double>(2. * Constant::PI, PhysicalUnit::GEVm2);
return TCSProcessBDP01::CrossSectionVCS();
}
PhysicalType<double> TCSProcessBDPGW19::CrossSectionInterf() {
/*
* Polarisaton - dependent part in the limit DeltaT -> 0
* All formulae are in my notes "TCS with transversely polarised target"
* All formulae are in my notes "TCS with transversally polarised target"
*/
double psi = 0.; /// polarisation angle, temporarily set by hand
double sin_psi_minus_phi = 0.;
/// Polarization vector's length squared
double r2 = m_targetPolarization.getX() * m_targetPolarization.getX()
+ m_targetPolarization.getY() * m_targetPolarization.getY()
+ m_targetPolarization.getZ() * m_targetPolarization.getZ();
if (r2 != 0. && r2 != 1.) {
throw ElemUtils::CustomException(getClassName(), __func__,
ElemUtils::Formatter()
<< "Polarization vector length can be 0 or 1!");
}
if (r2 == 0. || fabs(m_targetPolarization.getZ()) == 1.) {
return TCSProcessBDP01::CrossSectionInterf();
}
/// Possible polarizations
else if (m_targetPolarization.getX() == 1.) {
sin_psi_minus_phi = -sin(m_phi);
} else if (m_targetPolarization.getX() == -1.) {
sin_psi_minus_phi = sin(m_phi);
} else if (m_targetPolarization.getY() == 1.) {
sin_psi_minus_phi = cos(m_phi);
} else if (m_targetPolarization.getY() == -1.) {
sin_psi_minus_phi = -cos(m_phi);
} else {
throw ElemUtils::CustomException(getClassName(), __func__,
ElemUtils::Formatter()
<< "Polarization can be either in x or y direction!");
}
if (m_beamPolarization != 0.) {
warn(__func__,
ElemUtils::Formatter()
<< "This module does not include beam polarization!");
}
double Mp2 = Constant::PROTON_MASS * Constant::PROTON_MASS;
double alpha3 = Constant::FINE_STRUCTURE_CONSTANT
......@@ -61,20 +116,29 @@ PhysicalType<double> TCSProcessBDPGW19::CrossSectionInterf() {
double b = m_Q2Prim * (s - Mp2 - m_Q2Prim) + m_t * (s + m_Q2Prim - Mp2);
b *= cos(m_theta) / r;
double A = 2. * (m_Q2Prim * sin(m_theta) * sin(m_theta) + (m_t - 3. * m_Q2Prim) / 2.) * (m_t - m_Q2Prim) - b * b;
double A = 2.
* (m_Q2Prim * sin(m_theta) * sin(m_theta)
+ (m_t - 3. * m_Q2Prim) / 2.) * (m_t - m_Q2Prim) - b * b;
A *= 4. / ((m_Q2Prim - m_t) * (m_Q2Prim - m_t) - b * b); /// A defined in eq. 20
double B = (m_t - b + m_Q2Prim) / (m_t - b - m_Q2Prim) + (m_t + b + m_Q2Prim) / (m_t + b - m_Q2Prim);
double B = (m_t - b + m_Q2Prim) / (m_t - b - m_Q2Prim)
+ (m_t + b + m_Q2Prim) / (m_t + b - m_Q2Prim);
B *= 2. * etha; /// B defined after eq. 26
double DiffCrossSpin = (4. * etha - 2. * etha * etha * etha) / (1. - etha * etha) * E.imag() + 2. * etha * H.imag();
double DiffCrossSpin = (4. * etha - 2. * etha * etha * etha)
/ (1. - etha * etha) * E.imag() + 2. * etha * H.imag();
DiffCrossSpin *= Constant::PROTON_MASS * A;
DiffCrossSpin += B * (2. * Constant::PROTON_MASS * Ht.real() + m_t * Et.real() / 2. / Constant::PROTON_MASS);
DiffCrossSpin *= 2.7928 / (1. - m_t / 0.71) / (1. - m_t / 0.71) * sqrt(m_Q2Prim) * sin(m_theta); /// (F_1 + F_2) Q' sin(theta)
DiffCrossSpin *= alpha3 / (32. * Constant::PI * Constant::PI) / (s * s * m_t * m_Q2Prim);
DiffCrossSpin *= sin(psi - m_phi);
return TCSProcessBDP01::CrossSectionInterf() / PhysicalType<double>(2. * Constant::PI, PhysicalUnit::GEVm2)
DiffCrossSpin += B
* (2. * Constant::PROTON_MASS * Ht.real()
+ m_t * Et.real() / 2. / Constant::PROTON_MASS);
DiffCrossSpin *= 2.7928 / (1. - m_t / 0.71) / (1. - m_t / 0.71)
* sqrt(m_Q2Prim) * sin(m_theta); /// (F_1 + F_2) Q' sin(theta)
DiffCrossSpin *= alpha3 / (32. * Constant::PI * Constant::PI)
/ (s * s * m_t * m_Q2Prim);
DiffCrossSpin *= sin(m_theta); /// additional sin(theta), because here the cross section is over d(theta), not d(cos(theta))
DiffCrossSpin *= sin_psi_minus_phi;
return TCSProcessBDP01::CrossSectionInterf()
+ PhysicalType<double>(DiffCrossSpin, PhysicalUnit::GEVm2);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment