ROOT logo
#ifndef AliVParticle_H
#define AliVParticle_H
/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//-------------------------------------------------------------------------
//     base class for ESD and AOD particles
//     Author: Markus Oldenburg, CERN
//-------------------------------------------------------------------------

#include <Rtypes.h>
#include <TObject.h>
#include "AliVMisc.h"

#include <float.h>

const Double_t kAlmost1=1. - Double_t(FLT_EPSILON);
const Double_t kAlmost0=Double_t(FLT_MIN);

const Double_t kB2C=-0.299792458e-3;
const Double_t kAlmost0Field=1.e-13;

class AliVParticle: public TObject {

public:
  AliVParticle() { }
  virtual ~AliVParticle() { }
  AliVParticle(const AliVParticle& vPart); 
  AliVParticle& operator=(const AliVParticle& vPart);

  // constructor for reinitialisation of vtable
  AliVParticle( AliVConstructorReinitialisationFlag ) :TObject(){}

  // kinematics
  virtual Double_t Px() const = 0;
  virtual Double_t Py() const = 0;
  virtual Double_t Pz() const = 0;
  virtual Double_t Pt() const = 0;
  virtual Double_t P()  const = 0;
  virtual Bool_t   PxPyPz(Double_t p[3]) const = 0;

  virtual Double_t Xv() const = 0;
  virtual Double_t Yv() const = 0;
  virtual Double_t Zv() const = 0;
  virtual Bool_t   XvYvZv(Double_t x[3]) const = 0;  

  virtual Double_t OneOverPt()  const = 0;
  virtual Double_t Phi()        const = 0;
  virtual Double_t Theta()      const = 0;


  virtual Double_t E()          const = 0;
  virtual Double_t M()          const = 0;
  
  virtual Double_t Eta()        const = 0;
  virtual Double_t Y()          const = 0;
  
  virtual Short_t Charge()      const = 0;
  virtual Int_t   GetLabel()    const = 0;
  // PID
  virtual Int_t   PdgCode()     const = 0;       
  virtual const Double_t *PID() const = 0; // return PID object (to be defined, still)


  
  /** Compare this class with an other instance of this class
   *  used in a TCollection::Sort()/TClonesArray::Sort()
   *  @param   obj  ptr to other instance
   *  @return  Returns 0 when equal, 1 when this is smaller
   *  and -1 when bigger -- sorts descending
   */
  Int_t Compare( const TObject* obj) const;
  
    
  /** Defines this class as being sortable in a TCollection
   *  @return     always kTRUE;
   */
  Bool_t IsSortable() const  { return kTRUE; }
  virtual Bool_t IsPrimary()  const  { return kFALSE; }
  virtual void    SetFlag(UInt_t) {;}
  virtual UInt_t  GetFlag() const {return 0;}  

  // coordinate system conversions
  Bool_t   Local2GlobalMomentum(Double_t p[3], Double_t alpha) const;
  Bool_t   Local2GlobalPosition(Double_t r[3], Double_t alpha) const;
  Bool_t   Global2LocalMomentum(Double_t p[3], Short_t charge, Double_t &alpha) const;
  Bool_t   Global2LocalPosition(Double_t r[3], Double_t alpha) const;

  //Navigation
  virtual Int_t   GetMother()   const {return -1;}
  virtual Int_t   GetFirstDaughter()   const {return -1;}
  virtual Int_t   GetLastDaughter()    const {return -1;}
  virtual void    SetGeneratorIndex(Short_t) {;}
  virtual Short_t GetGeneratorIndex() const {return -1;}
  ClassDef(AliVParticle, 3)  // base class for particles
};

#endif
 AliVParticle.h:1
 AliVParticle.h:2
 AliVParticle.h:3
 AliVParticle.h:4
 AliVParticle.h:5
 AliVParticle.h:6
 AliVParticle.h:7
 AliVParticle.h:8
 AliVParticle.h:9
 AliVParticle.h:10
 AliVParticle.h:11
 AliVParticle.h:12
 AliVParticle.h:13
 AliVParticle.h:14
 AliVParticle.h:15
 AliVParticle.h:16
 AliVParticle.h:17
 AliVParticle.h:18
 AliVParticle.h:19
 AliVParticle.h:20
 AliVParticle.h:21
 AliVParticle.h:22
 AliVParticle.h:23
 AliVParticle.h:24
 AliVParticle.h:25
 AliVParticle.h:26
 AliVParticle.h:27
 AliVParticle.h:28
 AliVParticle.h:29
 AliVParticle.h:30
 AliVParticle.h:31
 AliVParticle.h:32
 AliVParticle.h:33
 AliVParticle.h:34
 AliVParticle.h:35
 AliVParticle.h:36
 AliVParticle.h:37
 AliVParticle.h:38
 AliVParticle.h:39
 AliVParticle.h:40
 AliVParticle.h:41
 AliVParticle.h:42
 AliVParticle.h:43
 AliVParticle.h:44
 AliVParticle.h:45
 AliVParticle.h:46
 AliVParticle.h:47
 AliVParticle.h:48
 AliVParticle.h:49
 AliVParticle.h:50
 AliVParticle.h:51
 AliVParticle.h:52
 AliVParticle.h:53
 AliVParticle.h:54
 AliVParticle.h:55
 AliVParticle.h:56
 AliVParticle.h:57
 AliVParticle.h:58
 AliVParticle.h:59
 AliVParticle.h:60
 AliVParticle.h:61
 AliVParticle.h:62
 AliVParticle.h:63
 AliVParticle.h:64
 AliVParticle.h:65
 AliVParticle.h:66
 AliVParticle.h:67
 AliVParticle.h:68
 AliVParticle.h:69
 AliVParticle.h:70
 AliVParticle.h:71
 AliVParticle.h:72
 AliVParticle.h:73
 AliVParticle.h:74
 AliVParticle.h:75
 AliVParticle.h:76
 AliVParticle.h:77
 AliVParticle.h:78
 AliVParticle.h:79
 AliVParticle.h:80
 AliVParticle.h:81
 AliVParticle.h:82
 AliVParticle.h:83
 AliVParticle.h:84
 AliVParticle.h:85
 AliVParticle.h:86
 AliVParticle.h:87
 AliVParticle.h:88
 AliVParticle.h:89
 AliVParticle.h:90
 AliVParticle.h:91
 AliVParticle.h:92
 AliVParticle.h:93
 AliVParticle.h:94
 AliVParticle.h:95
 AliVParticle.h:96
 AliVParticle.h:97
 AliVParticle.h:98
 AliVParticle.h:99
 AliVParticle.h:100