Compare commits

..

No commits in common. "223d751ba3ed54117489dfc14110f03e73df27d0" and "304bebf4670f27c76ea15f5cb440f1952937bcfd" have entirely different histories.

9 changed files with 177 additions and 404 deletions

2
.gitignore vendored
View File

@ -2,7 +2,5 @@
*.pcm
*.cxx
*.bin
test
FSUDAQ

View File

@ -1,4 +1,4 @@
#include "ClassDigitizer.h"
#include "DigitizerClass.h"
Digitizer::Digitizer(){
@ -21,10 +21,6 @@ Digitizer::Digitizer(){
data = new Data();
settingFileName = "";
settingFileExist = false;
settingFile = NULL;
ret = -1;
isConnected = false;
@ -39,7 +35,6 @@ Digitizer::~Digitizer(){
CloseDigitizer();
delete data;
///delete settingFile; /// not needed, settingFile open and close at everytime
}
void Digitizer::Reset(){
@ -281,32 +276,20 @@ int Digitizer::ProgramBoard(){
//===========================================================
void Digitizer::WriteRegister(uint32_t address, uint32_t value, int ch ){
/// only for channel setting.
if( ch < 0 ) {
ret = CAEN_DGTZ_WriteRegister(handle, address + 0x7000, value);
for( int i = 0; i < NChannel; i++) EditByte(value, address + (i << 8));
}else{
ret = CAEN_DGTZ_WriteRegister(handle, address + (ch<<8), value);
EditByte( value, address + (ch<<8) );
}
ErrorMsg("WriteRegister");
}
uint32_t Digitizer::ReadRegister(uint32_t address, unsigned int ch, string str ){
uint32_t * Data = new uint32_t[NChannel];
printf("=dsadads====== 0x%x \n", address);
if( address < 0x8000) {
if( ch < 0 ) {
printf("a %d-- %x \n", ch, address + 0x7000);
ret = CAEN_DGTZ_ReadRegister(handle, address + 0x7000, Data);
}else{
printf("b %d -- %x \n", ch, address + (ch << 8));
ret = CAEN_DGTZ_ReadRegister(handle, address + (ch << 8), Data);
}
if( ch < 0 ) {
ret = CAEN_DGTZ_ReadRegister(handle, address + 0x7000, Data);
}else{
printf("--- %x \n", address);
ret = CAEN_DGTZ_ReadRegister(handle, address, Data);
ret = CAEN_DGTZ_ReadRegister(handle, address + (ch << 8), Data);
}
ErrorMsg("ReadRegister");
if( str != "" ) printf("%s : 0x%x \n", str.c_str(), Data[0]);
@ -319,21 +302,9 @@ void Digitizer::SetChannelMask(uint32_t mask){
ErrorMsg("SetChannelMask");
}
void Digitizer::SetRecordLength(unsigned int ns, int ch){
int ch_coupled = ch + int(pow(-1, ch));
WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch);
WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch_coupled);
ErrorMsg("SetRecordLength");
}
void Digitizer::SetEventAggregation(unsigned int numEvent, int ch){
int ch_coupled = ch + int(pow(-1, ch));
WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch);
WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch_coupled);
ErrorMsg("SetEventAggregation");
}
void Digitizer::SetInputDynamicRange(unsigned int TwoVol_0_or_halfVol_1, int ch){ WriteRegister( Register::DPP::InputDynamicRange, TwoVol_0_or_halfVol_1, ch); ErrorMsg("SetInputDynamicRange");}
void Digitizer::SetRecordLength(unsigned int ns, int ch) { WriteRegister( Register::DPP::RecordLength_G, ns / ch2ns / 8 , ch); ErrorMsg("SetRecordLength"); }
void Digitizer::SetEventAggregation(unsigned int numEvent, int ch) { WriteRegister( Register::DPP::NumberEventsPerAggregate_G,numEvent, ch); ErrorMsg("SetEventAggregation"); }
void Digitizer::SetInputDynamicRange(unsigned int TwoVol_0_or_halfVol_1, int ch){ WriteRegister( Register::InputDynamicRange, TwoVol_0_or_halfVol_1, ch); ErrorMsg("SetInputDynamicRange");}
void Digitizer::SetPreTriggerSample(unsigned int nSample, int ch) { WriteRegister( Register::DPP::PreTrigger, nSample / 4, ch); ErrorMsg("SetPreTriggerSample");}
void Digitizer::SetPreTriggerDuration(unsigned int ns, int ch) { WriteRegister( Register::DPP::PreTrigger, ns / ch2ns / 4, ch); ErrorMsg("SetPreTriggerSample");}
void Digitizer::SetDCOffset(float offsetPrecentage, int ch) { WriteRegister( Register::DPP::ChannelDCOffset, uint( ADCFullSize * offsetPrecentage), ch ); ErrorMsg("SetDCOffset");}
@ -457,130 +428,3 @@ int Digitizer::GetChTemperature(int ch){
return temp[0];
}
void Digitizer::OpenSettingBinary(string fileName){
settingFile = NULL;
this->settingFileName = fileName;
settingFile = fopen(fileName.c_str(), "r+");
if( settingFile == NULL ){
printf("cannot open file %s. \n", fileName.c_str());
}else{
settingFileExist = true;
}
}
void Digitizer::CreateAndSaveSettingBinary(string fileName){
/// for 1 digitizer, 16 channels, needs 0x10XX to 0x1FXX
/// Board setting is 0x8000 --> 0x0000
/// Saved date YYYYMMDDHH --> 0x0004
/// Global Trigger Mask 0x810C --> 0x010C
/// Channel mask 0x8120 --> 0x0120
/// ROM Board version 0xF030 --> 0x0030
/// Board Form factor 0xF034 --> 0x0034
/// Board ID Byte 1 0xF038 --> 0x0038
/// Board ID Byte 0 0xF03C --> 0x003C
/// Board Serial Num Byte1 0xF080 --> 0x0080
/// Board Serial Num Byte0 0xF084 --> 0x0084 /// serial number = byte0 << 8 + byte1
/// ROC fireware version is 0x8124 --> 0x0124
/// Board Info is 0x8140 --> 0x0140
/// -------------------------------------
/// for 1 channel is 0x2000 = 8192 byte should be enough for all setting for 1 board
settingFileName = fileName;
settingFile = fopen(settingFileName.c_str(), "w+");
unsigned int haha[1] = {0x00000000}; /// 4 bytes
for(int i = 0; i < 8192/4 ; i++){
fwrite(haha, sizeof(unsigned int), 1, settingFile);
}
fseek(settingFile, 0L, SEEK_END);
unsigned int inFileSize = ftell(settingFile);
printf("Created file : %s. file size : %d Byte\n", settingFileName.c_str(), inFileSize);
fclose (settingFile);
settingFileExist = true;
///Save board setting
EditByteByRegister(Register::DPP::BoardConfiguration);
EditByteByRegister(Register::DPP::GlobalTriggerMask);
EditByteByRegister(Register::DPP::ChannelEnableMask);
EditByteByRegister(Register::DPP::ROM_BoardVersion);
EditByteByRegister(Register::DPP::ROM_BoardFromFactor);
EditByteByRegister(Register::DPP::ROM_BoardIDByte1);
EditByteByRegister(Register::DPP::ROM_BoardIDByte0);
EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte1);
EditByteByRegister(Register::DPP::ROM_BoardSerialNumByte0);
EditByteByRegister(Register::DPP::ROCFPGAFirmwareRevision);
EditByteByRegister(Register::DPP::BoardInfo);
///================ channel settings
for( int ch = 0; ch < NChannel ; ch++){
EditByteByRegister(Register::DPP::RecordLength_G, ch);
EditByteByRegister(Register::DPP::InputDynamicRange, ch);
EditByteByRegister(Register::DPP::PreTrigger, ch);
EditByteByRegister(Register::DPP::ChannelDCOffset, ch);
EditByteByRegister(Register::DPP::NumberEventsPerAggregate_G, ch);
EditByteByRegister(Register::DPP::DPPAlgorithmControl, ch);
EditByteByRegister(Register::DPP::AMCFirmwareRevision, ch);
EditByteByRegister(Register::DPP::VetoWidth, ch);
if( DPPType == 0x8B ) { /// DPP-PHA
EditByteByRegister(Register::DPP::PHA::TriggerThreshold, ch);
EditByteByRegister(Register::DPP::PHA::RCCR2SmoothingFactor, ch);
EditByteByRegister(Register::DPP::PHA::RiseTimeValidationWindow, ch);
EditByteByRegister(Register::DPP::PHA::TriggerHoldOffWidth, ch);
EditByteByRegister(Register::DPP::PHA::InputRiseTime, ch);
EditByteByRegister(Register::DPP::PHA::ShapedTriggerWidth, ch);
EditByteByRegister(Register::DPP::PHA::TrapezoidRiseTime, ch);
EditByteByRegister(Register::DPP::PHA::TrapezoidFlatTop, ch);
EditByteByRegister(Register::DPP::PHA::DecayTime, ch);
EditByteByRegister(Register::DPP::PHA::PeakingTime, ch);
EditByteByRegister(Register::DPP::PHA::PeakHoldOff, ch);
EditByteByRegister(Register::DPP::PHA::DPPAlgorithmControl2_G, ch);
EditByteByRegister(Register::DPP::PHA::FineGain, ch);
}
}
}
unsigned long Digitizer::ReadSettingBinary(uint32_t filePos, int ch){
if ( !settingFileExist ) return -1;
if( filePos >= 0x8000 ) {
filePos = filePos & 0x0FFF;
}else{
if( ch >= 0 ) {
filePos = filePos + (ch << 8);
}else{
return -1;
}
}
settingFile = fopen (settingFileName.c_str(),"r");
fseek( settingFile, filePos, SEEK_SET);
///printf(" at pos %lu \n", ftell(settingFile));
unsigned int lala[1];
size_t dummy = fread( lala, sizeof(unsigned int), 1, settingFile);
///printf(" data at pos %lu : %x \n", ftell(settingFile), lala[0]);
fclose (settingFile);
return lala[0];
}
void Digitizer::EditByte(unsigned int value, uint32_t filePos){
if ( !settingFileExist ) return ;
if( filePos >= 0x8000 ) filePos = filePos & 0x0FFF;
///printf(" file Pos : 0x%x \n", filePos);
settingFile = fopen (settingFileName.c_str(),"r+");
fseek( settingFile, filePos, SEEK_SET);
unsigned int jaja[1] = {value};
size_t dummy = fwrite( jaja, sizeof(unsigned int), 1, settingFile);
///printf("fwrie ret : %d, %x = %d\n", (int)dummy, jaja[0], jaja[0]);
fclose (settingFile);
}
void Digitizer::EditByteByRegister(uint32_t registerAddress, int ch){
EditByte( ReadRegister(registerAddress, ch), registerAddress);
}

View File

@ -13,11 +13,29 @@
#include "CAENDigitizerType.h"
#include "macro.h"
#include "ClassData.h"
#include "DataClass.h"
#include "RegisterAddress.h"
using namespace std;
/**
struct DigitizerChannelSetting {
/// PDS
unsigned int cfdSetting;
unsigned int chargeZeroSuppThreshold;
unsigned int shortGateWidth;
unsigned int longGateWidth;
unsigned int gateOffset;
unsigned int fixedBaseline;
unsigned int triggerLatency;
unsigned int thresholdPSDCut;
unsigned int pureGapThreshold;
unsigned int earlyBaselineFreeze;
};*/
//################################################################
class Digitizer{
@ -67,14 +85,7 @@ class Digitizer{
///================ ACQ control
void StopACQ();
void StartACQ();
///================ Setting
void OpenSettingBinary(string fileName);
void CreateAndSaveSettingBinary(string fileName);
void EditByte(unsigned int value, uint32_t filePos);
void EditByteByRegister(uint32_t registerAddress, int ch = -1);
unsigned long ReadSettingBinary(uint32_t filePos, int ch = -1); /// read from setting binary
protected:
///---- fixed parameter
@ -97,16 +108,10 @@ class Digitizer{
Data * data;
///------- other parameters
int ret; /// return value, refer to CAEN_DGTZ_ErrorCode
bool isConnected;
/// ------- setting
string settingFileName;
FILE * settingFile;
bool settingFileExist;
///==========
virtual int ProgramBoard();
void ErrorMsg(string header = "");

View File

@ -1,7 +1,7 @@
#ifndef DIGITIZER_PHA_H
#define DIGITIZER_PHA_H
#include "ClassDigitizer.h"
#include "DigitizerClass.h"
class DigitizerPHA : public Digitizer {

View File

@ -1,7 +1,7 @@
#ifndef DIGITIZER_PSD_H
#define DIGITIZER_PSD_H
#include "ClassDigitizer.h"
#include "DigitizerClass.h"
class DigitizerPSD : public Digitizer {
public:

View File

@ -11,7 +11,8 @@ CAENLIBS = -lCAENDigitizer
ROOTLIBS = `root-config --cflags --glibs`
OBJS = ClassDigitizer.o DigitizerPHA.o DigitizerPSD.o FSUDAQ.o
#OBJS = DataClass.o DigitizerClass.o DigitizerPHA.o DigitizerPSD.o FSUDAQ.o
OBJS = DigitizerClass.o DigitizerPHA.o DigitizerPSD.o FSUDAQ.o
#########################################################################
@ -21,21 +22,21 @@ clean :
/bin/rm -f $(OBJS) test FSUDAQ FSUDAQDict.cxx *.pcm
#ClassData.o : ClassData.h macro.h
# $(CC) $(COPTS) -c ClassData.h -o ClassData.o
#DataClass.o : DataClass.h macro.h
# $(CC) $(COPTS) -c DataClass.h -o DataClass.o
ClassDigitizer.o : ClassDigitizer.cpp ClassDigitizer.h RegisterAddress.h macro.h ClassData.h
$(CC) $(COPTS) -c ClassDigitizer.cpp
DigitizerClass.o : DigitizerClass.cpp DigitizerClass.h RegisterAddress.h macro.h DataClass.h
$(CC) $(COPTS) -c DigitizerClass.cpp
DigitizerPHA.o : DigitizerPHA.cpp DigitizerPHA.h ClassDigitizer.o
DigitizerPHA.o : DigitizerPHA.cpp DigitizerPHA.h DigitizerClass.o
$(CC) $(COPTS) -c DigitizerPHA.cpp
DigitizerPSD.o : DigitizerPSD.cpp DigitizerPSD.h ClassDigitizer.o
DigitizerPSD.o : DigitizerPSD.cpp DigitizerPSD.h DigitizerClass.o
$(CC) $(COPTS) -c DigitizerPSD.cpp
test : test.cpp ClassDigitizer.o DigitizerPHA.o DigitizerPSD.o
test : test.cpp DigitizerClass.o DigitizerPHA.o DigitizerPSD.o
@echo "--------- making test"
$(CC) $(COPTS) -o test test.cpp ClassDigitizer.o DigitizerPHA.o DigitizerPSD.o $(CAENLIBS)
$(CC) $(COPTS) -o test test.cpp DigitizerClass.o DigitizerPHA.o DigitizerPSD.o $(CAENLIBS)
FSUDAQDict.cxx : FSUDAQ.h FSUDAQLinkDef.h
@ -45,7 +46,7 @@ FSUDAQDict.cxx : FSUDAQ.h FSUDAQLinkDef.h
FSUDAQ.o : FSUDAQ.h FSUDAQ.cpp FSUDAQDict.cxx
@echo "----------- creating FSUDAQ.o"
$(CC) $(COPTS) -c FSUDAQ.cpp ClassDigitizer.cpp DigitizerPHA.cpp DigitizerPSD.cpp $(ROOTLIBS)
$(CC) $(COPTS) -c FSUDAQ.cpp DigitizerClass.cpp DigitizerPHA.cpp DigitizerPSD.cpp $(ROOTLIBS)
FSUDAQ : FSUDAQDict.cxx $(OBJS)
@echo "----------- creating FSUDAQ"
@ -54,6 +55,6 @@ FSUDAQ : FSUDAQDict.cxx $(OBJS)
#CutsCreator: $(OBJS3) src/CutsCreator.c
# g++ -std=c++17 -pthread src/CutsCreator.c -o CutsCreator $(ROOTLIBS)
#BoxScore : src/BoxScore.c Class/ClassDigitizer.h Class/FileIO.h Class/GenericPlane.h Class/HelioTarget.h Class/IsoDetect.h Class/HelioArray.h Class/MCPClass.h
#BoxScore : src/BoxScore.c Class/DigitizerClass.h Class/FileIO.h Class/GenericPlane.h Class/HelioTarget.h Class/IsoDetect.h Class/HelioArray.h Class/MCPClass.h
# g++ -std=c++17 -pthread src/BoxScore.c -o BoxScore $(DEPLIBS) $(ROOTLIBS)

View File

@ -9,177 +9,153 @@
namespace Register {
const uint32_t EventReadOutBuffer = 0x0000; /// R
static uint32_t EventReadOutBuffer = 0x0000; /// R
///========== Channel or Group
const uint32_t ChannelDummy32 = 0x1024; /// R/W
const uint32_t InputDynamicRange = 0x1028; /// R/W
const uint32_t ChannelPulseWidth = 0x1070; /// R/W
const uint32_t ChannelTriggerThreshold = 0x1080; /// R/W
const uint32_t CoupleSelfTriggerLogic_G = 0x1084; /// R/W
const uint32_t ChannelStatus = 0x1088; /// R
const uint32_t AMCFirmwareRevision = 0x108C; /// R
const uint32_t ChannelDCOffset = 0x1098; /// R/W
const uint32_t ChannelADCTemperature = 0x10A8; /// R
const uint32_t ChannelSelfTriggerRateMeter = 0x10EC; /// R
static uint32_t ChannelDummy32 = 0x1024; /// R/W
static uint32_t InputDynamicRange = 0x1028; /// R/W
static uint32_t ChannelPulseWidth = 0x1070; /// R/W
static uint32_t ChannelTriggerThreshold = 0x1080; /// R/W
static uint32_t CoupleSelfTriggerLogic_G = 0x1084; /// R/W
static uint32_t ChannelStatus = 0x1088; /// R
static uint32_t AMCFirmwareRevision = 0x108C; /// R
static uint32_t ChannelDCOffset = 0x1098; /// R/W
static uint32_t ChannelADCTemperature = 0x10A8; /// R
static uint32_t ChannelSelfTriggerRateMeter = 0x10EC; /// R
///========== Board
const uint32_t BoardConfiguration = 0x8000; /// R/W
const uint32_t BufferOrganization = 0x800C; /// R/W
const uint32_t CustomSize = 0x8020; /// R/W
const uint32_t ADCCalibration = 0x809C; /// W
const uint32_t AcquisitionControl = 0x8100; /// R/W
const uint32_t AcquisitionStatus = 0x8104; /// R
const uint32_t SoftwareTrigger = 0x8108; /// W
const uint32_t GlobalTriggerMask = 0x810C; /// R/W
const uint32_t FrontPanelTRGOUTEnableMask = 0x8110; /// R/W
const uint32_t PostTrigger = 0x8114; /// R/W
const uint32_t LVDSIOData = 0x8118; /// R/W
const uint32_t FrontPanelIOControl = 0x811C; /// R/W
const uint32_t ChannelEnableMask = 0x8120; /// R/W
const uint32_t ROCFPGAFirmwareRevision = 0x8124; /// R
const uint32_t EventStored = 0x812C; /// R
const uint32_t VoltageLevelModeConfig = 0x8138; /// R/W
const uint32_t SoftwareClockSync = 0x813C; /// W
const uint32_t BoardInfo = 0x8140; /// R
const uint32_t AnalogMonitorMode = 0x8144; /// R/W
const uint32_t EventSize = 0x814C; /// R
const uint32_t FanSpeedControl = 0x8168; /// R/W
const uint32_t MemoryBufferAlmostFullLevel = 0x816C; /// R/W
const uint32_t RunStartStopDelay = 0x8170; /// R/W
const uint32_t BoardFailureStatus = 0x8178; /// R
const uint32_t FrontPanelLVDSIONewFeatures = 0x81A0; /// R/W
const uint32_t BufferOccupancyGain = 0x81B4; /// R/W
const uint32_t ChannelsShutdown = 0x81C0; /// W
const uint32_t ExtendedVetoDelay = 0x81C4; /// R/W
const uint32_t ReadoutControl = 0xEF00; /// R/W
const uint32_t ReadoutStatus = 0xEF04; /// R
const uint32_t BoardID = 0xEF08; /// R/W
const uint32_t MCSTBaseAddressAndControl = 0xEF0C; /// R/W
const uint32_t RelocationAddress = 0xEF10; /// R/W
const uint32_t InterruptStatusID = 0xEF14; /// R/W
const uint32_t InterruptEventNumber = 0xEF18; /// R/W
const uint32_t MaxNumberOfEventsPerBLT = 0xEF1C; /// R/W
const uint32_t Scratch = 0xEF20; /// R/W
const uint32_t SoftwareReset = 0xEF24; /// W
const uint32_t SoftwareClear = 0xEF28; /// W
static uint32_t BoardConfiguration = 0x8000; /// R/W
static uint32_t BufferOrganization = 0x800C; /// R/W
static uint32_t CustomSize = 0x8020; /// R/W
static uint32_t ADCCalibration = 0x809C; /// W
static uint32_t AcquisitionControl = 0x8100; /// R/W
static uint32_t AcquisitionStatus = 0x8104; /// R
static uint32_t SoftwareTrigger = 0x8108; /// W
static uint32_t GlobalTriggerMask = 0x810C; /// R/W
static uint32_t FrontPanelTRGOUTEnableMask = 0x8110; /// R/W
static uint32_t PostTrigger = 0x8114; /// R/W
static uint32_t LVDSIOData = 0x8118; /// R/W
static uint32_t FrontPanelIOControl = 0x811C; /// R/W
static uint32_t ChannelEnableMask = 0x8120; /// R/W
static uint32_t ROCFPGAFirmwareRevision = 0x8124; /// R
static uint32_t EventStored = 0x812C; /// R
static uint32_t VoltageLevelModeConfig = 0x8138; /// R/W
static uint32_t SoftwareClockSync = 0x813C; /// W
static uint32_t BoardInfo = 0x8140; /// R
static uint32_t AnalogMonitorMode = 0x8144; /// R/W
static uint32_t EventSize = 0x814C; /// R
static uint32_t FanSpeedControl = 0x8168; /// R/W
static uint32_t MemoryBufferAlmostFullLevel = 0x816C; /// R/W
static uint32_t RunStartStopDelay = 0x8170; /// R/W
static uint32_t BoardFailureStatus = 0x8178; /// R
static uint32_t FrontPanelLVDSIONewFeatures = 0x81A0; /// R/W
static uint32_t BufferOccupancyGain = 0x81B4; /// R/W
static uint32_t ChannelsShutdown = 0x81C0; /// W
static uint32_t ExtendedVetoDelay = 0x81C4; /// R/W
static uint32_t ReadoutControl = 0xEF00; /// R/W
static uint32_t ReadoutStatus = 0xEF04; /// R
static uint32_t BoardID = 0xEF08; /// R/W
static uint32_t MCSTBaseAddressAndControl = 0xEF0C; /// R/W
static uint32_t RelocationAddress = 0xEF10; /// R/W
static uint32_t InterruptStatusID = 0xEF14; /// R/W
static uint32_t InterruptEventNumber = 0xEF18; /// R/W
static uint32_t MaxNumberOfEventsPerBLT = 0xEF1C; /// R/W
static uint32_t Scratch = 0xEF20; /// R/W
static uint32_t SoftwareReset = 0xEF24; /// W
static uint32_t SoftwareClear = 0xEF28; /// W
///====== Common for PHA and PSD
namespace DPP {
const uint32_t RecordLength_G = 0x1020; /// R/W
const uint32_t InputDynamicRange = 0x1028; /// R/W
const uint32_t NumberEventsPerAggregate_G = 0x1034; /// R/W
const uint32_t PreTrigger = 0x1038; /// R/W
///const uint32_t TriggerThreshold = 0x106C; /// R/W
///const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
const uint32_t DPPAlgorithmControl = 0x1080; /// R/W
const uint32_t ChannelStatus = 0x1088; /// R
const uint32_t AMCFirmwareRevision = 0x108C; /// R
const uint32_t ChannelDCOffset = 0x1098; /// R/W
const uint32_t ChannelADCTemperature = 0x10A8; /// R
const uint32_t IndividualSoftwareTrigger = 0x10C0; /// W
const uint32_t VetoWidth = 0x10D4; /// R/W
static uint32_t RecordLength_G = 0x1020; /// R/W
static uint32_t InputDynamicRange = 0x1028; /// R/W
static uint32_t NumberEventsPerAggregate_G = 0x1034; /// R/W
static uint32_t PreTrigger = 0x1038; /// R/W
static uint32_t TriggerThreshold = 0x106C; /// R/W
static uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
static uint32_t DPPAlgorithmControl = 0x1080; /// R/W
static uint32_t ChannelStatus = 0x1088; /// R
static uint32_t AMCFirmwareRevision = 0x108C; /// R
static uint32_t ChannelDCOffset = 0x1098; /// R/W
static uint32_t ChannelADCTemperature = 0x10A8; /// R
static uint32_t IndividualSoftwareTrigger = 0x10C0; /// W
static uint32_t VetoWidth = 0x10D4; /// R/W
const uint32_t BoardConfiguration = 0x8000; /// R/W
const uint32_t AggregateOrganization = 0x800C; /// R/W
const uint32_t ADCCalibration = 0x809C; /// W
const uint32_t ChannelShutdown = 0x80BC; /// W
const uint32_t AcquisitionControl = 0x8100; /// R/W
const uint32_t AcquisitionStatus = 0x8104; /// R
const uint32_t SoftwareTrigger = 0x8108; /// W
const uint32_t GlobalTriggerMask = 0x810C; /// R/W
const uint32_t FrontPanelTRGOUTEnableMask = 0x8110; /// R/W
const uint32_t LVDSIOData = 0x8118; /// R/W
const uint32_t FrontPanelIOControl = 0x811C; /// R/W
const uint32_t ChannelEnableMask = 0x8120; /// R/W
const uint32_t ROCFPGAFirmwareRevision = 0x8124; /// R
const uint32_t EventStored = 0x812C; /// R
const uint32_t VoltageLevelModeConfig = 0x8138; /// R/W
const uint32_t SoftwareClockSync = 0x813C; /// W
const uint32_t BoardInfo = 0x8140; /// R /// [0:7] 0x0E = 725, 0x0B = 730, [8:15] 0x01 = 640 kSample, 0x08 = 5.12 MSample, [16:23] channel number
const uint32_t AnalogMonitorMode = 0x8144; /// R/W
const uint32_t EventSize = 0x814C; /// R
const uint32_t TimeBombDowncounter = 0x8158; /// R
const uint32_t FanSpeedControl = 0x8168; /// R/W
const uint32_t RunStartStopDelay = 0x8170; /// R/W
const uint32_t BoardFailureStatus = 0x8178; /// R
const uint32_t DisableExternalTrigger = 0x817C; /// R/W
const uint32_t TriggerValidationMask = 0x8180; /// R/W, 0x8180 + 4n
const uint32_t FrontPanelLVDSIONewFeatures = 0x81A0; /// R/W
const uint32_t BufferOccupancyGain = 0x81B4; /// R/W
const uint32_t ExtendedVetoDelay = 0x81C4; /// R/W
const uint32_t ReadoutControl = 0xEF00; /// R/W
const uint32_t ReadoutStatus = 0xEF04; /// R
const uint32_t BoardID = 0xEF08; /// R/W /// Geo address on VME crate
const uint32_t MCSTBaseAddressAndControl = 0xEF0C; /// R/W
const uint32_t RelocationAddress = 0xEF10; /// R/W
const uint32_t InterruptStatusID = 0xEF14; /// R/W
const uint32_t InterruptEventNumber = 0xEF18; /// R/W
const uint32_t MaxNumberOfEventsPerBLT = 0xEF1C; /// R/W
const uint32_t Scratch = 0xEF20; /// R/W
const uint32_t SoftwareReset = 0xEF24; /// W
const uint32_t SoftwareClear = 0xEF28; /// W
const uint32_t ConfigurationReload = 0xEF34; /// W
const uint32_t ROMChecksum = 0xF000; /// R
const uint32_t ROMChecksumByte2 = 0xF004; /// R
const uint32_t ROMChecksumByte1 = 0xF008; /// R
const uint32_t ROMChecksumByte0 = 0xF00C; /// R
const uint32_t ROMConstantByte2 = 0xF010; /// R
const uint32_t ROMConstantByte1 = 0xF014; /// R
const uint32_t ROMConstantByte0 = 0xF018; /// R
const uint32_t ROM_C_Code = 0xF01C; /// R
const uint32_t ROM_R_Code = 0xF020; /// R
const uint32_t ROM_IEEE_OUI_Byte2 = 0xF024; /// R
const uint32_t ROM_IEEE_OUI_Byte1 = 0xF028; /// R
const uint32_t ROM_IEEE_OUI_Byte0 = 0xF02C; /// R
const uint32_t ROM_BoardVersion = 0xF030; /// R
const uint32_t ROM_BoardFromFactor = 0xF034; /// R
const uint32_t ROM_BoardIDByte1 = 0xF038; /// R
const uint32_t ROM_BoardIDByte0 = 0xF03C; /// R
const uint32_t ROM_PCB_rev_Byte3 = 0xF040; /// R
const uint32_t ROM_PCB_rev_Byte2 = 0xF044; /// R
const uint32_t ROM_PCB_rev_Byte1 = 0xF048; /// R
const uint32_t ROM_PCB_rev_Byte0 = 0xF04C; /// R
const uint32_t ROM_FlashType = 0xF050; /// R
const uint32_t ROM_BoardSerialNumByte1 = 0xF080; /// R
const uint32_t ROM_BoardSerialNumByte0 = 0xF084; /// R
const uint32_t ROM_VCXO_Type = 0xF088; /// R
static uint32_t BoardConfiguration = 0x8000; /// R/W
static uint32_t AggregateOrganization = 0x800C; /// R/W
static uint32_t ADCCalibration = 0x809C; /// W
static uint32_t ChannelShutdown = 0x80BC; /// W
static uint32_t AcquisitionControl = 0x8100; /// R/W
static uint32_t AcquisitionStatus = 0x8104; /// R
static uint32_t SoftwareTrigger = 0x8108; /// W
static uint32_t GlobalTriggerMask = 0x810C; /// R/W
static uint32_t FrontPanelTRGOUTEnableMask = 0x8110; /// R/W
static uint32_t LVDSIOData = 0x8118; /// R/W
static uint32_t FrontPanelIOControl = 0x811C; /// R/W
static uint32_t ChannelEnableMask = 0x8120; /// R/W
static uint32_t ROCFPGAFirmwareRevision = 0x8124; /// R
static uint32_t EventStored = 0x812C; /// R
static uint32_t VoltageLevelModeConfig = 0x8138; /// R/W
static uint32_t SoftwareClockSync = 0x813C; /// W
static uint32_t BoardInfo = 0x8140; /// R
static uint32_t AnalogMonitorMode = 0x8144; /// R/W
static uint32_t EventSize = 0x814C; /// R
static uint32_t TimeBombDowncounter = 0x8158; /// R
static uint32_t FanSpeedControl = 0x8168; /// R/W
static uint32_t RunStartStopDelay = 0x8170; /// R/W
static uint32_t BoardFailureStatus = 0x8178; /// R
static uint32_t DisableExternalTrigger = 0x817C; /// R/W
static uint32_t TriggerValidationMask = 0x8180; /// R/W, 0x8180 + 4n
static uint32_t FrontPanelLVDSIONewFeatures = 0x81A0; /// R/W
static uint32_t BufferOccupancyGain = 0x81B4; /// R/W
static uint32_t ExtendedVetoDelay = 0x81C4; /// R/W
static uint32_t ReadoutControl = 0xEF00; /// R/W
static uint32_t ReadoutStatus = 0xEF04; /// R
static uint32_t BoardID = 0xEF08; /// R/W
static uint32_t MCSTBaseAddressAndControl = 0xEF0C; /// R/W
static uint32_t RelocationAddress = 0xEF10; /// R/W
static uint32_t InterruptStatusID = 0xEF14; /// R/W
static uint32_t InterruptEventNumber = 0xEF18; /// R/W
static uint32_t MaxNumberOfEventsPerBLT = 0xEF1C; /// R/W
static uint32_t Scratch = 0xEF20; /// R/W
static uint32_t SoftwareReset = 0xEF24; /// W
static uint32_t SoftwareClear = 0xEF28; /// W
namespace PHA {
const uint32_t DataFlush = 0x103C; /// W not sure
const uint32_t ChannelStopAcquisition = 0x1040; /// R/W not sure
const uint32_t RCCR2SmoothingFactor = 0x1054; /// R/W Trigger Filter smoothing, triggerSmoothingFactor
const uint32_t InputRiseTime = 0x1058; /// R/W OK
const uint32_t TrapezoidRiseTime = 0x105C; /// R/W OK
const uint32_t TrapezoidFlatTop = 0x1060; /// R/W OK
const uint32_t PeakingTime = 0x1064; /// R/W OK
const uint32_t DecayTime = 0x1068; /// R/W OK
const uint32_t TriggerThreshold = 0x106C; /// R/W OK
const uint32_t RiseTimeValidationWindow = 0x1070; /// R/W OK
const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W OK
const uint32_t PeakHoldOff = 0x1078; /// R/W OK
const uint32_t ShapedTriggerWidth = 0x1084; /// R/W not sure
const uint32_t DPPAlgorithmControl2_G = 0x10A0; /// R/W OK
const uint32_t FineGain = 0x10C4; /// R/W OK
static uint32_t DataFlush = 0x103C; /// W not sure
static uint32_t ChannelStopAcquisition = 0x1040; /// R/W not sure
static uint32_t RCCR2SmoothingFactor = 0x1054; /// R/W Trigger Filter smoothing, triggerSmoothingFactor
static uint32_t InputRiseTime = 0x1058; /// R/W OK
static uint32_t TrapezoidRiseTime = 0x105C; /// R/W OK
static uint32_t TrapezoidFlatTop = 0x1060; /// R/W OK
static uint32_t PeakingTime = 0x1064; /// R/W OK
static uint32_t DecayTime = 0x1068; /// R/W OK
static uint32_t TriggerThreshold = 0x106C; /// R/W OK
static uint32_t RiseTimeValidationWindow = 0x1070; /// R/W OK
static uint32_t TriggerHoldOffWidth = 0x1074; /// R/W OK
static uint32_t PeakHoldOff = 0x1078; /// R/W OK
static uint32_t ShapedTriggerWidth = 0x1084; /// R/W not sure
static uint32_t DPPAlgorithmControl2_G = 0x10A0; /// R/W OK
static uint32_t FineGain = 0x10C4; /// R/W OK
}
namespace PSD {
const uint32_t CFDSetting = 0x103C; /// R/W
const uint32_t ForcedDataFlush = 0x1040; /// W
const uint32_t ChargeZeroSuppressionThreshold = 0x1044; /// R/W
const uint32_t ShortGateWidth = 0x1054; /// R/W
const uint32_t LongGateWidth = 0x1058; /// R/W
const uint32_t GateOffset = 0x105C; /// R/W
const uint32_t TriggerThreshold = 0x1060; /// R/W
const uint32_t FixedBaseline = 0x1064; /// R/W
const uint32_t TriggerLatency = 0x106C; /// R/W
const uint32_t ShapedTriggerWidth = 0x1070; /// R/W
const uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
const uint32_t ThresholdForPSDCut = 0x1078; /// R/W
const uint32_t PureGapThreshold = 0x107C; /// R/W
const uint32_t DPPAlgorithmControl2_G = 0x1084; /// R/W
const uint32_t EarlyBaselineFreeze = 0x10D8; /// R/W
static uint32_t CFDSetting = 0x103C; /// R/W
static uint32_t ForcedDataFlush = 0x1040; /// W
static uint32_t ChargeZeroSuppressionThreshold = 0x1044; /// R/W
static uint32_t ShortGateWidth = 0x1054; /// R/W
static uint32_t LongGateWidth = 0x1058; /// R/W
static uint32_t GateOffset = 0x105C; /// R/W
static uint32_t TriggerThreshold = 0x1060; /// R/W
static uint32_t FixedBaseline = 0x1064; /// R/W
static uint32_t TriggerLatency = 0x106C; /// R/W
static uint32_t ShapedTriggerWidth = 0x1070; /// R/W
static uint32_t TriggerHoldOffWidth = 0x1074; /// R/W
static uint32_t ThresholdForPSDCut = 0x1078; /// R/W
static uint32_t PureGapThreshold = 0x107C; /// R/W
static uint32_t DPPAlgorithmControl2_G = 0x1084; /// R/W
static uint32_t EarlyBaselineFreeze = 0x10D8; /// R/W
}
}
}

View File

@ -3,66 +3,15 @@
int main(int argc, char* argv[]){
DigitizerPHA * dig = new DigitizerPHA[1];
DigitizerPHA * dig = new DigitizerPHA[2];
//DigitizerPSD * psd = new DigitizerPSD();
dig[0].OpenDigitizer(0,0, true);
//dig[0].ReadRegister(Register::DPP::BoardConfiguration, -1, "Board configure");
//dig[0].ReadRegister(Register::DPP::ROM_BoardIDByte0, -1, "Board ID Byte 0");
//dig[0].ReadRegister(Register::DPP::ROM_BoardIDByte1, -1, "Board ID Byte 1");
//dig[0].ReadRegister(Register::DPP::ROM_BoardSerialNumByte0, -1, "Board SN Byte 1");
//dig[0].ReadRegister(Register::DPP::ROM_BoardSerialNumByte1, -1, "Board SN Byte 0");
//dig[0].ReadRegister(Register::DPP::AMCFirmwareRevision, 0, "AMCFirmware");
//dig[0].ReadRegister(Register::DPP::ROCFPGAFirmwareRevision, 0, "ROC FPGA");
//dig[0].ReadRegister(Register::DPP::GlobalTriggerMask, 0, "trigger mask");
//dig[0].ReadRegister(Register::DPP::ChannelEnableMask, 0, "Channel mask");
//
//
//dig[0].ReadRegister(Register::DPP::PHA::TriggerThreshold, 0, "trigger threshold");
//dig[0].CreateAndSaveSettingBinary("test.bin");
dig[0].OpenSettingBinary("test.bin");
//
//printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::BoardConfiguration));
//printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::GlobalTriggerMask));
//printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::PHA::TriggerThreshold, 0));
printf("======================= \n");
dig[0].SetRecordLength(2000);
dig[0].GetChannelSettingFromDigitizer(0);
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0));
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 4));
dig[0].SetRecordLength(4000);
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0));
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 3));
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 6));
dig[0].SetRecordLength(3000, 0);
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 0));
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 1));
printf("0x%x \n", (unsigned int)dig[0].ReadSettingBinary(Register::DPP::RecordLength_G, 2));
/* dig[1].OpenDigitizer(1,0, true);
/*
dig[2].OpenDigitizer(2,0, true);
dig[3].OpenDigitizer(0,1, true);
dig[4].OpenDigitizer(1,1, true);
dig[5].OpenDigitizer(2,1, true);
dig[6].OpenDigitizer(0,2, true);
dig[7].OpenDigitizer(1,2, true);
dig[8].OpenDigitizer(2,2, true);
//dig[1].OpenDigitizer(1,0, true);
//psd->OpenDigitizer(2,0);
/*
printf("======================= \n");
dig[0].SetRecordLength(3000);
@ -129,7 +78,7 @@ int main(int argc, char* argv[]){
dig[0].SetAcqMode("mixed");
*/
delete [] dig;
//delete psd;