#ifndef HGEOMINTERFACE_H
#define HGEOMINTERFACE_H
#include "TObjArray.h"
#include "TList.h"
#include "TString.h"
class HGeomIo;
class HGeomSet;
class HGeomMedia;
class HGeomShapes;
class HGeomBuilder;
class HSpecGeomPar;
class HDetGeomPar;
enum EHGeoDetPart {
kHGeomCave = 0,
kHGeomRich = 1,
kHGeomTarget = 2,
kHGeomSect = 3,
kHGeomMdc = 4,
kHGeomCoils = 5,
kHGeomTof = 6,
kHGeomShower = 7,
kHGeomFrames = 8,
kHGeomStart = 9,
kHGeomFWall = 10,
kHGeomRpc = 11,
kHGeomEmc = 12,
kHGeomUser = 13 };
class HGeomInterface : public TObject {
HGeomIo* fileInput;
HGeomIo* oraInput;
HGeomIo* output;
Bool_t addDateTime;
Int_t nSets;
Int_t nActualSets;
Int_t nFiles;
TObjArray* sets;
HGeomMedia* media;
HGeomShapes* shapes;
TList* masterNodes;
TString setupFile;
HGeomBuilder* geoBuilder;
TString paramFile;
public:
HGeomInterface();
~HGeomInterface();
void setOracleInput(HGeomIo* p) {oraInput=p;}
void setOutput(HGeomIo* p, Bool_t fl=kTRUE) {output=p; addDateTime=fl;}
void setGeomBuilder(HGeomBuilder* p) {geoBuilder=p;}
HGeomIo* getFileInput() { return fileInput; }
HGeomIo* getOraInput() { return oraInput; }
HGeomIo* getOutput() { return output; }
HGeomShapes* getShapes() { return shapes; }
HGeomMedia* getMedia() { return media; }
void addInputFile(const Char_t*);
Bool_t addAlignment(HSpecGeomPar*);
Bool_t addAlignment(HDetGeomPar*);
void adjustSecGeom(void);
HGeomSet* findSet(const Char_t*);
Bool_t readSet(HGeomSet*);
Bool_t writeSet(HGeomSet*);
Bool_t writeSet(HGeomSet*,const Char_t*);
Bool_t writeSet(const Char_t* name,const Char_t* author,const Char_t* descr);
Bool_t writeMedia(const Char_t* author,const Char_t* descr);
Bool_t createSet(HGeomSet*);
void deleteSet(HGeomSet* pSet);
Bool_t readMedia();
Bool_t writeMedia();
Bool_t writeMedia(const Char_t*);
Bool_t readAll();
Bool_t writeAll();
Bool_t createAll(Bool_t withCleanup=kFALSE);
Bool_t createGeometry(Bool_t withCleanup=kFALSE);
Bool_t readGeomConfig(const Char_t*);
void addSetupFile(const Char_t* f) {setupFile=f;}
Bool_t readSetupFile();
void addParamFile(const Char_t* f) {paramFile=f;}
void print();
private:
HGeomIo* connectInput(const Char_t*);
Bool_t connectOutput(const Char_t*,TString pType="geo");
void shiftNode(Int_t set,const Char_t* name, Double_t zShift);
void shiftNode6sect(Int_t set,const Char_t* name, Double_t zShift);
ClassDef(HGeomInterface,0)
};
#endif /* !HGEOMINTERFACE_H */