SOLARIS_GTK4_DAQ/ClassDigitizer2Gen.h

144 lines
4.4 KiB
C
Raw Normal View History

#ifndef DIGITIZER_CLASS_H
#define DIGITIZER_CLASS_H
#include <CAEN_FELib.h>
#include <cstdlib>
#include <string>
//#include "Parameter.h"
#define MaxOutFileSize 2*1024*1024*1024
2023-01-09 18:22:33 -05:00
#define MaxTraceLenght 2048
#define DataStartIndetifier 0xA345
2023-01-09 18:22:33 -05:00
struct event {
uint8_t channel; // 6 bit
uint16_t energy; // 16 bit
2023-01-09 18:22:33 -05:00
uint64_t timestamp; // 48 bit
uint16_t fine_timestamp; // 16 bit
2023-01-09 18:22:33 -05:00
uint64_t timestamp_ns; // 51 bit fine_timestamp not included
double timestamp_us;
uint16_t flags_low_priority; // 12 bit
uint16_t flags_high_priority; // 8 bit
size_t traceLenght; // 64 bit
uint8_t downSampling; // 8 bit
bool board_fail;
bool flush;
2023-01-09 18:22:33 -05:00
uint8_t analog_probes_type[2]; // 3 bit
uint8_t digital_probes_type[4]; // 4 bit
int32_t analog_probes0[MaxTraceLenght]; // 18 bit
int32_t analog_probes1[MaxTraceLenght];
uint8_t digital_probes0[MaxTraceLenght]; // 1 bit
uint8_t digital_probes1[MaxTraceLenght];
uint8_t digital_probes2[MaxTraceLenght];
uint8_t digital_probes3[MaxTraceLenght];
uint16_t trigger_threashold; // 16 bit
size_t event_size; // 64 bit
uint32_t aggCounter; // 32 bit
void PrintEnergyTimeStamp(){
printf("ch: %2d, energy: %u, timestamp: %lu ch, traceLenght: %lu\n", channel, energy, timestamp, traceLenght);
}
void PrintAll(){
printf("============== ch : %2d (0x%2X), fail: %d, flush: %d\n", channel, channel, board_fail, flush);
printf("energy: %u, timestamp: %lu, fine_timestamp: %u \n", energy, timestamp, fine_timestamp);
printf("flag (high): 0x%2X, (low): 0x%3X, traceLength: %lu\n", flags_high_priority, flags_low_priority, traceLenght);
printf("Agg counter : %u, trigger : %u, downSampling: %u \n", aggCounter, trigger_threashold, downSampling);
printf("AnaProbe Type: %u, %u\n", analog_probes_type[0], analog_probes_type[1]);
printf("DigProbe Type: %u, %u, %u, %u\n", digital_probes_type[0], digital_probes_type[1], digital_probes_type[2], digital_probes_type[3]);
}
void PrintTrace(){
for(int i = 0; i < traceLenght; i++){
printf("%4d| %6d %6d %1d %1d %1d %1d\n", i, analog_probes0[i],
analog_probes1[i],
digital_probes0[i],
digital_probes1[i],
digital_probes2[i],
digital_probes3[i]);
}
}
};
class Digitizer2Gen {
private:
uint64_t handle;
uint64_t ep_handle; ///end point handle
uint64_t ep_folder_handle; ///end point folder handle
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();
std::string ErrorMsg(const char * funcName);
2023-01-09 18:22:33 -05:00
unsigned int dataFormatID; // 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
2023-01-09 18:22:33 -05:00
unsigned short outFileIndex;
unsigned short dataStartIndetifier;
std::string outFileNameBase;
char outFileName[100];
FILE * outFile;
unsigned int outFileSize;
2023-01-09 18:22:33 -05:00
public:
Digitizer2Gen();
~Digitizer2Gen();
int OpenDigitizer(const char * url);
int CloseDigitizer();
std::string ReadValue(const char * parameter);
void WriteValue(const char * parameter, std::string value);
void SendCommand(const char * parameter);
uint64_t GetHandle(const char * parameter);
uint64_t GetParentHandle(uint64_t handle);
std::string GetPath(uint64_t handle);
void StartACQ();
void StopACQ();
void SetPHADataFormat(unsigned dataFormat);
2023-01-09 18:22:33 -05:00
int ReadData();
void ReadDataRaw(); //not impletmented
void ProgramPHA(bool testPulse = false);
unsigned short GetNChannels() {return nChannels;}
unsigned short GetCh2ns() {return ch2ns;}
uint64_t GetHandle() {return handle;}
2023-01-09 18:22:33 -05:00
event evt;
void OpenOutFile(std::string fileName);
void CloseOutFile();
void SaveDataToFile();
2023-01-09 18:22:33 -05:00
};
#endif