
/* P arrival time adjusted by CWBdata									*/
/* Pob:P observation time =  secp - ( event occur time +60)				*/
/* Pth:P theorem     time =  (dist and depth=0) to theorem function		*/



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"station_info.h"
#include<math.h>
#include<stdbool.h>



FILE *filename;

struct event{
			char year[5];
			char month[5];
			char day[10];
			char hr[10];
			char min[10];
			char sec[10];
			char depth[10];
		} eve;

struct sensor{
			char name[5];
			char bbb[5];/*what's this???????????*/
			char min[10];
			char sec[10];
			char resp[10];
			char wtp[10];
		} sen;

char filenamec[100],path[100],datac,sory[5]/*sensor or eve.year */;
char tmp[100],dist[5];/*between sensor and hypercenter*/

int i,sensor=0,y=0,s=0,k=1;
double theorem(double ddiisstt,double fedepth);
float Pob,fdist,fsmin,fssec,femin,fesec,fedepth,Pth,obvelo,thvelo,fswtp;
/*	fxxxx=float  xxxxx              */
/*	ex: fedepth=float event depth   */
/*  ex: fssec  =float sensor second */
int main(void){
	
	filename=fopen("filename.txt","r+");
	//printf("       dist   M   Sec      Pob   Pth   obvel  thvel Count\n");
	while(1){
		
		fscanf(filename,"%s",filenamec);//filename = 201301DB.MAN
		if(feof(filename)==1)break;

		FILE *data;
		strcpy(path,"/home/m101019/Dropbox/EW/implement/CWB/pfile/");
		strcat(path,filenamec);  //path = /pfile/201412DB.MAN
				
		data=fopen(path,"r+");
		//printf("%s\n\n",path);


		if(data){// grab the data from MAN file.
				while(1){
					for(i=0;i<=3;i++){
							fscanf(data,"%c",&datac);
							sory[i]=datac;
					}
					//printf("%s\n",sory);
					if(strcmp(sory,"2013")==0 || strcmp(sory,"2014")==0|| strcmp(sory,"9999")==0){
							strncpy(eve.year,sory,4);
							for(i=0;i<=1;i++){
									fscanf(data,"%c",&datac);
									eve.month[i]=datac;
							}
							for(i=0;i<=1;i++){
									fscanf(data,"%c",&datac);
									eve.day[i]=datac;
							}
							for(i=0;i<=1;i++){
									fscanf(data,"%c",&datac);
									eve.hr[i]=datac;
							}
							for(i=0;i<=1;i++){
									fscanf(data,"%c",&datac);
									eve.min[i]=datac;
							}
							for(i=0;i<=5;i++){
									fscanf(data,"%c",&datac);
									eve.sec[i]=datac;
							}
							for(i=0;i<=14;i++)fscanf(data,"%c",&datac);
							for(i=0;i<=5;i++){
									fscanf(data,"%c",&datac);
									eve.depth[i]=datac;
							}		
							y=1;
					}else{
						strcpy(sen.name,sory);

						fscanf(data,"%c",&datac);
						sen.name[4]=datac;								//sen.name = " SEB " or " CHY1" length=5
						//printf("%s\n",sen.name);						
						for(i=0;i<=5;i++){
									fscanf(data,"%c",&datac);
									dist[i]=datac;					//sensor distance
						}
						for(i=0;i<=9;i++)fscanf(data,"%c",&datac);  //drop sensor az toa
						for(i=0;i<=1;i++){
									fscanf(data,"%c",&datac);
									sen.min[i]=datac;					//sensor minute	
						}
						for(i=0;i<=5;i++){
									fscanf(data,"%c",&datac);
									sen.sec[i]=datac;					//sensor sec
						}
						for(i=0;i<=5;i++){
									fscanf(data,"%c",&datac);
									sen.resp[i]=datac;					//sensor resp
						}
						for(i=0;i<=3;i++){
									fscanf(data,"%c",&datac);
									sen.wtp[i]=datac;					//sensor wtp
						}   
						s=1;
						//k++;
					}
					if(fgets(tmp,150,data)==NULL)break;

					/*****change type******/
					fdist=atof(dist);
					fssec=atof(sen.sec);
					fsmin=atof(sen.min);
					fswtp=atof(sen.wtp);		
					femin=atof(eve.min);
					fesec=atof(eve.sec);
					fedepth=atof(eve.depth);
					
					/****calculation****/
					if(s==1){	
						if(fsmin==femin){Pob=(fssec-fesec);
						}else if((fsmin+1)==femin || (fsmin+1)==(femin+60)) Pob=(fssec-fesec-60);
						else if((fsmin+2)==femin || (fsmin+2)==(femin+60)) Pob=(fssec-fesec-120);
						else if((fsmin-1)==femin || (fsmin-1)==(femin+60)) Pob=(fssec-fesec+60);
						Pth=theorem(fdist,fedepth);
					}
					obvelo=sqrt(fdist*fdist+fedepth*fedepth)/Pob;
					thvelo=sqrt(fdist*fdist+fedepth*fedepth)/Pth;
					
					/*human read format*/
					/*if(y==1 && strcmp(sen.name," ENA ")==0 &&fssec!=0 && fdist<500  && Pob>0 && Pth>0 &&fswtp <=2 && fabs(Pob-Pth)>2){   
							printf("\nY:%s M:%s D:%s H:%s MIN:%s SEC:%s DEP:%s\n",eve.year,eve.month,eve.day,eve.hr,eve.min,eve.sec,eve.depth);y=0;
							printf("        dist   M   Sec      Pob   Pth   obvel  thvel  Count  wtp   diff\n");
							y=0;
							
					}
					if(s==1 && strcmp(sen.name," ENA ")==0 && fssec!=0 && fdist<500  && Pob>0 && Pth>0 &&fswtp <=2 && fabs(Pob-Pth)>2){   
							// fdist<500  is used to ignore the dropped data 
							// Pth <0 is ignore double count
							printf("%s %s  %s  %s   ",sen.name,dist,sen.min,sen.sec);      
							printf("%.2f, %.2f,  %.2f,  %.2f,   %d,  %s, %f\n",Pob,Pth,obvelo,thvelo,k,sen.wtp,fabs(Pob-Pth));
							s=0;
							k++;
							
					}*/
					
					/*machine read format*/
					if(s==1 && strcmp(sen.name," EGC ")==0 && fssec!=0 && fdist<500  && Pob>0 && Pth>0 &&fswtp <=2 && fabs(Pob-Pth)>2){     
							
							printf("%s %s %s %s %s %s %s", eve.year , eve.month , eve.day , eve.hr , eve.min , eve.sec , eve.depth);y=0;
							printf("%s %s  %s  %s   ",sen.name , dist , sen.min , sen.sec);      
							printf("%.2f, %.2f,  %.2f,  %.2f,   %d,  %s, %f\n",Pob,Pth,obvelo,thvelo,k,sen.wtp,fabs(Pob-Pth));						
							k++;

							//printf("%.2f, %.2f, %d\n ",Pob,Pth,k);
					}
					//y=0;
					s=0;
				}
				//fgetc(stdin);
		}
		filenamec[0]='\0';
			
		
        
	}
return 0;
}







double theorem(double XB,double ZA)
{
   double Ptravel,Zc,G,G0,Theta_A,Theta_B,Xc;
   if(ZA<=40){
             G0=5.10298;
             G=0.06659;
   }else{
         G0=7.804799;
         G=0.004573;
   }
   Zc=-1*(G0/G);
   Xc=(pow(XB,2)-2*(G0/G)*ZA-pow(ZA,2))/(2*XB);
   Theta_A=atan((ZA-Zc)/Xc);
   if(Theta_A<0)Theta_A=Theta_A+M_PI;
   Theta_A=M_PI-Theta_A;
   Theta_B=atan(-1*Zc/(XB-Xc));
   Ptravel=(1/G)*log(tan((Theta_A/2))/tan((Theta_B/2)));
   return Ptravel;
}

