Пример #1
0
void Colorization::collectOptions()
{

    Options options = getOptions();

    std::vector<Option> dimensions = options.getOptions("dimension");
    std::vector<Option>::const_iterator i;

    if (dimensions.size() == 0)
    {
        // No dimension mappings were given. We'll just assume
        // Red => 1
        // Green => 2
        // Blue => 3

        m_band_map.insert(std::pair<std::string, boost::uint32_t>("Red", 1));
        m_scale_map.insert(std::pair<std::string, double>("Red", 1.0));
        m_band_map.insert(std::pair<std::string, boost::uint32_t>("Green", 2));
        m_scale_map.insert(std::pair<std::string, double>("Green", 1.0));
        m_band_map.insert(std::pair<std::string, boost::uint32_t>("Blue", 3));
        m_scale_map.insert(std::pair<std::string, double>("Blue", 1.0));
        log()->get(logDEBUG) << "No dimension mappings were given. Using default mappings." << std::endl;

        return;
    }
    for (i = dimensions.begin(); i != dimensions.end(); ++i)
    {
        boost::optional<Options const&> dimensionOptions = i->getOptions();
        boost::uint32_t band_id(65536);
        double scale(1.0);
        std::string name = i->getValue<std::string>();
        if (dimensionOptions)
        {
            band_id = dimensionOptions->getValueOrThrow<boost::uint32_t>("band");
            scale = dimensionOptions->getValueOrDefault<double>("scale", 1.0);
        }
        else
        {
            std::ostringstream oss;
            oss << "No band and scaling information given for dimension '" << name<< "'";
            throw pdal_error(oss.str());
        }

        m_band_map.insert(std::pair<std::string, boost::uint32_t>(name, band_id));
        m_scale_map.insert(std::pair<std::string, double>(name, scale));
    }

    return;
}
Пример #2
0
void nemo_main()
{
    stream instr, outstr;
    int    i, n, naxis1, naxis2, naxis[2], moment;
    double edges[2];
    struct fits_header fh;
    struct my_table_header r;
    char   *record, *cp, mesg[80];
    string *hitem;
    FITS   *map;

/* Setup */
    
    instr = stropen(getparam("in"),"r");    /* open input */
    moment = getiparam("moment");
    if (moment < 1 || moment > 2) error("moment must be 1 or 2");

    
    band = getiparam("band");
    if (band < 1 || band > 10) {
        band = band_id(getdparam("band"));
        if (band < 1) error("Invalid DIRBE band");
    }

    naxis[0] = nlon = getiparam("nlong");
    naxis[1] = nlat = getiparam("nlat");
    grid = (entryptr *) allocate(nlat*nlon*sizeof(entryptr));
    for (i=0; i<nlat*nlon; i++)
        grid[i] = NULL;
    cp = getparam("coord");
    switch (*cp) {
      case 'g':  gal_coord = TRUE; break;
      case 'e':  gal_coord = FALSE; break;
      default: error("Bad coordinate system choosen; try gal or ecl");
    }

    if (nemoinpd(getparam("long"),edges,2) != 2) error("long= needs 2 values");
    if (edges[0] <= edges[1]) error("long= needs left edge to be largest");
    lonmin = edges[0];
    lonmax = edges[1];
    dlon = (lonmax-lonmin)/(float)nlon;
    if (nemoinpd(getparam("lat"),edges,2) != 2) error("lat= needs 2 values");
    if (edges[0] >= edges[1]) error("lat= needs right edge to be largest");
    latmin = edges[0];
    latmax = edges[1];
    dlat = (latmax-latmin)/(float)nlat;
    dprintf(1,"GridSize: %d * %d Pixels: %g * %g\n",nlon,nlat,dlon,dlat);
    gc_middle = (lonmax < 0.0 && lonmin > 0.0); /* see if to use SYM_ANGLE */
    ncell = getiparam("ncell");
    sigma2 = 2*sqr(getdparam("sigma"));

/* Open output FITS file, and write a small yet descriptive enough header */
    
    map = fitopen(getparam("out"),"new",2,naxis);
    fitwrhda(map,"CTYPE1", gal_coord ? "GLON" : "ELON");
    fitwrhdr(map,"CRPIX1",(float) 1.0);     /* should use center */
    fitwrhdr(map,"CRVAL1",(float) (lonmin + 0.5 * dlon));
    fitwrhdr(map,"CDELT1",(float) dlon);
    
    fitwrhda(map,"CTYPE2", gal_coord ? "GLAT" : "ELAT");
    fitwrhdr(map,"CRPIX2",(float) 1.0);     /* should use center */
    fitwrhdr(map,"CRVAL2",(float) (latmin + 0.5 * dlat));
    fitwrhdr(map,"CDELT2",(float) dlat);

    fitwrhda(map,"TELESCOP","COBE");
    fitwrhda(map,"INSTRUME","DIRBE");
    fitwrhda(map,"ORIGIN","NEMO processing on CDAC data");
    fitwrhda(map,"BUNIT","MJy/sr");


    sprintf(mesg,"NEMO: %s VERSION=%s",getargv0(),getparam("VERSION"));
    fitwra(map,"HISTORY", mesg);
    hitem = ask_history();
    fitwra(map,"HISTORY","NEMO: History in reversed order");
    for (i=0, cp=hitem[0]; cp != NULL; i++) {
        fitwral(map,"HISTORY",cp);
        cp = hitem[i+1];		/* point to next history item */
    }
        

/* Open input file, and process all rows */
    
    fts_zero(&fh);		               /* clean out header */
    n = fts_rhead(&fh,instr);	               /* read primary header */
    if (n<0) error("Error reading primary HDU");
    fts_sdata(&fh,instr);                      /* and skip data .. */

    fts_zero(&fh);                             /* clean out header */
    n = fts_rhead(&fh,instr);	               /* read primary header */
    if (n<0) error("Error reading second HDU");
    naxis1 = fh.naxisn[0];                      /* size of one row */
    naxis2 = fh.naxisn[1];                      /* number of rows */
    record = allocate(naxis1);
    for (i=0; i<naxis2; i++) {                  /* loop reading rows */
        n = fread(record,1,naxis1,instr);
        if (n != naxis1) error("Early EOF on record %d",i+1);
        stuffit(&fh,record,&r);
    }
    printf("Used %d/%d points in gridding\n",nused,naxis2);

/* map the data on a grid */

    mapit(map,moment);

/* finish off */

    fitclose(map);
    strclose(instr);
}