CMS 3D CMS Logo

TwoBodyDecayDerivatives Class Reference

/class TwoBodyDecayDerivatives More...

#include <Alignment/TwoBodyDecay/interface/TwoBodyDecayDerivatives.h>

List of all members.

Public Types

enum  { dimension = 6 }
enum  DerivativeParameterName {
  px = 1, py = 2, pz = 3, theta = 4,
  phi = 5, mass = 6
}

Public Member Functions

const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
derivatives (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
derivatives (const TwoBodyDecay &tbd) const
 Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
selectedDerivatives (const TwoBodyDecayParameters &param, const std::vector< bool > &selector) const
 Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
selectedDerivatives (const TwoBodyDecay &tbd, const std::vector< bool > &selector) const
 Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.
 TwoBodyDecayDerivatives (double mPrimary=91.1876, double mSecondary=0.105658)
 ~TwoBodyDecayDerivatives ()

Private Member Functions

const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdm (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdphi (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdpx (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdpy (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdpz (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdtheta (const TwoBodyDecayParameters &param) const
 Derivatives of the lab frame momenta of the secondaries w.r.t.
const std::pair
< AlgebraicMatrix,
AlgebraicMatrix
dqsdzi (const TwoBodyDecayParameters &param, const DerivativeParameterName &i) const

Private Attributes

double thePrimaryMass
double theSecondaryMass


Detailed Description

/class TwoBodyDecayDerivatives

This class provides the derivatives matrices need by the class TwoBodyDecayEstimator.

/author Edmund Widl

Definition at line 14 of file TwoBodyDecayDerivatives.h.


Member Enumeration Documentation

anonymous enum

Enumerator:
dimension 

Definition at line 19 of file TwoBodyDecayDerivatives.h.

00019 { dimension = 6 };

enum TwoBodyDecayDerivatives::DerivativeParameterName

Enumerator:
px 
py 
pz 
theta 
phi 
mass 

Definition at line 21 of file TwoBodyDecayDerivatives.h.

00021 { px = 1, py = 2, pz = 3, theta = 4, phi = 5, mass = 6 };


Constructor & Destructor Documentation

TwoBodyDecayDerivatives::TwoBodyDecayDerivatives ( double  mPrimary = 91.1876,
double  mSecondary = 0.105658 
)

Definition at line 12 of file TwoBodyDecayDerivatives.cc.

00012                                                                                      : 
00013   thePrimaryMass( mPrimary ), theSecondaryMass( mSecondary ) {}

TwoBodyDecayDerivatives::~TwoBodyDecayDerivatives (  ) 

Definition at line 16 of file TwoBodyDecayDerivatives.cc.

00016 {}


Member Function Documentation

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::derivatives ( const TwoBodyDecayParameters param  )  const

Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.

z=(px,py,pz,theta,phi,m).

Definition at line 26 of file TwoBodyDecayDerivatives.cc.

References dimension, dqsdm(), dqsdphi(), dqsdpx(), dqsdpy(), dqsdpz(), dqsdtheta(), mass, phi, px, py, pz, and theta.

00027 {
00028   // get the derivatives with respect to all parameters
00029   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdpx = this->dqsdpx( param );
00030   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdpy = this->dqsdpy( param );
00031   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdpz = this->dqsdpz( param );
00032   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdtheta = this->dqsdtheta( param );
00033   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdphi = this->dqsdphi( param );
00034   pair< AlgebraicMatrix, AlgebraicMatrix > dqsdm = this->dqsdm( param );
00035 
00036   AlgebraicMatrix dqplusdz( 3, dimension );
00037   dqplusdz.sub( 1, px, dqsdpx.first );
00038   dqplusdz.sub( 1, py, dqsdpy.first );
00039   dqplusdz.sub( 1, pz, dqsdpz.first );
00040   dqplusdz.sub( 1, theta, dqsdtheta.first );
00041   dqplusdz.sub( 1, phi, dqsdphi.first );
00042   dqplusdz.sub( 1, mass, dqsdm.first );
00043 
00044   AlgebraicMatrix dqminusdz( 3, dimension );
00045   dqminusdz.sub( 1, px, dqsdpx.second );
00046   dqminusdz.sub( 1, py, dqsdpy.second );
00047   dqminusdz.sub( 1, pz, dqsdpz.second );
00048   dqminusdz.sub( 1, theta, dqsdtheta.second );
00049   dqminusdz.sub( 1, phi, dqsdphi.second );
00050   dqminusdz.sub( 1, mass, dqsdm.second );
00051 
00052   return make_pair( dqplusdz, dqminusdz );
00053 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::derivatives ( const TwoBodyDecay tbd  )  const

Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.

z=(px,py,pz,theta,phi,m).

Definition at line 20 of file TwoBodyDecayDerivatives.cc.

References TwoBodyDecay::decayParameters().

00021 {
00022   return derivatives( tbd.decayParameters() );
00023 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdm ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

the mass of the primary

Definition at line 396 of file TwoBodyDecayDerivatives.cc.

References c1, c2, funct::cos(), p2, TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, TwoBodyDecayModel::rotationMatrix(), funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00397 {
00398   double px = param[TwoBodyDecayParameters::px];
00399   double py = param[TwoBodyDecayParameters::py];
00400   double pz = param[TwoBodyDecayParameters::pz];
00401   double theta = param[TwoBodyDecayParameters::theta];
00402   double phi = param[TwoBodyDecayParameters::phi];
00403 
00404   double pT2 = px*px + py*py;
00405   double p2 = pT2 + pz*pz;
00406 
00407   double sphi = sin( phi );
00408   double cphi = cos( phi );
00409   double ctheta = cos( theta );
00410   double stheta = sin( theta );
00411 
00412   // some constants from kinematics
00413   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00414   double c2 = 1./sqrt( c1*c1 - 1. );
00415   double m2 = thePrimaryMass*thePrimaryMass;
00416 
00417   // derivative of the momentum of particle 1 in the primary's rest frame w.r.t. the primary's mass
00418   AlgebraicMatrix dpplusdm( 3, 1 );
00419   dpplusdm[0][0] = c2*0.5*c1*stheta*cphi;
00420   dpplusdm[1][0] = c2*0.5*c1*stheta*sphi;
00421   dpplusdm[2][0] = c2*theSecondaryMass*( c1*c1 + p2/m2 )/sqrt( p2 + m2 )*ctheta;
00422 
00423   // derivative of the momentum of particle 2 in the primary's rest frame w.r.t. the primary's mass
00424   AlgebraicMatrix dpminusdm( 3, 1 );
00425   dpminusdm[0][0] = -dpplusdm[0][0];
00426   dpminusdm[1][0] = -dpplusdm[1][0];
00427   dpminusdm[2][0] = -dpplusdm[2][0];
00428 
00429   TwoBodyDecayModel decayModel;
00430   AlgebraicMatrix rotMat = decayModel.rotationMatrix( px, py, pz );
00431 
00432   AlgebraicMatrix dqplusdm = rotMat*dpplusdm;
00433   AlgebraicMatrix dqminusdm = rotMat*dpminusdm;
00434 
00435   return make_pair( dqplusdm, dqminusdm );
00436 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdphi ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

the decay angle phi in the primary's rest frame.

Definition at line 358 of file TwoBodyDecayDerivatives.cc.

References c1, c2, funct::cos(), TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, TwoBodyDecayModel::rotationMatrix(), funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00359 {
00360   double px = param[TwoBodyDecayParameters::px];
00361   double py = param[TwoBodyDecayParameters::py];
00362   double pz = param[TwoBodyDecayParameters::pz];
00363   double theta = param[TwoBodyDecayParameters::theta];
00364   double phi = param[TwoBodyDecayParameters::phi];
00365 
00366   double sphi = sin( phi );
00367   double cphi = cos( phi );
00368   double stheta = sin( theta );
00369 
00370   // some constants from kinematics
00371   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00372   double c2 = sqrt( c1*c1 - 1. );
00373 
00374   // derivative of the momentum of particle 1 in the primary's rest frame w.r.t. phi
00375   AlgebraicMatrix dpplusdphi( 3, 1 );
00376   dpplusdphi[0][0] = -theSecondaryMass*c2*stheta*sphi;
00377   dpplusdphi[1][0] = theSecondaryMass*c2*stheta*cphi;
00378   dpplusdphi[2][0] = 0.;
00379 
00380   // derivative of the momentum of particle 2 in the primary's rest frame w.r.t. phi
00381   AlgebraicMatrix dpminusdphi( 3, 1 );
00382   dpminusdphi[0][0] = theSecondaryMass*c2*stheta*sphi;
00383   dpminusdphi[1][0] = -theSecondaryMass*c2*stheta*cphi;
00384   dpminusdphi[2][0] = 0.;
00385 
00386   TwoBodyDecayModel decayModel;
00387   AlgebraicMatrix rotMat = decayModel.rotationMatrix( px, py, pz );
00388 
00389   AlgebraicMatrix dqplusdphi = rotMat*dpplusdphi;
00390   AlgebraicMatrix dqminusdphi = rotMat*dpminusdphi;
00391 
00392   return make_pair( dqplusdphi, dqminusdphi );
00393 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdpx ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

px of the primary particle.

Definition at line 94 of file TwoBodyDecayDerivatives.cc.

References c1, c2, c3, c4, funct::cos(), p, p2, TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00095 {
00096   double px = param[TwoBodyDecayParameters::px];
00097   double py = param[TwoBodyDecayParameters::py];
00098   double pz = param[TwoBodyDecayParameters::pz];
00099   double theta = param[TwoBodyDecayParameters::theta];
00100   double phi = param[TwoBodyDecayParameters::phi];
00101 
00102   // compute transverse and absolute momentum
00103   double pT2 = px*px + py*py;
00104   double p2 = pT2 + pz*pz;
00105   double pT = sqrt( pT2 );
00106   double p = sqrt( p2 );
00107 
00108   double sphi = sin( phi );
00109   double cphi = cos( phi );
00110   double stheta = sin( theta );
00111   double ctheta = cos( theta );
00112 
00113   // some constants from kinematics
00114   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00115   double c2 = sqrt( c1*c1 - 1. );
00116   double c3 = 0.5*c2*ctheta/c1;
00117   double c4 = sqrt( p2 + thePrimaryMass*thePrimaryMass );
00118 
00119   // momentum of decay particle 1 in the primary's boosted frame
00120   AlgebraicMatrix pplus( 3, 1 );
00121   pplus[0][0] = theSecondaryMass*c2*stheta*cphi;
00122   pplus[1][0] = theSecondaryMass*c2*stheta*sphi;
00123   pplus[2][0] = 0.5*p + c3*c4;
00124 
00125   // momentum of decay particle 2 in the primary's boosted frame
00126   AlgebraicMatrix pminus( 3, 1 );
00127   pminus[0][0] = -pplus[0][0];
00128   pminus[1][0] = -pplus[1][0];
00129   pminus[2][0] = 0.5*p - c3*c4;
00130 
00131   // derivative of rotation matrix w.r.t. px
00132   AlgebraicMatrix dRotMatdpx( 3, 3 );
00133 
00134   dRotMatdpx[0][0] = pz/(pT*p)*(1.-px*px*(1./pT2+1./p2));
00135   dRotMatdpx[0][1] = px*py/(pT*pT2);
00136   dRotMatdpx[0][2] = (1.-px*px/p2)/p;
00137 
00138   dRotMatdpx[1][0] = -px*py*pz/(pT*p)*(1./pT2+1./p2);
00139   dRotMatdpx[1][1] = (1.-px*px/pT2)/pT;
00140   dRotMatdpx[1][2] = -px*py/(p*p2);
00141 
00142   dRotMatdpx[2][0] = -(1./pT-pT/p2)*px/p;
00143   dRotMatdpx[2][1] = 0.;
00144   dRotMatdpx[2][2] = -px*pz/(p*p2);
00145 
00146   // derivative of the momentum of particle 1 in the lab frame w.r.t. px
00147   double dpplusdpx = px*( 0.5/p + c3/c4 );
00148 
00149   AlgebraicMatrix dqplusdpx = dRotMatdpx*pplus;
00150   dqplusdpx[0][0] += px*dpplusdpx/p;
00151   dqplusdpx[1][0] += py*dpplusdpx/p;
00152   dqplusdpx[2][0] += pz*dpplusdpx/p;
00153 
00154   // derivative of the momentum of particle 2 in the lab frame w.r.t. px
00155   double dpminusdpx = px*( 0.5/p - c3/c4 );
00156 
00157   AlgebraicMatrix dqminusdpx = dRotMatdpx*pminus; 
00158   dqminusdpx[0][0] += px*dpminusdpx/p;
00159   dqminusdpx[1][0] += py*dpminusdpx/p;
00160   dqminusdpx[2][0] += pz*dpminusdpx/p;
00161 
00162   // return result
00163   return make_pair( dqplusdpx, dqminusdpx );
00164 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdpy ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

py of the primary particle.

Definition at line 167 of file TwoBodyDecayDerivatives.cc.

References c1, c2, c3, c4, funct::cos(), p, p2, TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00168 {
00169   double px = param[TwoBodyDecayParameters::px];
00170   double py = param[TwoBodyDecayParameters::py];
00171   double pz = param[TwoBodyDecayParameters::pz];
00172   double theta = param[TwoBodyDecayParameters::theta];
00173   double phi = param[TwoBodyDecayParameters::phi];
00174 
00175   // compute transverse and absolute momentum
00176   double pT2 = px*px + py*py;
00177   double p2 = pT2 + pz*pz;
00178   double pT = sqrt( pT2 );
00179   double p = sqrt( p2 );
00180 
00181   double sphi = sin( phi );
00182   double cphi = cos( phi );
00183   double stheta = sin( theta );
00184   double ctheta = cos( theta );
00185 
00186   // some constants from kinematics
00187   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00188   double c2 = sqrt( c1*c1 - 1. );
00189   double c3 = 0.5*c2*ctheta/c1;
00190   double c4 = sqrt( p2 + thePrimaryMass*thePrimaryMass );
00191 
00192   // momentum of decay particle 1 in the rest frame of the primary
00193   AlgebraicMatrix pplus( 3, 1 );
00194   pplus[0][0] = theSecondaryMass*c2*stheta*cphi;
00195   pplus[1][0] = theSecondaryMass*c2*stheta*sphi;
00196   pplus[2][0] = 0.5*p + c3*c4;
00197 
00198   // momentum of decay particle 2 in the rest frame of the primary
00199   AlgebraicMatrix pminus( 3, 1 );
00200   pminus[0][0] = -pplus[0][0];
00201   pminus[1][0] = -pplus[1][0];
00202   pminus[2][0] = 0.5*p - c3*c4;
00203 
00204   // derivative of rotation matrix w.r.t. py
00205   AlgebraicMatrix dRotMatdpy( 3, 3 );
00206 
00207   dRotMatdpy[0][0] = -px*py*pz/(pT*p)*(1./pT2+1./p2);
00208   dRotMatdpy[0][1] = (py*py/pT2-1.)/pT;
00209   dRotMatdpy[0][2] = -px*py/(p*p2);
00210 
00211   dRotMatdpy[1][0] = pz/(pT*p)*(1.-py*py*(1./pT2+1./p2));
00212   dRotMatdpy[1][1] = -px*py/(pT*pT2);
00213   dRotMatdpy[1][2] = (1.-py*py/p2)/p;
00214 
00215   dRotMatdpy[2][0] = -(1./pT-pT/p2)*py/p;
00216   dRotMatdpy[2][1] = 0.;
00217   dRotMatdpy[2][2] = -py*pz/(p*p2);
00218 
00219   // derivative of the momentum of particle 1 in the lab frame w.r.t. py
00220   double dpplusdpy = py*( 0.5/p + c3/c4 );
00221 
00222   AlgebraicMatrix dqplusdpy = dRotMatdpy*pplus;
00223   dqplusdpy[0][0] += px*dpplusdpy/p;
00224   dqplusdpy[1][0] += py*dpplusdpy/p;
00225   dqplusdpy[2][0] += pz*dpplusdpy/p;
00226 
00227   // derivative of the momentum of particle 2 in the lab frame w.r.t. py
00228   double dpminusdpy = py*( 0.5/p - c3/c4 );
00229 
00230   AlgebraicMatrix dqminusdpy = dRotMatdpy*pminus;
00231   dqminusdpy[0][0] += px*dpminusdpy/p;
00232   dqminusdpy[1][0] += py*dpminusdpy/p;
00233   dqminusdpy[2][0] += pz*dpminusdpy/p;
00234 
00235   // return result
00236   return make_pair( dqplusdpy, dqminusdpy );
00237 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdpz ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

pz of the primary particle.

Definition at line 240 of file TwoBodyDecayDerivatives.cc.

References c1, c2, c3, c4, funct::cos(), p, p2, TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00241 {
00242   double px = param[TwoBodyDecayParameters::px];
00243   double py = param[TwoBodyDecayParameters::py];
00244   double pz = param[TwoBodyDecayParameters::pz];
00245   double theta = param[TwoBodyDecayParameters::theta];
00246   double phi = param[TwoBodyDecayParameters::phi];
00247 
00248   // compute transverse and absolute momentum
00249   double pT2 = px*px + py*py;
00250   double p2 = pT2 + pz*pz;
00251   double pT = sqrt( pT2 );
00252   double p = sqrt( p2 );
00253 
00254   double sphi = sin( phi );
00255   double cphi = cos( phi );
00256   double stheta = sin( theta );
00257   double ctheta = cos( theta );
00258 
00259   // some constants from kinematics
00260   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00261   double c2 = sqrt( c1*c1 - 1. );
00262   double c3 = 0.5*c2*ctheta/c1;
00263   double c4 = sqrt( p2 + thePrimaryMass*thePrimaryMass );
00264 
00265   // momentum of decay particle 1 in the rest frame of the primary
00266   AlgebraicMatrix pplus( 3, 1 );
00267   pplus[0][0] = theSecondaryMass*c2*stheta*cphi;
00268   pplus[1][0] = theSecondaryMass*c2*stheta*sphi;
00269   pplus[2][0] = 0.5*p + c3*c4;
00270 
00271   // momentum of decay particle 2 in the rest frame of the primary
00272   AlgebraicMatrix pminus( 3, 1 );
00273   pminus[0][0] = -pplus[0][0];
00274   pminus[1][0] = -pplus[1][0];
00275   pminus[2][0] = 0.5*p - c3*c4;
00276 
00277   // derivative of rotation matrix w.r.t. py
00278   AlgebraicMatrix dRotMatdpz( 3, 3 );
00279 
00280   dRotMatdpz[0][0] = px/(pT*p)*(1.-pz*pz/p2);
00281   dRotMatdpz[0][1] = 0.;
00282   dRotMatdpz[0][2] = -px*pz/(p*p2);
00283 
00284   dRotMatdpz[1][0] = py/(p*pT)*(1.-pz*pz/p2);
00285   dRotMatdpz[1][1] = 0.;
00286   dRotMatdpz[1][2] = -py*pz/(p*p2);
00287 
00288   dRotMatdpz[2][0] = pT*pz/(p*p2);
00289   dRotMatdpz[2][1] = 0.;
00290   dRotMatdpz[2][2] = (1.-pz*pz/p2)/p;
00291 
00292   // derivative of the momentum of particle 1 in the lab frame w.r.t. pz
00293   double dpplusdpz = pz*( 0.5/p + c3/c4 );
00294 
00295   AlgebraicMatrix dqplusdpz = dRotMatdpz*pplus;
00296   dqplusdpz[0][0] += px*dpplusdpz/p;
00297   dqplusdpz[1][0] += py*dpplusdpz/p;
00298   dqplusdpz[2][0] += pz*dpplusdpz/p;
00299 
00300   // derivative of the momentum of particle 2 in the lab frame w.r.t. pz
00301   double dpminusdpz = pz*( 0.5/p - c3/c4 );
00302 
00303   AlgebraicMatrix dqminusdpz = dRotMatdpz*pminus;
00304   dqminusdpz[0][0] += px*dpminusdpz/p;
00305   dqminusdpz[1][0] += py*dpminusdpz/p;
00306   dqminusdpz[2][0] += pz*dpminusdpz/p;
00307 
00308   // return result
00309   return make_pair( dqplusdpz, dqminusdpz );
00310 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdtheta ( const TwoBodyDecayParameters param  )  const [private]

Derivatives of the lab frame momenta of the secondaries w.r.t.

the decay angle theta in the primary's rest frame.

Definition at line 313 of file TwoBodyDecayDerivatives.cc.

References c1, c2, c3, c4, funct::cos(), p2, TwoBodyDecayParameters::phi, phi, TwoBodyDecayParameters::px, px, TwoBodyDecayParameters::py, py, TwoBodyDecayParameters::pz, pz, TwoBodyDecayModel::rotationMatrix(), funct::sin(), funct::sqrt(), thePrimaryMass, theSecondaryMass, TwoBodyDecayParameters::theta, and theta.

Referenced by derivatives(), and dqsdzi().

00314 {
00315   double px = param[TwoBodyDecayParameters::px];
00316   double py = param[TwoBodyDecayParameters::py];
00317   double pz = param[TwoBodyDecayParameters::pz];
00318   double theta = param[TwoBodyDecayParameters::theta];
00319   double phi = param[TwoBodyDecayParameters::phi];
00320 
00321   // compute transverse and absolute momentum
00322   double pT2 = px*px + py*py;
00323   double p2 = pT2 + pz*pz;
00324 
00325   double sphi = sin( phi );
00326   double cphi = cos( phi );
00327   double stheta = sin( theta );
00328   double ctheta = cos( theta );
00329 
00330   // some constants from kinematics
00331   double c1 = 0.5*thePrimaryMass/theSecondaryMass;
00332   double c2 = sqrt( c1*c1 - 1. );
00333   double c3 = -0.5*c2*stheta/c1;
00334   double c4 = sqrt( p2 + thePrimaryMass*thePrimaryMass );
00335 
00336   // derivative of the momentum of particle 1 in the primary's rest frame w.r.t. theta
00337   AlgebraicMatrix dpplusdtheta( 3, 1 );
00338   dpplusdtheta[0][0] = theSecondaryMass*c2*ctheta*cphi;
00339   dpplusdtheta[1][0] = theSecondaryMass*c2*ctheta*sphi;
00340   dpplusdtheta[2][0] = c3*c4;
00341 
00342   // derivative of the momentum of particle 2 in the primary's rest frame w.r.t. theta
00343   AlgebraicMatrix dpminusdtheta( 3, 1 );
00344   dpminusdtheta[0][0] = -theSecondaryMass*c2*ctheta*cphi;
00345   dpminusdtheta[1][0] = -theSecondaryMass*c2*ctheta*sphi;
00346   dpminusdtheta[2][0] = -c3*c4;
00347 
00348   TwoBodyDecayModel decayModel;
00349   AlgebraicMatrix rotMat = decayModel.rotationMatrix( px, py, pz );
00350 
00351   AlgebraicMatrix dqplusdtheta = rotMat*dpplusdtheta;
00352   AlgebraicMatrix dqminusdtheta = rotMat*dpminusdtheta;
00353 
00354   return make_pair( dqplusdtheta, dqminusdtheta );
00355 }

const pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::dqsdzi ( const TwoBodyDecayParameters param,
const DerivativeParameterName i 
) const [private]

Definition at line 440 of file TwoBodyDecayDerivatives.cc.

References dqsdm(), dqsdphi(), dqsdpx(), dqsdpy(), dqsdpz(), dqsdtheta(), Exception, mass, phi, px, py, pz, and theta.

00441 {
00442   switch ( i )
00443   {
00444   case TwoBodyDecayDerivatives::px :
00445     return dqsdpx( param );
00446     break;
00447   case TwoBodyDecayDerivatives::py :
00448     return dqsdpy( param );
00449     break;
00450   case TwoBodyDecayDerivatives::pz :
00451     return dqsdpz( param );
00452     break;
00453   case TwoBodyDecayDerivatives::theta :
00454     return dqsdtheta( param );
00455     break;
00456   case TwoBodyDecayDerivatives::phi :
00457     return dqsdphi( param );
00458     break;
00459   case TwoBodyDecayDerivatives::mass :
00460     return dqsdm( param );
00461     break;
00462   default:
00463     throw cms::Exception( "BadConfig" ) << "@SUB=TwoBodyDecayDerivatives::dqsdzi"
00464                                         << "no decay parameter related to selector (" << i << ").";
00465   };
00466 
00467   return make_pair( AlgebraicMatrix( 3, 1, 0 ), AlgebraicMatrix( 3, 1, 0 ) );
00468 }

const std::pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::selectedDerivatives ( const TwoBodyDecayParameters param,
const std::vector< bool > &  selector 
) const

Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.

the selected parameters.

const std::pair< AlgebraicMatrix, AlgebraicMatrix > TwoBodyDecayDerivatives::selectedDerivatives ( const TwoBodyDecay tbd,
const std::vector< bool > &  selector 
) const

Derivatives of the lab frame momenta (in cartesian representation) of the secondaries w.r.t.

the selected parameters.


Member Data Documentation

double TwoBodyDecayDerivatives::thePrimaryMass [private]

Definition at line 76 of file TwoBodyDecayDerivatives.h.

Referenced by dqsdm(), dqsdphi(), dqsdpx(), dqsdpy(), dqsdpz(), and dqsdtheta().

double TwoBodyDecayDerivatives::theSecondaryMass [private]

Definition at line 77 of file TwoBodyDecayDerivatives.h.

Referenced by dqsdm(), dqsdphi(), dqsdpx(), dqsdpy(), dqsdpz(), and dqsdtheta().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:34:46 2009 for CMSSW by  doxygen 1.5.4