#ifndef SWIMOBJ3_H
#define SWIMOBJ3_H

//Test2

#include "Rtypes.h"
#include "TObjArray.h"
#include "Conventions/MinosMaterial.h"

class UgliGeomHandle;
class VldContext;

class SwimObj3
{

public:
    SwimObj3(Double_t u,Double_t v,Double_t z,Double_t dudz,Double_t dvdz,Double_t qp,Int_t izfor,const VldContext *vldc);

    ~SwimObj3();

  Int_t SwimTo(Double_t zfin,Bool_t docheck = 0); // if docheck true, return 1 if momentum goes below 50 MeV/c or track goes outside far detector fiducial volume or |dx/dz|>50

  Double_t fu;
  Double_t fv;
  Double_t fz;
  Double_t fdudz;
  Double_t fdvdz;
  Double_t fqp;


  Double_t GetTheta();
  Double_t GetPath();
   Double_t GetRange(); // in g/cm^2
  

  Int_t fizfor; // =1 if +z is forward, -1 if -z is forward

private:

//Needed for calculationg theta.
  Double_t fTfe;
  Double_t fTair;
  Double_t fTsc;
  
  Double_t fStartu;
  Double_t fStartv;
  Double_t fStartz;
  Double_t fPmag;


  Int_t SwimToIron(Double_t,Bool_t docheck);
  Int_t SwimToVacuum(Double_t);
  Bool_t DoCheck();

  UgliGeomHandle *fugh;
  VldContext *fvldc;

  TObjArray fInterface;

};


#endif                                                    // SWIMOBJ3_H
