Techlog Python

Последнее сообщение
katamaran 16 4
Янв 18

Добрый день, коллеги.

Пара вопросов:

1. По каким материалам осваивать python в Techlog? Может существуют подробные описания python для Techlog, как писать скрипты, какие классы есть, какие свойства и пр?

2. Как написать скрипт, который будет выполнять разные действия (например вычислять кривую) по разным формулам для различных зон?

Спасибо.

Celebrity 1634 10
Янв 18 #1

а у вас уже хорошие навки в самом питоне, как языке прогромирования?

Петя Ботев 614 6
Янв 18 #2

питон (мы задроты можем говорить питон, но так то пайтон) для техлога нужно изучать по хелпу. Вы будите удивлены - но там полное описание всех классов, функций и тд и тп.

kealon 106 9
Янв 18 #3

ага, ещё и базовые примеры есть

katamaran 16 4
Янв 18 #4

В хэлпе ответ на второй вопрос найти не удалось. Подскажите, может смотрю не туда?

Спасибо.

Петя Ботев 614 6
Янв 18 #5

На второй вопрос рекомендую использовать стандартные скрипты Техлога. Там тьма примеров начиная от расчета глинистости по ГК (это же примерно то что Вам надо?) . Где их найти понимаете?

katamaran 16 4
Янв 18 #6

Да, прмеров много, это я нашел. Я ни как не могу найти пример как проводить расчет по разным формулам для разных зон.

Дело в том, что у меня в каждой скважине есть две зоны - условно TOPZONE и BOTZONE, и мне нужно в одном интервале считать по формуле y=a1*x+b1 а в другом y=a2*x+b2. Может кто сталкивался с такой задачкой?

Спаисбо.

kealon 106 9
Янв 18 #7

и такой пример в российской поставке тоже был ZONE_NAME или Zone если меня память не подводит переменная называется.

katamaran 16 4
Янв 18 #8

Пока не нашел( Теоретически можно было бы использовать таблицу с зонами, но они с кривыми лежат в разных "наборах данных".

sds932 6 3
Янв 18 #9

Напишите в поддержку Techlog в SIS. Уверен, там помогут

zi2do 16 10
Янв 18 #10

Для зон нужно использовать формат ZONE и использовать для каждой зоны отдельную формулу

Myp3uJIKA 217 11
Янв 18 #11

1. В датасете с расчетной кривой заведите переменную, которая содержит имя зоны.

2. Далее все просто как апельсин. С отступами надеюсь разберетесь. Ну и названия переменных и мнемоники подставьте.

w=db.selectedWelllist()[0]

d="LQC"

v1=db.variableData(w,d,datavarname)

zone=db.variableData(w,d,zonevarname)

i=0

lng=len(v1)

v2=[MissingValue]*lng

while i<lng:

if zone[i]=="ZONA 1":

v2[i]=a1*v1[i]+b1

if zone[i]=="ZONA 2":

v2[i]=a2*v1[i]+b2

i=i+1

db.variableSave(w,d,"RESULT","result ramily","result unit",v2)

katamaran 16 4
Янв 18 #12

Огромное спасибо, за развернутый ответ!

Я делают так - поскольку кривые и зоны у меня в разных датасетах:

w=db.selectedWelllist()[0]

d="LAS"

v1=db.variableData(w,d,"GR")

d = "ZONES"

if db.variableExists(w,d,"Zone Name"):

 zone = db.variableData(w,d,"Zone Name")

но даже после проверки variableExists возникает ошибка:

Traceback (most recent call last):

  File "<string>", line 11 (90), in <module>

AttributeError: 'module' object has no attribute 'variableData'

Как быть?

Спасибо.

Myp3uJIKA 217 11
Янв 18 #13

Ошибка, которую генерит пайтон, говорит о том, что в модуле db нет метода (функции) variableData.

Тут в общем случае варианта два

1. Либо вы где-то ранее переприсвоили переменной db другое значение, указывающее на другой модуль (не аутентичный db),

2. Либо вы написали variableData как то неправильно (может русская буква где то вместо англ)

Первое маловероятно, но проверить стоит (у вас в скрипте видимо еще строки есть).

По второму - вы функции же, надеюсь, вставляете через внутреннюю подсказку? Пишете в скрипте db, ставите точку и потом в появившемся меню выбираете нужную с помощью букв и стрелок на клаве, потом нажимаете tab, потом скобку открывающуюся....? Именно так надо делать при написании скрипта, если только у вас не повторяющиеся блоки кода. Это исключит ошибки при ручном вводе.

А то при копировании с какими-нибудь автозаменителями рус-англ может чот попало произойти.

 

katamaran 16 4
Янв 18 #14

Спасибо!

Оказалось, что у меня нет такого метода поскольку TechLog номер 16)

Они рекомендуют использовать db.variableLoad().

Можно я еще вас помучаю: я правильно понимаю, что в вашем примере зоны это нет таблица, а что-то типа кривой, т.е на каждой глубине есть значение с именем зоны? И поэтому вы можете писать вот так zone[i]=="ZONA 1"

Но у меня штатными средствами Techlog созданные зоны лежат в отдельном датасете и представляют собой три таблички глубина кровли, имя, описание. И тогда скрипт надо пистаь по другому?

Огромное спасибо за помощь!

Myp3uJIKA 217 11
Янв 18 #15

Нахождение всех переменных скрипта в одном датасете значительно облегчает их взаимодействие. Если это не так, то придется писать переходники из одного датасета в другой.

Исходя из того, что ваш уровень владения языком - начальный, я вам рекомендую скопировать кривую Zone Name из датасета с зонами в датасет LAS. Это можно сделать массово, если в окне интерполяции указать все скважины во вкладке Скважины.

Но, при последующем ручном изменении границ зон в зонном датасете придется заново копировать в LAS.

Если делать по уму, то надо писать код для определения зоны в каждой точке LAS. Ниже упрощенный пример для двух зон. Если зон ощутимо больше, то надо по идее еще усложнять - пробегать весь зонный датасет в каждой точке...

....

md_zone=db.variableData(w,zone_dataset,zone_mdname)

zones=db.variableData(w,zone_dataset,zone_name)

zone1top=md_zone[0]

zone1bot=md_zone[1]

zone2top=md_zone[2]

zone2bot=md_zone[3]

......

while i<lng: #основной расчетный цикл

if md[i]>=zone1top and md[i]<=zone1bot:

#делаем расчет для 1 зоны

if md[i]>=zone2top and md[i]<=zone2bot:

#делаем расчет для 2 зоны

Петя Ботев 614 6
Янв 18 #16

katamaran пишет:

Спасибо!

Оказалось, что у меня нет такого метода поскольку TechLog номер 16)

Они рекомендуют использовать db.variableLoad().

Можно я еще вас помучаю: я правильно понимаю, что в вашем примере зоны это нет таблица, а что-то типа кривой, т.е на каждой глубине есть значение с именем зоны? И поэтому вы можете писать вот так zone[i]=="ZONA 1"

Но у меня штатными средствами Techlog созданные зоны лежат в отдельном датасете и представляют собой три таблички глубина кровли, имя, описание. И тогда скрипт надо пистаь по другому?

Огромное спасибо за помощь!

может попробовать загрузить глубины зон в отдельные переменные или массив пеерменных и прогонять цикл уже по ним?  для этого нужно будет также завести переменную по текущей глубине. Будет что то вроде -

 

if md[i] >"ZONA 1" and md[i]<"ZONA 2":

v2[i]=a1*v1[i]+b1

elif md[i]>"ZONA 2":

v2[i]=a2*v1[i]+b2

i=i+1

 

ну как вариант))))

katamaran 16 4
Янв 18 #17

Спасибо! В итоге реализовал вот так (без копирования в один датасет):

# умножаем кривую GR на 2 в зоне ZONE1

w=db.selectedWellList()[0]

d="LAS" # датасет с кривыми

gr=db.variableLoad(w,d,"GR")

md=db.variableLoad(w,d,"DEPT")

d="ZONE" # датасет с зонами

if db.variableExists(w,d,"Zone Name"):

    zone_name = db.variableLoad(w,d,"Zone Name")

    zone_md = db.variableLoad(w,d,"MD")

    zone=[[zone_name[:-1], zone_md[:-1], zone_md[1:]]]

else:

    print "Ups!"

i=0

lng=len(gr)

gr2=[MissingValue]*lng

for z in zone:

while i<lng:

if z[0][0]=="ZONE1" and md[i]>z[1][0] and md[i]<=z[2][0]:

    gr2[i]=2*gr[i]

i=i+1

d="LAS"

db.variableSave(w,d,"GR2","result ramily","result unit",gr2)

Еще раз, Большое спасибо за помощь!

 

Петя Ботев 614 6
Янв 18 #18

Myp3uJIKA пишет:

while i<lng: #основной расчетный цикл

if md[i]>=zone1top and md[i]<=zone1bot:

#делаем расчет для 1 зоны

if md[i]>=zone2top and md[i]<=zone2bot:

#делаем расчет для 2 зоны

 

тысяча извинений)))  но давайте избежим двойной проверки условий. второй иф заменим на елиф.

Myp3uJIKA 217 11
Янв 18 #19

Петя Ботев пишет:

тысяча извинений)))  но давайте избежим двойной проверки условий. второй иф заменим на елиф.

Сферически в вакууме согласен.

елиф предполагает написание заглушки else, а это удлиняет скрипт, кроме того лишняя проверка добавит микросекунду в общем расчете скрипта. Так что сильно по времени не выиграешь, а скрипт дольше писать! :)

Если скрипт простой на несколько скважин - сильно не заморачиваешься над оптимизацией.

Иногда выгоднее писать проще, чем правильнее.

 

 

Myp3uJIKA 217 11
Янв 18 #20

katamaran пишет:

Спасибо! В итоге реализовал вот так (без копирования в один датасет)

Как то вы с другой стороны зашли, ну да ладно. Я привык плясать от данных к зонам, а не наоборот. У вас будут лишние итерации всего датасета LAS на ненужных зонах. Вот например если у вас две зоны раздельно друг от друга созданы (не слитно), то вместо 2 итераций будет 4.

И я написал проще, прозрачнее, а вы сделали двумерный список, который достаточно сложен для быстрого восприятия.

В общем работает и ладно :)

katamaran 16 4
Янв 18 #21

Да, конечно вы правы.

Правильней поменять местами циклы. У меня просто одна зона была.

Расскажите пожалуйста, а как вы постигли Python for Application:) Только по примерам, help или курсы, книги?

kealon 106 9
Янв 18 #22

В само обучения насколько помню входит один день для написания скриптов, но он предполагает наличие базовых знаний. Проходили?

katamaran, вы думаете есть какая-то потребность в полных курсах именно по python (он в принципе и в петреле используется) с разбором ситуаций по применению в нефтяной отрасли?

katamaran 16 4
Янв 18 #23

Да сам питон не проблема - по нему есть всё что угодно -  книги, курсы, вебинары и пр. Да собственно форумов сотни, где можно выяснить любые вопросы.  Проблема с python for Techlog. Видимо, я излишне оптимистичен, но тот-же Геопоиск имеет подробнейшее описание своего скриптового языка, где описано всё, приведены примеры и пр. Наверное, у Techlog другая политика продвижения, ориентированная на специальные корпоративные курсы. Или я чего-то упускаю? В общем хочется книги))

P.S. В контексте данной задачи, в какой-то момент, я уж думал выгрузить все данные из Techlog и на питоне же написать пару скриптов, которые решали бы мои проблемы. Но, спасибо вам, коллеги, спасли от странного)

Myp3uJIKA 217 11
Янв 18 #24

katamaran пишет:

Да, конечно вы правы.

Правильней поменять местами циклы. У меня просто одна зона была.

Расскажите пожалуйста, а как вы постигли Python for Application:) Только по примерам, help или курсы, книги?

Я не постиг Python for Application :) Я нефтяной геолог, но это не значит, что я могу поднять камень и сказать что это за минерал :)

Я знаю только Python в применении к Techlog. И то далеко не весь. Системным программированием на пайтоне я не занимаюсь.

Как изучить? Как говорят лучше один раз пощупать, чем сто раз посмотреть.

1. Посмотрите простые скрипты в папке компании. Как они написаны, как организован ввод-вывод. Там достаточно просто все.

2. Потом пробуйте сами. делайте по образу и подобию встроенных скриптов. Семантика языка вся в инете есть, я всегда пользуюсь яндексом.

3. Встроенный хелп для изучения языка я не использовал. Там нет того, что бы мне было надо.  И организован он по дебильному. В нем можно найти только описание навороченных функций, используемых только в техлоге. Большинство из них вам не понадобятся. Кроме того, зачастую функции идут из библиотек, поэтому совершенно непрозрачны. Проще самому функцию написать чтобы точно понимать что и как подкрутить.

4. Курсы не посещал. Книги не читал.

5. Ничего сложного в этом языке нет, бывают лишь проблемы в специфике - оперирование и конвертация данных, взаимодействие с русским языком и прочее. Все остальное - чистый программизм.

 

Go to top