#ifndef HALIGNMENTGBASE_H
#define HALIGNMENTGBASE_H
#include "TObject.h"
#include "hsymmat.h"
#include "fstream"
#include "iostream"
#include "TString.h"
#include "halignmentgparticle.h"
#include "hgeomtransform.h"
#include "TNtuple.h"
class TClonesArray;
class HAlignmentGGeom;
class HAlignmentGRotations;
class TH2F;
class TH1F;
class TMinuit;
class TFile;
class HAlignmentGBase:public TObject
{
public:
HAlignmentGBase();
virtual ~HAlignmentGBase();
virtual void CollectTracks() = 0;
virtual void ResetCounts() = 0;
virtual Bool_t AddToClones() = 0;
virtual void FillHistograms() = 0;
virtual HGeomTransform Align(const Int_t &, const Int_t &) = 0;
virtual void SetNtBranches() = 0;
HAlignmentGGeom* GetAlignGeom() const {return fAlignGeom; }
HAlignmentGRotations* GetAlignRot () const {return fAlignRot ; }
Int_t GetCloneSize () const {return cloneSize;}
Int_t GetHistoNumbers () const {return histoNumbers;}
TClonesArray* GetAlignTracks() const {return alignTracks;}
TClonesArray* GetHistoClones() const {return histoClones;}
Int_t GetUsedMod() const {return UsedMod;}
Int_t GetUsedSec() const {return UsedSec;}
void SetNtuple(TNtuple *_nt) {nt=_nt; ntEntries = nt-> GetEntries();}
TNtuple* GetNtuple() const {return nt;}
void GetPoints(void (*pFunc)(Float_t &, Float_t &, Float_t &, Float_t &, HGeomVector &, HGeomVector &),Float_t &, Float_t &, Float_t &, Float_t &, HGeomVector &, HGeomVector &);
protected:
TClonesArray* alignTracks;
TClonesArray* histoClones;
Int_t histoNumbers;
TFile *ff;
TNtuple *nt;
TMinuit *fMinuit;
Int_t UsedMod;
Int_t UsedSec;
HAlignmentGGeom *fAlignGeom;
HAlignmentGRotations *fAlignRot;
HGeomTransform transBefore, transAfter;
Int_t cloneSize;
Int_t ntEntries;
ClassDef(HAlignmentGBase,0)
};
#endif