/****************************************************************/ /* sm_ps_fout.c */ /* Stack plot of magnetograms K.Hayashi */ /****************************************************************/ #include #include #include #include #include #include #include #include #include "mplt_stn2.h" #define O_RDONLY 0000000 /* Open for reading only */ int h_w=2000; main(argc,argv) int argc; char **argv; { char ay[3]="",date_h[50]="",input,fout[3]="",stab[4]="",mst[3]="",dst[3]=""; char fnout[30]="",fbuf[4096]=""; int i,ii,j,ifc,ist=0,smn,sdy,dlb,eday,rsft,hhi,hfo,nofb,lbm[3],lbd[3]; static int tnofp,ntpdv,tfn,xysd,cnod; short *xx,*yy,*zz, hh,ix0,iy0,iz0,ipx,ipy,ipz; long ix,iy,iz,dix,diy,diz,dxif,dyif,dzif; long ixx[1440],iyy[1440],izz[1440]; long sx,sy,sz; int t,status1,status2,status3,status4,status5,status6; FILE *tp; FILE *fp; double fmi,mazm,mcos,msin,deg,flt; struct { short x[1440]; short y[1440]; short z[1440];} fo[6]; if(argc<=1) {printf("argv's\n\ 1:file name:\"99_1231.erk\"\n\ [2:Total number of pages:<1>\n\ [3:nT par div(4mm): 12(12.5)||25||50||100||<200> ]]\n"); exit(0); } sprintf(sfn,"%s",argv[1]); if(argc>2)tnofp=atoi(argv[2]);else tnofp=1; if(argc>3)ntpdv=atoi(argv[3]);else ntpdv=200; xysd=0; tfn=3; printf("argc=%d fnam=%s pages=%d ntpdv=%d mod=%d dpp=%d \n",argc, sfn, tnofp, ntpdv,xysd,tfn); if(ntpdv==200)rsft=4; else if(ntpdv==100)rsft=3; else if(ntpdv==50)rsft=2; else if(ntpdv==25)rsft=1; else if(ntpdv==12)rsft=0; else {printf("2nd arg must be 200||100||50|25|12"); exit(1);} printf("Period %s Days %d \n",sfn, tfn); stn_db_read(); strncpy(ay,sfn,2); strncpy(stab,sfn+8,3); /*strcat(stab,'\0');*/ strncpy(mst,sfn+3,2); strncpy(dst,sfn+5,2); year=atoi(ay); sdy=atoi(dst); smn=atoi(mst); for (i=0;strcmp(stab,stn[i].abr)!=0 ;i++) ist=i+1; printf("sfn=%s mstn=%d stab=%s stn.abr=%s ist=%d\n",sfn, mstn, stab, stn[19].abr,ist ); printf("Starting Loop for %d pages",tnofp); while(1){ eday=1+(sdy+tfn-2)%mnn[smn]; sprintf(fnout,"_ps/%02d/%s/%02d%02d%02d-%02d%sxyz.ps", year,stab,year,smn,sdy,eday,stab); for(ifc=0;ifc>",msfn[ist]); if((handle[ist]= open(msfn[ist], O_RDONLY))==-1) break; read(handle[ist],buf,8640); sx=sy=sz=0;dix=diy=diz=dxif=dyif=dzif=0; for (ii=0; ii<1440;ii++){ i=ii*6; if ((buf[i+1]==0x80) && (buf[i]==0)){ix=0;ix0=0;buf[i+1]=0;} else {ix0=(((short)buf[i+1])<<8)|(short)buf[i]; dix=(int)ix0-(int)ipx; if (((dix>32767)||(dix<-32767)) &&((dix *dxif)<=0)) dxif+=dix/labs(dix); ix=(int)ix0-dxif*65536; } ipx=ix0;sx+=ix; ixx[ii]=ix; if (buf[i+3]==0x80 && buf[i+2]==0){iy0=0;iy=0;buf[i+3]=0;} else {iy0=(((short)buf[i+3])<<8)|(short)buf[i+2]; diy=(int)iy0-(int)ipy; if (((diy>32767)||(diy<-32767))&& ((diy *dyif)<=0)) dyif+=diy/labs(diy); iy=(int)iy0-dyif*65536; } ipy=iy0;sy+=iy; iyy[ii]=iy; if (buf[i+5]==0x80 && buf[i+4]==0){iz0=0;iz=0;buf[i+5]=0;} else {iz0=(((short)buf[i+5])<<8)|(short)buf[i+4]; diz=(int)iz0-(int)ipz; if (((diz>32767)||(diz<-32767))&& ((diz *dzif)<=0)) dzif+=diz/labs(diz); iz=(int)iz0-dzif*65536; } if(strcmp(stn[ist].abr,"upv")==0)iz=0; ipz=iz0; sz+=iz; izz[ii]=iz; } sx/=1440; sy/=1440; sz/=1440; xx=fo[ifc].x; yy=fo[ifc].y; zz=fo[ifc].z; fmi=stn[ist].mazm*M_PI/180.0; flt=stn[ist].lg *M_PI/180.0; hh=0; for (ii=0; ii<1440;ii++){ ix=ixx[ii] -sx; iy=iyy[ii] -sy; iz=izz[ii] -sz; /* printf("%d %d %d\n",ix,iy,iz,fmi);*/ if(xysd==0){ mcos=cos(fmi)*stn[ist].fac; msin=sin(fmi)*stn[ist].fac; *xx++=(short)(((int)( mcos * (double)ix + msin * (double)iy))>>rsft); *yy++=(short)(((int)(-msin * (double)ix + mcos * (double)iy))>>rsft); *zz++=(short)(((int)( stn[ist].fac * (double)iz) )>>rsft); /* 0.01 mm <==> 0.125*2^(rsft-2) nT */ } } } close(handle[ist]); } /* ======================================================== */ /* sdy=atoi(dst); smn=atoi(mst); */ sprintf(date_h,"%s %02d - %s %02d, 19%02d %s) ashow\n",mnam[smn],sdy,mnam[smn+(sdy+tfn-2)/mnn[smn]],eday,year,stn[ist].nam); /* xyzxyzxyzxyzxysxyzxyzxyzxyz */ /* if((tp=fopen(fnout,"at"))==NULL) printf("Could not open %s\n",fnout); */ if (y_f[ist]!=0){ /* if (fork ()==0){ execlp("/bin/cp","cp","./prlg_s.ps",fnout,0); exit(1); } else { wait(&status1); */ if((tp=fopen(fnout,"wt"))==NULL) printf("Could not open"); if((fp=fopen("./prlg_s.ps","r"))==NULL) printf("Could not open prlg_s.ps \n"); while(1){nofb=fread(fbuf,1,4096,fp);if(nofb==0)break;fwrite(fbuf,1,nofb,tp);} printf("\nOut file %s was created (%d nT/div)\n",fnout, ntpdv); if(xysd==0) fprintf(tp,"0 U@pt 0 (X,Y,Z %s",date_h); fprintf(tp,"21000 23400 0 0 0 2800 view\n"); fprintf(tp,"18600 12368 mto\n"); fprintf(tp,"0.0 [0 -12 U@pt -12 U@pt 0 0 0] //TRF F\n"); fprintf(tp,"0 -0 U@pt (%4d nT/div) ashow\n",ntpdv); fprintf(tp,"21000 21000 0 0 0 4000 view\n"); fprintf(tp,"%%Data(%s)\n%s",stn[ist].nam,view_lsty); if(xysd==0){ for(i=1;i<=tfn;i++) { /* date lable at left edge of each base line */ fprintf(tp,"21000 21000 0 0 0 4000 view\n"); hhi=h_w*(i-1)*3+1600+(i-1)*400; dlb=1+(sdy+i-2) % mnn[smn]; fprintf(tp,"0.0 [16 U@pt 0 0 -16 U@pt 0 0] //TRF F\n"); fprintf(tp,"%d %d mto\n0 U@pt 0 (%s %02d) ashow\n", 1800,hhi-500,mnam[smn + (sdy+i-2)/mnn[smn]],dlb); fprintf(tp,"0.0 [12 U@pt 0 0 -12 U@pt 0 0] //TRF F\n"); fprintf(tp,"%d %d mto\n0 U@pt 0 (Bx) ashow\n",3000,hhi); fprintf(tp,"%d %d mto\n0 U@pt 0 (By) ashow\n",3000,hhi+h_w); fprintf(tp,"%d %d mto\n0 U@pt 0 (Bz) ashow\n",3000,hhi+h_w+h_w); fprintf(tp, "5 [50 50] 0 0.0 2 0 lsty\n 3790 %d 18210 %d l\n",hhi,hhi); fprintf(tp, "5 [50 50] 0 0.0 2 0 lsty\n 3790 %d 18210 %d l\n",hhi+h_w,hhi+h_w); fprintf(tp, "5 [50 50] 0 0.0 2 0 lsty\n 3790 %d 18210 %d l\n",hhi+h_w+h_w,hhi+h_w+h_w); } fprintf(tp,"21000 21000 0 0 0 4000 view\n"); for (ii=0;ii=tnofp) break; sdy=day; smn=mon; } } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ int opf(int ist, int ifc, int *lbm, int *lbd) { int dy,dm,dm1,dd, i; char ay[3]="",am[3]="",ad[3]=""; while(1){ strncpy(ay,sfn,2);dy=atoi(ay); mnn[2]=29-(dy%4+3)/4; strncpy(am,sfn+3,2);dm=atoi(am); strncpy(ad,sfn+5,2);dd=atoi(ad); /* year=(int)dy; mon=(int)dm; day=(int)dd; */ /* printf("ay %s am %s ad %s year=%d \n",ay,am, ad, year); */ i=ist; sprintf(msfn[i],"../magnet/%s/%02d/m/%02d_%02d%02dm.%s",stn[i].dr,dy,dy,dm,dd,stn[i].abr); if((handle[i]= open(msfn[i], O_RDONLY)) == -1){ printf( ">>>>>No data \"%s\" \n", msfn[i]); y_f[i]=0; } else y_f[i]=1; close(handle[i]); lbd[ifc]=dd; lbm[ifc]=dm; dm1=dm+dd/mnn[dm];dd=1+dd%mnn[dm]; dm=dm1; if(dm>=13){dy++;dm=1;dd=1;} dy %=100; sprintf(sfn,"%2d_%02d%02dm",dy,dm,dd); year=(int)dy; mon=(int)dm; day=(int)dd; if(y_f[i]==1)break; } return(1); } /* ********************************************* */ void stn_db_read(){ int i,ii; char dmm[3],dm1[8],dm2[4], dm3[6],dm4[6],dm5[6]; FILE *fp; if ((fp=fopen("fx1stndb.txt","r"))==0)fprintf(stderr,"fx1stndb.txt no exist!"); i=0; for(ii=0;ii<22;ii++){ fscanf(fp,"%14c %s %s %s %s %s %s %s%2c", stn[i].nam, stn[i].abr, stn[i].dr, dm1,dm2,dm3,dm4,dm5,dmm); stn[i].mazm=atof(dm1); stn[i].fac=atof(dm2); stn[i].h=atoi(dm3); stn[i].lx=atoi(dm4);stn[i].lg=atof(dm5); if (stn[i].h!=0)i++; } mstn=i; close(fp); /* for (i=0;i