#ifndef HPIONTRACKERTRACKF_H
#define HPIONTRACKERTRACKF_H
#include "hreconstructor.h"
#include "hpiontrackermompar.h"
#include "hpiontrackermomrunpar.h"
class HCategory;
class HIterator;
class HPionTrackerTrackFPar;
class HPionTrackerBeamPar;
class HPionTrackerMomPar;
class HPionTrackerMomRunPar;
#include <fstream>
struct track
{
	track() : fP(0), fTheta(0), fPhi(0), fMatch(0),
    fX1(0), fY1(0), fX2(0), fY2(0), fXh(0), fYh(0), fPhi0(0), fTheta0(0), fY0(0), fDist(0)  {}
	Float_t fP;
	Float_t fTheta;
	Float_t fPhi;
	Float_t fMatch;
	Float_t fX1;
	Float_t fY1;
	Float_t fX2;
	Float_t fY2;
	Float_t fXh;
	Float_t fYh;
	Float_t fPhi0;
	Float_t fTheta0;
	Float_t fY0;
        Float_t fDist;
};
class HPionTrackerTrackF : public HReconstructor
{
protected:
	HCategory * pHitCat;			
	HCategory * pTrackCat;			
	HIterator * iter;			
	HLocation lochit;			
	HLocation loc;				
	HPionTrackerTrackFPar * pTrackfpar;	
        HPionTrackerBeamPar   * pTrackBeampar;	
	HPionTrackerMomPar * pTrackerMompar;	
        HPionTrackerMomRunPar   * pTrackerMomRunpar;	
	HPionTrackerMomRunPars correction; 
	Double_t corrs[2]; 
	
	static bool sortfunction(const track tr1, const track tr2)
	{
	  return (tr1.fDist < tr2.fDist);
	}
	
        Int_t idet1 ;
	Int_t idet2 ;
	Int_t id_det1;  
        Int_t id_det2;  
        Int_t id_outQ9; 
        Int_t id_targ;  
        
        
	Double_t T12[2];    
	Double_t T14[2];    
	Double_t T16[2];    
	Double_t T126[2];   
	Double_t T146[2];   
	Double_t T166[2];   
	Double_t T32[2];    
	Double_t T33[2];    
	Double_t T34[2];    
	Double_t T36[2];    
	Double_t T336[2];   
	Double_t T346[2];   
	Double_t T366[2];   
	Double_t T12_t;     
	Double_t T14_t;     
	Double_t T16_t;     
	Double_t T126_t;    
	Double_t T146_t;    
	Double_t T166_t;    
	Double_t T32_t;     
	Double_t T33_t;     
	Double_t T34_t;     
	Double_t T36_t;     
	Double_t T326_t;    
	Double_t T336_t;    
	Double_t T346_t;    
	Double_t T366_t;    
	Double_t T21_t;     
	Double_t T22_t;     
	Double_t T23_t;     
	Double_t T24_t;     
	Double_t T26_t;     
	Double_t T226_t;    
	Double_t T246_t;    
	Double_t T266_t;    
	Double_t T41_t;     
	Double_t T42_t;     
	Double_t T43_t;     
	Double_t T44_t;     
	Double_t T46_t;     
	Double_t T426_t;    
	Double_t T436_t;    
	Double_t T446_t;    
	Double_t T466_t;    
	Int_t nev ;         
	std::ifstream inputpos;  
	std::ifstream scanpos;  
        void   initVars();
	void   insertTrack(const track & tr);
        Bool_t momrec (Float_t x1, Float_t y1, Float_t x2, Float_t y2, Float_t momref, track & tr);
public:
	HPionTrackerTrackF (void);
	HPionTrackerTrackF (const Text_t * name, const Text_t * title, Bool_t skip = kFALSE);
	~HPionTrackerTrackF (void);
	void setBeamElements(Int_t id1,Int_t id2,Int_t outQ9,Int_t idtarg) { id_det1=id1; id_det2=id2; id_outQ9=outQ9; id_targ=idtarg;  }
	Bool_t init (void);
	Bool_t reinit (void);
	Int_t  execute (void);
	Bool_t finalize (void) {return kTRUE;}
	ClassDef (HPionTrackerTrackF, 0) 
};
#endif /* !HPIONTRACKERTRACKF_H */