// @(#)root/geom:$Name: $:$Id: TVirtualGeoTrack.h,v 1.7 2004/03/05 11:53:36 brun Exp $
// Author: Andrei Gheata 2003/04/10
/*************************************************************************
* 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. *
*************************************************************************/
#ifndef ROOT_TVirtualGeoTrack
#define ROOT_TVirtualGeoTrack
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
#ifndef ROOT_TGeoAtt
#include "TGeoAtt.h"
#endif
#ifndef ROOT_TAttLine
#include "TAttLine.h"
#endif
#ifndef ROOT_TAttMarker
#include "TAttMarker.h"
#endif
/*************************************************************************
* TVirtualGeoTrack - Base class for user-defined tracks attached to a geometry.
* Tracks are 3D objects made of points and they store a
* pointer to a TParticle. The geometry manager holds a list
* of all tracks that will be deleted on destruction of
* gGeoManager.
*
*************************************************************************/
class TVirtualGeoTrack : public TObject,
public TGeoAtt,
public TAttLine,
public TAttMarker
{
protected:
Int_t fPDG; // track pdg code
Int_t fId; // track id
TVirtualGeoTrack *fParent; // id of parent
TObject *fParticle; // particle for this track
TObjArray *fTracks; // daughter tracks
public:
TVirtualGeoTrack();
TVirtualGeoTrack(Int_t id, Int_t pdgcode, TVirtualGeoTrack *parent=0, TObject *particle=0);
virtual ~TVirtualGeoTrack();
virtual TVirtualGeoTrack *AddDaughter(Int_t id, Int_t pdgcode, TObject *particle=0) = 0;
virtual Int_t AddDaughter(TVirtualGeoTrack *other) = 0;
virtual void AddPoint(Double_t x, Double_t y, Double_t z, Double_t t) = 0;
Int_t GetId() const {return fId;}
virtual Int_t GetDaughterId(Int_t index) const {return GetDaughter(index)->GetId();}
TVirtualGeoTrack *GetDaughter(Int_t index) const {return (TVirtualGeoTrack*)fTracks->At(index);}
TVirtualGeoTrack *GetMother() const {return fParent;}
TObject *GetMotherParticle() const {return (fParent)?fParent->GetParticle():0;}
virtual const char *GetName() const;
Int_t GetNdaughters() const {return (fTracks)?fTracks->GetEntriesFast():0;}
virtual Int_t GetNpoints() const = 0;
Int_t GetParentId() const {return (fParent)?fParent->GetId():-1;}
TObject *GetParticle() const {return fParticle;}
Int_t GetPDG() const {return fPDG;}
Int_t GetLastPoint(Double_t &x, Double_t &y, Double_t &z, Double_t &t) const {return GetPoint(GetNpoints()-1,x,y,z,t);}
const Double_t *GetFirstPoint() const {return GetPoint(0);}
const Double_t *GetLastPoint() const {return GetPoint(GetNpoints()-1);}
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y, Double_t &z, Double_t &t) const = 0;
virtual const Double_t *GetPoint(Int_t i) const = 0;
Bool_t HasPoints() const {return (GetNpoints()==0)?kFALSE:kTRUE;}
Bool_t IsInTimeRange() const;
virtual void Paint(Option_t *option="") = 0;
virtual void PaintCollect(Double_t /*time*/, Double_t * /*box*/) {;}
virtual void PaintCollectTrack(Double_t /*time*/, Double_t * /*box*/) {;}
virtual void PaintTrack(Option_t *option="") = 0;
virtual void ResetTrack() = 0;
void SetName(const char *name);
virtual void SetParticle(TObject *particle) {fParticle=particle;}
void SetParent(TVirtualGeoTrack *parent) {fParent = parent;}
void SetId(Int_t id) {fId = id;}
virtual void SetPDG(Int_t pdgcode) {fPDG = pdgcode;}
ClassDef(TVirtualGeoTrack, 1) // virtual geometry tracks
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1