#ifndef CaryatidReco_h
#define CaryatidReco_h

// MINOS includes
#include "MessageService/MsgService.h"
#include "MinosObjectMap/MomNavigator.h"
#include "JobControl/JobCommand.h"
#include "JobControl/JobCModuleRegistry.h"
#include "JobControl/JobCModule.h"
#include "Conventions/Detector.h"
#include "Conventions/ElecType.h"
#include "RawData/RawPedestalTableBlock.h"
#include "RawData/RawSparsifierTableBlock.h"
#include "RawData/RawDigit.h"
#include "RawData/RawChannelId.h"
#include "RawData/RawDaqSnarlHeader.h"
#include "RawData/RawRecord.h"
#include "RawData/RawDaqHeaderBlock.h"
#include "RawData/RawDigitDataBlock.h"
#include "RawData/RawDigit.h"
#include "RawData/RawCrateMonitorBlock.h"
#include "Validity/VldTimeStamp.h"
#include "Validity/VldContext.h"
#include "Plex/PlexStripEndToLed.h"
#include "Plex/PlexPinDiodeToLed.h"
#include "Plex/PlexStripEndId.h"
#include "Plex/PlexHandle.h"

#include <cstdio>
#include <map>

#include <TTree.h>
#include <TFile.h>

#include <CaryatidAna.h>

class MomNavigator;
class MsgService;

class CaryatidReco : public JobCModule {

 public:

  CaryatidReco();
  ~CaryatidReco();

  JobCResult       Ana(const MomNavigator *mom);
  void             EndJob();
  void             Config(const Registry& r);
  const Registry&  DefaultConfig() const;

 private:
  
    void       GetPedestalTable(RawPedestalTableBlock* rptb, Int_t crateped);
    void       GetSparsificationTable(RawSparsifierTableBlock* rstb, Int_t cratespar);
  void       GetCaryatids(RawDigitDataBlock* rdb);

  //Analysis object:
  CaryatidAna* myPedAna;

  //Configurable options:  
  Bool_t   fGetTableTree;
  Bool_t   fStoreTree;
  Bool_t   fOnline;


  //Analysis objects:
  TTree   *fCaryatidTree;
  TTree   *fPedTree;
  TTree   *fSparTree;
  TFile   *fFile;

  Bool_t   fGotCalledPed;
  Bool_t   fGotCalledSpar;

  Int_t    frunNum;
  Int_t    ferror;
  Int_t    fcrate;
  Int_t    fvarc;
  Int_t    fvmm;
  Int_t    fvfb;
  Int_t    fva;
  Int_t    fvach;
  Int_t    fadc;
  Double_t ftdc;
  Int_t    fplane;
  Double_t ftimeUTC;

  Char_t gFileName[180];

  //Stuff for Pedestal and Sparsification Table:
  Int_t    fPedTable;
  Int_t    fSparTable;
  Double_t fLoadTime;
  Int_t    icrate;
  Int_t    icrateped;
  Int_t    icratespar;
  Int_t    ivarc;
  Int_t    ivmm;
  Int_t    ivfb;
  Int_t    iva;
  Int_t    ivach;

};

#endif
