ROOT logo
// @(#)root/eg:$Id: TPrimary.cxx 21393 2007-12-17 08:55:42Z brun $
// Author: Ola Nordmann   21/09/95

/*************************************************************************
 * 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.             *
 *************************************************************************/

//______________________________________________________________________________
//
// old version of a  dynamic particle class created by event generators.
// This class is now obsolete. Use TParticle instead.

#include "TObject.h"
#include "Rtypes.h"
#include "TString.h"
#include "TAttParticle.h"
#include "TPrimary.h"
#include "TView.h"
#include "TMath.h"
#include "TVirtualPad.h"
#include "TPolyLine3D.h"

ClassImp(TPrimary)

//______________________________________________________________________________
TPrimary::TPrimary()
{
//
//  Primary vertex particle default constructor
//

   //do nothing

}

//______________________________________________________________________________
TPrimary::TPrimary(Int_t part, Int_t first, Int_t second, Int_t gener,
                   Double_t px, Double_t py, Double_t pz,
                   Double_t etot, Double_t vx, Double_t vy, Double_t vz,
                   Double_t time, Double_t timend, const char *type)
{
//
//  TPrimary vertex particle normal constructor
//
   fPart         = part;
   fFirstMother  = first;
   fSecondMother = second;
   fGeneration   = gener;
   fPx           = px;
   fPy           = py;
   fPz           = pz;
   fEtot         = etot;
   fVx           = vx;
   fVy           = vy;
   fVz           = vz;
   fTime         = time;
   fTimeEnd      = timend;
   fType         = type;
}

//______________________________________________________________________________
TPrimary::~TPrimary()
{
//
//   Primaray vertex particle default destructor
//

   //do nothing
}


//______________________________________________________________________________
Int_t TPrimary::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 = TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
   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] = fVx+rbox*fPx/pmom;
   xe[1] = fVy+rbox*fPy/pmom;
   xe[2] = fVz+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 TPrimary::ExecuteEvent(Int_t, Int_t, Int_t)
{
//*-*-*-*-*-*-*-*-*-*-*Execute action corresponding to one event*-*-*-*
//*-*                  =========================================

   gPad->SetCursor(kPointer);
}

//______________________________________________________________________________
const char *TPrimary::GetName() const
{
   //return name of primary particle
   static char def[4] = "XXX";
   const TAttParticle *ap = GetParticle();
   if (ap) return ap->GetName();
   else    return def;
}

//______________________________________________________________________________
const TAttParticle *TPrimary::GetParticle() const
{
//
//  returning a pointer to the particle attributes
//
   if (!TAttParticle::fgList) TAttParticle::DefinePDG();
   return TAttParticle::GetParticle(fPart);
}

//______________________________________________________________________________
const char *TPrimary::GetTitle() const
{
   //return title of primary particle
   static char title[128];
   Float_t pmom = TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
   sprintf(title,"pmom=%f GeV",pmom);
   return title;
}

//______________________________________________________________________________
void TPrimary::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 = TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
   if (pmom == 0) return;
   TView *view = gPad->GetView();
   if (!view) return;
   view->GetRange(rmin,rmax);
   Float_t rbox = rmax[2];
   pline->SetPoint(0,fVx, fVy, fVz);
   Float_t xend = fVx+rbox*fPx/pmom;
   Float_t yend = fVy+rbox*fPy/pmom;
   Float_t zend = fVz+rbox*fPz/pmom;
   pline->SetPoint(1, xend, yend, zend);
   pline->SetLineColor(GetLineColor());
   pline->SetLineStyle(GetLineStyle());
   pline->SetLineWidth(GetLineWidth());
   pline->Paint(option);
}

//______________________________________________________________________________
void TPrimary::Print(Option_t *) const
{
//
//  Print the internals of the primary vertex particle
//
   char def[8] = "XXXXXXX";
   const char *name;
   TAttParticle *ap = (TAttParticle*)GetParticle();
   if (ap) name = ap->GetName();
   else    name = def;
   Printf("TPrimary: %-13s  p: %8f %8f %8f Vertex: %8e %8e %8e %5d %5d %s",
   name,fPx,fPy,fPz,fVx,fVy,fVz,
   fFirstMother,fSecondMother,fType.Data());
}

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

   Float_t pmom = TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz);
   if (pmom == 0) return;
   Int_t npoints = 2;
   gSize3D.numPoints += npoints;
   gSize3D.numSegs   += (npoints-1);
   gSize3D.numPolys  += 0;

}

 TPrimary.cxx:1
 TPrimary.cxx:2
 TPrimary.cxx:3
 TPrimary.cxx:4
 TPrimary.cxx:5
 TPrimary.cxx:6
 TPrimary.cxx:7
 TPrimary.cxx:8
 TPrimary.cxx:9
 TPrimary.cxx:10
 TPrimary.cxx:11
 TPrimary.cxx:12
 TPrimary.cxx:13
 TPrimary.cxx:14
 TPrimary.cxx:15
 TPrimary.cxx:16
 TPrimary.cxx:17
 TPrimary.cxx:18
 TPrimary.cxx:19
 TPrimary.cxx:20
 TPrimary.cxx:21
 TPrimary.cxx:22
 TPrimary.cxx:23
 TPrimary.cxx:24
 TPrimary.cxx:25
 TPrimary.cxx:26
 TPrimary.cxx:27
 TPrimary.cxx:28
 TPrimary.cxx:29
 TPrimary.cxx:30
 TPrimary.cxx:31
 TPrimary.cxx:32
 TPrimary.cxx:33
 TPrimary.cxx:34
 TPrimary.cxx:35
 TPrimary.cxx:36
 TPrimary.cxx:37
 TPrimary.cxx:38
 TPrimary.cxx:39
 TPrimary.cxx:40
 TPrimary.cxx:41
 TPrimary.cxx:42
 TPrimary.cxx:43
 TPrimary.cxx:44
 TPrimary.cxx:45
 TPrimary.cxx:46
 TPrimary.cxx:47
 TPrimary.cxx:48
 TPrimary.cxx:49
 TPrimary.cxx:50
 TPrimary.cxx:51
 TPrimary.cxx:52
 TPrimary.cxx:53
 TPrimary.cxx:54
 TPrimary.cxx:55
 TPrimary.cxx:56
 TPrimary.cxx:57
 TPrimary.cxx:58
 TPrimary.cxx:59
 TPrimary.cxx:60
 TPrimary.cxx:61
 TPrimary.cxx:62
 TPrimary.cxx:63
 TPrimary.cxx:64
 TPrimary.cxx:65
 TPrimary.cxx:66
 TPrimary.cxx:67
 TPrimary.cxx:68
 TPrimary.cxx:69
 TPrimary.cxx:70
 TPrimary.cxx:71
 TPrimary.cxx:72
 TPrimary.cxx:73
 TPrimary.cxx:74
 TPrimary.cxx:75
 TPrimary.cxx:76
 TPrimary.cxx:77
 TPrimary.cxx:78
 TPrimary.cxx:79
 TPrimary.cxx:80
 TPrimary.cxx:81
 TPrimary.cxx:82
 TPrimary.cxx:83
 TPrimary.cxx:84
 TPrimary.cxx:85
 TPrimary.cxx:86
 TPrimary.cxx:87
 TPrimary.cxx:88
 TPrimary.cxx:89
 TPrimary.cxx:90
 TPrimary.cxx:91
 TPrimary.cxx:92
 TPrimary.cxx:93
 TPrimary.cxx:94
 TPrimary.cxx:95
 TPrimary.cxx:96
 TPrimary.cxx:97
 TPrimary.cxx:98
 TPrimary.cxx:99
 TPrimary.cxx:100
 TPrimary.cxx:101
 TPrimary.cxx:102
 TPrimary.cxx:103
 TPrimary.cxx:104
 TPrimary.cxx:105
 TPrimary.cxx:106
 TPrimary.cxx:107
 TPrimary.cxx:108
 TPrimary.cxx:109
 TPrimary.cxx:110
 TPrimary.cxx:111
 TPrimary.cxx:112
 TPrimary.cxx:113
 TPrimary.cxx:114
 TPrimary.cxx:115
 TPrimary.cxx:116
 TPrimary.cxx:117
 TPrimary.cxx:118
 TPrimary.cxx:119
 TPrimary.cxx:120
 TPrimary.cxx:121
 TPrimary.cxx:122
 TPrimary.cxx:123
 TPrimary.cxx:124
 TPrimary.cxx:125
 TPrimary.cxx:126
 TPrimary.cxx:127
 TPrimary.cxx:128
 TPrimary.cxx:129
 TPrimary.cxx:130
 TPrimary.cxx:131
 TPrimary.cxx:132
 TPrimary.cxx:133
 TPrimary.cxx:134
 TPrimary.cxx:135
 TPrimary.cxx:136
 TPrimary.cxx:137
 TPrimary.cxx:138
 TPrimary.cxx:139
 TPrimary.cxx:140
 TPrimary.cxx:141
 TPrimary.cxx:142
 TPrimary.cxx:143
 TPrimary.cxx:144
 TPrimary.cxx:145
 TPrimary.cxx:146
 TPrimary.cxx:147
 TPrimary.cxx:148
 TPrimary.cxx:149
 TPrimary.cxx:150
 TPrimary.cxx:151
 TPrimary.cxx:152
 TPrimary.cxx:153
 TPrimary.cxx:154
 TPrimary.cxx:155
 TPrimary.cxx:156
 TPrimary.cxx:157
 TPrimary.cxx:158
 TPrimary.cxx:159
 TPrimary.cxx:160
 TPrimary.cxx:161
 TPrimary.cxx:162
 TPrimary.cxx:163
 TPrimary.cxx:164
 TPrimary.cxx:165
 TPrimary.cxx:166
 TPrimary.cxx:167
 TPrimary.cxx:168
 TPrimary.cxx:169
 TPrimary.cxx:170
 TPrimary.cxx:171
 TPrimary.cxx:172
 TPrimary.cxx:173
 TPrimary.cxx:174
 TPrimary.cxx:175
 TPrimary.cxx:176
 TPrimary.cxx:177
 TPrimary.cxx:178
 TPrimary.cxx:179
 TPrimary.cxx:180
 TPrimary.cxx:181
 TPrimary.cxx:182
 TPrimary.cxx:183
 TPrimary.cxx:184
 TPrimary.cxx:185
 TPrimary.cxx:186
 TPrimary.cxx:187
 TPrimary.cxx:188
 TPrimary.cxx:189
 TPrimary.cxx:190
 TPrimary.cxx:191
 TPrimary.cxx:192
 TPrimary.cxx:193
 TPrimary.cxx:194
 TPrimary.cxx:195
 TPrimary.cxx:196
 TPrimary.cxx:197
 TPrimary.cxx:198
 TPrimary.cxx:199
 TPrimary.cxx:200
 TPrimary.cxx:201
 TPrimary.cxx:202
 TPrimary.cxx:203
 TPrimary.cxx:204
 TPrimary.cxx:205
 TPrimary.cxx:206
 TPrimary.cxx:207
 TPrimary.cxx:208
 TPrimary.cxx:209
 TPrimary.cxx:210
 TPrimary.cxx:211
 TPrimary.cxx:212