#include "hhypMomError.h"
#include "TMath.h"
ClassImp (HHypMomError)
HHypMomError HypMomErr;
HHypMomError::HHypMomError ()
{
jan04=apr06=apr07=false;
}
HHypMomError::~HHypMomError ()
{
}
Bool_t HHypMomError::init(void)
{
return kTRUE;
}
static const Double_t HHypMomError_detrk4[7][5] = {
{3.04669e-06, 2.92245e-06, 2.88894e-06, 2.54182e-06, 1.79336e-06},
{3.45534e-06, 3.52212e-06, 3.43443e-06, 3.3966e-06, 3.31397e-06},
{5.01234e-06, 5.46206e-06, 5.25006e-06, 5.06055e-06, 4.87875e-06},
{6.29485e-06, 7.83364e-06, 8.64567e-06, 7.44434e-06, 6.44697e-06},
{5.90814e-06, 7.49372e-06, 8.44064e-06, 7.33158e-06, 5.8983e-06 },
{5.00201e-06, 6.82347e-06, 8.42634e-06, 6.64071e-06, 4.32283e-06},
{4.57113e-06, 7.85962e-06, 9.27056e-06, 7.13838e-06, 4.2649e-06 },
};
static const Double_t HHypMomError_multscrk4[7][5] = {
{0.00712136, 0.00774792, 0.00745848, 0.0072562, 0.0077318},
{0.00947987, 0.00919469, 0.00923363, 0.0090577, 0.0088233},
{0.0104807 , 0.0105168 , 0.0114445 , 0.0109526, 0.0103268},
{0.0122493 , 0.013979 , 0.0148295 , 0.0142261, 0.0125651},
{0.0132593 , 0.0151324 , 0.0171913 , 0.0157784, 0.0133762},
{0.0127184 , 0.0166672 , 0.0197425 , 0.0166028, 0.0127183},
{0.0121717 , 0.0187349 , 0.0235083 , 0.0183666, 0.0114857}
};
static const Double_t HHypMomError_detrk3[7][5] = {
{5.08616e-06, 5.57472e-06, 5.90756e-06, 5.30146e-06, 5.12577e-06},
{8.64475e-06, 8.44705e-06, 8.58983e-06, 7.7759e-06 , 6.88931e-06},
{1.23261e-05, 1.42034e-05, 1.55287e-05, 1.31425e-05, 1.10076e-05},
{1.75029e-05, 2.59217e-05, 2.72391e-05, 2.46139e-05, 1.84151e-05},
{1.75554e-05, 2.25547e-05, 2.5371e-05 , 2.30453e-05, 1.8036e-05 },
{1.5159e-05 , 2.14014e-05, 2.37335e-05, 2.17028e-05, 1.56393e-05},
{1.70025e-05, 2.42703e-05, 2.65468e-05, 2.33554e-05, 1.5726e-05 }
};
static const Double_t HHypMomError_multscrk3[7][5] = {
{0.00705671, 0.00707791, 0.00719795, 0.00686656, 0.00468438},
{0.00791494, 0.00971418, 0.00922887, 0.00921739, 0.00882323},
{0.0101972 , 0.0108932 , 0.0109951 , 0.0111292 , 0.0103408 },
{0.0136591 , 0.0147924 , 0.0152897 , 0.0153152 , 0.0135126 },
{0.014621 , 0.0166669 , 0.0175123 , 0.0176646 , 0.0157295 },
{0.0146804 , 0.0180094 , 0.0183208 , 0.0172132 , 0.014879 },
{0.0130367 , 0.018929 , 0.0221153 , 0.0189616 , 0.0147333 }
};
static const Double_t HHypMomError_detkick[7][5] = {
{0.000095203, 0.000095204, 0.000104141, 0.000099331, 0.000099331},
{0.000151284, 0.000148333, 0.000151814, 0.000147953, 0.000143505},
{0.000197612, 0.000196251, 0.000191317, 0.000195112, 0.000203217},
{0.000156319, 0.000157184, 0.000163081, 0.000157349, 0.000162052},
{0.00014439 , 0.000153818, 0.000170083, 0.000160573, 0.000139122},
{0.000199936, 0.000236463, 0.000262118, 0.000240549, 0.000199932},
{0.000226558, 0.000296774, 0.00032661 , 0.000292281, 0.000226592}
};
Double_t HHypMomError::getMomError(Double_t theta, Double_t phi, Double_t mass, Double_t p,Int_t sec,Bool_t simu)
{
if(jan04){
if(simu){
return getMomErrGeantJan04( theta, phi, mass, p, sec);
}else{
return getMomErrJan04( theta, phi, mass, p, sec);
}
}else if(apr07){
if(simu){
return getMomErrGeantApr07( theta, phi, mass, p, sec);
}else{
return getMomErrGeantApr07( theta, phi, mass, p, sec);
}
}else{
Error("HHypMomError::","beamtime not defined or no data for beamtime");
return 0.0;
}
}
Double_t HHypMomError::getMomErrGeantApr07(Double_t theta, Double_t phi, Double_t mass, Double_t p,Int_t sec)
{
theta*=TMath::RadToDeg();
phi*=TMath::RadToDeg();
if (phi<0.) phi += 360.;
if(theta <= 15 || theta > 85) return -1.0;
Int_t thetaBin = int((theta-15)/10);
Int_t phiBin = int((phi - int(phi/60)*60)/12);
Double_t c1, c2, res;
c1 = HHypMomError_detrk4[thetaBin][phiBin];
c2 = HHypMomError_multscrk4[thetaBin][phiBin];
res = sqrt(c1*c1*p*p*p*p + c2*c2*(p*p + mass*mass));
return res;
}
Double_t HHypMomError::getMomErrGeantJan04(Double_t theta, Double_t phi, Double_t mass, Double_t p,Int_t sec)
{
Int_t snr[6]={4,4,3,4,4,3};
theta*=TMath::RadToDeg();
phi*=TMath::RadToDeg();
Int_t iSetup;
iSetup=snr[sec];
if (phi<0.) phi += 360.;
if(theta <= 15 || theta > 85) return -1.0;
Int_t thetaBin = int((theta-15)/10);
Int_t phiBin = int((phi - int(phi/60)*60)/12);
Double_t c1, c2, res;
switch(iSetup)
{
case 2:
c1 = HHypMomError_detkick[thetaBin][phiBin];
res = c1*p*p;
break;
case 3:
c1 = HHypMomError_detrk3[thetaBin][phiBin];
c2 = HHypMomError_multscrk3[thetaBin][phiBin];
res = sqrt(c1*c1*p*p*p*p + c2*c2*(p*p + mass*mass));
break;
case 4:
c1 = HHypMomError_detrk4[thetaBin][phiBin];
c2 = HHypMomError_multscrk4[thetaBin][phiBin];
res = sqrt(c1*c1*p*p*p*p + c2*c2*(p*p + mass*mass));
break;
default:
Error("HHypMomError::","invalid setup");
return -1.0;
}
return res;
}
Double_t HHypMomError::getMomErrJan04(Double_t theta, Double_t phi, Double_t mass, Double_t p,Int_t sec)
{
Int_t snr[6]={4,4,3,4,4,3};
theta*=TMath::RadToDeg();
phi*=TMath::RadToDeg();
Double_t coeff[6][2] = {{7, 12},{ 5, 8},{ 7, 12},{ 4, 7},{ 4, 7},{ 3, 6}};
Double_t c1, c2, res, scale;
if (phi<0.) phi += 360.;
if(theta <= 15 || theta > 85) return -1.0;
Int_t thetaBin = int((theta-15)/10);
Int_t phiBin = int((phi - int(phi/60)*60)/12);
Int_t iSetup;
iSetup=snr[sec];
scale = (thetaBin < 2 ? coeff[sec][1] : coeff[sec][0]);
switch(iSetup)
{
case 2:
c1 = HHypMomError_detkick[thetaBin][phiBin];
res = c1*p*p;
break;
case 3:
c1 = HHypMomError_detrk3[thetaBin][phiBin];
c1 *= scale;
c2 = HHypMomError_multscrk3[thetaBin][phiBin];
res = sqrt(c1*c1*p*p*p*p + c2*c2*(p*p + mass*mass));
break;
case 4:
c1 = HHypMomError_detrk4[thetaBin][phiBin];
c1 *= scale;
c2 = HHypMomError_multscrk4[thetaBin][phiBin];
res = sqrt(c1*c1*p*p*p*p + c2*c2*(p*p + mass*mass));
break;
default:
Error("HHypMomError::","invalid setup");
return -1.0;
}
return res;
}
void HHypMomError::getFaktors(
Double_t &FakErrMomExp,Double_t &FakErrThetaExp,Double_t &FakErrPhiExp,
Double_t &FakErrMomSim,Double_t &FakErrThetaSim,Double_t &FakErrPhiSim)
{
if(jan04){
FakErrMomSim=0.65;
FakErrThetaSim=0.95;
FakErrPhiSim=0.95 ;
FakErrMomExp=0.7;
FakErrThetaExp=1.0;
FakErrPhiExp=1.0 ;
}else if(apr07){
FakErrMomSim=1.37;
FakErrThetaSim=1.37;
FakErrPhiSim=1.37;
FakErrMomExp=1.37;
FakErrThetaExp=1.37;
FakErrPhiExp=1.37;
}else if(apr06){
FakErrMomSim=1.37;
FakErrThetaSim=1.11;
FakErrPhiSim=1.11;
FakErrMomExp=1.37;
FakErrThetaExp=1.11;
FakErrPhiExp=1.11;
}else{
Error("HHypMomError::","beamtime not defined or no data for beamtime");
}
}
Last change: Sat May 22 12:57:52 2010
Last generated: 2010-05-22 12:57
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.