00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "FAPData.h"
00020 #include "Version.h"
00021
00022 FAPdata::FAPdata()
00023 {
00024 numberofframes = 0;
00025 fps = 0;
00026 basename = ((char*) new char[256]);
00027 version = 0;
00028 lfaps.resize(NUMBER_OF_FAPS);
00029 }
00030
00031 void FAPdata::allocate_FAP_data(void)
00032 {
00033 frames.resize(numberofframes);
00034 lfaps.resize(NUMBER_OF_FAPS);
00035 }
00036
00037 FAPdata::~FAPdata()
00038 {
00039 deallocate_FAP_data();
00040 }
00041
00042 void FAPdata::deallocate_FAP_data(void)
00043 {
00044
00045 if(basename!=NULL)
00046 delete [] basename;
00047
00048 frames.clear();
00049 lfaps.clear();
00050 basename=NULL;
00051
00052 version = 0;
00053 numberofframes=0;
00054 fps=0;
00055 }
00056
00057 bool FAPdata::header_file_init(char*filename)
00058 {
00059
00060 char cbuf[256],cdummy[256];
00061
00062 int numberOfFramesTemp = 0;
00063 int fpsTemp = 0;
00064 float versionTemp = 0.0;
00065
00066 FILE*fapfile = NULL;
00067 if(!(fapfile = fopen(&filename[0],"r"))){
00068 printf("WARNING: can't read %s\n", filename);
00069 return false;
00070 }
00071 for(;;){
00072 if(fscanf(fapfile,"%s",cbuf));
00073 else {
00074 printf("ERROR: bad fapfile: %s\n",cbuf);
00075 return false;
00076 }
00077 if(cbuf[0] == '#') while(getc(fapfile) != '\n');
00078 else {
00079 sscanf(cbuf,"%f ",&versionTemp);
00080 if(fscanf(fapfile,"%s %d %d",cdummy,&fpsTemp,&numberOfFramesTemp));
00081 else {
00082 printf("ERROR: bad fapfile: %s\n",cbuf);
00083 return false;
00084 }
00085 if(fabs(versionTemp - 2.1) > 0.001)
00086 printf("WARNING: Expecting FAP file version 2.1 not %f\n",versionTemp);
00087 while(getc(fapfile) != '\n');
00088 break;
00089 }
00090 }
00091
00092 numberofframes = numberOfFramesTemp;
00093 fps = fpsTemp;
00094 version = versionTemp;
00095
00096 fclose(fapfile);
00097 return true;
00098 }
00099
00100
00101 bool FAPdata::ReadFapFile(char*fapfilename)
00102 {
00103 FILE*fapfile;
00104 char cbuf[1000];
00105 int fapnum,frameind;
00106 int fap1[8000][4];
00107 int fap2[8000][6];
00108
00109 if(!(fapfile = fopen(fapfilename,"r"))){
00110 printf("WARNING: can't read %s\n",fapfilename);
00111 return false;
00112 }
00113
00114
00115
00116
00117 for(;;){
00118 if(!(fscanf(fapfile,"%s",cbuf))){
00119 printf("ERROR: bad fapfile: %s\n",cbuf);
00120 return false;
00121 }
00122
00123 if(cbuf[0] == '#')
00124 while(getc(fapfile) != '\n');
00125 else {
00126 sscanf(cbuf,"%f ",&version);
00127 fscanf(fapfile,"%s %d %d", basename, &fps, &numberofframes);
00128 if(fabs(version - 2.1) > 0.001)
00129 printf("WARNING: Expecting FAP file version 2.1 not %f\n",version);
00130 while(getc(fapfile) != '\n');
00131 break;
00132 }
00133 }
00134
00135
00136 allocate_FAP_data();
00137
00138
00139 for(frameind = 0; frameind < numberofframes; frameind++) {
00140
00141
00142 for(;;){
00143 if(fscanf(fapfile,"%s",cbuf)!= EOF);
00144 else {
00145 printf("ERROR: bad fapfile: %s\n",cbuf);
00146 return false;
00147 }
00148 if(cbuf[0] == '#') while(getc(fapfile) != '\n');
00149 else {
00150 sscanf(cbuf,"%d",&frames[frameind].FAPs[1].active);
00151 for(fapnum=2;fapnum<NUMBER_OF_FAPS;fapnum++)
00152 fscanf(fapfile,"%d",&frames[frameind].FAPs[fapnum].active);
00153 while(getc(fapfile) != '\n');
00154 break;
00155 }
00156 }
00157
00158
00159 for(;;){
00160 if(fscanf(fapfile,"%s",cbuf)!= EOF);
00161 else {
00162 printf("ERROR: bad fapfile: %s\n",cbuf);
00163 return false;
00164 }
00165 if(cbuf[0] == '#') while(getc(fapfile) != '\n');
00166 else {
00167 sscanf(cbuf,"%d",&frames[frameind].FAPs[0].value);
00168 for(fapnum=1;fapnum<NUMBER_OF_FAPS;fapnum++)
00169 {
00170
00171
00172 if(frames[frameind].FAPs[fapnum].active == 1)
00173 {
00174 if(fapnum == 1) {
00175 fscanf(fapfile,"%d %d %d %d",&fap1[frameind][0],&fap1[frameind][1],&fap1[frameind][2],&fap1[frameind][3]);
00176 }
00177 else if(fapnum == 2) {
00178 fscanf(fapfile,"%d %d %d %d %d %d",&fap2[frameind][0],&fap2[frameind][1],&fap2[frameind][2],&fap2[frameind][3],&fap2[frameind][4],&fap2[frameind][5]);
00179 }
00180
00181 else fscanf(fapfile,"%d",&frames[frameind].FAPs[fapnum].value);
00182 }
00183 }
00184 while(getc(fapfile) != '\n');
00185 break;
00186 }
00187 }
00188
00189 }
00190
00191 fclose(fapfile);
00192 return true;
00193 }
00194
00195
00196
00197 int FAPdata::ReadFapBuffer(std::string buffer1,std::string buffer2)
00198 {
00199
00200 int fapnum,frameind,nof,fps2;
00201
00202 char cdummy[256];
00203
00204 nof = 1;
00205 deallocate_FAP_data();
00206 numberofframes=nof;
00207 allocate_FAP_data();
00208
00209 std::string mask;
00210 std::string FAPvalue;
00211
00212 for(int i=0;i<buffer1.size();i++)
00213 {
00214 if(!strcmp(buffer1.substr(i,1).c_str(),"0") || !strcmp(buffer1.substr(i,1).c_str(),"1"))
00215 mask += buffer1.substr(i,1);
00216 }
00217
00218 for(fapnum=1;fapnum<NUMBER_OF_FAPS;fapnum++)
00219 {
00220 if(!strcmp(mask.substr(fapnum,1).c_str(),"1"))frames[0].FAPs[fapnum].active = 1;
00221 else frames[0].FAPs[fapnum].active = 0;
00222
00223 }
00224 int pos;
00225 std::string value;
00226 buffer2 = buffer2.substr(1,buffer2.size());
00227 pos = buffer2.find(" ");
00228 buffer2 = buffer2.substr(pos,buffer2.size());
00229 for(fapnum=1;fapnum<NUMBER_OF_FAPS;fapnum++)
00230 {
00231 if(frames[0].FAPs[fapnum].active == 1)
00232 {
00233 buffer2 = buffer2.substr(1,buffer2.size());
00234 pos = buffer2.find(" ");
00235 value = buffer2.substr(0,pos);
00236 buffer2 = buffer2.substr(pos,buffer2.size());
00237 frames[0].FAPs[fapnum+1].value = atof(value.c_str());
00238 }
00239 }
00240 return true;
00241 }
00242
00243 float FAPdata::CalibrateFaps(int fapnum, const FAPUdata *FAPUs)
00244 {
00245 switch(fapnum)
00246 {
00247 case 4: case 51:
00248 return (float)((1*FAPUs->AFAPU_UL)/GRETA_UL);
00249 break;
00250 case 8: case 9: case 55: case 56:
00251 return (float)((1*FAPUs->AFAPU_UL)/GRETA_UL);
00252 break;
00253 case 5: case 52:
00254 return (float)((1*FAPUs->AFAPU_LL)/GRETA_LL);
00255 break;
00256 case 57: case 58: case 10: case 11:
00257 return (float)((1*FAPUs->AFAPU_LL)/GRETA_LL);
00258 break;
00259 case 3: case 18:
00260 return (float)((FAPUs->IFAPU_JH)/GRETA_JH);
00261 break;
00262 case 53: case 54: case 59: case 60:
00263 return (float)(FAPUs->IFAPU_MW/GRETA_LW);
00264 break;
00265 case 16:
00266 return (1.0f);
00267 break;
00268 case 17:
00269 return (1.0f);
00270 break;
00271 case 6: case 7: case 12: case 13:
00272 return (float)(FAPUs->MNSFAPU/GRETA_MNS);
00273 break;
00274 default:
00275 return(1.0f);
00276 break;
00277 }
00278
00279 }
00280
00281 void FAPdata::print(void)
00282 {
00283 printf("\nFAP details");
00284 printf("\nName: %s Frames: %d, fps: %d, version: %f", basename, numberofframes, fps, version);
00285 }
00286
00287 void FAPdata::ScaleFAPs(int frameind, FDPdata*FDPs, const FAPUdata *FAPUs)
00288 {
00289 int fapnum;
00290
00291 for(fapnum=0;fapnum<NUMBER_OF_FAPS;fapnum++)
00292 Fap2LFap(fapnum, frameind, FDPs, FAPUs);
00293 }
00294
00295 void FAPdata::LoadFAPFrame(FAPFrame*frame, FDPdata*FDPs, const FAPUdata *FAPUs)
00296 {
00297 frames[0] = *frame;
00298 ScaleFAPs(0, FDPs, FAPUs);
00299 }
00300
00301 void FAPdata::Fap2LFap(int fapnum, int frameind, FDPdata*FDPs, const FAPUdata *FAPUs)
00302 {
00303
00304
00305
00306 float ***FDPfp = FDPs->featurePoints;
00307
00308
00309 if(fapnum>=29 && fapnum<31)
00310 {
00311 if(frames[frameind].FAPs[fapnum].active)
00312 lfaps[fapnum] = (float)((((float)frames[frameind].FAPs[fapnum].value)/FAPUs->IRISDFAPU)+(fabs(FDPfp[3][2][1] - FDPfp[3][4][1])/3.0));
00313 else
00314 lfaps[fapnum] = (float)(fabs(FDPfp[3][2][1] - FDPfp[3][4][1])/3.0);
00315 }
00316
00317 else if(!frames[frameind].FAPs[fapnum].active)
00318 {
00319 lfaps[fapnum] = 0;
00320 return;
00321 }
00322
00323
00324
00325 if((fapnum>=3 && fapnum<19) || fapnum==44 || fapnum==46 || (fapnum>=51 && fapnum<53) || (fapnum>=55 && fapnum<61))
00326 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/FAPUs->MNSFAPU;
00327 else if(fapnum>=19 && fapnum<23)
00328 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/FAPUs->IRISDFAPU;
00329 else if(fapnum>=23 && fapnum<27)
00330 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/100000.0f;
00331 else if((fapnum>=27 && fapnum<29) || (fapnum>=31 && fapnum<43))
00332 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/FAPUs->ENSFAPU;
00333 else if(fapnum==43 || fapnum==45 || (fapnum>=53 && fapnum<55) || (fapnum>=61 && fapnum<NUMBER_OF_FAPS))
00334 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/FAPUs->MWFAPU;
00335 else if(fapnum>=47 && fapnum<51)
00336 lfaps[fapnum] = ((float)frames[frameind].FAPs[fapnum].value)/100000.0f;
00337 else
00338 {
00339 lfaps[fapnum] = 0;
00340 return;
00341 }
00342
00343
00344 lfaps[fapnum] *= CalibrateFaps(fapnum, FAPUs);
00345
00346
00347
00348
00349
00350
00351 }
00352