コード例 #1
0
        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());
        }
コード例 #2
0
        public void LasCurveInformationHelpers_HasDepthMnemonic_Pass_HasDepth()
        {
            var lasSection = new LasSection {
                MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine {
                                                             Mnemonic = MNEM_DEPTH
                                                         } }
            };

            Assert.IsTrue(lasSection.HasDepthMnemonic());
        }
コード例 #3
0
        public void LasCurveInformationHelpers_HasIndexMnemonic_Pass_HasIndex()
        {
            var lasSection = new LasSection {
                MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine {
                                                             Mnemonic = MNEM_INDEX
                                                         } }
            };

            Assert.IsTrue(lasSection.HasIndexMnemonic());
        }
コード例 #4
0
        public void LasCurveInformationHelpers_HasIndexMnemonic_Pass_NoIndex()
        {
            var lasSection = new LasSection {
                MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine {
                                                             Mnemonic = "MNEM"
                                                         } }
            };

            Assert.IsFalse(lasSection.HasIndexMnemonic());
        }
コード例 #5
0
        public void LasCurveInformationHelpers_HasIndexChannel_Pass_HasDept()
        {
            var lasSection = new LasSection {
                MnemonicsLines = new LasMnemonicLine[] { new LasMnemonicLine {
                                                             Mnemonic = MNEM_DEPT
                                                         } }
            };

            Assert.IsTrue(lasSection.HasIndexChannel());
        }
コード例 #6
0
 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());
 }
コード例 #7
0
 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()));
 }
コード例 #8
0
 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();
 }
コード例 #9
0
 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));
 }
コード例 #10
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)));
 }
コード例 #11
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));
 }
コード例 #12
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();
        }
コード例 #13
0
        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;
            }
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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));
        }
コード例 #16
0
 public static bool HasServiceCompanyMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_SRVC));
 }
コード例 #17
0
 public static bool HasDateMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_DATE));
 }
コード例 #18
0
 public static bool HasUwiMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_UWI));
 }
コード例 #19
0
 public static bool HasDepthMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasAnyMnemonic(MNEM_DEPT, MNEM_DEPTH));
 }
コード例 #20
0
 public static bool HasTimeMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_TIME));
 }
コード例 #21
0
        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);
        }
コード例 #22
0
 public static LasMnemonicLine GetVersionMnemonic(this LasSection lasSection)
 {
     return(lasSection.GetMnemonic(MNEM_VERS));
 }
コード例 #23
0
 public static bool HasWrapMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_WRAP));
 }
コード例 #24
0
 public static bool HasVersionMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_VERS));
 }
コード例 #25
0
        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();
        }
コード例 #26
0
 public static bool HasAreaMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasAnyMnemonic(MNEM_PROV, MNEM_CNTY, MNEM_STAT, MNEM_CTRY));
 }
コード例 #27
0
 public static bool HasIndexChannel(this LasSection lasSection)
 {
     return(lasSection.FirstMnemonic().IsMnemonic(MNEM_DEPT, MNEM_DEPTH, MNEM_TIME, MNEM_INDEX));
 }
コード例 #28
0
ファイル: LasParser.cs プロジェクト: deeceefar2/Lasso
        /// <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;
            }
        }
コード例 #29
0
 public static bool HasCountryMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_CTRY));
 }
コード例 #30
0
 public static bool HasIndexMnemonic(this LasSection lasSection)
 {
     return(lasSection.HasMnemonic(MNEM_INDEX));
 }