Skip to content
Snippets Groups Projects
Select Git revision
  • 8c62c79d53e43620f7be9f4e0c8e921ee3449f60
  • master default protected
  • csv_export
  • ndex
  • v1.1.18-rc2
  • v1.1.17
  • v1.1.16
  • v1.1.16-rc12
  • v1.1.16-rc11
  • v1.1.16-rc10
  • v1.1.16-rc9
  • v1.1.16-rc8
  • v1.1.16-rc7
  • v1.1.16-rc4
  • v1.1.16-rc3
  • v1.1.16-rc1
  • v1.1.6-rc1
  • v1.1.15
  • v1.1.15-rc7
  • v1.1.15-rc6
  • v1.1.15-rc3
  • v1.1.15-rc1
  • v1.1.14
  • v1.1.13
24 results

analysis-panel.component.ts

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    rdprm.go 3.14 KiB
    // Aug 2021
    // Read the parameters for a calculation
    // We have magic keywords like ini_temp.
    // These are stored in a map along with string values. These are then converted
    // to floats or ints and put into a structure or variable.
    
    package mcwork
    
    import (
    	"bufio"
    	"errors"
    	"fmt"
    	"io"
    	"strconv"
    	"strings"
    )
    
    var cmdDflt = []struct {
    	key string
    	v   string
    }{
    	{"ini_temp", "20"},
    	{"final_temp", "1"},
    	{"n_step", "1000"},
    	{"n_run", "1"},
    	{"x_ini", "3,4,5"},
    	{"x_delta", "0.5"},
    	{"seed", "1637"},
    	{"foutname", ""},
    	{"fpltname", ""}, // empty means no plots of function
    	{"xpltname", ""},
    	{"verbose", ""},
    	{"dummy", ""},
    }
    
    // digest digests the map, fills out our structure and sets the seed.
    func digest(prmMap map[string]string, mcPrm *McPrm) error {
    	var err error
    /*	getf := func(s string) float32 {
    		if err != nil {
    			return 0.0
    		}
    		var r float64
    		r, err = strconv.ParseFloat(s, 32)
    		return float32(r)
    	} */
    	getf64 := func(s string) float64 {
    		if err != nil {
    			return 0.0
    		}
    		var r float64
    		r, err = strconv.ParseFloat(s, 64)
    		return r
    	}
    	getu := func(s string) uint32 {
    		if err != nil {
    			return 0
    		}
    		var u uint64
    		u, err = strconv.ParseUint(s, 10, 32)
    		return uint32(u)
    	}
    	getx := func(s string) []float32 {
    		if err != nil {
    			return nil
    		}
    		y := strings.Split(s, ",")
    		if len(y) < 1 {
    			err = fmt.Errorf("broke trying to get initial x values")
    			return nil
    		}
    
    		x := make([]float32, len(y))
    		for i, s := range y {
    			r := 0.
    			if r, err = strconv.ParseFloat(s, 32); err != nil {
    				return nil
    			}
    			x[i] = float32(r)
    		}
    		return x
    	}
    	mcPrm.IniTmp = getf64(prmMap["ini_temp"])
    	mcPrm.FnlTmp = getf64(prmMap["final_temp"])
    	mcPrm.XDlta = getf64(prmMap["x_delta"])
    	mcPrm.NStep = getu(prmMap["n_step"])
    	mcPrm.NRun = getu(prmMap["n_run"])
    	mcPrm.XIni = getx(prmMap["x_ini"])
    	mcPrm.fOutName = prmMap["foutname"]
    	mcPrm.fPltName = prmMap["fpltname"]
    	mcPrm.xPltName = prmMap["xpltname"]
    	seed = int64(getu(prmMap["seed"]))
    	if err != nil { // Only returns the first error encountered
    		return err
    	}
    	if prmMap["verbose"] != "" {
    		mcPrm.verbose = true
    	}
    	if prmMap["dummy"] != "" {
    		mcPrm.dummy = true
    	}
    	return nil
    }
    
    // spew spews out an error and known input parameters
    func spew() string {
    	s := `Input file should be of
               key value
    pairs. Values for x_ini are separated by commas without spaces.
    `
    	for _, ss := range cmdDflt {
    		s += fmt.Sprintf("%s %s\n", ss.key, ss.v)
    	}
    	return s
    }
    
    // RdPrm reads parameters from a io reader and fills out an control structure.
    func RdPrm(fp io.Reader, mcPrm *McPrm) error {
    	prmMap := make(map[string]string)
    	for _, s := range cmdDflt {
    		prmMap[s.key] = s.v // Put default values into map
    	}
    	scn := bufio.NewScanner(fp)
    	for scn.Scan() {
    		s := scn.Text()
    		if len(s) == 0 {
    			continue // blank lines
    		}
    		s = strings.ToLower(s)
    		ss := strings.Fields(s)
    		if len(ss) < 2 {
    			return fmt.Errorf("Only one field in line: %s\n%s", s, spew())
    		}
    		key := ss[0]
    		if _, ok := prmMap[key]; !ok {
    			return fmt.Errorf("unknown keyword \"%s\"\n%s", key, spew())
    		} else {
    			prmMap[key] = ss[1]
    		}
    	}
    	if err := scn.Err(); err != nil {
    		return errors.New(spew())
    	}
    	return digest(prmMap, mcPrm)
    }