#ifndef HPIONTRACKERCALRUNPAR_H_
#define HPIONTRACKERCALRUNPAR_H_
#include "TArrayD.h"
#include "TArrayF.h"
#include "TArrayI.h"
#include "hparcond.h"
#include "hpario.h"
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
class HParamList;
class HDetParAsciiFileIo;
class HPionTrackerCalRunPars : public TObject {
protected:
    Int_t   npars;
    TArrayD offsets;
public:
    HPionTrackerCalRunPars(Int_t size=4) { offsets.Set(size); clear();}
    ~HPionTrackerCalRunPars(){;}
    inline Int_t getNVals() { return offsets.GetSize(); }
    void setSize(Int_t size) { offsets.Set(size); clear(); }
    void setVal(Int_t i,Float_t val) {
	if( i >= 0 && i < getNVals()){
	    offsets[i] = val;
	} else { Error("setVal()","Index i=%i out of bounds",i);}
    }
    Float_t getVal(Int_t i) {
	if( i >= 0 && i < getNVals()){
	    return offsets[i];
	} else {
	    Error("setVal()","Index i=%i out of bounds",i);
            return 0;
	}
    }
    void copyVals(HPionTrackerCalRunPars* data){ for(Int_t i = 0; i < getNVals(); i ++) setVal(i,data->getVal(i)); }
    void getVals(HPionTrackerCalRunPars* data) { for(Int_t i = 0; i < getNVals(); i ++) data->setVal(i,offsets[i]);   }
    void print(Int_t runID = -1){
	if(runID != -1) cout<<"RunID "<<setw(10)<<runID <<" = "<<flush;
        else            cout<<" = "<<flush;
	for(Int_t i = 0; i < getNVals() ; i ++){
	    if(i == 0) cout<<setw(8)<<offsets[i]<<flush;
	    else       cout<<", "<<setw(8)<<offsets[i]<<flush;
	}
        cout<<endl;
    }
    Double_t* data()     { return &offsets[0]; }
    void      clear()    { for(Int_t i=0;i < getNVals();i++) offsets[i] = 0; }
    ClassDef(HPionTrackerCalRunPars,1)
};
class HPionTrackerCalRunPar : public HParCond {
protected:
    map<Int_t, HPionTrackerCalRunPars* > fMRunID;
    vector<Int_t>                        fVRunID;           
    map<Int_t, HPionTrackerCalRunPars* >::iterator  fMIter; 
public:
    HPionTrackerCalRunPar(const Char_t* name    = "PionTrackerCalRunPar",
			  const Char_t* title   = "PionTracker Cal Parameters per run",
			  const Char_t* context = "PionTrackerCalRunParProduction");
    ~HPionTrackerCalRunPar();
    Bool_t        findRunID(Int_t runID);
    Bool_t        removeRun(Int_t runID,Int_t level=1);
    Bool_t        addRun   (Int_t runID,HPionTrackerCalRunPars* data,Bool_t overwrite=kFALSE);
    Bool_t        getRun   (Int_t runID,HPionTrackerCalRunPars* data);
    void          finishRunList();
    Bool_t        getRangeRunID(Int_t& first,Int_t& last);
    Int_t         getNRunIDs() { return fVRunID.size();}
    void          getRunIDList(TArrayI* ar=0);
    void          printRunIDList();
    void          printRun(Int_t runID);
    void          reset(Int_t level = 0);
    Bool_t        init(HParIo*, Int_t*);
    void          clear();
    void          printParams();
    void          putParams(HParamList* l);
    Bool_t        getParams(HParamList* l);
    virtual Int_t write(HParIo*);
    virtual Int_t write(fstream& pFile);
    virtual void  putAsciiHeader(TString& b);
    ClassDef(HPionTrackerCalRunPar, 1) 
};
#endif /*HPIONTRACKERCALRUNPAR_H_*/
 hpiontrackercalrunpar.h:1  hpiontrackercalrunpar.h:2  hpiontrackercalrunpar.h:3  hpiontrackercalrunpar.h:4  hpiontrackercalrunpar.h:5  hpiontrackercalrunpar.h:6  hpiontrackercalrunpar.h:7  hpiontrackercalrunpar.h:8  hpiontrackercalrunpar.h:9  hpiontrackercalrunpar.h:10  hpiontrackercalrunpar.h:11  hpiontrackercalrunpar.h:12  hpiontrackercalrunpar.h:13  hpiontrackercalrunpar.h:14  hpiontrackercalrunpar.h:15  hpiontrackercalrunpar.h:16  hpiontrackercalrunpar.h:17  hpiontrackercalrunpar.h:18  hpiontrackercalrunpar.h:19  hpiontrackercalrunpar.h:20  hpiontrackercalrunpar.h:21  hpiontrackercalrunpar.h:22  hpiontrackercalrunpar.h:23  hpiontrackercalrunpar.h:24  hpiontrackercalrunpar.h:25  hpiontrackercalrunpar.h:26  hpiontrackercalrunpar.h:27  hpiontrackercalrunpar.h:28  hpiontrackercalrunpar.h:29  hpiontrackercalrunpar.h:30  hpiontrackercalrunpar.h:31  hpiontrackercalrunpar.h:32  hpiontrackercalrunpar.h:33  hpiontrackercalrunpar.h:34  hpiontrackercalrunpar.h:35  hpiontrackercalrunpar.h:36  hpiontrackercalrunpar.h:37  hpiontrackercalrunpar.h:38  hpiontrackercalrunpar.h:39  hpiontrackercalrunpar.h:40  hpiontrackercalrunpar.h:41  hpiontrackercalrunpar.h:42  hpiontrackercalrunpar.h:43  hpiontrackercalrunpar.h:44  hpiontrackercalrunpar.h:45  hpiontrackercalrunpar.h:46  hpiontrackercalrunpar.h:47  hpiontrackercalrunpar.h:48  hpiontrackercalrunpar.h:49  hpiontrackercalrunpar.h:50  hpiontrackercalrunpar.h:51  hpiontrackercalrunpar.h:52  hpiontrackercalrunpar.h:53  hpiontrackercalrunpar.h:54  hpiontrackercalrunpar.h:55  hpiontrackercalrunpar.h:56  hpiontrackercalrunpar.h:57  hpiontrackercalrunpar.h:58  hpiontrackercalrunpar.h:59  hpiontrackercalrunpar.h:60  hpiontrackercalrunpar.h:61  hpiontrackercalrunpar.h:62  hpiontrackercalrunpar.h:63  hpiontrackercalrunpar.h:64  hpiontrackercalrunpar.h:65  hpiontrackercalrunpar.h:66  hpiontrackercalrunpar.h:67  hpiontrackercalrunpar.h:68  hpiontrackercalrunpar.h:69  hpiontrackercalrunpar.h:70  hpiontrackercalrunpar.h:71  hpiontrackercalrunpar.h:72  hpiontrackercalrunpar.h:73  hpiontrackercalrunpar.h:74  hpiontrackercalrunpar.h:75  hpiontrackercalrunpar.h:76  hpiontrackercalrunpar.h:77  hpiontrackercalrunpar.h:78  hpiontrackercalrunpar.h:79  hpiontrackercalrunpar.h:80  hpiontrackercalrunpar.h:81  hpiontrackercalrunpar.h:82  hpiontrackercalrunpar.h:83  hpiontrackercalrunpar.h:84  hpiontrackercalrunpar.h:85  hpiontrackercalrunpar.h:86  hpiontrackercalrunpar.h:87  hpiontrackercalrunpar.h:88  hpiontrackercalrunpar.h:89  hpiontrackercalrunpar.h:90  hpiontrackercalrunpar.h:91  hpiontrackercalrunpar.h:92  hpiontrackercalrunpar.h:93  hpiontrackercalrunpar.h:94  hpiontrackercalrunpar.h:95  hpiontrackercalrunpar.h:96  hpiontrackercalrunpar.h:97  hpiontrackercalrunpar.h:98  hpiontrackercalrunpar.h:99  hpiontrackercalrunpar.h:100  hpiontrackercalrunpar.h:101  hpiontrackercalrunpar.h:102  hpiontrackercalrunpar.h:103  hpiontrackercalrunpar.h:104  hpiontrackercalrunpar.h:105  hpiontrackercalrunpar.h:106  hpiontrackercalrunpar.h:107  hpiontrackercalrunpar.h:108  hpiontrackercalrunpar.h:109  hpiontrackercalrunpar.h:110  hpiontrackercalrunpar.h:111  hpiontrackercalrunpar.h:112  hpiontrackercalrunpar.h:113