public void AsciiLogDataBusiness_UnWrapAsciiLogData_Pass() { var asciiLogData = new LasSection { SectionType = LasSectionType.AsciiLogData, AsciiLogDataLines = new LasAsciiLogDataLine[] { new LasAsciiLogDataLine { Values = new string[] { "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } } } }; _asciiLogDataBusiness.UnWrapAsciiLogData(asciiLogData); Assert.AreEqual(2, asciiLogData.AsciiLogDataLines.Count()); }
public void LasCurveInformationHelpers_HasDepthMnemonic_Pass_HasDepth() { var lasSection = new LasSection { MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine { Mnemonic = MNEM_DEPTH } } }; Assert.IsTrue(lasSection.HasDepthMnemonic()); }
public void LasCurveInformationHelpers_HasIndexMnemonic_Pass_HasIndex() { var lasSection = new LasSection { MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine { Mnemonic = MNEM_INDEX } } }; Assert.IsTrue(lasSection.HasIndexMnemonic()); }
public void LasCurveInformationHelpers_HasIndexMnemonic_Pass_NoIndex() { var lasSection = new LasSection { MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine { Mnemonic = "MNEM" } } }; Assert.IsFalse(lasSection.HasIndexMnemonic()); }
public void LasCurveInformationHelpers_HasIndexChannel_Pass_HasDept() { var lasSection = new LasSection { MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine { Mnemonic = MNEM_DEPT } } }; Assert.IsTrue(lasSection.HasIndexChannel()); }
public static LasMnemonicLine FirstMnemonic(this LasSection lasSection) { if (lasSection == null) { return(null); } if (lasSection.MnemonicsLines == null || !lasSection.MnemonicsLines.Any()) { return(null); } return(lasSection.MnemonicsLines.FirstOrDefault()); }
public static int EmptyAsciiLogDataLineCount(this LasSection lasSection) { if (lasSection == null) { return(0); } if (lasSection.AsciiLogDataLines == null || !lasSection.AsciiLogDataLines.Any()) { return(0); } return(lasSection.AsciiLogDataLines.Count(x => x.IsEmpty())); }
public void FixWellInformation(LasSection lasSection) { lasSection.GetCompanyMnemonic().SwapDataDescription(); lasSection.GetWellMnemonic().SwapDataDescription(); lasSection.GetFieldMnemonic().SwapDataDescription(); lasSection.GetLocationMnemonic().SwapDataDescription(); lasSection.GetProvinceMnemonic().SwapDataDescription(); lasSection.GetCountyMnemonic().SwapDataDescription(); lasSection.GetStateMnemonic().SwapDataDescription(); lasSection.GetCountryMnemonic().SwapDataDescription(); lasSection.GetServiceCompanyMnemonic().SwapDataDescription(); lasSection.GetDateMnemonic().SwapDataDescription(); lasSection.GetUwiMnemonic().SwapDataDescription(); lasSection.GetApiMnemonic().SwapDataDescription(); }
public static LasMnemonicLine GetMnemonic(this LasSection lasSection, string mnemonic) { if (lasSection == null) { return(null); } if (lasSection.MnemonicsLines == null || !lasSection.MnemonicsLines.Any()) { return(null); } if (string.IsNullOrEmpty(mnemonic)) { return(null); } return(lasSection.MnemonicsLines.FirstOrDefault(x => string.Compare(x.Mnemonic, mnemonic, true) == 0)); }
public static bool HasAnyMnemonic(this LasSection lasSection, params string[] mnemonics) { if (lasSection == null) { return(false); } if (lasSection.MnemonicsLines == null || !lasSection.MnemonicsLines.Any()) { return(false); } if (mnemonics == null) { return(false); } return(lasSection.MnemonicsLines.Any(x => mnemonics.Any(y => string.Compare(x.Mnemonic, y, true) == 0))); }
public static bool HasMnemonic(this LasSection lasSection, string mnemonic) { if (lasSection == null) { return(false); } if (lasSection.MnemonicsLines == null || !lasSection.MnemonicsLines.Any()) { return(false); } if (string.IsNullOrEmpty(mnemonic)) { return(false); } return(lasSection.MnemonicsLines.Any(x => string.Compare(x.Mnemonic, mnemonic, true) == 0)); }
public void UnWrapAsciiLogData(LasSection lasSection) { if (lasSection == null) { return; } if (lasSection.AsciiLogDataLines == null) { return; } var asciiLogDataLines = new List <LasAsciiLogDataLine>(); List <string> lineValues = null; foreach (var line in lasSection.AsciiLogDataLines) { var valueCount = line.Values.Count(); if (valueCount < 1) { continue; } if (valueCount == 1) { if (lineValues != null) { asciiLogDataLines.Add(new LasAsciiLogDataLine { Values = lineValues.ToArray() }); } lineValues = new List <string>(); } if (lineValues == null) { throw new LasLogFormatException("Invalid line wrapping. In wrap mode, the index channel must be on its own line."); } lineValues.AddRange(line.Values); } if (lineValues != null) { asciiLogDataLines.Add(new LasAsciiLogDataLine { Values = lineValues.ToArray() }); } lasSection.AsciiLogDataLines = asciiLogDataLines.ToArray(); }
public void WriteSection(Stream lasStream, LasSection lasSection) { if (lasStream == null) { return; } if (lasSection == null) { return; } switch (lasSection.SectionType) { case LasSectionType.VersionInformation: lasStream.WriteLasLine("~VERSION INFORMATION"); WriteMnemonicSection(lasStream, lasSection.MnemonicsLines); break; case LasSectionType.WellInformation: lasStream.WriteLasLine("~WELL INFORMATION"); WriteMnemonicSection(lasStream, lasSection.MnemonicsLines); break; case LasSectionType.CurveInformation: lasStream.WriteLasLine("~CURVE INFORMATION"); WriteMnemonicSection(lasStream, lasSection.MnemonicsLines); break; case LasSectionType.ParameterInformation: lasStream.WriteLasLine("~PARAMETER INFORMATION"); WriteMnemonicSection(lasStream, lasSection.MnemonicsLines); break; case LasSectionType.OtherInformation: lasStream.WriteLasLine("~OTHER INFORMATION"); WriteOtherSection(lasStream, lasSection.OtherLines); break; case LasSectionType.AsciiLogData: lasStream.WriteLasLine("~ASCII LOG DATA"); WriteAsciiLogDataSection(lasStream, lasSection.AsciiLogDataLines); break; } }
public LasSection ReadSection(Stream lasStream) { if (lasStream == null) { return(null); } var lasLine = lasStream.ReadLasLine(); if (!lasLine.IsLasSectionHeader()) { throw new LasStreamException("Stream is not positioned at a section header."); } var lasSection = new LasSection { SectionType = _lasSectionLineBusiness.ToSectionTypeFromLasLine(lasLine) }; switch (lasSection.SectionType) { case LasSectionType.VersionInformation: case LasSectionType.WellInformation: case LasSectionType.CurveInformation: case LasSectionType.ParameterInformation: lasSection.MnemonicsLines = ReadMnemonicSection(lasStream); break; case LasSectionType.OtherInformation: lasSection.OtherLines = ReadOtherSection(lasStream); break; case LasSectionType.AsciiLogData: lasSection.AsciiLogDataLines = ReadAsciiLogDataSection(lasStream); break; default: throw new LasStreamException("Invalid section header."); } return(lasSection); }
public void AsciiLogDataBusiness_UnWrapAsciiLogData_Fail_InvalidLineWrapping() { var asciiLogData = new LasSection { SectionType = LasSectionType.AsciiLogData, AsciiLogDataLines = new LasAsciiLogDataLine[] { new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } }, new LasAsciiLogDataLine { Values = new string[] { "-999.25", "-999.25", "-999.25" } } } }; Assert.Throws <LasLogFormatException>(() => _asciiLogDataBusiness.UnWrapAsciiLogData(asciiLogData)); }
public static bool HasServiceCompanyMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_SRVC)); }
public static bool HasDateMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_DATE)); }
public static bool HasUwiMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_UWI)); }
public static bool HasDepthMnemonic(this LasSection lasSection) { return(lasSection.HasAnyMnemonic(MNEM_DEPT, MNEM_DEPTH)); }
public static bool HasTimeMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_TIME)); }
public void WellInformationBusiness_FixWellInformation_Pass() { var company = "ANY OIL COMPANY INC."; var well = "SOME WELL NAME"; var field = "THAT FIELD OVER THERE"; var location = "THIS LOCATION"; var province = "ONTARIO"; var county = "CREEK"; var state = "OKLAHOMA"; var country = "USA"; var serviceCompany = "ONTARIO"; var dateLogged = "CREEK"; var uwi = "OKLAHOMA"; var api = "USA"; var wellInformationSection = new LasSection { SectionType = LasSectionType.WellInformation, MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine { Mnemonic = "COMP", Units = "", Data = "COMPANY", Description = company }, new LasMnemonicLine { Mnemonic = "WELL", Units = "", Data = "WELL NAME", Description = well }, new LasMnemonicLine { Mnemonic = "FLD", Units = "", Data = "FIELD NAME", Description = field }, new LasMnemonicLine { Mnemonic = "LOC", Units = "", Data = "LOCATION", Description = location }, new LasMnemonicLine { Mnemonic = "PROV", Units = "", Data = "PROVINCE", Description = province }, new LasMnemonicLine { Mnemonic = "CNTY", Units = "", Data = "COUNTY", Description = county }, new LasMnemonicLine { Mnemonic = "STAT", Units = "", Data = "STATE", Description = state }, new LasMnemonicLine { Mnemonic = "CTRY", Units = "", Data = "COUNTRY", Description = country }, new LasMnemonicLine { Mnemonic = "SRVC", Units = "", Data = "SERVICE COMPANY", Description = serviceCompany }, new LasMnemonicLine { Mnemonic = "DATE", Units = "", Data = "DATE LOGGED", Description = dateLogged }, new LasMnemonicLine { Mnemonic = "UWI", Units = "", Data = "UNIQUE WELL ID", Description = uwi }, new LasMnemonicLine { Mnemonic = "API", Units = "", Data = "API NUMBER", Description = api } } }; _wellInformationBusiness.FixWellInformation(wellInformationSection); Assert.AreEqual(company, wellInformationSection.GetCompanyMnemonic().Data); Assert.AreEqual(well, wellInformationSection.GetWellMnemonic().Data); Assert.AreEqual(field, wellInformationSection.GetFieldMnemonic().Data); Assert.AreEqual(location, wellInformationSection.GetLocationMnemonic().Data); Assert.AreEqual(province, wellInformationSection.GetProvinceMnemonic().Data); Assert.AreEqual(county, wellInformationSection.GetCountyMnemonic().Data); Assert.AreEqual(state, wellInformationSection.GetStateMnemonic().Data); Assert.AreEqual(country, wellInformationSection.GetCountryMnemonic().Data); Assert.AreEqual(serviceCompany, wellInformationSection.GetServiceCompanyMnemonic().Data); Assert.AreEqual(dateLogged, wellInformationSection.GetDateMnemonic().Data); Assert.AreEqual(uwi, wellInformationSection.GetUwiMnemonic().Data); Assert.AreEqual(api, wellInformationSection.GetApiMnemonic().Data); }
public static LasMnemonicLine GetVersionMnemonic(this LasSection lasSection) { return(lasSection.GetMnemonic(MNEM_VERS)); }
public static bool HasWrapMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_WRAP)); }
public static bool HasVersionMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_VERS)); }
public void PerTestSetup() { _versionMnemonic = new LasMnemonicLine { Mnemonic = "VERS", Data = "2.0", Description = "LAS VERSION" }; _wrapMnemonic = new LasMnemonicLine { Mnemonic = "WRAP", Data = "NO", Description = "LINE WRAP" }; _versionInformationSection = new LasSection { SectionType = LasSectionType.VersionInformation, MnemonicsLines = new List <LasMnemonicLine> { _versionMnemonic, _wrapMnemonic } }; _startMnemonic = new LasMnemonicLine { Mnemonic = "STRT", Units = "FEET", Data = "100.0", Description = "START DEPTH" }; _stopMnemonic = new LasMnemonicLine { Mnemonic = "STOP", Units = "FEET", Data = "101.0", Description = "STOP DEPTH" }; _stepMnemonic = new LasMnemonicLine { Mnemonic = "STEP", Units = "FEET", Data = "0.5", Description = "STEP INCREMENT" }; _nullMnemonic = new LasMnemonicLine { Mnemonic = "NULL", Data = "-999.25", Description = "NULL VALUE" }; _companyMnemonic = new LasMnemonicLine { Mnemonic = "COMP", Data = "DAVIS PETROLEUM CORP", Description = "COMPANY" }; _wellNameMnemonic = new LasMnemonicLine { Mnemonic = "WELL", Data = "TYLER DEEP UNIT #1", Description = "WELL NAME" }; _fieldMnemonic = new LasMnemonicLine { Mnemonic = "FLD", Data = "WILDCAT", Description = "FIELD" }; _locationMnemonic = new LasMnemonicLine { Mnemonic = "LOC", Data = "630' FSL & 1790' FWL", Description = "LOCATION" }; _provinceMnemonic = new LasMnemonicLine { Mnemonic = "PROV", Data = "", Description = "PROVINCE" }; _countyMnemonic = new LasMnemonicLine { Mnemonic = "CNTY", Data = "CONVERSE", Description = "COUNTY" }; _stateMnemonic = new LasMnemonicLine { Mnemonic = "STAT", Data = "WYOMING", Description = "STATE" }; _countryMnemonic = new LasMnemonicLine { Mnemonic = "CTRY", Data = "USA", Description = "COUNTRY" }; _serviceCompanyMnemonic = new LasMnemonicLine { Mnemonic = "SRVC", Data = "BAKER ATLAS", Description = "SERVICE COMPANY" }; _dateLoggedMnemonic = new LasMnemonicLine { Mnemonic = "DATE", Data = "2008-10-18", Description = "DATE LOGGED" }; _uniqueWellIdMnemonic = new LasMnemonicLine { Mnemonic = "UWI", Data = WELL_ID, Description = "UNIQUE WELL ID" }; _apiNumberMnemonic = new LasMnemonicLine { Mnemonic = "API", Data = WELL_ID, Description = "API NUMBER" }; _wellInformationSection = new LasSection { SectionType = LasSectionType.WellInformation, MnemonicsLines = new List <LasMnemonicLine> { _startMnemonic, _stopMnemonic, _stepMnemonic, _nullMnemonic, _companyMnemonic, _wellNameMnemonic, _fieldMnemonic, _locationMnemonic, _provinceMnemonic, _countyMnemonic, _stateMnemonic, _countryMnemonic, _serviceCompanyMnemonic, _dateLoggedMnemonic, _uniqueWellIdMnemonic, _apiNumberMnemonic } }; _depthChannelMnemonic = new LasMnemonicLine { Mnemonic = "DEPT", Units = "FEET", Description = "DEPTH" }; _gammaChannelMnemonic = new LasMnemonicLine { Mnemonic = "GR", Units = "RAD", Description = "GAMMA RAY" }; _curveInformationSection = new LasSection { SectionType = LasSectionType.CurveInformation, MnemonicsLines = new List <LasMnemonicLine> { _depthChannelMnemonic, new LasMnemonicLine { Mnemonic = "PRSR", Units = "PSI", Description = "PRESSURE" }, new LasMnemonicLine { Mnemonic = "TEMP", Units = "DEGC", Description = "TEMPURATURE" } } }; _parameterInformationSection = new LasSection { SectionType = LasSectionType.ParameterInformation }; _otherInformationSection = new LasSection { SectionType = LasSectionType.OtherInformation }; _asciiLogDataSection = new LasSection { SectionType = LasSectionType.AsciiLogData, AsciiLogDataLines = new List <LasAsciiLogDataLine> { new LasAsciiLogDataLine { Values = new string[] { "100.0", "0.500", "90.0" } }, new LasAsciiLogDataLine { Values = new string[] { "100.5", "0.510", "92.0" } }, new LasAsciiLogDataLine { Values = new string[] { "101.0", "0.520", "94.0" } } } }; _lasLog = new LasLog { Sections = new List <LasSection> { _versionInformationSection, _wellInformationSection, _curveInformationSection, _parameterInformationSection, _otherInformationSection, _asciiLogDataSection } }; _lasLogValidator = new LasLogValidator(); }
public static bool HasAreaMnemonic(this LasSection lasSection) { return(lasSection.HasAnyMnemonic(MNEM_PROV, MNEM_CNTY, MNEM_STAT, MNEM_CTRY)); }
public static bool HasIndexChannel(this LasSection lasSection) { return(lasSection.FirstMnemonic().IsMnemonic(MNEM_DEPT, MNEM_DEPTH, MNEM_TIME, MNEM_INDEX)); }
/// <summary> /// Synchronous Parse method accepts stream as input. Returns LasResult on successful /// parse. /// </summary> /// <param name="stream"></param> /// <returns>LasResult</returns> public LasResult Parse(Stream stream) { var result = new LasResult(); try { using (TextReader tr = new StreamReader(stream)) { //state LasSection currentSection = null; bool atAsciiHeader = false; string currentLine; char sectionIdentifier; while ((currentLine = tr.ReadLine()) != null && !atAsciiHeader) { currentLine = currentLine.Trim(); if (currentLine.IndexOf(Delimiters.COMMENT) == 0) { continue; //skip comment lines } //we are at the beginning of a section lets find out what section //and setup up the appropriate objects to grab the data if (currentLine.IndexOf(Delimiters.SECTIONBEGIN) == 0) { if (currentLine.Length < 2) { throw new Exception("Missing section character."); } sectionIdentifier = currentLine[1]; if (sectionIdentifier.Equals(Sections.VERSIONINFO)) { currentSection = result.Version; } if (sectionIdentifier.Equals(Sections.WELLINFO)) { currentSection = result.Well; } if (sectionIdentifier.Equals(Sections.CURVEINFO)) { currentSection = result.Curve; } if (sectionIdentifier.Equals(Sections.PARAMETERINFO)) { currentSection = result.Parameter; } if (sectionIdentifier.Equals(Sections.OTHER)) { currentSection = result.Other; } if (sectionIdentifier.Equals(Sections.ASCIIDATA)) { atAsciiHeader = true; break; } } else //else parse data in all sections { currentSection.Items.Add(_headerParser.ParseRow(currentLine)); } } //we're at the asci data section, parse the data rows! does not currently handled wrapped //data rows. while ((currentLine = tr.ReadLine()) != null && atAsciiHeader) { currentLine = currentLine.Trim(); result.DataRows.LogAsciiData.Add(_dataParser.ParseRow(currentLine)); } } return(result); } catch (Exception) { throw; } }
public static bool HasCountryMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_CTRY)); }
public static bool HasIndexMnemonic(this LasSection lasSection) { return(lasSection.HasMnemonic(MNEM_INDEX)); }