#ifndef  __JRECONSTRUCTION__JSHOWERBJORKENYPARAMETERS__
#define  __JRECONSTRUCTION__JSHOWERBJORKENYPARAMETERS__

#include <TROOT.h>
#include <TObject.h>
#include "JFit/JMEstimator.hh"

/**
 * \author adomi
 */
namespace JRECONSTRUCTION {

  /**
   * Data structure for fit parameters.
   */
  struct JShowerBjorkenYParameters_t:
    public TObject
  {
    /**
     * Default constructor.
     */
    JShowerBjorkenYParameters_t()
    {
      this->reset();
    }

    /**
     * Virtual destructor.
     */
    virtual ~JShowerBjorkenYParameters_t(){}
    
    /**
     * Reset fit parameters.
     */
    void reset()
    {
      numberOfPrefits             =    1;
      TMax_ns                     =   30;
      TMin_ns                     =  -30;
      roadWidth_m                 =   80;
      R_Hz                        = 10.0e3;
      mestimator                  = JFIT::EM_NULL;
      fit_step                    =    0.5;
      VMax_npe                    =   20.0;
      NMax                        = 1000;
    }

    /**
     * Equality
     *
     * \param  parameters       fit parameters
     * \return                  true if equals; else false
     */
    bool equals(const JShowerBjorkenYParameters_t& parameters) const
    {
      return (this->TMax_ns                  == parameters.TMax_ns                  &&         
	      this->TMin_ns                  == parameters.TMin_ns                  &&         
	      this->numberOfPrefits          == parameters.numberOfPrefits          &&         
	      this->roadWidth_m              == parameters.roadWidth_m              &&
	      this->R_Hz                     == parameters.R_Hz                     && 
	      this->mestimator               == parameters.mestimator               &&
	      this->fit_step                 == parameters.fit_step                 &&
	      this->VMax_npe                 == parameters.VMax_npe                 &&
	      this->NMax                     == parameters.NMax);
    }

    ClassDef(JShowerBjorkenYParameters_t, 1);
    
    size_t  numberOfPrefits;     ///< number of prefits                                                                  
    double  TMax_ns;             ///< maximum time for local coincidences [ns]                                            
    double  TMin_ns;             ///< minimum time for local coincidences [ns]                                           
    double  roadWidth_m;         ///< road width [m]                                                                    
    double  R_Hz;                ///< default rate [Hz]                                                                    
    int     mestimator;          ///< M-estimator                                                                           
    double  fit_step;            ///< simplex initial step  
    double  VMax_npe;            ///< maximum number of of photo-electrons                                                
    int     NMax;                ///< maximum number of iterations     
  };  
}

/**
  * Read fit parameters from input.
  *
  * \param  in           input stream
  * \param  parameters   fit parameters
  * \return              input stream
  */
 std::istream& operator>>(std::istream& in, JRECONSTRUCTION::JShowerBjorkenYParameters_t& parameters);
   
 /**
  * Write fit parameters to output.
  *
  * \param  out          output stream
  * \param  parameters   fit parameters
  * \return              output stream
  */
 std::ostream& operator<<(std::ostream& out,  const JRECONSTRUCTION::JShowerBjorkenYParameters_t& parameters);

#endif