/* * asymRootManager.hh * * Created on: October 30, 2025 * Author: Hovanes Egiyan * * Modified on: * */ #ifndef ASYMROOTMANAGER_HH_ #define ASYMROOTMANAGER_HH_ #include #include #include #include #include #include #include #include #include "asymRootFile.hh" #include "asymRootRecord.hh" class recordBuffer { public: string treename; asymRootRecord record; inline recordBuffer( string treeName, asymRootRecord prRecord ) : treename( treeName ), record( prRecord ) { } recordBuffer& operator=( const recordBuffer &rbuffer ) { treename = rbuffer.treename; record = rbuffer.record; return *this; } virtual ~recordBuffer() { } }; class asymRootManager { private: string prmPrefix; string prmSuffix; public: static asymRootManager* selfPtr; // Self pointer static Int_t prmCompressFactor; // Compression factor static UInt_t prmFileSizeTolerance; // Maximum file size static std::queue prmBuffer; // record buffer pthread_t prmThread; bool prmStop; asymRootFile* prmFile; string prmDir; string prmFileName; long prmFileLimit; long prmFileSize; pthread_mutex_t *prmMutex; asymRootManager(); virtual ~asymRootManager(); inline static asymRootManager* GetInstance() { if ( selfPtr == 0 ) selfPtr = new asymRootManager(); return selfPtr; } void StartDAQ( string dir, string prefix, string suffix, long nlim ); void NewRootFile(); void WriteFile( const char* channelName, struct timespec* timeStamp, long* buffPtr, int nElm, short& helScheme, float& flipFreq, float& stableTime ); void CloseFile(); inline asymRootFile* GetFile() const { return prmFile; } inline asymRootFile* SetFile( asymRootFile* file ) { return prmFile = file; } }; void *WriteThread( void* argument ); #endif /* ASYMROOTMANAGER_HH_ */