trimbits not working yet, nth frame works for eiger, scans work for eiger

This commit is contained in:
Maliakal Dhanya
2014-07-31 12:11:33 +02:00
parent 7e46a407c6
commit 56da3f42cc
14 changed files with 224 additions and 72 deletions

View File

@ -4,7 +4,6 @@
* @version 1.0 * @version 1.0
*/ */
#include <netdb.h> #include <netdb.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -94,6 +93,7 @@ int EigerSendCMD(){
} }
int n = write(sockfd,eiger_message,eiger_message_length); int n = write(sockfd,eiger_message,eiger_message_length);
int ret_length = read(sockfd,eiger_message,eiger_max_message_length); int ret_length = read(sockfd,eiger_message,eiger_max_message_length);
close(sockfd); close(sockfd);
@ -140,7 +140,7 @@ int EigerSetDAC(const char* iname,int v, int mV){
int EigerSetTrimbits(const int *data){ int EigerSetTrimbits(const int *data){
eiger_ret_val=0; eiger_ret_val=0;
char tt[263681]; /*char tt[263681];
tt[263680]='\0'; tt[263680]='\0';
int ip=0, ich=0; int ip=0, ich=0;
int iy, ix; int iy, ix;
@ -150,16 +150,19 @@ int EigerSetTrimbits(const int *data){
for(iy=0;iy<256;iy++) { for(iy=0;iy<256;iy++) {
for (ichip=0; ichip<4; ichip++) { for (ichip=0; ichip<4; ichip++) {
for(ix=0;ix<256;ix++) { for(ix=0;ix<256;ix++) {
tt[ip++]=(char)(data[ich++]&(0x3f)); tt[ip++]=(char)((data[ich++]&(0x3f))+'0');
} }
if (ichip<3) { if (ichip<3) {
tt[ip++]=0; tt[ip++]=(char)(0+'0');
tt[ip++]=0; tt[ip++]=(char)(0+'0');
} }
} }
} }
eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt); eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt);
memcpy(saved_trimbits,data,256*256*4*sizeof(int)); memcpy(saved_trimbits,data,256*256*4*sizeof(int));*/
eiger_message_length = sprintf(eiger_message,"settrimbits %d", 0);
return EigerSendCMD(); return EigerSendCMD();
} }
@ -167,41 +170,31 @@ int EigerSetTrimbits(const int *data){
int EigerSetAllTrimbits(unsigned int value){ int EigerSetAllTrimbits(unsigned int value){
eiger_ret_val=0; eiger_ret_val=0;
char tt[263681]; /*char tt[263681];
tt[263680]='\0'; tt[263680]='\0';
int ip=0, ich=0; int ip=0, ich=0;
int iy, ix; int iy, ix;
int ichip; int ichip;
int sl=0; int sl=0;
// convert the trimbits from int32 to chars and add border pixels. // convert the trimbits from int32 to chars and add border pixels.
for(iy=0;iy<256;iy++) { for(iy=0;iy<256;iy++) {
for (ichip=0; ichip<4; ichip++) { for (ichip=0; ichip<4; ichip++) {
for(ix=0;ix<256;ix++) { for(ix=0;ix<256;ix++) {
tt[ip++]=(char)(value&0x3f); tt[ip++]=(char)((value&0x3f)+'0');
} }
if (ichip<3) { if (ichip<3) {
tt[ip++]=0; tt[ip++]=(char)(0+'0');
tt[ip++]=0; tt[ip++]=(char)(0+'0');
} }
} }
} }
char s2[270000]; eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt);
strcpy(s2,"settrimbits ");
//for()
sl=strlen(s2);
strncpy(s2+sl,tt, 263680);
s2[263680+sl]='\0';
eiger_message_length = strlen(s2);
//eiger_message_length = sprintf(eiger_message,"settrimbits %s", tt);
for (iy=0;iy<263680;++iy)
printf("%d:%c\t\t",iy,tt[iy]);
printf("tfggt:%s , length :%d\n",tt, strlen(tt));
printf("Command sent:%s , length :%d\n",s2, eiger_message_length);
for(iy=0;iy<256*256*4;++iy) for(iy=0;iy<256*256*4;++iy)
saved_trimbits[iy] = value; saved_trimbits[iy] = value;*/
eiger_message_length = sprintf(eiger_message,"setalltrimbits %d", value);
return EigerSendCMD(); return EigerSendCMD();
} }
@ -209,14 +202,16 @@ int EigerSetAllTrimbits(unsigned int value){
int EigerGetTrimbits(const int *data){ int EigerGetTrimbits(const int *data){
eiger_ret_val=0; eiger_ret_val=0;
char tt[263681]; /*char tt[263681];
tt[263680]='\0'; tt[263680]='\0';
int ip=0, ich=0; int ip=0, ich=0;
int iy, ix; int iy, ix;
int ichip; int ichip;
eiger_message_length = sprintf(eiger_message,"gettrimbits "); eiger_message_length = sprintf(eiger_message,"gettrimbits ");
memcpy(data,saved_trimbits,256*256*4*sizeof(int)); memcpy(data,saved_trimbits,256*256*4*sizeof(int));*/
eiger_message_length = sprintf(eiger_message,"gettrimbits ");
return EigerSendCMD(); return EigerSendCMD();
} }

View File

@ -78,7 +78,7 @@ FebControl::FebControl(){
staticBits=acquireNReadoutMode=triggerMode=externalEnableMode=subFrameMode=0; staticBits=acquireNReadoutMode=triggerMode=externalEnableMode=subFrameMode=0;
trimbit_size=263680; trimbit_size=263680;
last_downloaded_trimbits = new unsigned char [trimbit_size]; last_downloaded_trimbits = new unsigned int [trimbit_size];
cout<<endl<<"Default Settings:"<<endl; cout<<endl<<"Default Settings:"<<endl;
nimages = 1; nimages = 1;
@ -697,19 +697,25 @@ float FebControl::GetDAC(string s){
} }
*/ */
bool FebControl::SetTrimbits(unsigned int module_num, unsigned char *trimbits){ bool FebControl::SetTrimbits(unsigned int module_num, unsigned int *trimbits){
printf("aaa\n"); printf("Setting Trimbits\n");
//for (int iy=10000;iy<20020;++iy)//263681
//for (int iy=263670;iy<263680;++iy)//263681
// printf("%d:%c\t\t",iy,trimbits[iy]);
unsigned int module_index=0; unsigned int module_index=0;
if(!GetModuleIndex(module_num,module_index)){ if(!GetModuleIndex(module_num,module_index)){
cout<<"Warning could not set trimbits, bad module number."<<endl; cout<<"Warning could not set trimbits, bad module number."<<endl;
return 0; return 0;
} }
printf("bbb\n");
if(!Reset()) cout<<"Warning could not reset DAQ."<<endl; if(!Reset()) cout<<"Warning could not reset DAQ."<<endl;
printf("ccc\n");
for(int l_r=0;l_r<2;l_r++){ // l_r loop for(int l_r=0;l_r<2;l_r++){ // l_r loop
unsigned int disable_chip_mask = l_r ? DAQ_CS_BAR_LEFT : DAQ_CS_BAR_RIGHT; unsigned int disable_chip_mask = l_r ? DAQ_CS_BAR_LEFT : DAQ_CS_BAR_RIGHT;
if(!(WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8)&&SetCommandRegister(DAQ_SET_STATIC_BIT)&&StartDAQOnlyNWaitForFinish())){ if(!(WriteRegister(0xfff,DAQ_REG_STATIC_BITS,disable_chip_mask|DAQ_STATIC_BIT_PROGRAM|DAQ_STATIC_BIT_M8)&&SetCommandRegister(DAQ_SET_STATIC_BIT)&&StartDAQOnlyNWaitForFinish())){
cout<<"Could not select chips"<<endl; cout<<"Could not select chips"<<endl;
return 0; return 0;
@ -733,31 +739,53 @@ bool FebControl::SetTrimbits(unsigned int module_num, unsigned char *trimbits){
for(int row=0;row<16;row++){ //row loop for(int row=0;row<16;row++){ //row loop
int offset = 2*32*row; int offset = 2*32*row;
for(int sc=0;sc<32;sc++){ //supercolumn loop sc for(int sc=0;sc<32;sc++){ //supercolumn loop sc
int super_column_start_position_l = 1030*row + l_r *258 + sc*8; int super_column_start_position_l = 1030*row + l_r *258 + sc*8;
int super_column_start_position_r = 1030*row + 516 + l_r *258 + sc*8; int super_column_start_position_r = 1030*row + 516 + l_r *258 + sc*8;
/*
int super_column_start_position_l = 1024*row + l_r *256 + sc*8; //256 per row, 8 per super column
int super_column_start_position_r = 1024*row + 512 + l_r *256 + sc*8; //256 per row, 8 per super column
*/
int chip_sc = 31 - sc; int chip_sc = 31 - sc;
trimbits_to_load_l[offset+chip_sc] = 0; trimbits_to_load_l[offset+chip_sc] = 0;
trimbits_to_load_r[offset+chip_sc] = 0; trimbits_to_load_r[offset+chip_sc] = 0;
for(int i=0;i<8;i++){ // column loop i for(int i=0;i<8;i++){ // column loop i
trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_l+i])<<((7-i)*4);//low
trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_l+i])>>3)<<((7-i)*4);//upper
trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[row_set*16480+super_column_start_position_r+i])<<((7-i)*4);//low
trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[row_set*16480+super_column_start_position_r+i])>>3)<<((7-i)*4);//upper
/*
trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])<<((7-i)*4);//low trimbits_to_load_l[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])<<((7-i)*4);//low
trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])>>3)<<((7-i)*4);//upper trimbits_to_load_l[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_l+i)])>>3)<<((7-i)*4);//upper
trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])<<((7-i)*4);//low trimbits_to_load_r[offset+chip_sc] |= ( 0x7 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])<<((7-i)*4);//low
trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])>>3)<<((7-i)*4);//upper trimbits_to_load_r[offset+chip_sc+32] |= ((0x38 & trimbits[263679 - (row_set*16480+super_column_start_position_r+i)])>>3)<<((7-i)*4);//upper
*/
} // end column loop i } // end column loop i
} //end supercolumn loop sc } //end supercolumn loop sc
} //end row loop } //end row loop
if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()) return 0; /*
if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1024,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1024,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()){
cout <<" some errror!"<< endl;
return 0;
}
*/
if(!WriteMemory(modules[0]->GetTopLeftAddress(),0,0,1023,trimbits_to_load_r)||!WriteMemory(modules[0]->GetTopRightAddress(),0,0,1023,trimbits_to_load_l)||!StartDAQOnlyNWaitForFinish()){
cout <<" some errror!"<< endl;
return 0;
}
} //end row_set loop (groups of 16 rows) } //end row_set loop (groups of 16 rows)
} // end l_r loop } // end l_r loop
memcpy(last_downloaded_trimbits,trimbits,trimbit_size*sizeof(unsigned char)); memcpy(last_downloaded_trimbits,trimbits,trimbit_size*sizeof(unsigned char));
return SetStaticBits(); //send the static bits return SetStaticBits(); //send the static bits
} }
unsigned char* FebControl::GetTrimbits(){ unsigned int* FebControl::GetTrimbits(){
return last_downloaded_trimbits; return last_downloaded_trimbits;
} }
@ -1191,4 +1219,79 @@ bool FebControl::StopAcquisition(){
bool FebControl::LoadTrimbitFile(){
string filename = "/home/root/noise.snbeb040";
ifstream input_file;
int ndacs =16;
int dacs[ndacs];
unsigned int chanregs[trimbit_size];
input_file.open(filename.c_str() ,ifstream::binary);
if(!input_file.is_open()){
cout<<"Warning, could not open trimbit file: "<<filename<<endl;
exit(-1);
}
//dacs
for(int i=0;i<ndacs;++i){
input_file.read((char*) &dacs[i],sizeof(int));
cout << " dac " << i << ":"<< Module::dac_names[i] << ":" << dacs[i] << endl;
SetDAC(Module::dac_names[i],dacs[i]);
}
cout << "Loading trimbits from file " << filename << endl;
//trimbits
input_file.read((char*) chanregs,trimbit_size*sizeof(unsigned int));
if(input_file.eof()){
cout<<endl<<"Error, could not load trimbits end of file, "<<filename<<", reached."<<endl<<endl;
exit(-1);
}
input_file.close();
return SetTrimbits(0,chanregs);
}
bool FebControl::SaveTrimbitFile(){
string filename = "/home/root/noise.snbeb040";
ofstream output_file;
int ndacs =16;
int dacs[ndacs];
output_file.open(filename.c_str() ,ofstream::binary);
if(!output_file.is_open()){
cout<<"Warning, could not open trimbit file: "<<filename<<endl;
return 0;
}
cout << "Writing trimbits to file " << filename << endl;
//dacs
for(int i=0;i<ndacs;++i){
GetDAC(Module::dac_names[i], dacs[i]);
output_file.write((char*) &dacs[i],sizeof(int));
cout << " dac " << i << ":"<< Module::dac_names[i] << ":" << dacs[i] << endl;
}
//trimbits
output_file.write((char*) last_downloaded_trimbits,trimbit_size * sizeof(unsigned int));
output_file.close();
return 1;
}
bool FebControl::SaveAllTrimbitsTo(int value){
unsigned int chanregs[trimbit_size];
for(int i=0;i<trimbit_size;i++)
chanregs[i] = value;
return SetTrimbits(0,chanregs);
}

View File

@ -88,7 +88,7 @@ class FebControl:private FebInterface{
float exposure_period_in_sec; float exposure_period_in_sec;
unsigned int trimbit_size; unsigned int trimbit_size;
unsigned char* last_downloaded_trimbits; unsigned int* last_downloaded_trimbits;
void PrintModuleList(); void PrintModuleList();
bool GetModuleIndex(unsigned int module_number, unsigned int& module_index); bool GetModuleIndex(unsigned int module_number, unsigned int& module_index);
@ -150,11 +150,17 @@ class FebControl:private FebInterface{
bool GetDAC(std::string s, int& ret_value, bool voltage_mv=0); bool GetDAC(std::string s, int& ret_value, bool voltage_mv=0);
bool GetDACName(unsigned int dac_num, std::string &s); bool GetDACName(unsigned int dac_num, std::string &s);
bool SetTrimbits(unsigned int module_num, unsigned char* trimbits); bool SetTrimbits(unsigned int module_num, unsigned int* trimbits);
unsigned char* GetTrimbits(); unsigned int* GetTrimbits();
/**Added by Dhanya */
bool LoadTrimbitFile();
bool SaveTrimbitFile();
bool SaveAllTrimbitsTo(int value);
bool Reset(); bool Reset();
bool StartAcquisition(); bool StartAcquisition();
bool StopAcquisition(); bool StopAcquisition();

View File

@ -158,9 +158,9 @@ bool FebInterface::WriteMemory(unsigned int sub_num, unsigned int mem_num, unsig
mem_num &= 0x3f; mem_num &= 0x3f;
start_address &= 0x3fff; start_address &= 0x3fff;
nwrites &= 0x3ff; nwrites &= 0x3ff;
if(!nwrites||nwrites>send_buffer_size-2) return 0; if(!nwrites||nwrites>send_buffer_size-2) {cout<<"error herer: nwrites:"<<nwrites<<endl;return 0;}//*d-1026
send_ndata = nwrites+2; send_ndata = nwrites+2;//*d-1025
send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address send_data[0] = 0xc0000000 | mem_num << 24 | nwrites << 14 | start_address; //cmd -> write to memory, nwrites, mem number, start address
send_data[nwrites+1] = 0; send_data[nwrites+1] = 0;
for(unsigned int i=0;i<nwrites;i++) send_data[i+1] = values[i]; for(unsigned int i=0;i<nwrites;i++) send_data[i+1] = values[i];

View File

@ -30,6 +30,7 @@ enum cmd_string {evNotFound,
evSetDACValue,evGetDACValue,evSetDACVoltage,evGetDACVoltage,evSetHighVoltage,//evGetHighVoltage, evSetDACValue,evGetDACValue,evSetDACVoltage,evGetDACVoltage,evSetHighVoltage,//evGetHighVoltage,
evSetTrimBits, evSetTrimBits,
evSetAllTrimBits,
evGetTrimBits, evGetTrimBits,
//evLoadTrimBitFile, //evLoadTrimBitFile,
@ -64,6 +65,7 @@ void init(){
enum_map["getdacvoltage"] = evGetDACVoltage; enum_map["getdacvoltage"] = evGetDACVoltage;
enum_map["sethighvoltage"] = evSetHighVoltage; enum_map["sethighvoltage"] = evSetHighVoltage;
enum_map["settrimbits"] = evSetTrimBits; enum_map["settrimbits"] = evSetTrimBits;
enum_map["setalltrimbits"] = evSetAllTrimBits;
enum_map["gettrimbits"] = evGetTrimBits; enum_map["gettrimbits"] = evGetTrimBits;
// enum_map["loadtrimbitfile"] = evLoadTrimBitFile; // enum_map["loadtrimbitfile"] = evLoadTrimBitFile;
enum_map["setbitmode"] = evSetBitMode; enum_map["setbitmode"] = evSetBitMode;
@ -118,8 +120,8 @@ int main(int argc, char* argv[]){
if(!SetupListenSocket(port_number)) return 1; if(!SetupListenSocket(port_number)) return 1;
int length=1000; int length=270000;
char data[1000]; char data[270000];
int stop = 0; int stop = 0;
time_t rawtime; time_t rawtime;
@ -128,13 +130,14 @@ int main(int argc, char* argv[]){
while(!stop){ while(!stop){
cout<<endl<<"\n\n\n\nWaiting for command -> "<<flush; /*cout<<"Waiting for command -> "<<flush;*/
int nread = AccpetConnectionAndWaitForData(data,length); int nread = AccpetConnectionAndWaitForData(data,length);
if(nread<=0) return 0; if(nread<=0) return 0;
time(&rawtime); timeinfo=localtime(&rawtime); time(&rawtime); timeinfo=localtime(&rawtime);
cout<<asctime(timeinfo); cout<<asctime(timeinfo);
cout<<" Command received: "<<data<<endl<<endl; /*cout<<" Command received: "<<data<<endl;*/
@ -142,13 +145,15 @@ int main(int argc, char* argv[]){
float v[4];//,v2,v3,v4,v5; float v[4];//,v2,v3,v4,v5;
int n[5]; int n[5];
string cmd = GetNextString(data,1); string cmd = GetNextString(data,1);
int ret_val = 1; int ret_val = 1;
string return_message = "\n\n\tCommand recieved: "; string return_message = "";/*\n\n\tCommand recieved: ";
return_message.append(data); return_message.append(data);
return_message.append("\n"); return_message.append("\n");
*/
int return_start_pos; int return_start_pos;
while(cmd.length()>0){ while(cmd.length()>0){
int ret_parameter = 0; int ret_parameter = 0;
@ -211,7 +216,7 @@ int main(int argc, char* argv[]){
tmp_str[0] = GetNextString(data); tmp_str[0] = GetNextString(data);
if(tmp_str[0].length()>0&&feb_controler->GetDAC(tmp_str[0],ret_parameter)){ if(tmp_str[0].length()>0&&feb_controler->GetDAC(tmp_str[0],ret_parameter)){
return_message.append("\tExecuted: GetDACValue "); return_message.append(tmp_str[0]+" -> ");AddNumber(return_message,ret_parameter); return_message.append(" mV\n"); return_message.append("\tExecuted: GetDACValue "); return_message.append(tmp_str[0]+" -> ");AddNumber(return_message,ret_parameter); return_message.append("\n");
ret_val = 0; ret_val = 0;
}else{ }else{
return_message.append("\tError executing: GetDACValue <dac_name>\n"); return_message.append("\tError executing: GetDACValue <dac_name>\n");
@ -260,19 +265,44 @@ int main(int argc, char* argv[]){
case evSetTrimBits : case evSetTrimBits :
tmp_str[0] = GetNextString(data); tmp_str[0] = GetNextString(data);
/*char tt[263681];*/ if(feb_controler->LoadTrimbitFile()){
for(int i=0;i<10;i++) /* if(1){*/
cout <<i<<":"<<tmp_str[0][i]<<"\t\t"; /*tmp_str[0] = GetNextString(data);
printf("Cjhgkfdjg :%s\n",tmp_str[0].c_str()); feb_controler->SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str()));*/
feb_controler->SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str())); return_message.append("\tExecuted: SetTrimBits\n");
return_message.append("\tExecuted: SetTrimBits "); AddNumber(return_message,n[0]); return_message.append("\n"); ret_val = 0;
ret_val = 0; }else{
return_message.append("\tError executing: SetTrimBits \n");
ret_val = 1;
}
break; break;
case evSetAllTrimBits :
tmp_str[0] = GetNextString(data);
n[0] = atoi(tmp_str[0].data());
if(feb_controler->SaveAllTrimbitsTo(n[0])){
/*feb_controler->SetTrimbits(0,(unsigned char*)(tmp_str[0].c_str()));*/
/*if(1){*/
return_message.append("\tExecuted: SetAllTrimBits\n");
ret_val = 0;
}else{
return_message.append("\tError executing: SetAllTrimBits \n");
ret_val = 1;
}
break;
case evGetTrimBits : case evGetTrimBits :
/*strcpy(ret_parameter, feb_controler->GetTrimbits()); parameter to pass string*/ if(feb_controler->SaveTrimbitFile()){
return_message.append("\tExecuted: GetTrimBits "); AddNumber(return_message,n[0]); return_message.append("\n"); /*if(1){*/
ret_val = 0; /*tmp_str[0] = GetNextString(data);
feb_controler->GetTrimbits();*/
return_message.append("\tExecuted: GetTrimBits\n");
ret_val = 0;
}else{
return_message.append("\tError executing: GetTrimBits \n");
ret_val = 1;
}
break; break;
@ -464,11 +494,11 @@ int main(int argc, char* argv[]){
cmd = GetNextString(data); cmd = GetNextString(data);
} }
return_message.append("\n\n\n"); /*return_message.append("\n\n\n");*/
AddNumber(return_message,ret_val,0,1); AddNumber(return_message,ret_val,0,1);
cout<<return_message.c_str()<<endl; cout<<return_message.c_str()<<"\t\t";
cout<<"\treturn: "<<ret_val<<endl; cout<<"return: "<<ret_val<<endl;
if(!WriteNClose(return_message.c_str(),return_message.length())) return 0; if(!WriteNClose(return_message.c_str(),return_message.length())) return 0;
} }

View File

@ -27,7 +27,7 @@ int initDetector(){
int imod,i,n; int imod,i,n;
n = getNModBoard(1); n = getNModBoard(1);
printf("This is the EIGER Server\n"); printf("This is the EIGER Server of revision %llx\n", getDetectorId(DETECTOR_SOFTWARE_VERSION));
//#ifdef VERBOSE //#ifdef VERBOSE
printf("Board is for %d half modules\n",n); printf("Board is for %d half modules\n",n);
@ -307,6 +307,13 @@ int setModule(sls_detector_module myMod){
int getModule(sls_detector_module *myMod){ int getModule(sls_detector_module *myMod){
int i;
int retval[2];
for(i=0;i<NDAC;i++)
setDAC((enum detDacIndex)i,-1,-1,0,retval);
EigerGetTrimbits(myMod->chanregs);
if (detectorModules) if (detectorModules)
copyModule(myMod,detectorModules);/*copyModule(myMod,detectorModules+iMod);*/ copyModule(myMod,detectorModules);/*copyModule(myMod,detectorModules+iMod);*/
else else

View File

@ -4420,7 +4420,7 @@ slsDetectorDefs::runStatus multiSlsDetector::startReceiverReadout(){
} }
} }
*stoppedFlag=1; /**stoppedFlag=1;*/
return s; return s;
} }

View File

@ -3561,9 +3561,9 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){
if (t>=0) if (t>=0)
thisDetector->timerValue[index]=t; thisDetector->timerValue[index]=t;
} }
//#ifdef VERBOSE #ifdef VERBOSE
std::cout<< "Timer " << index << " set to "<< thisDetector->timerValue[index] << "ns" << std::endl; std::cout<< "Timer " << index << " set to "<< thisDetector->timerValue[index] << "ns" << std::endl;
//#endif #endif
if ((thisDetector->myDetectorType==MYTHEN)&&(index==PROBES_NUMBER)) { if ((thisDetector->myDetectorType==MYTHEN)&&(index==PROBES_NUMBER)) {
setDynamicRange(); setDynamicRange();

View File

@ -423,7 +423,13 @@ int slsDetectorActions::executeScan(int level, int istep) {
setThresholdEnergy((int)currentScanVariable[level]); //energy scan setThresholdEnergy((int)currentScanVariable[level]); //energy scan
break; break;
case thresholdScan: case thresholdScan:
setDAC((dacs_t)currentScanVariable[level],THRESHOLD,0); // threshold scan if(getDetectorsType() == EIGER){
setDAC((dacs_t)currentScanVariable[level],E_Vcmp_ll,0); // threshold scan
setDAC((dacs_t)currentScanVariable[level],E_Vcmp_lr,0); // threshold scan
setDAC((dacs_t)currentScanVariable[level],E_Vcmp_rl,0); // threshold scan
setDAC((dacs_t)currentScanVariable[level],E_Vcmp_rr,0); // threshold scan
}else
setDAC((dacs_t)currentScanVariable[level],THRESHOLD,0); // threshold scan
break; break;
case trimbitsScan: case trimbitsScan:
trimbit=(int)currentScanVariable[level]; trimbit=(int)currentScanVariable[level];

View File

@ -197,6 +197,11 @@ class slsDetectorActions : public virtual slsDetectorBase
*/ */
virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0; virtual dacs_t setDAC(dacs_t val, dacIndex index , int mV, int imod=-1)=0;
/** returns the detector type
\param pos position in the multi detector structure (is -1 returns type of detector with id -1)
\returns type
*/
virtual detectorType getDetectorsType(int pos=-1)=0;
virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0; virtual int setThresholdEnergy(int, int im=-1, detectorSettings isettings=GET_SETTINGS)=0;
virtual int setChannel(int64_t, int ich=-1, int ichip=-1, int imod=-1)=0; virtual int setChannel(int64_t, int ich=-1, int ichip=-1, int imod=-1)=0;

View File

@ -241,7 +241,7 @@ slsDetectorDefs::sls_detector_module* energyConversion::readSettingsFile(string
case EIGER: case EIGER:
infile.open(myfname.c_str(),ifstream::binary); infile.open(myfname.c_str(),ifstream::binary);
if (infile.is_open()) { if (infile.is_open()) {
infile.read((char*) myMod->dacs,sizeof(int)*(myMod->ndac)); infile.read((char*) myMod->dacs,sizeof(dacs_t)*(myMod->ndac));
infile.read((char*) myMod->chanregs,sizeof(int)*(myMod->nchan)); infile.read((char*) myMod->chanregs,sizeof(int)*(myMod->nchan));
#ifdef VERBOSE #ifdef VERBOSE
for(int i=0;i<myMod->ndac;i++) for(int i=0;i<myMod->ndac;i++)
@ -381,7 +381,7 @@ int energyConversion::writeSettingsFile(string fname, detectorType myDetectorTyp
for(int i=0;i<mod.ndac;i++) for(int i=0;i<mod.ndac;i++)
std::cout << "dac " << i << ":" << mod.dacs[i] << std::endl; std::cout << "dac " << i << ":" << mod.dacs[i] << std::endl;
#endif #endif
outfile.write((char*)mod.dacs, sizeof(int)*(mod.ndac)); outfile.write((char*)mod.dacs, sizeof(dacs_t)*(mod.ndac));
outfile.write((char*)mod.chanregs, sizeof(int)*(mod.nchan)); outfile.write((char*)mod.chanregs, sizeof(int)*(mod.nchan));
outfile.close(); outfile.close();

View File

@ -461,7 +461,7 @@ void* postProcessing::processData(int delflag) {
*/ */
int progress = 0; int progress = -1;
char currentfName[MAX_STR_LENGTH]=""; char currentfName[MAX_STR_LENGTH]="";
int currentfIndex = -1; int currentfIndex = -1;
bool newData = false; bool newData = false;
@ -502,6 +502,7 @@ void* postProcessing::processData(int delflag) {
if (dataReady){ if (dataReady){
//for random reads, ask only if it has new data //for random reads, ask only if it has new data
if(!newData){ if(!newData){
if(currentfIndex > progress) if(currentfIndex > progress)
@ -525,13 +526,12 @@ void* postProcessing::processData(int delflag) {
currentfIndex = -1; currentfIndex = -1;
cout<<"****Detector Data returned is NULL***"<<endl; cout<<"****Detector Data returned is NULL***"<<endl;
} }
/*if(nthframe){
if(nthframe){
if((currentfIndex == -1) || (currentfIndex == progress)) if((currentfIndex == -1) || (currentfIndex == progress))
currentfIndex = -1; currentfIndex = -1;
else else
progress = currentfIndex; progress = currentfIndex;
} }*/
//not garbage frame //not garbage frame
if (currentfIndex >= 0) { if (currentfIndex >= 0) {