ANASEN_analysis/Armory/Kinematics.cpp
Sudarsan Balakrishnan 1e0af0fe9d Updates showing decent convergence on a(p,p) reaction, demonstrating a pcz offset of close to -5.0 mm for agreement
1) eloss calculations from pycatima folded in externally
2) stepladder correction moved into Armory
3) a(p,p) calculations live in their own function
4) first steps towards looking at one-wire dE/E signals, and one-wire anodes vs si-phi correlations
2026-04-28 17:36:02 -04:00

112 lines
3.9 KiB
C++

#include "Kinematics.h"
//#include "elastcaller.h"
//double Kinematics::getQval(double m1, double m2, double m3, double t1, double t3, double angle3)
double Kinematics::getExc(double t3, double angle3)
/*
\brief Follows convention in Marion, 2013: (1 - beam, 2- target, 3-ejectile, 4-recoil)
m1 is beam, (typically heavy nucleus)
m2 is 'd', (light target)
m3 is 'p', (light ejectile mass)
t1 is beam kinetic energy,
\param t3 lab-kinetic-energy in MeV
\param angle3 lab-angle in deg of detected proton (if d,p) or other charged particle
\return Excitation energy of the heavy-recoil nucleus in MeV
*/
{
double m1 = m_A;
double m2 = m_d;
double m3 = m_p;
double m4 = m_B;
double t1 = E_beam;
//t1 = slowitdown("75Ga",t1,"1(12C)2(2H)",1.2);
m1 *= u_MeV;
m2 *= u_MeV;
m3 *= u_MeV;
m4 *= u_MeV;
double e1 = m1 + t1;
double e3 = m3 + t3;
ET = t1 + m1 + m2;
double p1 = TMath::Sqrt(t1*t1 + 2*m1*t1);
double p3 = TMath::Sqrt(t3*t3 + 2*m3*t3);
double cosTheta = TMath::Cos(angle3*TMath::Pi()/180.);
// return m1+m2-m3-TMath::Sqrt(m1*m1 + m2*m2 + m3*m3 + 2.*m2*e1 - 2.*e3*(e1+m2)+ 2.*p1*p3*cosTheta);
double Q = m1+m2-m3-TMath::Sqrt(m1*m1 + m2*m2 + m3*m3 + 2.*m2*e1 - 2.*e3*(e1+m2)+ 2.*p1*p3*cosTheta);
Qx = Q;
T4 = ET - e3 - (m1+m2-m3-Q);
//T4 = slowitdown("75Ga",T4,"1(12C)2(2H)",1.2);
P4 = TMath::Sqrt(T4*T4 + 2*m4*T4);
//this angle will not be affected by eloss
theta4 = (180./M_PI)*TMath::ASin((p3/P4)*TMath::Sin(angle3*M_PI/180.));
// T4-=16.5; //eloss in about 1.4 mg CD2
T4-=15.5; //eloss in 1.35 mg CD2 //TODO: actually degrade recoil/ejectiles in target
// T4-=14.1; //eloss in about 1.2 mg CD2
// T4-=31.7; //eloss in 2.7 mg CD2
//recalculate everything other than angle with lowered Kinetic energy
P4 = TMath::Sqrt(T4*T4 + 2*m4*T4);
gamma4 = T4/m4+1.;
beta4 = TMath::Sqrt(1. - 1./(gamma4*gamma4));
//beta4 = TMath::Sqrt((P4*P4)/(P4*P4 + m4*m4));
theta4 = (180./M_PI)*TMath::ASin((p3/P4)*TMath::Sin(angle3*M_PI/180.));
return Q0 - Q;//Q0 = Q + Exc
}
double Kinematics::getBeta4(double t3, double angle3)
/*
\brief Follows convention in Marion, 2013: (1 - beam, 2- target, 3-ejectile, 4-recoil)
m1 is beam, (typically heavy nucleus)
m2 is 'd', (light target)
m3 is 'p', (light ejectile mass)
t1 is beam kinetic energy,
\param t3 lab-kinetic-energy in MeV
\param angle3 lab-angle in deg of detected proton (if d,p) or other charged particle
\return doppler-shift beta (=v/c) of the heavy-recoil nucleus, calls getExc() to fill the value
*/
{
getExc(t3, angle3);
return beta4;
}
double Kinematics::getBrho(double t3, double angle3, double charge_state) {
/*
\brief Follows convention in Marion, 2013: (1 - beam, 2- target, 3-ejectile, 4-recoil)
m1 is beam, (typically heavy nucleus)
m2 is 'd', (light target)
m3 is 'p', (light ejectile mass)
t1 is beam kinetic energy,
\param t3 lab-kinetic-energy in MeV
\param angle3 lab-angle in deg of detected proton (if d,p) or other charged particle
\param charge_state charge state of the intended nucleus, in units of elementary charge (= +1 for H+, +2 for He2+ etc).
\return b-rho value, generated from P4*3.3359e-3/charge_state where P4 is 4momentum of heavy-recoil calculated from orruba kinematics
*/
getExc(t3,angle3);
return P4*3.3359e-3/charge_state;
}
double Kinematics::getTheta4(double t3, double angle3) {
/*
\brief Follows convention in Marion, 2013: (1 - beam, 2- target, 3-ejectile, 4-recoil)
m1 is beam, (typically heavy nucleus)
m2 is 'd', (light target)
m3 is 'p', (light ejectile mass)
t1 is beam kinetic energy,
\param t3 lab-kinetic-energy in MeV
\param angle3 lab-angle in deg of detected proton (if d,p) or other charged particle
\param charge_state charge state of the intended nucleus, in units of elementary charge (= +1 for H+, +2 for He2+ etc).
\return lab theta value of heavy recoil in degrees
*/
getExc(t3,angle3);
return theta4;
}