#ifndef DIGITIZER_CLASS_H #define DIGITIZER_CLASS_H #include #include #include #include #include "Event.h" #define MaxOutFileSize 2*1024*1024*1024 //2GB //#define MaxOutFileSize 20*1024*1024 //20MB #define MaxNumberOfChannel 64 #include "DigiParameters.h" //^=================== Digitizer Class class Digitizer2Gen { private: uint64_t handle; uint64_t ep_handle; ///end point handle uint64_t ep_folder_handle; ///end point folder handle uint64_t stat_handle; //uint64_t stat_folder_handle; bool isDummy; bool isConnected; int ret; char retValue[256]; std::string modelName; std::string cupVersion; std::string DPPVersion; std::string DPPType; unsigned short serialNumber; unsigned short adcBits; unsigned short nChannels; unsigned short adcRate; unsigned short ch2ns; std::string IPAddress; std::string netMask; std::string gateway; void Initialization(); uint64_t realTime[MaxNumberOfChannel]; uint64_t deadTime[MaxNumberOfChannel]; uint64_t liveTime[MaxNumberOfChannel]; uint32_t triggerCount[MaxNumberOfChannel]; uint32_t savedEventCount[MaxNumberOfChannel]; unsigned short outFileIndex; unsigned short dataStartIndetifier; std::string outFileNameBase; char outFileName[100]; FILE * outFile; unsigned int outFileSize; uint64_t FinishedOutFilesSize; bool acqON; //all read and read/write settings std::string settingFileName; std::vector boardSettings; std::vector chSettings[MaxNumberOfChannel]; Reg VGASetting[4]; std::map boardMap; std::map chMap; public: Digitizer2Gen(); ~Digitizer2Gen(); unsigned short GetSerialNumber() const{return serialNumber;} void SetDummy(unsigned short sn); bool IsDummy() const {return isDummy;} int OpenDigitizer(const char * url); bool IsConnected() const {return isConnected;} int CloseDigitizer(); int GetRet() const {return ret;}; int FindIndex(const Reg para); // get index from DIGIPARA std::string ReadValue(const char * parameter, bool verbose = false); std::string ReadValue(const Reg para, int ch_index = -1, bool verbose = false); bool WriteValue(const char * parameter, std::string value); bool WriteValue(const Reg para, std::string value, int ch_index = -1); void SendCommand(const char * parameter); void SendCommand(std::string shortPara); uint64_t GetHandle(const char * parameter); uint64_t GetParentHandle(uint64_t handle); std::string GetPath(uint64_t handle); std::string ErrorMsg(const char * funcName); void StartACQ(); void StopACQ(); bool IsAcqOn() const {return acqON;} void SetPHADataFormat(unsigned short dataFormat); // 0 = all data, // 1 = analog trace-0 only + flags // 2 = no trace, only ch, energy, timestamp, fine_timestamp + flags // 3 = only ch, energy, timestamp, minimum // 15 = raw data int ReadData(); int ReadStat(); // digitizer update it every 500 msec void PrintStat(); uint32_t GetTriggerCount(int ch) const {return triggerCount[ch];} uint64_t GetRealTime(int ch) const {return realTime[ch];} void Reset(); void ProgramPHA(bool testPulse = false); unsigned short GetNChannels() const {return nChannels;} unsigned short GetCh2ns() const {return ch2ns;} uint64_t GetHandle() const {return handle;} Event *evt; // should be evt[MaxNumber], when full or stopACQ, save into file void OpenOutFile(std::string fileName, const char * mode = "w"); void CloseOutFile(); void SaveDataToFile(); unsigned int GetFileSize() const {return outFileSize;} uint64_t GetTotalFilesSize() const {return FinishedOutFilesSize + outFileSize;} std::string GetSettingFileName() const {return settingFileName;} void SetSettingFileName(std::string fileName) {settingFileName = fileName;} void ReadAllSettings(); // read settings from digitier and save to memory bool SaveSettingsToFile(const char * saveFileName = NULL); // ReadAllSettings + text file bool LoadSettingsFromFile(const char * loadFileName = NULL); // Load settings, write to digitizer and save to memory std::string GetSettingValue(const Reg para, unsigned int ch_index = 0); // read from memory }; #endif