--- rawreader/src/Verify.cpp 2006/09/01 10:56:23 1.1 +++ rawreader/src/Verify.cpp 2006/12/10 12:52:48 1.3 @@ -1,23 +1,31 @@ ///////////////PAMELA PACKETS READER///////////////////////////////// #include "descript.h" +#include "flag.h" #include "CRC.h" short int CRC_H(char [], char []); +extern char MYSQL[80]; +extern char database[80]; +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[], - int GLOBAL_LEN_ER, float IndexQ, int r_counter, int real_route[]) + 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; + struct tm *timeinfo; 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_to_transmit=0; int flag_sec_trans=0; /*Second transmission flag*/ int num_rows=0; int current_route=0; @@ -25,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*/ @@ -43,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*/ @@ -67,6 +78,8 @@ long int numP[3]; /*Packet numbers 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*/ @@ -76,10 +89,15 @@ unsigned long int k=0, j=0; int i; //initialization , all =0 + float ratioCln1Cln2; + int output; + char str[80]; 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"); oss.str(""); oss<<"select * from FILES1"; @@ -121,36 +139,35 @@ 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 "mmm_counter_nnnnn__cln1.pam" - if(fin.good()==0) {cerr<<"can not open input file"; exit(1);} + fin.open(fni, ios::binary); // open input file "nnnnn_mmm_xxx_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 "mmm_counter_nnnnn_cln2.pam" +//Write data in file "nnnnn_mmm_xxx_cln2.pam" for (i=0;i0)&&(flag_len[2]!=1)) + else if ((GLOBAL_LEN_ER>0)&&(flag_len[2]!=1)&&(flag_len_weak[2]!=1)) { -//Write data in file "mmm_counter_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 "nnnnn_mmm_xxx_cln2.pam" + for (i=0;i=0)) { for (i=0;i(CalcCheckSum)<< - " CRC="<((int)(unsigned char)(Name_Buf_add[7]))<<"\n"; -// cout<<(int)(unsigned char)(Name_Buf[0])<<" " -// <<(int)(unsigned char)(Name_Buf[1])<<" " -// <<(int)(unsigned char)(Name_Buf[2]) -// <<" "<=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="<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");*/ @@ -498,7 +557,11 @@ {buffer[icount-adr_first[2]]=ch;} else {flag_len[2]=1; - if (FLAG_BIG==0) {cout<<"too long packet "< Nmax="<0 && FLAG_BIG==0) {cout<<"too long packet "<64)||(adr_last[2]-adr_first[2]+1-LenP[2]-16<0)) flag_len[2]=1; + 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="<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="<0.9) file_proces=1; - -/* printf("cirquit=%s \n", cirquit_no); - printf("route=%s \n", route_no); - printf("quality=%f \n", IndexQ); - printf("ready=%i \n", file_ready); - printf("deleted=%i \n", file_deleted); - printf("data=%s \n", data_time); - printf("achived=%i \n", file_archived); - printf("path=%s \n", name_path); - printf("name=%s \n", name_cln2); - printf("processed=%i \n", file_proces);*/ + if (IndexQ>YODA_flag) file_proces=1; - if (IndexQ>0.999) {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) @@ -636,7 +694,7 @@ /***************************************************************/ fin.close(); - fclose(fo_work); + fo_work.close(); fclose(fo_log); fclose(fo_inf); fo_pam.close();