#ifndef ROOT_TEveTrackPropagator
#define ROOT_TEveTrackPropagator
#include "TEveVSDStructs.h"
#include "TEveUtil.h"
#include "TObject.h"
#include "TMarker.h"
#include <vector>
class TEvePointSet;
class TEveTrackPropagator: public TObject,
public TEveRefBackPtr
{
friend class TEveTrackPropagatorSubEditor;
public:
struct Helix_t
{
Float_t fA;
Float_t fLam;
Float_t fR;
Float_t fPhiStep;
Float_t fTimeStep;
Float_t fSin, fCos;
Float_t fXoff, fYoff;
Helix_t() : fA(0), fLam(0), fR(0), fPhiStep(0), fTimeStep(0),
fSin(0), fCos(0), fXoff (0), fYoff (0)
{}
void Step(TEveVector4& v, TEveVector& p);
void StepVertex(const TEveVector4& v, const TEveVector& p, TEveVector4& forw);
};
private:
TEveTrackPropagator(const TEveTrackPropagator&);
TEveTrackPropagator& operator=(const TEveTrackPropagator&);
protected:
Float_t fMagField;
Float_t fMaxR;
Float_t fMaxZ;
Float_t fMaxOrbs;
Float_t fMinAng;
Float_t fDelta;
Bool_t fEditPathMarks;
Bool_t fFitDaughters;
Bool_t fFitReferences;
Bool_t fFitDecay;
Bool_t fFitCluster2Ds;
Bool_t fRnrDaughters;
Bool_t fRnrReferences;
Bool_t fRnrDecay;
Bool_t fRnrCluster2Ds;
Bool_t fRnrFV;
TMarker fPMAtt;
TMarker fFVAtt;
Int_t fCharge;
Float_t fVelocity;
std::vector<TEveVector4> fPoints;
TEveVector4 fV;
Int_t fN;
Int_t fNLast;
Int_t fNMax;
Helix_t fH;
void RebuildTracks();
void InitHelix(const TEveVector& p);
void SetNumOfSteps();
Bool_t HelixToVertex(TEveVector& v, TEveVector& p);
void HelixToBounds(TEveVector& p);
Bool_t LineToVertex (TEveVector& v);
void LineToBounds (TEveVector& p);
Bool_t HelixIntersectPlane(const TEveVector& p, const TEveVector& point, const TEveVector& normal,
TEveVector& itsect);
Bool_t LineIntersectPlane(const TEveVector& p, const TEveVector& point, const TEveVector& normal,
TEveVector& itsect);
public:
TEveTrackPropagator();
virtual ~TEveTrackPropagator() {}
void InitTrack(TEveVector &v, TEveVector &p, Float_t beta, Int_t charge);
void ResetTrack();
void GoToBounds(TEveVector& p);
Bool_t GoToVertex(TEveVector& v, TEveVector& p);
Bool_t IntersectPlane(const TEveVector& p, const TEveVector& point, const TEveVector& normal,
TEveVector& itsect);
void FillPointSet(TEvePointSet* ps) const;
void SetMagField(Float_t x);
void SetMaxR(Float_t x);
void SetMaxZ(Float_t x);
void SetMaxOrbs(Float_t x);
void SetMinAng(Float_t x);
void SetDelta(Float_t x);
void SetEditPathMarks(Bool_t x) { fEditPathMarks = x; }
void SetRnrDaughters(Bool_t x);
void SetRnrReferences(Bool_t x);
void SetRnrDecay(Bool_t x);
void SetRnrCluster2Ds(Bool_t x);
void SetFitDaughters(Bool_t x);
void SetFitReferences(Bool_t x);
void SetFitDecay(Bool_t x);
void SetFitCluster2Ds(Bool_t x);
void SetRnrFV(Bool_t x) { fRnrFV = x; }
Float_t GetMagField() const { return fMagField; }
Float_t GetMaxR() const { return fMaxR; }
Float_t GetMaxZ() const { return fMaxZ; }
Float_t GetMaxOrbs() const { return fMaxOrbs; }
Float_t GetMinAng() const { return fMinAng; }
Float_t GetDelta() const { return fDelta; }
Bool_t GetEditPathMarks() const { return fEditPathMarks; }
Bool_t GetRnrDaughters() const { return fRnrDaughters; }
Bool_t GetRnrReferences() const { return fRnrReferences; }
Bool_t GetRnrDecay() const { return fRnrDecay; }
Bool_t GetRnrCluster2Ds() const { return fRnrCluster2Ds; }
Bool_t GetFitDaughters() const { return fFitDaughters; }
Bool_t GetFitReferences() const { return fFitReferences; }
Bool_t GetFitDecay() const { return fFitDecay; }
Bool_t GetFitCluster2Ds() const { return fFitCluster2Ds; }
Bool_t GetRnrFV() const { return fRnrFV; }
TMarker& RefPMAtt() { return fPMAtt; }
TMarker& RefFVAtt() { return fFVAtt; }
static Bool_t IsOutsideBounds(const TEveVector& point, Float_t maxRsqr, Float_t maxZ);
static Float_t fgDefMagField;
static const Float_t fgkB2C;
static TEveTrackPropagator fgDefStyle;
ClassDef(TEveTrackPropagator, 0);
};
inline Bool_t TEveTrackPropagator::IsOutsideBounds(const TEveVector& point,
Float_t maxRsqr,
Float_t maxZ)
{
return TMath::Abs(point.fZ) > maxZ ||
point.fX*point.fX + point.fY*point.fY > maxRsqr;
}
#endif
Last change: Wed Jun 25 08:38:28 2008
Last generated: 2008-06-25 08:38
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.