Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CAENMCAApp/Db/CAENMCA.db
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ record(seq, "$(P)$(Q)ENDBEGALL:SP")
{
field(SELM, "All")
field(LNK0, "$(P)$(Q)ENDALL:SP PP")
field(DLY1, "1")
field(DLY1, "3")
field(LNK1, "$(P)$(Q)BEGINALL:SP PP")
}

Expand All @@ -210,7 +210,7 @@ record(seq, "$(P)$(Q)ENDBEGALL:SP")
# automatically
record(ao, "$(P)$(Q)LISTFILE:SIZE:MAX:SP")
{
field(VAL, "2000")
field(VAL, "1900")
field(EGU, "MB")
field(DESC, "Max list file size")
field(PINI, "YES")
Expand Down
10 changes: 8 additions & 2 deletions CAENMCAApp/Db/CAENMCAChan.db
Original file line number Diff line number Diff line change
Expand Up @@ -383,15 +383,21 @@ record(ai, "$(P)$(Q)C$(CHAN):LISTFILE:SIZE")
field(SCAN, "I/O Intr")
}

# Run on 10 second scan as checking ENDBEGALL:SP.PACT is not enough
# need to allow time for file size PV to have been updated which will
# happen a little after ENDBEGALL has completed
# need scan time to be > delay in ENDBEGALL
record(calcout, "$(P)$(Q)C$(CHAN):LISTFILE:RESTART")
{
field(INPA, "$(P)$(Q)C$(CHAN):LISTFILE:SIZE")
field(INPB, "$(P)$(Q)LISTFILE:SIZE:MAX:SP")
field(INPC, "$(P)$(Q)ENDBEGALL:SP.PACT")
field(CALC, "C == 0 && A > B")
field(INPD, "$(P)$(Q)C$(CHAN):ACQ:RUNNING")
field(INPE, "$(P)DAE:RUNSTATE")
field(CALC, "C==0&&D==1&&E==2&&A>B")
field(OOPT, "When Non-zero")
field(OUT, "$(P)$(Q)ENDBEGALL:SP PP")
field(SCAN, "1 second")
field(SCAN, "10 second")
}

record(longin, "$(P)$(Q)C$(CHAN):LISTMODE:MAXNEVENTS")
Expand Down
19 changes: 19 additions & 0 deletions CAENMCAApp/Db/CAENMCADev.db
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,25 @@ record(waveform, "$(P)$(Q)DEVICE:ADDR")
info(archive, "VAL")
}

record(stringin, "$(P)$(Q)FILEDIRPREFIX")
{
field(DESC, "File Dir Prefix")
field(DTYP, "asynOctetRead")
field(INP, "@asyn($(PORT),0,0)FILEDIRPREFIX")
field(SCAN, "I/O Intr")
info(INTEREST, "HIGH")
}

record(stringout, "$(P)$(Q)FILEDIRPREFIX:SP")
{
field(DESC, "File Dir Prefix")
field(DTYP, "asynOctetWrite")
field(OUT, "@asyn($(PORT),0,0)FILEDIRPREFIX")
field(PINI, "YES")
info(INTEREST, "HIGH")
info(autosaveFields, "VAL")
}

# start both channels on hexagon
record(bo, "$(P)$(Q)BEGINRUN:SP")
{
Expand Down
16 changes: 11 additions & 5 deletions CAENMCAApp/src/CAENMCADriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,7 @@ CAENMCADriver::CAENMCADriver(const char *portName, const char* deviceAddr, const
createParam(P_BLGeometryString, asynParamOctet, &P_BLGeometry);
createParam(P_sampleGeometryString, asynParamOctet, &P_sampleGeometry);
createParam(P_sampleNameString, asynParamOctet, &P_sampleName);
createParam(P_fileDirPrefixString, asynParamOctet, &P_fileDirPrefix);

// don't initialise P_iRunNumber as we want it to come from PINI and we also have asyn:READBACK

Expand Down Expand Up @@ -614,16 +615,17 @@ void CAENMCADriver::setRunNumberFromIRunNumber()

void CAENMCADriver::setFileNames()
{
std::string deviceName, runNumber;
char filename[256];
std::string deviceName, runNumber, fileDirPrefix;
char filename[512];
setRunNumberFromIRunNumber();
g_drivers[0]->getStringParam(g_drivers[0]->P_runNumber, runNumber);
getStringParam(P_deviceName, deviceName);
getStringParam(P_fileDirPrefix, fileDirPrefix);
for(int i=0; i<2; ++i) {
epicsSnprintf(filename, sizeof(filename), "%s/%s_%s_ch%d.bin", m_file_dir.c_str(), deviceName.c_str(), runNumber.c_str(), i);
epicsSnprintf(filename, sizeof(filename), "%s%s/%s_%s_ch%d.bin", fileDirPrefix.c_str(), m_file_dir.c_str(), deviceName.c_str(), runNumber.c_str(), i);
setStringParam(i, P_listFile, filename);
setListModeFilename(i, filename);
epicsSnprintf(filename, sizeof(filename), "%s/%s_%s_spec_ch%02d.spe", m_file_dir.c_str(), deviceName.c_str(), runNumber.c_str(), i);
epicsSnprintf(filename, sizeof(filename), "%s%s/%s_%s_spec_ch%02d.spe", fileDirPrefix.c_str(), m_file_dir.c_str(), deviceName.c_str(), runNumber.c_str(), i);
setStringParam(i, P_energySpecFilename, filename);
setEnergySpectrumFilename(i, 0, filename);
}
Expand Down Expand Up @@ -1636,6 +1638,10 @@ void CAENMCADriver::pollerTask()
{
bool new_data;
epicsThreadSleep(0.2); // to allow class constructror to complete
lock();
std::string deviceName;
getStringParam(P_deviceName, deviceName);
unlock();
while(true)
{
lock();
Expand Down Expand Up @@ -1685,7 +1691,7 @@ void CAENMCADriver::pollerTask()
setStringParam(P_availableConfigurations, configs.c_str());
}
catch(const std::exception& ex) {
std::cerr << "exception in pollerTask: " << ex.what() << std::endl;
std::cerr << "exception in pollerTask: " << deviceName << ": " << ex.what() << std::endl;
setParamStatus(0, P_eventsSpecNTriggers, asynError); // to flag an alarm in the DB
}
callParamCallbacks(0);
Expand Down
2 changes: 2 additions & 0 deletions CAENMCAApp/src/CAENMCADriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ class epicsShareClass CAENMCADriver : public ADDriver
int P_BLGeometry; // string
int P_sampleGeometry; // string
int P_sampleName; // string
int P_fileDirPrefix; // string
int P_startAcquisition; // int
int P_stopAcquisition; // int

Expand Down Expand Up @@ -368,6 +369,7 @@ class epicsShareClass CAENMCADriver : public ADDriver
#define P_BLGeometryString "BLGEOMETRY"
#define P_sampleGeometryString "SAMPLEGEOMETRY"
#define P_sampleNameString "SAMPLENAME"
#define P_fileDirPrefixString "FILEDIRPREFIX"


#endif /* CAENMCADRIVER_H */
Expand Down