Challenge Overview
Project Overview
Our client has asked Topcoder to help them to build a tool which allows them to compare and remediate differences in log files. In the oil and gas industry, geologists collect extensive information from the drilling and exploration process. This information is collected and analyzed through a series of log files which the geoscientist can review in various software clients. Ultimately, our client would like us to develop machine learning type capabilities to remediate logs in a completely automated way but for the start we’re going to develop a web client which allows the users to remediate the logs in a more manual fashion.
The errors in the log (depths) occur because different instruments deliver data at different granularity, the instruments themselves are placed at different locations along the drill string, and there are failures that occur with the instruments themselves. Here is an image which displays a typical set up of a drill string with a set of instruments. Each of the instruments shown in that figure generates a series of readings which are captured in a set of .LAS log files. After the data is captured, a geophysicist looks at all these log files and goes through a manual process of remediating the logs so they tell a consistent story about the underlying geology of the well. The files are all depth registered. There are often obvious relationships between the log files but because of errors in the depths the relationships will break down. In the figure below we’re showing a a RHOB log which provides Density readings and the DP logs which provides sonic data. The DP_SH figure shows the DP data after it has been shifted up just a couple of - samples so that it matches the features in the RHOB data more precisely. We’re hoping that with the tool that we’re developing we’ll be able to identify and automate these adjustments.
Challenge Overview
For this first challenge, we are looking to build a java based application with the following features:
-
The java application should have a simple GUI which will allow the users to load in the data files and plot the series on the UI so the users can see them visually
-
The java application should try to identify where the logs seem to be in sync and where they don't seem to be in sync (in sync means features that are controlled by the same event in the subsurface match up at the same depth). The application should be smart enough to detect whether the instrumentation readings are complementary -- as depth changes the two instrumentation values move in the same direction (but may vary in their degree of change) or more antagonistic -- as depth changes the two instrumentation values move in opposite directions. The latter is the case in the example shown above.
-
The java application should show the matching results described in #2 in some way the users can easily understand. For example: show the logs side by side, then have a little feature (like a diff tool) which allows you to forward to the next unmatched area / the next difference / place where the logs are out of sync. A dashed line that connects every local min/max event in one reference log to another log that will be shifted.
-
Please properly design your code so we will be able to reuse the matching code / service later, basically you should separate the service layer code and view layer code so we can easily replace the view later with web or mobile if needed later.
-
Allow users to change the scale of the plots so they can zoom in and out and view the plots at different resolutions. Number of dashed lines between the same events in the logs should not overwhelm the image. At zoomed out view only show the lines for major events. At zoomed in view show more subtle events.
-
Read .LAS files to interpret and gather raw data. .LAS files are fixed width text files that have a header. Our application will need to read the files, gather some information from them and allow users to do the following:
-
See what data series are available within the file. Every file LAS file will have depth so that shouldn’t be one of the options for selection -- that’s just the Y axis for our plots.
-
Choose which data series (column) is the primary (reference) one.
-
Choose which data series is the secondary one which will be shifted (although we’re not trying to do the actual shifting in this challenge).
-
-
The app/diff algorithm should ignore depths at which there are missing or invalid values. Typically invalid values are registered as: -999.0000. The null value is registered in the header of the .LAS file.
We’ll provide test data in the forum for you to test your code.
Technologies
Java 8
Final Submission Guidelines
- Single zip containing your code and documents that cover all the requirements above- Include a readme in markdown format with full details on how to setup, configure, run and verify your submission