- 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:
cvs
2002-10-02 15:01:45 +00:00
parent dfc8c8e28c
commit f514cf51e9
13 changed files with 253 additions and 56 deletions

View File

@@ -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);
}
/*--------------------------------------------------------------------------*/