--- rawreader/src/Verify.cpp 2006/12/10 12:21:27 1.2 +++ rawreader/src/Verify.cpp 2006/12/10 13:06:00 1.4 @@ -5,12 +5,17 @@ #include "CRC.h" short int CRC_H(char [], char []); +extern char MYSQL[120]; +extern char database[120]; +extern float YODA_flag; +extern float transmit_flag; +extern int print_flag; void verify(char fni[], char inf[], char log[], char pam[], char fno[], char path[], char name_ini[], char name_in[], int packet_type[], float IndexQ, int r_counter, int real_route[]) { - FILE *fo_log, *fo_inf, *fo_work, *fo_miss, *fo_row; + FILE *fo_log, *fo_inf, *fo_miss, *fo_row; time_t seconds; @@ -18,6 +23,7 @@ char time_year[5], time_month[5], time_day[5]; char data_time[80]; char cirquit_no[10], route_no[80], name_path[80], name_cln2[80]; + char connection[80]; bool file_ready, file_deleted, file_archived, file_proces; int flag_to_transmit=0; int flag_sec_trans=0; /*Second transmission flag*/ @@ -27,7 +33,7 @@ char str_route[10]; char str_file[80]; - char ch; + char ch, ttt[80]; char miss_file[80]; char Name_Buf[9]; /*Name buffer*/ char Name_Buf_add[9]; /*Header buffer*/ @@ -45,8 +51,11 @@ int Byte_adr2[4]; /*Bytes for Packet end packing*/ int packet_counter[NumberPack+1]; /*Counter for each packet type*/ int count_name_cor=0; /*Counter for packet with corrected name*/ - int er_pack_count=0; /*Error packet counter*/ + int er_pack_CRC=0; /*CRC error packet counter*/ + int er_pack_Len=0; /*Length error packet counter*/ + int er_pack_count=0; /*Errors counter*/ int count_miss=0; /*Missed packet counter*/ + int count_sec_miss=0; int P_er=0; /*Number of packet with counter error*/ int flag_CRC_H[3]; /*Flag for CRC header error*/ int flag_pack[3]; /*Flag for error in packet counter*/ @@ -66,9 +75,12 @@ long int icount_int=0; /*Entire part of total file size in Kbytes*/ long int icount_frac=0; /*Fractional part of total file size*/ long int N1=0; /*Number of identified PAMELA packets*/ - long int numP[3]; /*Packet numbers for previous packets*/ + long int numP[3]; /*Packet numbers for previous packets*/ + long int PackType[3]; /*Packet type for previous packets*/ long int LenP[3]; /*Packet length for previous packets*/ unsigned long int time_p[3]; /*Packet time*/ + unsigned long int time_max=0; + unsigned long int time_min=0; long int pack_length=0; /*PAMELA packet length*/ long long int adr_first[3]; /*Start displacement from file begin*/ long long int adr_last[3]; /*Finish displacement from file begin*/ @@ -78,21 +90,16 @@ unsigned long int k=0, j=0; int i; //initialization , all =0 - float process, transmit; + float ratioCln1Cln2; int output; char str[80]; - FILE *fpar; - fpar=fopen("/home/pamelaprod/rawreader/bin/parameters.dat","r"); - fscanf(fpar,"%f %s %s %s",&process,str,str,str); - fscanf(fpar,"%f %s %s %s",&transmit,str,str,str); - fscanf(fpar,"%i",&output); - fclose(fpar); - stringstream oss, oss1; - TSQLServer *sqlServer = TSQLServer::Connect("mysql://pamela_1.ntsomz.ru:3306/rawreader", "pamelaprod", "rawprod"); - + strcpy(connection,MYSQL); + strcat(connection,database); + TSQLServer *sqlServer = TSQLServer::Connect(connection, "pamelaprod", "rawprod"); + if (sqlServer==0) {cerr<<"can not connect with MYSQL server\n"; exit(1);} oss.str(""); oss<<"select * from FILES1"; TSQLResult *res1=sqlServer->Query(oss.str().c_str()); @@ -126,21 +133,21 @@ {numP[i]=0; time_p[i]=0; CRC_Header[i]=0; CRC_bad_pack[i]=0; flag_CRC_H[i]=0; flag_len[i]=0; flag_len_weak[i]=0; flag_pack[i]=0; flag_CRC_cor[i]=0; flag_name[i]=0; flag_type[i]=0; flag_time[i]=0; - LenP[i]=0; + LenP[i]=0; PackType[i]=0; adr_first[i]=0; adr_last[i]=0; Hex[i]=0;} for (i=0; i<4; i++) {Byte_adr1[i]=0; Byte_adr2[i]=0;} for (i=0; i<2; i++) temp[i]=0; ifstream fin; - ofstream fo_pam; + ofstream fo_pam, fo_work; /**********************OPEN NECESSARY FILES************************/ /******************************************************************/ - fin.open(fni, ios::binary); // open input file "xxx_mmm_nnnnn__cln1.pam" - if(fin.good()==0) {cerr<<"can not open input file "<0) && (fmod((float)(tmpP),(float)(1000.))==0.)&&(tmpP!=0)) cout<<"verifying "<Limit) {adr_last[2]=adr_first[2]+Limit;} //end byte for previous packet /**************PAMELA PACKET LENGTH ERROR ANALYSIS*****************/ if ( (flag_CRC_H[2]==1)&&(GLOBAL_LEN_ER>0)&& - ( ((adr_last[2]-adr_first[2]+1)<(LenP[2]+16)) - ||((adr_last[2]-adr_first[2]+1-LenP[2]-16)>64) ) ) + ( ((adr_last[2]-adr_first[2]+1)<(LenP[2]+16))||((adr_last[2]-adr_first[2]+1-LenP[2]-16)>64) ) ) {flag_len[2]=1; -// cout<<"pack num "<0) + {cout<<"pack num "<0)&& ( ((adr_last[2]-adr_first[2]+1)<(LenP[2]+16))||((adr_last[2]-adr_first[2]+1-LenP[2]-16)>64) ) ) {flag_len_weak[2]=1; -// cout<<"weak length error; pack num "<0) + {cout<<"weak length error; pack num "<0)&&(flag_len[2]==1)) { -//Write data in file "xxx_mmm_nnnnn_cln2.pam" +//Write data in file "nnnnn_mmm_xxx_cln2.pam" for (i=0;i0)&&(flag_len[2]!=1)&&(flag_len_weak[2]!=1)) { -//Write data in file "xxx_mmm_nnnnn_cln2.pam" +//Write data in file "nnnnn_mmm_xxx_cln2.pam" for (i=0;i0)&&(flag_len[2]!=1)&&(flag_len_weak[2]==1)) { -//Write data in file "xxx_mmm_nnnnn_cln2.pam" +//Write data in file "nnnnn_mmm_xxx_cln2.pam" for (i=0;i(CalcCheckSum)<< - " CRC="<((int)(unsigned char)(Name_Buf_add[7]))<<"\n"; - CRC_bad_pack[2]=numP[2]; - flag_CRC_H[2]=1;} + {er_pack_CRC+=1; + CRC_bad_pack[2]=numP[2]; + flag_CRC_H[2]=1; + fo_work<<"CRC error : PAMELA packet="<=1) - {Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i))); - tmpP=tmpP-(long int)(pow(256.,2-i)* - (int)(tmpP/(long int)(pow(256.,2-i)) ));}} - for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i])); - if (CRC_Header[1]==(int)(CRC_H(Name_Buf_old, Name_Buf_add_old))) - {flag_CRC_cor[1]=1;} - + for (i=0;i<3;i++) + {if (tmpP/(long int) (pow(256.,2-i))>=1) + {Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i))); + tmpP=tmpP-(long int)(pow(256.,2-i)*(int)(tmpP/(long int)(pow(256.,2-i)) )); + } + } + for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i])); + for (i=0; i<8; i++) + {buff[i]=Name_Buf_old[i]; + buff[i+8]=Name_Buf_add_old[i];} + if (CRC_Header[1]==(short int)(unsigned char)CM_Compute_CRC16(0, (unsigned char*)&buff, 15)) + {flag_CRC_cor[1]=1;} +//Correct error packet number// tmpP=numP[2]-1; for (i=0;i<3;i++) Hex[i]=0; - for (i=0;i<3;i++) - {if (tmpP/(long int)(pow(256.,2-i))>=1) - {Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i))); - tmpP=tmpP-(long int)pow(256.,2-i)* - (int)(tmpP/(long int)(pow(256.,2-i)));}} - for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i])); - if (CRC_Header[1]==(int)(CRC_H(Name_Buf_old, Name_Buf_add_old))) - {flag_CRC_cor[1]=1;} + for (i=0;i<3;i++) + {if (tmpP/(long int)(pow(256.,2-i))>=1) + {Hex[2-i]=(int)(tmpP/(long int)(pow(256.,2-i))); + tmpP=tmpP-(long int)pow(256.,2-i)*(int)(tmpP/(long int)(pow(256.,2-i))); + } + } + for (i=5;i<8;i++) (Name_Buf_old[i]=(char)(Hex[7-i])); + for (i=0; i<8; i++) + {buff[i]=Name_Buf_old[i]; + buff[i+8]=Name_Buf_add_old[i];} + if (CRC_Header[1]==(short int)(unsigned char)CM_Compute_CRC16(0, (unsigned char*)&buff, 15)) + {flag_CRC_cor[1]=1;} } /*********************Missing packet analysis**********************/ +/**packet numbers: 21 (22 17 18) 19 ******************************/ +/***missed packets: 21 20 19 18 17 ******************************/ + if ((numP[1]numP[0]+1)&&(numP[1]numP[0]+1)&&(numP[1]=numP[0]+1)&&(numP[1]=numP[0]+1)&&(numP[1]=numP[0]+2)&&(flag_pack[2]==0)&&(flag_pack[0]==0)&& (flag_time[0]==0)&&(time_p[2]>time_p[0])&& ((time_p[1]time_p[2]))) - {flag_time[1]=1;} - + {flag_time[1]=1; + fo_work<<"Time error : PAMELA packet="<(CRC_Header[1]), -// (int)(CRC_H(Name_Buf_old, Name_Buf_add_old))); +//Write error number in log file + fprintf(fo_log,"%1c",char(flags)); +//Write error number in work.dat file + if (flags!=0) fo_work<<"PAMELA packet="<=1) - {Byte_adr1[3-i]=(int)(temp[0]/(long int)(pow(256.,3-i))); - temp[0]=temp[0]-(long int)pow(256.,3-i)* - (int)(temp[0]/(long int)(pow(256.,3-i)));} + {Byte_adr1[3-i]=(int)(temp[0]/(long int)(pow(256.,3-i))); + temp[0]=temp[0]-(long int)pow(256.,3-i)*(int)(temp[0]/(long int)(pow(256.,3-i)));} } -//Write packet type and begin displacement in log and work.dat files -// fprintf(fo_work,"Type %i: num. %i: first=%i:", -// num_type, numP[2], adr_first[2]); +//Write packet type and begin displacement in log file fprintf(fo_log,"%1c",char(num_type)); for (i=0;i<4;i++) fprintf(fo_log,"%1c",char(Byte_adr1[i])); /**************PAMELA PACKET OLD BUFFER***************************/ for (i=0;i<8;i++) - {Name_Buf_old[i]=Name_Buf[i];Name_Buf_add_old[i]=Name_Buf_add[i];} + {Name_Buf_old[i]=Name_Buf[i]; Name_Buf_add_old[i]=Name_Buf_add[i];} /**********************data reading********************************/ fin.seekg(-1,ios::cur); icount-=1; icount_total-=1; @@ -499,16 +549,22 @@ fin.get(ch); if (fin.eof()) {break;} icount_total+=1; -// if (fmod( double(icount_total), double(100000000.))==double(0.)) {cout<<"Mbytes="<0) && fmod( double(icount_total), double(100000000.))==double(0.)) {cout<<"Mbytes="<0)&&(FLAG_BIG==0)) icount+=1; for (i=0;i<7;i++) Name_Buf[i]=Name_Buf[i+1]; - Name_Buf[7]=ch; /*for(i=0;i<8;i++) printf("%x",(int)(unsigned char)Name_Buf[i]); printf("\n");*/ + Name_Buf[7]=ch; if ((icount-adr_first[2]-1) Nmax="<0) {cout<<"too long packet "<64)||(adr_last[2]-adr_first[2]+1-LenP[2]-16<0)) flag_len[2]=1; + if ((icount-adr_first[2]+1-LenP[2]-16)<=Limit) {adr_last[2]=icount;} //end byte for previous packet + else if ((icount-adr_first[2]+1-LenP[2]-16)>Limit) {adr_last[2]=adr_first[2]+Limit;} //end byte for previous packet + + if ((adr_last[2]-adr_first[2]+1-LenP[2]-16>64)||(adr_last[2]-adr_first[2]+1-LenP[2]-16<0)) + { + flag_len[2]=1; + er_pack_Len+=1; + fo_work<<"Length error : packet number="<=1) {Byte_adr2[3-i]=(int)(temp[1]/(long int)(pow(256.,3-i))); temp[1]=temp[1]-(long int)pow(256.,3-i)* - (int)(temp[1]/(long int)(pow(256.,3-i)));}} - -/*********PAMELA LAST PACKET LENGTH ERROR ANALYSIS*****************/ -// if ((adr_last[2]-adr_first[2]+1)!=(LenP[2]+(64-LenP[2]%64))) -// {flag_len[2]=1;} + (int)(temp[1]/(long int)(pow(256.,3-i)));}} -//Write last packet end displacement in log and work.dat files +//Write last packet end displacement in log file for (i=0;i<4;i++) fprintf(fo_log,"%1c",char(Byte_adr2[i])); -// fprintf(fo_work," last=%i",adr_last[2]); //Write error number in log and work.dat files flags=(short int)(pow((float)(2*flag_CRC_H[2]),1)+ - pow((float)(2*flag_len[2]),2)+ + pow((float)(2*flag_len[2]),2)+ pow((float)(2*flag_pack[2]),3)+ pow((float)(2*flag_name[2]),4)+ - pow((float)(2*flag_type[2]),5)+ + pow((float)(2*flag_type[2]),5)+ pow((float)(2*flag_time[2]),6)+ pow((float)(2*flag_CRC_cor[2]),7)); if ((flags!=0)&&(N1>0)) er_pack_count+=1; fprintf(fo_log,"%1c",char(flags)); -// fprintf(fo_work," error num.=%i CRC=%i Calc=%i\n", -// flags,bitset<8>(CRC_Header[2]), -// (int)(CRC_H(Name_Buf, Name_Buf_add))); +//Write error number in work.dat file + if (flags!=0) fo_work<<"PAMELA packet="<process) file_proces=1; + if (IndexQ>YODA_flag) file_proces=1; - - if (IndexQ>transmit) {flag_to_transmit=1;} + if (IndexQ>transmit_flag) {flag_to_transmit=1;} else {flag_to_transmit=0;} oss.str(""); oss << "INSERT INTO FILES (cirquit_n, route_n, counter, qual_index, ready, deleted, date," << " archived, path, cln2_name, proces_flag, transit_flag)" << " VALUES ('"<< cirquit_no << "','"<< route_no << "','"<Query(oss.str().c_str()); + if (print_flag>0) cout<Query(oss.str().c_str()); flag_sec_trans=0; oss1.str(""); - oss1 <<"INSERT INTO FILES1 (my_route, raw_filename, pam_size, cirquit_n, route_n, route_real," - <<" counter, board_time, Num_all, Num_macro, flag_twice)" - <<" VALUES ('"<0) cout<Query(oss1.str().c_str()); // if (conn->Query(oss.str().c_str()) == 0) @@ -632,10 +691,9 @@ // } delete [] buffer; - /***************************************************************/ fin.close(); - fclose(fo_work); + fo_work.close(); fclose(fo_log); fclose(fo_inf); fo_pam.close();