#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 Vertex4D_t
{
Float_t fX, fY, fZ, fT;
Vertex4D_t() : fX(0), fY(0), fZ(0), fT(0) {}
Vertex4D_t(Float_t x, Float_t y, Float_t z, Float_t t=0) :
fX(x), fY(y), fZ(z), fT(t) {}
Float_t Mag() const { return TMath::Sqrt(fX*fX + fY*fY + fZ*fZ);}
Float_t Mag2() const { return fX*fX + fY*fY + fZ*fZ;}
Float_t Perp() const { return TMath::Sqrt(fX*fX + fY*fY);}
Float_t Perp2() const { return fX*fX + fY*fY;}
Float_t R() const { return Perp(); }
Vertex4D_t operator + (const Vertex4D_t & b)
{ return Vertex4D_t(fX + b.fX, fY + b.fY, fZ + b.fZ, fT + b.fT); }
Vertex4D_t operator - (const Vertex4D_t & b)
{ return Vertex4D_t(fX - b.fX, fY - b.fY, fZ - b.fZ, fT - b.fT); }
Vertex4D_t operator * (Float_t a)
{ return Vertex4D_t(a*fX, a*fY, a*fZ, a*fT); }
Vertex4D_t& operator += (const Vertex4D_t & b)
{ fX += b.fX; fY += b.fY; fZ += b.fZ; fT += b.fT; return *this; }
};
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() :
fLam (0), fR (0), fPhiStep (0), fTimeStep (0) ,
fSin (0), fCos (0),
fXoff (0), fYoff (0)
{}
void Step(Vertex4D_t& v, TEveVector& p);
void StepVertex(const Vertex4D_t& v, const TEveVector& p, Vertex4D_t& 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 fRnrDaughters;
Bool_t fRnrReferences;
Bool_t fRnrDecay;
Bool_t fRnrFV;
TMarker fPMAtt;
TMarker fFVAtt;
Int_t fCharge;
Float_t fVelocity;
std::vector<Vertex4D_t> fPoints;
Vertex4D_t fV;
Int_t fN;
Int_t fNLast;
Int_t fNMax;
Helix_t fH;
void RebuildTracks();
void InitHelix();
void SetNumOfSteps();
Bool_t HelixToVertex(TEveVector& v, TEveVector& p);
void HelixToBounds(TEveVector& p);
Bool_t LineToVertex (TEveVector& v);
void LineToBounds (TEveVector& p);
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);
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 SetFitDaughters(Bool_t x);
void SetFitReferences(Bool_t x);
void SetFitDecay(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 GetFitDaughters() const { return fFitDaughters; }
Bool_t GetFitReferences() const { return fFitReferences; }
Bool_t GetFitDecay() const { return fFitDecay; }
Bool_t GetRnrFV() const { return fRnrFV; }
TMarker& RefPMAtt() { return fPMAtt; }
TMarker& RefFVAtt() { return fFVAtt; }
static Float_t fgDefMagField;
static const Float_t fgkB2C;
static TEveTrackPropagator fgDefStyle;
ClassDef(TEveTrackPropagator, 0);
};
#endif
Last update: Thu Jan 17 08:49:35 2008
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.