const BVParametersTable::SetOfBVParam&
BVParametersTable::getStandardSetOfBVParam() const
{
    using namespace diffpy::runtimepath;
    using diffpy::validators::ensureFileOK;
    static boost::scoped_ptr<SetOfBVParam> the_set;
    if (!the_set)
    {
        the_set.reset(new SetOfBVParam);
        string bvparmfile = datapath("bvparm2011sel.cif");
        ifstream fp(bvparmfile.c_str());
        ensureFileOK(bvparmfile, fp);
        // read the header up to _valence_param_B and then up to an empty line.
        LineReader lnrd;
        lnrd.commentmark = '#';
        while (fp >> lnrd)
        {
            if (lnrd.wcount() && lnrd.words[0] == "_valence_param_B")  break;
        }
        // skip to an empty line
        while (fp >> lnrd && !lnrd.isblank())  { }
        // load data lines skipping the empty or commented entries
        while (fp >> lnrd)
        {
            if (lnrd.isignored())  continue;
            BVParam bp;
            bp.setFromCifLine(lnrd.line);
            assert(!the_set->count(bp));
            the_set->insert(bp);
        }
    }
示例#2
0
static velodyne::thin::focus* make_focus( const std::string& options, double rate ) // quick and dirty
{
    std::string type = comma::name_value::map( options, "type" ).value< std::string >( "type" );
    double ratio = comma::name_value::map( options ).value( "ratio", 1.0 );
    velodyne::thin::region* region;
    if( type == "sector" ) { region = new velodyne::thin::sector( comma::name_value::parser().get< velodyne::thin::sector >( options ) ); }
    else if( type == "extents" ) { region = new velodyne::thin::extents( comma::csv::ascii< snark::math::closed_interval< double, 3 > >().get( comma::split( options, ';' )[1] ) ); }
    else { COMMA_THROW( comma::exception, "expected type (sector), got " << type ); }
    velodyne::thin::focus* focus = new velodyne::thin::focus( rate, ratio );
    focus->insert( 0, region );
    return focus;
}