|  | ATLAS Offline Software
    | 
 
 
 
#include <V0Tools.h>
|  | 
|  | V0Tools (const std::string &t, const std::string &n, const IInterface *p) | 
|  | Default constructor due to Athena interface.  More... 
 | 
|  | 
|  | ~V0Tools () | 
|  | Virtual destructor.  More... 
 | 
|  | 
| StatusCode | initialize () | 
|  | Standard AlgTool methods.  More... 
 | 
|  | 
| double | invariantMass (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const | 
|  | Methods, returning the invariant mass, error on the invariant mass and Chi2 probability of the invariant mass of an xAOD::Vertex for a given hypothesis for the masses of the input tracks and the V0 mass.  More... 
 | 
|  | 
| double | invariantMass (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| double | invariantMassError (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const | 
|  | 
| double | invariantMassError (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| double | invariantMassProbability (const xAOD::Vertex *vxCandidate, double V0Mass, double posTrackMass, double negTrackMass) const | 
|  | 
| double | invariantMassProbability (const xAOD::Vertex *vxCandidate, double V0Mass, std::span< const double > masses) const | 
|  | 
| double | massProbability (double V0Mass, double mass, double massErr) const | 
|  | 
| double | vertexProbability (const xAOD::Vertex *vxCandidate) const | 
|  | Probability of the vertex fit.  More... 
 | 
|  | 
| double | rxyError (const xAOD::Vertex *vxCandidate) const | 
|  | error on Rxy  More... 
 | 
|  | 
| double | rxyError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | wrt an xAOD::Vertex vertex  More... 
 | 
|  | 
| double | rxyError (const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex) const | 
|  | wrt an Amg::Vector3D vertex  More... 
 | 
|  | 
| double | pTError (const xAOD::Vertex *vxCandidate) const | 
|  | error on the transverse momentum of the V0  More... 
 | 
|  | 
| double | separation (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | statistical separation (Mahalanobis distance)  More... 
 | 
|  | 
| double | separation (const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex) const | 
|  | 
| double | a0xyError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | errors on a0xy and a0z  More... 
 | 
|  | 
| double | a0zError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | 
| double | a0Error (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, bool in3D=true) const | 
|  | error on a0  More... 
 | 
|  | 
| double | lxyError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | error on lxy  More... 
 | 
|  | 
| double | lxyzError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) const | 
|  | error on lxyz  More... 
 | 
|  | 
| double | tau (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass) const | 
|  | proper time wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy/pT  More... 
 | 
|  | 
| double | tau (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | proper time wrt an xAOD::Vertex vertex assuming track masses  More... 
 | 
|  | 
| double | tau (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass, double massV0) const | 
|  | proper time wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass (imposing massV0) making a correction to the proper time consistent with the imposed V0 mass  More... 
 | 
|  | 
| double | tau (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses, double massV0) const | 
|  | proper time wrt an xAOD::Vertex vertex assuming track masses (imposing massV0) making a correction to the proper time consistent with the imposed V0 mass  More... 
 | 
|  | 
| double | tauError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass) const | 
|  | proper time error wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy/pT  More... 
 | 
|  | 
| double | tauError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | proper time error wrt an xAOD::Vertex vertex assuming track masses  More... 
 | 
|  | 
| double | tauError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double posTrackMass, double negTrackMass, double massV0) const | 
|  | proper time error wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass (imposing massV0) independent of massV0, variable included to match the corresponding proper time method  More... 
 | 
|  | 
| double | tauError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses, double massV0) const | 
|  | proper time error wrt an xAOD::Vertex vertex assuming track masses (imposing massV0) independent of massV0, variable included to match the corresponding proper time method  More... 
 | 
|  | 
| double | tauError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double massV0) const | 
|  | proper time error wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment  More... 
 | 
|  | 
| Amg::MatrixX | tauMassCovariance (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | mass-proper time covariance  More... 
 | 
|  | 
| double | massTauCov (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | 
| double | tau3D (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | proper time in 3D wrt an xAOD::Vertex vertex assuming track masses  More... 
 | 
|  | 
| double | tau3DError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, std::span< const double > masses) const | 
|  | proper time error in 3D wrt an xAOD::Vertex vertex assuming track masses  More... 
 | 
|  | 
| double | tau3DError (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double massV0) const | 
|  | proper time error in 3D wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment  More... 
 | 
|  | 
| double | invariantMassBeforeFitIP (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | create neutral TrackParticle from vxCandidate  More... 
 | 
|  | 
| double | invariantMassBeforeFit (const xAOD::Vertex *vxCandidate, std::span< const double > masses, const EventContext &, const Trk::IExtrapolator *) const | 
|  | 
| double | invariantMassBeforeFit (const xAOD::Vertex *vxCandidate, std::span< const double > masses, const Amg::Vector3D &vertex, const EventContext &, const Trk::IExtrapolator *) const | 
|  | 
| double | invariantMassErrorBeforeFitIP (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| double | invariantMassErrorBeforeFit (const xAOD::Vertex *vxCandidate, std::span< const double > masses, const EventContext &ctx, const Trk::IExtrapolator *) const | 
|  | 
| double | invariantMassErrorBeforeFit (const xAOD::Vertex *vxCandidate, std::span< const double > masses, const Amg::Vector3D &vertex, const EventContext &ctx, const Trk::IExtrapolator *) const | 
|  | 
| ServiceHandle< StoreGateSvc > & | evtStore () | 
|  | The standard StoreGateSvc(event store) Returns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | evtStore () const | 
|  | The standard StoreGateSvc(event store) Returns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| const ServiceHandle< StoreGateSvc > & | detStore () const | 
|  | The standard StoreGateSvc/DetectorStoreReturns (kind of) a pointer to theStoreGateSvc.  More...
 | 
|  | 
| virtual StatusCode | sysInitialize () override | 
|  | Perform system initialization for an algorithm.  More... 
 | 
|  | 
| virtual StatusCode | sysStart () override | 
|  | Handle START transition.  More... 
 | 
|  | 
| virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override | 
|  | Return this algorithm's input handles.  More... 
 | 
|  | 
| virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override | 
|  | Return this algorithm's output handles.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T, V, H > &t) | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") | 
|  | Declare a new Gaudi property.  More... 
 | 
|  | 
| void | updateVHKA (Gaudi::Details::PropertyBase &) | 
|  | 
| MsgStream & | msg () const | 
|  | 
| MsgStream & | msg (const MSG::Level lvl) const | 
|  | 
| bool | msgLvl (const MSG::Level lvl) const | 
|  | 
|  | 
| static const InterfaceID & | interfaceID () | 
|  | AlgTool interface methods.  More... 
 | 
|  | 
| static Amg::Vector3D | trackMomentum (const xAOD::Vertex *vxCandidate, unsigned int trkIndex) | 
|  | Methods, returning the refitted 3-momenta of the positive and negative tracks and the V0 (for more than one track with the same charge, the first one is returned)  More... 
 | 
|  | 
| static Amg::Vector3D | positiveTrackMomentum (const xAOD::Vertex *vxCandidate) | 
|  | 
| static Amg::Vector3D | negativeTrackMomentum (const xAOD::Vertex *vxCandidate) | 
|  | 
| static Amg::Vector3D | V0Momentum (const xAOD::Vertex *vxCandidate) | 
|  | 
| static xAOD::TrackParticle::FourMom_t | track4Momentum (const xAOD::Vertex *vxCandidate, unsigned int trkIndex, double trackMass) | 
|  | Methods, returning the refitted 4-momenta of the positive and negative tracks and the V0 for a given hypothesis for the masses of the input tracks and the V0 mass.  More... 
 | 
|  | 
| static xAOD::TrackParticle::FourMom_t | positiveTrack4Momentum (const xAOD::Vertex *vxCandidate, double posTrackMass) | 
|  | 
| static xAOD::TrackParticle::FourMom_t | negativeTrack4Momentum (const xAOD::Vertex *vxCandidate, double negTrackMass) | 
|  | 
| static xAOD::TrackParticle::FourMom_t | V04Momentum (const xAOD::Vertex *vxCandidate, double V0Mass) | 
|  | 
| static float | ndof (const xAOD::Vertex *vxCandidate) | 
|  | NDoF of the vertex fit.  More... 
 | 
|  | 
| static float | chisq (const xAOD::Vertex *vxCandidate) | 
|  | Chisq of the vertex fit.  More... 
 | 
|  | 
| static Amg::Vector3D | vtx (const xAOD::Vertex *vxCandidate) | 
|  | vertex position  More... 
 | 
|  | 
| static double | rxy (const xAOD::Vertex *vxCandidate) | 
|  | Rxy of the vertex.  More... 
 | 
|  | 
| static double | rxy (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | wrt an xAOD::Vertex vertex  More... 
 | 
|  | 
| static double | rxy (const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex) | 
|  | wrt an Amg::Vector3D vertex  More... 
 | 
|  | 
| static double | rxy_var (double dx, double dy, const Amg::MatrixX &cov) | 
|  | rxy_var  More... 
 | 
|  | 
| static double | pT (const xAOD::Vertex *vxCandidate) | 
|  | transverse momentum of the V0  More... 
 | 
|  | 
| static double | a0xy (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | closest distance in Z and the transverse plane of the momentum vector to an xAOD::Vertex a0xy using transverse measurements only a0z using the point of closest approach (3D)  More... 
 | 
|  | 
| static double | a0z (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | 
| static double | a0 (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | closest distance of the momentum vector to an xAOD::Vertex  More... 
 | 
|  | 
| static Amg::Vector3D | pca (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | point of closest approach of the momentum vector to an xAOD::Vertex  More... 
 | 
|  | 
| static double | lxy (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | projection of distance in xy of the vertex wrt an xAOD::Vertex vertex along the momentum direction (Px*dx+Py*dy)/pT  More... 
 | 
|  | 
| static double | lxyz (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | projection of distance in 3D of the vertex wrt an xAOD::Vertex vertex along the momentum direction (Px*dx+Py*dy+Pz*dz)/p  More... 
 | 
|  | 
| static double | tau (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double massV0) | 
|  | proper time wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment  More... 
 | 
|  | 
| static double | tau3D (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex, double massV0) | 
|  | proper time in 3D wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment  More... 
 | 
|  | 
| static double | thetaStar (const xAOD::Vertex *vxCandidate, double mass1, double mass2) | 
|  | Polarization angles in helicity frame (using positive track):  More... 
 | 
|  | 
| static double | cosThetaStar (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) | 
|  | cosThetaStar  More... 
 | 
|  | 
| static double | cosThetaStar (const CLHEP::HepLorentzVector &posTrack, const CLHEP::HepLorentzVector &negTrack) | 
|  | 
| static double | phiStar (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) | 
|  | phiStar  More... 
 | 
|  | 
| static double | phiStar (const CLHEP::HepLorentzVector &v0, const CLHEP::HepLorentzVector &track) | 
|  | 
| static double | cosTheta (const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex) | 
|  | cosTheta (pointing angle to an Amg::Vector3D or an xAOD::Vertex)  More... 
 | 
|  | 
| static double | cosTheta (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | 
| static double | cosTheta_xy (const xAOD::Vertex *vxCandidate, const Amg::Vector3D &vertex) | 
|  | cosTheta (pointing angle to an Amg::Vector3D or an xAOD::Vertex in transverse plane)  More... 
 | 
|  | 
| static double | cosTheta_xy (const xAOD::Vertex *vxCandidate, const xAOD::Vertex *vertex) | 
|  | 
| static float | charge (const xAOD::Vertex *vxCandidate) | 
|  | sum of the charges of the tracks in the vertex  More... 
 | 
|  | 
| static const xAOD::TrackParticle * | origTrack (const xAOD::Vertex *vxCandidate, int trkIndex) | 
|  | pointers to original tracks  More... 
 | 
|  | 
| static const xAOD::TrackParticle * | positiveOrigTrack (const xAOD::Vertex *vxCandidate) | 
|  | 
| static const xAOD::TrackParticle * | negativeOrigTrack (const xAOD::Vertex *vxCandidate) | 
|  | 
| static Amg::MatrixX | convertCovMatrix (const xAOD::Vertex *vxCandidate) | 
|  | 
| static Amg::MatrixX | makeV0Cov (const xAOD::Vertex *vxCandidate) | 
|  | 
|  | 
| double | massErrorV0Fitter (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const | 
|  | 
| double | massErrorV0Fitter (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| double | massErrorVKalVrt (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const | 
|  | 
| double | massErrorVKalVrt (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| double | massErrorVxCandidate (const xAOD::Vertex *vxCandidate, double posTrackMass, double negTrackMass) const | 
|  | 
| double | massErrorVxCandidate (const xAOD::Vertex *vxCandidate, std::span< const double > masses) const | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKey>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleKeyArray>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) | 
|  | specialization for handling Gaudi::Property<SG::VarHandleBase>  More... 
 | 
|  | 
| Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) | 
|  | specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>  More... 
 | 
|  | 
Definition at line 35 of file V0Tools.h.
 
◆ StoreGateSvc_t
◆ V0Tools()
      
        
          | V0Tools::V0Tools | ( | const std::string & | t, | 
        
          |  |  | const std::string & | n, | 
        
          |  |  | const IInterface * | p | 
        
          |  | ) |  |  | 
      
 
 
◆ ~V0Tools()
◆ a0()
◆ a0Error()
error on a0 
Definition at line 814 of file V0Tools.cxx.
  824       double trkCharge = 1.;
 
  825       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
  854     double P = sqrt(Px*Px+Py*Py+Pz*Pz);
 
  857     double da0dx  = (Px/
P*
r*cosineTheta - 
dx)/a0val;
 
  858     double da0dy  = (Py/
P*
r*cosineTheta - 
dy)/a0val;
 
  859     double da0dz  = (Pz/
P*
r*cosineTheta - dz)/a0val;
 
  860     double da0dx0 = -da0dx;
 
  861     double da0dy0 = -da0dy;
 
  862     double da0dz0 = -da0dz;
 
  863     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  864       da0dqOverP[
it] = -(
r*cosineTheta/
P)*(da0dx*dpxdqOverP[
it]+da0dy*dpydqOverP[
it]+da0dz*dpzdqOverP[
it]);
 
  865       da0dtheta[
it]  = -(
r*cosineTheta/
P)*(da0dx*dpxdtheta[
it]+da0dy*dpydtheta[
it]+da0dz*dpzdtheta[
it]);
 
  866       da0dphi[
it]    = -(
r*cosineTheta/
P)*(da0dx*dpxdphi[
it]+da0dy*dpydphi[
it]);
 
  869     unsigned int ndim = 0;
 
  870     if (fullCov.size() != 0) {
 
  871       ndim = fullCov.rows();
 
  877     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
  879       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  882         D_vec(5*
it+2)  = da0dphi[
it];
 
  883         D_vec(5*
it+3)  = da0dtheta[
it];
 
  884         D_vec(5*
it+4)  = da0dqOverP[
it];
 
  886       D_vec(5*NTrk+0) = da0dx;
 
  887       D_vec(5*NTrk+1) = da0dy;
 
  888       D_vec(5*NTrk+2) = da0dz;
 
  889       D_vec(5*NTrk+3) = da0dx0;
 
  890       D_vec(5*NTrk+4) = da0dy0;
 
  891       D_vec(5*NTrk+5) = da0dz0;
 
  894       if (fullCov.size() != 0) {
 
  895         W_mat.block(0,0,ndim,ndim) = fullCov;
 
  898         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
  899         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
  901       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
  902       V0_err = D_vec.transpose() * W_mat * D_vec;
 
  903     } 
else if (ndim == 3*NTrk+3) {
 
  908       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  909         D_vec(3*
it+3)  = da0dphi[
it];
 
  910         D_vec(3*
it+4)  = da0dtheta[
it];
 
  911         D_vec(3*
it+5)  = da0dqOverP[
it];
 
  913       D_vec(3*NTrk+3) = da0dx0;
 
  914       D_vec(3*NTrk+4) = da0dy0;
 
  915       D_vec(3*NTrk+5) = da0dz0;
 
  918       W_mat.block(0,0,ndim,ndim) = fullCov;
 
  919       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) =  
vertex->covariancePosition();
 
  920       V0_err = D_vec.transpose() * W_mat * D_vec;
 
  923     double a0Errsq = V0_err(0,0);
 
  924     if (a0Errsq <= 0.) 
ATH_MSG_DEBUG(
"a0Error: negative sqrt a0Errsq " << a0Errsq);
 
  925     double a0Err = (a0Errsq>0.) ? sqrt(a0Errsq) : 0.;
 
  932     double dx = vert.x();
 
  933     double dy = vert.y();
 
 
 
 
◆ a0xy()
closest distance in Z and the transverse plane of the momentum vector to an xAOD::Vertex a0xy using transverse measurements only a0z using the point of closest approach (3D) 
Definition at line 671 of file V0Tools.cxx.
 
 
◆ a0xyError()
errors on a0xy and a0z 
Definition at line 809 of file V0Tools.cxx.
  812     double dx = vert.x();
 
 
 
 
◆ a0z()
Definition at line 679 of file V0Tools.cxx.
  684     double sinTheta = ((1.-cosineTheta*cosineTheta)>0.) ? sqrt((1.-cosineTheta*cosineTheta)) : 0.;
 
  685     return (
vtx(vxCandidate)-
vertex->position()).mag() * sinTheta;
 
 
 
 
◆ a0zError()
Definition at line 695 of file V0Tools.cxx.
  705       double trkCharge = 1.;
 
  706       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
  722     double P2 = Px*Px+Py*Py+Pz*Pz;
 
  723     double B = Px*
dx+Py*
dy+Pz*dz;
 
  725     double da0dx  = (Px*Pz)/P2;
 
  726     double da0dy  = (Py*Pz)/P2;
 
  727     double da0dz  = (Pz*Pz)/P2 - 1.;
 
  728     double da0dx0 = -da0dx;
 
  729     double da0dy0 = -da0dy;
 
  730     double da0dz0 = -da0dz;
 
  731     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  732       double dP2dqOverP = 2.*(Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it]);
 
  733       double dP2dtheta  = 2.*(Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it]);
 
  734       double dP2dphi    = 2.*(Px*dpxdphi[
it]+Py*dpydphi[
it]);
 
  735       da0dqOverP[
it] =  (
B*(P2*dpzdqOverP[
it]-Pz*dP2dqOverP) +
 
  736                          Pz*P2*(
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it]+dz*dpzdqOverP[
it]))/(P2*P2);
 
  737       da0dtheta[
it]  =  (
B*(P2*dpzdtheta[
it]-Pz*dP2dtheta) +
 
  738                          Pz*P2*(
dx*dpxdtheta[
it]+
dy*dpydtheta[
it]+dz*dpzdtheta[
it]))/(P2*P2);
 
  739       da0dphi[
it]    = -(
B*Pz*dP2dphi -
 
  740                          Pz*P2*(
dx*dpxdphi[
it]+
dy*dpydphi[
it]))/(P2*P2);
 
  743     unsigned int ndim = 0;
 
  744     if (fullCov.size() != 0) {
 
  745       ndim = fullCov.rows();
 
  751     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
  753       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  756         D_vec(5*
it+2)  = da0dphi[
it];
 
  757         D_vec(5*
it+3)  = da0dtheta[
it];
 
  758         D_vec(5*
it+4)  = da0dqOverP[
it];
 
  760       D_vec(5*NTrk+0) = da0dx;
 
  761       D_vec(5*NTrk+1) = da0dy;
 
  762       D_vec(5*NTrk+2) = da0dz;
 
  763       D_vec(5*NTrk+3) = da0dx0;
 
  764       D_vec(5*NTrk+4) = da0dy0;
 
  765       D_vec(5*NTrk+5) = da0dz0;
 
  768       if (fullCov.size() != 0) {
 
  769         W_mat.block(0,0,ndim,ndim) = fullCov;
 
  772         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
  773         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
  775       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) =  
vertex->covariancePosition();
 
  776       V0_err = D_vec.transpose() * W_mat * D_vec;
 
  777     } 
else if (ndim == 3*NTrk+3) {
 
  782       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  783         D_vec(3*
it+3)  = da0dphi[
it];
 
  784         D_vec(3*
it+4)  = da0dtheta[
it];
 
  785         D_vec(3*
it+5)  = da0dqOverP[
it];
 
  787       D_vec(3*NTrk+3) = da0dx0;
 
  788       D_vec(3*NTrk+4) = da0dy0;
 
  789       D_vec(3*NTrk+5) = da0dz0;
 
  792       W_mat.block(0,0,ndim,ndim) = fullCov;
 
  793       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) =  
vertex->covariancePosition();
 
  794       V0_err = D_vec.transpose() * W_mat * D_vec;
 
  797     double a0Errsq = V0_err(0,0);
 
  798     if (a0Errsq <= 0.) 
ATH_MSG_DEBUG(
"a0Error: negative sqrt a0Errsq " << a0Errsq);
 
  799     double a0Err = (a0Errsq>0.) ? sqrt(a0Errsq) : 0.;
 
 
 
 
◆ charge()
sum of the charges of the tracks in the vertex 
Definition at line 1864 of file V0Tools.cxx.
 
 
◆ chisq()
Chisq of the vertex fit. 
Definition at line 458 of file V0Tools.cxx.
  459     float dof = 
ndof(vxCandidate);
 
  461       Genfun::CumulativeChiSquare myCumulativeChiSquare(dof);
 
 
 
 
◆ convertCovMatrix()
Definition at line 2659 of file V0Tools.cxx.
 2662     } 
else if (
matrix.size() == (5*NTrk+3)*(5*NTrk+3+1)/2) {
 
 2671     for (
int i=1; 
i<= ndim; 
i++) {
 
 2672       for (
int j=1; j<=
i; j++){
 
 2676           mtx.fillSymmetric(
i-1,j-1,
matrix[ij]);
 
 
 
 
◆ cosTheta() [1/2]
◆ cosTheta() [2/2]
◆ cosTheta_xy() [1/2]
◆ cosTheta_xy() [2/2]
◆ cosThetaStar() [1/2]
  
  | 
        
          | double V0Tools::cosThetaStar | ( | const CLHEP::HepLorentzVector & | posTrack, |  
          |  |  | const CLHEP::HepLorentzVector & | negTrack |  
          |  | ) |  |  |  | static | 
 
Definition at line 1788 of file V0Tools.cxx.
 1792     double pp = 
v0.px()*posTrack.px() + 
v0.py()*posTrack.py() + 
v0.pz()*posTrack.pz();
 
 1793     return ( 
v0.e()*pp - Pv0*Pv0*posTrack.e())/( Mv0*
ps*Pv0);
 
 
 
 
◆ cosThetaStar() [2/2]
  
  | 
        
          | double V0Tools::cosThetaStar | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | posTrackMass, |  
          |  |  | double | negTrackMass |  
          |  | ) |  |  |  | static | 
 
cosThetaStar 
Definition at line 1779 of file V0Tools.cxx.
 1784     CLHEP::HepLorentzVector 
v0(posTrack + negTrack);
 
 1785     double Mv0   = 
v0.m();
 
 1786     double Mplus = posTrack.m();
 
 
 
 
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray> 
Definition at line 170 of file AthCommonDataStore.h.
  175                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey> 
Definition at line 156 of file AthCommonDataStore.h.
  161                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase> 
Definition at line 184 of file AthCommonDataStore.h.
  189                                                        hndl.documentation());
 
 
 
 
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class. 
Definition at line 245 of file AthCommonDataStore.h.
  250     this->declare(hndl.
vhKey());
 
  251     hndl.
vhKey().setOwner(
this);
 
  253     return PBASE::declareProperty(
name,hndl,
doc);
 
 
 
 
◆ declareProperty() [2/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | hndl | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class. 
Definition at line 221 of file AthCommonDataStore.h.
  229     return PBASE::declareProperty(
name,hndl,
doc);
 
 
 
 
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty. 
Definition at line 333 of file AthCommonDataStore.h.
  338     return PBASE::declareProperty(
name, property, 
doc);
 
 
 
 
◆ declareProperty() [5/6]
Declare a new Gaudi property. 
- Parameters
- 
  
    | name | Name of the property. |  | property | Object holding the property value. |  | doc | Documentation string for the property. |  
 
This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray. 
Definition at line 352 of file AthCommonDataStore.h.
 
 
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed. 
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given 
 
 
◆ initialize()
      
        
          | StatusCode V0Tools::initialize | ( |  | ) |  | 
      
 
Standard AlgTool methods. 
Definition at line 40 of file V0Tools.cxx.
   42     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ inputHandles()
Return this algorithm's input handles. 
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA. 
 
 
◆ interfaceID()
  
  | 
        
          | static const InterfaceID& Trk::V0Tools::interfaceID | ( |  | ) |  |  | inlinestatic | 
 
AlgTool interface methods. 
Definition at line 57 of file V0Tools.h.
 
 
◆ invariantMass() [1/2]
      
        
          | double V0Tools::invariantMass | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | double | posTrackMass, | 
        
          |  |  | double | negTrackMass | 
        
          |  | ) |  | const | 
      
 
Methods, returning the invariant mass, error on the invariant mass and Chi2 probability of the invariant mass of an xAOD::Vertex for a given hypothesis for the masses of the input tracks and the V0 mass. 
if a negative value for a track is provided, the invariantMass and invariantMassError are returned excluding that track 
Definition at line 46 of file V0Tools.cxx.
   51     double px = 0., 
py = 0., 
pz = 0., 
e = 0.;
 
 
 
 
◆ invariantMass() [2/2]
Definition at line 55 of file V0Tools.cxx.
   60         px += lorentz_trk.Px();
 
   61         py += lorentz_trk.Py();
 
   62         pz += lorentz_trk.Pz();
 
   67     return (msq>0.) ? sqrt(msq) : 0.;
 
   72     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ invariantMassBeforeFit() [1/2]
Definition at line 2200 of file V0Tools.cxx.
 2201       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 2204     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2207         if (TP == 
nullptr) 
return -999999.;
 
 2208         std::unique_ptr<const Trk::TrackParameters> extrPer =
 
 2210         if (extrPer == 
nullptr)
 
 2216         double pe = (pesq>0.) ? sqrt(pesq) : 0.;
 
 2221     return (msq>0.) ? sqrt(msq) : 0.;
 
 2227     if (
masses.size() != NTrk) {
 
 2228       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ invariantMassBeforeFit() [2/2]
Definition at line 2171 of file V0Tools.cxx.
 2177         if (TP == 
nullptr) 
return -999999.;
 
 2178         std::unique_ptr<const Trk::TrackParameters> extrPer =
 
 2180         if (extrPer == 
nullptr)
 
 2186         double pe = (pesq>0.) ? sqrt(pesq) : 0.;
 
 2191     return (msq>0.) ? sqrt(msq) : 0.;
 
 2198     double px = 0., 
py = 0., 
pz = 0., 
e = 0.;
 
 
 
 
◆ invariantMassBeforeFitIP()
      
        
          | double V0Tools::invariantMassBeforeFitIP | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | std::span< const double > | masses | 
        
          |  | ) |  | const | 
      
 
create neutral TrackParticle from vxCandidate 
Methods, returning the invariant mass and the error on the invariant mass calculated from the original track parameters (at the perigee (IP) or at a given vertex position if no vertex is specified, the reconstructed vertex position is used
if a negative value for a track is provided, the invariantMass and invariantMassError are returned excluding that track 
Definition at line 2146 of file V0Tools.cxx.
 2151         if (TP == 
nullptr) 
return -999999.;
 
 2152         TLorentzVector Tp4 = TP->
p4();
 
 2157         double pe = (pesq>0.) ? sqrt(pesq) : 0.;
 
 2162     return (msq>0.) ? sqrt(msq) : 0.;
 
 2168     double px = 0., 
py = 0., 
pz = 0., 
e = 0.;
 
 
 
 
◆ invariantMassError() [1/2]
      
        
          | double V0Tools::invariantMassError | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | double | posTrackMass, | 
        
          |  |  | double | negTrackMass | 
        
          |  | ) |  | const | 
      
 
Definition at line 76 of file V0Tools.cxx.
   80     if (
masses.size() != NTrk) {
 
   81       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ invariantMassError() [2/2]
      
        
          | double V0Tools::invariantMassError | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | std::span< const double > | masses | 
        
          |  | ) |  | const | 
      
 
Definition at line 83 of file V0Tools.cxx.
   87       ATH_MSG_DEBUG(
"0 pointer for full covariance. Making-up one from the vertex and tracks covariances");
 
   90       unsigned int ndim = fullCov.rows();
 
   92         if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
   94         } 
else if (ndim == 3*NTrk+3) {
 
  104     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ invariantMassErrorBeforeFit() [1/2]
Definition at line 2309 of file V0Tools.cxx.
 2319         if (TP == 
nullptr) 
return -999999.;
 
 2320         std::unique_ptr<const Trk::TrackParameters> extrPer =
 
 2322         if (extrPer == 
nullptr)
 
 2324         const AmgSymMatrix(5)* cov_tmp = extrPer->covariance();
 
 2325         V0_cor(5*
it+2,5*
it+2) = (*cov_tmp)(2,2);
 
 2326         V0_cor(5*
it+2,5*
it+3) = (*cov_tmp)(2,3);
 
 2327         V0_cor(5*
it+2,5*
it+4) = (*cov_tmp)(2,4);
 
 2328         V0_cor(5*
it+3,5*
it+3) = (*cov_tmp)(3,3);
 
 2329         V0_cor(5*
it+3,5*
it+4) = (*cov_tmp)(3,4);
 
 2330         V0_cor(5*
it+4,5*
it+4) = (*cov_tmp)(4,4);
 
 2331         V0_cor(5*
it+3,5*
it+2) = (*cov_tmp)(2,3);
 
 2332         V0_cor(5*
it+4,5*
it+2) = (*cov_tmp)(2,4);
 
 2333         V0_cor(5*
it+4,5*
it+3) = (*cov_tmp)(3,4);
 
 2339         double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 2347     double msq = 
E*
E - Px*Px - Py*Py - Pz*Pz;
 
 2348     double mass = (msq>0.) ? sqrt(msq) : 0.;
 
 2350     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2359     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2360       D_vec(5*
it+0,0)  = 0.;
 
 2361       D_vec(5*
it+1,0)  = 0.;
 
 2362       D_vec(5*
it+2,0)  = dm2dphi[
it];
 
 2363       D_vec(5*
it+3,0)  = dm2dtheta[
it];
 
 2364       D_vec(5*
it+4,0)  = dm2dqOverP[
it];
 
 2366     Amg::MatrixX V0_merr = D_vec.transpose() * V0_cor * D_vec;
 
 2368     double massVarsq = V0_merr(0,0);
 
 2369     if (massVarsq <= 0.) 
ATH_MSG_DEBUG(
"massError: negative sqrt massVarsq " << massVarsq);
 
 2370     double massVar = (massVarsq>0.) ? sqrt(massVarsq) : 0.;
 
 2371     double massErr = massVar/(2.*
mass);
 
 
 
 
◆ invariantMassErrorBeforeFit() [2/2]
◆ invariantMassErrorBeforeFitIP()
      
        
          | double V0Tools::invariantMassErrorBeforeFitIP | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | std::span< const double > | masses | 
        
          |  | ) |  | const | 
      
 
Definition at line 2230 of file V0Tools.cxx.
 2239         if (TP == 
nullptr) 
return -999999.;
 
 2241         V0_cor(5*
it+2,5*
it+2) = cov_tmp(2,2);
 
 2242         V0_cor(5*
it+2,5*
it+3) = cov_tmp(2,3);
 
 2243         V0_cor(5*
it+2,5*
it+4) = cov_tmp(2,4);
 
 2244         V0_cor(5*
it+3,5*
it+3) = cov_tmp(3,3);
 
 2245         V0_cor(5*
it+3,5*
it+4) = cov_tmp(3,4);
 
 2246         V0_cor(5*
it+4,5*
it+4) = cov_tmp(4,4);
 
 2247         V0_cor(5*
it+3,5*
it+2) = cov_tmp(2,3);
 
 2248         V0_cor(5*
it+4,5*
it+2) = cov_tmp(2,4);
 
 2249         V0_cor(5*
it+4,5*
it+3) = cov_tmp(3,4);
 
 2255         double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 2258         TLorentzVector p4 = TP->
p4();
 
 2265     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2274     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2275       D_vec(5*
it+0,0)  = 0.;
 
 2276       D_vec(5*
it+1,0)  = 0.;
 
 2277       D_vec(5*
it+2,0)  = dm2dphi[
it];
 
 2278       D_vec(5*
it+3,0)  = dm2dtheta[
it];
 
 2279       D_vec(5*
it+4,0)  = dm2dqOverP[
it];
 
 2281     Amg::MatrixX V0_merr = D_vec.transpose() * V0_cor * D_vec;
 
 2283     double massVarsq = V0_merr(0,0);
 
 2284     if (massVarsq <= 0.) 
ATH_MSG_DEBUG(
"massError: negative sqrt massVarsq " << massVarsq);
 
 2285     double massVar = (massVarsq>0.) ? sqrt(massVarsq) : 0.;
 
 2286     double massErr = massVar/(2.*
mass);
 
 2294     if (
masses.size() != NTrk) {
 
 
 
 
◆ invariantMassProbability() [1/2]
      
        
          | double V0Tools::invariantMassProbability | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | double | V0Mass, | 
        
          |  |  | double | posTrackMass, | 
        
          |  |  | double | negTrackMass | 
        
          |  | ) |  | const | 
      
 
 
◆ invariantMassProbability() [2/2]
      
        
          | double V0Tools::invariantMassProbability | ( | const xAOD::Vertex * | vxCandidate, | 
        
          |  |  | double | V0Mass, | 
        
          |  |  | std::span< const double > | masses | 
        
          |  | ) |  | const | 
      
 
Definition at line 331 of file V0Tools.cxx.
  335         double achi2prob = 1.-myCumulativeChiSquare(
chi2);
 
  351       double chi2 = (V0Mass - 
mass)*(V0Mass - 
mass)/(massErr*massErr);
 
 
 
 
◆ lxy()
projection of distance in xy of the vertex wrt an xAOD::Vertex vertex along the momentum direction (Px*dx+Py*dy)/pT 
Definition at line 935 of file V0Tools.cxx.
  942     double dx = vert.x();
 
  943     double dy = vert.y();
 
 
 
 
◆ lxyError()
error on lxy 
Definition at line 945 of file V0Tools.cxx.
  953       double trkCharge = 1.;
 
  954       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
  967     double PTsq = Px*Px+Py*Py;
 
  968     double PT = (PTsq>0.) ? sqrt(PTsq) : 0.;
 
  969     double LXYoverPT = (Px*
dx+Py*
dy)/PTsq;
 
  971     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  972       double dPTdqOverP  = (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
  973       double dPTdtheta   = (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
  974       double dPTdphi     = (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
  975       dLxydqOverP[
it] = (
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it])/
PT-LXYoverPT*dPTdqOverP;
 
  976       dLxydtheta[
it]  = (
dx*dpxdtheta[
it]+
dy*dpydtheta[
it])/
PT-LXYoverPT*dPTdtheta;
 
  977       dLxydphi[
it]    = (
dx*dpxdphi[
it]+
dy*dpydphi[
it])/
PT-LXYoverPT*dPTdphi;
 
  979     double dLxydx = Px/
PT;
 
  980     double dLxydy = Py/
PT;
 
  981     double dLxydx0 = -dLxydx;
 
  982     double dLxydy0 = -dLxydy;
 
  984     unsigned int ndim = 0;
 
  985     if (fullCov.size() != 0) {
 
  986       ndim = fullCov.rows();
 
  992     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
  994       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  997         D_vec(5*
it+2)  = dLxydphi[
it];
 
  998         D_vec(5*
it+3)  = dLxydtheta[
it];
 
  999         D_vec(5*
it+4)  = dLxydqOverP[
it];
 
 1001       D_vec(5*NTrk+0) = dLxydx;
 
 1002       D_vec(5*NTrk+1) = dLxydy;
 
 1003       D_vec(5*NTrk+2) = 0.;
 
 1004       D_vec(5*NTrk+3) = dLxydx0;
 
 1005       D_vec(5*NTrk+4) = dLxydy0;
 
 1006       D_vec(5*NTrk+5) = 0.;
 
 1008       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1009       if (fullCov.size() != 0) {
 
 1010         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1013         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1014         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 1016       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1017       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1018     } 
else if (ndim == 3*NTrk+3) {
 
 1023       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1024         D_vec(3*
it+3) = dLxydphi[
it];
 
 1025         D_vec(3*
it+4) = dLxydtheta[
it];
 
 1026         D_vec(3*
it+5) = dLxydqOverP[
it];
 
 1028       D_vec(3*NTrk+3) = dLxydx0;
 
 1029       D_vec(3*NTrk+4) = dLxydy0;
 
 1030       D_vec(3*NTrk+5) = 0.;
 
 1032       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1033       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1034       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1035       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1038     double LxyErrsq = V0_err(0,0);
 
 1039     if (LxyErrsq <= 0.) 
ATH_MSG_DEBUG(
"lxyError: negative sqrt LxyErrsq " << LxyErrsq);
 
 1040     return (LxyErrsq>0.) ? sqrt(LxyErrsq) : 0.;
 
 1046     double dx = vert.x();
 
 1047     double dy = vert.y();
 
 
 
 
◆ lxyz()
projection of distance in 3D of the vertex wrt an xAOD::Vertex vertex along the momentum direction (Px*dx+Py*dy+Pz*dz)/p 
Definition at line 1049 of file V0Tools.cxx.
 1057     double dx = vert.x();
 
 1058     double dy = vert.y();
 
 
 
 
◆ lxyzError()
error on lxyz 
Definition at line 1060 of file V0Tools.cxx.
 1070       double trkCharge = 1.;
 
 1071       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 1087     double Psq = Px*Px+Py*Py+Pz*Pz;
 
 1088     double P = (Psq>0.) ? sqrt(Psq) : 0.;
 
 1089     double LXYZoverP = (Px*
dx+Py*
dy+Pz*dz)/Psq;
 
 1091     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1092       double dPdqOverP  = (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it])/
P;
 
 1093       double dPdtheta   = (Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/
P;
 
 1094       double dPdphi     = (Px*dpxdphi[
it]+Py*dpydphi[
it])/
P;
 
 1095       dLxyzdqOverP[
it] = (
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it]+dz*dpzdqOverP[
it])/
P-LXYZoverP*dPdqOverP;
 
 1096       dLxyzdtheta[
it]  = (
dx*dpxdtheta[
it]+
dy*dpydtheta[
it]+dz*dpzdtheta[
it])/
P-LXYZoverP*dPdtheta;
 
 1097       dLxyzdphi[
it]    = (
dx*dpxdphi[
it]+
dy*dpydphi[
it])/
P-LXYZoverP*dPdphi;
 
 1099     double dLxyzdx = Px/
P;
 
 1100     double dLxyzdy = Py/
P;
 
 1101     double dLxyzdz = Pz/
P;
 
 1102     double dLxyzdx0 = -dLxyzdx;
 
 1103     double dLxyzdy0 = -dLxyzdy;
 
 1104     double dLxyzdz0 = -dLxyzdz;
 
 1106     unsigned int ndim = 0;
 
 1107     if (fullCov.size() != 0) {
 
 1108       ndim = fullCov.rows();
 
 1114     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 1116       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1119         D_vec(5*
it+2)  = dLxyzdphi[
it];
 
 1120         D_vec(5*
it+3)  = dLxyzdtheta[
it];
 
 1121         D_vec(5*
it+4)  = dLxyzdqOverP[
it];
 
 1123       D_vec(5*NTrk+0) = dLxyzdx;
 
 1124       D_vec(5*NTrk+1) = dLxyzdy;
 
 1125       D_vec(5*NTrk+2) = dLxyzdz;
 
 1126       D_vec(5*NTrk+3) = dLxyzdx0;
 
 1127       D_vec(5*NTrk+4) = dLxyzdy0;
 
 1128       D_vec(5*NTrk+5) = dLxyzdz0;
 
 1130       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1131       if (fullCov.size() != 0) {
 
 1132         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1135         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1136         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 1138       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1139       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1140     } 
else if (ndim == 3*NTrk+3) {
 
 1145       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1146         D_vec(3*
it+3) = dLxyzdphi[
it];
 
 1147         D_vec(3*
it+4) = dLxyzdtheta[
it];
 
 1148         D_vec(3*
it+5) = dLxyzdqOverP[
it];
 
 1150       D_vec(3*NTrk+3) = dLxyzdx0;
 
 1151       D_vec(3*NTrk+4) = dLxyzdy0;
 
 1152       D_vec(3*NTrk+5) = dLxyzdz0;
 
 1154       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1155       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1156       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1157       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1160     double LxyzErrsq = V0_err(0,0);
 
 1161     if (LxyzErrsq <= 0.) 
ATH_MSG_DEBUG(
"lxyzError: negative sqrt LxyzErrsq " << LxyzErrsq);
 
 1162     return (LxyzErrsq>0.) ? sqrt(LxyzErrsq) : 0.;
 
 1167     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ makeV0Cov()
◆ massErrorV0Fitter() [1/2]
  
  | 
        
          | double V0Tools::massErrorV0Fitter | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | posTrackMass, |  
          |  |  | double | negTrackMass |  
          |  | ) |  | const |  | private | 
 
Definition at line 108 of file V0Tools.cxx.
  112     if (
masses.size() != NTrk) {
 
  113       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ massErrorV0Fitter() [2/2]
  
  | 
        
          | double V0Tools::massErrorV0Fitter | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | std::span< const double > | masses |  
          |  | ) |  | const |  | private | 
 
Definition at line 115 of file V0Tools.cxx.
  125         double trkCharge = 1.;
 
  126         if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
  132         double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
  140     double msq = 
E*
E - Px*Px - Py*Py - Pz*Pz;
 
  141     double mass = (msq>0.) ? sqrt(msq) : 0.;
 
  143     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  152     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  153       D_vec(5*
it+0,0)  = 0.;
 
  154       D_vec(5*
it+1,0)  = 0.;
 
  155       D_vec(5*
it+2,0)  = dm2dphi[
it];
 
  156       D_vec(5*
it+3,0)  = dm2dtheta[
it];
 
  157       D_vec(5*
it+4,0)  = dm2dqOverP[
it];
 
  159     Amg::MatrixX V0_merr = D_vec.transpose() * fullCov.block(0,0,ndim-3,ndim-3) * D_vec;
 
  161     double massVarsq = V0_merr(0,0);
 
  162     if (massVarsq <= 0.) 
ATH_MSG_DEBUG(
"massError: negative sqrt massVarsq " << massVarsq);
 
  163     double massVar = (massVarsq>0.) ? sqrt(massVarsq) : 0.;
 
  164     double massErr = massVar/(2.*
mass);
 
  170     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ massErrorVKalVrt() [1/2]
  
  | 
        
          | double V0Tools::massErrorVKalVrt | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | posTrackMass, |  
          |  |  | double | negTrackMass |  
          |  | ) |  | const |  | private | 
 
Definition at line 174 of file V0Tools.cxx.
  177     if (
masses.size() != NTrk) {
 
  178       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ massErrorVKalVrt() [2/2]
Definition at line 180 of file V0Tools.cxx.
  198         double e = (esq>0.) ? sqrt(esq) : 0.;
 
  201         particleMom[
it] = 
tmp;
 
  205         tmpDeriv(0,0) = - 
tmp.Py();
 
  206         tmpDeriv(1,0) =   
tmp.Px();
 
  210         tmpDeriv(2,1) = - 
sin(
theta)/fabs(invP);
 
  211         tmpDeriv(0,2) = - 
tmp.Px()/invP;
 
  212         tmpDeriv(1,2) = - 
tmp.Py()/invP;
 
  213         tmpDeriv(2,2) = - 
tmp.Pz()/invP;
 
  214         particleDeriv[
it] = tmpDeriv;
 
  218     std::vector<double> Deriv(3*NTrk+3, 0.);
 
  219     for(
unsigned int it=0; 
it<NTrk; 
it++){
 
  221         double dMdPx = ( totalMom.E() * particleMom[
it].Px()/particleMom[
it].E() - totalMom.Px() ) / totalMom.M();
 
  222         double dMdPy = ( totalMom.E() * particleMom[
it].Py()/particleMom[
it].E() - totalMom.Py() ) / totalMom.M();
 
  223         double dMdPz = ( totalMom.E() * particleMom[
it].Pz()/particleMom[
it].E() - totalMom.Pz() ) / totalMom.M();
 
  225         double dMdPhi   = dMdPx*particleDeriv[
it](0,0) + dMdPy*particleDeriv[
it](1,0) + dMdPz*particleDeriv[
it](2,0);
 
  226         double dMdTheta = dMdPx*particleDeriv[
it](0,1) + dMdPy*particleDeriv[
it](1,1) + dMdPz*particleDeriv[
it](2,1);
 
  227         double dMdInvP  = dMdPx*particleDeriv[
it](0,2) + dMdPy*particleDeriv[
it](1,2) + dMdPz*particleDeriv[
it](2,2);
 
  229         Deriv[3*
it + 3 + 0] = dMdPhi;    Deriv[3*
it + 3 + 1] = dMdTheta; Deriv[3*
it + 3 + 2] = dMdInvP;
 
  234     for(
unsigned int i=0; 
i<3*NTrk+3; 
i++){
 
  235       for(
unsigned int j=0; j<3*NTrk+3; j++){
 
  236         err += Deriv[
i]*( fullCov)(
i,j)*Deriv[j];
 
  240     return (
err>0.) ? sqrt(
err) : 0.;
 
  245     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ massErrorVxCandidate() [1/2]
  
  | 
        
          | double V0Tools::massErrorVxCandidate | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | posTrackMass, |  
          |  |  | double | negTrackMass |  
          |  | ) |  | const |  | private | 
 
Definition at line 249 of file V0Tools.cxx.
  253     if (
masses.size() != NTrk) {
 
  254       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ massErrorVxCandidate() [2/2]
  
  | 
        
          | double V0Tools::massErrorVxCandidate | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | std::span< const double > | masses |  
          |  | ) |  | const |  | private | 
 
Definition at line 256 of file V0Tools.cxx.
  265         V0_cor(5*
it+2,5*
it+2) = (*cov_tmp)(2,2);
 
  266         V0_cor(5*
it+2,5*
it+3) = (*cov_tmp)(2,3);
 
  267         V0_cor(5*
it+2,5*
it+4) = (*cov_tmp)(2,4);
 
  268         V0_cor(5*
it+3,5*
it+3) = (*cov_tmp)(3,3);
 
  269         V0_cor(5*
it+3,5*
it+4) = (*cov_tmp)(3,4);
 
  270         V0_cor(5*
it+4,5*
it+4) = (*cov_tmp)(4,4);
 
  271         V0_cor(5*
it+3,5*
it+2) = (*cov_tmp)(2,3);
 
  272         V0_cor(5*
it+4,5*
it+2) = (*cov_tmp)(2,4);
 
  273         V0_cor(5*
it+4,5*
it+3) = (*cov_tmp)(3,4);
 
  274         double trkCharge = 1.;
 
  275         if (bPer->parameters()(
Trk::qOverP) < 0.) trkCharge = -1.;
 
  281         double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
  289     double msq = 
E*
E - Px*Px - Py*Py - Pz*Pz;
 
  290     double mass = (msq>0.) ? sqrt(msq) : 0.;
 
  292     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  301     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  302       D_vec(5*
it+0,0)  = 0.;
 
  303       D_vec(5*
it+1,0)  = 0.;
 
  304       D_vec(5*
it+2,0)  = dm2dphi[
it];
 
  305       D_vec(5*
it+3,0)  = dm2dtheta[
it];
 
  306       D_vec(5*
it+4,0)  = dm2dqOverP[
it];
 
  309     Amg::MatrixX V0_merr = D_vec.transpose() * V0_cor * D_vec;
 
  311     double massVarsq = V0_merr(0,0);
 
  312     if (massVarsq <= 0.) 
ATH_MSG_DEBUG(
"massError: negative sqrt massVarsq " << massVarsq);
 
  313     double massVar = (massVarsq>0.) ? sqrt(massVarsq) : 0.;
 
  314     double massErr = massVar/(2.*
mass);
 
  320     std::array<double, 2> 
masses = {posTrackMass , negTrackMass};
 
 
 
 
◆ massProbability()
      
        
          | double V0Tools::massProbability | ( | double | V0Mass, | 
        
          |  |  | double | mass, | 
        
          |  |  | double | massErr | 
        
          |  | ) |  | const | 
      
 
Definition at line 353 of file V0Tools.cxx.
  355         double achi2prob = 1.-myCumulativeChiSquare(
chi2);
 
 
 
 
◆ massTauCov()
Definition at line 2382 of file V0Tools.cxx.
 2401       double trkCharge = 1.;
 
 2402       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 2407       double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 2422     double LXY = Px*
dx+Py*
dy;
 
 2424     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2425       dMdqOverP[
it]   = -(Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it]-
E*dedqOverP[
it])/M;
 
 2426       dMdtheta[
it]    = -(Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/M;
 
 2427       dMdphi[
it]      = -(Px*dpxdphi[
it]+Py*dpydphi[
it])/M;
 
 2428       double dPTdqOverP  =  (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
 2429       double dPTdtheta  =  (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
 2430       double dPTdphi     =  (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
 2431       double dLXYdqOverP =  
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it];
 
 2432       double dLXYdtheta  =  
dx*dpxdtheta[
it]+
dy*dpydtheta[
it];
 
 2433       double dLXYdphi    =  
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 2434       dTaudqOverP[
it] =  (LXY*dMdqOverP[
it]+M*dLXYdqOverP)/(
PT*
PT)-(2.*LXY*M*dPTdqOverP)/(
PT*
PT*
PT);
 
 2435       dTaudtheta[
it]  =  (LXY*dMdtheta[
it]+M*dLXYdtheta)/(
PT*
PT)-(2.*LXY*M*dPTdtheta)/(
PT*
PT*
PT);
 
 2436       dTaudphi[
it]    =  (LXY*dMdphi[
it]+M*dLXYdphi)/(
PT*
PT)-(2.*LXY*M*dPTdphi)/(
PT*
PT*
PT);
 
 2438     double dTaudx = (M*Px)/(
PT*
PT);
 
 2439     double dTaudy = (M*Py)/(
PT*
PT);
 
 2440     double dTaudx0 = -dTaudx;
 
 2441     double dTaudy0 = -dTaudy;
 
 2443     unsigned int ndim = 0;
 
 2444     if (fullCov.size() != 0) {
 
 2445       ndim = fullCov.rows();
 
 2451     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 2453       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2454         D_mat(5*
it+0,0)  = 0.;
 
 2455         D_mat(5*
it+1,0)  = 0.;
 
 2458         D_mat(5*
it+4,0)  = 
CONST*dTaudqOverP[
it];
 
 2459         D_mat(5*
it+0,1)  = 0.;
 
 2460         D_mat(5*
it+1,1)  = 0.;
 
 2461         D_mat(5*
it+2,1)  = dMdphi[
it];
 
 2462         D_mat(5*
it+3,1)  = dMdtheta[
it];
 
 2463         D_mat(5*
it+4,1)  = dMdqOverP[
it];
 
 2465       D_mat(5*NTrk+0,0) = 
CONST*dTaudx;
 
 2466       D_mat(5*NTrk+1,0) = 
CONST*dTaudy;
 
 2467       D_mat(5*NTrk+2,0) = 0.;
 
 2468       D_mat(5*NTrk+3,0) = 
CONST*dTaudx0;
 
 2469       D_mat(5*NTrk+4,0) = 
CONST*dTaudy0;
 
 2470       D_mat(5*NTrk+5,0) = 0.;
 
 2471       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 2472       if (fullCov.size() != 0) {
 
 2473         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 2476         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 2477         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 2479       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) =  
vertex->covariancePosition();
 
 2480       V0_err = D_mat.transpose() * W_mat * D_mat;
 
 2481     } 
else if (ndim == 3*NTrk+3) {
 
 2483       D_mat(0,0)  = 
CONST*dTaudx;
 
 2484       D_mat(1,0)  = 
CONST*dTaudy;
 
 2486       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2489         D_mat(3*
it+5,0)  = 
CONST*dTaudqOverP[
it];
 
 2490         D_mat(3*
it+3,1)  = dMdphi[
it];
 
 2491         D_mat(3*
it+4,1)  = dMdtheta[
it];
 
 2492         D_mat(3*
it+5,1)  = dMdqOverP[
it];
 
 2494       D_mat(3*NTrk+3,0) = 
CONST*dTaudx0;
 
 2495       D_mat(3*NTrk+4,0) = 
CONST*dTaudy0;
 
 2496       D_mat(3*NTrk+5,0) = 0.;
 
 2497       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 2498       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 2499       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 2500       V0_err = D_mat.transpose() * W_mat * D_mat;
 
 2508       for( 
unsigned int it=0; 
it<NTrk; 
it++){
 
 
 
 
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ ndof()
◆ negativeOrigTrack()
◆ negativeTrack4Momentum()
◆ negativeTrackMomentum()
◆ origTrack()
pointers to original tracks 
Definition at line 1878 of file V0Tools.cxx.
 1881     if (NTrk != 2) 
return origTrk;
 
 
 
 
◆ outputHandles()
Return this algorithm's output handles. 
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA. 
 
 
◆ pca()
◆ phiStar() [1/2]
  
  | 
        
          | double V0Tools::phiStar | ( | const CLHEP::HepLorentzVector & | v0, |  
          |  |  | const CLHEP::HepLorentzVector & | track |  
          |  | ) |  |  |  | static | 
 
 
◆ phiStar() [2/2]
  
  | 
        
          | double V0Tools::phiStar | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | posTrackMass, |  
          |  |  | double | negTrackMass |  
          |  | ) |  |  |  | static | 
 
phiStar 
Definition at line 1803 of file V0Tools.cxx.
 1809     CLHEP::Hep3Vector 
V0 = 
v0.getV();
 
 1810     CLHEP::Hep3Vector trk = 
track.getV();
 
 
 
 
◆ positiveOrigTrack()
Definition at line 1883 of file V0Tools.cxx.
 1892     if (NTrk != 2) 
return origTrk;
 
 
 
 
◆ positiveTrack4Momentum()
◆ positiveTrackMomentum()
◆ pT()
transverse momentum of the V0 
Definition at line 549 of file V0Tools.cxx.
  552     std::vector<double>dpxdqOverP(NTrk), dpxdtheta(NTrk), dpxdphi(NTrk);
 
 
 
 
◆ pTError()
error on the transverse momentum of the V0 
Definition at line 554 of file V0Tools.cxx.
  559       double trkCharge = 1.;
 
  560       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
  573     double PTsq = Px*Px+Py*Py;
 
  574     double PT = (PTsq>0.) ? sqrt(PTsq) : 0.;
 
  576     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  577       dPTdqOverP[
it]  = (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
  578       dPTdtheta[
it]   = (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
  579       dPTdphi[
it]     = (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
  582     unsigned int ndim = 0;
 
  583     if (fullCov.size() == 0) {
 
  586       ndim = fullCov.rows();
 
  590     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
  592       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  593         D_vec(5*
it+0,0)  = 0.;
 
  594         D_vec(5*
it+1,0)  = 0.;
 
  595         D_vec(5*
it+2,0)  = dPTdphi[
it];
 
  596         D_vec(5*
it+3,0)  = dPTdtheta[
it];
 
  597         D_vec(5*
it+4,0)  = dPTdqOverP[
it];
 
  599       if (fullCov.size() == 0) {
 
  601         PtErrSq = D_vec.transpose() * V0_cov * D_vec;
 
  603         PtErrSq = D_vec.transpose() * fullCov.block(0,0,5*NTrk-1,5*NTrk-1) * D_vec;
 
  605     } 
else if (ndim == 3*NTrk+3) {
 
  607       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
  608         D_vec(3*
it+0,0)  = dPTdphi[
it];
 
  609         D_vec(3*
it+1,0)  = dPTdtheta[
it];
 
  610         D_vec(3*
it+2,0)  = dPTdqOverP[
it];
 
  612       PtErrSq = D_vec.transpose() * fullCov.block(3,3,ndim-3,ndim-3) * D_vec;
 
  615     double PtErrsq = PtErrSq(0,0);
 
  616     if (PtErrsq <= 0.) 
ATH_MSG_DEBUG(
"ptError: negative sqrt PtErrsq " << PtErrsq);
 
  617     return (PtErrsq>0.) ? sqrt(PtErrsq) : 0.;
 
  622     assert(vxCandidate!=0);
 
  623     if(
nullptr == vxCandidate) {
 
 
 
 
◆ renounce()
◆ renounceArray()
◆ rxy() [1/3]
◆ rxy() [2/3]
◆ rxy() [3/3]
◆ rxy_var()
rxy_var 
Definition at line 503 of file V0Tools.cxx.
  514     double dx = vxCandidate->position().x();
 
  515     double dy = vxCandidate->position().y();
 
 
 
 
◆ rxyError() [1/3]
error on Rxy 
Definition at line 517 of file V0Tools.cxx.
  517                                              : negative sqrt rxyVar 
" << rxyVar); 
  518     return (rxyVar>0.) ? sqrt(rxyVar) : 0.; 
  521   double V0Tools::rxyError(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex) const 
  523     const Amg::MatrixX cov = vxCandidate->covariancePosition() + vertex->covariancePosition(); 
  524     auto vert = vxCandidate->position() - vertex->position(); 
  525     double dx = vert.x(); 
 
 
◆ rxyError() [2/3]
wrt an Amg::Vector3D vertex 
Definition at line 538 of file V0Tools.cxx.
  539                                              : negative sqrt rxyVar 
" << rxyVar); 
  540     return (rxyVar>0.) ? sqrt(rxyVar) : 0.; 
  543   double V0Tools::pT (const xAOD::Vertex * vxCandidate)  
  545     return V0Momentum(vxCandidate).perp(); 
 
 
◆ rxyError() [3/3]
wrt an xAOD::Vertex vertex 
Definition at line 527 of file V0Tools.cxx.
  528                                              : negative sqrt rxyVar 
" << rxyVar); 
  529     return (rxyVar>0.) ? sqrt(rxyVar) : 0.; 
  532   double V0Tools::rxyError(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) const 
  534     const Amg::MatrixX& cov = vxCandidate->covariancePosition(); 
  535     auto vert = vxCandidate->position() - vertex; 
  536     double dx = vert.x(); 
 
 
◆ separation() [1/2]
Definition at line 656 of file V0Tools.cxx.
  660                                                  : negative sqrt sepVarsq 
" << sepVarsq); 
  661     double sepVar = (sepVarsq>0.) ? sqrt(sepVarsq) : 0.; 
  665   double V0Tools::a0xy(const xAOD::Vertex * vxCandidate, const xAOD::Vertex* vertex)  
  667     double cosineTheta_xy = cosTheta_xy(vxCandidate,vertex); 
  668     double sinTheta_xy = ((1.-cosineTheta_xy*cosineTheta_xy)>0.) ? sqrt((1.-cosineTheta_xy*cosineTheta_xy)) : 0.; 
  669     return (vtx(vxCandidate)-vertex->position()).perp() * sinTheta_xy; 
 
 
◆ separation() [2/2]
statistical separation (Mahalanobis distance) 
Definition at line 641 of file V0Tools.cxx.
  645                                                  : negative sqrt sepVarsq 
" << sepVarsq); 
  646     double sepVar = (sepVarsq>0.) ? sqrt(sepVarsq) : 0.; 
  650   double V0Tools::separation(const xAOD::Vertex * vxCandidate, const Amg::Vector3D& vertex) const 
  652     const Amg::SymMatrixX& cov = vxCandidate->covariancePosition().inverse().eval(); 
  653     Amg::Vector3D D_vec; D_vec.setZero(); 
  654     auto vert = vxCandidate->position() - vertex; 
 
 
◆ sysInitialize()
◆ sysStart()
Handle START transition. 
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container. 
 
 
◆ tau() [1/5]
proper time wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment 
Definition at line 1217 of file V0Tools.cxx.
 1223     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ tau() [2/5]
proper time wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy/pT 
Definition at line 1171 of file V0Tools.cxx.
 1175     if (
masses.size() != NTrk) {
 
 1176       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ tau() [3/5]
proper time wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass (imposing massV0) making a correction to the proper time consistent with the imposed V0 mass 
Definition at line 1193 of file V0Tools.cxx.
 1197     if (
masses.size() != NTrk) {
 
 1198       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ tau() [4/5]
proper time wrt an xAOD::Vertex vertex assuming track masses 
Definition at line 1178 of file V0Tools.cxx.
 1189     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ tau() [5/5]
proper time wrt an xAOD::Vertex vertex assuming track masses (imposing massV0) making a correction to the proper time consistent with the imposed V0 mass 
Definition at line 1200 of file V0Tools.cxx.
 1214     double CONST = 1000./299.792;
 
 
 
 
◆ tau3D() [1/2]
proper time in 3D wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment 
Definition at line 1508 of file V0Tools.cxx.
 1515     if (
masses.size() != NTrk) {
 
 
 
 
◆ tau3D() [2/2]
◆ tau3DError() [1/2]
proper time error in 3D wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment 
Definition at line 1646 of file V0Tools.cxx.
 1660       double trkCharge = 1.;
 
 1661       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 1677     double LXYZ = Px*
dx+Py*
dy+Pz*dz;
 
 1679     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1680       double dPdqOverP    = (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it])/
P;
 
 1681       double dPdtheta     = (Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/
P;
 
 1682       double dPdphi       = (Px*dpxdphi[
it]+Py*dpydphi[
it])/
P;
 
 1683       double dLXYZdqOverP = 
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it]+dz*dpzdqOverP[
it];
 
 1684       double dLXYZdtheta  = 
dx*dpxdtheta[
it]+
dy*dpydtheta[
it]+dz*dpzdtheta[
it];
 
 1685       double dLXYZdphi    = 
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 1686       dTaudqOverP[
it]  = M*dLXYZdqOverP/(
P*
P)-(2.*LXYZ*M*dPdqOverP)/(
P*
P*
P);
 
 1687       dTaudtheta[
it]   = M*dLXYZdtheta/(
P*
P)-(2.*LXYZ*M*dPdtheta)/(
P*
P*
P);
 
 1688       dTaudphi[
it]     = M*dLXYZdphi/(
P*
P)-(2.*LXYZ*M*dPdphi)/(
P*
P*
P);
 
 1690     double dTaudx = (M*Px)/(
P*
P);
 
 1691     double dTaudy = (M*Py)/(
P*
P);
 
 1692     double dTaudz = (M*Pz)/(
P*
P);
 
 1693     double dTaudx0 = -dTaudx;
 
 1694     double dTaudy0 = -dTaudy;
 
 1695     double dTaudz0 = -dTaudz;
 
 1697     unsigned int ndim = 0;
 
 1698     if (fullCov.size() != 0) {
 
 1699       ndim = fullCov.rows();
 
 1705     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 1707       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1710         D_vec(5*
it+2) = dTaudphi[
it];
 
 1711         D_vec(5*
it+3) = dTaudtheta[
it];
 
 1712         D_vec(5*
it+4) = dTaudqOverP[
it];
 
 1714       D_vec(5*NTrk+0) = dTaudx;
 
 1715       D_vec(5*NTrk+1) = dTaudy;
 
 1716       D_vec(5*NTrk+2) = dTaudz;
 
 1717       D_vec(5*NTrk+3) = dTaudx0;
 
 1718       D_vec(5*NTrk+4) = dTaudy0;
 
 1719       D_vec(5*NTrk+5) = dTaudz0;
 
 1721       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1722       if (fullCov.size() != 0) {
 
 1723         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1726         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1727         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 1729       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1730       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1731     } 
else if (ndim == 3*NTrk+3) {
 
 1736       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1737         D_vec(3*
it+3) = dTaudphi[
it];
 
 1738         D_vec(3*
it+4) = dTaudtheta[
it];
 
 1739         D_vec(3*
it+5) = dTaudqOverP[
it];
 
 1741       D_vec(3*NTrk+3) = dTaudx0;
 
 1742       D_vec(3*NTrk+4) = dTaudy0;
 
 1743       D_vec(3*NTrk+5) = dTaudz0;
 
 1745       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1746       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1747       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1748       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1751     double tauErrsq = V0_err(0,0);
 
 1752     if (tauErrsq <= 0.) 
ATH_MSG_DEBUG(
"tauError: negative sqrt tauErrsq " << tauErrsq);
 
 1753     double tauErr = (tauErrsq>0.) ? sqrt(tauErrsq) : 0.;
 
 1754     return CONST*tauErr;
 
 
 
 
◆ tau3DError() [2/2]
proper time error in 3D wrt an xAOD::Vertex vertex assuming track masses 
Definition at line 1517 of file V0Tools.cxx.
 1536       double trkCharge = 1.;
 
 1537       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 1542       double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 1557     double LXYZ = Px*
dx+Py*
dy+Pz*dz;
 
 1559     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1560       double dMdqOverP    = -(Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it]-
E*dedqOverP[
it])/M;
 
 1561       double dMdtheta     = -(Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/M;
 
 1562       double dMdphi       = -(Px*dpxdphi[
it]+Py*dpydphi[
it])/M;
 
 1563       double dPdqOverP    =  (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it])/
P;
 
 1564       double dPdtheta     =  (Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/
P;
 
 1565       double dPdphi       =  (Px*dpxdphi[
it]+Py*dpydphi[
it])/
P;
 
 1566       double dLXYZdqOverP =  
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it]+dz*dpzdqOverP[
it];
 
 1567       double dLXYZdtheta  =  
dx*dpxdtheta[
it]+
dy*dpydtheta[
it]+dz*dpzdtheta[
it];
 
 1568       double dLXYZdphi    =  
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 1569       dTaudqOverP[
it]  =  (LXYZ*dMdqOverP+M*dLXYZdqOverP)/(
P*
P)-(2.*LXYZ*M*dPdqOverP)/(
P*
P*
P);
 
 1570       dTaudtheta[
it]   =  (LXYZ*dMdtheta+M*dLXYZdtheta)/(
P*
P)-(2.*LXYZ*M*dPdtheta)/(
P*
P*
P);
 
 1571       dTaudphi[
it]     =  (LXYZ*dMdphi+M*dLXYZdphi)/(
P*
P)-(2.*LXYZ*M*dPdphi)/(
P*
P*
P);
 
 1573     double dTaudx = (M*Px)/(
P*
P);
 
 1574     double dTaudy = (M*Py)/(
P*
P);
 
 1575     double dTaudz = (M*Pz)/(
P*
P);
 
 1576     double dTaudx0 = -dTaudx;
 
 1577     double dTaudy0 = -dTaudy;
 
 1578     double dTaudz0 = -dTaudz;
 
 1580     unsigned int ndim = 0;
 
 1581     if (fullCov.size() != 0) {
 
 1582       ndim = fullCov.rows();
 
 1588     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 1590       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1593         D_vec(5*
it+2) = dTaudphi[
it];
 
 1594         D_vec(5*
it+3) = dTaudtheta[
it];
 
 1595         D_vec(5*
it+4) = dTaudqOverP[
it];
 
 1597       D_vec(5*NTrk+0) = dTaudx;
 
 1598       D_vec(5*NTrk+1) = dTaudy;
 
 1599       D_vec(5*NTrk+2) = dTaudz;
 
 1600       D_vec(5*NTrk+3) = dTaudx0;
 
 1601       D_vec(5*NTrk+4) = dTaudy0;
 
 1602       D_vec(5*NTrk+5) = dTaudz0;
 
 1604       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1605       if (fullCov.size() != 0) {
 
 1606         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1609         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1610         W_mat.block(5*NTrk,5*NTrk,3,3) =  vxCandidate->covariancePosition();
 
 1612       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1613       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1614     } 
else if (ndim == 3*NTrk+3) {
 
 1619       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1620         D_vec(3*
it+3) = dTaudphi[
it];
 
 1621         D_vec(3*
it+4) = dTaudtheta[
it];
 
 1622         D_vec(3*
it+5) = dTaudqOverP[
it];
 
 1624       D_vec(3*NTrk+3) = dTaudx0;
 
 1625       D_vec(3*NTrk+4) = dTaudy0;
 
 1626       D_vec(3*NTrk+5) = dTaudz0;
 
 1628       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1629       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1630       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) =  
vertex->covariancePosition();
 
 1631       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1634     double tauErrsq = V0_err(0,0);
 
 1635     if (tauErrsq <= 0.) 
ATH_MSG_DEBUG(
"tauError: negative sqrt tauErrsq " << tauErrsq);
 
 1636     double tauErr = (tauErrsq>0.) ? sqrt(tauErrsq) : 0.;
 
 1637     return CONST*tauErr;
 
 1644     double CONST = 1000./299.792;
 
 
 
 
◆ tauError() [1/5]
proper time error wrt an xAOD::Vertex vertex assuming massV0 imposing a V0 mass without making an adjustment 
Definition at line 1382 of file V0Tools.cxx.
 1395       double trkCharge = 1.;
 
 1396       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 1409     double LXY = Px*
dx+Py*
dy;
 
 1411     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1412       double dPTdqOverP  = (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
 1413       double dPTdtheta   = (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
 1414       double dPTdphi     = (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
 1415       double dLXYdqOverP = 
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it];
 
 1416       double dLXYdtheta  = 
dx*dpxdtheta[
it]+
dy*dpydtheta[
it];
 
 1417       double dLXYdphi = 
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 1418       dTaudqOverP[
it] = M*dLXYdqOverP/(
PT*
PT)-(2.*LXY*M*dPTdqOverP)/(
PT*
PT*
PT);
 
 1419       dTaudtheta[
it]  = M*dLXYdtheta/(
PT*
PT)-(2.*LXY*M*dPTdtheta)/(
PT*
PT*
PT);
 
 1420       dTaudphi[
it]    = M*dLXYdphi/(
PT*
PT)-(2.*LXY*M*dPTdphi)/(
PT*
PT*
PT);
 
 1422     double dTaudx = (M*Px)/(
PT*
PT);
 
 1423     double dTaudy = (M*Py)/(
PT*
PT);
 
 1424     double dTaudx0 = -dTaudx;
 
 1425     double dTaudy0 = -dTaudy;
 
 1427     unsigned int ndim = 0;
 
 1428     if (fullCov.size() != 0) {
 
 1429       ndim = fullCov.rows();
 
 1435     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 1437       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1440         D_vec(5*
it+2) = dTaudphi[
it];
 
 1441         D_vec(5*
it+3) = dTaudtheta[
it];
 
 1442         D_vec(5*
it+4) = dTaudqOverP[
it];
 
 1444       D_vec(5*NTrk+0) = dTaudx;
 
 1445       D_vec(5*NTrk+1) = dTaudy;
 
 1446       D_vec(5*NTrk+2) = 0.;
 
 1447       D_vec(5*NTrk+3) = dTaudx0;
 
 1448       D_vec(5*NTrk+4) = dTaudy0;
 
 1449       D_vec(5*NTrk+5) = 0.;
 
 1451       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1452       if (fullCov.size() != 0) {
 
 1453         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1456         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1457         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 1459       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1460       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1461     } 
else if (ndim == 3*NTrk+3) {
 
 1466       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1467         D_vec(3*
it+3)  = dTaudphi[
it];
 
 1468         D_vec(3*
it+4)  = dTaudtheta[
it];
 
 1469         D_vec(3*
it+5)  = dTaudqOverP[
it];
 
 1471       D_vec(3*NTrk+3) = dTaudx0;
 
 1472       D_vec(3*NTrk+4) = dTaudy0;
 
 1473       D_vec(3*NTrk+5) = 0.;
 
 1475       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1476       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1477       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1478       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1481     double tauErrsq = V0_err(0,0);
 
 1482     if (tauErrsq <= 0.) 
ATH_MSG_DEBUG(
"tauError: negative sqrt tauErrsq " << tauErrsq);
 
 1483     double tauErr = (tauErrsq>0.) ? sqrt(tauErrsq) : 0.;
 
 1484     return CONST*tauErr;
 
 1490     if (
masses.size() != NTrk) {
 
 1491       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ tauError() [2/5]
proper time error wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass tau = CONST*M*lxy/pT 
Definition at line 1226 of file V0Tools.cxx.
 1232     if (
masses.size() != NTrk) {
 
 
 
 
◆ tauError() [3/5]
proper time error wrt an xAOD::Vertex vertex assuming posTrackMass and negTrackMass (imposing massV0) independent of massV0, variable included to match the corresponding proper time method 
Definition at line 1360 of file V0Tools.cxx.
 1364     if (
masses.size() != NTrk) {
 
 1365       ATH_MSG_DEBUG(
"The provided number of masses does not match the number of tracks in the vertex");
 
 
 
 
◆ tauError() [4/5]
proper time error wrt an xAOD::Vertex vertex assuming track masses 
Definition at line 1234 of file V0Tools.cxx.
 1252       double trkCharge = 1.;
 
 1253       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 1258       double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 1273     double LXY = Px*
dx+Py*
dy;
 
 1275     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1276       double dMdqOverP   = -(Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it]-
E*dedqOverP[
it])/M;
 
 1277       double dMdtheta    = -(Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/M;
 
 1278       double dMdphi      = -(Px*dpxdphi[
it]+Py*dpydphi[
it])/M;
 
 1279       double dPTdqOverP  =  (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
 1280       double dPTdtheta   =  (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
 1281       double dPTdphi     =  (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
 1282       double dLXYdqOverP =  
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it];
 
 1283       double dLXYdtheta  =  
dx*dpxdtheta[
it]+
dy*dpydtheta[
it];
 
 1284       double dLXYdphi    =  
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 1285       dTaudqOverP[
it] =  (LXY*dMdqOverP+M*dLXYdqOverP)/(
PT*
PT)-(2.*LXY*M*dPTdqOverP)/(
PT*
PT*
PT);
 
 1286       dTaudtheta[
it]  =  (LXY*dMdtheta+M*dLXYdtheta)/(
PT*
PT)-(2.*LXY*M*dPTdtheta)/(
PT*
PT*
PT);
 
 1287       dTaudphi[
it]    =  (LXY*dMdphi+M*dLXYdphi)/(
PT*
PT)-(2.*LXY*M*dPTdphi)/(
PT*
PT*
PT);
 
 1289     double dTaudx = (M*Px)/(
PT*
PT);
 
 1290     double dTaudy = (M*Py)/(
PT*
PT);
 
 1291     double dTaudx0 = -dTaudx;
 
 1292     double dTaudy0 = -dTaudy;
 
 1294     unsigned int ndim = 0;
 
 1295     if (fullCov.size() != 0) {
 
 1296       ndim = fullCov.rows();
 
 1302     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 1304       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1307         D_vec(5*
it+2)  = dTaudphi[
it];
 
 1308         D_vec(5*
it+3)  = dTaudtheta[
it];
 
 1309         D_vec(5*
it+4)  = dTaudqOverP[
it];
 
 1311       D_vec(5*NTrk+0) = dTaudx;
 
 1312       D_vec(5*NTrk+1) = dTaudy;
 
 1313       D_vec(5*NTrk+2) = 0.;
 
 1314       D_vec(5*NTrk+3) = dTaudx0;
 
 1315       D_vec(5*NTrk+4) = dTaudy0;
 
 1316       D_vec(5*NTrk+5) = 0.;
 
 1318       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 1319       if (fullCov.size() != 0) {
 
 1320         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1323         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 1324         W_mat.block(5*NTrk,5*NTrk,3,3) =  vxCandidate->covariancePosition();
 
 1326       W_mat.block(5*NTrk+3,5*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 1327       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1328     } 
else if (ndim == 3*NTrk+3) {
 
 1333       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 1334         D_vec(3*
it+3)  = dTaudphi[
it];
 
 1335         D_vec(3*
it+4)  = dTaudtheta[
it];
 
 1336         D_vec(3*
it+5)  = dTaudqOverP[
it];
 
 1338       D_vec(3*NTrk+3) = dTaudx0;
 
 1339       D_vec(3*NTrk+4) = dTaudy0;
 
 1340       D_vec(3*NTrk+5) = 0.;
 
 1342       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 1343       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 1344       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) =  
vertex->covariancePosition();
 
 1345       V0_err = D_vec.transpose() * W_mat * D_vec;
 
 1348     double tauErrsq = V0_err(0,0);
 
 1349     if (tauErrsq <= 0.) 
ATH_MSG_DEBUG(
"tauError: negative sqrt tauErrsq " << tauErrsq);
 
 1350     double tauErr = (tauErrsq>0.) ? sqrt(tauErrsq) : 0.;
 
 1351     return CONST*tauErr;
 
 1356     std::array<double, 2> 
masses = {posTrackMass, negTrackMass};
 
 
 
 
◆ tauError() [5/5]
proper time error wrt an xAOD::Vertex vertex assuming track masses (imposing massV0) independent of massV0, variable included to match the corresponding proper time method 
Definition at line 1367 of file V0Tools.cxx.
 1380     double CONST = 1000./299.792;
 
 
 
 
◆ tauMassCovariance()
mass-proper time covariance 
Definition at line 2530 of file V0Tools.cxx.
 2550       double trkCharge = 1.;
 
 2551       if (bPer->parameters()[
Trk::qOverP] < 0.) trkCharge = -1.;
 
 2556       double pe = (
tmp>0.) ? sqrt(
tmp) : 0.;
 
 2571     double LXY = Px*
dx+Py*
dy;
 
 2573     for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2574       dMdqOverP[
it]   = -(Px*dpxdqOverP[
it]+Py*dpydqOverP[
it]+Pz*dpzdqOverP[
it]-
E*dedqOverP[
it])/M;
 
 2575       dMdtheta[
it]    = -(Px*dpxdtheta[
it]+Py*dpydtheta[
it]+Pz*dpzdtheta[
it])/M;
 
 2576       dMdphi[
it]      = -(Px*dpxdphi[
it]+Py*dpydphi[
it])/M;
 
 2577       double dPTdqOverP  =  (Px*dpxdqOverP[
it]+Py*dpydqOverP[
it])/
PT;
 
 2578       double dPTdtheta   =  (Px*dpxdtheta[
it]+Py*dpydtheta[
it])/
PT;
 
 2579       double dPTdphi     =  (Px*dpxdphi[
it]+Py*dpydphi[
it])/
PT;
 
 2580       double dLXYdqOverP =  
dx*dpxdqOverP[
it]+
dy*dpydqOverP[
it];
 
 2581       double dLXYdtheta  =  
dx*dpxdtheta[
it]+
dy*dpydtheta[
it];
 
 2582       double dLXYdphi    =  
dx*dpxdphi[
it]+
dy*dpydphi[
it];
 
 2583       dTaudqOverP[
it] =  (LXY*dMdqOverP[
it]+M*dLXYdqOverP)/(
PT*
PT)-(2.*LXY*M*dPTdqOverP)/(
PT*
PT*
PT);
 
 2584       dTaudtheta[
it]  =  (LXY*dMdtheta[
it]+M*dLXYdtheta)/(
PT*
PT)-(2.*LXY*M*dPTdtheta)/(
PT*
PT*
PT);
 
 2585       dTaudphi[
it]    =  (LXY*dMdphi[
it]+M*dLXYdphi)/(
PT*
PT)-(2.*LXY*M*dPTdphi)/(
PT*
PT*
PT);
 
 2587     double dTaudx = (M*Px)/(
PT*
PT);
 
 2588     double dTaudy = (M*Py)/(
PT*
PT);
 
 2589     double dTaudx0 = -dTaudx;
 
 2590     double dTaudy0 = -dTaudy;
 
 2592     unsigned int ndim = 0;
 
 2593     if (fullCov.size() != 0) {
 
 2594       ndim = fullCov.rows();
 
 2599     if (ndim == 5*NTrk+3 || ndim == 5*NTrk+6) {
 
 2601       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2602         D_mat(5*
it+0,0)  = 0.;
 
 2603         D_mat(5*
it+1,0)  = 0.;
 
 2606         D_mat(5*
it+4,0)  = 
CONST*dTaudqOverP[
it];
 
 2607         D_mat(5*
it+0,1)  = 0.;
 
 2608         D_mat(5*
it+1,1)  = 0.;
 
 2609         D_mat(5*
it+2,1)  = dMdphi[
it];
 
 2610         D_mat(5*
it+3,1)  = dMdtheta[
it];
 
 2611         D_mat(5*
it+4,1)  = dMdqOverP[
it];
 
 2613       D_mat(5*NTrk+0,0) = 
CONST*dTaudx;
 
 2614       D_mat(5*NTrk+1,0) = 
CONST*dTaudy;
 
 2615       D_mat(5*NTrk+2,0) = 0.;
 
 2616       D_mat(5*NTrk+3,0) = 
CONST*dTaudx0;
 
 2617       D_mat(5*NTrk+4,0) = 
CONST*dTaudy0;
 
 2618       D_mat(5*NTrk+5,0) = 0.;
 
 2619       Amg::MatrixX W_mat(5*NTrk+6,5*NTrk+6); W_mat.setZero();
 
 2620       if (fullCov.size() != 0) {
 
 2621         W_mat.block(0,0,ndim,ndim) = fullCov;
 
 2624         W_mat.block(0,0,V0_cov.rows(),V0_cov.rows()) = V0_cov;
 
 2625         W_mat.block(5*NTrk,5*NTrk,3,3) = vxCandidate->covariancePosition();
 
 2627       W_mat.block(5*NTrk+3,5*NTrk,3,3) = 
vertex->covariancePosition();
 
 2628       V0_err = D_mat.transpose() * W_mat * D_mat;
 
 2629     } 
else if (ndim == 3*NTrk+3) {
 
 2631       D_mat(0,0)  = 
CONST*dTaudx;
 
 2632       D_mat(1,0)  = 
CONST*dTaudy;
 
 2634       for( 
unsigned int it=0; 
it<NTrk; 
it++) {
 
 2637         D_mat(3*
it+5,0)  = 
CONST*dTaudqOverP[
it];
 
 2638         D_mat(3*
it+3,1)  = dMdphi[
it];
 
 2639         D_mat(3*
it+4,1)  = dMdtheta[
it];
 
 2640         D_mat(3*
it+5,1)  = dMdqOverP[
it];
 
 2642       D_mat(3*NTrk+3,0) = 
CONST*dTaudx0;
 
 2643       D_mat(3*NTrk+4,0) = 
CONST*dTaudy0;
 
 2644       D_mat(3*NTrk+5,0) = 0.;
 
 2645       Amg::MatrixX W_mat(3*NTrk+6,3*NTrk+6); W_mat.setZero();
 
 2646       W_mat.block(0,0,ndim,ndim) = fullCov;
 
 2647       W_mat.block(3*NTrk+3,3*NTrk+3,3,3) = 
vertex->covariancePosition();
 
 2648       V0_err = D_mat.transpose() * W_mat * D_mat;
 
 
 
 
◆ thetaStar()
  
  | 
        
          | double V0Tools::thetaStar | ( | const xAOD::Vertex * | vxCandidate, |  
          |  |  | double | mass1, |  
          |  |  | double | mass2 |  
          |  | ) |  |  |  | static | 
 
Polarization angles in helicity frame (using positive track): 
thetaStar (in rad) 
Definition at line 1763 of file V0Tools.cxx.
 1777     CLHEP::HepLorentzVector posMom(PosMom.Px(),PosMom.Py(),PosMom.Pz(),PosMom.E());
 
 
 
 
◆ track4Momentum()
Methods, returning the refitted 4-momenta of the positive and negative tracks and the V0 for a given hypothesis for the masses of the input tracks and the V0 mass. 
Definition at line 413 of file V0Tools.cxx.
 
 
◆ trackMomentum()
Methods, returning the refitted 3-momenta of the positive and negative tracks and the V0 (for more than one track with the same charge, the first one is returned) 
Definition at line 373 of file V0Tools.cxx.
  377     if (NTrk != 2) 
return mom;
 
 
 
 
◆ updateVHKA()
◆ V04Momentum()
◆ V0Momentum()
◆ vertexProbability()
Probability of the vertex fit. 
Definition at line 463 of file V0Tools.cxx.
  464         double chi2prob = 1.-myCumulativeChiSquare(chi);
 
 
 
 
◆ vtx()
◆ m_detStore
◆ m_evtStore
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
 
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
float charge() const
Returns the charge.
IParticle::FourMom_t FourMom_t
Definition of the 4-momentum type.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
const Amg::Vector3D & position() const
Returns the 3-pos.
@ pz
global momentum (cartesian)
virtual void setOwner(IDataHandleHolder *o)=0
AmgSymMatrix(5) &GXFTrackState
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
IndexedConstituentUserInfo::Index Index
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
double chi2(TH1 *h0, TH1 *h1)
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
float qOverP() const
Returns the  parameter.
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
Eigen::Matrix< double, 3, 1 > Vector3D
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.
const std::vector< float > & covariance() const
Returns the covariance matrix as a simple vector of values.
const Amg::Vector3D & momentum() const
Access method for the momentum.
float chiSquared() const
Returns the  of the vertex fit as float.
Class describing a Vertex.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Class describing a TrackParticle.
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
float theta() const
Returns the  parameter, which has range 0 to .
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range  to .)