- Switched motor to hdb
- Changes to Hipadaba - Added project to histogram memory code - Started regression testing code - Added hill climbing as optimization method to optimise
This commit is contained in:
53
hmdata.c
53
hmdata.c
@@ -46,7 +46,7 @@ void clearHMData(pHMdata self){
|
||||
size *= self->iDim[i];
|
||||
}
|
||||
if(self->tofMode){
|
||||
size *= self->nTimeChan;
|
||||
size *= getNoOfTimebins(self);
|
||||
}
|
||||
memset(self->localBuffer,0,size*sizeof(HistInt));
|
||||
}
|
||||
@@ -60,7 +60,7 @@ static int resizeBuffer(pHMdata self){
|
||||
size *= self->iDim[i];
|
||||
}
|
||||
if(self->tofMode){
|
||||
size *= self->nTimeChan;
|
||||
size *= getNoOfTimebins(self);
|
||||
}
|
||||
if(self->localBuffer != NULL){
|
||||
free(self->localBuffer);
|
||||
@@ -80,6 +80,7 @@ int configureHMdata(pHMdata self, pStringDict pOpt,
|
||||
int status, i;
|
||||
float fVal;
|
||||
char pValue[80];
|
||||
pHistMem master = NULL;
|
||||
|
||||
if(self->nTimeChan > 2) {
|
||||
self->tofMode = 1;
|
||||
@@ -111,6 +112,18 @@ int configureHMdata(pHMdata self, pStringDict pOpt,
|
||||
self->updateIntervall = (int)rint(fVal);
|
||||
}
|
||||
|
||||
status = StringDictGet(pOpt,"timeslave",pValue, 79);
|
||||
if(status == 1) {
|
||||
master = (pHistMem)FindCommandData(pServ->pSics,pValue,"HistMem");
|
||||
if(master == NULL){
|
||||
SCWrite(pCon,"ERROR: timeslave requested, but master HM not found",
|
||||
eError);
|
||||
} else {
|
||||
self->timeslave = master->pDriv->data;
|
||||
self->tofMode = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
invalidate buffer
|
||||
*/
|
||||
@@ -138,7 +151,7 @@ int configureHMdata(pHMdata self, pStringDict pOpt,
|
||||
int genTimeBinning(pHMdata self, float start, float step, int noSteps){
|
||||
int i;
|
||||
|
||||
if(noSteps >= MAXCHAN){
|
||||
if(noSteps >= MAXCHAN || self->timeslave != NULL){
|
||||
return 0;
|
||||
}
|
||||
for(i = 0; i < noSteps; i++){
|
||||
@@ -150,6 +163,10 @@ int genTimeBinning(pHMdata self, float start, float step, int noSteps){
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
int setTimeBin(pHMdata self, int index, float value){
|
||||
if(self->timeslave != NULL){
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(index >= 0 && index < MAXCHAN){
|
||||
self->timeBinning[index] = value;
|
||||
} else {
|
||||
@@ -157,7 +174,7 @@ int setTimeBin(pHMdata self, int index, float value){
|
||||
}
|
||||
self->tofMode = 1;
|
||||
if(index > self->nTimeChan){
|
||||
self->nTimeChan = index;
|
||||
self->nTimeChan = index+1;
|
||||
return resizeBuffer(self);
|
||||
}
|
||||
return 1;
|
||||
@@ -168,17 +185,27 @@ int isInTOFMode(pHMdata self){
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
int getNoOfTimebins(pHMdata self){
|
||||
return self->nTimeChan;
|
||||
if(self->timeslave != NULL){
|
||||
return getNoOfTimebins(self->timeslave);
|
||||
} else {
|
||||
return self->nTimeChan;
|
||||
}
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
float *getTimeBinning(pHMdata self){
|
||||
return self->timeBinning;
|
||||
if(self->timeslave != NULL){
|
||||
return getTimeBinning(self->timeslave);
|
||||
} else {
|
||||
return self->timeBinning;
|
||||
}
|
||||
}
|
||||
/*-------------------------------------------------------------------*/
|
||||
void clearTimeBinning(pHMdata self){
|
||||
self->nTimeChan = 1;
|
||||
self->tofMode = 0;
|
||||
resizeBuffer(self);
|
||||
if(self->timeslave == NULL){
|
||||
self->nTimeChan = 1;
|
||||
self->tofMode = 0;
|
||||
resizeBuffer(self);
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
void getHMDataDim(pHMdata self, int iDim[MAXDIM], int *rank){
|
||||
@@ -193,7 +220,7 @@ long getHMDataLength(pHMdata self){
|
||||
length *= self->iDim[i];
|
||||
}
|
||||
if(self->tofMode){
|
||||
length *= self->nTimeChan;
|
||||
length *= getNoOfTimebins(self);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
@@ -227,6 +254,10 @@ static int updateHMbuffer(pHistMem hist, int bank, SConnection *pCon){
|
||||
|
||||
assert(self);
|
||||
|
||||
if(self->timeslave != NULL){
|
||||
resizeBuffer(self);
|
||||
}
|
||||
|
||||
for(i = 0; i < 3; i++){
|
||||
status = hist->pDriv->GetHistogram(hist->pDriv,pCon,
|
||||
bank,0,getHMDataLength(self),
|
||||
@@ -292,7 +323,7 @@ HistInt *getHMDataBufferPointer(pHistMem hist,SConnection *pCon){
|
||||
|
||||
assert(self);
|
||||
|
||||
if(self->localBuffer == NULL){
|
||||
if(self->localBuffer == NULL || self->timeslave != NULL){
|
||||
resizeBuffer(self);
|
||||
}
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user