///////////////////////////////////////////////////////////////////
//
// This processor counts events to allow separation in different sub-sub-files
// It takes as inputs the First (inclusive) and Last (exclusive) event to choose
//
// Author: Sofia Andringa <sofia@lip.pt>
// Revision History: 2017-03-30 - 1st version
///////////////////////////////////////////////////////////////////

#ifndef __RAT_CountsBetween__
#define __RAT_CountsBetween__

#include <RAT/Processor.hh>

#include <string>

namespace RAT
{

class CountsBetween : public Processor
{
public:
  // Create new count processor.
  //
  // Default update interval is to print a status line for every physics event.
  CountsBetween();

  // Destroy count processor.
  virtual ~CountsBetween();

  // Applies the CBmin (>=0) and CBmax (=-1 or >CBMin) selection
  //
  // param: should be update
  // value: should be the update interval
  // Throws ParamUnknown if param is not update
  // Throws ParamInvalid if value is not >0
  virtual void SetI( const std::string& param, const int value );

  // Called for each event
  //
  // Increment event counters, print message if number of physics events is divisible by update interval.
  //
  // run: run information to process
  // ds: entry information to process
  // Returns as OK always.
  virtual Processor::Result DSEvent( DS::Run& /*run*/, DS::Entry& /*ds*/ );

protected:
  int fDsCount;        // Number of physics events
  //int fEvCount;        // Number of triggered events
  int fMinimum;   // Number of physics events per update line
  int fMaximum;   // Number of physics events per update line
};

} // namespace RAT

#endif