#ifndef ROOT_THaMWDCGroup
#define ROOT_THaMWDCGroup
#include "TObject.h"
#include "THaMWDCPlane.h"
#include "THaTrack.h"
#include <vector>
#include "TMatrixD.h"
class THaMWDCHit;
using namespace std;
#define MAX_PLANES 20
#define N_TRACK_ELEMENTS 4
#define MAX_SIMILAR_PLANES_FOR_UNIQUE_TRACK 6
#define MAX_CHI2NDOF 50
#define MAX_CHI2CONT 5
class THaMWDCGroup : public TObject {
public:
THaMWDCGroup( vector<THaMWDCHit*> H, UInt_t planebits, TMatrixD *matrix );
THaMWDCGroup( THaMWDCHit **H, Int_t n, UInt_t planebits, TMatrixD *matrix );
THaMWDCGroup( THaMWDCGroup& G );
virtual ~THaMWDCGroup();
enum EGroupStatus { kFresh = 1 << 0,
kCoarse = 1 << 1,
kFine = 1 << 2,
kValidTrack = 1 << 3,
kOK = 1 << 4,
kL1 = 1 << 5,
kL2 = 1 << 6 };
enum ETrackingMode { kCoarseTracking, kFineTracking, kTrialFineTracking };
THaTrack GetTrack() { return fTrack;}
Double_t GetX() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetX() : 1e9;}
Double_t GetY() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetY() : 1e9;}
Double_t GetTheta() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetTheta() : 1e9;}
Double_t GetPhi() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetPhi() : 1e9;}
Double_t GetChi2() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetChi2() : 1e9;}
Double_t GetNDoF() { return fGroupStatus & (kCoarse|kFine) ? fTrack.GetNDoF() : 1e9;}
Double_t GetChi2NDoF() { return fGroupStatus & (kCoarse|kFine) ? fChi2NDoF : 1e9;}
UInt_t GetNHits() { return fHits.size();}
vector<THaMWDCHit*> GetHits() { return fHits; }
THaMWDCHit* GetHit(Int_t i) { return fHits[i]; }
UInt_t GetPlaneBits() { return fPlaneBits;}
UInt_t GetLRbits() { return fLRbits; }
TMatrixD* GetConstructMatrix() { return fConstructMatrix; }
Double_t GetChi2Cont(int i) { return fChi2Cont[i]; }
Double_t GetCoarseChi2Cont(int i) { return fCoarseChi2Cont[i];}
UInt_t GetStatusBits(){ return fGroupStatus;}
Bool_t IsOK() { return (fGroupStatus & kOK ? true : false); }
Bool_t IsL1Group() { return (fGroupStatus & kL1 ? true : false); }
Bool_t IsL2Group() { return (fGroupStatus & kL2 ? true : false); }
Bool_t IsFresh() { return (fGroupStatus & kFresh ? true : false); }
Bool_t IsCoarse() { return (fGroupStatus & kCoarse ? true : false); }
Bool_t IsFine() { return (fGroupStatus & kFine ? true : false); }
Bool_t IsValidTrack() { return (fGroupStatus & kValidTrack ? true : false); }
void SetTrackNumber(Int_t track_number);
void SetChi2Cont();
void SetL1Group(Bool_t b) {if(b) fGroupStatus |= kL1; else fGroupStatus &= ~kL1; }
void SetL2Group(Bool_t b) {if(b) fGroupStatus |= kL2; else fGroupStatus &= ~kL2; }
Int_t DoCoarseTracking();
Int_t DoFineTracking( Double_t toffset = 0.0 );
Bool_t IsSimilarTrack( THaTrack track );
protected:
vector<THaMWDCHit*> fHits;
UInt_t fLRbits;
UInt_t fPlaneBits;
UInt_t fGroupStatus;
TMatrixD *fConstructMatrix;
THaTrack fTrack;
Double_t fChi2Cont[MAX_PLANES];
Double_t fCoarseChi2Cont[MAX_PLANES];
Double_t fChi2NDoF;
Int_t fPlaneIndex[MAX_PLANES];
THaTrack FindTrack( ETrackingMode mode, Double_t chi2cont[], Double_t toffset = 0.0);
Int_t DoLRDiff();
Int_t DoLRDiffForType( THaMWDCPlane::EPlaneType type );
void TransformCoordToTrack( Double_t coord[], Double_t track[] );
Double_t CalcChiSquared( ETrackingMode mode, Double_t coords[], THaTrack track, Double_t chi2cont[] );
void DetermineValidTrack();
Bool_t FitsChamber();
void CheckHitData();
void Reset();
vector<THaMWDCHit*> GetHitsOfType( THaMWDCPlane::EPlaneType type );
void GeneratePlaneIndex();
Int_t GetPlaneIndexForHit(Int_t hit) { return fPlaneIndex[hit]; }
ClassDef(THaMWDCGroup, 0)
};
#endif
Last update: Tue Jul 7 19:26:17 2009
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.