func secondPassTHERMO(nc *lib.Nc, m *config.Map, cfg toml.Configtoml, files []string, optDebug *bool) { regdata := regexp.MustCompile(cfg.Thecsas.Data) fmt.Fprintf(lib.Echo, "Second pass ...\n") // initialize profile var nbProfile int = 0 // loop over each files passed throw command line for _, file := range files { var line int = 0 fid, err := os.Open(file) if err != nil { log.Fatal(err) } defer fid.Close() // fmt.Printf("Read %s\n", file) // increment slice index Profile := GetProfileNumber(nc, nbProfile) nc.Variables_1D["PROFILE"] = append(nc.Variables_1D["PROFILE"].([]float64), Profile) scanner := bufio.NewScanner(fid) for scanner.Scan() { str := scanner.Text() match := regdata.MatchString(str) if match { // fill map data with information contain in read line str DecodeData(nc, m, str, Profile, file, line) // fill 2D slice for _, key := range m.Hdr { if key != "PRFL" { //fmt.Println("Line: ", line, "key: ", key, " data: ", m.Data[key]) lib.SetData(nc.Variables_2D[key], nbProfile, line, config.GetData(m.Data[key])) } } line++ } } if err := scanner.Err(); err != nil { log.Fatal(err) } nbProfile += 1 var t = lib.NewTimeFromString("Jan 02 2006 15:04:05", nc.Extras_s[fmt.Sprintf("Starttime:%d", int(Profile))]) v := t.Time2JulianDec() nc.Variables_1D["TIME"] = append(nc.Variables_1D["TIME"].([]float64), v) if v, err := lib.Position2Decimal(nc.Extras_s[fmt.Sprintf("Startlongpos:%d", int(Profile))]); err == nil { nc.Variables_1D["LONGITUDE"] = append(nc.Variables_1D["LONGITUDE"].([]float64), v) } if v, err := lib.Position2Decimal(nc.Extras_s[fmt.Sprintf("Startlatpos:%d", int(Profile))]); err == nil { nc.Variables_1D["LATITUDE"] = append(nc.Variables_1D["LATITUDE"].([]float64), v) } } }
// read .cnv files and extract data func secondPassBTL(nc *lib.Nc, m *config.Map, cfg toml.Configtoml, files []string, optDebug *bool) { regheader := regexp.MustCompile(cfg.Seabird.Header) regheaderBTL := regexp.MustCompile(cfg.Seabird.HeaderBTL) regheaderBTL2 := regexp.MustCompile(cfg.Seabird.HeaderBTL2) // initialize profile var nbProfile int = 0 fmt.Fprintf(lib.Echo, "Second pass ...\n") // loop over each files passed throw command line for _, file := range files { var line int = 0 fid, err := os.Open(file) if err != nil { log.Fatal(err) } defer fid.Close() // fmt.Printf("Read %s\n", file) profile := GetProfileNumber(nc, cfg, file) fmt.Println("start file : ", profile) scanner := bufio.NewScanner(fid) for scanner.Scan() { str := scanner.Text() match := regheader.MatchString(str) if match { DecodeHeader(nc, cfg, str, profile, optDebug) } else { match := regheaderBTL.MatchString(str) match1 := regheaderBTL2.MatchString(str) if !match || !match1 { fmt.Println("decodedata :", line) DecodeData(nc, m, str, profile, file, line) // fill 2D slice for _, key := range m.Hdr { if key != "PRFL" { //fmt.Println("Line: ", line, "key: ", key, " data: ", m.Data[key]) lib.SetData(nc.Variables_2D[key], nbProfile, line, config.GetData(m.Data[key])) } } line = line + 1 } } } if err := scanner.Err(); err != nil { log.Fatal(err) } } }
func secondPassCTD(nc *lib.Nc, m *config.Map, cfg toml.Configtoml, files []string, optDebug *bool) { regIsHeader := regexp.MustCompile(cfg.Seabird.Header) fmt.Fprintf(lib.Echo, "Second pass ...\n") // initialize profile and pressure max var nbProfile int = 0 // loop over each files passed throw command line for _, file := range files { var line int = 0 fid, err := os.Open(file) if err != nil { log.Fatal(err) } defer fid.Close() // fmt.Printf("Read %s\n", file) profile := GetProfileNumber(nc, cfg, file) scanner := bufio.NewScanner(fid) downcast := true for scanner.Scan() { str := scanner.Text() match := regIsHeader.MatchString(str) if match { DecodeHeader(nc, cfg, str, profile, optDebug) } else { // fill map data with information contain in read line str DecodeData(nc, m, str, profile, file, line) if downcast { // fill 2D slice for _, key := range m.Hdr { if key != "PRFL" { //fmt.Println("Line: ", line, "key: ", key, " data: ", data[key]) lib.SetData(nc.Variables_2D[key], nbProfile, line, config.GetData(m.Data[key])) } } // exit loop if reach maximum pressure for the profile if m.Data["PRES"] == nc.Extras_f[fmt.Sprintf("PRES:%d", int(profile))] { downcast = false } } else { // store last julian day for end profile nc.Extras_f[fmt.Sprintf("ETDD:%d", int(profile))] = m.Data["ETDD"].(float64) //fmt.Println(presMax) } line++ } } if err := scanner.Err(); err != nil { log.Fatal(err) } // increment sclice index nbProfile += 1 // store last julian day for end profile nc.Extras_f[fmt.Sprintf("ETDD:%d", int(profile))] = m.Data["ETDD"].(float64) //fmt.Println(presMax) } fmt.Fprintln(lib.Debug, nc.Variables_1D["PROFILE"]) }
func secondPassXBT(nc *lib.Nc, m *config.Map, cfg toml.Configtoml, files []string, optDebug *bool) { regIsHeader := regexp.MustCompile(cfg.Mk21.Header) fmt.Fprintf(lib.Echo, "Second pass ...\n") // initialize profile var nbProfile int = 0 // loop over each files passed throw command line for _, file := range files { var Etat bool = true var line int = 0 fid, err := os.Open(file) if err != nil { log.Fatal(err) } defer fid.Close() // fmt.Printf("Read %s\n", file) profile := GetProfileNumber(nc, cfg, file) nc.Variables_1D["PROFILE"] = append(nc.Variables_1D["PROFILE"].([]float64), profile) scanner := bufio.NewScanner(fid) downcast := true for scanner.Scan() { str := scanner.Text() match := regIsHeader.MatchString(str) if Etat { DecodeHeader(nc, cfg, str, profile, optDebug) } else { // fill map data with information contain in read line str DecodeData(nc, m, str, profile, file, line) if downcast { // fill 2D slice for _, key := range m.Hdr { if key != "PRFL" { lib.SetData(nc.Variables_2D[key], nbProfile, line, config.GetData(m.Data[key])) //fmt.Println("Line: ", line, "key: ", key, " data: ", m.Data[key]) } } // exit loop if reach maximum pressure for the profile if m.Data["DEPTH"] == nc.Extras_f[fmt.Sprintf("DEPTH:%d", int(profile))] { downcast = false } } else { // store last julian day for end profile //nc.Extras_f[fmt.Sprintf("ETDD:%d", int(profile))] = m.Data["ETDD"].(float64) //fmt.Println(presMax) } line++ } if match { Etat = false } } if err := scanner.Err(); err != nil { log.Fatal(err) } // increment sclice index nbProfile += 1 // store last julian day for end profile //nc.Extras_f[fmt.Sprintf("ETDD:%d", int(profile))] = m.Data["ETDD"].(float64) //fmt.Println(presMax) value := nc.Extras_s["DATE"] + " " + nc.Extras_s["HEURE"] value = lib.ConvertDate(value) var t = lib.NewTimeFromString("Jan 02 2006 15:04:05", value) v := t.Time2JulianDec() nc.Variables_1D["TIME"] = append(nc.Variables_1D["TIME"].([]float64), v) } fmt.Fprintln(lib.Debug, nc.Variables_1D["PROFILE"]) }