- added third monitor to AMOR
- prepared monitor writing for SANS - created a separate powder diffractometer simulation - updated histogram memory code to read SANS gummi monitor packets - updated histogram memory to read third single detector = TOF-monitor
This commit is contained in:
2
amor.dic
2
amor.dic
@ -204,6 +204,8 @@ singledown=/entry1,NXentry/reflectometer,NXinstrument/single,NXdetector/SDS \
|
|||||||
singletime=/entry1,NXentry/reflectometer,NXinstrument/single,NXdetector/SDS \
|
singletime=/entry1,NXentry/reflectometer,NXinstrument/single,NXdetector/SDS \
|
||||||
time_binning -type DFNT_FLOAT32 -rank 1 -dim {$(timebin)} \
|
time_binning -type DFNT_FLOAT32 -rank 1 -dim {$(timebin)} \
|
||||||
-attr {axis,2}
|
-attr {axis,2}
|
||||||
|
singletofmon=/entry1,NXentry/reflectometer,NXinstrument/single,NXdetector/SDS \
|
||||||
|
tof_monitor -type DFNT_INT32 -rank 1 -dim {$(timebin)}
|
||||||
#------------ detector: scan mode
|
#------------ detector: scan mode
|
||||||
scanroot=/entry1,NXentry/reflectometer,NXinstrument/scan,NXdetector/SDS
|
scanroot=/entry1,NXentry/reflectometer,NXinstrument/scan,NXdetector/SDS
|
||||||
sdetx=/entry1,NXentry/reflectometer,NXinstrument/scan,NXdetector/SDS x \
|
sdetx=/entry1,NXentry/reflectometer,NXinstrument/scan,NXdetector/SDS x \
|
||||||
|
2
danu.dat
2
danu.dat
@ -1,3 +1,3 @@
|
|||||||
233
|
239
|
||||||
NEVER, EVER modify or delete this file
|
NEVER, EVER modify or delete this file
|
||||||
You'll risk eternal damnation and a reincarnation as a cockroach!|n
|
You'll risk eternal damnation and a reincarnation as a cockroach!|n
|
16
nxamor.c
16
nxamor.c
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
Mark Koennecke, September 1999
|
Mark Koennecke, September 1999
|
||||||
Updated, Mark Koennecke, August 2001
|
Updated, Mark Koennecke, August 2001
|
||||||
|
Updated to store TOF-monitor, Mark Koennecke, September 2002
|
||||||
--------------------------------------------------------------------------*/
|
--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -624,11 +625,12 @@ static int WriteTOFDetector(char *name, pHistMem pHM, int *iDim,
|
|||||||
} else {
|
} else {
|
||||||
SCWrite(pCon,"PSD writing supressed!",eWarning);
|
SCWrite(pCon,"PSD writing supressed!",eWarning);
|
||||||
}
|
}
|
||||||
|
#define MAXSINGLE 3
|
||||||
/*
|
/*
|
||||||
now get and write single detectors
|
now get and write single detectors
|
||||||
*/
|
*/
|
||||||
iLength = iDim[0]*iDim[1]*iDim[2];
|
iLength = iDim[0]*iDim[1]*iDim[2];
|
||||||
lData = (HistInt *)malloc(2*iDim[2]*sizeof(HistInt));
|
lData = (HistInt *)malloc(MAXSINGLE*iDim[2]*sizeof(HistInt));
|
||||||
if(!lData)
|
if(!lData)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: out of memory while writing single detectors",
|
SCWrite(pCon,"ERROR: out of memory while writing single detectors",
|
||||||
@ -636,12 +638,18 @@ static int WriteTOFDetector(char *name, pHistMem pHM, int *iDim,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset(lData,0,2*iDim[2]*sizeof(HistInt));
|
memset(lData,0,MAXSINGLE*iDim[2]*sizeof(HistInt));
|
||||||
GetHistogramDirect(pHM,pCon,0,iLength,2*iDim[2],
|
GetHistogramDirect(pHM,pCon,0,iLength,MAXSINGLE*iDim[2],
|
||||||
lData, 2*iDim[2]*sizeof(HistInt));
|
lData, MAXSINGLE*iDim[2]*sizeof(HistInt));
|
||||||
NXDputalias(hfil,hdict,"singleup",lData);
|
NXDputalias(hfil,hdict,"singleup",lData);
|
||||||
NXDaliaslink(hfil,hdict,"singledana","singleup");
|
NXDaliaslink(hfil,hdict,"singledana","singleup");
|
||||||
NXDaliaslink(hfil,hdict,"singledana","singletime");
|
NXDaliaslink(hfil,hdict,"singledana","singletime");
|
||||||
|
/*
|
||||||
|
the TOF monitor
|
||||||
|
*/
|
||||||
|
NXDputalias(hfil,hdict,"singletofmon",lData+2*iDim[2]);
|
||||||
|
NXDaliaslink(hfil,hdict,"dana","singletofmon");
|
||||||
|
NXDaliaslink(hfil,hdict,"singledana","singletofmon");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
74
nxsans.c
74
nxsans.c
@ -8,7 +8,10 @@
|
|||||||
|
|
||||||
Updated to support the larger detector resolution and possible
|
Updated to support the larger detector resolution and possible
|
||||||
TOF and stroboscopic modes, Mark Koennecke, February 2001
|
TOF and stroboscopic modes, Mark Koennecke, February 2001
|
||||||
|
|
||||||
|
Added additional monitors for stroboscopic gummi mode,
|
||||||
|
Mark Koennecke, September 2002
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
Labor fuer Neutronenstreuung
|
Labor fuer Neutronenstreuung
|
||||||
@ -66,6 +69,7 @@
|
|||||||
#define HISTNAME "banana"
|
#define HISTNAME "banana"
|
||||||
#define SAMPLETABLE "sampletable"
|
#define SAMPLETABLE "sampletable"
|
||||||
|
|
||||||
|
static int gummiFlag = 0; /* a flag indicating stroboscopic, or gummi mode */
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
static void SNError(void *pData, char *text)
|
static void SNError(void *pData, char *text)
|
||||||
@ -106,7 +110,7 @@
|
|||||||
|
|
||||||
/* store global attributes */
|
/* store global attributes */
|
||||||
iStat = NXputattr(pFile,"file_name",filename,
|
iStat = NXputattr(pFile,"file_name",filename,
|
||||||
strlen(filename)+1,DFNT_INT8);
|
strlen(filename)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing file_name attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing file_name attribute to Nexus file",eError);
|
||||||
@ -118,7 +122,7 @@
|
|||||||
/* write creation time */
|
/* write creation time */
|
||||||
SNXFormatTime(pBueffel,512);
|
SNXFormatTime(pBueffel,512);
|
||||||
iStat = NXputattr(pFile,"file_time",pBueffel,
|
iStat = NXputattr(pFile,"file_time",pBueffel,
|
||||||
strlen(pBueffel)+1,DFNT_INT8);
|
strlen(pBueffel)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing date attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing date attribute to Nexus file",eError);
|
||||||
@ -127,7 +131,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"instrument",pVar->text,
|
iStat = NXputattr(pFile,"instrument",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing instrument attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing instrument attribute to Nexus file",eError);
|
||||||
@ -138,7 +142,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"owner",pVar->text,
|
iStat = NXputattr(pFile,"owner",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing owner attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing owner attribute to Nexus file",eError);
|
||||||
@ -150,7 +154,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"owner_adress",pVar->text,
|
iStat = NXputattr(pFile,"owner_adress",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing owner_adress attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing owner_adress attribute to Nexus file",eError);
|
||||||
@ -161,7 +165,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"owner_telephone_number",pVar->text,
|
iStat = NXputattr(pFile,"owner_telephone_number",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing owner_telephone_number attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing owner_telephone_number attribute to Nexus file",eError);
|
||||||
@ -172,7 +176,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"owner_fax_number",pVar->text,
|
iStat = NXputattr(pFile,"owner_fax_number",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing owner_fax_number attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing owner_fax_number attribute to Nexus file",eError);
|
||||||
@ -183,7 +187,7 @@
|
|||||||
if(pVar)
|
if(pVar)
|
||||||
{
|
{
|
||||||
iStat = NXputattr(pFile,"owner_email",pVar->text,
|
iStat = NXputattr(pFile,"owner_email",pVar->text,
|
||||||
strlen(pVar->text)+1,DFNT_INT8);
|
strlen(pVar->text)+1,NX_CHAR);
|
||||||
if(iStat == NX_ERROR)
|
if(iStat == NX_ERROR)
|
||||||
{
|
{
|
||||||
SCWrite(pCon,"ERROR: writing owner_email attribute to Nexus file",eError);
|
SCWrite(pCon,"ERROR: writing owner_email attribute to Nexus file",eError);
|
||||||
@ -598,6 +602,7 @@
|
|||||||
}
|
}
|
||||||
NXDputalias(Nfil,pDict,"ddcounts",lData);
|
NXDputalias(Nfil,pDict,"ddcounts",lData);
|
||||||
free(lData);
|
free(lData);
|
||||||
|
|
||||||
/* write x and y axis */
|
/* write x and y axis */
|
||||||
for(i = 0; i < iDim[0]; i++)
|
for(i = 0; i < iDim[0]; i++)
|
||||||
{
|
{
|
||||||
@ -609,6 +614,7 @@
|
|||||||
iAxis[i] = i;
|
iAxis[i] = i;
|
||||||
}
|
}
|
||||||
NXDputalias(Nfil,pDict,"ddcy",iAxis);
|
NXDputalias(Nfil,pDict,"ddcy",iAxis);
|
||||||
|
|
||||||
/* write time binning if appropriate */
|
/* write time binning if appropriate */
|
||||||
if(nDim == 3)
|
if(nDim == 3)
|
||||||
{
|
{
|
||||||
@ -616,6 +622,31 @@
|
|||||||
NXDputalias(Nfil,pDict,"ddtb",(void *)fTime);
|
NXDputalias(Nfil,pDict,"ddtb",(void *)fTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
write gummi monitors when apropriate
|
||||||
|
*/
|
||||||
|
if(nDim == 3 && gummiFlag != 0)
|
||||||
|
{
|
||||||
|
histSize = 3*iDim[2];
|
||||||
|
lData = (HistInt *)malloc(histSize*sizeof(HistInt));
|
||||||
|
if(lData == NULL)
|
||||||
|
{
|
||||||
|
SCWrite(pCon,"WARNING: failed to allocate memory for monitors",
|
||||||
|
eWarning);
|
||||||
|
} else {
|
||||||
|
memset(lData,0,histSize*sizeof(HistInt));
|
||||||
|
GetHistogram(self,pCon,0,iDim[0]*iDim[1]*iDim[2],histSize,
|
||||||
|
lData,histSize*sizeof(HistInt));
|
||||||
|
NXDputalias(Nfil,pDict,"gummimon1",lData);
|
||||||
|
NXDputalias(Nfil,pDict,"gummimon2",lData+iDim[2]);
|
||||||
|
NXDputalias(Nfil,pDict,"gummimon3",lData+2*iDim[2]);
|
||||||
|
free(lData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
write detector temperature. It is a hot one............
|
||||||
|
*/
|
||||||
if(pSiem)
|
if(pSiem)
|
||||||
{
|
{
|
||||||
iRet = SPSGetADC(pSiem,1,&iVal);
|
iRet = SPSGetADC(pSiem,1,&iVal);
|
||||||
@ -637,7 +668,7 @@
|
|||||||
NXDaliaslink(Nfil,pDict,"dan","ddtb");
|
NXDaliaslink(Nfil,pDict,"dan","ddtb");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send quieck message for autoamtic copying*/
|
/* send quieck message for automatic copying*/
|
||||||
i = 131;
|
i = 131;
|
||||||
iVal = NX_CHAR;
|
iVal = NX_CHAR;
|
||||||
NXgetattr(Nfil,"file_name",pBueffel,&i,&iVal);
|
NXgetattr(Nfil,"file_name",pBueffel,&i,&iVal);
|
||||||
@ -704,12 +735,33 @@
|
|||||||
char *argv[])
|
char *argv[])
|
||||||
|
|
||||||
{
|
{
|
||||||
|
char pBueffel[80];
|
||||||
pDictStruct self = NULL;
|
pDictStruct self = NULL;
|
||||||
self = (pDictStruct)pData;
|
self = (pDictStruct)pData;
|
||||||
|
|
||||||
assert(self);
|
assert(self);
|
||||||
assert(pCon);
|
assert(pCon);
|
||||||
assert(pSics);
|
assert(pSics);
|
||||||
|
|
||||||
|
if(argc > 1){
|
||||||
|
strtolower(argv[1]);
|
||||||
|
if(strcmp(argv[1],"gummi") == 0){
|
||||||
|
if(argc > 2){
|
||||||
|
if(!SCMatchRights(pCon,usMugger)){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
gummiFlag = atoi(argv[2]);
|
||||||
|
SCSendOK(pCon);
|
||||||
|
return 1;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
sprintf(pBueffel,"%s.gummi = %d",argv[0], gummiFlag);
|
||||||
|
SCWrite(pCon,pBueffel,eValue);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return SNMakeSANS(pCon,pSics,self->pDict);
|
return SNMakeSANS(pCon,pSics,self->pDict);
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
4
sans.tcl
4
sans.tcl
@ -82,8 +82,8 @@ SicsDataPrefix lock
|
|||||||
VarMake SicsDataPostFix Text Mugger
|
VarMake SicsDataPostFix Text Mugger
|
||||||
SicsDataPostFix ".hdf"
|
SicsDataPostFix ".hdf"
|
||||||
SicsDataPostFix lock
|
SicsDataPostFix lock
|
||||||
MakeDataNumber SicsDataNumber $root/data/DataNumber
|
MakeDataNumber SicsDataNumber $root/data/2001/DataNumber
|
||||||
InitSANS $root/data/sansdict.dic
|
InitSANS $root/sansdict.dic
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------
|
#--------------------------------------------------------------------------
|
||||||
|
@ -88,6 +88,15 @@ ddtb = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS tof_or_gummi \
|
|||||||
-attr {units,uSecOrStroboscopicDimension}
|
-attr {units,uSecOrStroboscopicDimension}
|
||||||
ddtemp = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS \
|
ddtemp = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS \
|
||||||
temperature
|
temperature
|
||||||
|
gummimon1 = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS \
|
||||||
|
gummi_monitor1 -rank 1 -dim {$(timedim)} \
|
||||||
|
-attr {units,counts}
|
||||||
|
gummimon2 = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS \
|
||||||
|
gummi_monitor1 -rank 1 -dim {$(timedim)} \
|
||||||
|
-attr {units,counts}
|
||||||
|
gummimon3 = /entry1,NXentry/SANS,NXinstrument/detector,NXdetector/SDS \
|
||||||
|
gummi_monitor1 -rank 1 -dim {$(timedim)} \
|
||||||
|
-attr {units,counts}
|
||||||
#--------Sample
|
#--------Sample
|
||||||
san = /entry1,NXentry/sample,NXsample/SDS name -type DFNT_CHAR -rank 1 \
|
san = /entry1,NXentry/sample,NXsample/SDS name -type DFNT_CHAR -rank 1 \
|
||||||
-dim {256}
|
-dim {256}
|
||||||
|
@ -1,48 +1,77 @@
|
|||||||
a5l.length 80.000000
|
yfactor 1.420000
|
||||||
flightpathlength 0.000000
|
yfactor setAccess 1
|
||||||
flightpathlength setAccess 1
|
xfactor 0.715000
|
||||||
flightpath 0.000000
|
xfactor setAccess 1
|
||||||
flightpath setAccess 1
|
ps.listfile peaksearch.dat
|
||||||
delay 2500.000000
|
ps.listfile setAccess 2
|
||||||
delay setAccess 1
|
ps.scansteps 24
|
||||||
hm CountMode timer
|
ps.scansteps setAccess 2
|
||||||
hm preset 100.000000
|
ps.scanpreset 1000000.000000
|
||||||
hm genbin 120.000000 35.000000 512
|
ps.scanpreset setAccess 2
|
||||||
hm init
|
ps.preset 1000.000000
|
||||||
datafile focus-1001848.hdf
|
ps.preset setAccess 2
|
||||||
datafile setAccess 3
|
ps.countmode monitor
|
||||||
|
ps.countmode setAccess 2
|
||||||
|
ps.cogcontour 0.200000
|
||||||
|
ps.cogcontour setAccess 2
|
||||||
|
ps.cogwindow 60
|
||||||
|
ps.cogwindow setAccess 2
|
||||||
|
ps.window 7
|
||||||
|
ps.window setAccess 2
|
||||||
|
ps.steepness 3
|
||||||
|
ps.steepness setAccess 2
|
||||||
|
ps.threshold 30
|
||||||
|
ps.threshold setAccess 2
|
||||||
|
ps.sttstep 3.000000
|
||||||
|
ps.sttstep setAccess 2
|
||||||
|
ps.sttend 70.000000
|
||||||
|
ps.sttend setAccess 2
|
||||||
|
ps.sttstart 5.000000
|
||||||
|
ps.sttstart setAccess 2
|
||||||
|
ps.omstep 3.000000
|
||||||
|
ps.omstep setAccess 2
|
||||||
|
ps.omend 30.000000
|
||||||
|
ps.omend setAccess 2
|
||||||
|
ps.omstart 0.000000
|
||||||
|
ps.omstart setAccess 2
|
||||||
|
ps.chistep 12.000000
|
||||||
|
ps.chistep setAccess 2
|
||||||
|
ps.chiend 180.000000
|
||||||
|
ps.chiend setAccess 2
|
||||||
|
ps.chistart 0.000000
|
||||||
|
ps.chistart setAccess 2
|
||||||
|
ps.phistep 3.000000
|
||||||
|
ps.phistep setAccess 2
|
||||||
|
ps.phiend 180.000000
|
||||||
|
ps.phiend setAccess 2
|
||||||
|
ps.phistart 0.000000
|
||||||
|
ps.phistart setAccess 2
|
||||||
|
hm3 CountMode timer
|
||||||
|
hm3 preset 10.000000
|
||||||
hm2 CountMode timer
|
hm2 CountMode timer
|
||||||
hm2 preset 10.000000
|
hm2 preset 10.000000
|
||||||
|
banana CountMode timer
|
||||||
|
banana preset 10.000000
|
||||||
hm1 CountMode timer
|
hm1 CountMode timer
|
||||||
hm1 preset 10.000000
|
hm1 preset 10.000000
|
||||||
dbfile UNKNOWN
|
|
||||||
dbfile setAccess 2
|
|
||||||
# Motor th
|
|
||||||
th sign 1.000000
|
|
||||||
th SoftZero 0.000000
|
|
||||||
th SoftLowerLim 4.000000
|
|
||||||
th SoftUpperLim 113.000000
|
|
||||||
th Fixed -1.000000
|
|
||||||
th InterruptMode 0.000000
|
|
||||||
th AccessCode 2.000000
|
|
||||||
#Crystallographic Settings
|
#Crystallographic Settings
|
||||||
hkl lambda 1.179000
|
hkl lambda 1.179000
|
||||||
hkl setub -0.017880 -0.074923 0.028280 -0.007008 -0.036800 -0.057747 0.160912 -0.009928 0.000627
|
hkl setub -0.017880 -0.074923 0.028280 -0.007008 -0.036800 -0.057747 0.160912 -0.009928 0.000627
|
||||||
hkl hm 0
|
hkl hm 0
|
||||||
det3dist 300.000000
|
detdist3 0.000000
|
||||||
det3dist setAccess 1
|
detdist3 setAccess 1
|
||||||
det3zeroy 128.000000
|
det3zeroy 128.000000
|
||||||
det3zeroy setAccess 1
|
det3zeroy setAccess 1
|
||||||
det3zerox 128.000000
|
det3zerox 128.000000
|
||||||
det3zerox setAccess 1
|
det3zerox setAccess 1
|
||||||
det2dist 300.000000
|
detdist2 0.000000
|
||||||
det2dist setAccess 1
|
detdist2 setAccess 1
|
||||||
det2zeroy 128.000000
|
det2zeroy 128.000000
|
||||||
det2zeroy setAccess 1
|
det2zeroy setAccess 1
|
||||||
det2zerox 128.000000
|
det2zerox 128.000000
|
||||||
det2zerox setAccess 1
|
det2zerox setAccess 1
|
||||||
det1dist 300.000000
|
detdist1 0.000000
|
||||||
det1dist setAccess 1
|
detdist1 setAccess 1
|
||||||
det1zeroy 128.000000
|
det1zeroy 128.000000
|
||||||
det1zeroy setAccess 1
|
det1zeroy setAccess 1
|
||||||
det1zerox 128.000000
|
det1zerox 128.000000
|
||||||
@ -149,8 +178,6 @@ twotheta InterruptMode 0.000000
|
|||||||
twotheta AccessCode 2.000000
|
twotheta AccessCode 2.000000
|
||||||
lastscancommand cscan a4 10. .1 10 5
|
lastscancommand cscan a4 10. .1 10 5
|
||||||
lastscancommand setAccess 2
|
lastscancommand setAccess 2
|
||||||
banana CountMode timer
|
|
||||||
banana preset 20.000000
|
|
||||||
sample_mur 0.000000
|
sample_mur 0.000000
|
||||||
sample_mur setAccess 2
|
sample_mur setAccess 2
|
||||||
email UNKNOWN
|
email UNKNOWN
|
||||||
@ -428,8 +455,6 @@ a1 SoftUpperLim 120.000000
|
|||||||
a1 Fixed -1.000000
|
a1 Fixed -1.000000
|
||||||
a1 InterruptMode 0.000000
|
a1 InterruptMode 0.000000
|
||||||
a1 AccessCode 2.000000
|
a1 AccessCode 2.000000
|
||||||
batchroot /data/koenneck/src/sics
|
|
||||||
batchroot setAccess 2
|
|
||||||
user Uwe Filges
|
user Uwe Filges
|
||||||
user setAccess 2
|
user setAccess 2
|
||||||
sample D20 30K SNP Okt 2001 GS
|
sample D20 30K SNP Okt 2001 GS
|
||||||
|
@ -21,10 +21,10 @@
|
|||||||
*/
|
*/
|
||||||
#define PORT_BASE 2400 /* The Internet Port for Server Requests */
|
#define PORT_BASE 2400 /* The Internet Port for Server Requests */
|
||||||
#define MAX_CLIENTS 8 /* The maximum number of active clients */
|
#define MAX_CLIENTS 8 /* The maximum number of active clients */
|
||||||
#define MAX_TOF_CNTR 1024 /* The maximum number of individual counters ..
|
#define MAX_TOF_CNTR 32768 /* The maximum number of individual counters ..
|
||||||
** which can be handled in TOF mode */
|
** which can be handled in TOF mode */
|
||||||
#define MAX_PSD_CNTR 1048576 /* maximum number of PSD elements */
|
#define MAX_PSD_CNTR 1048576 /* maximum number of PSD elements */
|
||||||
#define MAX_PSD_ED 2 /* maximum number of additional
|
#define MAX_PSD_ED 3 /* maximum number of additional
|
||||||
single detectors at AMOR
|
single detectors at AMOR
|
||||||
*/
|
*/
|
||||||
#define MAX_TOF_NBINS 32768 /* The maximum number of bins in a TOF histog */
|
#define MAX_TOF_NBINS 32768 /* The maximum number of bins in a TOF histog */
|
||||||
@ -220,6 +220,8 @@
|
|||||||
#define LWL_TOF_C8 (0x08000000) /* TOF-Mode 8 chan dgrm hdr */
|
#define LWL_TOF_C8 (0x08000000) /* TOF-Mode 8 chan dgrm hdr */
|
||||||
#define LWL_TOF_C9 (0x09000000) /* TOF-Mode 9 chan dgrm hdr */
|
#define LWL_TOF_C9 (0x09000000) /* TOF-Mode 9 chan dgrm hdr */
|
||||||
|
|
||||||
|
#define LWL_GUMMI_MON (0x14000000) /* GUMMI-Mode Monitor datagram */
|
||||||
|
|
||||||
#define LWL_PSD_TSI 0x0E000000 /* PSD-Mode TSI datagram */
|
#define LWL_PSD_TSI 0x0E000000 /* PSD-Mode TSI datagram */
|
||||||
#define LWL_PSD_DATA 0x12000000 /* PSD-mode data datagram */
|
#define LWL_PSD_DATA 0x12000000 /* PSD-mode data datagram */
|
||||||
#define LWL_PSD_ED 0x03000000 /* PSD-mode single detector datagram */
|
#define LWL_PSD_ED 0x03000000 /* PSD-mode single detector datagram */
|
||||||
|
@ -296,6 +296,9 @@
|
|||||||
uint hdr);
|
uint hdr);
|
||||||
void process_no_coinc_tsi (
|
void process_no_coinc_tsi (
|
||||||
uint hdr);
|
uint hdr);
|
||||||
|
void process_gummi_monitor(
|
||||||
|
uint hdr);
|
||||||
|
|
||||||
int rply_status_send (
|
int rply_status_send (
|
||||||
int skt,
|
int skt,
|
||||||
struct rply_buff_struct *rply_bf);
|
struct rply_buff_struct *rply_bf);
|
||||||
|
@ -681,6 +681,11 @@
|
|||||||
** type TSI header. The packet has 10 bytes
|
** type TSI header. The packet has 10 bytes
|
||||||
** altogether. Process it.
|
** altogether. Process it.
|
||||||
*/
|
*/
|
||||||
|
}else if ((lwl_hdr.ui4 & LWL_HDR_TYPE_MASK) == LWL_GUMMI_MON) {
|
||||||
|
/*
|
||||||
|
process a SANS gummi mode monitor datagram
|
||||||
|
*/
|
||||||
|
process_gummi_monitor(lwl_hdr.ui4);
|
||||||
}else { /* Anything else gets flushed */
|
}else { /* Anything else gets flushed */
|
||||||
lwl_Packet_Read (lwl_hdr.ui4, my_buff);
|
lwl_Packet_Read (lwl_hdr.ui4, my_buff);
|
||||||
}
|
}
|
||||||
@ -950,14 +955,16 @@
|
|||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
We have a valid single detector packet.
|
We have a valid single detector packet.
|
||||||
Subtract one form the number because Urs Greuter starts
|
Subtract one from the number because Urs Greuter starts
|
||||||
counting at 1, and ANSI-C at 0
|
counting at 1, and ANSI-C at 0
|
||||||
*/
|
*/
|
||||||
edNum = edData.ui2[1] - 1;
|
edNum = edData.ui2[1] - 1;
|
||||||
|
/*
|
||||||
if(edNum < 0 || edNum >= MAX_PSD_ED){
|
if(edNum < 0 || edNum >= MAX_PSD_ED){
|
||||||
printf("Got invalid detector number %d\n",edNum);
|
printf("Got invalid detector number %d\n",edNum);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Extract time stamp and match to the appropriate time bin.
|
Extract time stamp and match to the appropriate time bin.
|
||||||
|
@ -261,8 +261,12 @@
|
|||||||
Lwl_hdr_daq_mask = LWL_HDR_NRL_MASK;
|
Lwl_hdr_daq_mask = LWL_HDR_NRL_MASK;
|
||||||
Lwl_hdr_daq_soll = 0;
|
Lwl_hdr_daq_soll = 0;
|
||||||
}else if (strcmp (INST, "FOCUS") == 0) {
|
}else if (strcmp (INST, "FOCUS") == 0) {
|
||||||
|
/*
|
||||||
Lwl_hdr_daq_mask = LWL_HDR_NRL_MASK | LWL_HDR_SYNC2_MASK;
|
Lwl_hdr_daq_mask = LWL_HDR_NRL_MASK | LWL_HDR_SYNC2_MASK;
|
||||||
Lwl_hdr_daq_soll = 0;
|
Lwl_hdr_daq_soll = 0;
|
||||||
|
*/
|
||||||
|
Lwl_hdr_daq_mask = 0x00f00000;
|
||||||
|
Lwl_hdr_daq_soll = 0x00200000;
|
||||||
printf ("%s: Instrument = \"%s\"\n", Tsk_name[0], "FOCUS");
|
printf ("%s: Instrument = \"%s\"\n", Tsk_name[0], "FOCUS");
|
||||||
}else if (strcmp (INST, "HRPT") == 0) {
|
}else if (strcmp (INST, "HRPT") == 0) {
|
||||||
printf ("%s: Instrument = \"%s\"\n", Tsk_name[0], "HRPT");
|
printf ("%s: Instrument = \"%s\"\n", Tsk_name[0], "HRPT");
|
||||||
|
@ -3545,6 +3545,89 @@
|
|||||||
lwl_data.ui2[1] = words[2];
|
lwl_data.ui2[1] = words[2];
|
||||||
Num_bad_events = lwl_data.ui4;
|
Num_bad_events = lwl_data.ui4;
|
||||||
}
|
}
|
||||||
|
/*--------------------------------------------------------------------------
|
||||||
|
process_gummi_monitor processes special monitor datagrams as emitted by
|
||||||
|
SANS. In gummi mode a sample environment is cycled and data continously
|
||||||
|
collected during various steps of the cycle. Naturally, monitor values are
|
||||||
|
needed at each step in order to be able to scale the data measured
|
||||||
|
appropriatetly. The monitors are sent in a special datagram consisting of.
|
||||||
|
7 packets. The first is the header and handed down as a function
|
||||||
|
call parameter. This header also holds the gummi cycle number to which this
|
||||||
|
monitor belongs. The following six packets are the monitor values, separate
|
||||||
|
as low byte, high byte.
|
||||||
|
|
||||||
|
The monitors are then stored into the last three counters of the first
|
||||||
|
detector (and only) detector bank. The looser is supposed to give three
|
||||||
|
additional detectors additional to the normal ones.
|
||||||
|
|
||||||
|
Look at this again when one of the following conditions is violated:
|
||||||
|
- More then one detector bank.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------*/
|
||||||
|
void process_gummi_monitor(uint hdr){
|
||||||
|
uint gummiBin, readbuf[6], mon[3];
|
||||||
|
int i, imon;
|
||||||
|
struct tof_histog *my_tof_descr;
|
||||||
|
|
||||||
|
union {
|
||||||
|
uint ui4;
|
||||||
|
usint ui2[2];
|
||||||
|
uchar ui1[4];
|
||||||
|
} lwl_data, monitor;
|
||||||
|
|
||||||
|
/*
|
||||||
|
collect those monitor values
|
||||||
|
*/
|
||||||
|
for(imon = 0; imon < 6; imon++){
|
||||||
|
readbuf[imon] = LWL_FIFO_EMPTY;
|
||||||
|
for (i=0; i<1000; i++) {
|
||||||
|
readbuf[imon] = *Lwl_fifo;
|
||||||
|
if (readbuf[imon] != LWL_FIFO_EMPTY) break;
|
||||||
|
taskDelay (0); /* But wait if FIFO is slow! */
|
||||||
|
}
|
||||||
|
if(readbuf[imon] == LWL_FIFO_EMPTY){
|
||||||
|
printf("Timeout reading monitor %d in SANS GUMMI mode\n", imon);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// put them together again
|
||||||
|
for(imon = 0; imon < 3; imon++){
|
||||||
|
lwl_data.ui4 = readbuf[imon*2];
|
||||||
|
monitor.ui2[0] = lwl_data.ui2[1];
|
||||||
|
lwl_data.ui4 = readbuf[imon*2+1];
|
||||||
|
monitor.ui2[1] = lwl_data.ui2[1];
|
||||||
|
mon[imon] = monitor.ui4;
|
||||||
|
}
|
||||||
|
|
||||||
|
gummiBin = hdr & LWL_HDR_TS_MASK;
|
||||||
|
if(gummiBin < 0 || gummiBin >= N_bins){
|
||||||
|
printf("Invalid gummiBin %d detected \n", gummiBin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Dbg_lev1){
|
||||||
|
printf(" Gummi monitors: %d, %d, %d registered for gummi bin %d\n",
|
||||||
|
mon[0],mon[1],mon[2],gummiBin);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(imon = 0; imon < 3; imon++){
|
||||||
|
my_tof_descr=Tof_descr[N_hists-3+imon];
|
||||||
|
/*
|
||||||
|
printf(" detector %d receives %d\n", N_hists-3+imon, mon[imon]);
|
||||||
|
*/
|
||||||
|
switch (my_tof_descr->bytes_per_bin) {
|
||||||
|
case 1:
|
||||||
|
my_tof_descr->u.b_bin_data[gummiBin] += mon[imon];
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
my_tof_descr->u.w_bin_data[gummiBin] += mon[imon];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
my_tof_descr->u.l_bin_data[gummiBin] += mon[imon];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
**--------------------------------------------------------------------------*/
|
**--------------------------------------------------------------------------*/
|
||||||
void process_psd_tsi (
|
void process_psd_tsi (
|
||||||
|
@ -170,7 +170,8 @@
|
|||||||
/* in any case let us propagate the state of affairs to
|
/* in any case let us propagate the state of affairs to
|
||||||
SINQHM
|
SINQHM
|
||||||
*/
|
*/
|
||||||
SINQHMSetPar(pInternal->pMaster,self->iRank, self->iLength, self->iBinWidth);
|
SINQHMSetPar(pInternal->pMaster,self->iRank, self->iLength,
|
||||||
|
self->iBinWidth);
|
||||||
|
|
||||||
|
|
||||||
/* actual configuration. On first call, check for flag INIt in
|
/* actual configuration. On first call, check for flag INIt in
|
||||||
@ -207,7 +208,8 @@
|
|||||||
if( (self->iBinWidth != 1) && (self->iBinWidth != 2)
|
if( (self->iBinWidth != 1) && (self->iBinWidth != 2)
|
||||||
&& (self->iBinWidth != 4))
|
&& (self->iBinWidth != 4))
|
||||||
{
|
{
|
||||||
PrintHMError("Unsuported BinWidth specified, 1,2,4 are permissable",pCon);
|
PrintHMError("Unsuported BinWidth specified, 1,2,4 are permissable",
|
||||||
|
pCon);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user