implemented a trial error class

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorSoftware@434 951219d9-93cf-4727-9268-0efd64621fa3
This commit is contained in:
l_maliakal_d 2013-01-22 11:16:37 +00:00
parent 3be74327f3
commit a4206208c9
10 changed files with 116 additions and 24 deletions

View File

@ -11,7 +11,7 @@ DFLAGS= -DDACS_INT -DTHIS_PATH='"$(shell pwd)"'
CC=g++ CC=g++
SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp SRC_CLNT= slsDetectorAnalysis/fileIO.cpp MySocketTCP/MySocketTCP.cpp usersFunctions/usersFunctions.cpp slsDetector/slsDetectorUtils.cpp slsDetector/slsDetectorCommand.cpp slsDetectorAnalysis/angularConversion.cpp slsDetectorAnalysis/angularConversionStatic.cpp slsDetectorAnalysis/energyConversion.cpp slsDetector/slsDetectorActions.cpp slsDetectorAnalysis/postProcessing.cpp slsDetector/slsDetector.cpp multiSlsDetector/multiSlsDetector.cpp slsDetector/slsDetectorUsers.cpp slsDetectorAnalysis/postProcessingFuncs.cpp slsReceiverInterface/receiverInterface.cpp
OBJS = $(SRC_CLNT:.cpp=.o) OBJS = $(SRC_CLNT:.cpp=.o)

View File

@ -517,6 +517,13 @@ enum angleConversionParameter {
/** Error flags */
#define NUM_ERROR_FLAGS=32
#define CANNOT_CONNECT_TO_DETECTOR 0x80000000
#define CANNOT_CONNECT_TO_RECEIVER 0x40000000
#define COULD_NOT_CONFIGURE_MAC 0x00008000 //cant seem to get this error
//typedef struct { //typedef struct {
//float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */ //float center; /**< center of the module (channel at which the radius is perpendicular to the module surface) */
//float ecenter; /**< error in the center determination */ //float ecenter; /**< error in the center determination */

View File

@ -93,7 +93,7 @@ int multiSlsDetector::initSharedMemory(int id=0) {
multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1) multiSlsDetector::multiSlsDetector(int id) : slsDetectorUtils(), shmId(-1),errorMask(0)
{ {
while (shmId<0) { while (shmId<0) {
shmId=initSharedMemory(id); shmId=initSharedMemory(id);
@ -868,8 +868,11 @@ int multiSlsDetector::setOnline(int off) {
if (off!=GET_ONLINE_FLAG) { if (off!=GET_ONLINE_FLAG) {
thisMultiDetector->onlineFlag=off; thisMultiDetector->onlineFlag=off;
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) { for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) {
if (detectors[i]) if (detectors[i]){
detectors[i]->setOnline(off); detectors[i]->setOnline(off);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
}
} }
} }
return thisMultiDetector->onlineFlag; return thisMultiDetector->onlineFlag;
@ -2527,7 +2530,9 @@ char* multiSlsDetector::setNetworkParameter(networkParameter p, string s){
if (s.find('+')==string::npos) { if (s.find('+')==string::npos) {
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) { for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) { if (detectors[idet]) {
detectors[idet]->setNetworkParameter(p,s); detectors[idet]->setNetworkParameter(p,s);
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
} }
} }
} else { } else {
@ -2724,6 +2729,8 @@ int multiSlsDetector::configureMAC(int adc) {
for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) { for (int idet=0; idet<thisMultiDetector->numberOfDetectors; idet++) {
if (detectors[idet]) { if (detectors[idet]) {
ret1=detectors[idet]->configureMAC(adc); ret1=detectors[idet]->configureMAC(adc);
if(detectors[idet]->getErrorMask())
setErrorMask(getErrorMask()|(1<<idet));
if (ret==-100) if (ret==-100)
ret=ret1; ret=ret1;
else if (ret!=ret1) else if (ret!=ret1)
@ -3527,6 +3534,8 @@ int multiSlsDetector::setReceiverOnline(int off) {
for (int i=0; i<thisMultiDetector->numberOfDetectors; i++) for (int i=0; i<thisMultiDetector->numberOfDetectors; i++)
if (detectors[i]){ if (detectors[i]){
ret1=detectors[i]->setReceiverOnline(off); ret1=detectors[i]->setReceiverOnline(off);
if(detectors[i]->getErrorMask())
setErrorMask(getErrorMask()|(1<<i));
if(ret==-100) if(ret==-100)
ret=ret1; ret=ret1;
else if (ret!=ret1) else if (ret!=ret1)

View File

@ -1128,6 +1128,24 @@ class multiSlsDetector : public slsDetectorUtils {
int fillModuleMask(int *mM); int fillModuleMask(int *mM);
/**
Sets multi error mask
@param multi error mask to be set to
/returns multi error mask
*/
int setErrorMask(int i=-1){errorMask=i;return getErrorMask();}
/**returns multi error mask */
int getErrorMask(){return errorMask;}
/**
clears error mask
/returns error mask
*/
int clearErrorMask(){errorMask=0;return errorMask;}
protected: protected:
@ -1140,7 +1158,8 @@ class multiSlsDetector : public slsDetectorUtils {
/** Shared memory structure */ /** Shared memory structure */
sharedMultiSlsDetector *thisMultiDetector; sharedMultiSlsDetector *thisMultiDetector;
/** Error Mask for each detector*/
int errorMask;

View File

@ -35,6 +35,8 @@ class multiSlsDetectorCommand : public slsDetectorCommand {
if (d) { \ if (d) { \
slsDetectorCommand *cmd=new slsDetectorCommand(d); \ slsDetectorCommand *cmd=new slsDetectorCommand(d); \
s=cmd->executeLine(narg, args, action); \ s=cmd->executeLine(narg, args, action); \
if(d->getErrorMask()) \
myDet->setErrorMask((myDet->getErrorMask())|(1<<id)); \
delete cmd; delete cmd;
} else } else
s=string("detector does no exist"); \ s=string("detector does no exist"); \

View File

@ -126,7 +126,8 @@ slsDetector::slsDetector(int id,multiSlsDetector *p) :slsDetectorUtils(),
adcs(NULL), adcs(NULL),
chipregs(NULL), chipregs(NULL),
chanregs(NULL), chanregs(NULL),
thisReceiver(NULL) thisReceiver(NULL),
errorMask(0)
{ {
@ -176,7 +177,9 @@ slsDetector::slsDetector(detectorType type, int id,multiSlsDetector *p): slsDete
adcs(NULL), adcs(NULL),
chipregs(NULL), chipregs(NULL),
chanregs(NULL), chanregs(NULL),
thisReceiver(NULL) thisReceiver(NULL),
errorMask(0)
{ {
while (shmId<0) { while (shmId<0) {
/**Initlializes shared memory \sa initSharedMemory /**Initlializes shared memory \sa initSharedMemory
@ -229,7 +232,9 @@ slsDetector::slsDetector(char *name, int id, int cport,multiSlsDetector *p) : sl
adcs(NULL), adcs(NULL),
chipregs(NULL), chipregs(NULL),
chanregs(NULL), chanregs(NULL),
thisReceiver(NULL) thisReceiver(NULL),
errorMask(0)
{ {
detectorType type=(detectorType)getDetectorType(name, cport); detectorType type=(detectorType)getDetectorType(name, cport);
@ -934,6 +939,10 @@ int slsDetector::setOnline(int off) {
cout << "Detector connecting for the first time - updating!" << endl; cout << "Detector connecting for the first time - updating!" << endl;
updateDetector(); updateDetector();
} }
else if(thisDetector->onlineFlag==OFFLINE_FLAG){
std::cout << "cannot connect to detector" << endl;
setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_DETECTOR));
}
} }
} }
return thisDetector->onlineFlag; return thisDetector->onlineFlag;
@ -4547,9 +4556,7 @@ char* slsDetector::setReceiver(string receiverIP){
setFileIndex(fileIO::getFileIndex()); setFileIndex(fileIO::getFileIndex());
enableWriteToFile(parentDet->enableWriteToFileMask()); enableWriteToFile(parentDet->enableWriteToFileMask());
setUDPConnection(); setUDPConnection();
}else }
std::cout << "cannot connect to receiver" << endl;
return thisDetector->receiver_hostname; return thisDetector->receiver_hostname;
} }
@ -4649,15 +4656,14 @@ int slsDetector::setUDPConnection(){
updateReceiver(); updateReceiver();
//configure detector with udp details //configure detector with udp details
if(configureMAC()!=OK){ if(configureMAC()==FAIL){
setReceiverOnline(OFFLINE_FLAG); setReceiverOnline(OFFLINE_FLAG);
std::cout << "could not configure mac" << endl; std::cout << "could not configure mac" << endl;
} }
} }
}else{ }else
ret=FAIL; ret=FAIL;
std::cout << "cannot connect to receiver" << endl;
}
return ret; return ret;
} }
@ -4685,6 +4691,7 @@ int slsDetector::configureMAC(int adc){
strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr)); strcpy(thisDetector->receiverUDPIP,inet_ntoa(*(struct in_addr*)he->h_addr));
else{ else{
std::cout << "no rx_udpip given and invalid receiver hostname" << endl; std::cout << "no rx_udpip given and invalid receiver hostname" << endl;
setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC));
return FAIL; return FAIL;
} }
} }
@ -4703,6 +4710,7 @@ int slsDetector::configureMAC(int adc){
for(i=0;i<2;i++){ for(i=0;i<2;i++){
if(!strcmp(arg[i],"none")){ if(!strcmp(arg[i],"none")){
std::cout<< "Configure MAC Error. IP/MAC Addresses not set"<< std::endl; std::cout<< "Configure MAC Error. IP/MAC Addresses not set"<< std::endl;
setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC));
return FAIL; return FAIL;
} }
} }
@ -4767,17 +4775,18 @@ int slsDetector::configureMAC(int adc){
if (ret==FAIL){ if (ret==FAIL){
controlSocket->ReceiveDataOnly(mess,sizeof(mess)); controlSocket->ReceiveDataOnly(mess,sizeof(mess));
std::cout<< "Detector returned error: " << mess << std::endl; std::cout<< "Detector returned error: " << mess << std::endl;
setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC));
} }
controlSocket->Disconnect(); controlSocket->Disconnect();
if (ret==FORCE_UPDATE) if (ret==FORCE_UPDATE)
updateDetector(); updateDetector();
} }
} }
}else }
std::cout << "cannot connect to detector" << endl;
if (ret==FAIL) { if (ret==FAIL) {
std::cout<< "Configuring MAC failed " << std::endl; std::cout<< "Configuring MAC failed " << std::endl;
setErrorMask((getErrorMask())|(COULD_NOT_CONFIGURE_MAC));
} }
return ret; return ret;
} }
@ -5440,8 +5449,10 @@ int slsDetector::setReceiverOnline(int off) {
thisDetector->receiverOnlineFlag=off; thisDetector->receiverOnlineFlag=off;
if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){ if (thisDetector->receiverOnlineFlag==ONLINE_FLAG){
setReceiverTCPSocket(); setReceiverTCPSocket();
if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG) if(thisDetector->receiverOnlineFlag==OFFLINE_FLAG){
std::cout << "cannot connect to receiver" << endl; std::cout << "cannot connect to receiver" << endl;
setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_RECEIVER));
}
} }
} }
} }

View File

@ -247,7 +247,6 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
/** online flag - is set if the receiver is connected, unset if socket connection is not possible */ /** online flag - is set if the receiver is connected, unset if socket connection is not possible */
int receiverOnlineFlag; int receiverOnlineFlag;
} sharedSlsDetector; } sharedSlsDetector;
@ -1515,6 +1514,25 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
int fillModuleMask(int *mM); int fillModuleMask(int *mM);
/**
Sets error mask
@param error mask to be set to
/returns error mask
*/
int setErrorMask(int i=-1){errorMask=i;return errorMask;}
/**returns error mask */
int getErrorMask(){return errorMask;}
/**
clears error mask
/returns error mask
*/
int clearErrorMask(){errorMask=0;return errorMask;}
protected: protected:
@ -1555,11 +1573,8 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
socket for data acquisition socket for data acquisition
*/ */
MySocketTCP *dataSocket; MySocketTCP *dataSocket;
/** pointer to flat field coefficients */ /** pointer to flat field coefficients */
double *ffcoefficients; double *ffcoefficients;
/** pointer to flat field coefficient errors */ /** pointer to flat field coefficient errors */
@ -1579,6 +1594,10 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
receiverInterface *thisReceiver; receiverInterface *thisReceiver;
/** Error Mask*/
int errorMask;
/** Initializes the shared memory /** Initializes the shared memory
\param type is needed to define the size of the shared memory \param type is needed to define the size of the shared memory
\param id is the detector id needed to define the shared memory id \param id is the detector id needed to define the shared memory id

View File

@ -472,6 +472,25 @@ class slsDetectorBase : public virtual slsDetectorDefs {
*/ */
virtual int* readFrameFromReceiver(char* fName, int &fIndex)=0; virtual int* readFrameFromReceiver(char* fName, int &fIndex)=0;
/** Gets error mask
/returns error mask
*/
virtual int getErrorMask()=0;
/**
Sets error mask
@param error mask to be set to
/returns error mask
*/
virtual int setErrorMask(int i=-1)=0;
/**
clears error mask
/returns error mask
*/
virtual int clearErrorMask()=0;
/** returns detector type string from detector type index /** returns detector type string from detector type index
\param t string can be Mythen, Pilatus, Eiger, Gotthard, Agipd, Unknown \param t string can be Mythen, Pilatus, Eiger, Gotthard, Agipd, Unknown
\returns MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, GENERIC \returns MYTHEN, PILATUS, EIGER, GOTTHARD, AGIPD, GENERIC
@ -663,5 +682,9 @@ class slsDetectorBase : public virtual slsDetectorDefs {
default: return string("idle"); \ default: return string("idle"); \
}}; }};
}; };
#endif #endif

View File

@ -651,6 +651,7 @@ virtual int exitReceiver()=0;
virtual int enableWriteToFile(int enable=-1)=0; virtual int enableWriteToFile(int enable=-1)=0;
protected: protected:

View File

@ -7,6 +7,7 @@
#define GOODBYE -200 #define GOODBYE -200
#define BUFFER_SIZE 1286*2 #define BUFFER_SIZE 1286*2
#define SHORT_BUFFER_SIZE 518
#define DATABYTES 2560 #define DATABYTES 2560
#define FIFO_SIZE 25000 #define FIFO_SIZE 25000