#ifndef ROOT_THaVDC
#define ROOT_THaVDC
#include "THaTrackingDetector.h"
#include <vector>
class THaVDCUVPlane;
class THaTrack;
class TClonesArray;
class THaVDCUVTrack;
class THaVDC : public THaTrackingDetector {
public:
THaVDC( const char* name, const char* description = "",
THaApparatus* a = NULL );
virtual ~THaVDC();
virtual void Clear( Option_t* opt="" );
virtual Int_t Decode( const THaEvData& );
virtual Int_t CoarseTrack( TClonesArray& tracks );
virtual Int_t FineTrack( TClonesArray& tracks );
virtual Int_t FindVertices( TClonesArray& tracks );
virtual EStatus Init( const TDatime& date );
virtual THaVDCUVPlane* GetUpper() { return fUpper; }
virtual THaVDCUVPlane* GetLower() { return fLower; }
virtual Double_t GetVDCAngle() { return fVDCAngle; }
virtual Double_t GetSpacing() { return fUSpacing; }
virtual void Print(const Option_t* opt) const;
enum {
kStageMask = BIT(14) | BIT(15),
kInvalid = 0x0000,
kCoarse = BIT(14),
kFine = BIT(15),
kReassigned = BIT(16),
kMultiTrack = BIT(17),
kBadTrack = BIT(18)
};
enum {
kOnlyFastest = BIT(14),
kTDCbits = BIT(15) | BIT(16),
kHardTDCcut = BIT(15),
kSoftTDCcut = BIT(16),
kIgnoreNegDrift = BIT(17),
kCoarseOnly = BIT(23)
};
protected:
THaVDCUVPlane* fLower;
THaVDCUVPlane* fUpper;
TClonesArray* fUVpairs;
Double_t fVDCAngle;
Double_t fSin_vdc;
Double_t fCos_vdc;
Double_t fTan_vdc;
Double_t fUSpacing;
Double_t fVSpacing;
Int_t fNtracks;
Int_t fNumIter;
Double_t fErrorCutoff;
Double_t fCentralDist;
enum ECoordTypes { kTransport, kRotatingTransport };
enum EFPMatrixElemTags { T000 = 0, Y000, P000 };
enum { kPORDER = 7 };
class THaMatrixElement;
friend class THaMatrixElement;
class THaMatrixElement {
public:
THaMatrixElement() : iszero(true), pw(3), order(0), v(0), poly(kPORDER) {}
bool match( const THaMatrixElement& rhs ) const;
bool iszero;
std::vector<int> pw;
int order;
double v;
std::vector<double> poly;
};
std::vector<THaMatrixElement> fTMatrixElems;
std::vector<THaMatrixElement> fDMatrixElems;
std::vector<THaMatrixElement> fPMatrixElems;
std::vector<THaMatrixElement> fPTAMatrixElems;
std::vector<THaMatrixElement> fYMatrixElems;
std::vector<THaMatrixElement> fYTAMatrixElems;
std::vector<THaMatrixElement> fFPMatrixElems;
std::vector<THaMatrixElement> fLMatrixElems;
void CalcFocalPlaneCoords( THaTrack* track, const ECoordTypes mode);
void CalcTargetCoords(THaTrack *the_track, const ECoordTypes mode);
void CalcMatrix(const double x, std::vector<THaMatrixElement> &matrix);
Double_t DoPoly(const int n, const std::vector<double> &a, const double x);
Double_t PolyInv(const double x1, const double x2, const double xacc,
const double y, const int norder,
const std::vector<double> &a);
Double_t CalcTargetVar(const std::vector<THaMatrixElement> &matrix,
const double powers[][5]);
Double_t CalcTarget2FPLen(const std::vector<THaMatrixElement>& matrix,
const Double_t powers[][5]);
Int_t ReadDatabase( const TDatime& date );
virtual Int_t ConstructTracks( TClonesArray* tracks = NULL, Int_t flag = 0 );
void CorrectTimeOfFlight(TClonesArray& tracks);
void FindBadTracks(TClonesArray &tracks);
ClassDef(THaVDC,0)
};
#endif
Last change: Sat Nov 7 21:26:54 2009
Last generated: 2009-11-07 21:26
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.