#ifndef VEGA_VFrameMetaDB #define VEGA_VFrameMetaDB //*-- Author : Damir Buskulic 20/05/99 #include #include "TString.h" #include "TTree.h" #include "TFile.h" #include "THashList.h" #include "FrameL.h" #include "VFrCondition.h" #include "VMetaString.h" #include "VConditionNames.h" #include "VConditionFormula.h" #include "VConditionSetFMDB.h" #include "VGroupInfo.h" #include "VVirtualMetaDBPlayer.h" #include "VMetaData.h" #include "VHashTable.h" class VConditionFormula; class TObject; class VFrameMetaDB; class VHashTable; ////////////////////////////////////////////////////////////////////////// // // // VFrFileIndex // // // // Frame file index used in the VHashTable // // // ////////////////////////////////////////////////////////////////////////// class VFrFileIndex : public TObject { private: Double_t mStartTime; // Start time of the first frame of this file Double_t mEndTime; // End time of the last frame of this file Int_t mFirstMetaIndex; // index of the first frame of this file in the metadata tree Int_t mLastMetaIndex; // index of the last frame of this file in the metadata tree Int_t mConditionsIndex; // index of the conditions index tree Int_t mFirstGroup; // first frames group number Int_t mLastGroup; // last frames group number public : VFrFileIndex(); VFrFileIndex(Double_t start, Double_t end, Int_t firstindex, Int_t lastindex, Int_t condindex, Int_t firstgroup, Int_t lastgroup) {mStartTime = start; mEndTime = end; mFirstMetaIndex = firstindex; mLastMetaIndex = lastindex; mConditionsIndex = condindex; mFirstGroup = firstgroup; mLastGroup = lastgroup;} Double_t GetStartTime() {return mStartTime;} // TString GetStartTimeString(); Double_t GetEndTime() {return mEndTime;} Int_t GetFirstMetaIndex() {return mFirstMetaIndex;} Int_t GetLastMetaIndex() {return mLastMetaIndex;} Int_t GetConditionsIndex() {return mConditionsIndex;} Int_t GetFirstGroup() {return mFirstGroup;} Int_t GetLastGroup() {return mLastGroup;} void SetStartTime(Double_t start) {mStartTime = start;} void SetEndTime(Double_t end) {mEndTime = end;} void SetFirstMetaIndex(Int_t first) {mFirstMetaIndex = first;} void SetLastMetaIndex(Int_t last) {mLastMetaIndex = last;} void SetConditionsIndex(Int_t cond) {mConditionsIndex = cond;} void SetFirstGroup(Int_t group) {mFirstGroup = group;} void SetLastGroup(Int_t group) {mLastGroup = group;} ClassDef(VFrFileIndex,2) // Frame file index }; ////////////////////////////////////////////////////////////////////////// // // // VMetaDataFMDB // // // // Meta data for one frame. The filename, detector and status are kept // // inside another object (VMetaString) to allow use of split mode // // for this one. This may change, this is an internal structure // // // ////////////////////////////////////////////////////////////////////////// class VMetaDataFMDB : public TObject { private : UInt_t mRunNumber; // Run number containing this frame UInt_t mFrameNumber; // Absolute frame number VGPSTime mStartTime; // Start time of the frame Double_t mLength; // Length of the frame Int_t mQuality; // Quality of data flags Int_t mTrigger; // Trigger bits Int_t mGroup; // Group number for this frame public : VMetaDataFMDB(); VMetaDataFMDB(TString fileName, UInt_t runNumber, UInt_t frameNumber, VGPSTime startTime, VGPSTime localStartTime, Double_t length, TString detector="VIRGO", TString state="L", Int_t quality=1, Int_t trigger=1); ~VMetaDataFMDB(); virtual UInt_t GetRunNumber() {return mRunNumber;} virtual UInt_t GetFrameNumber() {return mFrameNumber;} virtual VGPSTime GetStartTime() {return mStartTime;} virtual Double_t GetLength() {return mLength;} virtual Int_t GetQuality() {return mQuality;} virtual Int_t GetTrigger() {return mTrigger;} virtual Int_t GetGroup() {return mGroup;} virtual void SetRunNumber(UInt_t run) {mRunNumber = run;} virtual void SetFrameNumber(UInt_t frame) {mFrameNumber = frame;} virtual void SetStartTime(VGPSTime start) {mStartTime = start;} virtual void SetLength(Double_t length) {mLength = length;} virtual void SetQuality(Int_t qual) {mQuality = qual;} virtual void SetTrigger(Int_t trig) {mTrigger = trig;} virtual void SetGroup(Int_t group) {mGroup = group;} virtual void Print(Option_t * opt="") {} ClassDef(VMetaDataFMDB,2) // Meta data for one frame }; ////////////////////////////////////////////////////////////////////////// // // // VFrameMetaDB // // // // Local frame data base // // Uses the standard Framelib // // // ////////////////////////////////////////////////////////////////////////// struct CondIndex_t {Int_t first, last;}; // helper struct for conditions indices class VFrameMetaDB : public VVirtualFrameInfoDB { private : TFile* mDBFile; // the database file TString mPathToDB; // path to db file TString mOption; // DB opened option "read" or "update" Bool_t mIsOpened; // DB opened flag TTree* mMetaTree; // Meta data tree associated to this database THashList* mConditionTree; // The conditions trees (triggers, sms, user conditions...) in a list TTree* mConditionsIndex; // The conditions trees index VMetaDataFMDB* mTmpMeta; // Address of the frame metadata VMetaString* mTmpMetaString; // Strings of the meta data : filename, detector, state VFrCondition** mTmpConditions; // Condition objects used for I/O CondIndex_t* mTmpCondIndex; // Indices (first and last) of a set of conditions in it's condition tree Int_t mNConditions; // Number of conditions VHashTable* mHashTable; // Hash table associated to this database Int_t mCurMetaIndex; // Last accessed meta data index Int_t* mCurCondTreeIndex; // indices of current conditions in respective condition trees Double_t mCurFrameStart; // current frame start time; Double_t mCurFrameEnd; // current frame end time; TString mCurVectName; // current vector name; Int_t mCurCondGroup; // current condition group; UInt_t mLastRunNumber; // Run number of the last frame opened UInt_t mLastFrNumber; // Frame number of the last frame opened VConditionNames* mConditionNames; // Names of conditions present in the database TTree* mGroupList; // Group : group contents tree VGroupInfo* mTmpGroupInfo; // Group : one group information VGroupInfo* mLastGroupInfo; // Group : group info for the last group VVirtualMetaDBPlayer* mPlayer; // Pointer to current metadb player public : Int_t FindIndex(Double_t gpstime, Double_t& frbegin, Double_t& frend); Int_t FindIndex(Int_t approxindex, Double_t gpstime); Int_t AddFiles(const char* filenames, const char* extrapath, Option_t* option); TArrayF AnalyzeTriggerString(char* string, TString& outputnames); Int_t AddCondition(char* name, VGPSTime time, Float_t timebefore, Float_t timeafter, Bool_t triggerStatus, Float_t amplitude, Float_t prob, TString varNames, TArrayF tvars, Int_t group); Bool_t BuildNewCondition(char* name, const char* varnames); Int_t FindNearestGEIndex(Double_t gpstime, VConditionFormula* condf, Double_t& frbegin, Double_t& frend, Double_t& cobegin, Double_t& coend, Int_t& cogroup); Int_t FindNearestGEIndex(Double_t gpstime, Double_t& frbegin, Double_t& frend); Int_t FindNearestLEIndex(Double_t gpstime, Double_t& frbegin, Double_t& frend); Int_t FindNearestGECondIndex(const char* condname, Double_t gpstime, Double_t& frbegin, Double_t& frend); Int_t FindNearestGECondIndex(Int_t conditionnumber, Double_t gpstime, Double_t& frbegin, Double_t& frend); public : VFrameMetaDB(); VFrameMetaDB(char* filename, Option_t* mode="READ",char* frfilenames="", Option_t* option="R"); virtual ~VFrameMetaDB(); FrameH* FrameReadHeader(FrFile* iFile, int frnum); // Opening and building the database virtual void Build(char* pathtofiles, char* filename, Option_t* option="R"); virtual Bool_t Open(char* pathtoDB, Option_t* openopt = "READ"); virtual Int_t AddFiles(const char* filenames, Option_t* option="R"); virtual void Close(); // Factory part. Creating objects exchanged by the database virtual VConditionSet* CreateConditionSet(const char* condfs, const char* selfs=0); // Drawing and getting information about the database VVirtualMetaDBPlayer* GetPlayer(); virtual void Draw(const char* selexp, const char* selection="", Option_t* option = "", Double_t start = 0, Double_t length = 0); virtual TFile* GetDBFile() const {return mDBFile;} virtual const char* GetOption() {return mOption.Data();} virtual const char* GetPathToDB() {return mPathToDB.Data();} virtual Bool_t IsOpened() {return mIsOpened;} virtual TTree* GetMetaTree() const {return mMetaTree;} virtual THashList* GetConditionTree() const {return mConditionTree;} virtual VConditionNames* GetConditionNames() const {return mConditionNames;} virtual Int_t GetNConditions() {return mNConditions;} virtual VHashTable* GetDBHash() const {return mHashTable;} virtual Double_t GetDBStart() {if (mHashTable) return mHashTable->GetGlobalStartTime(); else return 0;} virtual Double_t GetDBEnd() {if (mHashTable) return mHashTable->GetGlobalEndTime(); else return 0;} virtual Double_t GetStart(); virtual Double_t GetEnd(); virtual void Print(Option_t* opt=""); // Getting the metadata information virtual void GetMetaData(VMetaData* meta, Double_t time); virtual void NextMetaData(VMetaData* meta); virtual void PreviousMetaData(VMetaData* meta); virtual void NextMetaData(VMetaData* meta, VConditionSet* condset); virtual void NextMetaData(VMetaData* meta, Double_t time, VConditionFormula* condf=0); virtual void NextMetaData(VMetaData* meta, Double_t time, VConditionSet* condset); virtual void NextMetaData(VMetaData* meta, Double_t time, const char* selection); // Gets standard conditions for last read entry in the conditions tree virtual VFrCondition** GetConditionsArray() const {return mTmpConditions;} // Dealing with conditions Int_t LoadNearestGECondition(Double_t gpstime, Int_t conditionnumber=-2); Int_t LoadNearestGECondition(Double_t gpstime, const char* name); Int_t LoadNextCondition(Int_t conditionnumber); Int_t LoadNextCondition(char* name); VFrCondition* GetLoadedCondition(const char* name); VFrCondition* GetLoadedCondition(Int_t conditionnumber) {return mTmpConditions[conditionnumber];} ClassDef(VFrameMetaDB,0) // Local frame database }; #endif