#ifndef HSLOWPAR_H
#define HSLOWPAR_H
#include "hparset.h"
#include <stdio.h>
#include <map>
#include <vector>
#include <iostream>
#include <fstream>
#include "TString.h"
#include "TNamed.h"
#include "TList.h"
#include "TArrayI.h"
using namespace std;
#define NVALS 4
class HSlowChan : public TNamed {
public:
HSlowChan(){ clear();}
~HSlowChan(){;}
Double_t mean;
Double_t rms;
Double_t min;
Double_t max;
void clear(){
mean = -1;
rms = -1;
min = -1;
max = -1;
}
void copyValues(HSlowChan* chan){
if(chan){
mean = chan->mean;
rms = chan->rms;
min = chan->min;
max = chan->max;
}
}
void set(Double_t vals[]){
mean = vals[0];
rms = vals[1];
min = vals[2];
max = vals[3];
}
void get(Double_t vals[]){
vals[0] = mean;
vals[1] = rms;
vals[2] = min;
vals[3] = max;
}
void set(Double_t Mean, Double_t Rms,Double_t Min,Double_t Max){
mean = Mean;
rms = Rms;
min = Min;
max = Max;
}
Int_t getNValues() { return NVALS; }
void print(Int_t runID = -1)
{
if(runID !=-1) {
cout<< "runID "<<runID
<<" name "<<GetName()
<<" mean "<<mean
<<" rms " <<rms
<<" min " <<min
<<" max " <<max
<<endl;
} else {
cout<<" name "<<GetName()
<<" mean "<<mean
<<" rms " <<rms
<<" min " <<min
<<" max " <<max
<<endl;
}
}
ClassDef(HSlowChan,1)
};
class HSlowPar : public HParSet {
protected:
map<Int_t, map<TString, HSlowChan*>* > fMRunID;
vector<Int_t> fVRunID;
TList fListChannels;
map<TString, HSlowChan* >* findRunIDMap(Int_t runId);
HSlowChan* findChannel (map<TString, HSlowChan* >* m ,TString name);
TString fPartition;
Int_t fCurrentRunID;
map<Int_t,map<TString, HSlowChan* >* >::iterator fMIter;
public:
HSlowPar(const Char_t* name ="SlowPar",
const Char_t* title ="Slow Control Summary container",
const Char_t* context="SlowParProduction");
~HSlowPar(void) {};
Bool_t setChannel (Int_t runID,TString name, Double_t ar[],Bool_t overwrite=kFALSE);
Bool_t getChannel (Int_t runID,TString name, Double_t ar[]);
Bool_t setChannel (Int_t runID,TString name, HSlowChan* chan,Bool_t overwrite=kFALSE);
Bool_t setChannelMap (Int_t runID);
Bool_t getChannel (Int_t runID,TString name, HSlowChan* chan);
void setPartition (TString name) { fPartition = name; }
TString getPartition() { return fPartition; }
Bool_t findRunID (Int_t runId);
void removeRun (Int_t runID);
Bool_t getRangeRunID(Int_t& first,Int_t& last);
Int_t getNRunIDs() { return fVRunID.size();}
void clear(void);
void reset(Int_t level = 0);
void printParam(void);
void printChannel(Int_t runID,TString name);
void addToChannelList(TString name, Bool_t sort=kFALSE);
const TList* getChannelList() { return &fListChannels;}
void makeChannelList(Bool_t sort=kTRUE);
void printChannelList();
void getRunIDList(TArrayI* ar=0);
void printRunIDList();
Bool_t init(HParIo* input,Int_t* set);
Int_t write(HParIo* output) ;
Bool_t readline(const Char_t* buf) ;
void putAsciiHeader(TString&);
Bool_t write(fstream& out);
ClassDef(HSlowPar,1)
};
#endif /*!HSLOWPAR_H*/