- 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:
74
nxsans.c
74
nxsans.c
@@ -8,7 +8,10 @@
|
||||
|
||||
Updated to support the larger detector resolution and possible
|
||||
TOF and stroboscopic modes, Mark Koennecke, February 2001
|
||||
|
||||
|
||||
Added additional monitors for stroboscopic gummi mode,
|
||||
Mark Koennecke, September 2002
|
||||
|
||||
Copyright:
|
||||
|
||||
Labor fuer Neutronenstreuung
|
||||
@@ -66,6 +69,7 @@
|
||||
#define HISTNAME "banana"
|
||||
#define SAMPLETABLE "sampletable"
|
||||
|
||||
static int gummiFlag = 0; /* a flag indicating stroboscopic, or gummi mode */
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static void SNError(void *pData, char *text)
|
||||
@@ -106,7 +110,7 @@
|
||||
|
||||
/* store global attributes */
|
||||
iStat = NXputattr(pFile,"file_name",filename,
|
||||
strlen(filename)+1,DFNT_INT8);
|
||||
strlen(filename)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing file_name attribute to Nexus file",eError);
|
||||
@@ -118,7 +122,7 @@
|
||||
/* write creation time */
|
||||
SNXFormatTime(pBueffel,512);
|
||||
iStat = NXputattr(pFile,"file_time",pBueffel,
|
||||
strlen(pBueffel)+1,DFNT_INT8);
|
||||
strlen(pBueffel)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing date attribute to Nexus file",eError);
|
||||
@@ -127,7 +131,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"instrument",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing instrument attribute to Nexus file",eError);
|
||||
@@ -138,7 +142,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"owner",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing owner attribute to Nexus file",eError);
|
||||
@@ -150,7 +154,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"owner_adress",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing owner_adress attribute to Nexus file",eError);
|
||||
@@ -161,7 +165,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"owner_telephone_number",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing owner_telephone_number attribute to Nexus file",eError);
|
||||
@@ -172,7 +176,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"owner_fax_number",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing owner_fax_number attribute to Nexus file",eError);
|
||||
@@ -183,7 +187,7 @@
|
||||
if(pVar)
|
||||
{
|
||||
iStat = NXputattr(pFile,"owner_email",pVar->text,
|
||||
strlen(pVar->text)+1,DFNT_INT8);
|
||||
strlen(pVar->text)+1,NX_CHAR);
|
||||
if(iStat == NX_ERROR)
|
||||
{
|
||||
SCWrite(pCon,"ERROR: writing owner_email attribute to Nexus file",eError);
|
||||
@@ -598,6 +602,7 @@
|
||||
}
|
||||
NXDputalias(Nfil,pDict,"ddcounts",lData);
|
||||
free(lData);
|
||||
|
||||
/* write x and y axis */
|
||||
for(i = 0; i < iDim[0]; i++)
|
||||
{
|
||||
@@ -609,6 +614,7 @@
|
||||
iAxis[i] = i;
|
||||
}
|
||||
NXDputalias(Nfil,pDict,"ddcy",iAxis);
|
||||
|
||||
/* write time binning if appropriate */
|
||||
if(nDim == 3)
|
||||
{
|
||||
@@ -616,6 +622,31 @@
|
||||
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)
|
||||
{
|
||||
iRet = SPSGetADC(pSiem,1,&iVal);
|
||||
@@ -637,7 +668,7 @@
|
||||
NXDaliaslink(Nfil,pDict,"dan","ddtb");
|
||||
}
|
||||
|
||||
/* send quieck message for autoamtic copying*/
|
||||
/* send quieck message for automatic copying*/
|
||||
i = 131;
|
||||
iVal = NX_CHAR;
|
||||
NXgetattr(Nfil,"file_name",pBueffel,&i,&iVal);
|
||||
@@ -704,12 +735,33 @@
|
||||
char *argv[])
|
||||
|
||||
{
|
||||
char pBueffel[80];
|
||||
pDictStruct self = NULL;
|
||||
self = (pDictStruct)pData;
|
||||
|
||||
assert(self);
|
||||
assert(pCon);
|
||||
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);
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Reference in New Issue
Block a user