#include "TS800FpTrack.h"
#include "TS800.h"
#include "nrutil.h"
#include "PhysicalConstants.h"
#include <iostream>
#include <math.h>
#include <TBranch.h>
#include <TMath.h>
#include <TNamed.h>
#include <TList.h>
ClassImp(TS800FpTrack);
using namespace TMath;
TS800FpTrack::TS800FpTrack(const TS800FpTrack & fpTrack) : TObject(fpTrack)
{
((TS800FpTrack&)fpTrack).Copy(*this);
}
void TS800FpTrack::Copy(TObject &fpTrack) const
{
TObject::Copy((TObject&)fpTrack);
((TS800FpTrack&)fpTrack).zfp = zfp;
((TS800FpTrack&)fpTrack).anglea = anglea;
((TS800FpTrack&)fpTrack).angleb = angleb;
((TS800FpTrack&)fpTrack).order = order;
((TS800FpTrack&)fpTrack).mass = mass;
((TS800FpTrack&)fpTrack).deltaM = deltaM;
((TS800FpTrack&)fpTrack).charge = charge;
((TS800FpTrack&)fpTrack).gecorr = gecorr;
((TS800FpTrack&)fpTrack).beta0 = beta0;
((TS800FpTrack&)fpTrack).name = name;
}
void TS800FpTrack::InitClass(TString iname, TS800* iparent)
{
name = iname;
parent = iparent;
zfp = 0;
anglea = 0;
angleb = 0;
order = 5;
mass = 0;
deltaM = 0;
charge = 0;
gecorr = 0;
}
void TS800FpTrack::InitTree(TTree *tree)
{
fChain = tree;
fCurrent = -1;
b_xfp = fChain->GetBranch(name+".xfp");
b_afp = fChain->GetBranch(name+".afp");
b_yfp = fChain->GetBranch(name+".yfp");
b_bfp = fChain->GetBranch(name+".bfp");
b_ata = fChain->GetBranch(name+".ata");
b_yta = fChain->GetBranch(name+".yta");
b_bta = fChain->GetBranch(name+".bta");
b_dta = fChain->GetBranch(name+".dta");
b_azita = fChain->GetBranch(name+".azita");
b_scatter = fChain->GetBranch(name+".scatter");
b_energy = fChain->GetBranch(name+".energy");
b_ptot = fChain->GetBranch(name+".ptot");
b_ppar = fChain->GetBranch(name+".ppar");
b_ptra = fChain->GetBranch(name+".ptra");
}
void TS800FpTrack::Clear(Option_t*)
{
xfp = sqrt(-1.0);
afp = sqrt(-1.0);
yfp = sqrt(-1.0);
bfp = sqrt(-1.0);
ata = sqrt(-1.0);
yta = sqrt(-1.0);
bta = sqrt(-1.0);
dta = sqrt(-1.0);
azita = sqrt(-1.0);
scatter = sqrt(-1.0);
energy = sqrt(-1.0);
ptot = sqrt(-1.0);
ppar = sqrt(-1.0);
ptra = sqrt(-1.0);
}
void TS800FpTrack::GetEntry(int i)
{
b_xfp->GetEntry(i);
b_afp->GetEntry(i);
b_yfp->GetEntry(i);
b_bfp->GetEntry(i);
b_ata->GetEntry(i);
b_yta->GetEntry(i);
b_bta->GetEntry(i);
b_dta->GetEntry(i);
b_azita->GetEntry(i);
b_scatter->GetEntry(i);
b_energy->GetEntry(i);
b_ptot->GetEntry(i);
b_ppar->GetEntry(i);
b_ptra->GetEntry(i);
}
Int_t TS800FpTrack::Calculate(Long64_t entry)
{
const Double_t gap = 1073.;
Double_t xsin;
Double_t ysin;
Double_t input[4];
Double_t beta;
Double_t betaGamma0;
Double_t gamma0;
Double_t gamma;
Double_t energy0;
Double_t ptot0;
Double_t brho = parent->kBrho;
Double_t mass0 = mass*kAmu + deltaM;
betaGamma0 = brho / 3.107 * charge / mass;
gamma0 = sqrt(betaGamma0*betaGamma0 + 1);
beta0 = betaGamma0 / gamma0;
energy0 = mass0 * (gamma0 - 1);
ptot0 = energy0 * sqrt(1 + 2 * mass0 / energy0);
if(entry==0){
printf("*********************************************************************\n");
printf("Selected Isotope: Z=%3i A=%3i deltaM=%12.8lf Brho: %06f \n",charge,mass,deltaM,brho);
printf("mass0=%06f betaGamma0=%06f gamma0=%06f beta0=%06f energy0=%06f ptot0=%06f \n",
mass0,betaGamma0,gamma0,beta0,energy0,ptot0);
}
Clear();
afp = atan((parent->crdc2.x - parent->crdc1.x) / gap);
xfp = parent->crdc1.x + zfp * tan(afp);
bfp = atan((parent->crdc2.y - parent->crdc1.y) / gap);
yfp = parent->crdc1.y + zfp * tan(bfp);
input[0] = -xfp/1000;
input[1] = -afp;
input[2] = yfp/1000;
input[3] = bfp;
if (order > parent->s800map.maxorder) order = parent->s800map.maxorder;
ata = -parent->s800map.Calculate(order, 0, input)*1000;
yta = parent->s800map.Calculate(order, 1, input)*1000;
bta = parent->s800map.Calculate(order, 2, input)*1000;
dta = parent->s800map.Calculate(order, 3, input);
ata += anglea*DegToRad()*1000;
bta += angleb*DegToRad()*1000;
xsin = sin(ata/1000.);
ysin = sin(bta/1000.);
if (xsin > 0 && ysin > 0) azita = atan(ysin/xsin)*RadToDeg();
else if (xsin < 0 && ysin > 0) azita = (Pi() - atan(ysin/fabs(xsin)))*RadToDeg();
else if (xsin < 0 && ysin < 0) azita = (Pi() + atan(fabs(ysin)/fabs(xsin)))*RadToDeg();
else if (xsin > 0 && ysin < 0) azita = (2.*Pi() - atan(fabs(ysin)/xsin))*RadToDeg();
else azita = 0.0 ;
scatter = asin(sqrt(xsin*xsin + ysin*ysin))*1000;
energy = (1 + dta) * energy0;
gamma = 1 + energy / mass0 / kAmu / kAmu;
beta = sqrt(1 - 1 / gamma / gamma);
deltabeta = beta - beta0;
ptot = energy * sqrt(1 + 2 * mass0 / energy);
ppar = ptot * cos(scatter / 1000);
ptra = ptot * sin(scatter / 1000);
yta += fYtaShift;
return 1;
}
Last change: Sun Dec 21 12:38:55 2008
Last generated: 2008-12-21 12:38
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.