示例#1
0
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;
}
示例#2
0
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;
}