#ifndef HPIONTRACKERMOMRUNPAR_H_
#define HPIONTRACKERMOMRUNPAR_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 HPionTrackerMomRunPars : public TObject {
protected:
    Int_t   npars; 
    TArrayD offsets; 
public:
    HPionTrackerMomRunPars(Int_t size=2) { offsets.Set(size); clear();} 
    ~HPionTrackerMomRunPars(){;}
    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(HPionTrackerMomRunPars* data){ for(Int_t i = 0; i < getNVals(); i ++) setVal(i,data->getVal(i)); }
    void getVals(HPionTrackerMomRunPars* 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(HPionTrackerMomRunPars,1)
};
class HPionTrackerMomRunPar : public HParCond {
protected:
    map<Int_t, HPionTrackerMomRunPars* > fMRunID;
    vector<Int_t>                        fVRunID;           
    map<Int_t, HPionTrackerMomRunPars* >::iterator  fMIter; 
public:
    HPionTrackerMomRunPar(const Char_t* name    = "PionTrackerMomRunPar",
			  const Char_t* title   = "PionTracker Mom Parameters per run",
			  const Char_t* context = "PionTrackerMomRunParProduction");
    ~HPionTrackerMomRunPar();
    Bool_t        findRunID(Int_t runID);
    Bool_t        removeRun(Int_t runID,Int_t level=1);
    Bool_t        addRun   (Int_t runID,HPionTrackerMomRunPars* data,Bool_t overwrite=kFALSE);
    Bool_t        getRun   (Int_t runID,HPionTrackerMomRunPars* 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(HPionTrackerMomRunPar, 1) 
};
#endif /*HPIONTRACKERMOMRUNPAR_H_*/
 hpiontrackermomrunpar.h:1  hpiontrackermomrunpar.h:2  hpiontrackermomrunpar.h:3  hpiontrackermomrunpar.h:4  hpiontrackermomrunpar.h:5  hpiontrackermomrunpar.h:6  hpiontrackermomrunpar.h:7  hpiontrackermomrunpar.h:8  hpiontrackermomrunpar.h:9  hpiontrackermomrunpar.h:10  hpiontrackermomrunpar.h:11  hpiontrackermomrunpar.h:12  hpiontrackermomrunpar.h:13  hpiontrackermomrunpar.h:14  hpiontrackermomrunpar.h:15  hpiontrackermomrunpar.h:16  hpiontrackermomrunpar.h:17  hpiontrackermomrunpar.h:18  hpiontrackermomrunpar.h:19  hpiontrackermomrunpar.h:20  hpiontrackermomrunpar.h:21  hpiontrackermomrunpar.h:22  hpiontrackermomrunpar.h:23  hpiontrackermomrunpar.h:24  hpiontrackermomrunpar.h:25  hpiontrackermomrunpar.h:26  hpiontrackermomrunpar.h:27  hpiontrackermomrunpar.h:28  hpiontrackermomrunpar.h:29  hpiontrackermomrunpar.h:30  hpiontrackermomrunpar.h:31  hpiontrackermomrunpar.h:32  hpiontrackermomrunpar.h:33  hpiontrackermomrunpar.h:34  hpiontrackermomrunpar.h:35  hpiontrackermomrunpar.h:36  hpiontrackermomrunpar.h:37  hpiontrackermomrunpar.h:38  hpiontrackermomrunpar.h:39  hpiontrackermomrunpar.h:40  hpiontrackermomrunpar.h:41  hpiontrackermomrunpar.h:42  hpiontrackermomrunpar.h:43  hpiontrackermomrunpar.h:44  hpiontrackermomrunpar.h:45  hpiontrackermomrunpar.h:46  hpiontrackermomrunpar.h:47  hpiontrackermomrunpar.h:48  hpiontrackermomrunpar.h:49  hpiontrackermomrunpar.h:50  hpiontrackermomrunpar.h:51  hpiontrackermomrunpar.h:52  hpiontrackermomrunpar.h:53  hpiontrackermomrunpar.h:54  hpiontrackermomrunpar.h:55  hpiontrackermomrunpar.h:56  hpiontrackermomrunpar.h:57  hpiontrackermomrunpar.h:58  hpiontrackermomrunpar.h:59  hpiontrackermomrunpar.h:60  hpiontrackermomrunpar.h:61  hpiontrackermomrunpar.h:62  hpiontrackermomrunpar.h:63  hpiontrackermomrunpar.h:64  hpiontrackermomrunpar.h:65  hpiontrackermomrunpar.h:66  hpiontrackermomrunpar.h:67  hpiontrackermomrunpar.h:68  hpiontrackermomrunpar.h:69  hpiontrackermomrunpar.h:70  hpiontrackermomrunpar.h:71  hpiontrackermomrunpar.h:72  hpiontrackermomrunpar.h:73  hpiontrackermomrunpar.h:74  hpiontrackermomrunpar.h:75  hpiontrackermomrunpar.h:76  hpiontrackermomrunpar.h:77  hpiontrackermomrunpar.h:78  hpiontrackermomrunpar.h:79  hpiontrackermomrunpar.h:80  hpiontrackermomrunpar.h:81  hpiontrackermomrunpar.h:82  hpiontrackermomrunpar.h:83  hpiontrackermomrunpar.h:84  hpiontrackermomrunpar.h:85  hpiontrackermomrunpar.h:86  hpiontrackermomrunpar.h:87  hpiontrackermomrunpar.h:88  hpiontrackermomrunpar.h:89  hpiontrackermomrunpar.h:90  hpiontrackermomrunpar.h:91  hpiontrackermomrunpar.h:92  hpiontrackermomrunpar.h:93  hpiontrackermomrunpar.h:94  hpiontrackermomrunpar.h:95  hpiontrackermomrunpar.h:96  hpiontrackermomrunpar.h:97  hpiontrackermomrunpar.h:98  hpiontrackermomrunpar.h:99  hpiontrackermomrunpar.h:100  hpiontrackermomrunpar.h:101  hpiontrackermomrunpar.h:102  hpiontrackermomrunpar.h:103  hpiontrackermomrunpar.h:104  hpiontrackermomrunpar.h:105  hpiontrackermomrunpar.h:106  hpiontrackermomrunpar.h:107  hpiontrackermomrunpar.h:108  hpiontrackermomrunpar.h:109  hpiontrackermomrunpar.h:110  hpiontrackermomrunpar.h:111  hpiontrackermomrunpar.h:112  hpiontrackermomrunpar.h:113