404 const double pt = p4.Perp();
406 Warning(
"P7toPRG",
"Too small transverse momentum: %g",pt);
412 const double qBc = -0.000299792458*B*Q;
419 const double xp =
pos.X()-expPoint.X();
420 const double yp =
pos.Y()-expPoint.Y();
421 const double zp =
pos.Z()-expPoint.Z();
422 const double px = p4.Px();
423 const double py = p4.Py();
424 const double pz = p4.Pz();
425 const double p2 = px*px+py*py+pz*
pz;
426 const double p2i = (p2==0.)?0.:1./
p2;
427 const double pti = 1/
pt;
429 if(
fVerbose>1) {
printf(
"P7toPRG: x is [%8g,%8g,%8g] cm \n",xp,yp,zp); }
430 if(
fVerbose>1) {
printf(
"P7toPRG: p is [%8g,%8g,%8g] GeV/c \n",px,py,pz); }
432 const double phip = p4.Phi();
448 double eta = phip - TMath::ACos(xp/r);
449 double tht = p4.Theta();
451 helixparams[0] = r*
sin(eta);
452 helixparams[1] = zp - r*
cos(eta)/tan(tht);
453 helixparams[2] =
tht;
454 helixparams[3] = phip;
461 jacobian[0][1] = yp*
sin(eta)/r - xp*yp*
cos(eta)/(r*r*
TMath::Sqrt(1-xp*xp/(r*r)));
468 jacobian[1][0] =
TMath::Sqrt(1-xp*xp/(r*r))*
sin(eta)/tan(tht) - xp/r *
cos(eta)/tan(tht);
469 jacobian[1][1] = -(yp/r*
cos(eta)/tan(tht)+xp*yp/(r*
r)*
sin(eta)/tan(tht)/
TMath::Sqrt(1-xp*xp/(r*r)));
479 jacobian[2][3] = px*pz*pti*p2i;
480 jacobian[2][4] = py*pz*pti*p2i;
481 jacobian[2][5] = -pt*p2i;
487 jacobian[3][3] = -py*pti;
488 jacobian[3][4] = px*pti;
505 const double rho = qBc*pti;
506 const double R0 = 1./rho;
513 const double theta=p4.Theta();
518 const double xc = xp - py/qBc;
519 const double yc = yp + px/qBc;
520 const double RCsq = xc*xc + yc*yc;
526 const double epsilon = Q*(RC -
TMath::Abs(R0));
530 const double direction = TMath::Sign(1.,Q);
539 if(
fVerbose>1) {
printf(
"P7toPRG: phi0 = %.4g, \tphiP = %.4g, \tDeltaPhi = %.4g \tepsilon=%.4g, \tQ=%g\n",phi0,phip,phip-phi0, epsilon, Q); }
541 double xnew=epsilon*
sin(phi0);
542 double ynew=-epsilon*
cos(phi0);
543 printf(
"P7toPRG: xnew = %.4g, \tynew = %.4g, \t(x^2+y^2) = %.4g \tepsilon^2=%.4g\n",xnew,ynew,xnew*xnew+ynew*ynew, epsilon*epsilon);
547 const double z0 = zp - pz*(phip-
phi0)/qBc;
549 if(
fVerbose>1) {
printf(
"P7toPRG: z0 is %g cm from zp=%.3g cm\n",z0,zp); }
551 helixparams[0]=epsilon;
553 helixparams[2]=
theta;
557 for(
int ai=0; ai<5; ai++) {
558 std::cout<<
"helixparams["<<ai<<
"]="<<helixparams[ai]<<std::endl;
565 jacobian[0][0] = Q*xc/RC;
566 jacobian[0][1] = Q*yc/RC;
568 jacobian[0][3] = Q*(yc/(qBc*RC)-TMath::Sign(pti,R0)*px/qBc);
569 jacobian[0][4] = Q*(-xc/(qBc*RC)-TMath::Sign(pti,R0)*py/qBc);
573 jacobian[1][0] = -pz*yc/(RCsq*qBc);
574 jacobian[1][1] = pz*xc/(RCsq*qBc);
576 jacobian[1][3] = (py*pti*pti + xc/(qBc*RCsq))*pz/qBc;
577 jacobian[1][4] = -(px*pti*pti - yc/(qBc*RCsq))*pz/qBc;
578 jacobian[1][5] = -(phip-
phi0)/qBc;
585 jacobian[2][3] = px*pz*pti*p2i;
586 jacobian[2][4] = py*pz*pti*p2i;
587 jacobian[2][5] = -pt*p2i;
591 jacobian[3][0] = -yc/(RCsq);
592 jacobian[3][1] = xc/(RCsq);
594 jacobian[3][3] = xc/(RCsq*qBc);
595 jacobian[3][4] = yc/(RCsq*qBc);
602 jacobian[4][3] = -rho*px*pti*pti;
603 jacobian[4][4] = -rho*py*pti*pti;
610 TMatrixD tempmat(jacobian,TMatrixD::kMult,cov77);
611 TMatrixD covrho(tempmat,TMatrixD::kMultTranspose,jacobian);
615 std::cout<<
"cov77: ";
618 std::cout<<
"jacobian: ";
622 std::cout<<
"covrho (epsilon,Z0,Theta,Phi0,rho): ";
624 std::cout<<
"helixparams[0] = epsilon\t= ("<<helixparams[0]<<
" \t+- "<<
sqrt(helixCov[0][0])<<
") cm"<<std::endl;
625 std::cout<<
"helixparams[1] = Z0 \t= ("<<helixparams[1]<<
" \t+- "<<
sqrt(helixCov[1][1])<<
") cm"<<std::endl;
626 std::cout<<
"helixparams[2] = Theta \t= ("<<helixparams[2]<<
" \t+- "<<
sqrt(helixCov[2][2])<<
") rad"<<std::endl;
627 std::cout<<
"helixparams[3] = Phi0 \t= ("<<helixparams[3]<<
" \t+- "<<
sqrt(helixCov[3][3])<<
") rad"<<std::endl;
628 std::cout<<
"helixparams[4] = rho\t= ("<<helixparams[4]<<
" \t+- "<<
sqrt(helixCov[4][4])<<
") 1/cm"<<std::endl;
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
friend F32vec4 cos(const F32vec4 &a)
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
friend F32vec4 sin(const F32vec4 &a)
TString pt(TString pts, TString exts="px py pz")
static T ATan2(const T &y, const T &x)
TString tht(TString pts, TString exts="px py pz")
friend F32vec4 fabs(const F32vec4 &a)
TMatrixT< double > TMatrixD