Files
2006-09-11 20:18:14 +00:00

131 lines
4.3 KiB
C++

#ifndef __TH5Dataset__
#define __TH5Dataset__
#include <TObject.h>
#include <TNtuple.h>
#include <TH1F.h>
#include <TH2.h>
#include <TH3.h>
#include <TF1.h>
#include <TVector3.h>
#include <TObjString.h>
#include <TString.h>
#include <TObjArray.h>
#include <TClonesArray.h>
#include <TArrayD.h>
#include <TCanvas.h>
#include <iostream>
#include <string>
#include "H5Part.hh"
enum EH5State { kNotExist=-1, kNotActive=0, kActive=1};
enum EH5Coord { kScalar, kX, kY, kZ };
class H5PartFile;
using namespace std;
class TH5Dataset : public TObject
{
private:
H5PartFile* fH5File; // H5 file
TString fFullFilename; // full filename of H5file
TString fFilename; // filename of H5file (without path)
TString fFilenameNoExt; // filename of H5file (without path, no extension)
EH5State fFileState; // flag for active/loaded...
Int_t fNStep; // number of time steps
Int_t fNStepAttr; // number of step attributes
Int_t fNFileAttr; // number of file attributes
Int_t fNScalarAttr; // number of scalar step attributes
Int_t fNVectorAttr; // number of vector step attributes
TObjArray fFileAttr;
TString fPartVarName[9];
TString fPartVarUnit[9];
TObjArray fScalarName;
TObjArray fScalarUnit;
TObjArray fVectorName;
TObjArray fVectorUnit;
TArrayD* fSpos; // spos values
TH2D* fScalar; // 2D histogram to emulate 2D array
TClonesArray* fVector; // vector attributes are TClonesArray (TClonesArray of
// TClonesArray of TVector3's...
TClonesArray* fNtuple; // array of ntuples (one per step)
public:
TH5Dataset(const char * filename, const Int_t subsamplingRate = 1); // constructor
TH5Dataset(const TString& filename, const Int_t subsamplingRate = 1); // alternative constructor
Int_t Construct(const char * filename, const Int_t subsamplingRate); // the real constructor!
~TH5Dataset(); // Destructor
Int_t GetNSteps() const { return(fNStep); }
Int_t GetNScalarAttr() const { return(fNScalarAttr); }
Int_t GetNVectorAttr() const { return(fNVectorAttr); }
Double_t GetSpos(const Int_t step) const ;
Int_t GetStep(const Double_t spos) const ;
Double_t GetStepVar(TString stepVarName, EH5Coord crd, Int_t step) const ;
Double_t GetScalarStepVar(TString stepVarName, Int_t step) const ;
TVector3 GetVectorStepVar(TString stepVarName, Int_t step) const ;
TString GetFullFilename() const { return(fFullFilename); }
TString GetFilename() const { return(fFilename); }
TString GetFilenameNoExt() const { return(fFilenameNoExt); }
EH5State GetState() const { return(fFileState); }
void SetState(const EH5State s) { fFileState=s; }
TString GetPartVarName(const Int_t index) const ;
TString GetScalarStepVarName(const Int_t index) const ;
TString GetVectorStepVarName(const Int_t index) const ;
TString GetUnit(const TString varName) const ;
TH1F* Histo1d(const TString* varName, const Int_t step=0,
const Double_t min=-1., const Double_t max = 1.,
const Int_t nBin=30);
TH2F* Histo2d(const TString* varNameX, const TString* varNameY, const Int_t step=0,
const Double_t minX=-1., const Double_t maxX = 1.,
const Double_t minY=-1., const Double_t maxY = 1.,
const Int_t nBinX=50, Int_t nBinY=50);
TH1F* Scatter(const TString* varNameX, const TString* varNameY, TCanvas* canv,
const Int_t step=0,
const Double_t minX=-2., const Double_t maxX = 2.,
const Double_t minY=-2., const Double_t maxY = 2.);
TH3F* Histo3d(const TString* varNameX, const TString* varNameY, const TString* varNameZ,
const Int_t step=0,
const Double_t minX=-1., const Double_t maxX = 1.,
const Double_t minY=-1., const Double_t maxY = 1.,
const Double_t minZ=-1., const Double_t maxZ = 1.,
const Int_t nBinX=30, const Int_t nBinY=30, const Int_t nBinZ=30);
Double_t FindMinimum(const TString* varName, Int_t step=0) const ;
Double_t FindMaximum(const TString* varName, Int_t step=0) const ;
Double_t PlotRange(const TString* varName, const Int_t step,
Double_t& plotMin, Double_t& plotMax) const ;
Double_t Range(const TString* varName, const Int_t step,
Double_t& min, Double_t& max) const ;
ClassDef(TH5Dataset,1);
};
Double_t AddMargin(Double_t& plotMin, Double_t& plotMax, const Double_t margin=0.1);
TString AddBrackets(const TString s);;
#endif