Example #1
0
BWA::BWA(const char* ann_filename,
	 const char* amb_filename,
	 const char* pac_filename,
	 const char* forward_bwt_filename, 
	 const char* forward_sa_filename, 
	 const char* reverse_bwt_filename, 
	 const char* reverse_sa_filename) 
{
  // Load the bns (?) and reference
  bns = bns_restore_core(ann_filename,amb_filename,pac_filename);
  reference = new ubyte_t[bns->l_pac/4+1];
  rewind(bns->fp_pac);
  fread(reference, 1, bns->l_pac/4+1, bns->fp_pac);
  fclose(bns->fp_pac);
  bns->fp_pac = NULL;

  // Load the BWTs (both directions) and suffix arrays (both directions)
  bwts[0] = bwt_restore_bwt(forward_bwt_filename);
  bwt_restore_sa(forward_sa_filename, bwts[0]);
  bwts[1] = bwt_restore_bwt(reverse_bwt_filename);
  bwt_restore_sa(reverse_sa_filename, bwts[1]);
  load_default_options();

  // Always reinitialize the random seed whenever a new set of files are loaded.
  initialize_random_seed();

  // initialize the bwase subsystem
  bwase_initialize();
}
Location_options parse_options_pf (Pf *pf)
{
	Location_options o;
	char *s;  /* string buffer */
	int i;
	int recenter=0;  /* recenter flag */

	o = load_default_options();
	s = pfget_string(pf,"arrival_residual_weight_method");
	/* Note this implicitly accepts the default if the keyword is missing */
	if(s != NULL)
	{
		if(!strcasecmp(s,"bisquare")) o.atime_residual_weight = BISQUARE;
		if(!strcasecmp(s,"thomson")) o.atime_residual_weight = THOMSON;
		if(!strcasecmp(s,"huber")) o.atime_residual_weight = HUBER;
		if(!strcasecmp(s,"none")) o.atime_residual_weight = NONE;
	}
	/* Do the same for slowness */
	s = pfget_string(pf,"slowness_residual_weight_method");
	if(s != NULL)
	{
		if(!strcasecmp(s,"bisquare")) o.slow_residual_weight = BISQUARE;
		if(!strcasecmp(s,"thomson")) o.slow_residual_weight = THOMSON;
		if(!strcasecmp(s,"huber")) o.slow_residual_weight = HUBER;
		if(!strcasecmp(s,"none")) o.slow_residual_weight = NONE;
	}

	o.atime_distance_weight = pfget_boolean_wdef(pf,
		"time_distance_weighting",o.atime_distance_weight);
	o.slow_distance_weight = pfget_boolean_wdef(pf,
			"slowness_distance_weighting",o.slow_distance_weight);
	o.slowness_weight_scale_factor = (float) pfget_double_wdef(pf,
				"slowness_weight_scale_factor",
				o.slowness_weight_scale_factor);
	o.min_error_scale = (float) pfget_double_wdef(pf,
				"min_error_scale",o.min_error_scale);
	o.max_error_scale = (float) pfget_double_wdef(pf,
					"max_error_scale",o.max_error_scale);
	for(i=0;i<4;++i) o.fix[i] = 0;
	if(pfget_boolean_wdef(pf,"fix_longitude",0)) o.fix[0] = 1;
	if(pfget_boolean_wdef(pf,"fix_latitude",0)) o.fix[1] = 1;
	if(pfget_boolean_wdef(pf,"fix_depth",0)) o.fix[2] = 1;
	if(pfget_boolean_wdef(pf,"fix_origin_time",0)) o.fix[3] = 1;
	if(pfget_boolean_wdef(pf,"recenter",0)) recenter = 1;
	s = pfget_string(pf,"generalized_inverse");
	if(s != NULL)
	{
	    if(!strcasecmp(s,"marquardt"))
	    {
		o.min_relative_damp = (float) pfget_double_wdef(pf,
			"min_relative_damp",o.min_relative_damp);
		if(o.min_relative_damp < FLT_EPSILON)
		{
			elog_log(0,"Warning:  minimum relative damping must be at least single precision epsilon.\nParameter file wanted %f\nReset to %f\n",
				o.min_relative_damp, FLT_EPSILON);
			o.min_relative_damp = FLT_EPSILON;
		}
		o.max_relative_damp = (float) pfget_double_wdef(pf,
				"max_relative_damp",o.max_relative_damp);
		o.damp_adjust_factor = (float) pfget_double_wdef(pf,
			"damp_adjust_factor",o.damp_adjust_factor);
		if(recenter)
			o.generalized_inverse = DAMPED_RECENTERED;
		else
			o.generalized_inverse = DAMPED_INVERSE;
	    }
	    if(!strcasecmp(s,"pseudoinverse"))
	    {
		o.sv_relative_cutoff = (float) pfget_double_wdef(pf,
				"singular_value_cutoff",o.sv_relative_cutoff);
		if(recenter)
			o.generalized_inverse = PSEUDO_RECENTERED;
		else
			o.generalized_inverse = PSEUDOINVERSE;
	    }
	}
	o.depth_ceiling = (float) pfget_double_wdef(pf,
				"depth_ceiling",o.depth_ceiling);
	o.depth_floor = (float) pfget_double_wdef(pf,
			"depth_floor",o.depth_floor);
	o.step_length_scale_factor = (float) pfget_double_wdef(pf,
			"step_length_scale_factor",o.step_length_scale_factor);
	o.min_step_length_scale = (float) pfget_double_wdef(pf,
			"min_step_length_scale",o.min_step_length_scale);
	if(o.step_length_scale_factor >= 1.0) 
	{
		elog_log(0,"Step length damping factors reset\nScale factors must be less than 1.0\nResetting to default of %f\n",DEFAULT_SLSF);
		o.step_length_scale_factor = DEFAULT_SLSF;
		if(o.min_step_length_scale >= o.step_length_scale_factor)
		{
			
			o.min_step_length_scale = (float)pow(DEFAULT_SLSF,SLSF_POW_MIN);
			elog_log(0,"Min step length scale also reset to %f\n",
					o.min_step_length_scale);
		}
	}
	if(o.min_step_length_scale >= o.step_length_scale_factor)
	{
		o.min_step_length_scale = (float)pow(o.step_length_scale_factor,
								SLSF_POW_MIN);
		elog_log(0,"Min step length scale is not consistent with step length scale factor parameter\nReset to %f\n",
			o.min_step_length_scale);
	}
	o.max_hypo_adjustments = pfget_int_wdef(pf,
		"maximum_hypocenter_adjustments",o.max_hypo_adjustments);
	o.dx_convergence = (float) pfget_double_wdef(pf,
		"deltax_convergence_size",o.dx_convergence);
	o.relative_rms_convergence = (float) pfget_double_wdef(pf,
		"relative_rms_convergence_value",o.relative_rms_convergence);
	return(o);
}