82 float k =
Kappa( Bz );
87 float dS = x * ex + y * ey;
93 float &xp,
float &yp,
float &zp,
100 float k =
Kappa( Bz );
105 float ax = dx * k + ey;
106 float ay = dy * k - ex;
107 float a =
sqrt( ax * ax + ay * ay );
108 xp = x0 + ( dx - ey * ( ( dx * dx + dy *
dy ) * k - 2 * ( -dx * ey + dy * ex ) ) / ( a + 1 ) ) / a;
109 yp = y0 + ( dy + ex * ( ( dx * dx + dy *
dy ) * k - 2 * ( -dx * ey + dy * ex ) ) / ( a + 1 ) ) / a;
110 float s =
S( x, y, Bz );
127 const float cosPhi = cP * cA + sP * sA;
128 const float sinPhi = -cP * sA + sP * cA;
132 if (
fabs(alpha) > 3.1415 * 0.25 )
return 0;
134 const float j0 = cP / cosPhi;
135 const float j2 = cosPhi / cP;
138 fP[0] = -x*sA +
y*cA;
169 return rotated & transported;
179 for (
int i = 0; i < 5; i++ ) in >> t.
fP[
i];
180 for (
int i = 0; i < 15; i++ ) in >> t.
fC[
i];
191 for (
int i = 0;
i < 5;
i++ ) out << t.
Par()[
i] <<
" ";
193 for (
int i = 0;
i < 15;
i++ ) out << t.
Cov()[
i] <<
" ";
207 q = -(
QPt() >=0 ? 1 : -1 );
209 const float cosL =
DzDs();
217 for (
int i = 0;
i < 6;
i++)
218 for (
int j = 0; j < 6; j++)
224 J[3][5] = - q * pt * pt *
CosPhi();
226 J[4][5] = - q* pt * pt *
SinPhi();
228 J[5][5] = - q* pt * pt * cosL;
232 CovIn[0][0] = .000001f*.00001f;
233 for (
int i = 1;
i < 6;
i++) {
238 for (
int i = 1;
i < 6;
i++) {
239 for (
int j = 1; j <=
i; j++, k++) {
240 CovIn[
i][j] =
Cov()[k];
241 CovIn[j][
i] =
Cov()[k];
247 for (
int i = 0;
i < 6;
i++)
248 for (
int j = 0; j < 6; j++) {
250 for (
int k = 0; k < 6; k++) {
251 CovInJ[
i][j] += CovIn[
i][k] * J[j][k];
256 for (
int i = 0;
i < 6;
i++)
257 for (
int j = 0; j < 6; j++) {
259 for (
int k = 0; k < 6; k++) {
260 CovOut[
i][j] += J[
i][k] * CovInJ[k][j];
267 for (
int i = 0;
i < 6;
i++) {
268 for (
int j = 0; j <=
i; j++, k++) {
269 cov[k] = CovOut[
i][j];
270 ASSERT( !finite(CovOut[
i][j]) || CovOut[
i][j] == 0 ||
fabs( 1. - CovOut[j][
i]/CovOut[
i][j] ) <= 0.05,
271 "CovOut[" <<
i <<
"][" << j <<
"] == CovOut[" << j <<
"][" <<
i <<
"] : " << CovOut[
i][j] <<
" == " << CovOut[j][
i]);
279 for (
int i = 0;
i < 6;
i++) {
280 for (
int j = 0; j <=
i; j++, k++) {
281 ok &= finite( cov[k] );
283 ok &= ( cov[k-1] > 0 );
285 if (!ok)
return false;
293 #if defined(PANDA_STT) || defined(PANDA_FTS)
296 const float cA =
cos( alpha );
297 const float sA =
sin( alpha );
306 float J[2][2] = { { cA, sA },
310 const float xt =
x, yt =
y;
321 for (
int i = 0;
i < 2;
i++)
322 for (
int j = 0; j < 2; j++) {
324 for (
int k = 0; k < 2; k++) {
325 Cov2[
i][j] += Cov1[
i][k] * J[j][k];
330 for (
int i = 0;
i < 2;
i++)
331 for (
int j = 0; j < 2; j++) {
333 for (
int k = 0; k < 2; k++) {
334 Cov1[
i][j] += J[
i][k] * Cov2[k][j];
345 const float xt = px, yt = py;
351 Cov1[0][1] = cov[13];
352 Cov1[1][0] = cov[13];
353 Cov1[1][1] = cov[14];
357 for (
int i = 0;
i < 2;
i++)
358 for (
int j = 0; j < 2; j++) {
360 for (
int k = 0; k < 2; k++) {
361 Cov2[
i][j] += Cov1[
i][k] * J[j][k];
366 for (
int i = 0;
i < 2;
i++)
367 for (
int j = 0; j < 2; j++) {
369 for (
int k = 0; k < 2; k++) {
370 Cov1[
i][j] += J[
i][k] * Cov2[k][j];
377 cov[13] = Cov1[0][1];
378 cov[14] = Cov1[1][1];
friend F32vec4 cos(const F32vec4 &a)
bool Transport(const FTSCAHit &hit, const PndFTSCAParam ¶m)
void GetDCAPoint(float x, float y, float z, float &px, float &py, float &pz, float Bz) const
bool Rotate(float alpha, float maxSinPhi=.999)
friend F32vec4 sqrt(const F32vec4 &a)
friend F32vec4 sin(const F32vec4 &a)
const float * Par() const
TString pt(TString pts, TString exts="px py pz")
const float * Cov() const
std::istream & operator>>(std::istream &in, PndFTSCATrackParam &t)
static T ATan2(const T &y, const T &x)
bool GetXYZPxPyPzQ(float &x, float &y, float &z, float &px, float &py, float &pz, int &q, float cov[21]) const
bool TransportToX0(float x, float Bz, float maxSinPhi=.999)
friend F32vec4 fabs(const F32vec4 &a)
std::ostream & operator<<(std::ostream &out, const PndFTSCATrackParam &t)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
float S(float x, float y, float Bz) const
float Kappa(float Bz) const