Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 81 additions & 38 deletions rffit.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ int fgetline(FILE *file,char *s,int lim);
struct data read_data(char *filename,int graves,float offset);
double date2mjd(int year,int month,double day);
void mjd2nfd(double mjd,char *nfd);
double nfd2mjd(char *date);
struct point decode_line(char *line);
double modulo(double,double);
double gmst(double);
Expand Down Expand Up @@ -289,16 +290,16 @@ int main(int argc,char *argv[])
float xmin,xmax,ymin,ymax;
float xminsel,xmaxsel,yminsel,ymaxsel;
float x0=0.0,y0=0.0,x=0.0,y=0.0;
double mjd,v,v1,azi,alt,rms=0.0,day,mjdtca=56658.0,altmin=0.0,mjdmid;
double mjd,v,v1,azi,alt,rms=0.0,day,mjdtca=-1,altmin=0.0,mjdmid,mjdepoch=-1;
float t,f,vtca,foffset=0.0;
char c,nfd[32]="2014-01-01T00:00:00";
char c,nfdtca[32]="2014-01-01T00:00:00",nfd[32]="2014-01-01T00:00:00",nfdepoch[32]="2014-01-01T00:00:00";
int mode=0,posn=0,click=0;
char *catalog=NULL,*datafile=NULL,filename[64],string[64],bstar[10]=" 00000-0";
int arg=0,nobs=0;
FILE *fp,*std,*fpres;
char line0[72],line1[72],line2[72];
int ia[]={0,0,0,0,0,0,0};
float dx[]={0.1,0.1,0.35,0.35,0.6,0.6,0.85,0.85},dy[]={0.0,-0.25,0.0,-0.25,0.0,-0.25,0.0,-0.25};
float dx[]={0.1,0.1,0.35,0.35,0.6,0.6,0.85,0.85},dy[]={-0.05,-0.30,-0.05,-0.30,-0.05,-0.30,-0.05,-0.30};
int satno=-1,status;
site_t site,s0,s1;
int site_number[16],nsite=0,graves=0;
Expand Down Expand Up @@ -435,11 +436,8 @@ int main(int argc,char *argv[])
ymax=20*d.f0/C;
}

// ymin=d.freqmin;
// ymax=d.freqmax;

day=mjd2doy(d.mjd0,&year);
sprintf(xlabel,"MJD - %5.0f (%02d%03.0f)",d.mjd0,year-2000,floor(day));
mjd2nfd(d.mjd0,nfd);
sprintf(xlabel, "Date (UTC) - %s",nfd);
sprintf(ylabel,"Frequency - %.0f kHz",d.f0);

// For ever loop
Expand All @@ -451,14 +449,14 @@ int main(int argc,char *argv[])
cpgswin(0.0,1.0,-0.5,0.5);

// Buttons
cpgtext(0.12,-0.05,"Inclination");
cpgtext(0.372,-0.05,"Eccentricity");
cpgtext(0.62,-0.05,"Mean Anomaly");
cpgtext(0.87,-0.05,"B\\u*\\d");
cpgtext(0.12,-0.3,"Ascending Node");
cpgtext(0.37,-0.3,"Arg. of Perigee");
cpgtext(0.62,-0.3,"Mean Motion");
cpgtext(0.87,-0.3,"Frequency");
cpgtext(0.12,-0.10,"Inclination");
cpgtext(0.37,-0.10,"Eccentricity");
cpgtext(0.62,-0.10,"Mean Anomaly");
cpgtext(0.87,-0.10,"B\\u*\\d");
cpgtext(0.12,-0.35,"Ascending Node");
cpgtext(0.37,-0.35,"Arg. of Perigee");
cpgtext(0.62,-0.35,"Mean Motion");
cpgtext(0.87,-0.35,"Frequency");

// Toggles
for (i=0;i<7;i++) {
Expand Down Expand Up @@ -514,7 +512,7 @@ int main(int argc,char *argv[])
cpgdraw(x,y);
vtca=v;
}
mjd2nfd(mjdtca,nfd);
mjd2nfd(mjdtca,nfdtca);
cpgsci(1);
cpgsls(1);

Expand Down Expand Up @@ -545,30 +543,42 @@ int main(int argc,char *argv[])
}

// Diagnostics
cpgsvp(0.715,0.95,0.2,0.5);
cpgsvp(0.715,0.95,0.2,0.55);
cpgwnad(0.0,1.0,0.0,1.0);


sprintf(text,"Measurements: %d",nobs);
cpgtext(0.0,1.0,text);
sprintf(text,"Frequency: %.3f MHz",d.ffit/1000.0);
cpgtext(0.0,0.85,text);
sprintf(text,"rms: %.3f kHz",rms);
cpgtext(0.0,0.7,text);
sprintf(text,"TCA: %s",nfd);
cpgtext(0.0,0.55,text);

// Print/plot TCA
if (mjdtca>0) {
sprintf(text,"rms: %.3f kHz",rms);
cpgtext(0.0,0.7,text);
sprintf(text,"TCA: %s",nfdtca);
cpgtext(0.0,0.55,text);
}
// Print TLE epoch
if (satno>0) {
mjdepoch=doy2mjd(orb.ep_year,orb.ep_day);
mjd2nfd(mjdepoch,nfdepoch);
sprintf(text,"TEP: %s",nfdepoch);
cpgtext(0.0,0.425,text);
}

sprintf(text,"%s (%04d)",site.observer,site.id);
cpgtext(0.0,0.4,text);
cpgtext(0.0,0.3,text);


// Plot site numbers
for (j=0;j<nsite;j++) {
sprintf(text,"%04d",site_number[j]);
cpgsci(j+2);
if (j<5)
cpgtext(0.25*j,0.25,text);
else if (j<10)
cpgtext(0.25*(j-5),0.15,text);
else if (j<15)
cpgtext(0.25*(j-10),0.05,text);
cpgtext(0.25*j,0.15,text);
else
cpgtext(0.25*(j-5),0.05,text);
}
cpgsci(1);

Expand All @@ -582,12 +592,34 @@ int main(int argc,char *argv[])
// cpgenv(xmin,xmax,ymin,ymax,0,0);
cpglab(xlabel,ylabel,"");

// Plot TCA
if (satno>0) {
cpgsci(2);
cpgsls(2);
cpgmove(mjdtca-d.mjd0,ymin);
cpgdraw(mjdtca-d.mjd0,ymax);
cpgtext(mjdtca-d.mjd0,ymin+0.95*(ymax-ymin)," TCA");
cpgsci(1);
cpgsls(1);
}

// Plot Epoch
if (satno>0) {
cpgsci(1);
cpgsls(4);
cpgmove(mjdepoch-d.mjd0,ymin);
cpgdraw(mjdepoch-d.mjd0,ymax);
cpgtext(mjdepoch-d.mjd0,ymin+0.05*(ymax-ymin)," TEP");
cpgsci(1);
cpgsls(1);
}

// Plot orbit
if (satno>0 && plot_curve==1 && residuals==0) {

// Plot tle
if (d.satname != NULL) {
cpgmtxt("T", 3.0, 0.0, 0.0, d.satname);
cpgmtxt("T", 3.0, 0.0, 0.0, d.satname);
}
format_tle(orb,line1,line2);
cpgmtxt("T",2.0,0.0,0.0,line1);
Expand All @@ -605,7 +637,7 @@ int main(int argc,char *argv[])
s0 = get_site(site_number[j]);
if (d.p[0].rsite_id != 0) {
s1 = get_site(d.p[0].rsite_id);
}
}
color=j+2;

for (i=0;i<NMAX;i++) {
Expand Down Expand Up @@ -708,7 +740,7 @@ int main(int argc,char *argv[])

// Change
if (c=='c') {
printf("( 1) Inclination, ( 2) Ascending Node, ( 3) Eccentricity,\n( 4) Arg. of Perigee, ( 5) Mean Anomaly, ( 6) Mean Motion,\n( 7) B* drag, ( 8) Epoch (YYDDD.dd), ( 9) Satellite ID\n(10) Satellite name (11) Frequency (MHz)\n\nWhich parameter to change: ");
printf("( 1) Inclination, ( 2) Ascending Node, ( 3) Eccentricity,\n( 4) Arg. of Perigee, ( 5) Mean Anomaly, ( 6) Mean Motion,\n( 7) B* drag, ( 8) Epoch, ( 9) Satellite ID\n(10) Satellite name (11) Frequency (MHz)\n\nWhich parameter to change: ");
status=scanf("%i",&i);
if (i>=0 && i<=11) {
printf("\nNew value: ");
Expand All @@ -722,10 +754,8 @@ int main(int argc,char *argv[])
if (i==5) orb.mnan=RAD(atof(string));
if (i==6) orb.rev=atof(string);
if (i==7) orb.bstar=atof(string);
if (i==8) {
orb.ep_year=2000+(int) floor(atof(string)/1000.0);
orb.ep_day=atof(string)-1000*floor(atof(string)/1000.0);
}
if (i==8)
orb.ep_day=mjd2doy(nfd2mjd(string),&orb.ep_year);
if (i==9) orb.satno=atoi(string);
if (i==10)
d.satname=string;
Expand Down Expand Up @@ -777,8 +807,7 @@ int main(int argc,char *argv[])
printf("No points selected!\n");
} else {
rms=fit_curve(orb,ia);
//printf("rms: %.3f kHz, cf: %.6f MHz, TCA: %s\n",rms,d.ffit/1000.0,nfd);
printf("%05d %.6f %.3f %s %04d %02d%010.6f\n",orb.satno,d.ffit/1000.0,rms,nfd,d.p[0].site_id,orb.ep_year-2000,orb.ep_day);
printf("%05d %.6f %.3f %s %04d %02d%010.6f\n",orb.satno,d.ffit/1000.0,rms,nfdtca,d.p[0].site_id,orb.ep_year-2000,orb.ep_day);
redraw=1;
}
}
Expand Down Expand Up @@ -1019,7 +1048,7 @@ int main(int argc,char *argv[])

// Save
if (c=='S') {
printf("%s_%.3f_%04d_%05d.dat\n",nfd,d.ffit/1000.0,d.p[0].site_id,satno);
printf("%s_%.3f_%04d_%05d.dat\n",nfdtca,d.ffit/1000.0,d.p[0].site_id,satno);
printf("Save highlighted points, provide filename: ");
status=scanf("%s",filename);
save_data(xmin,ymin,xmax,ymax,filename);
Expand Down Expand Up @@ -1698,6 +1727,20 @@ double compute_rms(void)
return rms;
}

// nfd2mjd
double nfd2mjd(char *date)
{
int year,month,day,hour,min;
double mjd,dday;
float sec;

sscanf(date,"%04d-%02d-%02dT%02d:%02d:%f",&year,&month,&day,&hour,&min,&sec);
dday=day+hour/24.0+min/1440.0+sec/86400.0;
mjd=date2mjd(year,month,dday);

return mjd;
}

// Compute Date from Julian Day
void mjd2nfd(double mjd,char *nfd)
{
Expand Down
Loading