|
ATLAS Offline Software
|
Go to the documentation of this file.
15 inline int sIndexVK(
int i,
int j) {
16 return i > j ?
i * (
i + 1) / 2 + j : j * (j + 1) / 2 +
i;
28 const double *par0,
double *wgt,
double *rmnd)
30 double phif, epsf,
d1,
d2, d3, d4, d5,
sr, uu,
vv,
res, zpf;
39 sr =
part[3] * std::abs(ich);
40 epsf = -
vv - (uu * uu +
vv *
vv) *
sr / 2.;
45 d3 = par0[2] -
part[1];
47 d5 = par0[4] -
part[3];
60 res = wgt[1] * (
d1 *
d1) + wgt[3] * (
d2 *
d2) + wgt[6] * (d3 * d3)
61 + wgt[10] * (d4 * d4) + wgt[15] * (d5 * d5) + (
d2 *
62 d1 * wgt[2] + d3 * (
d1 * wgt[4] +
d2 * wgt[5]) + d4 * (
d1 * wgt[7]
63 +
d2 * wgt[8] + d3 * wgt[9]) + d5 * (
d1 * wgt[11] +
d2 * wgt[12]
64 + d3 * wgt[13] + d4 * wgt[14])) * 2;
70 return (std::abs(
res) < 1.e12 ? std::abs(
res) : 1.e12);
83 double d1,
d2, d3, d4, d5;
84 double theta_f =
part[0];
85 double phi_f =
part[1];
86 double invR_f =
part[2];
87 double uu = vrtt[0] *
cos(phi_f) + vrtt[1] *
sin(phi_f );
88 double vv = vrtt[1] *
cos(phi_f) - vrtt[0] *
sin(phi_f);
89 double sr = invR_f * abs(trk->
Charge);
90 double epsf = -
vv - (uu * uu +
vv *
vv) *
sr / 2.;
91 double zpf = vrtt[2] - uu * (1. -
vv *
sr) /
tan(theta_f);
92 double phif = phi_f - uu *
sr;
95 d3 = theta_f - trk->
Perig[2];
96 d4 = phif - trk->
Perig[3];
97 d5 = invR_f - trk->
Perig[4];
102 + trk->
WgtM[5] * (d3*d3)
103 + trk->
WgtM[9] * (d4*d4)
104 + trk->
WgtM[14]* (d5*d5)
118 return (std::abs(
res) < 1.e12 ? std::abs(
res) : 1.e12);
131 volatile double b1,b2;
137 b1 = (
y1 - y0) / (
x1 - x0);
138 b2 = (
y2 - y0 - b1 * (
x2 - x0)) / (
x2 - x0) / (
x2 -
x1);
139 if (std::abs(b2) < 1
e-8) {
140 if (
y2 <= y0 &&
y2 <
y1) {
142 }
else if (
y1 <= y0 &&
y1 <
y2) {
144 }
else if (y0 <
y1 && y0 <
y2) {
145 ret_val = x0 + (
x2 - x0) * .001;
151 ret_val = (
x1 + x0) - ( b1 / b2 );
218 void tdasatVK(
const double *Der,
const double *CovI,
double *CovF,
long int M,
long int N)
221 for(
k=0;
k<M;
k++) {
222 for(
f=0;
f<=
k;
f++ ) {
226 for( j=0; j<
N; j++)
tmp += CovI[sIndexVK(
i,j)]*Der[j+
f*
N];
229 CovF[sIndexVK(
k,
f)]=
sum;
242 for (
i = 1;
i <=
n; ++
i) {
243 for (j = 1; j <=
i; ++j) {
261 double &
a,
double &
b,
double &
c)
269 void efdCoef(
double Ga0,
double Gamb,
double Gab,
double Gw0,
double Gwb,
270 double alf,
double bet,
double w,
271 double &
d,
double &
e,
double &
f)
276 e = (Gab + Gamb - 2.*Ga0)/bet/bet/2.;
277 f = (Gwb + Gamb - 2.*
e*bet*bet - Gw0 - Ga0)/bet/(
w-alf);
278 d = (Gab - Ga0 -
e*bet*bet -
f*alf*bet)/bet;
286 if( std::abs(
f) > std::abs(
c) ) {
xmin = - (2.*
e*
ymin +
d)/
f;}
296 double Lim=0.99;
double Lim2=Lim*Lim;
297 bool i0,i1,i2,i3,i4; i0=i1=i2=i3=i4=
false;
298 if( std::abs(
cov[1]*
cov[1])/
cov[0]/
cov[2] > Lim2 ){ i0=
true; i1=
true;}
299 if( std::abs(
cov[3]*
cov[3])/
cov[0]/
cov[5] > Lim2 ){ i0=
true; i2=
true;}
300 if( std::abs(
cov[4]*
cov[4])/
cov[2]/
cov[5] > Lim2 ){ i1=
true; i2=
true;}
301 if( std::abs(
cov[6]*
cov[6])/
cov[0]/
cov[9] > Lim2 ){ i0=
true; i3=
true;}
302 if( std::abs(
cov[7]*
cov[7])/
cov[2]/
cov[9] > Lim2 ){ i1=
true; i3=
true;}
303 if( std::abs(
cov[8]*
cov[8])/
cov[5]/
cov[9] > Lim2 ){ i2=
true; i3=
true;}
304 if( std::abs(
cov[10]*
cov[10])/
cov[0]/
cov[14] > Lim2 ){ i0=
true; i4=
true;}
305 if( std::abs(
cov[11]*
cov[11])/
cov[2]/
cov[14] > Lim2 ){ i1=
true; i4=
true;}
306 if( std::abs(
cov[12]*
cov[12])/
cov[5]/
cov[14] > Lim2 ){ i2=
true; i4=
true;}
307 if( std::abs(
cov[13]*
cov[13])/
cov[9]/
cov[14] > Lim2 ){ i3=
true; i4=
true;}
309 if(i0){
cov[1]*=Lim;
cov[3]*=Lim;
cov[6]*=Lim;
cov[10]*=Lim; }
310 if(i1){
cov[1]*=Lim;
cov[4]*=Lim;
cov[7]*=Lim;
cov[11]*=Lim; }
311 if(i2){
cov[3]*=Lim;
cov[4]*=Lim;
cov[8]*=Lim;
cov[12]*=Lim; }
312 if(i3){
cov[6]*=Lim;
cov[7]*=Lim;
cov[8]*=Lim;
cov[13]*=Lim; }
313 if(i4){
cov[10]*=Lim;
cov[11]*=Lim;
cov[12]*=Lim;
cov[13]*=Lim; }
double finter(double y0, double y1, double y2, double x0, double x1, double x2)
void abcCoef(double g1, double g2, double g3, double &a, double &b, double &c)
std::pair< std::vector< unsigned int >, bool > res
void tdasatVK(const double *Der, const double *CovI, double *CovF, long int M, long int N)
Ensure that the ATLAS eigen extensions are properly loaded.
void ParaMin(double b, double c, double d, double e, double f, double &xmin, double &ymin)
double cfchi2(double *xyzt, const long int ich, double *part, const double *par0, double *wgt, double *rmnd)
void cfTrkCovarCorr(double *cov)
void efdCoef(double Ga0, double Gamb, double Gab, double Gw0, double Gwb, double alf, double bet, double w, double &d, double &e, double &f)
void cfsetdiag(long int n, double *matr, double value) noexcept