ROOT logo
// @(#)root/mathcore:$Id: PxPyPzM4D.h 30568 2009-10-06 07:17:59Z moneta $
// Authors: W. Brown, M. Fischler, L. Moneta    2005  

/**********************************************************************
*                                                                    *
* Copyright (c) 2005 , LCG ROOT MathLib Team                         *
*                                                                    *
*                                                                    *
**********************************************************************/

// Header file for class PxPyPzM4D
// 
// Created by: fischler at Wed Jul 20   2005
//   (starting from PxPyPzM4D by moneta)
// 
// Last update: $Id: PxPyPzM4D.h 30568 2009-10-06 07:17:59Z moneta $
// 
#ifndef ROOT_Math_GenVector_PxPyPzM4D 
#define ROOT_Math_GenVector_PxPyPzM4D  1

#ifndef ROOT_Math_GenVector_eta
#include "Math/GenVector/eta.h"
#endif

#ifndef ROOT_Math_GenVector_GenVector_exception 
#include "Math/GenVector/GenVector_exception.h"
#endif


#include <cmath>

namespace ROOT { 
  
namespace Math { 
    
//__________________________________________________________________________________________
/** 
    Class describing a 4D coordinate system 
    or momentum-energy vectors stored as (Px, Py, Pz, M).
    This system is useful to describe ultra-relativistic particles 
    (like electrons at LHC) to avoid numerical errors evaluating the mass 
    when E >>> m
    The metric used is (-,-,-,+)
    Spacelike particles (M2 < 0) are described with negative mass values, 
    but in this case m2 must alwasy be less than P2 to preserve a positive value of E2
    
    @ingroup GenVector
*/ 

template <class ScalarType = double> 
class PxPyPzM4D { 

public : 

   typedef ScalarType Scalar;

   // --------- Constructors ---------------

   /**
      Default constructor  with x=y=z=m=0 
   */
   PxPyPzM4D() : fX(0), fY(0), fZ(0), fM(0) { }


   /**
      Constructor  from x, y , z , m values
   */
   PxPyPzM4D(Scalar px, Scalar py, Scalar pz, Scalar m) : 
      fX(px), fY(py), fZ(pz), fM(m) { 
     
      if (fM < 0) RestrictNegMass();
   }

   /**
      construct from any 4D  coordinate system class 
      implementing X(), Y(), X() and M()
   */
   template <class CoordSystem> 
   explicit PxPyPzM4D(const CoordSystem & v) : 
      fX( v.X() ), fY( v.Y() ), fZ( v.Z() ), fM( v.M() )  
   { }

   // for g++  3.2 and 3.4 on 32 bits found that the compiler generated copy ctor and assignment are much slower 
   // so we decided to re-implement them ( there is no no need to have them with g++4)
   /**
      copy constructor
    */
   PxPyPzM4D(const PxPyPzM4D & v) : 
      fX(v.fX), fY(v.fY), fZ(v.fZ), fM(v.fM) { }
      
   /**
      assignment operator 
    */
   PxPyPzM4D & operator = (const PxPyPzM4D & v) { 
      fX = v.fX;  
      fY = v.fY;  
      fZ = v.fZ;  
      fM = v.fM;
      return *this;
   }


   /**
      construct from any 4D  coordinate system class 
      implementing X(), Y(), X() and M()
   */
   template <class AnyCoordSystem> 
   PxPyPzM4D & operator = (const AnyCoordSystem & v) { 
      fX = v.X();  
      fY = v.Y();  
      fZ = v.Z();  
      fM = v.M();
      return *this;
   }

   /**
      Set internal data based on an array of 4 Scalar numbers
   */ 
   void SetCoordinates( const Scalar src[] ) { 
      fX=src[0]; fY=src[1]; fZ=src[2]; fM=src[3]; 
      if (fM < 0) RestrictNegMass();
   }

   /**
      get internal data into an array of 4 Scalar numbers
   */ 
   void GetCoordinates( Scalar dest[] ) const 
   { dest[0] = fX; dest[1] = fY; dest[2] = fZ; dest[3] = fM; }

   /**
      Set internal data based on 4 Scalar numbers
   */ 
   void SetCoordinates(Scalar  px, Scalar  py, Scalar  pz, Scalar m) { 
      fX=px; fY=py; fZ=pz; fM=m;
      if (fM < 0) RestrictNegMass();
   }

   /**
      get internal data into 4 Scalar numbers
   */ 
   void GetCoordinates(Scalar& px, Scalar& py, Scalar& pz, Scalar& m) const 
   { px=fX; py=fY; pz=fZ; m=fM;}  				

   // --------- Coordinates and Coordinate-like Scalar properties -------------

   // cartesian (Minkowski)coordinate accessors 

   Scalar Px() const { return fX;}
   Scalar Py() const { return fY;}
   Scalar Pz() const { return fZ;}
   Scalar M() const  { return fM; }

   Scalar X() const { return fX;}
   Scalar Y() const { return fY;}
   Scalar Z() const { return fZ;}

   // other coordinate representation
   /**
      Energy 
   */ 				  
   Scalar E()  const { return std::sqrt(E2() ); }

   Scalar T() const { return E();}

   /**
      squared magnitude of spatial components
   */
   Scalar P2() const { return fX*fX + fY*fY + fZ*fZ; } 

   /**
      magnitude of spatial components (magnitude of 3-momentum)
   */
   Scalar P() const { return std::sqrt(P2()); } 
   Scalar R() const { return P(); } 

   /**
      vector magnitude squared (or mass squared)
      In case of negative mass (spacelike particles return negative values)
   */
   Scalar M2() const   { 
      return ( fM  >= 0 ) ?  fM*fM :  -fM*fM; 
   }
   Scalar Mag2() const { return M2(); } 

   Scalar Mag() const    { return M(); }

   /**
      energy squared
   */
   Scalar E2() const { 
      Scalar e2 =  P2() + M2(); 
      // protect against numerical errors when M2() is negative
      return e2 > 0 ? e2 : 0; 
   }

   /** 
       transverse spatial component squared  
   */
   Scalar Pt2()   const { return fX*fX + fY*fY;}
   Scalar Perp2() const { return Pt2();}

   /**
      Transverse spatial component (P_perp or rho)
   */
   Scalar Pt()   const { return std::sqrt(Perp2());}
   Scalar Perp() const { return Pt();}
   Scalar Rho()  const { return Pt();}

   /** 
       transverse mass squared
   */
   Scalar Mt2() const { return E2() - fZ*fZ; } 

   /**
      transverse mass
   */
   Scalar Mt() const { 
      Scalar mm = Mt2();
      if (mm >= 0) {
         return std::sqrt(mm);
      } else {
         GenVector::Throw ("PxPyPzM4D::Mt() - Tachyonic:\n"
                           "    Pz^2 > E^2 so the transverse mass would be imaginary");
         return -std::sqrt(-mm);
      }
   } 

   /** 
       transverse energy squared
   */
   Scalar Et2() const {  // is (E^2 * pt ^2) / p^2 
      // but it is faster to form p^2 from pt^2
      Scalar pt2 = Pt2();
      return pt2 == 0 ? 0 : E2() * pt2/( pt2 + fZ*fZ );
   }

   /**
      transverse energy
   */
   Scalar Et() const { 
      Scalar etet = Et2();
      return std::sqrt(etet);
   }

   /**
      azimuthal angle 
   */
   Scalar Phi() const  { 
      return (fX == 0.0 && fY == 0.0) ? 0.0 : std::atan2(fY,fX);
   }

   /**
      polar angle
   */
   Scalar Theta() const {
      return (fX == 0.0 && fY == 0.0 && fZ == 0.0) ? 0 : std::atan2(Pt(),fZ);
   }

   /** 
       pseudorapidity
   */
   Scalar Eta() const {
      return Impl::Eta_FromRhoZ ( Pt(), fZ); 
   }

   // --------- Set Coordinates of this system  ---------------


   /**
      set X value 
   */
   void SetPx( Scalar  px) { 
      fX = px; 
   }
   /**
      set Y value 
   */
   void SetPy( Scalar  py) { 
      fY = py; 
   }
   /**
      set Z value 
   */
   void SetPz( Scalar  pz) { 
      fZ = pz; 
   }
   /**
      set T value 
   */
   void SetM( Scalar  m) { 
      fM = m; 
      if (fM < 0) RestrictNegMass();
   }

   /** 
       set all values  
   */
   void SetPxPyPzE(Scalar px, Scalar py, Scalar pz, Scalar e);

   // ------ Manipulations -------------
  
   /**
      negate the 4-vector -  Note that the energy cannot be negate (would need an additional data member)
      therefore negate will work only on the spatial components. 
      One would need to use negate only with vectors having the energy as data members
   */
   void Negate( ) { 
      fX = -fX; 
      fY = -fY;  
      fZ = -fZ; 
      GenVector::Throw ("PxPyPzM4D::Negate - cannot negate the energy - can negate only the spatial components");
   }

   /**
      scale coordinate values by a scalar quantity a
   */
   void Scale( const Scalar & a) { 
      fX *= a; 
      fY *= a; 
      fZ *= a; 
      fM *= a; 
   }
 

   /**
      Exact equality
   */  
   bool operator == (const PxPyPzM4D & rhs) const {
      return fX == rhs.fX && fY == rhs.fY && fZ == rhs.fZ && fM == rhs.fM;
   }
   bool operator != (const PxPyPzM4D & rhs) const {return !(operator==(rhs));}


   // ============= Compatibility section ==================

   // The following make this coordinate system look enough like a CLHEP
   // vector that an assignment member template can work with either
   Scalar x() const { return X(); }
   Scalar y() const { return Y(); }
   Scalar z() const { return Z(); } 
   Scalar t() const { return E(); } 



#if defined(__MAKECINT__) || defined(G__DICTIONARY) 

   // ====== Set member functions for coordinates in other systems =======

   void SetPt(Scalar pt);   

   void SetEta(Scalar eta);  

   void SetPhi(Scalar phi);  

   void SetE(Scalar t); 

#endif

private:

   // restrict the value of negative mass to avoid unphysical negative E2 values 
   // M2 must be less than P2 for the tachionic particles - otherwise use positive values
   inline void RestrictNegMass() {
      if ( fM >=0 ) return;
      if ( P2() - fM*fM  < 0 ) { 
         GenVector::Throw("PxPyPzM4D::unphysical value of mass, set to closest physical value");
         fM = - P();
      }
      return;
   } 


   /**
      (contigous) data containing the coordinate values x,y,z,t
   */

   ScalarType fX;
   ScalarType fY;
   ScalarType fZ;
   ScalarType fM;

}; 
    
} // end namespace Math  
} // end namespace ROOT


// move implementations here to avoid circle dependencies

#include "Math/GenVector/PxPyPzE4D.h"
#include "Math/GenVector/PtEtaPhiM4D.h"

namespace ROOT { 

namespace Math { 

template <class ScalarType>  
inline void PxPyPzM4D<ScalarType>::SetPxPyPzE(Scalar px, Scalar py, Scalar pz, Scalar e) {  
   *this = PxPyPzE4D<Scalar> (px, py, pz, e);
}


#if defined(__MAKECINT__) || defined(G__DICTIONARY) 
     
  // ====== Set member functions for coordinates in other systems =======

  // ====== Set member functions for coordinates in other systems =======
 
template <class ScalarType>  
inline void PxPyPzM4D<ScalarType>::SetPt(ScalarType pt) {  
   GenVector_exception e("PxPyPzM4D::SetPt() is not supposed to be called");
   throw e;
   PtEtaPhiE4D<ScalarType> v(*this); v.SetPt(pt); *this = PxPyPzM4D<ScalarType>(v);
}
template <class ScalarType>  
inline void PxPyPzM4D<ScalarType>::SetEta(ScalarType eta) {  
   GenVector_exception e("PxPyPzM4D::SetEta() is not supposed to be called");
   throw e;
   PtEtaPhiE4D<ScalarType> v(*this); v.SetEta(eta); *this = PxPyPzM4D<ScalarType>(v);
}
template <class ScalarType>  
inline void PxPyPzM4D<ScalarType>::SetPhi(ScalarType phi) {  
   GenVector_exception e("PxPyPzM4D::SetPhi() is not supposed to be called");
   throw e;
   PtEtaPhiE4D<ScalarType> v(*this); v.SetPhi(phi); *this = PxPyPzM4D<ScalarType>(v);
}
template <class ScalarType>  
inline void PxPyPzM4D<ScalarType>::SetE(ScalarType energy) {  
   GenVector_exception e("PxPyPzM4D::SetE() is not supposed to be called");
   throw e;
   PxPyPzE4D<ScalarType> v(*this); v.SetE(energy); 
   *this = PxPyPzM4D<ScalarType>(v);
}


#endif  // endif __MAKE__CINT || G__DICTIONARY

} // end namespace Math

} // end namespace ROOT



#endif // ROOT_Math_GenVector_PxPyPzM4D 
 PxPyPzM4D.h:1
 PxPyPzM4D.h:2
 PxPyPzM4D.h:3
 PxPyPzM4D.h:4
 PxPyPzM4D.h:5
 PxPyPzM4D.h:6
 PxPyPzM4D.h:7
 PxPyPzM4D.h:8
 PxPyPzM4D.h:9
 PxPyPzM4D.h:10
 PxPyPzM4D.h:11
 PxPyPzM4D.h:12
 PxPyPzM4D.h:13
 PxPyPzM4D.h:14
 PxPyPzM4D.h:15
 PxPyPzM4D.h:16
 PxPyPzM4D.h:17
 PxPyPzM4D.h:18
 PxPyPzM4D.h:19
 PxPyPzM4D.h:20
 PxPyPzM4D.h:21
 PxPyPzM4D.h:22
 PxPyPzM4D.h:23
 PxPyPzM4D.h:24
 PxPyPzM4D.h:25
 PxPyPzM4D.h:26
 PxPyPzM4D.h:27
 PxPyPzM4D.h:28
 PxPyPzM4D.h:29
 PxPyPzM4D.h:30
 PxPyPzM4D.h:31
 PxPyPzM4D.h:32
 PxPyPzM4D.h:33
 PxPyPzM4D.h:34
 PxPyPzM4D.h:35
 PxPyPzM4D.h:36
 PxPyPzM4D.h:37
 PxPyPzM4D.h:38
 PxPyPzM4D.h:39
 PxPyPzM4D.h:40
 PxPyPzM4D.h:41
 PxPyPzM4D.h:42
 PxPyPzM4D.h:43
 PxPyPzM4D.h:44
 PxPyPzM4D.h:45
 PxPyPzM4D.h:46
 PxPyPzM4D.h:47
 PxPyPzM4D.h:48
 PxPyPzM4D.h:49
 PxPyPzM4D.h:50
 PxPyPzM4D.h:51
 PxPyPzM4D.h:52
 PxPyPzM4D.h:53
 PxPyPzM4D.h:54
 PxPyPzM4D.h:55
 PxPyPzM4D.h:56
 PxPyPzM4D.h:57
 PxPyPzM4D.h:58
 PxPyPzM4D.h:59
 PxPyPzM4D.h:60
 PxPyPzM4D.h:61
 PxPyPzM4D.h:62
 PxPyPzM4D.h:63
 PxPyPzM4D.h:64
 PxPyPzM4D.h:65
 PxPyPzM4D.h:66
 PxPyPzM4D.h:67
 PxPyPzM4D.h:68
 PxPyPzM4D.h:69
 PxPyPzM4D.h:70
 PxPyPzM4D.h:71
 PxPyPzM4D.h:72
 PxPyPzM4D.h:73
 PxPyPzM4D.h:74
 PxPyPzM4D.h:75
 PxPyPzM4D.h:76
 PxPyPzM4D.h:77
 PxPyPzM4D.h:78
 PxPyPzM4D.h:79
 PxPyPzM4D.h:80
 PxPyPzM4D.h:81
 PxPyPzM4D.h:82
 PxPyPzM4D.h:83
 PxPyPzM4D.h:84
 PxPyPzM4D.h:85
 PxPyPzM4D.h:86
 PxPyPzM4D.h:87
 PxPyPzM4D.h:88
 PxPyPzM4D.h:89
 PxPyPzM4D.h:90
 PxPyPzM4D.h:91
 PxPyPzM4D.h:92
 PxPyPzM4D.h:93
 PxPyPzM4D.h:94
 PxPyPzM4D.h:95
 PxPyPzM4D.h:96
 PxPyPzM4D.h:97
 PxPyPzM4D.h:98
 PxPyPzM4D.h:99
 PxPyPzM4D.h:100
 PxPyPzM4D.h:101
 PxPyPzM4D.h:102
 PxPyPzM4D.h:103
 PxPyPzM4D.h:104
 PxPyPzM4D.h:105
 PxPyPzM4D.h:106
 PxPyPzM4D.h:107
 PxPyPzM4D.h:108
 PxPyPzM4D.h:109
 PxPyPzM4D.h:110
 PxPyPzM4D.h:111
 PxPyPzM4D.h:112
 PxPyPzM4D.h:113
 PxPyPzM4D.h:114
 PxPyPzM4D.h:115
 PxPyPzM4D.h:116
 PxPyPzM4D.h:117
 PxPyPzM4D.h:118
 PxPyPzM4D.h:119
 PxPyPzM4D.h:120
 PxPyPzM4D.h:121
 PxPyPzM4D.h:122
 PxPyPzM4D.h:123
 PxPyPzM4D.h:124
 PxPyPzM4D.h:125
 PxPyPzM4D.h:126
 PxPyPzM4D.h:127
 PxPyPzM4D.h:128
 PxPyPzM4D.h:129
 PxPyPzM4D.h:130
 PxPyPzM4D.h:131
 PxPyPzM4D.h:132
 PxPyPzM4D.h:133
 PxPyPzM4D.h:134
 PxPyPzM4D.h:135
 PxPyPzM4D.h:136
 PxPyPzM4D.h:137
 PxPyPzM4D.h:138
 PxPyPzM4D.h:139
 PxPyPzM4D.h:140
 PxPyPzM4D.h:141
 PxPyPzM4D.h:142
 PxPyPzM4D.h:143
 PxPyPzM4D.h:144
 PxPyPzM4D.h:145
 PxPyPzM4D.h:146
 PxPyPzM4D.h:147
 PxPyPzM4D.h:148
 PxPyPzM4D.h:149
 PxPyPzM4D.h:150
 PxPyPzM4D.h:151
 PxPyPzM4D.h:152
 PxPyPzM4D.h:153
 PxPyPzM4D.h:154
 PxPyPzM4D.h:155
 PxPyPzM4D.h:156
 PxPyPzM4D.h:157
 PxPyPzM4D.h:158
 PxPyPzM4D.h:159
 PxPyPzM4D.h:160
 PxPyPzM4D.h:161
 PxPyPzM4D.h:162
 PxPyPzM4D.h:163
 PxPyPzM4D.h:164
 PxPyPzM4D.h:165
 PxPyPzM4D.h:166
 PxPyPzM4D.h:167
 PxPyPzM4D.h:168
 PxPyPzM4D.h:169
 PxPyPzM4D.h:170
 PxPyPzM4D.h:171
 PxPyPzM4D.h:172
 PxPyPzM4D.h:173
 PxPyPzM4D.h:174
 PxPyPzM4D.h:175
 PxPyPzM4D.h:176
 PxPyPzM4D.h:177
 PxPyPzM4D.h:178
 PxPyPzM4D.h:179
 PxPyPzM4D.h:180
 PxPyPzM4D.h:181
 PxPyPzM4D.h:182
 PxPyPzM4D.h:183
 PxPyPzM4D.h:184
 PxPyPzM4D.h:185
 PxPyPzM4D.h:186
 PxPyPzM4D.h:187
 PxPyPzM4D.h:188
 PxPyPzM4D.h:189
 PxPyPzM4D.h:190
 PxPyPzM4D.h:191
 PxPyPzM4D.h:192
 PxPyPzM4D.h:193
 PxPyPzM4D.h:194
 PxPyPzM4D.h:195
 PxPyPzM4D.h:196
 PxPyPzM4D.h:197
 PxPyPzM4D.h:198
 PxPyPzM4D.h:199
 PxPyPzM4D.h:200
 PxPyPzM4D.h:201
 PxPyPzM4D.h:202
 PxPyPzM4D.h:203
 PxPyPzM4D.h:204
 PxPyPzM4D.h:205
 PxPyPzM4D.h:206
 PxPyPzM4D.h:207
 PxPyPzM4D.h:208
 PxPyPzM4D.h:209
 PxPyPzM4D.h:210
 PxPyPzM4D.h:211
 PxPyPzM4D.h:212
 PxPyPzM4D.h:213
 PxPyPzM4D.h:214
 PxPyPzM4D.h:215
 PxPyPzM4D.h:216
 PxPyPzM4D.h:217
 PxPyPzM4D.h:218
 PxPyPzM4D.h:219
 PxPyPzM4D.h:220
 PxPyPzM4D.h:221
 PxPyPzM4D.h:222
 PxPyPzM4D.h:223
 PxPyPzM4D.h:224
 PxPyPzM4D.h:225
 PxPyPzM4D.h:226
 PxPyPzM4D.h:227
 PxPyPzM4D.h:228
 PxPyPzM4D.h:229
 PxPyPzM4D.h:230
 PxPyPzM4D.h:231
 PxPyPzM4D.h:232
 PxPyPzM4D.h:233
 PxPyPzM4D.h:234
 PxPyPzM4D.h:235
 PxPyPzM4D.h:236
 PxPyPzM4D.h:237
 PxPyPzM4D.h:238
 PxPyPzM4D.h:239
 PxPyPzM4D.h:240
 PxPyPzM4D.h:241
 PxPyPzM4D.h:242
 PxPyPzM4D.h:243
 PxPyPzM4D.h:244
 PxPyPzM4D.h:245
 PxPyPzM4D.h:246
 PxPyPzM4D.h:247
 PxPyPzM4D.h:248
 PxPyPzM4D.h:249
 PxPyPzM4D.h:250
 PxPyPzM4D.h:251
 PxPyPzM4D.h:252
 PxPyPzM4D.h:253
 PxPyPzM4D.h:254
 PxPyPzM4D.h:255
 PxPyPzM4D.h:256
 PxPyPzM4D.h:257
 PxPyPzM4D.h:258
 PxPyPzM4D.h:259
 PxPyPzM4D.h:260
 PxPyPzM4D.h:261
 PxPyPzM4D.h:262
 PxPyPzM4D.h:263
 PxPyPzM4D.h:264
 PxPyPzM4D.h:265
 PxPyPzM4D.h:266
 PxPyPzM4D.h:267
 PxPyPzM4D.h:268
 PxPyPzM4D.h:269
 PxPyPzM4D.h:270
 PxPyPzM4D.h:271
 PxPyPzM4D.h:272
 PxPyPzM4D.h:273
 PxPyPzM4D.h:274
 PxPyPzM4D.h:275
 PxPyPzM4D.h:276
 PxPyPzM4D.h:277
 PxPyPzM4D.h:278
 PxPyPzM4D.h:279
 PxPyPzM4D.h:280
 PxPyPzM4D.h:281
 PxPyPzM4D.h:282
 PxPyPzM4D.h:283
 PxPyPzM4D.h:284
 PxPyPzM4D.h:285
 PxPyPzM4D.h:286
 PxPyPzM4D.h:287
 PxPyPzM4D.h:288
 PxPyPzM4D.h:289
 PxPyPzM4D.h:290
 PxPyPzM4D.h:291
 PxPyPzM4D.h:292
 PxPyPzM4D.h:293
 PxPyPzM4D.h:294
 PxPyPzM4D.h:295
 PxPyPzM4D.h:296
 PxPyPzM4D.h:297
 PxPyPzM4D.h:298
 PxPyPzM4D.h:299
 PxPyPzM4D.h:300
 PxPyPzM4D.h:301
 PxPyPzM4D.h:302
 PxPyPzM4D.h:303
 PxPyPzM4D.h:304
 PxPyPzM4D.h:305
 PxPyPzM4D.h:306
 PxPyPzM4D.h:307
 PxPyPzM4D.h:308
 PxPyPzM4D.h:309
 PxPyPzM4D.h:310
 PxPyPzM4D.h:311
 PxPyPzM4D.h:312
 PxPyPzM4D.h:313
 PxPyPzM4D.h:314
 PxPyPzM4D.h:315
 PxPyPzM4D.h:316
 PxPyPzM4D.h:317
 PxPyPzM4D.h:318
 PxPyPzM4D.h:319
 PxPyPzM4D.h:320
 PxPyPzM4D.h:321
 PxPyPzM4D.h:322
 PxPyPzM4D.h:323
 PxPyPzM4D.h:324
 PxPyPzM4D.h:325
 PxPyPzM4D.h:326
 PxPyPzM4D.h:327
 PxPyPzM4D.h:328
 PxPyPzM4D.h:329
 PxPyPzM4D.h:330
 PxPyPzM4D.h:331
 PxPyPzM4D.h:332
 PxPyPzM4D.h:333
 PxPyPzM4D.h:334
 PxPyPzM4D.h:335
 PxPyPzM4D.h:336
 PxPyPzM4D.h:337
 PxPyPzM4D.h:338
 PxPyPzM4D.h:339
 PxPyPzM4D.h:340
 PxPyPzM4D.h:341
 PxPyPzM4D.h:342
 PxPyPzM4D.h:343
 PxPyPzM4D.h:344
 PxPyPzM4D.h:345
 PxPyPzM4D.h:346
 PxPyPzM4D.h:347
 PxPyPzM4D.h:348
 PxPyPzM4D.h:349
 PxPyPzM4D.h:350
 PxPyPzM4D.h:351
 PxPyPzM4D.h:352
 PxPyPzM4D.h:353
 PxPyPzM4D.h:354
 PxPyPzM4D.h:355
 PxPyPzM4D.h:356
 PxPyPzM4D.h:357
 PxPyPzM4D.h:358
 PxPyPzM4D.h:359
 PxPyPzM4D.h:360
 PxPyPzM4D.h:361
 PxPyPzM4D.h:362
 PxPyPzM4D.h:363
 PxPyPzM4D.h:364
 PxPyPzM4D.h:365
 PxPyPzM4D.h:366
 PxPyPzM4D.h:367
 PxPyPzM4D.h:368
 PxPyPzM4D.h:369
 PxPyPzM4D.h:370
 PxPyPzM4D.h:371
 PxPyPzM4D.h:372
 PxPyPzM4D.h:373
 PxPyPzM4D.h:374
 PxPyPzM4D.h:375
 PxPyPzM4D.h:376
 PxPyPzM4D.h:377
 PxPyPzM4D.h:378
 PxPyPzM4D.h:379
 PxPyPzM4D.h:380
 PxPyPzM4D.h:381
 PxPyPzM4D.h:382
 PxPyPzM4D.h:383
 PxPyPzM4D.h:384
 PxPyPzM4D.h:385
 PxPyPzM4D.h:386
 PxPyPzM4D.h:387
 PxPyPzM4D.h:388
 PxPyPzM4D.h:389
 PxPyPzM4D.h:390
 PxPyPzM4D.h:391
 PxPyPzM4D.h:392
 PxPyPzM4D.h:393
 PxPyPzM4D.h:394
 PxPyPzM4D.h:395
 PxPyPzM4D.h:396
 PxPyPzM4D.h:397
 PxPyPzM4D.h:398
 PxPyPzM4D.h:399
 PxPyPzM4D.h:400
 PxPyPzM4D.h:401
 PxPyPzM4D.h:402
 PxPyPzM4D.h:403
 PxPyPzM4D.h:404
 PxPyPzM4D.h:405
 PxPyPzM4D.h:406
 PxPyPzM4D.h:407
 PxPyPzM4D.h:408
 PxPyPzM4D.h:409
 PxPyPzM4D.h:410
 PxPyPzM4D.h:411
 PxPyPzM4D.h:412
 PxPyPzM4D.h:413
 PxPyPzM4D.h:414
 PxPyPzM4D.h:415
 PxPyPzM4D.h:416
 PxPyPzM4D.h:417
 PxPyPzM4D.h:418
 PxPyPzM4D.h:419
 PxPyPzM4D.h:420
 PxPyPzM4D.h:421
 PxPyPzM4D.h:422
 PxPyPzM4D.h:423
 PxPyPzM4D.h:424
 PxPyPzM4D.h:425
 PxPyPzM4D.h:426
 PxPyPzM4D.h:427
 PxPyPzM4D.h:428
 PxPyPzM4D.h:429
 PxPyPzM4D.h:430
 PxPyPzM4D.h:431
 PxPyPzM4D.h:432
 PxPyPzM4D.h:433
 PxPyPzM4D.h:434
 PxPyPzM4D.h:435
 PxPyPzM4D.h:436
 PxPyPzM4D.h:437
 PxPyPzM4D.h:438
 PxPyPzM4D.h:439
 PxPyPzM4D.h:440
 PxPyPzM4D.h:441
 PxPyPzM4D.h:442
 PxPyPzM4D.h:443
 PxPyPzM4D.h:444