
#ifndef FILLHVFROMSINGLES_H
#define FILLHVFROMSINGLES_H
   
#include "JobControl/JobCModule.h"
#include "Conventions/Detector.h"   

#include "TFile.h"
#include "TTree.h"
#include "TString.h"
  
#include "RawReadout.h"

#include <vector>
using std::vector;

class JobCommand;
class MomNavigator;

class FillHvFromSingles : public JobCModule, public TObject
{
   
public:
   
  FillHvFromSingles();
  ~FillHvFromSingles();
  void BeginJob();
  JobCResult Get(MomNavigator* mom);
  //JobCResult Ana(const MomNavigator* mom);
  const Registry& DefaultConfig() const;
  void Config(const Registry& r);
  void HandleCommand(JobCommand* command);
  void EndJob();

private:
 
  Int_t fBegTime;
  Int_t fEndTime;
  Int_t fRecord;
  Int_t fCounter;
  Int_t fWriteEntries;
  Int_t fReadEntries;
  Int_t fTask;

  Int_t fCurrColdChipsSM1;
  Int_t fCurrColdChipsSM2;

  Int_t fMinVaRate;
  Int_t fMinQieRate;
  Int_t fMaxColdChips;

  Int_t fWriteToDatabase;
  Int_t fReadFromDatabase;
  Int_t fWriteOutResults;
  Int_t fPruneShortEntries;
  Int_t fPruneMinTime;
  Int_t fPruneMinChips;

  TFile* fHvFile;
  TString fHvFileName;
  TTree* fHvTree;
 
  Int_t BegTime;
  Int_t EndTime;
  Int_t Source;
  Int_t Detector;
  Int_t Supermodule;
  Int_t HvStatus;
  Int_t ColdChips;

  vector<int> vecTimeSM1;
  vector<int> vecStatusSM1;
  vector<int> vecColdChipsSM1;
  vector<int> vecTimeSM2;
  vector<int> vecStatusSM2;
  vector<int> vecColdChipsSM2;
  Detector::Detector_t fDetector;

  void PrintResults();

  void ProcessBlock(TObject* obj);

  void PruneShortEntries(Int_t nSecs,Int_t nChips);

  void WriteToFile();

  void WriteToDatabase();
  void WriteToDatabase(Int_t begtime,
                       Int_t endtime, 
                       Detector::Detector_t detector, 
                       Int_t supermodule,
                       Int_t hvstatus,
                       Int_t coldchips);

  void ReadFromDatabase();
  void ReadFromDatabase(Int_t time, 
                        Detector::Detector_t detector, 
                        Int_t supermodule,
                        Int_t& hvstatus,
                        Int_t& coldchips);

  void WriteOutResults(Int_t source,
                       Int_t begtime,
                       Int_t endtime, 
                       Detector::Detector_t detector, 
                       Int_t supermodule,
                       Int_t hvstatus,
                       Int_t coldchips);    

  RawReadout* fRawReadout;

  ClassDef(FillHvFromSingles,1)
 
};
 
#endif
