SOLARIS_QT6_DAQ/ClassDigitizer2Gen.h

174 lines
5.9 KiB
C
Raw Normal View History

2023-01-25 14:59:48 -05:00
#ifndef DIGITIZER_CLASS_H
#define DIGITIZER_CLASS_H
#include <CAEN_FELib.h>
#include <cstdlib>
#include <string>
#include "Event.h"
#define MaxOutFileSize 2*1024*1024*1024 //2GB
//#define MaxOutFileSize 20*1024*1024 //20MB
2023-01-25 14:59:48 -05:00
#define MaxNumberOfChannel 64
2023-02-08 17:35:04 -05:00
#include "DigiParameters.h"
//^=================== Digitizer Class
2023-01-25 14:59:48 -05:00
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;
2023-01-25 14:59:48 -05:00
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;
2023-01-25 14:59:48 -05:00
bool acqON;
2023-02-23 12:24:39 -05:00
//all read and read/write settings
2023-02-23 16:08:47 -05:00
std::string settingFileName;
2023-02-23 12:24:39 -05:00
std::vector<Reg> boardSettings;
std::vector<Reg> chSettings[MaxNumberOfChannel];
Reg VGASetting[4];
2023-01-25 14:59:48 -05:00
public:
Digitizer2Gen();
~Digitizer2Gen();
2023-01-25 17:16:14 -05:00
2023-02-13 17:07:26 -05:00
unsigned short GetSerialNumber() const{return serialNumber;}
2023-02-13 15:22:24 -05:00
void SetDummy(unsigned short sn);
2023-02-13 17:07:26 -05:00
bool IsDummy() const {return isDummy;}
2023-01-25 14:59:48 -05:00
int OpenDigitizer(const char * url);
bool IsConnected() const {return isConnected;}
int CloseDigitizer();
2023-02-07 18:58:00 -05:00
int GetRet() const {return ret;};
2023-01-25 14:59:48 -05:00
std::string ReadValue(const char * parameter, bool verbose = false);
2023-02-23 12:24:39 -05:00
std::string ReadValue(Reg &para, int ch_index = -1, bool verbose = false);
2023-02-23 16:08:47 -05:00
std::string ReadValue(TYPE type, unsigned short index, int ch_index = -1, bool verbose = false);
2023-02-08 17:35:04 -05:00
std::string ReadDigValue(std::string shortPara, bool verbose = false);
2023-02-07 15:55:39 -05:00
std::string ReadChValue(std::string ch, std::string shortPara, bool verbose = false);
2023-02-23 12:24:39 -05:00
bool WriteValue(const char * parameter, std::string value);
bool WriteValue(Reg &para, std::string value, int ch_index = -1);
bool WriteDigValue(std::string shortPara, std::string value);
bool WriteChValue(std::string ch, std::string shortPara, std::string value);
2023-01-25 14:59:48 -05:00
void SendCommand(const char * parameter);
2023-02-08 17:35:04 -05:00
void SendCommand(std::string shortPara);
2023-01-25 14:59:48 -05:00
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();
2023-02-13 17:07:26 -05:00
int ReadStat(); // digitizer update it every 500 msec
2023-01-25 14:59:48 -05:00
void PrintStat();
2023-02-13 17:07:26 -05:00
uint32_t GetTriggerCount(int ch) const {return triggerCount[ch];}
uint64_t GetRealTime(int ch) const {return realTime[ch];}
2023-01-25 14:59:48 -05:00
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
2023-02-14 17:39:49 -05:00
void OpenOutFile(std::string fileName, const char * mode = "w");
2023-01-25 14:59:48 -05:00
void CloseOutFile();
void SaveDataToFile();
unsigned int GetFileSize() const {return outFileSize;}
uint64_t GetTotalFilesSize() const {return FinishedOutFilesSize + outFileSize;}
2023-01-25 14:59:48 -05:00
2023-02-23 16:08:47 -05:00
std::string GetSettingFileName() const {return settingFileName;}
void SetSettingFileName(std::string fileName) {settingFileName = fileName;}
2023-02-23 12:24:39 -05:00
void ReadAllSettings(); // read settings from digitier and save to memory
2023-02-23 16:08:47 -05:00
bool SaveSettingsToFile(const char * saveFileName = NULL); // ReadAllSettings + text file
bool LoadSettingsFromFile(const char * loadFileName = NULL); // Load settings, write to digitizer and save to memory
2023-02-24 19:21:27 -05:00
std::string GetSettingValue(TYPE type, unsigned short index, unsigned int ch_index = 0) const {
2023-02-23 16:08:47 -05:00
switch(type){
case TYPE::DIG: return boardSettings[index].GetValue();
case TYPE::CH: return chSettings[ch_index][index].GetValue();
case TYPE::VGA: return VGASetting[ch_index].GetValue();
case TYPE::LVDS: return "not defined";
}
return "invalid";
}
2023-02-24 19:21:27 -05:00
std::string GetSettingValue(TYPE type, const Reg para, unsigned int ch_index = 0) const{
switch(type){
case TYPE::DIG:{
for( int i = 0; i < (int) boardSettings.size(); i++){
if( para.GetPara() == boardSettings[i].GetPara()){
return boardSettings[i].GetValue();
}
}
};break;
case TYPE::CH:{
for( int i = 0; i < (int) chSettings[ch_index].size(); i++){
if( para.GetPara() == chSettings[ch_index][i].GetPara()){
return chSettings[ch_index][i].GetValue();
}
}
};break;
case TYPE::VGA: return VGASetting[ch_index].GetValue();
case TYPE::LVDS: return "not defined";
default : return "invalid";
}
return "no such parameter";
}
2023-01-25 14:59:48 -05:00
};
#endif