char *make_polycos(char *parfilenm, infodata * idata, char *polycofilenm) { FILE *tmpfile; int tracklen; double T, fmid = 0.0, epoch; char *command, *psrname, scopechar; char *pcpathnm, *pcfilenm; psrparams psr; /* Get the path and name of the output polycofilenm */ split_path_file(polycofilenm, &pcpathnm, &pcfilenm); /* Read the parfile */ epoch = idata->mjd_i + idata->mjd_f; T = (idata->dt * idata->N) / SECPERDAY; if (!get_psr_from_parfile(parfilenm, epoch, &psr)) { fprintf(stderr, "\nError: Cannot read parfile '%s' in make_polycos()\n\n", parfilenm); exit(-1); } /* Generate temp directory */ char tmpdir[] = "/tmp/polycoXXXXXX"; if (mkdtemp(tmpdir) == NULL) { fprintf(stderr, "\nError: Cannot generate temp dir '%s' in make_polycos()\n\n", tmpdir); exit(-1); } /* Copy the parfile to the temp directory */ command = (char *) calloc(strlen(parfilenm) + strlen(tmpdir) + strlen(pcfilenm) + strlen(pcpathnm) + 200, 1); sprintf(command, "cp %s %s/pulsar.par", parfilenm, tmpdir); if (system(command) != 0) { fprintf(stderr, "\nError: Cannot copy parfile '%s' to tmpdir '%s' in make_polycos()\n\n", parfilenm, tmpdir); exit(-1); } /* change to temp dir */ char *origdir = getcwd(NULL, 0); chdir(tmpdir); /* Write tz.in */ if (strcmp(idata->telescope, "GBT") == 0) { scopechar = '1'; tracklen = 12; } else if (strcmp(idata->telescope, "Arecibo") == 0) { scopechar = '3'; tracklen = 3; } else if (strcmp(idata->telescope, "VLA") == 0) { scopechar = '6'; tracklen = 6; } else if (strcmp(idata->telescope, "Parkes") == 0) { scopechar = '7'; tracklen = 12; } else if (strcmp(idata->telescope, "Jodrell") == 0) { scopechar = '8'; tracklen = 12; } else if ((strcmp(idata->telescope, "GB43m") == 0) || (strcmp(idata->telescope, "GB 140FT") == 0) || (strcmp(idata->telescope, "NRAO20") == 0)) { scopechar = 'a'; tracklen = 12; } else if (strcmp(idata->telescope, "Nancay") == 0) { scopechar = 'f'; tracklen = 4; } else if (strcmp(idata->telescope, "Effelsberg") == 0) { scopechar = 'g'; tracklen = 12; } else if (strcmp(idata->telescope, "LOFAR") == 0) { scopechar = 't'; tracklen = 12; } else if (strcmp(idata->telescope, "WSRT") == 0) { scopechar = 'i'; tracklen = 12; } else if (strcmp(idata->telescope, "GMRT") == 0) { scopechar = 'r'; tracklen = 12; } else if (strcmp(idata->telescope, "LWA") == 0) { scopechar = 'x'; tracklen = 12; } else if (strcmp(idata->telescope, "SRT") == 0) { scopechar = 'z'; tracklen = 12; } else if (strcmp(idata->telescope, "Geocenter") == 0) { scopechar = 'o'; tracklen = 12; } else { /* Barycenter */ printf("Defaulting to barycenter for polyco generation...\n"); scopechar = '@'; tracklen = 12; } /* For optical, X-ray, or gamma-ray data */ if (scopechar != '@' && scopechar != 'o') { fmid = idata->freq + (idata->num_chan / 2 - 0.5) * idata->chan_wid; } else { fmid = 0.0; } printf("Generating polycos for PSR %s.\n", psr.jname); tmpfile = chkfopen("tz.in", "w"); fprintf(tmpfile, "%c %d 60 12 430\n\n\n%s 60 12 %d %.5f\n", scopechar, tracklen, psr.jname, tracklen, fmid); fclose(tmpfile); //sprintf(command, "echo %d %d | tempo -z -f %s > /dev/null", sprintf(command, "echo %d %d | tempo -z -f pulsar.par > /dev/null", idata->mjd_i - 1, (int) ceil(epoch + T)); if (system(command) != 0) { fprintf(stderr, "\nError: Problem running TEMPO in '%s' for make_polycos()\n\n", tmpdir); exit(-1); } else { sprintf(command, "cp polyco.dat %s/%s", pcpathnm, pcfilenm); if (system(command) != 0) { fprintf(stderr, "\nError: Cannot copy polyco.dat in '%s' to '%s' make_polycos()\n\n", tmpdir, polycofilenm); exit(-1); } remove("polyco.dat"); remove("pulsar.par"); remove("tempo.lis"); remove("tz.in"); remove("tz.tmp"); } chdir(origdir); free(origdir); free(pcpathnm); free(pcfilenm); free(command); remove(tmpdir); psrname = (char *) calloc(strlen(psr.jname) + 1, sizeof(char)); strcpy(psrname, psr.jname); return psrname; }
char *make_polycos(char *parfilenm, infodata * idata) { FILE *tmpfile; int tracklen; double T, fmid = 0.0, epoch; char command[100], *psrname, scopechar; psrparams psr; /* Read the parfile */ epoch = idata->mjd_i + idata->mjd_f; T = (idata->dt * idata->N) / SECPERDAY; if (!get_psr_from_parfile(parfilenm, epoch, &psr)) { printf("\nError: Cannot read parfile '%s'\n\n", parfilenm); exit(0); } /* Write tz.in */ if (strcmp(idata->telescope, "GBT") == 0) { scopechar = '1'; tracklen = 12; } else if (strcmp(idata->telescope, "Arecibo") == 0) { scopechar = '3'; tracklen = 3; } else if (strcmp(idata->telescope, "VLA") == 0) { scopechar = '6'; tracklen = 6; } else if (strcmp(idata->telescope, "Parkes") == 0) { scopechar = '7'; tracklen = 12; } else if (strcmp(idata->telescope, "Jodrell") == 0) { scopechar = '8'; tracklen = 12; } else if ((strcmp(idata->telescope, "GB43m") == 0) || (strcmp(idata->telescope, "GB 140FT") == 0)){ scopechar = 'a'; tracklen = 12; } else if (strcmp(idata->telescope, "Nancay") == 0) { scopechar = 'f'; tracklen = 4; } else if (strcmp(idata->telescope, "Effelsberg") == 0) { scopechar = 'g'; tracklen = 12; } else if (strcmp(idata->telescope, "LOFAR") == 0) { scopechar = 't'; tracklen = 12; } else if (strcmp(idata->telescope, "FR606") == 0) { scopechar = 'u'; tracklen = 12; } else if (strcmp(idata->telescope, "UTR-2") == 0) { scopechar = 'w'; tracklen = 12; } else if (strcmp(idata->telescope, "DE601") == 0) { scopechar = 'x'; tracklen = 12; } else if (strcmp(idata->telescope, "UK608") == 0) { scopechar = 'y'; tracklen = 12; } else if (strcmp(idata->telescope, "WSRT") == 0) { scopechar = 'i'; tracklen = 12; } else if (strcmp(idata->telescope, "GMRT") == 0) { scopechar = 'r'; tracklen = 12; } else if (strcmp(idata->telescope, "Geocenter") == 0) { scopechar = 'o'; tracklen = 12; } else { /* Barycenter */ printf("Defaulting to barycenter for polyco generation...\n"); scopechar = '@'; tracklen = 12; } /* For optical, X-ray, or gamma-ray data */ if (scopechar != '@' && scopechar != 'o') { fmid = idata->freq + (idata->num_chan / 2 - 0.5) * idata->chan_wid; } else { fmid = 0.0; } printf("Generating polycos for PSR %s.\n", psr.jname); tmpfile = chkfopen("tz.in", "w"); fprintf(tmpfile, "%c %d 60 12 430\n\n\n%s 60 12 %d %.5f\n", scopechar, tracklen, psr.jname, tracklen, fmid); fclose(tmpfile); sprintf(command, "echo %d %d | tempo -z -f %s > /dev/null", idata->mjd_i-1, (int) ceil(epoch + T), parfilenm); // printf("making polycos: '%s'\n", command); system(command); remove("tz.in"); psrname = (char *) calloc(strlen(psr.jname) + 1, sizeof(char)); strcpy(psrname, psr.jname); return psrname; }