def to_lasio(self, keys=None, basis=None):
        """
        Makes a lasio object from the current well.

        Args:
            basis (ndarray): Optional. The basis to export the curves in. If
                you don't specify one, it will survey all the curves with
                ``survey_basis()``.
            keys (list): List of strings: the keys of the data items to
                include, if not all of them. You can have nested lists, such
                as you might use for ``tracks`` in ``well.plot()``.

        Returns:
            lasio. The lasio object.
        """

        # Create an empty lasio object.
        l = lasio.LASFile()
        l.well.DATE = str(datetime.datetime.today())

        # Deal with header.
        for obj, dic in LAS_FIELDS.items():
            if obj == 'data':
                continue
            for attr, (sect, item) in dic.items():
                value = getattr(getattr(self, obj), attr, None)
                try:
                    getattr(l, sect)[item].value = value
                except:
                    h = lasio.HeaderItem(item, "", value, "")
                    getattr(l, sect)[item] = h

        # Clear curves from header portion.
        l.header['Curves'] = []

        # Add a depth basis.
        if basis is None:
            basis = self.survey_basis(keys=keys)
        try:
            l.add_curve('DEPT', basis)
        except:
            raise Exception("Please provide a depth basis.")

        # Add meta from basis.
        setattr(l.well, 'STRT', basis[0])
        setattr(l.well, 'STOP', basis[-1])
        setattr(l.well, 'STEP', basis[1]-basis[0])

        # Add data entities.
        other = ''

        if keys is None:
            keys = [k for k, v in self.data.items() if isinstance(v, Curve)]
        else:
            keys = utils.flatten_list(keys)

        for k in keys:
            d = self.data[k]
            if getattr(d, 'null', None) is not None:
                d[np.isnan(d)] = d.null
            try:
                new_data = np.copy(d.to_basis_like(basis))
            except:
                # Basis shift failed; is probably not a curve
                pass
            try:
                descr = getattr(d, 'description', '')
                l.add_curve(k.upper(), new_data, unit=d.units, descr=descr)
            except:
                try:
                    # Treat as OTHER
                    other += "{}\n".format(k.upper()) + d.to_csv()
                except:
                    pass

        # Write OTHER, if any.
        if other:
            l.other = other

        return l
def to_lasio ( self , keys = None , basis = None ) : l = lasio . LASFile ( ) l . well . DATE = str ( datetime . datetime . today ( ) ) for obj , dic in LAS_FIELDS . items ( ) : if obj == 'data' : continue for attr , ( sect , item ) in dic . items ( ) : value = getattr ( getattr ( self , obj ) , attr , None ) try : getattr ( l , sect ) [ item ] . value = value except : h = lasio . HeaderItem ( item , "" , value , "" ) getattr ( l , sect ) [ item ] = h l . header [ 'Curves' ] = [ ] if basis is None : basis = self . survey_basis ( keys = keys ) try : l . add_curve ( 'DEPT' , basis ) except : raise Exception ( "Please provide a depth basis." ) setattr ( l . well , 'STRT' , basis [ 0 ] ) setattr ( l . well , 'STOP' , basis [ - 1 ] ) setattr ( l . well , 'STEP' , basis [ 1 ] - basis [ 0 ] ) other = '' if keys is None : keys = [ k for k , v in self . data . items ( ) if isinstance ( v , Curve ) ] else : keys = utils . flatten_list ( keys ) for k in keys : d = self . data [ k ] if getattr ( d , 'null' , None ) is not None : d [ np . isnan ( d ) ] = d . null try : new_data = np . copy ( d . to_basis_like ( basis ) ) except : pass try : descr = getattr ( d , 'description' , '' ) l . add_curve ( k . upper ( ) , new_data , unit = d . units , descr = descr ) except : try : other += "{}\n" . format ( k . upper ( ) ) + d . to_csv ( ) except : pass if other : l . other = other return l
Makes a lasio object from the current well.

        Args:
            basis (ndarray): Optional. The basis to export the curves in. If
                you don't specify one, it will survey all the curves with
                ``survey_basis()``.
            keys (list): List of strings: the keys of the data items to
                include, if not all of them. You can have nested lists, such
                as you might use for ``tracks`` in ``well.plot()``.

        Returns:
            lasio. The lasio object.