Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/root/TVirtualGeoTrack.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // @(#)root/geom:$Id$
0002 // Author: Andrei Gheata   2003/04/10
0003 
0004 /*************************************************************************
0005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
0006  * All rights reserved.                                                  *
0007  *                                                                       *
0008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
0009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
0010  *************************************************************************/
0011 
0012 #ifndef ROOT_TVirtualGeoTrack
0013 #define ROOT_TVirtualGeoTrack
0014 
0015 #include "TObjArray.h"
0016 
0017 #include "TGeoAtt.h"
0018 
0019 #include "TAttLine.h"
0020 
0021 #include "TAttMarker.h"
0022 
0023 class TVirtualGeoTrack : public TObject, public TGeoAtt, public TAttLine, public TAttMarker {
0024 protected:
0025    Int_t fPDG{0};                      // track pdg code
0026    Int_t fId{-1};                      // track id
0027    TVirtualGeoTrack *fParent{nullptr}; // id of parent
0028    TObject *fParticle{nullptr};        // particle for this track
0029    TObjArray *fTracks{nullptr};        // daughter tracks
0030 
0031    TVirtualGeoTrack(const TVirtualGeoTrack &) = delete;
0032    TVirtualGeoTrack &operator=(const TVirtualGeoTrack &) = delete;
0033 
0034 public:
0035    TVirtualGeoTrack();
0036    TVirtualGeoTrack(Int_t id, Int_t pdgcode, TVirtualGeoTrack *parent = nullptr, TObject *particle = nullptr);
0037    ~TVirtualGeoTrack() override;
0038 
0039    virtual TVirtualGeoTrack *AddDaughter(Int_t id, Int_t pdgcode, TObject *particle = nullptr) = 0;
0040    virtual Int_t AddDaughter(TVirtualGeoTrack *other) = 0;
0041    virtual void AddPoint(Double_t x, Double_t y, Double_t z, Double_t t) = 0;
0042    virtual TVirtualGeoTrack *FindTrackWithId(Int_t id) const;
0043    Int_t GetId() const { return fId; }
0044    virtual Int_t GetDaughterId(Int_t index) const;
0045    TVirtualGeoTrack *GetDaughter(Int_t index) const { return (TVirtualGeoTrack *)fTracks->At(index); }
0046    TVirtualGeoTrack *GetMother() const { return fParent; }
0047    TObject *GetMotherParticle() const { return fParent ? fParent->GetParticle() : nullptr; }
0048    const char *GetName() const override;
0049    Int_t GetNdaughters() const { return fTracks ? fTracks->GetEntriesFast() : 0; }
0050    virtual Int_t GetNpoints() const = 0;
0051    Int_t GetParentId() const { return fParent ? fParent->GetId() : -1; }
0052    TObject *GetParticle() const { return fParticle; }
0053    Int_t GetPDG() const { return fPDG; }
0054    Int_t GetLastPoint(Double_t &x, Double_t &y, Double_t &z, Double_t &t) const
0055    {
0056       return GetPoint(GetNpoints() - 1, x, y, z, t);
0057    }
0058    const Double_t *GetFirstPoint() const { return GetPoint(0); }
0059    const Double_t *GetLastPoint() const { return GetPoint(GetNpoints() - 1); }
0060    virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y, Double_t &z, Double_t &t) const = 0;
0061    virtual const Double_t *GetPoint(Int_t i) const = 0;
0062    Bool_t HasPoints() const { return (GetNpoints() == 0) ? kFALSE : kTRUE; }
0063    Bool_t IsInTimeRange() const;
0064    void Paint(Option_t *option = "") override = 0;
0065    virtual void PaintCollect(Double_t /*time*/, Double_t * /*box*/) {}
0066    virtual void PaintCollectTrack(Double_t /*time*/, Double_t * /*box*/) {}
0067    virtual void PaintTrack(Option_t *option = "") = 0;
0068    virtual void ResetTrack() = 0;
0069    void SetName(const char *name);
0070    virtual void SetParticle(TObject *particle) { fParticle = particle; }
0071    void SetParent(TVirtualGeoTrack *parent) { fParent = parent; }
0072    void SetId(Int_t id) { fId = id; }
0073    virtual void SetPDG(Int_t pdgcode) { fPDG = pdgcode; }
0074 
0075    ClassDefOverride(TVirtualGeoTrack, 1) // virtual geometry tracks
0076 };
0077 
0078 #endif