ROOT logo
// @(#)root/eg:$Id: TParticle.cxx 28998 2009-06-15 12:47:44Z brun $
// Author: Rene Brun , Federico Carminati  26/04/99

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//______________________________________________________________________________
//
// a dynamic particle class created by event generators and used during
// the propagation in detectors. The static attributes of a TParticle
// are described by TParticlePDG.
//
//  Int_t          fPdgCode;              // PDG code of the particle
//  Int_t          fStatusCode;           // generation status code
//  Int_t          fMother[2];            // Indices of the mother particles
//  Int_t          fDaughter[2];          // Indices of the daughter particles
//  Float_t        fWeight;               // particle weight
//
//  Double_t       fCalcMass;             // Calculated mass
//
//  Double_t       fPx;                   // x component of momentum
//  Double_t       fPy;                   // y component of momentum
//  Double_t       fPz;                   // z component of momentum
//  Double_t       fE;                    // Energy
//
//  Double_t       fVx;                   // x of production vertex
//  Double_t       fVy;                   // y of production vertex
//  Double_t       fVz;                   // z of production vertex
//  Double_t       fVt;                   // t of production vertex
//
//  Double_t       fPolarTheta;           // Polar angle of polarisation
//  Double_t       fPolarPhi;             // azymutal angle of polarisation
//
//  TParticlePDG*  fParticlePDG;          //! reference to the particle record in PDG database

#include "TView.h"
#include "TVirtualPad.h"
#include "TPolyLine3D.h"
#include "TParticlePDG.h"
#include "TDatabasePDG.h"
#include "TParticle.h"
#include "TClass.h"
#include "X3DBuffer.h"

ClassImp(TParticle)

//______________________________________________________________________________
TParticle::TParticle() :
  fPdgCode(0), fStatusCode(0), fWeight(0),fCalcMass(0), fPx(0), fPy(0),
  fPz(0), fE(0), fVx(0), fVy(0), fVz(0), fVt(0), fPolarTheta(0), fPolarPhi(0)
{
   //default constructor
   fMother[0]   = 0;
   fMother[1]   = 0;
   fDaughter[0] = 0;
   fDaughter[1] = 0;
   fParticlePDG = 0;
}

//______________________________________________________________________________
TParticle::TParticle(Int_t pdg,       Int_t status,
                     Int_t mother1,   Int_t mother2,
                     Int_t daughter1, Int_t daughter2,
                     Double_t px, Double_t py, Double_t pz, Double_t etot,
                     Double_t vx, Double_t vy, Double_t vz, Double_t time):
  fPdgCode(pdg), fStatusCode(status), fWeight(1.),fPx(px), fPy(py),
  fPz(pz), fE(etot), fVx(vx), fVy(vy), fVz(vz), fVt(time)
{
   //constructor
   fMother[0]   = mother1;
   fMother[1]   = mother2;
   fDaughter[0] = daughter1;
   fDaughter[1] = daughter2;

   SetPolarisation(0,0,0);

   SetPdgCode(pdg);
}

//______________________________________________________________________________
TParticle::TParticle(Int_t pdg,       Int_t status,
                     Int_t mother1,   Int_t mother2,
                     Int_t daughter1, Int_t daughter2,
                     const TLorentzVector &p,
                     const TLorentzVector &v) :
  fPdgCode(pdg), fStatusCode(status), fWeight(1.),fPx(p.Px()), fPy(p.Py()),
  fPz(p.Pz()), fE(p.E()), fVx(v.X()), fVy(v.Y()), fVz(v.Z()), fVt(v.T())
{
   //constructor
   fMother[0]   = mother1;
   fMother[1]   = mother2;
   fDaughter[0] = daughter1;
   fDaughter[1] = daughter2;

   SetPolarisation(0,0,0);

   SetPdgCode(pdg);
}

//______________________________________________________________________________
TParticle::TParticle(const TParticle &p) :
  TObject(p), TAttLine(p), TAtt3D(p), fPdgCode(p.fPdgCode), fStatusCode(p.fStatusCode),
  fWeight(p.fWeight), fCalcMass(p.fCalcMass), fPx(p.fPx), fPy(p.fPy), fPz(p.fPz),
  fE(p.fE), fVx(p.fVx), fVy(p.fVy), fVz(p.fVz), fVt(p.fVt), fPolarTheta(p.fPolarTheta),
  fPolarPhi(p.fPolarPhi), fParticlePDG(p.fParticlePDG)
{
   // copy constructor

   fMother[0]=p.fMother[0];
   fMother[1]=p.fMother[1];
   fDaughter[0]=p.fDaughter[0];
   fDaughter[1]=p.fDaughter[1];
}

//______________________________________________________________________________
TParticle& TParticle::operator=(const TParticle &p)
{
   // Equal operator

   if(this!=&p) {
      TObject::operator=(p);
      TAttLine::operator=(p);
      TAtt3D::operator=(p);
      fPdgCode=p.fPdgCode;
      fStatusCode=p.fStatusCode;
      fMother[0]=p.fMother[0];
      fMother[1]=p.fMother[1];
      fDaughter[0]=p.fDaughter[0];
      fDaughter[1]=p.fDaughter[1];
      fWeight=p.fWeight;

      fCalcMass=p.fCalcMass;

      fPx=p.fPx;
      fPy=p.fPy;
      fPz=p.fPz;
      fE=p.fE;

      fVx=p.fVx;
      fVy=p.fVy;
      fVz=p.fVz;
      fVt=p.fVt;

      fPolarTheta=p.fPolarTheta;
      fPolarPhi=p.fPolarPhi;

      fParticlePDG=p.fParticlePDG;
   }
   return   *this;
}

//______________________________________________________________________________
TParticle::~TParticle()
{
   //destructor
}

//______________________________________________________________________________
Double_t TParticle::GetMass()
{
   // Return nominal particle mass from PDG table.
   return GetPDG()->Mass();
}

//______________________________________________________________________________
Int_t TParticle::Beauty()
{
   // Return beauty quantum number.
   return GetPDG()->Beauty();
}

//______________________________________________________________________________
Int_t TParticle::Charm()
{
   // Return charm quantum number.
   return GetPDG()->Charm();
}

//______________________________________________________________________________
Int_t TParticle::Strangeness()
{
   // Return strangeness quantum number.
   return GetPDG()->Strangeness();
}

//______________________________________________________________________________
Int_t TParticle::DistancetoPrimitive(Int_t px, Int_t py)
{
//*-*-*-*-*-*-*-*Compute distance from point px,py to a primary track*-*-*-*
//*-*            ====================================================
//*-*
//*-*  Compute the closest distance of approach from point px,py to each segment
//*-*  of a track.
//*-*  The distance is computed in pixels units.
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

   const Int_t big = 9999;
   Float_t xv[3], xe[3], xndc[3];
   Float_t rmin[3], rmax[3];
   TView *view = gPad->GetView();
   if(!view) return big;

   // compute first and last point in pad coordinates
   Float_t pmom = this->P();
   if (pmom == 0) return big;
   view->GetRange(rmin,rmax);
   Float_t rbox = rmax[2];
   xv[0] = fVx;
   xv[1] = fVy;
   xv[2] = fVz;
   xe[0] = xv[0]+rbox*fPx/pmom;
   xe[1] = xv[1]+rbox*fPy/pmom;
   xe[2] = xv[2]+rbox*fPz/pmom;
   view->WCtoNDC(xv, xndc);
   Float_t x1 = xndc[0];
   Float_t y1 = xndc[1];
   view->WCtoNDC(xe, xndc);
   Float_t x2 = xndc[0];
   Float_t y2 = xndc[1];

   return DistancetoLine(px,py,x1,y1,x2,y2);
}


//______________________________________________________________________________
void TParticle::ExecuteEvent(Int_t, Int_t, Int_t)
{
//*-*-*-*-*-*-*-*-*-*-*Execute action corresponding to one event*-*-*-*
//*-*                  =========================================

   gPad->SetCursor(kPointer);
}

//______________________________________________________________________________
const char* TParticle::GetName() const {
   //return particle name
   static char def[4] = "XXX";
   const TParticlePDG *ap = TDatabasePDG::Instance()->GetParticle(fPdgCode);
   if (ap) return ap->GetName();
   else    return def;
}


//______________________________________________________________________________
TParticlePDG*  TParticle::GetPDG(Int_t mode)
{
// returns a pointer to the TParticlePDG object using the pdgcode
// if mode == 0 (default) always get a fresh value for the pointer.
// if mode != 0 this function returns directly the previously
//              computed pointer from a previous call
// One can use mode=1 (faster) when the TParticle object is not part of a
// TClonesArray used in split mode in a Root TTree.

   if (!mode || !fParticlePDG) {
      (((TParticle*)this)->fParticlePDG = TDatabasePDG::Instance()->GetParticle(fPdgCode));
      // when mutable will be allowed, change above line to the following line
      //   fParticlePDG = TDatabasePDG::Instance()->GetParticle(fPdgCode);}
   }
   return fParticlePDG;
}

//______________________________________________________________________________
void TParticle::GetPolarisation(TVector3 &v)
{
   //return particle polarisation
   if(fPolarTheta == -99 && fPolarPhi == -99)
      //No polarisation to return
      v.SetXYZ(0.,0.,0.);
   else
      v.SetXYZ(TMath::Cos(fPolarPhi)*TMath::Sin(fPolarTheta),
               TMath::Sin(fPolarPhi)*TMath::Sin(fPolarTheta),
               TMath::Cos(fPolarTheta));
}

//______________________________________________________________________________
const char *TParticle::GetTitle() const
{
   //return particle title
   static char def[4] = "XXX";
   const TParticlePDG *ap = TDatabasePDG::Instance()->GetParticle(fPdgCode);
   if (ap) return ap->GetTitle();
   else    return def;
}

//______________________________________________________________________________
void TParticle::Paint(Option_t *option)
{
//
//  Paint a primary track
//
   Float_t rmin[3], rmax[3];
   static TPolyLine3D *pline = 0;
   if (!pline) {
      pline = new TPolyLine3D(2);
   }
   Float_t pmom = this->P();
   if (pmom == 0) return;
   TView *view = gPad->GetView();
   if (!view) return;
   view->GetRange(rmin,rmax);
   Float_t rbox = rmax[2];
   pline->SetPoint(0,Vx(), Vy(), Vz());
   Float_t xend = Vx()+rbox*Px()/pmom;
   Float_t yend = Vy()+rbox*Py()/pmom;
   Float_t zend = Vz()+rbox*Pz()/pmom;
   pline->SetPoint(1, xend, yend, zend);
   pline->SetLineColor(GetLineColor());
   pline->SetLineStyle(GetLineStyle());
   pline->SetLineWidth(GetLineWidth());
   pline->Paint(option);
}

//______________________________________________________________________________
void TParticle::Print(Option_t *) const
{
//
//  Print the internals of the primary vertex particle
//
   //TParticlePDG* pdg = ((TParticle*)this)->GetPDG();
   Printf("TParticle: %-13s  p: %8f %8f %8f Vertex: %8e %8e %8e %5d %5d",
          GetName(),Px(),Py(),Pz(),Vx(),Vy(),Vz(),
          fMother[0],fMother[1]);
}

//______________________________________________________________________________
void TParticle::SetPdgCode(Int_t pdg)
{
   //change the PDG code for this particle
   //Get a new pointer to a TParticlePDG from TDatabasePDG
   //Recompute the mass

   fPdgCode = pdg;
   fParticlePDG = TDatabasePDG::Instance()->GetParticle(pdg);
   if (fParticlePDG) {
      fCalcMass    = fParticlePDG->Mass();
   } else {
      Warning("SetPdg","PDG code %d unknown from TDatabasePDG",pdg);
      Double_t a2 = fE*fE -fPx*fPx -fPy*fPy -fPz*fPz;
      if (a2 >= 0) fCalcMass =  TMath::Sqrt(a2);
      else         fCalcMass = -TMath::Sqrt(-a2);
   }
}

//______________________________________________________________________________
void TParticle::SetPolarisation(Double_t polx, Double_t poly, Double_t polz)
{
   //set particle polarisation
   if(polx || poly || polz) {
      fPolarTheta = TMath::ACos(polz/TMath::Sqrt(polx*polx+poly*poly+polz*polz));
      fPolarPhi   = TMath::Pi()+TMath::ATan2(-poly,-polx);
   } else {
      fPolarTheta = -99;
      fPolarPhi = -99;
   }
}

//______________________________________________________________________________
void TParticle::Sizeof3D() const
{
//*-*-*-*-*-*Return total X3D size of this primary*-*-*-*-*-*-*
//*-*        =====================================

   Float_t pmom = this->P();
   if (pmom == 0) return;
   Int_t npoints = 2;
   gSize3D.numPoints += npoints;
   gSize3D.numSegs   += (npoints-1);
   gSize3D.numPolys  += 0;

}

//______________________________________________________________________________
void TParticle::Streamer(TBuffer &R__b)
{
   // Stream an object of class TParticle.

   if (R__b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
      if (R__v > 1) {
         R__b.ReadClassBuffer(TParticle::Class(), this, R__v, R__s, R__c);
         fParticlePDG = TDatabasePDG::Instance()->GetParticle(fPdgCode);
         return;
      }
      //====process old versions before automatic schema evolution
      TObject::Streamer(R__b);
      TAttLine::Streamer(R__b);
      R__b >> fPdgCode;
      R__b >> fStatusCode;
      R__b.ReadStaticArray(fMother);
      R__b.ReadStaticArray(fDaughter);
      R__b >> fWeight;
      R__b >> fCalcMass;
      R__b >> fPx;
      R__b >> fPy;
      R__b >> fPz;
      R__b >> fE;
      R__b >> fVx;
      R__b >> fVy;
      R__b >> fVz;
      R__b >> fVt;
      R__b >> fPolarTheta;
      R__b >> fPolarPhi;
      fParticlePDG = TDatabasePDG::Instance()->GetParticle(fPdgCode);
      R__b.CheckByteCount(R__s, R__c, TParticle::IsA());
      //====end of old versions

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