Заливаем готовую часть #1
10
.env
Normal file
10
.env
Normal file
@ -0,0 +1,10 @@
|
||||
DATABASE=SuperService
|
||||
POSTGRES_USER=UserSuperService
|
||||
POSTGRES_PASSWORD=NotWarningWord1
|
||||
CLICKHOUSE_USER=UserMyHouse
|
||||
CLICKHOUSE_PASSWORD=NotWarningWord2
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=password
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_NAME=test
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.venv
|
||||
.idea
|
||||
__pycache__
|
12
Dockerfile
Normal file
12
Dockerfile
Normal file
@ -0,0 +1,12 @@
|
||||
FROM python:3.12
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt requirements.txt
|
||||
RUN pip install --upgrade pip
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
85
README.md
85
README.md
@ -1,4 +1,4 @@
|
||||
# PIbd-42_SSPR
|
||||
# Описание проекта
|
||||
|
||||
Доработка автоматизированной системы планирования и выполнения численного моделирования процессов сжигания топлив в горелочных устройствах энергоустановок предназначена для оптимизации процессов проведения численных экспериментов с цифровой моделью горелочного устройства с целью поиска наиболее экономичных и низко-эмиссионных режимов работы
|
||||
|
||||
@ -7,4 +7,85 @@
|
||||
2. Клюшенкова Ксения
|
||||
3. Базунов Андрей
|
||||
4. Жимолостнова Анна
|
||||
5. Цуканова Ирина
|
||||
5. Цуканова Ирина
|
||||
|
||||
# Запуск проекта
|
||||
## 1. Создание окружения
|
||||
```
|
||||
py -m venv .venv
|
||||
```
|
||||
## 2. Переход в окружение
|
||||
```
|
||||
.\.venv\Scripts\activate
|
||||
```
|
||||
## 3. Скачивание библиотек
|
||||
```
|
||||
pip install -r .\requirements.txt
|
||||
```
|
||||
## 4. Создаем .env
|
||||
Необходимо создать файл и поместить в него необходимые параметры.
|
||||
```
|
||||
DATABASE=SuperService
|
||||
POSTGRES_USER=UserSuperService
|
||||
POSTGRES_PASSWORD=NotWarningWord1
|
||||
CLICKHOUSE_USER=UserMyHouse
|
||||
CLICKHOUSE_PASSWORD=NotWarningWord2
|
||||
```
|
||||
|
||||
## 5. Запускаем все контейнеры
|
||||
```
|
||||
docker-compose up --build
|
||||
```
|
||||
При необходимости можем закрыть контейнера
|
||||
```
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
## 6. Запускаем проект
|
||||
```
|
||||
python runner.py
|
||||
```
|
||||
|
||||
## 7. Подключение к ClickHouse
|
||||
Команда входа в ClickHouse
|
||||
```
|
||||
docker exec -it clickhouse-db clickhouse-client -u UserMyHouse --password NotWarningWord2 --host localhost
|
||||
```
|
||||
Использовать базу данных
|
||||
```
|
||||
USE SuperService;
|
||||
```
|
||||
## 8. Подключение к PostgreSQL
|
||||
Команда входа в ClickHouse
|
||||
```
|
||||
docker exec -it postgres-db psql -U UserSuperService -d SuperService
|
||||
```
|
||||
|
||||
## 9. Миграция alembic
|
||||
```
|
||||
alembic revision --autogenerate
|
||||
```
|
||||
```
|
||||
alembic upgrade head
|
||||
```
|
||||
|
||||
# Инициализация БД
|
||||
|
||||
## 1. Запустить docker-compose
|
||||
```
|
||||
docker-compose up --build
|
||||
```
|
||||
## 2. Зайти в ClickHouse
|
||||
```
|
||||
docker exec -it clickhouse-db clickhouse-client -u UserMyHouse --password NotWarningWord2 --host localhost
|
||||
```
|
||||
## 3. Создать базу данных
|
||||
```
|
||||
CREATE DATABASE SuperService;
|
||||
```
|
||||
## 4. Инициализировать БД
|
||||
Зайти на fastapi и выполнить запрос:
|
||||
```
|
||||
http://localhost:8000/init_db_data
|
||||
```
|
||||
PostgreSQL и ClickHouse будут заполнены данными.
|
117
alembic.ini
Normal file
117
alembic.ini
Normal file
@ -0,0 +1,117 @@
|
||||
# A generic, single database configuration.
|
||||
|
||||
[alembic]
|
||||
# path to migration scripts
|
||||
# Use forward slashes (/) also on windows to provide an os agnostic path
|
||||
script_location = db/migrations
|
||||
|
||||
# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
|
||||
# Uncomment the line below if you want the files to be prepended with date and time
|
||||
# see https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file
|
||||
# for all available tokens
|
||||
# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s
|
||||
|
||||
# sys.path path, will be prepended to sys.path if present.
|
||||
# defaults to the current working directory.
|
||||
prepend_sys_path = . db
|
||||
|
||||
# timezone to use when rendering the date within the migration file
|
||||
# as well as the filename.
|
||||
# If specified, requires the python>=3.9 or backports.zoneinfo library.
|
||||
# Any required deps can installed by adding `alembic[tz]` to the pip requirements
|
||||
# string value is passed to ZoneInfo()
|
||||
# leave blank for localtime
|
||||
# timezone =
|
||||
|
||||
# max length of characters to apply to the "slug" field
|
||||
# truncate_slug_length = 40
|
||||
|
||||
# set to 'true' to run the environment during
|
||||
# the 'revision' command, regardless of autogenerate
|
||||
# revision_environment = false
|
||||
|
||||
# set to 'true' to allow .pyc and .pyo files without
|
||||
# a source .py file to be detected as revisions in the
|
||||
# versions/ directory
|
||||
# sourceless = false
|
||||
|
||||
# version location specification; This defaults
|
||||
# to db/migrations/versions. When using multiple version
|
||||
# directories, initial revisions must be specified with --version-path.
|
||||
# The path separator used here should be the separator specified by "version_path_separator" below.
|
||||
# version_locations = %(here)s/bar:%(here)s/bat:db/migrations/versions
|
||||
|
||||
# version path separator; As mentioned above, this is the character used to split
|
||||
# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep.
|
||||
# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas.
|
||||
# Valid values for version_path_separator are:
|
||||
#
|
||||
# version_path_separator = :
|
||||
# version_path_separator = ;
|
||||
# version_path_separator = space
|
||||
# version_path_separator = newline
|
||||
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.
|
||||
|
||||
# set to 'true' to search source files recursively
|
||||
# in each "version_locations" directory
|
||||
# new in Alembic version 1.10
|
||||
# recursive_version_locations = false
|
||||
|
||||
# the output encoding used when revision files
|
||||
# are written from script.py.mako
|
||||
# output_encoding = utf-8
|
||||
|
||||
sqlalchemy.url = driver://user:pass@localhost/dbname
|
||||
|
||||
|
||||
[post_write_hooks]
|
||||
# post_write_hooks defines scripts or Python functions that are run
|
||||
# on newly generated revision scripts. See the documentation for further
|
||||
# detail and examples
|
||||
|
||||
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
||||
# hooks = black
|
||||
# black.type = console_scripts
|
||||
# black.entrypoint = black
|
||||
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
||||
|
||||
# lint with attempts to fix using "ruff" - use the exec runner, execute a binary
|
||||
# hooks = ruff
|
||||
# ruff.type = exec
|
||||
# ruff.executable = %(here)s/.venv/bin/ruff
|
||||
# ruff.options = --fix REVISION_SCRIPT_FILENAME
|
||||
|
||||
# Logging configuration
|
||||
[loggers]
|
||||
keys = root,sqlalchemy,alembic
|
||||
|
||||
[handlers]
|
||||
keys = console
|
||||
|
||||
[formatters]
|
||||
keys = generic
|
||||
|
||||
[logger_root]
|
||||
level = WARN
|
||||
handlers = console
|
||||
qualname =
|
||||
|
||||
[logger_sqlalchemy]
|
||||
level = WARN
|
||||
handlers =
|
||||
qualname = sqlalchemy.engine
|
||||
|
||||
[logger_alembic]
|
||||
level = INFO
|
||||
handlers =
|
||||
qualname = alembic
|
||||
|
||||
[handler_console]
|
||||
class = StreamHandler
|
||||
args = (sys.stderr,)
|
||||
level = NOTSET
|
||||
formatter = generic
|
||||
|
||||
[formatter_generic]
|
||||
format = %(levelname)-5.5s [%(name)s] %(message)s
|
||||
datefmt = %H:%M:%S
|
109
clickhouse_tools.py
Normal file
109
clickhouse_tools.py
Normal file
@ -0,0 +1,109 @@
|
||||
import time
|
||||
import pandas as pd
|
||||
import clickhouse_connect
|
||||
|
||||
class ClickHouseClient:
|
||||
def __init__(self, host='localhost', port=9000, database="default", username="", password=""):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.database = database
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.client = self.connect_clickhouse()
|
||||
self.initialize_table()
|
||||
|
||||
def connect_clickhouse(self):
|
||||
"""
|
||||
Создает подключение к базе данных ClickHouse.
|
||||
"""
|
||||
return clickhouse_connect.get_client(host=self.host, port=self.port, database=self.database, username=self.username, password=self.password)
|
||||
|
||||
def initialize_table(self):
|
||||
"""
|
||||
Инициализирует таблицу в ClickHouse, если она не существует.
|
||||
"""
|
||||
create_table_query = """
|
||||
CREATE TABLE IF NOT EXISTS experiment_data (
|
||||
volume Float64,
|
||||
nitrogen_oxide_emission Float64,
|
||||
temperature Float64,
|
||||
co_fraction Float64,
|
||||
co2_fraction Float64,
|
||||
x Float64,
|
||||
y Float64,
|
||||
z Float64,
|
||||
file_id String
|
||||
) ENGINE = MergeTree()
|
||||
ORDER BY file_id
|
||||
"""
|
||||
self.client.command(create_table_query)
|
||||
|
||||
def get_data(self):
|
||||
"""
|
||||
Извлекает максимальные и взвешенные средние значения из ClickHouse, включая разницу max(x) - min(x) при температуре > 1150.
|
||||
:return: DataFrame с данными из ClickHouse.
|
||||
"""
|
||||
query = """
|
||||
SELECT
|
||||
file_id,
|
||||
MAX(temperature) AS max_temperature,
|
||||
MAX(nitrogen_oxide_emission) AS max_nox,
|
||||
MAX(co_fraction) AS max_co,
|
||||
MAX(co2_fraction) AS max_co2,
|
||||
SUM(volume * temperature) / SUM(volume) AS weighted_avg_temperature,
|
||||
SUM(volume * nitrogen_oxide_emission) / SUM(volume) AS weighted_avg_nox,
|
||||
SUM(volume * co_fraction) / SUM(volume) AS weighted_avg_co,
|
||||
SUM(volume * co2_fraction) / SUM(volume) AS weighted_avg_co2,
|
||||
MAX(if(temperature > 1150, x, NULL)) - MIN(if(temperature > 1150, x, NULL)) AS x_range_high_temp,
|
||||
MAX(if(temperature > 1150, y, NULL)) - MIN(if(temperature > 1150, y, NULL)) AS y_range_high_temp,
|
||||
MAX(if(temperature > 1150, z, NULL)) - MIN(if(temperature > 1150, z, NULL)) AS z_range_high_temp,
|
||||
SUM(if(temperature > 1150, volume, NULL)) AS flame_volume
|
||||
FROM
|
||||
experiment_data
|
||||
GROUP BY
|
||||
file_id
|
||||
"""
|
||||
|
||||
results = self.client.query(query)
|
||||
columns = ["file_id", "max_temperature", "max_nox", "max_co", "max_co2",
|
||||
"weighted_avg_temperature", "weighted_avg_nox", "weighted_avg_co", "weighted_avg_co2",
|
||||
"x_range_high_temp", "y_range_high_temp", "z_range_high_temp", "flame_volume"]
|
||||
|
||||
return pd.DataFrame(results.result_rows, columns=columns)
|
||||
|
||||
def save_csv_to_clickhouse(self, csv_path, file_id):
|
||||
"""
|
||||
Загружает данные из CSV файла в ClickHouse.
|
||||
:param csv_path: Путь к CSV файлу.
|
||||
:param file_id: Идентификатор файла.
|
||||
"""
|
||||
# Чтение данных из CSV
|
||||
df = pd.read_csv(csv_path, delimiter=';', decimal='.')
|
||||
|
||||
# Переименовать колонки
|
||||
rename_dict = {
|
||||
"Volume (m^3)": "volume",
|
||||
"Mass Fraction of Nitrogen Oxide Emission": "nitrogen_oxide_emission",
|
||||
"Temperature (K)": "temperature",
|
||||
"Mass Fraction of CO": "co_fraction",
|
||||
"Mass Fraction of CO2": "co2_fraction",
|
||||
"X (m)": "x",
|
||||
"Y (m)": "y",
|
||||
"Z (m)": "z"
|
||||
}
|
||||
df.rename(columns=rename_dict, inplace=True)
|
||||
|
||||
df['x'] = abs(df['x'])
|
||||
df['x'] = df['x'] - df['x'].min()
|
||||
df['y'] = df['y'] - df['y'].min()
|
||||
df['z'] = df['z'] - df['z'].min()
|
||||
|
||||
# Добавление столбца идентификатора файла
|
||||
df["file_id"] = file_id
|
||||
|
||||
# Удаление существующих записей для данного файла
|
||||
delete_query = "ALTER TABLE experiment_data DELETE WHERE file_id = %(file_id)s"
|
||||
self.client.command(delete_query, parameters={'file_id': file_id})
|
||||
|
||||
# Вставка данных в ClickHouse
|
||||
self.client.insert_df('experiment_data', df)
|
26
config.yaml
Normal file
26
config.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
paths:
|
||||
starccm: 'C:/Program Files/Siemens/19.04.007-R8/STAR-CCM+19.04.007-R8/star/bin/starccm+'
|
||||
chemkin: '/media/user/Projects/burner_data/chemkin'
|
||||
main: '/media/user/Data/experiment_data'
|
||||
|
||||
parameters:
|
||||
number_processes: 16
|
||||
mesh_base_size: 0.7
|
||||
stopping_criterion: 7000
|
||||
diameters:
|
||||
d1: 1442
|
||||
d2: 1016
|
||||
d3: 640
|
||||
d4: 325
|
||||
d5: 325
|
||||
d6: 245
|
||||
default_values:
|
||||
N1: 24
|
||||
L1: 70.0
|
||||
a1: 60.0
|
||||
N2: 18
|
||||
L2: 105.0
|
||||
N3: 9
|
||||
L3: 29.6
|
||||
|
||||
api_url: "http://10.6.23.120:8000/api/v1/generate_geom"
|
57
data_models.py
Normal file
57
data_models.py
Normal file
@ -0,0 +1,57 @@
|
||||
import matplotlib.pyplot as mp
|
||||
import pandas as pd
|
||||
import seaborn as sb
|
||||
from settings import settings
|
||||
|
||||
from clickhouse_tools import ClickHouseClient
|
||||
from postgres_tools import PostgresClient
|
||||
|
||||
|
||||
class DataPreparer:
|
||||
def __init__(self, clickhouse_host='localhost', postgres_host='localhost', postgres_db='your_db',
|
||||
postgres_user='your_user', postgres_password='your_password'):
|
||||
self.clickhouse_client = ClickHouseClient("localhost", 8123, database=settings.DATABASE, username=settings.CLICKHOUSE_USER, password=settings.CLICKHOUSE_PASSWORD)
|
||||
self.postgres_client = PostgresClient(
|
||||
dbname=settings.DATABASE,
|
||||
user=settings.POSTGRES_USER,
|
||||
password=settings.POSTGRES_PASSWORD,
|
||||
host="localhost",
|
||||
port="5432"
|
||||
)
|
||||
|
||||
def prepare_ml_dataset(self):
|
||||
"""
|
||||
Подготавливает набор данных для машинного обучения, объединяя данные из ClickHouse и PostgreSQL.
|
||||
:return: DataFrame с подготовленными данными.
|
||||
"""
|
||||
# clickhouse_data = self.clickhouse_client.get_data()
|
||||
postgres_data = self.postgres_client.get_experiments()
|
||||
result_data = self.postgres_client.get_data()
|
||||
|
||||
# Объединение данных по file_id
|
||||
ml_dataset = pd.merge(postgres_data, result_data, on='file_id')
|
||||
|
||||
self.postgres_client.close()
|
||||
|
||||
return ml_dataset
|
||||
|
||||
|
||||
data_preparer = DataPreparer()
|
||||
|
||||
# Подготовка набора данных для машинного обучения
|
||||
ml_dataset = data_preparer.prepare_ml_dataset()
|
||||
ml_dataset = ml_dataset.drop('file_id', axis=1)
|
||||
|
||||
ml_dataset.to_csv('burner_data_pg_2.csv', index=False)
|
||||
|
||||
# Находим колонки с одним уникальным значением
|
||||
cols_to_drop = ml_dataset.columns[ml_dataset.nunique() == 1]
|
||||
|
||||
# Удаляем эти колонки
|
||||
ml_dataset = ml_dataset.drop(columns=cols_to_drop)
|
||||
|
||||
fig, ax = mp.subplots(figsize=(40, 40))
|
||||
dataplot = sb.heatmap(ml_dataset.corr(), cmap="YlGnBu", annot=True)
|
||||
|
||||
# displaying heatmap
|
||||
mp.show()
|
0
db/__init__.py
Normal file
0
db/__init__.py
Normal file
7
db/clickhouse_db_connection.py
Normal file
7
db/clickhouse_db_connection.py
Normal file
@ -0,0 +1,7 @@
|
||||
from clickhouse_sqlalchemy import make_session, get_declarative_base, engines
|
||||
from sqlalchemy import create_engine
|
||||
from settings import settings
|
||||
|
||||
engine_clickhouse = create_engine(settings.clickhouse_url)
|
||||
BaseClickhouse = get_declarative_base()
|
||||
session_clickhouse = make_session(engine_clickhouse)
|
51
db/crud.py
Normal file
51
db/crud.py
Normal file
@ -0,0 +1,51 @@
|
||||
from typing import Type, TypeVar, Sequence, Optional, Dict, Any
|
||||
|
||||
from sqlalchemy import update as update_, delete as delete_
|
||||
from sqlalchemy.future import select
|
||||
from db.models import ExperimentCategory, ExperimentData, ExperimentParameters, LoadParameters, RecyclingParameters
|
||||
|
||||
from db.postgres_db_connection import async_session_postgres
|
||||
|
||||
T = TypeVar("T", ExperimentCategory, ExperimentData, ExperimentParameters, LoadParameters, RecyclingParameters)
|
||||
|
||||
|
||||
async def get_all(model_class: Type[T]) -> Sequence[T]:
|
||||
async with async_session_postgres() as session:
|
||||
result = await session.execute(select(model_class))
|
||||
return result.scalars().all()
|
||||
|
||||
|
||||
async def get_by_id(model_class: Type[T], id: int) -> Optional[T]:
|
||||
async with async_session_postgres() as session:
|
||||
result = await session.execute(select(model_class).where(model_class.id == id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
|
||||
async def create(model_class: Type[T], **kwargs) -> T:
|
||||
async with async_session_postgres() as session:
|
||||
new_instance = model_class(**kwargs)
|
||||
session.add(new_instance)
|
||||
await session.commit()
|
||||
await session.refresh(new_instance)
|
||||
return new_instance
|
||||
|
||||
|
||||
async def update(model_class: Type[T], id: int, updated_data: Dict[str, Any]) -> Optional[T]:
|
||||
async with async_session_postgres() as session:
|
||||
stmt = (
|
||||
update_(model_class)
|
||||
.where(model_class.id == id)
|
||||
.values(**updated_data)
|
||||
.execution_options(synchronize_session="fetch")
|
||||
)
|
||||
await session.execute(stmt)
|
||||
await session.commit()
|
||||
return await get_by_id(model_class, id)
|
||||
|
||||
|
||||
async def delete(model_class: Type[T], id: int) -> bool:
|
||||
async with async_session_postgres() as session:
|
||||
stmt = delete_(model_class).where(model_class.id == id)
|
||||
result = await session.execute(stmt)
|
||||
await session.commit()
|
||||
return result.rowcount > 0
|
60
db/csv_to_db.py
Normal file
60
db/csv_to_db.py
Normal file
@ -0,0 +1,60 @@
|
||||
import asyncio
|
||||
import pandas as pd
|
||||
from sqlalchemy import insert, text
|
||||
from sqlalchemy.exc import OperationalError, IntegrityError
|
||||
|
||||
from db.clickhouse_db_connection import BaseClickhouse, engine_clickhouse, session_clickhouse
|
||||
from db.postgres_db_connection import async_session_postgres, engine_postgres
|
||||
from db.models.base import Base
|
||||
from db.models.ch_experimentdb_experiment_data_model import ChExperimentDBExperimentData
|
||||
from db.models.experiment_data_model import ExperimentData
|
||||
from db.models.experiment_parameters_model import ExperimentParameters
|
||||
from db.models.load_parameters_model import LoadParameters
|
||||
from db.models.recycling_parameters_model import RecyclingParameters
|
||||
|
||||
async def create_all_tables():
|
||||
async with engine_postgres.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
BaseClickhouse.metadata.create_all(engine_clickhouse)
|
||||
|
||||
|
||||
async def load_data_to_postgres(file: str, model_class, chunk_size=100):
|
||||
df = pd.read_csv(file).dropna()
|
||||
|
||||
async with async_session_postgres() as session:
|
||||
for start in range(0, len(df), chunk_size):
|
||||
end = start + chunk_size
|
||||
chunk = df.iloc[start:end].to_dict(orient='records')
|
||||
stmt = insert(model_class).values(chunk)
|
||||
try:
|
||||
await session.execute(stmt)
|
||||
await session.commit()
|
||||
except IntegrityError as e:
|
||||
await session.rollback()
|
||||
|
||||
|
||||
def load_data_to_clickhouse(file: str, model_class, chunk_size=100):
|
||||
df = pd.read_csv(file).dropna()
|
||||
|
||||
with session_clickhouse as session:
|
||||
for start in range(0, len(df), chunk_size):
|
||||
end = start + chunk_size
|
||||
chunk = df.iloc[start:end].to_dict(orient='records')
|
||||
stmt = insert(model_class).values(chunk)
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
|
||||
|
||||
async def csv_to_db():
|
||||
await create_all_tables()
|
||||
|
||||
await load_data_to_postgres('./db/files/load_parameters.csv', LoadParameters)
|
||||
await load_data_to_postgres('./db/files/recycling_parameters.csv', RecyclingParameters)
|
||||
await load_data_to_postgres('./db/files/experiment_parameters.csv', ExperimentParameters)
|
||||
await load_data_to_postgres('./db/files/experiment_data.csv', ExperimentData)
|
||||
|
||||
load_data_to_clickhouse('./db/files/ch_experimentdb_experiment_data.csv', ChExperimentDBExperimentData)
|
||||
|
||||
print('csv_to_db выполнено')
|
||||
|
11
db/files/ch_experimentdb_experiment_data.csv
Normal file
11
db/files/ch_experimentdb_experiment_data.csv
Normal file
@ -0,0 +1,11 @@
|
||||
id,volume,nitrogen_oxide_emission,temperature,co_fraction,co2_fraction,x,y,z,file_id
|
||||
1,1.25018009e-07,2.923801e-10,1546.8502257117334,0.0876590170721079,0.0825937575747152,0.0002862908352005,4.250519128266181,4.23689607830385,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
2,1.26276707e-07,2.774402e-10,1546.5278876054947,0.0876535741398523,0.0826072611209551,0.0002970890883859,4.2633663477653,4.2118739518585935,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
3,5.215560244e-07,2.800989e-10,1547.007375203737,0.087598352075182,0.0826205755990879,0.0023288861534884,4.258002712932174,4.224854019469968,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
4,1.259521373e-07,2.756836e-10,1544.7738826604286,0.0879623682225424,0.0825022367344128,0.0003061405654724,4.294951651093852,4.228359039356472,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
5,6.71204778e-08,2.747822e-10,1543.303419205242,0.0881230454580786,0.0824746033833566,0.0004276277312526,4.301939013567143,4.203422399444153,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
6,3.982683542e-07,2.728959e-10,1544.1211163717342,0.0880178768655007,0.0824974031307205,0.0025840772927808,4.2895374677272695,4.241641279196477,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
7,1.314501491e-07,2.729991e-10,1543.9585181296568,0.0881077612277477,0.0824593957518346,0.0003192230503286,4.282153424064967,4.253165462380294,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
8,1.2711512153e-06,2.799785e-10,1545.337937815918,0.0878016656787745,0.0825684205234254,0.0031927006255012,4.279075221963268,4.242926141081111,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
9,5.002643798e-07,2.907778e-10,1546.1911065379516,0.0876446332442777,0.0826230869307894,0.0012912004540912,4.259093754350848,4.2392143443160855,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
||||
10,4.372515903e-07,2.852153e-10,1545.394093220484,0.0877377183636819,0.0826003036520615,0.0010234056556132,4.268539978944442,4.241752821543271,10bf3b81cf73056684c0041f6adc5a35881bbeca2ba0e8bbc7d827c3ba058a3d
|
|
404603
db/files/experiment_data.csv
Normal file
404603
db/files/experiment_data.csv
Normal file
File diff suppressed because it is too large
Load Diff
868
db/files/experiment_parameters.csv
Normal file
868
db/files/experiment_parameters.csv
Normal file
@ -0,0 +1,868 @@
|
||||
id,outer_blades_count,outer_blades_length,outer_blades_angle,middle_blades_count,load_id,recycling_id,experiment_hash
|
||||
1,24,70,30,18,1,1,f3440e566eedd3cb6bceaa2b8e16396456c2801120fabd283561b6ee2100b0b5
|
||||
2,24,70,30,18,1,2,a47bd45c541df0f1ed9f853bf21ad4157a69aea5f3bd91925536af75a51aa3dc
|
||||
3,24,70,30,18,1,3,ed1525ca364458eb337f71632366a4ba17528e3a966019f38e9c52be73f893aa
|
||||
4,24,70,30,18,1,4,9d30eb894c46d1c09fb739530efd743debff8cc40ad9e31cfe7645bb163ef1e0
|
||||
5,24,70,30,18,1,5,d3a0ddf904a96bdf79d5ba6c62bf7c0035e36c11dfce48bf9e6768f738e96893
|
||||
6,24,70,30,18,1,6,2c11dd64bbc6b7b1d6dd4aabb7bc278ae39c10843fb9e45360ad4d56382600db
|
||||
7,24,70,30,18,1,7,1b8eebbbf139120224cd35221a0c55fa85568e3e29ecc3967963ab8d243151ec
|
||||
8,24,70,30,18,1,8,7b3c151a9712638709836f54ad10e671c98cd77d69a0ef7d3225427cc12568ea
|
||||
9,24,70,30,18,2,9,d088c77f22a9d7598a5af46ef623e2611d1bab914c2ab4877f79175fb654d6aa
|
||||
10,24,70,30,18,2,10,de5054f2198651c958a57a816eb85d5aa58cd061268a5195cae60e4a1c681e85
|
||||
11,24,70,30,18,2,11,448581cea9fbb47236889fc7a5a18e175e4256e2cc8ebd7bb202c2463411280f
|
||||
12,24,70,30,18,2,12,6cca36dc2f51aa1735a622404fd594a31609f337a26c0924c241793f84fe0ab3
|
||||
13,24,70,30,18,2,13,3b446baa52e9268697b8acb2c005d7c0400d9d6a90e39f62944ba694910c45f5
|
||||
14,24,70,30,18,2,14,cc93de3f50f3892f461424b7b11ea02527af20b70e707a5aae0aaab8f947f392
|
||||
15,24,70,30,18,2,15,f46e555206f2ab5c308c467c8b2c0eb724f027f9b9b3d57da278a50483ffe2bb
|
||||
16,24,70,30,18,2,16,7d327b5a4ca0d16d054c7775a2f6cd66e9f1714fd3a3be40437c02d077de5c67
|
||||
17,24,70,30,18,3,17,51ab3b741aee17c59ef82c338d7fdde79697e6226cc3a7e4b3b40ec5dfcba647
|
||||
18,24,70,30,18,3,18,fbcec5f6a53659317dbd8ec4047bb9215ed39b84001f7cda673becb37e74ba51
|
||||
19,24,70,30,18,3,19,7bf6e8cd421222c7bc17c5e6ab43dcee4316e9b885903db1ca41741123009ff1
|
||||
20,24,70,30,18,3,20,aad101f9418d0bb182d64da455caeec0bf410e65a3efdb44a025adc53f8ce216
|
||||
21,24,70,30,18,3,21,c609ff027d988b6ea282e544d3191f4f9f47f912cc891b3d2ab32e6191d3e739
|
||||
22,24,70,30,18,3,22,a460f48676a062c64103ff8cadd1faacf993f1253cdefe6c4b99a8505d09814a
|
||||
23,24,70,30,18,3,23,c41ab44cb00cbe24ee9d9c29dfc847b7bf5954a136f07d95d5ef1c821b6e751c
|
||||
24,24,70,30,18,3,24,3a56cfd1d1a3cd97d51bc489e63a1682e1495311900f3f9d337fe22c1a9884b5
|
||||
25,24,70,30,18,4,25,c01ec654b3825e770fdfcded717e9d0862cd6d1d1303ffbf5a11974e5f583849
|
||||
26,24,70,30,18,4,26,d6af15b0829a64320158a05684faeec8dbdb7599177ba0b95d2428f517025b19
|
||||
27,24,70,30,18,4,27,58ff2e215f22abe9ca172b21db0f3ee3c89c8a77a5afa3c33cde6b1490d788ef
|
||||
28,24,70,30,18,4,28,78b2430505297f9d16d1ee31b1781b3425f5ca8af81f758318f9bcc513b16056
|
||||
29,24,70,30,18,4,29,3c9d9f05dc256a57766f7448bfbd1dc4090742092942a09c30a0cc4775901df8
|
||||
30,24,70,30,18,4,30,78f91bf6c8e291f85582e96a5e0afcdd8b70c71d887cf7f45534268bfcbe065b
|
||||
31,24,70,30,18,4,31,f2c809d7de702b3f76f22e87ce25687c75ba3239fff494b5f80d44397e0365fd
|
||||
32,24,70,30,18,4,32,87b7070cb8e3c39cb1a00c132abef4ce1e5bdf082bb21715d3e5ea063d65cb6c
|
||||
33,24,70,30,18,5,33,7e044e9dbaf5d043699ee22876ea8ae05659ec03b024a10849af140243726fbd
|
||||
34,24,70,30,18,5,34,ebe73f29770dec56bb3ce6b2832e723d8a1f0ddf1f63698ccd057535bc2e7c8b
|
||||
35,24,70,30,18,5,35,e673d4cc2675fda210549e533de77618a4a003c067bf0f2740d2fb35c320d1c1
|
||||
36,24,70,30,18,5,36,f6373fe5dd40b33cf6f902705479e4e611e9e3f002e3d53b74d4467db6461603
|
||||
37,24,70,30,18,5,37,f0dfcd828ab3edf2822d869f39fb24111eee5e8d54f5e67d6cf29d12d091a493
|
||||
38,24,70,30,18,5,38,c7513526483d1f52282a177f5db8bce4223dbea44302e5b50cb00fd95436dc5e
|
||||
39,24,70,30,18,5,39,937554b847c97b1545bd6169f594cb6a57cc3fbfe462fa976cf5b5c30cade75d
|
||||
40,24,70,30,18,5,40,bbf8878c97bb3d1d55b85450c500416f5ff4254d098b6329966ccd1af6fec198
|
||||
41,24,70,45,18,1,1,d93465f1368a0bc246d9ac814417d55eba2674dd96b6deee8b14f3496b44a5d4
|
||||
42,24,70,45,18,1,2,63f441456c37857e11d9194e55ba304433365a38f9e2395e0f7826a8cb52979d
|
||||
43,24,70,45,18,1,3,0b6f75922844a41b9e517dc675dc41bc592afccc7a9fb108b078011197058a0e
|
||||
44,24,70,45,18,1,4,d231c7b7601c2fcde797acf2eed7ed6553a059e5bbf59cbe01d68f568f57ace8
|
||||
45,24,70,45,18,1,5,019ec639ed4ac56a5d1017ba10914acc122da59ebaaf8f929dda7b351ff5224c
|
||||
46,24,70,45,18,1,6,2d439156da14719d43e33ba034782fee7fb83033f1a4897f0b20788c5ebca65e
|
||||
47,24,70,45,18,1,7,8f31f444564af0a7c70bcf2299fe80e9b9fa1a8f84edc4afbff81c0e4969fd6b
|
||||
48,24,70,45,18,1,8,af2f9f938b771242ab4b0221a0d937e03ece383a2192d3036e05988fb2442245
|
||||
49,24,70,45,18,2,9,26c261c66a5e93b4b88e93290324f5706ad2de59dd59e123c9db34d76494966f
|
||||
50,24,70,45,18,2,10,f73948ca1404ac1ef598d32967ff590beac673c1f128633281e5f91d20439598
|
||||
51,24,70,45,18,2,11,ea7ec1c838494ef086813bed27ae2c0c23f8875334392058cf1069615a333e42
|
||||
52,24,70,45,18,2,12,4fa7e25f2c9c12088e4bb783ec7330a24744c9b83357256b2e21ce6bb6e139ca
|
||||
53,24,70,45,18,2,13,a94578891fd1dd142acce45268da610890c2b148da88caae75c6033b655f93dd
|
||||
54,24,70,45,18,2,14,cca92f84a1ccca51108ac4ceaa5acb74d993b17200a3ae4db3081d0025304969
|
||||
55,24,70,45,18,2,15,8ce57236cacbca39e548e83ea1bcc342b62df29f3bde0caf2c0c2db1cd3b432d
|
||||
56,24,70,45,18,2,16,8b647157123d4f7bcbcc625b054e3e4d83a0804e57731005a8dd903ef72ea936
|
||||
57,24,70,45,18,3,17,7d660b53b68eeb2d66b78089f71c4ed2c872369a1593a7d284d4d0df3eace407
|
||||
58,24,70,45,18,3,18,3b29424168040cbd1a2947c94a8e61be3776ed45bbc1112909a55cf5ebe1bbbe
|
||||
59,24,70,45,18,3,19,788aaab9df7f831a3e6056bd7758a218ebdb923c0ebf5be142a47c59a494270a
|
||||
60,24,70,45,18,3,20,a4bb724f51b10dcc325ec19cbe0b8c5b41c8b9b0eae296dc61c353314db1b36e
|
||||
61,24,70,45,18,3,21,6cafc249aa6b9e95afb63f60afd62255f2c95a8445b0b9e57a39cb92ae348f31
|
||||
62,24,70,45,18,3,22,24ae10d92145ca93e6acbe22bb510f22af67453bb371bf13f904cb9a2d06d4d2
|
||||
63,24,70,45,18,3,23,0405c139bc6e1bc882c3767d7603d02803acda222870e38ddc94dcefeb76179e
|
||||
64,24,70,45,18,3,24,fd604232c9eb21c707c1c0afe99e72f5f131537850c51bf2a6709705e82b284f
|
||||
65,24,70,45,18,4,25,34c86de16b8c7a3002bba420710d099ddd31591f78f8783caae64129d5f1fa6d
|
||||
66,24,70,45,18,4,26,3be010d0e6a1daabc7a5e21ca17fc68508665bb4b99ec16a4912f88f0c1bfee2
|
||||
67,24,70,45,18,4,27,19058a20083e7652aceebe4079d7918e0afabcb2b634ea0956c5cd8006a12082
|
||||
68,24,70,45,18,4,28,ffba62754ec42c376894013792d126e31c307cf52f5aec10a148c74becbfc692
|
||||
69,24,70,45,18,4,29,0cc7665eb716cf2851156fa45bf1c241cfccd43b25d757d798140a75f40b2354
|
||||
70,24,70,45,18,4,30,eb20ea5909a55f61b92ff4337727242240765993931d9175043cbac3dac6caa5
|
||||
71,24,70,45,18,4,31,a4a3baccc35da76517d3a16d379ab8416dabcaed429a72ef26e9ebc757377867
|
||||
72,24,70,45,18,4,32,550c05d891ee0a19a37a0a614cc9dbece86e922973965583d22ceacb846e1581
|
||||
73,24,70,45,18,5,33,995a45405eedeb6e463642d6f723b6fdb35df6035e7198d787e5a14fca8b4a85
|
||||
74,24,70,45,18,5,34,66c882d8ee6b3f9b1563ba3c18dce8e7592b3e548d9b0aa2b54f9cec6d487889
|
||||
75,24,70,45,18,5,35,a1856cfffa7b32a6c553a548f6cb52187fa9789f414a3a29712735965fcab90d
|
||||
76,24,70,45,18,5,36,c504f3e398c0850397f0fea4bdf2df3eec3c5cf8a9200d164f34b2c92d59be9a
|
||||
77,24,70,45,18,5,37,2f9ccc8409dbdcd01f9c1853b713c48e3f31b5ea0ede68cc956abd2529ed9bf5
|
||||
78,24,70,45,18,5,38,9dfdcb6d0d69d6f54da0170c0b5bbb6c382ccfaa94c803ec093a01db452c2f24
|
||||
79,24,70,45,18,5,39,09682926ea871314009a2e8340c4e0597573ec925c8d5666f7deb0c97c649fbf
|
||||
80,24,70,45,18,5,40,97018fa18631ed88974f799858c3e9731aefd3d308f693e0d9e095d9ed6b5cff
|
||||
81,24,70,60,18,1,1,b54c62da0bfea8f337d0c380d534bf98b25c1be9f014db4b8c2e4b455e85279b
|
||||
82,24,70,60,18,1,2,cffbb4238b69f5b51d93fda58847314f90277073caba72eac0969368d2bf72af
|
||||
83,24,70,60,18,1,3,2ba7288af1d84d07e239dd78baa790b6ada943681bbdfdc27e7f489da8046e8b
|
||||
84,24,70,60,18,1,4,afa966ce1f0dcfaa6282a049c0c30febc999f856885199056dc570b97b6adff9
|
||||
85,24,70,60,18,1,5,8f8df0abd28895a93112a57c4d4b32be7eb9c9d7f9ac40f016603173185a78e1
|
||||
86,24,70,60,18,1,6,1e5b48a6d463e88f4bf49c29dca892d77b2a16a9cffb3cb4fab341f5645cdb77
|
||||
87,24,70,60,18,1,7,879e6b65a692343e84e8e02e92a49d63053180a22f4b42676e2f29bbf581bd6a
|
||||
88,24,70,60,18,1,8,0f76f567f474e5b41351eb42f0c6dae27240f7c69a65e0a02fd631ae7a30b088
|
||||
89,24,70,60,18,2,9,5c68cce55587a05f51a597e0e2c57971e111e412e66b29d933cddddc892ba911
|
||||
90,24,70,60,18,2,10,307e271391f0090938521a4ed707064dad973cb360497602b23dc69bd13daae6
|
||||
91,24,70,60,18,2,11,bddfe29d9e272a9990190682aee23bb57da690ce391cf9dab1ba4f1e80e3e932
|
||||
92,24,70,60,18,2,12,efcd861cc0eea9334341de08ef26a690c961fd7f37d37b96e9d3a8496a7b96de
|
||||
93,24,70,60,18,2,13,32a460c67c2a9442b1b103523ca6a116d7ae2de8c2245f4cf51b2d666ceb2dad
|
||||
94,24,70,60,18,2,14,8eac61db97a0cf8c060e9d4c235ca2fafe8fa85129837c74417429d781f4d8b6
|
||||
95,24,70,60,18,2,15,73d6e002b5cbdb9888f5dfe4530371d1efba05da843b47343ec6a24d358f970e
|
||||
96,24,70,60,18,2,16,0064dd418bb85442ca1641bd7d4659bd2a1c472123a30072b6a2e4280083ea85
|
||||
97,24,70,60,18,3,17,75fb2ad1605612509d86e932eaa930221d6b26dff9646e6680524d88e65b3dd3
|
||||
98,24,70,60,18,3,18,b701734dd3e549ceb97d8a82682b2728814b92e08fbeb949bbf67e7a79f1365c
|
||||
99,24,70,60,18,3,19,d327280a452af12ee949f54a09cc47f3fc855bbd4b559a021c5632ce1bf7f9e6
|
||||
100,24,70,60,18,3,20,d8470f3ee4730ea1b618cb1e9f61d53378b1b139725df661e8cca6a75ecea753
|
||||
101,24,70,60,18,3,21,b289c625935178c4389206037e68c6f52c4bc5be990a25a26c223df840560356
|
||||
102,24,70,60,18,3,22,a3d18f7ca7cee4a8aec93c65c9a14a3b3fb64f28981c6501f8f2fac4db09b561
|
||||
103,24,70,60,18,3,23,5218ef80c1efd4f752a6cfa499d71d63245f4a1a013abd40e1cf56e100c1c58f
|
||||
104,24,70,60,18,3,24,1b16c43ada345c628d9bf487f5114c2730fde939e25152b011aee810ba70c163
|
||||
105,24,70,60,18,4,25,0471851d3b19ea655e1498f5b7099e10fe069d9f69235270252adc2044f9a86c
|
||||
106,24,70,60,18,4,26,ee0b78999cc119ae2c697dcc7c5cf3cc34cc8fab0be267eccd484f3a811555e9
|
||||
107,24,70,60,18,4,27,35228f2dee7eda00408c5878511762d740f4c9e0ee27d59cb8624ec116925068
|
||||
108,24,70,60,18,4,28,86f3de97013f53d9c9486c25cd04b97d52892f52c72c69007b46b06e8665c2b6
|
||||
109,24,70,60,18,4,29,0ee70f3eedb98ac680768601cf84d76f7b9fa195ebc6f6850c1cd5a752acaf4b
|
||||
110,24,70,60,18,4,30,5112d4b18b376287c286863d52f824062d90590fa4c3928041b30258f80fc8e1
|
||||
111,24,70,60,18,4,31,ed71b644bcc7479cff5bb1b74dec0f1868258707be53a2b6a186b3d366b83796
|
||||
112,24,70,60,18,4,32,a2c54f86299c603fb20444001e5eb7029d0367232e47b05a5c7833fe38df1d07
|
||||
113,24,70,60,18,5,33,56d4f83a0f1dc14643d621adb03676f5193f64ef8d03e598a8c5bfd8af034d50
|
||||
114,24,70,60,18,5,34,603d47e77e49f235dc7ddc3971d07ca923a8b173708b1d56e2cd2f715fffc899
|
||||
115,24,70,60,18,5,35,03222d207ac70db5ca2632d1c1b64eab35ddc337c4007d67da96d7d9256e9c60
|
||||
116,24,70,60,18,5,36,7977f6c305b18e6f336dfec451dd8fee5ed95619ebd7ed25e720c170cff7055a
|
||||
117,24,70,60,18,5,37,c6289646d1d7e7c3a5f3473dd8f54e3ab810b7274c11842a4f8cef37f6c850d9
|
||||
118,24,70,60,18,5,38,5d2155f7aa0189d24fe10cacb93491e1629df381f3c296afb5c36ac50528c801
|
||||
119,24,70,60,18,5,39,5ca59876b7808331ced53127a0dae0a464a1da3610825f4d14c468a080bcf8cc
|
||||
120,24,70,60,18,5,40,80d0b251451977827cb7841ab36fd5b4ff2ac65f1004acbf5409e59fd4de252e
|
||||
121,24,70,75,18,1,1,6d545739aef47e07fb946a0a802758733dbf559f62ab82eb0e218e50e0a067d4
|
||||
122,24,70,75,18,1,2,de34f86cbf88081563e5976013233f0fc1c2c1684139020e7564c6297fbb3a6c
|
||||
123,24,70,75,18,1,3,0b2faa7f9a7b122ffcf2091e1714eba7330dc6899b7c529344b26190ccdd11ad
|
||||
124,24,70,75,18,1,4,cd4c16b5e4ee651821cd586db529765f530845753dd7ba89faf704742c2f1874
|
||||
125,24,70,75,18,1,5,3e81dd88a44e2b866f15a19a6cc78c1fe07d5e45caa1a3779b5659ecd241255a
|
||||
126,24,70,75,18,1,6,72ecd10b16fdb357f89a14a48a38b81fbdc7cc2850f608e547b1654324df0ddc
|
||||
127,24,70,75,18,1,7,8e53935b91ef51de3f49c27776d6f33887f7b2575589bdde5db8a74065c9caab
|
||||
128,24,70,75,18,1,8,a211936012fbacfd7ba8f4a84503907b02a67fb8ae76f92eb24318c3577c5605
|
||||
129,24,70,75,18,2,9,9223dcc932346a888aa0c05f9397bb200408f09b590c02b0c5a9b4f511984d4b
|
||||
130,24,70,75,18,2,10,cecd917ae056d26891c3a2695081a248f894654dc9f0766f98b9cd84436d5da1
|
||||
131,24,70,75,18,2,11,944f0d285e7e5750d7241cbeb17ce5dd878a41988b4236d796351955b9aa1876
|
||||
132,24,70,75,18,2,12,8d1ecbd4bb674d0faae4701466a2d014221f0fa0cd4a627753079e1f4e335f6f
|
||||
133,24,70,75,18,2,13,d6e377d21da590a13cf5a1238c985f8fad843287c7282ed794a8f0ce2541fef8
|
||||
134,24,70,75,18,2,14,12e9d62fa97c1dbcb30336eae7f1ea63e5f08f7bc3f3b91be2e91d3225fa228d
|
||||
135,24,70,75,18,2,15,6622aa62f0b7a5233c1e0f320beb7228fda235165e3323e4e9e7a430b18206b3
|
||||
136,24,70,75,18,2,16,b36883e4c6584e4d6e7150a18b88c55bcd8ab222b1e14f1f80fe8b17ffa0cba5
|
||||
137,24,70,75,18,3,17,961041a1051b839d43a8556c4ac22161915aa5821b281019b87b388781c50b67
|
||||
138,24,70,75,18,3,18,0b05dd5abf695a71315a50e899e9ef1b9c97648c1fc413e2bd8693aa089aa529
|
||||
139,24,70,75,18,3,19,5c08f91ddaf8ff5dc85cbf31348dda374a9ae39b96194393b698d28d2fe4dc37
|
||||
140,24,70,75,18,3,20,728d8c5e43dacc29ae22ec69dbe39aebc9607e2183901e15916c82da83e95673
|
||||
141,24,70,75,18,3,21,6b576a9bede17797827aea40e6701b326e7d4b80e676f0074459fec9abe30fab
|
||||
142,24,70,75,18,3,22,349db416e20e983797120307ea0eb5f2156fa36d61f90a78d394e6fb27808723
|
||||
143,24,70,75,18,3,23,3e9abeafc654cd1876217ca4a09cb16eca7503715176fcc0008da9237f516166
|
||||
144,24,70,75,18,3,24,c08d3f975cb070a3ef23485080e5754907ba68e7b1644f01037509a1a2e0d3b2
|
||||
145,24,70,75,18,4,25,effdb858818cc1ed341daf264e6d41de6115a2193530925de65d88b33fd85941
|
||||
146,24,70,75,18,4,26,0371e01578a91f25a5b01e2877190dad3e8f4a383aa4f6bc135653d376bbff2c
|
||||
147,24,70,75,18,4,27,f4ba9e573f4319bea2e10cad7bc3fc626be92bfefaf6f568fcf8a10b3a33577d
|
||||
148,24,70,75,18,4,28,58a8bb05d15ea462db5e1692bfdabdc5a486fcdab7eff06de7b11f248d49a420
|
||||
149,24,70,75,18,4,29,d39b87cdbfed71cccf28c41d40e37edb8443d3d70369bee77154e6d45ce6b97c
|
||||
150,24,70,75,18,4,30,845b54d75b3c437b22a4ec62c2164443578133f0acaa8f4a59023ea9139da2ed
|
||||
151,24,70,75,18,4,31,4179abc305886bd617a7ba2a359e787000a7b53c105029e278c10153549115e5
|
||||
152,24,70,75,18,4,32,354cfd7bbed7b77df68bc3d9a54ac72663c34a7b973076c48b57221ab3ba5b33
|
||||
153,24,70,75,18,5,33,2240464b252144612bbf00e35e12c3383c9658c91fbb2f09018be78af5e2eeb4
|
||||
154,24,70,75,18,5,34,59354495b5677e001d684ab710a0262a46b1413da35f74bddefa2aadc50861f5
|
||||
155,24,70,75,18,5,35,21d6203994eb8e2ae006f00ca1c6ac857b987ffed864ac9cf1130ba45239a003
|
||||
156,24,70,75,18,5,36,262610392dcbbc2d72e943587cb76fed40f9682b9af659ad5926225e35c34be0
|
||||
157,24,70,75,18,5,37,5538683e858e528148d42c228b2e267ffee642217552a916a5dad31a3d6f5940
|
||||
158,24,70,75,18,5,38,0c4cd9417f5fba3a5298a75947d93ceafab5b7b6546a66dc64e3c86f259e6b4e
|
||||
159,24,70,75,18,5,39,bc0a419f5c62ceed6790a7c6e99e98ff8f08e4b0f4975db2ea6cf866ab1d0428
|
||||
160,24,70,75,18,5,40,6e7e9cf40831c0ae58b77b44bb845d99d1df943521f3749fdc7c6171539ea35d
|
||||
161,12,70.0,30.0,18,1,1,a805ffc4f4154a511b74ec04fc907bfaf736de6029d7010b2be4ed939a44fe3c
|
||||
162,12,70.0,30.0,18,1,2,22cc341cf605a0dd789f945fbd682620662d6c8c632591b272657359894a15d7
|
||||
163,12,70.0,30.0,18,1,3,7c2bb9c2fe7fe70cf823a94258026b841afea380069e8cc38393c83d787da3d2
|
||||
164,12,70.0,30.0,18,1,4,4fa46d97288696bdbe91ed97e045f48f4539cf52b5c551f57ffdcead04e33901
|
||||
165,12,70.0,30.0,18,1,5,a26b896dffd47b941fa03e6468abeb8bf85f4a8e8d85875e51d7b6a3e304792f
|
||||
166,12,70.0,30.0,18,1,6,df8bbc27e4cb1db2b1a5c96736be6c53ff9f9fa14054c8bf4fd6f57be1d04390
|
||||
167,12,70.0,30.0,18,1,7,e537cfebc392c09e383fcc257e7a60456eb023d38892d6c0f160cde31533e22f
|
||||
168,12,70.0,30.0,18,1,8,a16b2002e94d0607bd6f9d600bfc4a90d85cd9b178c1e0dbc00dca63b8826d20
|
||||
169,12,70.0,30.0,18,2,9,2ea17cb81f75a0e9c2236a3439e7c4b0248fda0829882f6da5ff053ed89edffd
|
||||
170,12,70.0,30.0,18,2,10,f4e946279c5231c5089dec3d098909ad4c635bc62855081d20244a6bbf3b8a46
|
||||
171,12,70.0,30.0,18,2,11,170aaff0b2388cbfa08ee7aa63ab324ff0509d5492494336f204e2751b144815
|
||||
172,12,70.0,30.0,18,2,12,0a66a2c9d34b9cb980960f79d74f8d92724d6e10855e2f191b825d14c1817e23
|
||||
173,12,70.0,30.0,18,2,13,1a1d4a8e6eddc8f3fa5b354b1f447e713b84412128e447683a0326c759b0e8e5
|
||||
174,12,70.0,30.0,18,2,14,d69dc9b7b49629fac3580fee0bc33ad852fb3fdd095900ef5351802c8d58d322
|
||||
175,12,70.0,30.0,18,2,15,9518d78c40c96ee9dc5400c4e241ef388dd78cfd4f93ec7aa09d0a5588c6fb09
|
||||
176,12,70.0,30.0,18,2,16,bce8a23a3dd6be2f6f34aecc336aa800e32b890d0427f1f455bb8bf9187e93f0
|
||||
177,12,70.0,30.0,18,3,17,e0f01b26e62a71e1c56923d1e331b27a00ee2ca32e1aefa666ff35b736388a5d
|
||||
178,12,70.0,30.0,18,3,18,69c0a48311eb8c80f9c965717bb09724ed0fb04698129086a7adba0c2e3bd895
|
||||
179,12,70.0,30.0,18,3,19,e6a3891962155a885805cd5f2779744bc9545a69e0e9d699f1b58ae59798df3e
|
||||
180,12,70.0,30.0,18,3,20,bb9207fdfac25bc7031db57684e2a198597f70303e7a4712638a26ce73e86e9e
|
||||
181,12,70.0,30.0,18,3,21,b8621d39a0cd80c14bc097a293a9e487c5fc3c88aa8fe99db7e66b6071d59f3a
|
||||
182,12,70.0,30.0,18,3,22,6193214390a15c34edfc3e046cd782afee6daa9480e860c9492f6991bb640e69
|
||||
183,12,70.0,30.0,18,3,23,ba2a2b43ad5504cb5e9079308adc33281098b62791ea57b59815e0c7a4c931d5
|
||||
184,12,70.0,30.0,18,3,24,9b9f252dcdb42dc5c4d3e23603ef1efbfa439494bcc57b6fb66425429a6d36be
|
||||
185,12,70.0,30.0,18,4,25,7906d2773d505d606591215637a07bff01f37e6961a9b7d5a1ba6e84a789c232
|
||||
186,12,70.0,30.0,18,4,26,8d27ac090f25ee40485595666f20ae101ab30e0fbd71b45579ac42d81e6f0ee5
|
||||
187,12,70.0,30.0,18,4,27,d434a240eed8678106bfe0ed4e971da456e846817b308338a8ac408a4d2f8ca3
|
||||
188,12,70.0,30.0,18,4,28,574bbad43308099af48e9821ab4402e668d9041619773a0009d4b5a3cdc6129d
|
||||
189,12,70.0,30.0,18,4,29,6dc0d553d56dadc559ed1ca9248ed385db2022efc37caa9fa36d36643511544d
|
||||
190,12,70.0,30.0,18,4,30,d92a897ef5e0cadcd9753ac58cc9a1a458b604e0f1de95c5e8697ac93d7857ea
|
||||
191,12,70.0,30.0,18,4,31,226ed8f17ea2dc0dc0c6474a4e6319ad8e33bfa6bb347614af9e63d30e1e8802
|
||||
192,12,70.0,30.0,18,4,32,408ca691f7eab6b8448ac2bbcee48485de17818bba666167c3305b99c0edce57
|
||||
193,12,70.0,30.0,18,5,33,42a849f86214357f061e5afd83bf87ee67809b6f1524a6673e5ba437cee0d845
|
||||
194,12,70.0,30.0,18,5,34,ef1428e13941fb0922d15ec537ec505567f888bfa2ef337902b0f4448620fba2
|
||||
195,12,70.0,30.0,18,5,35,a96adf8bd64bb2525e63ff0bfefc42100ee534d464cbab343dc1d8576e0e3427
|
||||
196,12,70.0,30.0,18,5,36,941be2d3869ab6634dc2f26b05f48154273ff8b8b3c3ffef4740f75a927420b2
|
||||
197,12,70.0,30.0,18,5,37,b861e5f595ff12264113d28957d8d3bf7396e06d43bded8f2ef2f3c4bfa9b2e2
|
||||
198,12,70.0,30.0,18,5,38,56a5be6bdab22e6a9b6f92ce933003270dbc01ebd90cff2ccfeab44ec8423805
|
||||
199,12,70.0,30.0,18,5,39,46dcec6ba38b602f6d8bd444569d7406f3ea98fc7ed8f68b718c645e04a7baa9
|
||||
200,12,70.0,30.0,18,5,40,c82dadec21be7c6dd5022ff15ec0582bc2bebac23ca2c3cfce62acf56b05c88e
|
||||
201,12,70.0,45.0,18,1,1,1837dfc8aae2c276587eb9b3a63bfde8e2ca032ebf9e71482f7b8156504b0ecf
|
||||
202,12,70.0,45.0,18,1,2,e93f4e2fd56aad3c0b52094c4c9532a1b322561046211c08df5bf6d3042e4d2f
|
||||
203,12,70.0,45.0,18,1,3,08995ffcff62cf206405509663d29bed8d84ec894fe96afeab611a570b837be5
|
||||
204,12,70.0,45.0,18,1,4,f0c98031c4a6f60bcd173a1aeef527f6391439d69d4de0b5161f273bb50ac4ab
|
||||
205,12,70.0,45.0,18,1,5,f674d850a68af8206a73efefdfc93274d7954b851544579b9012c68fc52a046d
|
||||
206,12,70.0,45.0,18,1,6,ec0dcf2854e03aac414efc238031239a442d48734d1d20ce44875206eea2b69b
|
||||
207,12,70.0,45.0,18,1,7,8e009035f11186d55eaa070fc981a5de5941fedd6e1b130072abd77359900e27
|
||||
208,12,70.0,45.0,18,1,8,5f36314a2098a299f25b76003115a491618deb71e8138ba7e17da3bc8d40c1e9
|
||||
209,12,70.0,45.0,18,2,9,3b9c7b69a08ba82908b1da8c17db6f97d9ad12710ae69741478575b56675504a
|
||||
210,12,70.0,45.0,18,2,10,694fb40f6f9c5495107651d211f27b031cbf862151f21099ab93340dab09445f
|
||||
211,12,70.0,45.0,18,2,11,cee5a476d2eafa002ada7723c4d453df3fcde04f81475f1895270709c246f3ba
|
||||
212,12,70.0,45.0,18,2,12,41491b3b218c4693f9814b48a0575820f45177fed2221d76c60ac6592064fe74
|
||||
213,12,70.0,45.0,18,2,13,510972d297dbb6b3ad3e84aebfb1c808dfa3ccff49dc71b78becb7aa0dde3ad0
|
||||
214,12,70.0,45.0,18,2,14,ad159601c749d21c6ff1fc17df21caf362f033c19af41457c680d4ce9632ad8f
|
||||
215,12,70.0,45.0,18,2,15,a3d18a64e178e7d17bdf5a807b5e227e501ba3bb3c885d20b1486f4a67652f98
|
||||
216,12,70.0,45.0,18,2,16,ef157fb73d366c685ffb89cfde916562d256e8af5c38bd46ecb80ec0df6f626e
|
||||
217,12,70.0,45.0,18,3,17,f30bde998b6fe89ad6b36a8523bec5bf0621f62530bd722b3b92d1582674e4ff
|
||||
218,12,70.0,45.0,18,3,18,9c90eb4243ac988b05412c1f9c06c468730f6ed2b7d58986bd39c3fbb4ce06c7
|
||||
219,12,70.0,45.0,18,3,19,a1b49b1c11f631c26c1f28db134aefd298737f687d760702b58e2c1858985987
|
||||
220,12,70.0,45.0,18,3,20,c93cf6670bcdd339f10ce30e8bd25fce1c55e7633ed298c544f99f9f2188ddd6
|
||||
221,12,70.0,45.0,18,3,21,3ac3b22d3e0e315bd497cb9c8408b113a9c92ad4f6e88af266d0780a2005da09
|
||||
222,12,70.0,45.0,18,3,22,d0bacf8ab25c9f7f2304fef2b6bcbb9626b3234b4b6ff85e851740b61ca9407d
|
||||
223,12,70.0,45.0,18,3,23,96ceea8c82a427d7fd76a2213a2a3c4518ac20daded2dffb5d24db4b96bce9c2
|
||||
224,12,70.0,45.0,18,3,24,f065de171b3deaecadcfefa1011d43598f5996d3408b58a829ca841330ac4be1
|
||||
225,12,70.0,45.0,18,4,25,51061824203c9b142c34b3e6e895fa206f32367fbf1fdccb2ff2952b406dbf36
|
||||
226,12,70.0,45.0,18,4,26,d95c76030ebfac69ce59dfb34c9def3ab382133b35e5cb39aecbfa806a6f40e1
|
||||
227,12,70.0,45.0,18,4,27,53903baa84a07b31770d92a0125484ea44a13c140fcc6e09aa7587119dfb5aa1
|
||||
228,12,70.0,45.0,18,4,28,ecacb755b499e4a086ed9ba052e764a49a077fb5c5c3a4f6698ada41a236eeab
|
||||
229,12,70.0,45.0,18,4,29,94f7d1350a4631f32f53628fb5c113d79193ddf12b80bd6e6e61f11b87ebe449
|
||||
230,12,70.0,45.0,18,4,30,ed7cd408d2dc69c899b8cb9b81e1c4b6bef7b98f771a0d64d1c1ed9b43133626
|
||||
231,12,70.0,45.0,18,4,31,1ef37448f4226a4ae8092f7c84fcc0b0d2b39c5e1bb9254f66f076c2dabd9778
|
||||
232,12,70.0,45.0,18,4,32,8478da76ec7efca694f0407432c63dc8ad6c46ec966fee4593ca8db4b172da6f
|
||||
233,12,70.0,45.0,18,5,33,a7856a243cbb84ce1118071f06aaf029918f70869daad997f6bd7397ec34d87f
|
||||
234,12,70.0,45.0,18,5,34,bc124227773c00cc0c651b50e4d535a23f17f8a1eadc3c083ea29e498fa9673d
|
||||
235,12,70.0,45.0,18,5,35,5889874c7e199691d330abfb9e0a8d631d85ceea29384a6e986659d8afff047d
|
||||
236,12,70.0,45.0,18,5,36,9e5d612d18567912d44e60376f34aeb8f16d0c2cd23104e62774fe67ec0150ac
|
||||
237,12,70.0,45.0,18,5,37,27648ca44c27b51193b5da3c841e340d81974137f9aded6e2f811cf9aea69364
|
||||
238,12,70.0,45.0,18,5,38,27aa345e23e217fce6a4848b301b32e77510198f0f866847c786a03fe38f7495
|
||||
239,12,70.0,45.0,18,5,39,f5515a7fd740da2fb775f35d95d54f84e86a3d525ff36946084b5fbbb46e6234
|
||||
240,12,70.0,45.0,18,5,40,c9d42afe9764acccad767e5b009c98bc10ed065169d6e430c4c447eeb022c342
|
||||
241,12,70.0,60.0,18,1,1,206a99f9fd1788194658ed24f7dee06d806559b822b71b257145066cf83dc245
|
||||
242,12,70.0,60.0,18,1,2,2438b60f1056fb2464536e573a3e1077d7a089d18bb8cffae2c1a29db5044478
|
||||
243,12,70.0,60.0,18,1,3,3cc8b8144c0d77285ae632cf83ad64471e640b33c7d496fae0f12133957365cb
|
||||
244,12,70.0,60.0,18,1,4,72490d7f2468400f2874d14e5eb222eb48c47befc1c3ccf32e50ecdfdb7ef106
|
||||
245,12,70.0,60.0,18,1,5,f761c844c10ae9edaf831be36b76d7670a090b94dbf55bb38cbab9220e8fc18f
|
||||
246,12,70.0,60.0,18,1,6,cf566c26ef5e74701744506edc73f526a591c7ccb62168f0be505f03e7fed16f
|
||||
247,12,70.0,60.0,18,1,7,a16590aa2abc3c105d1bca1aa06966c2698d65cdf2de58a734632f3b87bd3bf1
|
||||
248,12,70.0,60.0,18,1,8,8a027e8b81105da779ae6757e37880c1a3cfe847d769907300cd9185fbb840bb
|
||||
249,12,70.0,60.0,18,2,9,2d17ae5de5a59c7e6534b6168b01f6556b1d64f49556d45c27597d7e7bb0213a
|
||||
250,12,70.0,60.0,18,2,10,6210b645a5ec3eee781e967bf3521ceebd022e4bf0667ec857a4feac624e80d9
|
||||
251,12,70.0,60.0,18,2,11,2f1812c93725fb85e0064c6f9dc3992ee7edec3294bdd685c94a83c162eb88b8
|
||||
252,12,70.0,60.0,18,2,12,556e1df5a2fa9e226dc5237f6b325c5075d2102f005a113b1e0157d7b89fef11
|
||||
253,12,70.0,60.0,18,2,13,f371ecaa01e98c59256177f1f1bf1f76499fdf4576357ca48c9ce975b30f7bd1
|
||||
254,12,70.0,60.0,18,2,14,6a199314163f874ab068a1a98ac59a9219092755b8d097e9d1c037515edd17cc
|
||||
255,12,70.0,60.0,18,2,15,1fff79d10ac54086931bf9bd21b6997acf84d0f79c49692608b1cb6347a041c8
|
||||
256,12,70.0,60.0,18,2,16,778fa9cc9f4ddb6be7529af61adeddda5a38a6c1bcdb3872f046286a42a0993a
|
||||
257,12,70.0,60.0,18,3,17,a772c5a0f2ff0bd971c4592ee7b38465e404d2452cee9e40816c7e00f100007c
|
||||
258,12,70.0,60.0,18,3,18,2d532d20c28410826e9938ff6e239afe962a33972857798926c0f5dc4bf6e92c
|
||||
259,12,70.0,60.0,18,3,19,3a3ffb1daee123c3a86f505a3c3e29f71101339248da18cb15655f8574e78fb6
|
||||
260,12,70.0,60.0,18,3,20,650e86d42c6f6602a4942acb263ed8eabfa32d18de176a97c1497f6f2f02ca75
|
||||
261,12,70.0,60.0,18,3,21,f31709d3701fac65007b0c5ff8b923700451a10181e1665d6558d80e7a2a4513
|
||||
262,12,70.0,60.0,18,3,22,980d502739464eabc67a84d5d23960f011ce618ac150df4aa5410df9776e139a
|
||||
263,12,70.0,60.0,18,3,23,f6824e7ea271038e5a8942fc951d580df4a7d5c362798049ce12070a06374d32
|
||||
264,12,70.0,60.0,18,3,24,fc9eb6d2c7eeda19f81a7a2f66b34ccafd272bd3f1286d252b5f563218c9d849
|
||||
265,12,70.0,60.0,18,4,25,ddeb69f7c41b467a9a2b25f611dd8738fc580fc26578dc43a24aed924897189f
|
||||
266,12,70.0,60.0,18,4,26,9f244e417ecfeeb164dc09fb2f90bec1fcd10098571cd08d9aaba5e7fd0d3cb4
|
||||
267,12,70.0,60.0,18,4,27,416c16b3e01bd8f44b79038207623e276cc955fbd66814b84b8e92b0053ae4d7
|
||||
268,12,70.0,60.0,18,4,28,7be457eadfec996d7d8fa7f8a9822c1a923fb73d25d2913cfcc0558802c00212
|
||||
269,12,70.0,60.0,18,4,29,44a579c5c05c254fbebf02a37cf43a478bdeee3f2edaa8f5c1d32ffb0fa61dc9
|
||||
270,12,70.0,60.0,18,4,30,3803ce4381cb448a9e901c820e3ba6ebcbc74f43aaf030f55b397274ca80aeb1
|
||||
271,12,70.0,60.0,18,4,31,d973c7634683db76058983c86def98012911538a326339a45c72e6dc8494e146
|
||||
272,12,70.0,60.0,18,4,32,aa42c859b298879d06bb1187dc4bcfc6bffc0b52526e00ba12bdb121737db048
|
||||
273,12,70.0,60.0,18,5,33,814051511d2d2baabfbdaeb8525bf1bee32691dc5438c3100d65792d2ee6a40a
|
||||
274,12,70.0,60.0,18,5,34,e18bc0c79e64b75c00866f4268a7d347cc18330f7052af18d67c7936008ddef8
|
||||
275,12,70.0,60.0,18,5,35,f011b2f926e329b97b3ea76bb6462c94972bc7ccc681b5ddd2151ab705bbea15
|
||||
276,12,70.0,60.0,18,5,36,cdbf6661e9bc6a97a9565bb332b6593dd6b5956a57e52de83efeaeb5fd4a3ea8
|
||||
277,12,70.0,60.0,18,5,37,99284a9cc1e8cdeea1e570498f889ee7fe444357659c89328c8661080b70b806
|
||||
278,12,70.0,60.0,18,5,38,8a62026cdef5374986202fecf7c9aa73660201b8912c14af3a2d0e1764632d1c
|
||||
279,12,70.0,60.0,18,5,39,03d783f3d038fa24d7baf963896fed8d6bb6d8d155660ca38df728b7ed751f56
|
||||
280,12,70.0,60.0,18,5,40,3b9d18d7df7e270ed6a151204a9b36b49be1bb76296d69fe1cbaf387d2bdef15
|
||||
281,12,70.0,75.0,18,1,1,d96ace57e8fc1ec50b3f7e4d55b52af6f4ec6344aa4edf9d2197cf1b6a20392e
|
||||
282,12,70.0,75.0,18,1,2,44483e46197dec08c54fdf88404e3f629857cdaf4fcdedc754093f1961742a62
|
||||
283,12,70.0,75.0,18,1,3,6f8464656cc09d48ee87aaae56c2451c7c83c133c1b94f6374a4d8dc73f42a5e
|
||||
284,12,70.0,75.0,18,1,4,69734c466a4e31823f83c3f56ddb0957f590499bc8effa2f66e207b0e3a4782b
|
||||
285,12,70.0,75.0,18,1,5,3b3ba82b7a420600cc4955f32dfa9a262fa3ec47d780a69f470cd87e8b5afd10
|
||||
286,12,70.0,75.0,18,1,6,0f17faa451d2868a6fd26a7033a1ca06eb95bcb5445ae8345d95a7ee7a945971
|
||||
287,12,70.0,75.0,18,1,7,c5cffb68fde5122a7242397e78d3d3dc49a3ddcc44f350e2def70da6dd938dc0
|
||||
288,12,70.0,75.0,18,1,8,a632203e2c5923bac4a8a621c43ee21a84bbf45a5cc5e6118e954aa8ac4213f1
|
||||
289,12,70.0,75.0,18,2,9,de73dff1029c3e95ad3091c66d64b7fcabfe8e7abfc17e3ec23c42b88abc9af6
|
||||
290,12,70.0,75.0,18,2,10,a1a007d66bd5f894db690cf5079acdbf951f74b6ea6d70053c32a1ddb9d973c7
|
||||
291,12,70.0,75.0,18,2,11,7296d007af2ad58ac8f2079079d0d16a10454724e260d46d8a480b2f543258de
|
||||
292,12,70.0,75.0,18,2,12,3a88c16487236c05545ff5e937aa333a4306845c1f06beb3d371be75a5dad5fb
|
||||
293,12,70.0,75.0,18,2,13,f3d30a98061013824e8b031c8e301af661d627c8391a91000abd3d0fb8521d14
|
||||
294,12,70.0,75.0,18,2,14,9fd40f070b05ea86d6895e02afe7a685b0f605670b38e794e3f4a93fd010c3cd
|
||||
295,12,70.0,75.0,18,2,15,c7cc40cef959b53409bbab3d2530d3b83df71c466f15dd2707d33806d5af5406
|
||||
296,12,70.0,75.0,18,2,16,15d07a57c5375bf29e804de523e12dbbc6991b6f3272644dd324a8d3e54cbe92
|
||||
297,12,70.0,75.0,18,3,17,4f329c8d6ff3f9b0cd9174994330d78e1c0e2de30116f9e3e79627e85ee9b910
|
||||
298,12,70.0,75.0,18,3,18,456ff16a2b408f2da1d9d63bedbbae42e5f4d86dc18da8be35addfe4de85414a
|
||||
299,12,70.0,75.0,18,3,19,b57238a7493e3c20ab7acd48f5c552d115b6ccb9cd6f51feeeb88c76eed31d72
|
||||
300,12,70.0,75.0,18,3,20,002e5a76eda74db073cef5dc2129be386daf14cc50d0d004e1ba0576cc9a13c0
|
||||
301,12,70.0,75.0,18,3,21,79f25ea0e41ec0b3dc5c648c57021f2e16d7783cf585caf991b3263c9d4d61d7
|
||||
302,12,70.0,75.0,18,3,22,d197a24245ba4f50275527ee021bf7e1112c0b3473156b55d8b794a7ed3a465b
|
||||
303,12,70.0,75.0,18,3,23,9f8b14cae827d1b72d8df200385b3dfc3129cf53643e935a423d8ca29f7f2c90
|
||||
304,12,70.0,75.0,18,3,24,ec666b1dc2df71f75ce096a13acaac7e6e262456f9eb6b0b73b6223130a969a9
|
||||
305,12,70.0,75.0,18,4,25,97057dc7fa0b9ae72395a244554c4324a61e29e8fbed6d0d6a1d13f752072789
|
||||
306,12,70.0,75.0,18,4,26,d1e2b6c9af40f5583882d204555354e0a35fd49207c2ebe5f643ef8b624bd926
|
||||
307,12,70.0,75.0,18,4,27,fa8d73d1c4a1f78a433eaa3441fe783034442308e00bdfa199c3163af7dc5881
|
||||
308,12,70.0,75.0,18,4,28,2f889a196aebd2ef156c246455846fd062e17e4235feafb42dfb36d5f36ac388
|
||||
309,12,70.0,75.0,18,4,29,b09e450592c95b0af3fb25eb2c29bd585f9e7b0e06aebcf0aab7dfb74ad1b09e
|
||||
310,12,70.0,75.0,18,4,30,b601de50837103f10f0cf4b49de4a91ec606974921b57c7f66071656320bebbf
|
||||
311,12,70.0,75.0,18,4,31,086c23da4fcf4aa071b837f46d00c4240f9013d5b92cde2bc5d02059c7784cc1
|
||||
312,12,70.0,75.0,18,4,32,903e76aded0de8aadc1c784b5d2344a61b93540d6d5463b99cc170b59a9e75d6
|
||||
313,12,70.0,75.0,18,5,33,b0e3372568f0c4966ff8b1da2f4ff697f92d0872f733719e3c71ae635e406797
|
||||
314,12,70.0,75.0,18,5,34,8dd3dc0f5e51af3acd4235855a069e6199f53a98d520d00e59123d0b8127900e
|
||||
315,12,70.0,75.0,18,5,35,26e492d7b1a5917b8e88c6a9f8ca3ffea09acb4854b277c3386a5d6328fbd831
|
||||
316,12,70.0,75.0,18,5,36,bd120beec68d9d87786a9467f1ea46a2f0a57af04c66f5a69c491708c38bcffd
|
||||
317,12,70.0,75.0,18,5,37,19bcd5783ba5f2d7b59f375e53ebc49e756d447ad35a61d5ebf9a9b5948e0d9d
|
||||
318,12,70.0,75.0,18,5,38,921cbe87c3a7941c57ee367b793da31e16484ac72607442364665ac31b4a4248
|
||||
319,12,70.0,75.0,18,5,39,9f8f2dac4da6fcc12bda49c285f8205a58c4393feed9d4c999ce09bcc730e3a8
|
||||
320,12,70.0,75.0,18,5,40,f71e4b9c77817652a790985464872bddd04a7553ee954786d1b057030cbc385d
|
||||
321,36,70.0,30.0,18,1,1,248584471442f5c0260032c808922f244b269abc0e02501b3f109a70f4d71fa9
|
||||
322,36,70.0,30.0,18,1,2,2d8c96928ef190fd083fee81ed3758d975b00b330ae4c5108d8b4f391d3c3b8d
|
||||
323,36,70.0,30.0,18,1,3,a6c6066fcaae08ac47a3d1ac7bb436671156321a9a127ff414978fb797233be5
|
||||
324,36,70.0,30.0,18,1,4,cb3cb83e79ce9b6dc9b2e9e93eddb9d2ff1d36f6812a0a7d01f6be4f0baf0c86
|
||||
325,36,70.0,30.0,18,1,5,2e6928c4a2d069ed73339e40cccb688ce4292e88ed48b830e3c210eee5574390
|
||||
326,36,70.0,30.0,18,1,6,219530ac79af7fa045e614e0fac0618693ab0f5d11769f5f93ec9315d9d6b3db
|
||||
327,36,70.0,30.0,18,1,7,f886c05b38016301d994b682af071c150d39e6258ac42e5ea2543823670f425e
|
||||
328,36,70.0,30.0,18,1,8,a11a45dafad59dea6bb7d57f45e5306516b5fb9d169fd014ef5819ebdd4aec4a
|
||||
329,36,70.0,30.0,18,2,9,48d0b8143ed448224aa718f281e4ff6c9773aa23a06dfc4b1e3ca49045723016
|
||||
330,36,70.0,30.0,18,2,10,dac8a9c41112a3f4f537f82cafe2f96f7846733c2e0a49e944ba72a3039b4657
|
||||
331,36,70.0,30.0,18,2,11,9856d1f2ae8fceffdd1d7bd07c87f70e4f370725d6802483db0ef749ebba5a9d
|
||||
332,36,70.0,30.0,18,2,12,70557f94326127d954b73aac72338dc6b487f01a9ee33ec4381a6ef410b75136
|
||||
333,36,70.0,30.0,18,2,13,01006bec47abf6324d221d2cc284a5683f43455150360a459310d7a7cac364c0
|
||||
334,36,70.0,30.0,18,2,14,65b4d4c0c2c2ba3bc708d256dedad3b1a2cb2571a188ece729504314bc1464fa
|
||||
335,36,70.0,30.0,18,2,15,77945980aa7091d788719b4873d181436af756893057623b0cb397cebbfea77c
|
||||
336,36,70.0,30.0,18,2,16,c61d6e3bdc94f5000751d3d3ef3dc3fdc7ce68c9c0c60cf1da46ef8d8a77789d
|
||||
337,36,70.0,30.0,18,3,17,5d8aa8406da19dfaa9a3e9b4cfade3ae8f343205d74843b2abe0e3d5e7e8394d
|
||||
338,36,70.0,30.0,18,3,18,464880830ab6723af9e259a546d0e12fd1a3d95f61d562c27b3b6183442dd813
|
||||
339,36,70.0,30.0,18,3,19,f94fe635ded6d7f405898c879e4d87e389875364f35de652fe6f13b7d4538329
|
||||
340,36,70.0,30.0,18,3,20,7478524471bfd82d3a9481f9754bbab8887b593833cb41d9ce76ec90b230f9ae
|
||||
341,36,70.0,30.0,18,3,21,46daa340ee50f07b3089b67e02f993f51230a6e577deb5e2a672d86196011989
|
||||
342,36,70.0,30.0,18,3,22,9a41622460a50c1db0d75ff1d38a5021e789a309ad3b836dae5c43703054cba6
|
||||
343,36,70.0,30.0,18,3,23,16fac125bbcb137555dc4aae4c3cfc76e3591616fe27b2cadc2651cabf54ac90
|
||||
344,36,70.0,30.0,18,3,24,d87e1271ad3580e6474b8b009f6fac97833c6a5704d41a59f95d5e937d259452
|
||||
345,36,70.0,30.0,18,4,25,cee588aad44138d2aacbc19ff0469f27ae0e16d308f6e4b49ae7172f0a76e700
|
||||
346,36,70.0,30.0,18,4,26,9cf93fd08f792cca9af940b98b3fd437d437a4e3865c90b0855c4a647e1fa3ac
|
||||
347,36,70.0,30.0,18,4,27,5a3661d2ebe3ee08f0c8ab354b63ed9071e70a34312a9dbf67dd7921fc4d4c53
|
||||
348,36,70.0,30.0,18,4,28,2073f6a3ab35830f83613a6fd4bcc738740f315b433def8bfc4203d2b4b0bb13
|
||||
349,36,70.0,30.0,18,4,29,ac72264b8bff91641d1241807faa81d7d51434c182d2d1fd4b1dac15ae1fe231
|
||||
350,36,70.0,30.0,18,4,30,d3e37dc59ea4d3ad7a03457c7fe72f96ff0e10a409882ab18cafd521c4ecf6df
|
||||
351,36,70.0,30.0,18,4,31,8eab25313bb9be698cb5da744768281c0bdcc3133e0d38d8068d8511c1a73123
|
||||
352,36,70.0,30.0,18,4,32,4b3c36b5b28a75d2aee021aaf26d475e12b2403832b1a458f0e81d6ee74d29e0
|
||||
353,36,70.0,30.0,18,5,33,681e9f1528311db82d924303c714f4d0744a5e5c470bff04b3fd88cccbfed891
|
||||
354,36,70.0,30.0,18,5,34,89ba9dd12d9a679a74c8446d735616b2791ac120d6ec574f27b3c3388feef478
|
||||
355,36,70.0,30.0,18,5,35,10d3f9f5deb0a85a416fa2fa56d9dbd1feb8f7affc5e34ba253fbceff405a2bc
|
||||
356,36,70.0,30.0,18,5,36,0c6d87c9b57e5be53d2481f6f4436a09d594621007e46ef0c12eaf538e0dbcd3
|
||||
357,36,70.0,30.0,18,5,37,9f1ed2c8cabfb3cece3aaf4589f71d3938fd857180ee7982a21e5876450b9a12
|
||||
358,36,70.0,30.0,18,5,38,b04f238b85fb6bb6f66fc4b5add511ddfd84765a0574290c400c222b96ba88db
|
||||
359,36,70.0,30.0,18,5,39,51a03a7db2b399b0b595a50eec494bcfa1db4e4d91245a8cd2a7ecd2bd464d7b
|
||||
360,36,70.0,30.0,18,5,40,9a8bc8e039bd34e9ec796747a232912e6bf9aa8c7a8c782011d62597184b4332
|
||||
361,36,70.0,45.0,18,1,1,90be74acea19dd3e6da1be479b4bb341e5a79c6d76b32b41b05df7b256e1088d
|
||||
362,36,70.0,45.0,18,1,2,a2872d440e4e3d350d7531aa21a48f366221d87b931c610e807f46ee822b8a74
|
||||
363,36,70.0,45.0,18,1,3,2b5d7e61bbeffca82a9304cc0c71ee187c5a2fcd5a95c8e3e4b5befd89bb8192
|
||||
364,36,70.0,45.0,18,1,4,70876ad4daaa2df8a343141d2a50bd6d998a53ad85a1985e43f527cf8c1786ad
|
||||
365,36,70.0,45.0,18,1,5,c37159b1f45b8fee6d5c8eef179fbd75ee01e0f8b2053703d139789f7e7d26c3
|
||||
366,36,70.0,45.0,18,1,6,26a643e685f8edbd5d3b70d31adefe6e9b85e6662678e014bfee5d57fc6f533a
|
||||
367,36,70.0,45.0,18,1,7,28c7f431540c4644e6a61a3e00d5b59ffa561078d31b123184e23fce9e4df621
|
||||
368,36,70.0,45.0,18,1,8,7b228297c78f1227faff27af9b3994183831acc049ffafe2c0af373afc266db3
|
||||
369,36,70.0,45.0,18,2,9,a3e0d6d3fcfa09f83220ed40e232eaf9e5f555cef054aae9150c4811e9f7d7b1
|
||||
370,36,70.0,45.0,18,2,10,e6f154a6cbc2e2a24f5413774ed83b84517ad670bb36a7e2cfa2cf7f21246bf6
|
||||
371,36,70.0,45.0,18,2,11,d22d152f99955f5f397d3ba330335cd49811cbb791e12c97e3d87985c3b0f21d
|
||||
372,36,70.0,45.0,18,2,12,6c397c4334211f525b36b1b251d68253211c7e42761a7a82c68e1e5ac6e80b3f
|
||||
373,36,70.0,45.0,18,2,13,95d0bdadcec3cb1ed1eb1708de4a8a13b4846208ddbe134b546fe0a2deaba019
|
||||
374,36,70.0,45.0,18,2,14,b007545ba048d7370cd77d6784fe79333ed9a5e4ec93095cfc4611ffec85e14d
|
||||
375,36,70.0,45.0,18,2,15,3b6fd55cc073b8c395fa0a986765dca866a0b9f37d2e6a9493fff0a599819a6d
|
||||
376,36,70.0,45.0,18,2,16,f252b46d5ea9e839d9608388c076bf19afc05a1bb8c47ac445d8e56f2033f5b3
|
||||
377,36,70.0,45.0,18,3,17,c08991ba4aeee372a39286b17816f2897ea83261714b119ef170c044d62f282e
|
||||
378,36,70.0,45.0,18,3,18,51292d57fad3542eede9903465997091d73fe2f8d1594983045898cb944bf856
|
||||
379,36,70.0,45.0,18,3,19,5ef99ce242c18aecafaf0521136b587a2e07e53bb3ecda63cdda5b5cb0a7dfc2
|
||||
380,36,70.0,45.0,18,3,20,39a1710feadb8e9dcbf8baa40097ecb057ca7531d6c36fed7cf16dbb6313abc8
|
||||
381,36,70.0,45.0,18,3,21,b1aaad87660e354e1b3b3e9d09e304a9bc432718eb6d0a50baa14b2b4bb86d7c
|
||||
382,36,70.0,45.0,18,3,22,240100aa3231f8a541262fa0cfd293155a5ad3b5f4b2021043358a9bfd62ec82
|
||||
383,36,70.0,45.0,18,3,23,45bf0336b31bb1cbd9a3f1fb1db5b1c70ca53435ff5918b3c294b260592dcfa9
|
||||
384,36,70.0,45.0,18,3,24,1d15ba55c5b86a7ab4da7e54df7d45e6140e65fa480636f479345a395f106706
|
||||
385,36,70.0,45.0,18,4,25,3d131abe0a04ec00c910910457db26912eb6da65ab2ded4a8dcd85f50c39d74d
|
||||
386,36,70.0,45.0,18,4,26,2ea5604f9a1de87281e601aa4cad3eb204d14541b0378c434c17bc3c8cfc5224
|
||||
387,36,70.0,45.0,18,4,27,08dbd66a78cffe4476a127812e0dcdcd23f2d2367f825e6cdaf0467c1e24be91
|
||||
388,36,70.0,45.0,18,4,28,1db71534b5ab5b9be43a28a1473f6bac397e9a1c4e91da08757bca0dfea307d5
|
||||
389,36,70.0,45.0,18,4,29,92cd303c25e937f12b0b72b49c438592b5df3fa5e68753255bc3efb7814e02a9
|
||||
390,36,70.0,45.0,18,4,30,e7069dff3d15b7dc500518c63253829bea689e7007aa42c8d193fcef9cea0a27
|
||||
391,36,70.0,45.0,18,4,31,ba16f6cb59658b195c62f168c185e51f61cf77f459964b7d2bff160098d8fc1a
|
||||
392,36,70.0,45.0,18,4,32,685f9f7771fe3c57b4dba73b431f67b2360f14aad3903fe5ea5c6c7c90aaf219
|
||||
393,36,70.0,45.0,18,5,33,078e7329cc9d8ab5e8a04c33cfd25e31e11c6398ad972ba9c2f1e937f30faa01
|
||||
394,36,70.0,45.0,18,5,34,609770166e0f8fa215d7c48dda770ad80a7dfad3c7c21e4f248f2c3e2ca43921
|
||||
395,36,70.0,45.0,18,5,35,e0cdd5fbcd71f3d2721e98bce0e409a2e7a21f7bb7a812bcced038e8fcd76875
|
||||
396,36,70.0,45.0,18,5,36,6fab79daf7b577a3b66e5bf71af9e69097030a941493090d051ae8ed95b92fe3
|
||||
397,36,70.0,45.0,18,5,37,570a1818d1042ce8d22a1d8eca32238c44a2add9cb9f7160a5d8786b5e3389a7
|
||||
398,36,70.0,45.0,18,5,38,486af276f074edd1e510cff98c149cc3bed75f6201ed15af106b1d70538c8ead
|
||||
399,36,70.0,45.0,18,5,39,4b0cb53f9e8c92f096039879ba33330291f7177aefa6361771765e2672542cdd
|
||||
400,36,70.0,45.0,18,5,40,5ccc68842219cf8674d34567bec70fdd069657e1c14c6d0fe63f43b2256b1685
|
||||
401,36,70.0,60.0,18,1,1,59556f1d703fddcb5f8a1c71d25ee4d4595b179eb665ee8c1b02657261784502
|
||||
402,36,70.0,60.0,18,1,2,426ece1170fa546a95f61ac09efd4b0dc13e33b7313e9010da37359083e20a51
|
||||
403,36,70.0,60.0,18,1,3,a51d6c41add78d6bc8a88bcb0e81c5e8d6562f18867c06369a06a42bf381bf22
|
||||
404,36,70.0,60.0,18,1,4,2428f29a94da709bc5283d51e58b2545206ff7b5ba53068e3214eaba60e4cd20
|
||||
405,36,70.0,60.0,18,1,5,927d2e685a7019ea6cf4c276409630f41e26b7ec372a8804932cdaa31197d36c
|
||||
406,36,70.0,60.0,18,1,6,6e65f7d7bf87e80885b13836b31761073b624187a72d9dd847530aaa5e0507c4
|
||||
407,36,70.0,60.0,18,1,7,d6d18363ca745b297a55389b5f6a307c1565f05e75ae1cfc7872da9c4e6f3ad2
|
||||
408,36,70.0,60.0,18,1,8,e00346a2e9d2282b25d48bfd490f30a1a32bcef781166766dbabd3229d878f7f
|
||||
409,36,70.0,60.0,18,2,9,eb0232090637255e7c10f916ebd004568517100415736bf0635dee3e1ec77275
|
||||
410,36,70.0,60.0,18,2,10,c62959eda7ae13c322d5f0aa01165e28bbde857314cbb36385eddd28654f29a4
|
||||
411,36,70.0,60.0,18,2,11,8c26eead5cebc6005db15087b1641e11faae3ff6bf8f44509721f44ef180e409
|
||||
412,36,70.0,60.0,18,2,12,bd0d6051d364faad95a40b8f9e0a1f80f0487c81a86f20e77f9e83d60e706fed
|
||||
413,36,70.0,60.0,18,2,13,f6120712487bf8f52fd318b0e2cad4f0a6d6ebdbea894f020a8ca372f4655048
|
||||
414,36,70.0,60.0,18,2,14,e0357cccfdbb2a2269aafa7432f94aa47ca1e08d54d264cfb3d6ced160b37e0f
|
||||
415,36,70.0,60.0,18,2,15,476a58d88d2564f1feb9adfd80bf0ec14bbfd1c30d6fe766144b2c73d3bc4b43
|
||||
416,36,70.0,60.0,18,2,16,389dbdbdbf866051f10fcc194f32e30854dc594931d7e776db9654dafd2b292c
|
||||
417,36,70.0,60.0,18,3,17,37426fa1abc1aa3abf8998063a6f3bddd90317c135f79104dcdebad6f4fafe3b
|
||||
418,36,70.0,60.0,18,3,18,277fe6d1af382056dce00c8f739bd7a1c333875bf50818ca9816f1dbcaa89c95
|
||||
419,36,70.0,60.0,18,3,19,a8c4ea3e18e6db9732d289efb0c89482e932782da197f3f98380248efdde5051
|
||||
420,36,70.0,60.0,18,3,20,b1c709f70c837662400dd227560818ec0857a412c535f54cb0be453a2ac98e48
|
||||
421,36,70.0,60.0,18,3,21,bf7f62fff9901aa29d1566d259387c43db47fa0c0e996c8cd84f7dbf599ef675
|
||||
422,36,70.0,60.0,18,3,22,a650f017d73d0d941f32eb9f5fc5920f6e4ced2545dfa9b475e38d4a28a26064
|
||||
423,36,70.0,60.0,18,3,23,c78e38013feae848812fe5d535222a40c362254ddc7466664600e929308d3615
|
||||
424,36,70.0,60.0,18,3,24,7435517f36cfb6b418649d724700595cfc6575bc9f30cb00468f08ebdfa5f584
|
||||
425,36,70.0,60.0,18,4,25,e45ce43099b5a3684be30da793c0546e4e9b835507f48a1a8ffe7cd9ba9d2a82
|
||||
426,36,70.0,60.0,18,4,26,afff03742f32f3311f643c90d5d7e275b75520159795ee72c13ad7e2c2feeb1e
|
||||
427,36,70.0,60.0,18,4,27,79a34268153dff806709e4f551a8ffd066c31434f777e0fb1b8b98a709b05209
|
||||
428,36,70.0,60.0,18,4,28,fa4e38b63991cb480996afa4da6b505958ce450d130936978e19f9f64d1823c6
|
||||
429,36,70.0,60.0,18,4,29,0d45ff5f8457f995f3382c2f63a973c106172c6aa8606d931616c5e0930a656c
|
||||
430,36,70.0,60.0,18,4,30,ddd5e0548dfb65b87a851065ba0709e5f957eb9aa9ddd666cde7bb870a859381
|
||||
431,36,70.0,60.0,18,4,31,f20f69f00a4f5da57899a635fa37bce745e563021781b977a1e9d85a00ce2f68
|
||||
432,36,70.0,60.0,18,4,32,5e1b05884fdb80b01dcc3dffad8724e8d39508c034b802e0324f31d60947dcab
|
||||
433,36,70.0,60.0,18,5,33,6b346c80baae6ca31d8fc7f55e8de79caba9798aa18776f9b17d5f7b157847cc
|
||||
434,36,70.0,60.0,18,5,34,85b8adad69f613a3c1b3c7ef082779aedae77aff6fcdac451202c1c0d647a969
|
||||
435,36,70.0,60.0,18,5,35,9c2051002fb3df434a1c2eadf330d72b99422fe54335e5acea077fbe87f5e359
|
||||
436,36,70.0,60.0,18,5,36,155fc6483e6aefc55fdac5aea3b35f8039ed651b87baa16d6eaba849ca4bcb88
|
||||
437,36,70.0,60.0,18,5,37,758a1066b24c29431b2506c4d864390dc2a784ca6fd528f91fe76671497b17c8
|
||||
438,36,70.0,60.0,18,5,38,2c577d9a10ab8e2e0cc8c5603f00cd4a01072a7140891d6cd3377e3aa1160b8f
|
||||
439,36,70.0,60.0,18,5,39,ad2f4c8035f9c13344865dce3464e4cea1f707e685ea369e3fbb52615ea1e891
|
||||
440,36,70.0,60.0,18,5,40,943eaf488358adee1fbbce74d37a32108fbf91152d18289adbb31a544b2b72f8
|
||||
441,36,70.0,75.0,18,1,1,cbdb94a442ebbe1811336a23251c858df1b9c10c3e9cc1bcc185ef1d69a96f26
|
||||
442,36,70.0,75.0,18,1,2,2adede935dee4e6d0923c81cddcf4f66f149ab5309423a5f105beab11a4403ed
|
||||
443,36,70.0,75.0,18,1,3,5a86b62d31c3a622a1d80f0159e910691223b2bd847421c3375ffb6583e3db87
|
||||
444,36,70.0,75.0,18,1,4,871cbc1da5c4aed1f7f4895c36f01e9748d1985aba09907f30b76f87b30b8ffa
|
||||
445,36,70.0,75.0,18,1,5,bd599b099bd4fcb6f9f606c1163069493c0c1ed8ab6a9b9a010093a57a05d9ef
|
||||
446,36,70.0,75.0,18,1,6,ffc46f27f15b187762ba79cfe2a56423a18d7d23c07d9aabed8ce5bd234e4b50
|
||||
447,36,70.0,75.0,18,1,7,8179fe9929c6b490867e63224a8e3035e99cb19626e50663b831f189480f658a
|
||||
448,36,70.0,75.0,18,1,8,5c8ae45528b474d156aa1eb25d76ef08129650371487cc8761ac6da8cf72ad7d
|
||||
449,36,70.0,75.0,18,2,9,7e302b09ffc14a100aa64b1e8622f47c34a6a1c8824ee890e0140606b6aa0685
|
||||
450,36,70.0,75.0,18,2,10,0a50e1d616bf34e19361be6019e6a8e61d2121c1143033b7e9e3aca88233fa38
|
||||
451,36,70.0,75.0,18,2,11,fa4076eadcc3940656ade8ed3ebbc576fff8bd3258a9ed09598e29d6620d7523
|
||||
452,36,70.0,75.0,18,2,12,02565efdaa65c729c43a39170621e40c13fade1eddaf1e8c2f179f3c0b953f00
|
||||
453,36,70.0,75.0,18,2,13,0dfa686c8a4d1893e73b1295b0a97e41d991b4c6cb24078b798c1125ac29393f
|
||||
454,36,70.0,75.0,18,2,14,4b0f2feaba7bce3714d18b21ac0a7acfec0fc40442305024b58727bc023f5478
|
||||
455,36,70.0,75.0,18,2,15,1891ebdb12795a6c16c9a9a01ce70c30a9aa8189008a76ece314b72ab9ec0bef
|
||||
456,36,70.0,75.0,18,2,16,503de3fbd61a7f105c004bafc3c8031ec25085700350aea0d4ebb7a7f59a2efb
|
||||
457,36,70.0,75.0,18,3,17,fb9947deb1cbe460ff516d4a70c5206b6cb3d8f85b10afd546e15a349fa3687b
|
||||
458,36,70.0,75.0,18,3,18,a154c6de2f30e55e90f6cbdceca8d98b8c4a6b5cafe7b44670bca7940a0f9ad4
|
||||
459,36,70.0,75.0,18,3,19,488896d297d3c30c8000d4892034e2f329b1ea6ec9b6b87b3c334f3671e56f0d
|
||||
460,36,70.0,75.0,18,3,20,181b0b336afee7dde0fe7da0c65251d9dc3ff578732996afc7a60c327b26b588
|
||||
461,36,70.0,75.0,18,3,21,8fbaa88be619d9b7cc978c66e9cbe11294ffd4bd6cdf4caec457e3f421996ef1
|
||||
462,36,70.0,75.0,18,3,22,cf25734625017c7611e0c85e1edd1d848082bcbbd43417d1526ddc5673452ea2
|
||||
463,36,70.0,75.0,18,3,23,19df81a8447381e1f1c6d309b6493cc89014be57f1555c1057a4733e4e66d62f
|
||||
464,36,70.0,75.0,18,3,24,4f95b97067999cf7b849901ab18533458c77a848537185940a3260440c59d116
|
||||
465,36,70.0,75.0,18,4,25,da2d293f8a3b0ce203db9778e6e5745890c449efb42e92439487f39f6bb27641
|
||||
466,36,70.0,75.0,18,4,26,411ad85bf3adeb87a541a71d701e8822305e3e519674adcdf208c1de5c237e30
|
||||
467,36,70.0,75.0,18,4,27,af93b94e08c9bd11255c15d8346605eca4aff3a32f3024e67663afb9eeabe173
|
||||
468,36,70.0,75.0,18,4,28,62d0542e49815c47c5a53c2c4d7cad459078ab54573ecfc869f79f350f7f97b8
|
||||
469,36,70.0,75.0,18,4,29,cf6952469055380c4a12acc28fa8974abdf0aa8f7ed938e3d1ddeb93b951d693
|
||||
470,36,70.0,75.0,18,4,30,ba2d4c7f9dce175301b0013f46071d99f6c32d11cc16d9825ed7b071e4f19574
|
||||
471,36,70.0,75.0,18,4,31,0ac77a3c9e9b5cd41327473309353dbdfa796fe5ca1ca33f3d4d7e6ed045fc09
|
||||
472,36,70.0,75.0,18,4,32,f567f0537c8f246096b9506f456ffd2f84990b55defb8aff2f5c6fc4ab453e2f
|
||||
473,36,70.0,75.0,18,5,33,a9ebf4a296f3dda9f9834a49d875e39b0a8b287a576b3264339bb6e33d5aaf1e
|
||||
474,36,70.0,75.0,18,5,34,38d3cee2239fd7989df57c0de715a66dd8b52c20d7c8da2ae51d736c24930312
|
||||
475,36,70.0,75.0,18,5,35,d2f631dd8e4b475c964467689df19b2bf2bc7e52fffb4a7199ab22f7c38fdd43
|
||||
476,36,70.0,75.0,18,5,36,869e3d78321ec4f5f4267419e1cbf7887bcd4278c7549a4ffd7d33aea75d8a4a
|
||||
477,36,70.0,75.0,18,5,37,0ca6421defbadfe953df8f9c795136509355b690168765a8598bbdb493a4ad3a
|
||||
478,36,70.0,75.0,18,5,38,8a41fe6bf62e6c3accd6fe16e1e72d83a29b80625ddeaec6332fd3467de072a1
|
||||
479,36,70.0,75.0,18,5,39,b50a53b7b5cd03395c5a61abbbc85d707a4e4a01071f2cdf7481abc07f6cdfc8
|
||||
480,36,70.0,75.0,18,5,40,766e86b06f6d288dd6c002993eab57c8a2fed9f857c5be949d074b43994e3cea
|
||||
481,48,70.0,30.0,18,1,1,27d8329f039cdabcfc5f6281b636c8cd018bfb60595eb345e16f09d2dbb119d6
|
||||
482,48,70.0,30.0,18,1,2,12ab023a461edcd6d12c7bfddc011e043dc7ad9650972276c1c95d7d78581ae1
|
||||
483,48,70.0,30.0,18,1,3,45bdbbc203337583539d3cf6f46bf3b625b7edd9c5e5f926ce90c7531393f87f
|
||||
484,48,70.0,30.0,18,1,4,f47542a1e0039626dea277f3e62bd6924c04c08568402c43bd66eceda5293436
|
||||
485,48,70.0,30.0,18,1,5,74b17ffd53440f03c21fdd9fae488761e27a8bf86439b8243de5a0ee4bc4bd21
|
||||
486,48,70.0,30.0,18,1,6,daea4d146f02319e4fcebc6acb7e0f6003fcf4877586336dbca14eab74b7c95d
|
||||
487,48,70.0,30.0,18,1,7,99be31852af92e57094ac48a25b352e5a072e20d6cb94cfbe6786465701bb618
|
||||
488,48,70.0,30.0,18,1,8,0dfe1b919acc1d7b2a664f167b4b3adad03cb71c9a13c74279015efc3fd3a8e3
|
||||
489,48,70.0,30.0,18,2,9,7b6d7af9764f95b0816d3fdff37f004a64a4508e0e23a509937135448a6cfa21
|
||||
490,48,70.0,30.0,18,2,10,c7f829298a810640fee4a11e99554154cc322b3df6bf25a84c36e9ab1af72451
|
||||
491,48,70.0,30.0,18,2,11,b68e70b12a4ceef60f4549824b9722220b84d2ca1ce6f3f7af3298eba40c3a9a
|
||||
492,48,70.0,30.0,18,2,12,3107131465c9226abba826486d8150373031ef892c9a1a9031af27ecc35d1022
|
||||
493,48,70.0,30.0,18,2,13,e67a6c82d42e93704333d04ba142bc41feb2b14362a764b2a7029ce52e1d2019
|
||||
494,48,70.0,30.0,18,2,14,c9e165dcbef105d63c6e2cd4b3984865d996f7288c3d7b3269472e3a74c41674
|
||||
495,48,70.0,30.0,18,2,15,7384b3b5fd16a62d9e9123e5659bc4a652f0ab1d8dfc9a3514bf3dd28a46e512
|
||||
496,48,70.0,30.0,18,2,16,bfe0d63737cdf81c79b719a46825b1543609ff14e40b7b45785bbb5fe001da4d
|
||||
497,48,70.0,30.0,18,3,17,0fc5e16fa554e7068aa421b1a201ea014119a2053116c35129fb7a8e22b9acc5
|
||||
498,48,70.0,30.0,18,3,18,4ed0eb899a8e900bd1d06ce0b598ad4a27ef0ed50eeb525b69481cfa14a0cfc3
|
||||
499,48,70.0,30.0,18,3,19,909cf9421daaedd5a68ecb06fd420de9463bb41f46e248836d67745ab14e532f
|
||||
500,48,70.0,30.0,18,3,20,779d615d724509ffc54febcc893a9f5842598d9fa212ee639971ec7987340790
|
||||
501,48,70.0,30.0,18,3,21,19eb8bd64642bd98a720cb2498eaf120ad1d73cb6b5f35f9039bd67087d039ce
|
||||
502,48,70.0,30.0,18,3,22,11d5ccdf85e742c4893e03b329280fc21a33ae15d0a0f904190a93ee7071cd55
|
||||
503,48,70.0,30.0,18,3,23,e16f401cda2153b4d43a848460fb26f09ed71406d53843fda0b518d2b5a66ff6
|
||||
504,48,70.0,30.0,18,3,24,bd360e916fd72d5ad8d9aa6c31086fbc388c4173fdb3c7eb5c36c2cc388d5687
|
||||
505,48,70.0,30.0,18,4,25,a510b750651f0771d56ce3afa4e48054faea3af118fad992d4a146c1ac677d8f
|
||||
506,48,70.0,30.0,18,4,26,87b2b574ac4d7a3ee4688041f62be03bd606efceb79a7f904378408671facd21
|
||||
507,48,70.0,30.0,18,4,27,0d7562d412a86d827c6e93e78f2dd558c1dadff171b3288a345934dd88954c29
|
||||
508,48,70.0,30.0,18,4,28,94d508d6ac96f4327bbbd6b8612de8af93c5e7ff893b2c89823ddc2ec1694121
|
||||
509,48,70.0,30.0,18,4,29,943d617fad9592957ed4bdaa41ac61fd4bbc18dd4a0be5618c2bae3d802ec945
|
||||
510,48,70.0,30.0,18,4,30,2d3ddcbbc5be4797b7cf838f0e45094e1d9466841d7bfb6762ad86744486b346
|
||||
511,48,70.0,30.0,18,4,31,2ecd23ed12b7322e7a1cebff4ec4665eb27c520d7047e94ca2057cc7d7b49ee4
|
||||
512,48,70.0,30.0,18,4,32,d627c1780c913818ee306db6802c54a6363134112a1c51b8433d51519bd2e14c
|
||||
513,48,70.0,30.0,18,5,33,f9e74db5ec5de0fe84af23d33d8478241ec845af6c21d4d51eb391767ad2f390
|
||||
514,48,70.0,30.0,18,5,34,9d4edf435b5f0a94dc4b9bc33d4cb2630040f5a599aed997491ce9889724027a
|
||||
515,48,70.0,30.0,18,5,35,b7dce0ed8b03dbf46a0b856f64921a4fad27cf2b4be2d2db883fe231ff32af7e
|
||||
516,48,70.0,30.0,18,5,36,9e465575568d143a304ca79f4b40f31be4884ec945ae144edd5a408fd9c5399d
|
||||
517,48,70.0,30.0,18,5,37,dbea1196e25801630c1af9cfd6118bc81f351ffa4f99deb477ff61e3d9349326
|
||||
518,48,70.0,30.0,18,5,38,798b60fe4dad377188d675619f370d720131e92cedde64f213fef618972fdf1d
|
||||
519,48,70.0,30.0,18,5,39,d02068a37fcc9b79704fc641a8a40d8d2f7d4090db599ea170f48d5d74e833aa
|
||||
520,48,70.0,30.0,18,5,40,ca3d1770d3b48dd74de5566fb64945d30dafdbe6d9eb5841beef7d56f87450ca
|
||||
521,48,70.0,45.0,18,1,1,fdb3487b7434eb0138b6324879dc4737103b045b991b6ab9c743e2a238a47fa7
|
||||
522,48,70.0,45.0,18,1,2,76f306624883378b076a723f05d75b312b1587bb9763b2d38e9437bc233e09db
|
||||
523,48,70.0,45.0,18,1,3,82b95b712c14837072ebeec08bd718f9e16a07fdb0e6a5f9a52e43981ac9b3ff
|
||||
524,48,70.0,45.0,18,1,4,8fef05e43882aecb8a2b33fe65086a5c5e5b196b5e029629dca955578c5b94cd
|
||||
525,48,70.0,45.0,18,1,5,101b2ada5f7e635e8d12e0182a3914d2377c8c0399868ff20590118d7c7701d7
|
||||
526,48,70.0,45.0,18,1,6,c7643722b54d6727cbbd7f6d6cd65f813359157afad9aff9e20620c8afa3883b
|
||||
527,48,70.0,45.0,18,1,7,75b5197a696aa42ff7c15879c466fb818a1503743e966d10af24f8a033db19c9
|
||||
528,48,70.0,45.0,18,1,8,89da1a2850431d5d04b642ebc42944385983e82c3def60c3c91aac514bc08b20
|
||||
529,48,70.0,45.0,18,2,9,da127497bd8271e93a6987943654b319c4639bf45d473b148c0ea7474f8aa0dc
|
||||
530,48,70.0,45.0,18,2,10,51fae85dfb7ac6a64570a1064466c47d984b999fb6ed89a9bda7c8b7533f456c
|
||||
531,48,70.0,45.0,18,2,11,693b1858f99b72e9ed19967b95cc5b521cbb1bf56dd7c0eb275ec02bbc5bbe3e
|
||||
532,48,70.0,45.0,18,2,12,b78b22f5c02d2bac593712ca5199a105b8b8dbf186eecbd0e9bfc282c05d5c59
|
||||
533,48,70.0,45.0,18,2,13,8e53614a26a438f4d02a5f86843a121869be5ea1b8a150e1a02419be3aa1b073
|
||||
534,48,70.0,45.0,18,2,14,fd3d73cdfa59b373811410a2101cd5fdd52284a6f71ab4631b7b9241b3180e37
|
||||
535,48,70.0,45.0,18,2,15,1834fcebd0047bdf2054b8390e6554fcd5496ce0592b054b48f2e5ccbc388296
|
||||
536,48,70.0,45.0,18,2,16,36997f218b0701a44064e675d227b4dae9ad64e006fae9a28a95f561f9aed635
|
||||
537,48,70.0,45.0,18,3,17,c02b7aea11257a2e1134206a60407f06366d3ce83ad11c28e46ea1fa5b7244e0
|
||||
538,48,70.0,45.0,18,3,18,d5e9b36bf678817fd8bcb44229b1367bb9cd600d1501c60e755500737e6ddfbe
|
||||
539,48,70.0,45.0,18,3,19,f950f88a85be4dd9ca45b3523dce9b22f1d167aec81b186af27f1ca1b3b51b0c
|
||||
540,48,70.0,45.0,18,3,20,84cfdcd42339f0329146e81306660ed9f7708f3d994a4639a7ec7765252877ed
|
||||
541,48,70.0,45.0,18,3,21,151740928ac89137ac7614ac46609bee50b1d5ad19e7c0fa193c63cd73e708a9
|
||||
542,48,70.0,45.0,18,3,22,3a6f57df920074fa590f6c88dd308feed2cafa88b1368f9b6306572fed8bfbac
|
||||
543,48,70.0,45.0,18,3,23,e8318128b9a8739be41c844c0fe35e1e4e5273618987b01f4da01cf8b507aac2
|
||||
544,48,70.0,45.0,18,3,24,6cda1df59a63787f68bb7e2f2d99571c3d07353c273c3055ab8513b040313a7d
|
||||
545,48,70.0,45.0,18,4,25,a9b979ff0a4993fc4ca13632b6e90e1bc6369517c8bc0db990a7225dae28b290
|
||||
546,48,70.0,45.0,18,4,26,156bc234c893a6ffbc4ba909989ce6e2aaf0f5ce5e22e68b2b64b3902b0f67bd
|
||||
547,48,70.0,45.0,18,4,27,dc906a624a722b32ec3895507640995a7a3f3120eab88f531dc45a75ce520bde
|
||||
548,48,70.0,45.0,18,4,28,c30d6e29017babfab8c43b0a569b8a0c7116421cd11b3fdccca405dc65c840a8
|
||||
549,48,70.0,45.0,18,4,29,886ba3f2b36db2a4197f053853ee017dc157dc2376af9bd6f731e670cf0e1a0d
|
||||
550,48,70.0,45.0,18,4,30,b694aa09b11c80f5e66de1254868e47a68df33764958b1b35f63f2fb572f1cf5
|
||||
551,48,70.0,45.0,18,4,31,d8e7e77885c7d420bdc1e4c3719aa16403aceeb9a4eb0d24a6110b538594b9ef
|
||||
552,48,70.0,45.0,18,4,32,02480b50db7b4a2328578ac9b286765a0d92958b035302b37257c210b7c6b387
|
||||
553,48,70.0,45.0,18,5,33,ad6fa7e966a5ef112c44798139024b7e597b98cb3587dea0732cafdcebfd9ca6
|
||||
554,48,70.0,45.0,18,5,34,60c587b10c78db341ed95c7582dd12214203e8e335eb4f14f05da85f04b7cbda
|
||||
555,48,70.0,45.0,18,5,35,0d766c5e81b82c6eca4e9ff2387646768684c2d7feb598de8dff4f500e054e7b
|
||||
556,48,70.0,45.0,18,5,36,96794dfe4c82360cf2599cbfd2ae7641e9d2f46303ed9202c5dbd547d0b182e7
|
||||
557,48,70.0,45.0,18,5,37,4344536b72242f835c2e61550f8de75f9b59df659ea581f176cb905c1b940db3
|
||||
558,48,70.0,45.0,18,5,38,c2d3eec68b48572700a6ef2a24a2d181950b3ecdaeabf2b6795558fb8b8de06e
|
||||
559,48,70.0,45.0,18,5,39,875de8f891f5505c2ccecf75315ff191d06fedbecec2ea8a51b5cdf9f753354c
|
||||
560,48,70.0,45.0,18,5,40,885c2b49f512cef34f86fcc1de068493f0bf49c1a87de690416fb4eecb99b707
|
||||
561,48,70.0,60.0,18,1,1,5aecf69197e1e33b9442a101c691a6db0510903afabc367364f3be1c036521b0
|
||||
562,48,70.0,60.0,18,1,2,d0a17decf07cfdfeefc6b7ee1af2aa3896df83d451386f87133beb0967138919
|
||||
563,48,70.0,60.0,18,1,3,07938fc3d8068ff88936bc2a85df783441a162d2af5786275efc4e6e2fa1c6b2
|
||||
564,48,70.0,60.0,18,1,4,e4e2d6356c381ca31f61b30a3c686dc4b82b265f46b23dddbdb59abf5ca24ba2
|
||||
565,48,70.0,60.0,18,1,5,519e9912cf011b521c519bf10590bca9886c0f395c8d863005d97cd271016f36
|
||||
566,48,70.0,60.0,18,1,6,992d7dc67cef51403d39f331214711076c3f4e9cfe5ee91dc6bab53def0ce854
|
||||
567,48,70.0,60.0,18,1,7,7e8e7ec4113c45d3450f7558135fe7b8fc8cfb2f6fba824b981657c01c43479a
|
||||
568,48,70.0,60.0,18,1,8,41837dc7fdafb0a8cc14c3cd01049b7d6971c6b51fd3572aaf6dbdf52720dabf
|
||||
569,48,70.0,60.0,18,2,9,0e101872b33c4351e2ae5ac0c7137180ce8123a78471888fb980f9497e14da30
|
||||
570,48,70.0,60.0,18,2,10,9b88755ff7599e6be2c3170e760518ae74b803bbdf73dca3410501c9099e4c49
|
||||
571,48,70.0,60.0,18,2,11,d7d801d3a57c030bf1d6b57b9f2401886d7721ef3abc865cca4e4f30ab69e45d
|
||||
572,48,70.0,60.0,18,2,12,5467574ee705a9dfbf995d508cc450381732d20ac42350840f9c6961e9d60552
|
||||
573,48,70.0,60.0,18,2,13,1ac9202e4ddefdb3634a3ef4ea7e064f940d6411da12a1de8f630a10ccb97957
|
||||
574,48,70.0,60.0,18,2,14,fa997711a93dbb4308f43f765679214d65876e8cf8e44c08ed583f122d6e1f4a
|
||||
575,48,70.0,60.0,18,2,15,f42be1a73bef593b4ebba74325532698d5b2484aaefdd5dc510c0c50086c648c
|
||||
576,48,70.0,60.0,18,2,16,3dc7863ff18efa716c10a8261a40ab06f0436366fb4a07b3da849bffbba647df
|
||||
577,48,70.0,60.0,18,3,17,57e1d742d9e9b6fbb9cfa2e42a6113ff5ab76339471c12be64c6ff6132f60799
|
||||
578,48,70.0,60.0,18,3,18,33ef429d7e992b09b4dc00bc40219ed624b8b2cb49e67d9fa732df38126e6264
|
||||
579,48,70.0,60.0,18,3,19,0a1a587c21884a760b402d3faa45ec5cdc4f7bd70041c6075a22603ecb099ccf
|
||||
580,48,70.0,60.0,18,3,20,d1c0db8ee4bd603a19106748b605708c12243b6ac7d5a647c17b9cb4df48f5c4
|
||||
581,48,70.0,60.0,18,3,21,95928a9dab213c3004aa22a4a1bd23f1e9bcb0e11971270ea08d44c52ee2dcdd
|
||||
582,48,70.0,60.0,18,3,22,57e7c55e7b97774af9571ddf649b1d5be8ab191275968647ae1773ec2703d487
|
||||
583,48,70.0,60.0,18,3,23,29bd8c05df1409ff8255cd4fc7f7f4ba7fdc338f29b28d44de4babe33c66361c
|
||||
584,48,70.0,60.0,18,3,24,88399c97b571df7c1cf44f883c18eca23a0945c99326735cb9b6fb413298dc3f
|
||||
585,48,70.0,60.0,18,4,25,a8752e09cf07ce1c77df7c101085757d68c9cb3c43b65c1f017eafaab3a58f71
|
||||
586,48,70.0,60.0,18,4,26,95672a1595dcfada6f135029adf5ae871e5908f5276a67b0a55e64737d26d040
|
||||
587,48,70.0,60.0,18,4,27,464f4ecf26e152033c10e1e4455fd10286836367b72b2385f162e1ecabc20e11
|
||||
588,48,70.0,60.0,18,4,28,c9b3b8a52e9947530e7473a047c2389f53d585011294e5e07481f2dee141ee60
|
||||
589,48,70.0,60.0,18,4,29,b9ae2d9fdb21ff72dbd9772fdfa10c2529fb369a7bda0312093adfd4ccebce1b
|
||||
590,48,70.0,60.0,18,4,30,9fcadd070f6bdc20a0e1ea1b6408ce65715b9c027159bf3648bef3deec38e4b1
|
||||
591,48,70.0,60.0,18,4,31,53e3f68d0d089fccdee1e73019a3977ba0400a4c44e0d84c1bad698642b6674e
|
||||
592,48,70.0,60.0,18,4,32,a8b47fc377430f47a40ac05b5f2524b9f2fba4e0c119072e70655d1cd896cd10
|
||||
593,48,70.0,60.0,18,5,33,b407064677a4b3d39c4d7fc0e1388489bf77f8433b1845675db82545cf040c4f
|
||||
594,48,70.0,60.0,18,5,34,7bf87a66767aaf2b5d957ad307bea83ae6ea0a824ea540775c9bb552186b8b4f
|
||||
595,48,70.0,60.0,18,5,35,60b61a56cb7c3cb244a910ad178db885e7663ac82e69cf45842241c8890ce8e0
|
||||
596,48,70.0,60.0,18,5,36,962223b37334c2959651b7e2ee249f0a78c7dbea11d5bbc9ced17d50865b0a9b
|
||||
597,48,70.0,60.0,18,5,37,48534935f46f7752354935145509bf6486cd4e50f78d7f31252975bfd7f2c95a
|
||||
598,48,70.0,60.0,18,5,38,a051c6f325eb8c706ee7d1e1a01e3795d821a46c444ca610d6c34132f0160ec2
|
||||
599,48,70.0,60.0,18,5,39,1fb0a450f4ee518650b38e798d9e10019f763b38d491ba4253c0e2730ce5b9d8
|
||||
600,48,70.0,60.0,18,5,40,79f91eb20d3d8532c49db3dca9fab08725b3d7bcf0d109d977f68fe7b87265e0
|
||||
601,48,70.0,75.0,18,1,1,d7eeaa8f1649a723b7abb9fd1d18f29189d5408fe4fd2624d2938ace3f06b091
|
||||
602,48,70.0,75.0,18,1,2,b554e60c148e9ef3fa3798d10c21f1b932d23d10963835d58994b04d4b1e5510
|
||||
603,48,70.0,75.0,18,1,3,e5b0631c281563810f0ee8fc11d7eac0025423dd6425074e06125ba8b2491619
|
||||
604,48,70.0,75.0,18,1,4,0e43e004635b17bd7634143cfbcb366294058162a0c97183289bc044a4fac3e0
|
||||
605,48,70.0,75.0,18,1,5,dfe1508f5cad58f4305f1db86ddc91a7e4b1e4a0db0d33ba0cef30ee549eeda0
|
||||
606,48,70.0,75.0,18,1,6,31fab94cce16f9c7daaf0f7c500e40e777f795c52b8327151e469f9548573d31
|
||||
607,48,70.0,75.0,18,1,7,c397d6918775152702df1a022e38f2b9e41e69c6531a59e67b12ac4b70da52d8
|
||||
608,48,70.0,75.0,18,1,8,d906351b3418f817ab7cd335496706bac6fa3643d63ead89fcc88ffbc7f61233
|
||||
609,48,70.0,75.0,18,2,9,f79805a8003ccdb86bcb728289584d5a9fd680bee488c8f8c3b2c7875c4f099e
|
||||
610,48,70.0,75.0,18,2,10,62c4230b3d59da9d6609dd9edcdb42aa8e6b30e08af55173c8411473eb6b9661
|
||||
611,48,70.0,75.0,18,2,11,8f961d4d2a0878f2fe0412cc9fb9a7fe46830f72e1f43fca506a5586cec1ddfd
|
||||
612,48,70.0,75.0,18,2,12,b6a7b69c7c5d8faeebcf257687941c3f4d89c70bb97cd391c815edd777750075
|
||||
613,48,70.0,75.0,18,2,13,ae6343e557054da428cc5dc7ecfeebfab665338f4f26290e2635780b6b402ab1
|
||||
614,48,70.0,75.0,18,2,14,901ea9a740e0c1964a9ccb93bac62611d9054347262db9f35e0e8f60073b9c04
|
||||
615,48,70.0,75.0,18,2,15,6390643039d6c72aa31031284c6392718c4d0a3505dd2feb7d50b3514e969324
|
||||
616,48,70.0,75.0,18,2,16,992e704651033042c621dc2c4d0c0c7bbab29da19b09ca2b100d03ff43328082
|
||||
617,48,70.0,75.0,18,3,17,051806f2094a9b2c27672333b6aa61c743c4b61ed1039f255bed0e3e487ed08c
|
||||
618,48,70.0,75.0,18,3,18,fec4601a13da68c62ce84b0811ad7799724a19b291205959085b2a707b9f9967
|
||||
619,48,70.0,75.0,18,3,19,1f079f880219e1db1c6587608a33cadfa9a86ee2ae6786b58e5af7619e84a63a
|
||||
620,48,70.0,75.0,18,3,20,01efb153a45e14b2e3111c37e471571dd902a40184dfbeb489d0eb2daf9bd2df
|
||||
621,48,70.0,75.0,18,3,21,276dbe527dac944b3116c107a549ec4be024205a7c8f33d091e8c0b0e908ac55
|
||||
622,48,70.0,75.0,18,3,22,9999109cc255669360317338fc26ca7303b73860e264e05c6883629c8b3a9e63
|
||||
623,48,70.0,75.0,18,3,23,f4f1933d96945e45e75730bf98b6a0f567704d633a19ec45396e18eed0d97118
|
||||
624,48,70.0,75.0,18,3,24,d91d02458e76ec6afead2f8286e4980a7fb86747852881640d55b9ef5fe86bc4
|
||||
625,48,70.0,75.0,18,4,25,74c82c57965a3aa51e586392ce74e7c0016f1179f3a14b92e9e1fbc451c1d9e0
|
||||
626,48,70.0,75.0,18,4,26,f3cda2efaa4a863707e59317b111c3f23b05f00e481a3667ee37c2c9390671b2
|
||||
627,48,70.0,75.0,18,4,27,fa214e02aa28243e9571e32c5eba2f54c4c52dfc2daaaefc1055095112adb219
|
||||
628,48,70.0,75.0,18,4,28,2a77501d215e0c583b27bb18573dc6eaf6feee24dd40b6c1a04ecde278a9670f
|
||||
629,48,70.0,75.0,18,4,29,a9c26bbef3a6d90c6ae166245944c1daca5b74f917376e433df19a774e03d85c
|
||||
630,48,70.0,75.0,18,4,30,f48ad946b1da1991a06268b5ec46fbcccbf4d197698a316a95244860bece6e05
|
||||
631,48,70.0,75.0,18,4,31,4d0f0af5ce8387d09f8c01cd9d23d053634e8f1d68b0da268e4ac7f557573b66
|
||||
632,48,70.0,75.0,18,4,32,eb4da6b66edaf96e0734469ed61e1d9221566df5af745bdab7ae29af241edaff
|
||||
633,48,70.0,75.0,18,5,33,b7e324fc8da45d0a625bfb6b37febe864ee5204e5c2405206e6dcfc6b9116762
|
||||
634,48,70.0,75.0,18,5,34,bdc6096adafd26b3fb9d2cddfd783e34ca7adc96a627e3537812d87b52a8cd13
|
||||
635,48,70.0,75.0,18,5,35,f1c21e07811a248315935c3b6835f6fa1674cece8624a97d971cb675c3c70be3
|
||||
636,48,70.0,75.0,18,5,36,5c220eda4949fdaa62982d7790d842edb6f3119e9a06dd48d041b73d0f9da7cc
|
||||
637,48,70.0,75.0,18,5,37,462f3c16ef26aa37eafbc3985f21805cd2fa096f876c6b41e715a9600772dec6
|
||||
638,48,70.0,75.0,18,5,38,ebfc0258dd701d5ecb9c71c83a015afabc0a0ae07d28da240ef07ad927970fc6
|
||||
639,48,70.0,75.0,18,5,39,ba6049a5568df0c1eb14cd5cad390264ae33cfffec17b2f6173aa4df2daf5d82
|
||||
640,48,70.0,75.0,18,5,40,4a7effed25c48e70c06b8d806a90df75a66ebc49854a63c27ffe0bffc7d10d72
|
||||
641,24,44.0,45.0,18,3,17,6a79be930e3f5d8a6d93d2be2e9d820e25431867246d354a918ba30a1a61e5a1
|
||||
642,24,44.0,45.0,18,3,18,041665ddd95caa35c195e4b0d3d7ac506935db021bce15754e0d816d839d89b0
|
||||
643,24,44.0,45.0,18,3,20,a9975d76693becd8b7d7c6774bb7b9c7bf4e15b55c093e1ef046241125b7bb6e
|
||||
644,24,44.0,45.0,18,3,22,cc7cd460fa197fd4e5496a5074260e4bfd5032b0437f1e63c0bfa6d3eae3158d
|
||||
645,24,44.0,45.0,18,4,25,31371d08262cbee9b686152ae792f088e09305f352d569f57ec296798074db7e
|
||||
646,24,44.0,45.0,18,4,26,3b26c9c25d1dea95919368dd8d4e2dc5e6f12b7ca845d06e5b5225f22c56f6b5
|
||||
647,24,44.0,45.0,18,4,28,30a9f0289ec91e18462faeae6635537258cf35456f75308f57c79412035bb097
|
||||
648,24,44.0,45.0,18,4,30,a16408879c0a19e785eb648fe2602cb7854d355529a6c0c4e748ebca01161dbb
|
||||
649,24,44.0,45.0,18,5,33,593f1f6d2fec52ef1a9f879bb4626ddd21acda471d7923c614a62d311eb62fed
|
||||
650,24,44.0,45.0,18,5,34,090b05ab2226276df7a9c1a57574478a530c68a2c7807cf2263eb6fa2ceb170a
|
||||
651,24,44.0,45.0,18,5,36,6aafd2a05e60b44bb2c2553981ac0e1b33d593a62b7cce88ed54bb8103777e8b
|
||||
652,24,44.0,45.0,18,5,38,04d6bf8cb739045eaa4863390fe755201a3b05b220ffc1638e334fac67124207
|
||||
653,24,44.0,60.0,18,3,17,c7810de3f394e2d0424c36a540bf2e08ea296a7d0de1d54c40d37b805225e058
|
||||
654,24,44.0,60.0,18,3,18,51baa4bea9570c73447ea7bf2ad1a72cc910106d237686722e79d7e1b7a39286
|
||||
655,24,44.0,60.0,18,3,20,aadfbceb3cace83e419ead14769d9f25a70700009ad084a389857452758cdad8
|
||||
656,24,44.0,60.0,18,3,22,0eeb06501b69eb3164f8fef54c9869fa25938091e56b705ec4cf914815bf9304
|
||||
657,24,44.0,60.0,18,4,25,7f2156fe26dbfe7b195aed243499e6a51f5d9149c0e8a7e68ee99eb29b005bea
|
||||
658,24,44.0,60.0,18,4,26,828aaa4f0dbd6089d93c2c29c1c1f7583f67c751ae2161498051f277a8dea462
|
||||
659,24,44.0,60.0,18,4,28,5e638db76211730565d91e25da586b7de873e6627736f73a0ba6a10326c327ea
|
||||
660,24,44.0,60.0,18,4,30,a6adb87265314d8c7ecf8438b2a33986c9e255d34f4a319dd71f9c6b1779334a
|
||||
661,24,44.0,60.0,18,5,33,fc602fe01a557f10ae902744eaca1dade6d772743e5f9e988027d6a772935f56
|
||||
662,24,44.0,60.0,18,5,34,0af47869fdccca86210d78db2d0064e29434d567882fe6085bb905af613f9b8b
|
||||
663,24,44.0,60.0,18,5,36,09becb0ecc3d26bb4c3b1c323f7b1d0e82b243da756a1a7dfeec120fc7051ebd
|
||||
664,24,44.0,60.0,18,5,38,86b09bcab0ab86a860f5712f78b32e070d0f376cc28fc9dbe66e6f16dff832b5
|
||||
665,36,44.0,45.0,18,3,17,010166753add733e0f42a24784b9180b3c44c5a83693dde78a69d4bcf42beb88
|
||||
666,36,44.0,45.0,18,3,18,fa71ed9d7cf1b4c4f8e224230c383c51badd0fc7b79108090f988446b5ea0b04
|
||||
667,36,44.0,45.0,18,3,20,66762b2bc2008e9781fc1905fd32879ae2951833fc730868ba0473bf61ce6b6e
|
||||
668,36,44.0,45.0,18,3,22,cb4a4b67699eb3c77ffd08dc5ffc5bda7e3c9f83e8aa46fc3c029091c174f938
|
||||
669,36,44.0,45.0,18,4,25,7df1bc88de8d03675c68bb5dd987773a17ca0bd12cb1cda260c07894d137a8b0
|
||||
670,36,44.0,45.0,18,4,26,932f2b6ec9ef50475bdf0932529c5ea24e42e6af0495535d924209d57918cd76
|
||||
671,36,44.0,45.0,18,4,28,b4c1730344cbeb8940990f0a70eb7756d2317331c7fad727a131e8603bc87b0f
|
||||
672,36,44.0,45.0,18,4,30,e0555718e5a0073f331f00bae223af967f7b959a1f7e7d2430a9887c937ded62
|
||||
673,36,44.0,45.0,18,5,33,afa2830736bb01fec5946980a5775fc4f816d5deba3bda27d2895f727304ab10
|
||||
674,36,44.0,45.0,18,5,34,ef1e22c7aa7e13786db8b62dff0e3644cf256d42b961e68b8186998f59e4a9db
|
||||
675,36,44.0,45.0,18,5,36,02fc885f4068090a6a60a30041194304a1cd146c92450f7539c23fbc60eb047d
|
||||
676,36,44.0,45.0,18,5,38,0f1ffd4d5824dabd4ce2749fe59b80f5bad0c277f42cb62e1573fcec606600ae
|
||||
677,36,44.0,60.0,18,3,17,c8b24333190860f04436ebba9d4318693e5e32f550a87d55e8e2f6ee3d7d3b29
|
||||
678,36,44.0,60.0,18,3,18,b87b0b9049921f06a99f4c511fc47e666a7d3fa29a34717fb446af0d2a8a29c6
|
||||
679,36,44.0,60.0,18,3,20,dde07435d98036b2dc2eae7dadd07c68626e024144fdfd521723620c128f4715
|
||||
680,36,44.0,60.0,18,3,22,0f1bcdfde7d7cd7a5a216a316e26382f77bd5c71078053b86c79eea4fd15e549
|
||||
681,36,44.0,60.0,18,4,25,db4863de7147f9d3da0a12abee21e1c35c680e73ef71475558644f8816a2526c
|
||||
682,36,44.0,60.0,18,4,26,0f10a86f6a56994edd021ba0da3fcdf744897561620f01ab3958969711ca3cf4
|
||||
683,36,44.0,60.0,18,4,28,6fa723df1865d6129bf3cdbf2c4c6b8104987e28b8c2e9eda09dfb0d9f8416e7
|
||||
684,36,44.0,60.0,18,4,30,3e03042ad17164c54e249d54cd684da6a37c32a0f58a312740d027e624683648
|
||||
685,36,44.0,60.0,18,5,33,3c0f6be7bc618e40282a742e167078dcf1ba1168779124383c0f03a1d6fc7ae1
|
||||
686,36,44.0,60.0,18,5,34,91a0572ff7b4bfb3c5e240ef446df0c46028ea6aed00ed08806135f1b5b55e03
|
||||
687,36,44.0,60.0,18,5,36,0c6456c42defdcfef38ea81ae0aaaf32b46e82ba2b73ee34c4441d2937b5c71a
|
||||
688,36,44.0,60.0,18,5,38,00f12f2f7038c6474ebc21ecf0176da8346c09542b386994f5537bfb5a5241fd
|
||||
689,24,70.0,45.0,18,3,17,1cfd563b5e2e33af0c55818030f9ef8023ae864074826504ccc8d4efb44edc6c
|
||||
690,24,70.0,45.0,18,3,18,912cf12be7c1b13ae1e3b3d9fabb6e847e7caa8f47c6c158d6372e0047cc76ae
|
||||
691,24,70.0,45.0,18,3,20,58d4db45757ea9f2ab4b378967ea503097d00caab46865b28895bf054f206019
|
||||
692,24,70.0,45.0,18,3,22,e85811a08abd2173773f27eb75b2b281cd7436fe4ed6af6117a2bee52c433f02
|
||||
693,24,70.0,45.0,18,4,25,f6bcc6d49e26f96ae115da5eb5f8be819d7c1873e571b02d10293a5fa96b9eda
|
||||
694,24,70.0,45.0,18,4,26,6696ce43d9813043b6ed25a3c6f8ada639a573650203bddf2d6a7bd5866e816b
|
||||
695,24,70.0,45.0,18,4,28,9ec5c6b2f4b2c51f73bf9d1da4c58b98a22b925f8264472012e98283ac580c32
|
||||
696,24,70.0,45.0,18,4,30,b3879bef42e67927c90a6530a14227f2248499338d2fe4b5737647c6ed4127d2
|
||||
697,24,70.0,45.0,18,5,33,0820931b889af1fed61edda568e0c39dd7c2d69b47fa6c4b458e003a366574ad
|
||||
698,24,70.0,45.0,18,5,34,0607faab6f826f1d4a7b87c0a434d46522f7ee34f2c8c48370260fcefa086156
|
||||
699,24,70.0,45.0,18,5,36,94ee0eb797e700549a8cdacb2fed466faa9585b3d949e1536b69a31a2380bf3f
|
||||
700,24,86.0,45.0,18,3,17,3466c4797ba730ea6432879dfcf62eb17ae89c816fc4bb1041cd19fc5497bf60
|
||||
701,24,86.0,45.0,18,3,18,4bb2c0bd0e237dbb94dd310ab9602f6e6f52d12535913f982fc859df6396fb27
|
||||
702,24,86.0,45.0,18,3,20,1e6951011b49b7ee53c2774b68d832ff5f92ba289d026ef1ed3b4a149ef33e8e
|
||||
703,24,86.0,45.0,18,3,22,5302a1ca6138f0fba4f1de2b61bae7c89276aaaef547c8e1aca3034cd54ea499
|
||||
704,24,86.0,45.0,18,4,25,da60c80f3fd92eadb037e67f7de7b3e6fd1517002dd54389bd8ce9ab7e11ee50
|
||||
705,24,86.0,45.0,18,4,26,ffefd32bae330ad1ce73c97c3a209bb343eca9fb7dbd408dc3037f805d2a60cf
|
||||
706,24,86.0,45.0,18,4,28,a36f99c4aefc95569b74a90dd9c202cc46e2a386bcb6f9c4c09db2b899704ae4
|
||||
707,24,86.0,45.0,18,4,30,cd2468d7debc9df8a633d5220adb31ef792ebabba5947653bb4c6486a8a42afa
|
||||
708,24,86.0,45.0,18,5,33,28c0be32cf3b0780bcbbd82c23a7823b67da0d41fda3717674023cedd7106bb1
|
||||
709,24,86.0,45.0,18,5,34,ccb0f504f6c8e6167c3b66f3df87186ff47e318137dccada85dd6d5653b2b811
|
||||
710,24,86.0,45.0,18,5,36,357963d25fff943e44e5658c29c0c5a7afea4a389d5fefd350454f0b88d5ce83
|
||||
711,24,86.0,45.0,18,5,38,b4ff04d4e525b0a7d5f7345709d894775e4e7ec81cac9d0b08212f9a7797fe84
|
||||
712,24,86.0,60.0,18,3,17,6717b920253a2445e671c4927c578e83d378331df4a2f3598fdf454512ef5d5c
|
||||
713,24,86.0,60.0,18,3,18,d7aa97096828d4a73797abc12026caa6f21eb14b3ffc6abcf5459e08b226466a
|
||||
714,24,86.0,60.0,18,3,20,171b6dca3c9f2709997ffd9aa34050f5c554df8699bb74fe9df382e6a29b55f1
|
||||
715,24,86.0,60.0,18,3,22,9a70f609d60ca0a2f37f800646feec571a6205b7feaa046b7af244f297368838
|
||||
716,24,86.0,60.0,18,4,25,7d52c3c05d1237e5873fecd8019e4f0b811042f3eca250d101c0ade0010fdf77
|
||||
717,24,86.0,60.0,18,4,26,6e1e0c31740c45c7816caed391d0e241706a913137c0a42be69d2daa10ed67fe
|
||||
718,24,86.0,60.0,18,4,28,396e758392317c8d0b072717d60bd690bc6e2e90fc49c8ae6e8ebcc3ea4f88dd
|
||||
719,24,86.0,60.0,18,4,30,52c54b0ab187cfd9a0ea312ebe9b5cb4413bd5770c1bb247fb1eb0b02078f0da
|
||||
720,24,86.0,60.0,18,5,33,eda7332972bafd9d96ec8993fd927b54ef72462d8dbb3ba65ee59e3d74f98ca2
|
||||
721,24,86.0,60.0,18,5,34,f3314612d9708b66b8db85cfac8f81e250367887a1257ddaf4247d3c0e9ceec0
|
||||
722,24,86.0,60.0,18,5,36,dc19092aac8aebb1b2eac755b7b4a147d554532cdf2250d88df5319f85d67163
|
||||
723,24,86.0,60.0,18,5,38,0290dcb05317bfc601904e42fc7fbfc720c0d4c9902b95cf82cbb1f741bbf988
|
||||
724,36,86.0,45.0,18,3,17,60e363cc403e111353768527f78fa6348c0e6f58e345dc7002f63e14f573c6ce
|
||||
725,36,86.0,45.0,18,3,18,8af8405f611e0ecf699f1f78cea84c83d981c49d3ce64e9f70647498ffaedff8
|
||||
726,36,86.0,45.0,18,3,20,9de3bc418f1f668a102efc5147b365389cea4899d1b8f520be529ab1c5ac3e78
|
||||
727,36,86.0,45.0,18,3,22,73d323bd76aea059ec1f45fbdade579055cc85bd2193aabe2e11ab1a7f810462
|
||||
728,36,86.0,45.0,18,4,25,82b2666b6ec79d0a0014ceeff04ca2f5000116e6a9e8198834027bfcab78e391
|
||||
729,36,86.0,45.0,18,4,26,776a73e0f636401018cb4f3a7f0f8dc59c85d29598e20e38bfb12f43fc18f7ad
|
||||
730,36,86.0,45.0,18,4,28,746c299c320b72d61a65db2c381878d5e4ec59f096271a2e3c701775974d1e45
|
||||
731,36,86.0,45.0,18,4,30,1c6ffd145b9dc856ead0b8c0c333d47371d6b7c972d877a0ad9325e55d2a2b04
|
||||
732,36,86.0,45.0,18,5,33,82963adcd890f55ebcf626e1703e948a8ce96f1fbe88e2b97e9e88c8d83de148
|
||||
733,36,86.0,45.0,18,5,34,ae51e3eccb71bf8f01f7dbba96a02139c9e89f44768b527a31c3368a0e54e7c9
|
||||
734,36,86.0,45.0,18,5,36,3b01974644dff90aea01db239a16f1954ffbe2c6514de0c0b925a79b0468cbf3
|
||||
735,36,86.0,45.0,18,5,38,032f7d973235d2d1072ba5c16f5c3b4bad5be676e921d347b4f60e3169a533d4
|
||||
736,36,86.0,60.0,18,3,17,a054f679964558057bc520be2b68071dc5a3fc7910a3848af3d6d413fdc3c67f
|
||||
737,36,86.0,60.0,18,3,18,e2a9ff02075f87cd5eb055c38e9cab81dad9cee73ba0632f7c149beefe38a4e6
|
||||
738,36,86.0,60.0,18,3,20,6bf9467b5da76c7ea09b7884a89a8add220df9f83ca326df36c7e39f4fd09a98
|
||||
739,36,86.0,60.0,18,3,22,69dbfdbfc722f552b62601661885b5f2d3ce6e92c0a14c92808c8db1be6b6a41
|
||||
740,36,86.0,60.0,18,4,25,6dd48be935e3a8c2883464b58d3138954c94014f9239c1984df54bcb429090fb
|
||||
741,36,86.0,60.0,18,4,26,af990978b32d74de9da4108b8122bda97949928812633bec8e7b6bf28a0de8fc
|
||||
742,36,86.0,60.0,18,4,28,50ad2d2c657d0e884726559ee99e92ac32c34325b6bb70ac51ca6dc0dfc83a26
|
||||
743,36,86.0,60.0,18,4,30,f896f07c65f43d3404aab817c3b10c519ca0da21642145a63f33647cbb38a3c1
|
||||
744,36,86.0,60.0,18,5,33,a04a4087252593dde2c491388b5daa5935d4486cc739b43aaa3cb273d133864e
|
||||
745,36,86.0,60.0,18,5,34,d964ca6044b87624f8566d14e3a3617afa1263a2a5cc56d5f9443989ca3ecec0
|
||||
746,36,86.0,60.0,18,5,36,7fe359b48229dcea630fc52694b065dd55bb55a3321376b277ebc8751202c578
|
||||
747,36,86.0,60.0,18,5,38,80d2b7c90243b8af9a9b39bd6bcbd3fb17459f2dc7e3c3aaaea75c08c1da8c89
|
||||
748,24,107.5,45.0,18,3,17,615ba58b1496d245c78404532cb3526010e9b8844288aa244b0d6d5582928d9e
|
||||
749,24,107.5,45.0,18,3,18,bd8fb61c5bc30cc0ed46d975739a889b7d9d68b20bdd00691491530470f41bc4
|
||||
750,24,107.5,45.0,18,3,20,47b53acf38d14b9eb64523f87c51d2a0a23e88e9717ff0280a731c403cabdda8
|
||||
751,24,107.5,45.0,18,3,22,514f3993bff6744de8cb0ff1e131fea0239a328b6838c58bd6d11f20f4e8bcbc
|
||||
752,24,107.5,45.0,18,4,25,5795564070f43991d54aa5174f829d019bdda254a2e8717e27b49e311e06de17
|
||||
753,24,107.5,45.0,18,4,26,147c3718a15d1a6f912315465941a615f0ca2e7d5bbad0b15a26df3439ce8de1
|
||||
754,24,107.5,45.0,18,4,28,89bf8b352085188f8d2bc7458c7feaa87677a47bdf64cf5776ebdbeb5c47efe0
|
||||
755,24,107.5,45.0,18,4,30,7b7dec4d95a93d61fc6c79d7549498b5e8e0c9e256f36d9c76ef58271b99b46a
|
||||
756,24,107.5,45.0,18,5,33,c09e665a2d75f7de564a50309411c392a120a8bab12ad2e5873ea231908cee6a
|
||||
757,24,107.5,45.0,18,5,34,d867241104df2ec98776511800504a30a907c1b5f7306500e28db2e029c74c2b
|
||||
758,24,107.5,45.0,18,5,36,137430e0f7a9bb3c8e8f02f00481e2b544133ce876a3fca25bbf8c7b9de261b8
|
||||
759,24,107.5,45.0,18,5,38,f351a1c0b2f13970191137ba1ce9e643d23985a7f41e85df4f936e62fab27021
|
||||
760,24,107.5,60.0,18,3,17,201623ebca0cd628d43f27d5fcc28a9c340e4b5072714306e075842163449d99
|
||||
761,24,107.5,60.0,18,3,18,1f666acab2243bd4d01fe5bfe41506dd15c48047538d7c421b06e41c5404e9a8
|
||||
762,24,107.5,60.0,18,3,20,e7cf225605058f1dc79feb607c04605d3f56cfe0a7ba6c7de4d1694fdad7c7ab
|
||||
763,24,107.5,60.0,18,3,22,053473a9036e0e2718e7cfc983858dadc0c35949965ec97ab87fa7bd202c3f47
|
||||
764,24,107.5,60.0,18,4,25,2eb8a66b1c247b129057b92c1cf7308bbafe74d07ee3fc20317a83a4b1dbd256
|
||||
765,24,107.5,60.0,18,4,26,44f5f63b6762ffaafe531ae7a86b0d1f45c3d375c88eb213c0578fdfbdd216af
|
||||
766,24,107.5,60.0,18,4,28,e4a714ca561aa71a1096489418aa69b88ad77256e2e3dd94eb53aab5939b077b
|
||||
767,24,107.5,60.0,18,4,30,0bf86495d4a5a14886652e1e94f655022e4e722ee181afbb08a7c7b0e3bd5ca3
|
||||
768,24,107.5,60.0,18,5,33,54465a5a48e18d4f3ddc488c6582050da8d4874244dd5c9226498568b69bc047
|
||||
769,24,107.5,60.0,18,5,34,73eca2736f76cb5a49f3e52d89a5beb3492cacf2852b71cbda4e780334490114
|
||||
770,24,107.5,60.0,18,5,36,f2623e2076e686d228b50087f6d8a9265a210baef5ff4b35d431446fc5414704
|
||||
771,24,107.5,60.0,18,5,38,586d0a221eeed624df740cf44dc2e48b743205599672b18bc1cea7540556640f
|
||||
772,36,107.5,45.0,18,3,17,8bffbc662238ffa5989a6fd9be2010140936bf31ed0f2a9ceb6b28277a4b30e1
|
||||
773,36,107.5,45.0,18,3,18,1420888be53046afd9d9baa1949313bd9749be47a62468b5c3b6e7efdcb5374a
|
||||
774,36,107.5,45.0,18,3,20,ee2ff3a578f8b20987879790a4228324a440225788a4f6f0f63c888340c09cc2
|
||||
775,36,107.5,45.0,18,3,22,ff09abd844c0877ba6e73c92699c95c95b0dc93cdd35d74f9b7a8bfa07b3d0b7
|
||||
776,36,107.5,45.0,18,4,25,1845ab46fcf203123e94615396e9b6f63fd12b4d8c16dba5f9b6986ac330e7df
|
||||
777,36,107.5,45.0,18,4,26,2b0928170c591a6244001a77500713ff30efc02743c481400ce3c3a16d336454
|
||||
778,36,107.5,45.0,18,4,28,28b0d5e2bb17fa56d38b69f5aa0c3a9fd916233a3e35fe50a12e1e90b16e6833
|
||||
779,36,107.5,45.0,18,4,30,7a1af44d922730a1a2cf791836d3e4ff4077e6971030c49b3774ae336180fe7e
|
||||
780,36,107.5,45.0,18,5,33,c3b63fcd67c1237cd345886eacb6c99d902ed73121f6b1a259ec7c129bc7c2e6
|
||||
781,36,107.5,45.0,18,5,34,cbab5001fe067f4b29f825358c07f7d0e9029e959186ba0a95fa64c3ef159326
|
||||
782,36,107.5,45.0,18,5,36,36f9127d9e9bb6cb2ede849dbe2f3ea53f247a59a589e2737f41480ee32eb121
|
||||
783,36,107.5,45.0,18,5,38,2ad205e18f506a4abbed09e6952199948d719d68fb1a2769af9e3ae5515e6084
|
||||
784,36,107.5,60.0,18,3,17,362cd034d736f5a3c247d36878ee45469eda2b54d38546799ed9bcaf41e1db7b
|
||||
785,36,107.5,60.0,18,3,18,bbfdd5d8659caf42dd9a370b2d5f0fa01d131241c186cc25a40db3debd1c9791
|
||||
786,36,107.5,60.0,18,3,20,b46a91da828087a26beeea983806acc749d7bb2b349c4fe44c0b35d5efeeaa1c
|
||||
787,36,107.5,60.0,18,3,22,40e758568ff0535d62f2b0b12ac374e8efdc6ebb88cd0221deb06e36992bbc5b
|
||||
788,36,107.5,60.0,18,4,25,6e1901760c146c3af5cca1a188d36cdb32a557a0b3ac67bd168af62d3f160b3f
|
||||
789,36,107.5,60.0,18,4,26,e56e1d2b1a89bd4646509085ab7f0de77692ecbdef2679fff3454f1cb45c9383
|
||||
790,36,107.5,60.0,18,4,28,504c51e86ea4f4b9273dae0a1a81a727569416306c2a841261877682a1806400
|
||||
791,36,107.5,60.0,18,4,30,64c0d2bf29d5dfb707ac62f0ac11e54ddc953b25be9346fe91ff8ee6616e6c95
|
||||
792,36,107.5,60.0,18,5,33,2be9f82190bb351a0730b17152ab6bb061f6c6357b0d264139ccbfcb3180fbdf
|
||||
793,36,107.5,60.0,18,5,34,c2353b62182c71be56920ed0848c5dde059faed7ae928febd3d0a1df61dae48c
|
||||
794,36,107.5,60.0,18,5,36,c9c8c639d9d8ddbb9a881e39f9731f82552ca4c4bbc2d98983c12d666cf650ae
|
||||
795,36,107.5,60.0,18,5,38,2bd4a30b4465fc9f7cb44f873d5888f843b392d9fdb900388eced6f3bbf9c40e
|
||||
796,24,70.0,45.0,9,3,17,f7c65072c564fc12756ac7deec6864efa741bbad337f54bd53c8f7b372bfb46c
|
||||
797,24,70.0,45.0,9,3,18,88c3e0908c4d575444a30cc21b6402341c3fe14d273488b4f7e42f6eed8eff5c
|
||||
798,24,70.0,45.0,9,3,20,1f36f4982291c13802c7088f77aa735433a6a31e2b8b6be994a127d9b468c2bd
|
||||
799,24,70.0,45.0,9,3,22,c8319bfd61c251119d3495a6b6a189177017b62ea38318cdf4f2820bff4650d6
|
||||
800,24,70.0,45.0,9,4,25,874ecff13642d4792240121f6a5e5a26bda3b609fb223458b0334523cebb406f
|
||||
801,24,70.0,45.0,9,4,26,53e1db6163d560bb12d235cb33b10474442351e3134985f978605f2bc0113dd9
|
||||
802,24,70.0,45.0,9,4,28,66e6ba78f344d5b05b1b6eee99c650d16cd10b5c293c7468ad58f6ae03c90867
|
||||
803,24,70.0,45.0,9,4,30,60d099b9873ddaefcce129309543672805883e61928f23696240f7df2876a45e
|
||||
804,24,70.0,45.0,9,5,33,59617a6567edac8f16d50429fff8a7bbbad9e090fa7ec04046c1bd3a66cc958d
|
||||
805,24,70.0,45.0,9,5,34,7be9d8bebc3deec2bf05adc16ec1f30306477dc76aac257b96c5179525f25c0b
|
||||
806,24,70.0,45.0,9,5,36,f77219d6798955894ab2eaed7f0305800e5c9f2dc63ba99214548c27ddbeccd0
|
||||
807,24,70.0,45.0,9,5,38,d3e2b40bf61b625f5bcaf7e8227fe0180f9124a667b6d6a5a993dba1144ec3d0
|
||||
808,24,70.0,60.0,9,3,17,ef396f0cc3810b5563aa5de7983b4742b293c2c96d317e341b56a28c0a333538
|
||||
809,24,70.0,60.0,9,3,18,69a18b201fc83a197ff0d82ffc97f5a82d6aa0207143e3f45394d6c16cfffa90
|
||||
810,24,70.0,60.0,9,3,20,877232a58830d7c1e895612fa96ae338d5bd21676d16658c6ddd45153fba91e2
|
||||
811,24,70.0,60.0,9,3,22,a240efaba675cc1af88925f5d9f8bc906eafe63d34cd52804b7141b70fcaf1ec
|
||||
812,24,70.0,60.0,9,4,25,2d8878f78a1bef593759f5b14c2e6ffc39148c53bea4115ba50d41dfb0af16c8
|
||||
813,24,70.0,60.0,9,4,26,887e8f1362b6199cca665964b00d056441938494bee6ef261e40823394d7f17f
|
||||
814,24,70.0,60.0,9,4,28,14a616fadaa773917ab53008d1f96b7ff3db570d01f30c546790a190cd3ccd65
|
||||
815,24,70.0,60.0,9,4,30,cc8c6de89062c3390dc52fb4636a44cb1f6bc285c3f65cebb3f7462884af4608
|
||||
816,24,70.0,60.0,9,5,33,0a69aab800e2be7fbed9373e657ab0976b79349fde6be843e9ad1e6ba346ee08
|
||||
817,24,70.0,60.0,9,5,34,e7cbbc9f0b76107b6e1d70bdb03f695b0153df672ee7230cb37c14f33e47a99d
|
||||
818,24,70.0,60.0,9,5,36,367ba4546c76d532cf014c5522fbe991d993da4cf00dabc43866fa30a9a724eb
|
||||
819,24,70.0,60.0,9,5,38,a75cc00e1446e5a3e91562a0daa11e0ce3de71986742b55c6e6adccec2695d49
|
||||
820,24,70.0,45.0,27,3,17,1bda78c38a9b1412b357923751d7af84ab6ecdad3d9471f131d918db2bfb0a25
|
||||
821,24,70.0,45.0,27,3,18,2aedfe89f2915c6faabded4239c5274c742512fe554c76dcd21c3057fb3d9409
|
||||
822,24,70.0,45.0,27,3,20,23f2808530b950186123fb354ecbaa9065fe4bb80639ce8af7643d1fc5fd0778
|
||||
823,24,70.0,45.0,27,3,22,27ffb87ab25351b7bbcd5f17d50c24e88ff55f7bdf0b80a6c8488d4fa8604f50
|
||||
824,24,70.0,45.0,27,4,25,4613f06c939f1c611958a7153afc0bb57dc86a775a7908b386d0ed963d766e10
|
||||
825,24,70.0,45.0,27,4,26,cba374793aa40c7821ccf3e4f57c95da998f7dcd3856aabebe0312c3ea833da2
|
||||
826,24,70.0,45.0,27,4,28,6663b83f2bfec70981dfae791212edf22dd758171e1406b6a7ece1152272218c
|
||||
827,24,70.0,45.0,27,4,30,f7643ae1b6d74e64e55c6dc87b7bde5580f7ca9269242e9e37f12854e2df516b
|
||||
828,24,70.0,45.0,27,5,33,c0cef2a3a5be3e3566650d75bb494dd1ac6c344640c16801e5f87956e68ff493
|
||||
829,24,70.0,45.0,27,5,34,a41498b106cdc87cada4da79851382ccaca8d72de47a1e3872a72eb22571c791
|
||||
830,24,70.0,45.0,27,5,36,6208d19ab8e8894678c06c6dbb176fe86734dc09846049b950fbd83ede999d2b
|
||||
831,24,70.0,45.0,27,5,38,14e2433cdbb3d09db341749109691f4f887b4e587a73a77ba8666724124281d4
|
||||
832,24,70.0,60.0,27,3,17,a47302f39abab1d61631f77a2a66ac5f5f19e0cce1e545c5b11e09ba0243b1f7
|
||||
833,24,70.0,60.0,27,3,18,910e24bdd59209a7940dac87eca8a8833e40a707ee138e580979c4bfd8f5d2ad
|
||||
834,24,70.0,60.0,27,3,20,1d27d3ebc3ed8aab99e891f193a479ae8ea59e65302c1553b8cbf51cc030dd36
|
||||
835,24,70.0,60.0,27,3,22,307007fd709f4ccb26bb8a256d31e7dca30ef3f3292bc2dbba4771f085ca1dc9
|
||||
836,24,70.0,60.0,27,4,25,8115089eef04b47cb6275050d907618d538c345f7756f8020d8fb289e6f23bae
|
||||
837,24,70.0,60.0,27,4,26,af68f473a3c45905db8197e0aadf5c159317ec79b4d8e0ae1fa5d353469b9c40
|
||||
838,24,70.0,60.0,27,4,28,21b76603d35fb4acc8780880304393952b106c64157da0c92df6ac0aa51af9d3
|
||||
839,24,70.0,60.0,27,4,30,096680f71554f3cc58a3d1b628e9c8a97d2955fbc9a9b84372d7f7174e9e48d6
|
||||
840,24,70.0,60.0,27,5,33,520845528e0465821a43ca6fc021ca03f78f25e7dd7a9e773313a8db8ca1bee7
|
||||
841,24,70.0,60.0,27,5,34,bf0b065c3844d07027586b12677d5a8a14b6966953725ba78332d998d4e9ef25
|
||||
842,24,70.0,60.0,27,5,36,fdd34e8aa7234c1d2d464018bb6ac32d2cd866881b2233271ce4371c8b3a4743
|
||||
843,24,70.0,60.0,27,5,38,b9f4c40bb1e5ad8add62918b8db821e3b5b0b41569d89f9d53026f44659cf4b0
|
||||
844,24,70.0,45.0,36,3,17,57e89909f924237ed35aafa2d600f65a5f1839c9b11285dfc2022a9e546fa643
|
||||
845,24,70.0,45.0,36,3,18,70b5b7d36c76399fe2c0b1d2381bc173d2052b29896aef86013eb75b7ad878db
|
||||
846,24,70.0,45.0,36,3,20,6620a225f2d346a4ee5dc3a17a4b4eb07bfefa6ccba668b680aad054559e33ce
|
||||
847,24,70.0,45.0,36,3,22,f44480200440e9f85f6c9e918b24e17633bc863943af87b33e536fdc1cda2acb
|
||||
848,24,70.0,45.0,36,4,25,a64ad90bf862aa0fa705c6f052beff71e9912adc6b0ac4b414a367687ed8964c
|
||||
849,24,70.0,45.0,36,4,26,125b0a5ba773eed31ac3030936e59d82667497a17e904968df715542c2f8f6b6
|
||||
850,24,70.0,45.0,36,4,28,fd2d2a2acf023872ecd8905be920ff50e81d842c7c1a9ad7609ed25ab80d7b8e
|
||||
851,24,70.0,45.0,36,4,30,a328c4f01bd8355b93bc9add8261c74c62374ad4509e89b220d0a7cefe0264f2
|
||||
852,24,70.0,45.0,36,5,33,f237fbb4af2fee18e1a50241c11ad184bd3815ca98e546de9b4219f01ad6d597
|
||||
853,24,70.0,45.0,36,5,34,407115d033aa176b3251a1c6d6e535ba83ca191c9a3ae6aca45c733672eb4168
|
||||
854,24,70.0,45.0,36,5,36,ac799afd672da0d65efcb9ad24e482851031ca25862b748fd3842f49159d846c
|
||||
855,24,70.0,45.0,36,5,38,5e4bff496f363e2abb8447dcd3eeb181df92d10315ef19a485d334b8382bb7ae
|
||||
856,24,70.0,60.0,36,3,17,72acfe55190ed57cebf4f1156986564e0416b0b2af0e44a320c9194c7f2ea8cf
|
||||
857,24,70.0,60.0,36,3,18,2805e6f098d15b27284eb510e1c1362e525cf0b0babce5d1fc08edab3b95e4c5
|
||||
858,24,70.0,60.0,36,3,20,8a50464709efe7d242c053efa8e950450108cb815e1a26dc121d0cd593da68d4
|
||||
859,24,70.0,60.0,36,3,22,c3f631cf2a02a7c64044ba26389db67a638453be3d2b0b5a9dff87d6f0a45da1
|
||||
860,24,70.0,60.0,36,4,25,1ea10a95e4b72824a094fff9a416831d105715d1190b55afe1b9d156f4e4b2fc
|
||||
861,24,70.0,60.0,36,4,26,88946925060027a3a3472036c3e82033b9dc468ad99e44d895552cf0a6a641ef
|
||||
862,24,70.0,60.0,36,4,28,e7ce645c4ccb5b38624068326842d053686718abb3f5761ea82aedc6e609861c
|
||||
863,24,70.0,60.0,36,4,30,3d549d0fd3d08be83150bdf31346d01add6c7fb80f84e2477f95988cd439e9e8
|
||||
864,24,70.0,60.0,36,5,33,e395a9dbc44ff4a21cf99ab1e1ab42d864ac35c98956c231aebf0c571df29b53
|
||||
865,24,70.0,60.0,36,5,34,3b9f3cd1723bca4b49699491b87a4a88d2401530f4f0983376f7fba088d95b5e
|
||||
866,24,70.0,60.0,36,5,36,f02e26d93e8f9469c685957428babff6ea1f3db5321c0e37f0723af16a3c5e97
|
||||
867,24,70.0,60.0,36,5,38,ad7f8512bad46de4c706baa550d33fb859c68996936052d7fff4d8fed8f75f68
|
|
6
db/files/load_parameters.csv
Normal file
6
db/files/load_parameters.csv
Normal file
@ -0,0 +1,6 @@
|
||||
id,load,primary_air_consumption,secondary_air_consumption,gas_inlet_consumption
|
||||
1,190,20.3354886853634,51.7975452731847,0.345208189376503
|
||||
2,260,20.9617016507624,53.3926037902321,0.453841651629505
|
||||
3,315,23.6372054386887,60.2075139567843,0.559493985383952
|
||||
4,400,30.4431292303094,77.5432245058036,0.731285900359563
|
||||
5,465,35.3184718352393,89.9614546849929,0.848336676986426
|
|
41
db/files/recycling_parameters.csv
Normal file
41
db/files/recycling_parameters.csv
Normal file
@ -0,0 +1,41 @@
|
||||
id,load_id,recycling_level,co2,n2,h2o,o2
|
||||
1,1,0,0,0.7685,0,0.2315
|
||||
2,1,5,0.00364653315945826,0.754018809386459,0.00768250189905284,0.234652155555029
|
||||
3,1,8,0.00583445305513322,0.745330095018335,0.0122920030384845,0.236543448888047
|
||||
4,1,10,0.00729306631891652,0.739537618772919,0.0153650037981057,0.237804311110059
|
||||
5,1,15,0.0109395994783748,0.725056428159379,0.0230475056971585,0.240956466665088
|
||||
6,1,20,0.014586132637833,0.710575237545838,0.0307300075962114,0.244108622220117
|
||||
7,1,25,0.0182326657972913,0.696094046932298,0.0384125094952642,0.247260777775147
|
||||
8,1,30,0.0218791989567496,0.681612856318757,0.046095011394317,0.250412933330176
|
||||
9,2,0,0,0.7685,0,0.2315
|
||||
10,2,5,0.00465084114980632,0.760613280911782,0.00979837407289293,0.224937503865519
|
||||
11,2,8,0.00744134583969012,0.755881249458851,0.0156773985166287,0.22100000618483
|
||||
12,2,10,0.00930168229961265,0.752726561823564,0.0195967481457859,0.218375007731037
|
||||
13,2,15,0.013952523449419,0.744839842735346,0.0293951222186788,0.211812511596556
|
||||
14,2,20,0.0186033645992253,0.736953123647129,0.0391934962915717,0.205250015462074
|
||||
15,2,25,0.0232542057490316,0.729066404558911,0.0489918703644647,0.198687519327593
|
||||
16,2,30,0.0279050468988379,0.721179685470693,0.0587902444373576,0.192125023193112
|
||||
17,3,0,0,0.7685,0,0.2315
|
||||
18,3,5,0.0050845553927608,0.763461128636561,0.0107121215556223,0.220742194415056
|
||||
19,3,8,0.00813528862841727,0.760437805818498,0.0171393944889956,0.214287511064089
|
||||
20,3,10,0.0101691107855216,0.758422257273122,0.0214242431112445,0.209984388830112
|
||||
21,3,15,0.0152536661782824,0.753383385909684,0.0321363646668668,0.199226583245167
|
||||
22,3,20,0.0203382215710432,0.748344514546245,0.042848486222489,0.188468777660223
|
||||
23,3,25,0.025422776963804,0.743305643182806,0.0535606077781113,0.177710972075279
|
||||
24,3,30,0.0305073323565648,0.738266771819367,0.0642727293337336,0.166953166490335
|
||||
25,4,0,0,0.7685,0,0.2315
|
||||
26,4,5,0.00516002254880722,0.763956659904288,0.0108711154669045,0.22001220208
|
||||
27,4,8,0.00825603607809156,0.761230655846861,0.0173937847470473,0.213119523328001
|
||||
28,4,10,0.0103200450976144,0.759413319808576,0.0217422309338091,0.208524404160001
|
||||
29,4,15,0.0154800676464217,0.754869979712864,0.0326133464007136,0.197036606240001
|
||||
30,4,20,0.0206400901952289,0.750326639617152,0.0434844618676182,0.185548808320001
|
||||
31,4,25,0.0258001127440361,0.74578329952144,0.0543555773345227,0.174061010400002
|
||||
32,4,30,0.0309601352928433,0.741239959425727,0.0652266928014272,0.162573212480002
|
||||
33,5,0,0,0.7685,0,0.2315
|
||||
34,5,5,0.00515964747536643,0.763954197102887,0.0108703252636361,0.22001583015811
|
||||
35,5,8,0.00825543596058629,0.76122671536462,0.0173925204218177,0.213125328252976
|
||||
36,5,10,0.0103192949507329,0.759408394205775,0.0217406505272721,0.20853166031622
|
||||
37,5,15,0.0154789424260993,0.754862591308662,0.0326109757909082,0.19704749047433
|
||||
38,5,20,0.0206385899014657,0.750316788411549,0.0434813010545443,0.185563320632441
|
||||
39,5,25,0.0257982373768322,0.745770985514437,0.0543516263181804,0.174079150790551
|
||||
40,5,30,0.0309578848521986,0.741225182617324,0.0652219515818164,0.162594980948661
|
|
74
db/migrations/env.py
Normal file
74
db/migrations/env.py
Normal file
@ -0,0 +1,74 @@
|
||||
from logging.config import fileConfig
|
||||
|
||||
from sqlalchemy import engine_from_config
|
||||
from sqlalchemy import pool
|
||||
|
||||
from alembic import context
|
||||
|
||||
from db.config import settings
|
||||
from db.models.experiment_data_model import ExperimentData
|
||||
from db.models.experiment_parameters_model import ExperimentParameters
|
||||
from db.models.load_parameters_model import LoadParameters
|
||||
from db.models.recycling_parameters_model import RecyclingParameters
|
||||
from db.models.base import Base
|
||||
|
||||
config = context.config
|
||||
|
||||
if config.config_file_name is not None:
|
||||
fileConfig(config.config_file_name)
|
||||
|
||||
config.set_main_option('sqlalchemy.url', settings.db_url_asyncpg + '?async_fallback=True')
|
||||
|
||||
target_metadata = Base.metadata
|
||||
|
||||
|
||||
def run_migrations_offline() -> None:
|
||||
"""Run migrations in 'offline' mode.
|
||||
|
||||
This configures the context with just a URL
|
||||
and not an Engine, though an Engine is acceptable
|
||||
here as well. By skipping the Engine creation
|
||||
we don't even need a DBAPI to be available.
|
||||
|
||||
Calls to context.execute() here emit the given string to the
|
||||
script output.
|
||||
|
||||
"""
|
||||
url = config.get_main_option("sqlalchemy.url")
|
||||
context.configure(
|
||||
url=url,
|
||||
target_metadata=target_metadata,
|
||||
literal_binds=True,
|
||||
dialect_opts={"paramstyle": "named"},
|
||||
)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
|
||||
def run_migrations_online() -> None:
|
||||
"""Run migrations in 'online' mode.
|
||||
|
||||
In this scenario we need to create an Engine
|
||||
and associate a connection with the context.
|
||||
|
||||
"""
|
||||
connectable = engine_from_config(
|
||||
config.get_section(config.config_ini_section, {}),
|
||||
prefix="sqlalchemy.",
|
||||
poolclass=pool.NullPool,
|
||||
)
|
||||
|
||||
with connectable.connect() as connection:
|
||||
context.configure(
|
||||
connection=connection, target_metadata=target_metadata
|
||||
)
|
||||
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
|
||||
if context.is_offline_mode():
|
||||
run_migrations_offline()
|
||||
else:
|
||||
run_migrations_online()
|
26
db/migrations/script.py.mako
Normal file
26
db/migrations/script.py.mako
Normal file
@ -0,0 +1,26 @@
|
||||
"""${message}
|
||||
|
||||
Revision ID: ${up_revision}
|
||||
Revises: ${down_revision | comma,n}
|
||||
Create Date: ${create_date}
|
||||
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
${imports if imports else ""}
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = ${repr(up_revision)}
|
||||
down_revision: Union[str, None] = ${repr(down_revision)}
|
||||
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
|
||||
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
${upgrades if upgrades else "pass"}
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
${downgrades if downgrades else "pass"}
|
7
db/models/__init__.py
Normal file
7
db/models/__init__.py
Normal file
@ -0,0 +1,7 @@
|
||||
from .base import *
|
||||
from .experiment_parameters_model import *
|
||||
from .experiment_data_model import *
|
||||
from .ch_experimentdb_experiment_data_model import *
|
||||
from .load_parameters_model import *
|
||||
from .recycling_parameters_model import *
|
||||
from .experiment_category import *
|
8
db/models/base.py
Normal file
8
db/models/base.py
Normal file
@ -0,0 +1,8 @@
|
||||
from typing import Annotated
|
||||
|
||||
from sqlalchemy.orm import DeclarativeBase, mapped_column
|
||||
|
||||
int_pk_incr = Annotated[int, mapped_column(primary_key=True, autoincrement=True)]
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
26
db/models/ch_experimentdb_experiment_data_model.py
Normal file
26
db/models/ch_experimentdb_experiment_data_model.py
Normal file
@ -0,0 +1,26 @@
|
||||
from clickhouse_sqlalchemy import engines
|
||||
from clickhouse_sqlalchemy.types import Float64, String
|
||||
from sqlalchemy import Integer
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.clickhouse_db_connection import BaseClickhouse
|
||||
|
||||
class ChExperimentDBExperimentData(BaseClickhouse):
|
||||
__tablename__ = 'experiment_data'
|
||||
__table_args__ = (
|
||||
engines.MergeTree(order_by='id'),
|
||||
)
|
||||
|
||||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
volume: Mapped[float] = mapped_column(Float64)
|
||||
nitrogen_oxide_emission: Mapped[float] = mapped_column(Float64)
|
||||
temperature: Mapped[float] = mapped_column(Float64)
|
||||
co_fraction: Mapped[float] = mapped_column(Float64)
|
||||
co2_fraction: Mapped[float] = mapped_column(Float64)
|
||||
x: Mapped[float] = mapped_column(Float64)
|
||||
y: Mapped[float] = mapped_column(Float64)
|
||||
z: Mapped[float] = mapped_column(Float64)
|
||||
file_id: Mapped[str] = mapped_column(String)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ChExperimentDBExperimentData id={self.id}, volume={self.volume}>"
|
17
db/models/experiment_category.py
Normal file
17
db/models/experiment_category.py
Normal file
@ -0,0 +1,17 @@
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import Identity, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.models.base import Base
|
||||
|
||||
|
||||
class ExperimentCategory(Base):
|
||||
__tablename__ = 'experiment_category'
|
||||
|
||||
id: Mapped[int] = mapped_column(Identity(start=1, cycle=True),
|
||||
primary_key=True)
|
||||
name: Mapped[str]
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ExperimentCategory>"
|
22
db/models/experiment_data_model.py
Normal file
22
db/models/experiment_data_model.py
Normal file
@ -0,0 +1,22 @@
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import Identity, ForeignKey
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.models.base import Base
|
||||
|
||||
|
||||
class ExperimentData(Base):
|
||||
__tablename__ = 'experiment_data'
|
||||
|
||||
id: Mapped[int] = mapped_column(Identity(start=21, cycle=True),
|
||||
primary_key=True)
|
||||
direction: Mapped[float]
|
||||
temperature: Mapped[float]
|
||||
nox: Mapped[float]
|
||||
co2: Mapped[float]
|
||||
co: Mapped[float]
|
||||
file_id: Mapped[Optional[str]] = mapped_column(ForeignKey('experiment_parameters.experiment_hash', ondelete='SET NULL'))
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ExperimentData>"
|
24
db/models/experiment_parameters_model.py
Normal file
24
db/models/experiment_parameters_model.py
Normal file
@ -0,0 +1,24 @@
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import ForeignKey, Identity
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.models.base import Base
|
||||
|
||||
|
||||
class ExperimentParameters(Base):
|
||||
__tablename__ = 'experiment_parameters'
|
||||
|
||||
id: Mapped[int] = mapped_column(Identity(start=11, cycle=True),
|
||||
primary_key=True)
|
||||
outer_blades_count: Mapped[int]
|
||||
outer_blades_length: Mapped[float]
|
||||
outer_blades_angle: Mapped[float]
|
||||
middle_blades_count: Mapped[int]
|
||||
load_id: Mapped[Optional[int]] = mapped_column(ForeignKey('load_parameters.id', ondelete='SET NULL'))
|
||||
recycling_id: Mapped[Optional[int]] = mapped_column(ForeignKey('recycling_parameters.id', ondelete='SET NULL'))
|
||||
experiment_hash: Mapped[str] = mapped_column(unique=True)
|
||||
experiment_category_id: Mapped[Optional[int]] = mapped_column(ForeignKey('experiment_category.id', ondelete='SET NULL'), nullable=True)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ExperimentParameters>"
|
18
db/models/load_parameters_model.py
Normal file
18
db/models/load_parameters_model.py
Normal file
@ -0,0 +1,18 @@
|
||||
from sqlalchemy import Identity
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.models.base import Base
|
||||
|
||||
|
||||
class LoadParameters(Base):
|
||||
__tablename__ = 'load_parameters'
|
||||
|
||||
id: Mapped[int] = mapped_column(Identity(start=6, cycle=True),
|
||||
primary_key=True)
|
||||
load: Mapped[int]
|
||||
primary_air_consumption: Mapped[float]
|
||||
secondary_air_consumption: Mapped[float]
|
||||
gas_inlet_consumption: Mapped[float]
|
||||
|
||||
def __repr__(self):
|
||||
return f"<LoadParameters>"
|
23
db/models/recycling_parameters_model.py
Normal file
23
db/models/recycling_parameters_model.py
Normal file
@ -0,0 +1,23 @@
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import ForeignKey, Identity
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from db.models.base import Base
|
||||
|
||||
|
||||
class RecyclingParameters(Base):
|
||||
__tablename__ = 'recycling_parameters'
|
||||
|
||||
id: Mapped[int] = mapped_column(Identity(start=6, cycle=True),
|
||||
primary_key=True)
|
||||
|
||||
load_id: Mapped[Optional[int]] = mapped_column(ForeignKey('load_parameters.id', ondelete='SET NULL'))
|
||||
recycling_level: Mapped[int]
|
||||
co2: Mapped[float]
|
||||
n2: Mapped[float]
|
||||
h2o: Mapped[float]
|
||||
o2: Mapped[float]
|
||||
|
||||
def __repr__(self):
|
||||
return f"<RecyclingParameters>"
|
11
db/postgres_db_connection.py
Normal file
11
db/postgres_db_connection.py
Normal file
@ -0,0 +1,11 @@
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
|
||||
from settings import settings
|
||||
|
||||
engine_postgres = create_async_engine(url=settings.db_url_asyncpg_docker, echo=True)
|
||||
async_session_postgres = async_sessionmaker(engine_postgres, expire_on_commit=False)
|
||||
|
||||
|
||||
# Функция для получения новой сессии
|
||||
async def get_async_session():
|
||||
async with async_session_postgres() as session:
|
||||
yield session
|
6
db/repositories/__init__.py
Normal file
6
db/repositories/__init__.py
Normal file
@ -0,0 +1,6 @@
|
||||
from .experiment_data_repos import *
|
||||
from .experiment_parameters_repos import *
|
||||
from .load_parameters_repos import *
|
||||
from .recycling_parameters_repos import *
|
||||
from .ch_experimentdb_experiment_data_repos import *
|
||||
from .experiment_category_repos import *
|
41
db/repositories/ch_experimentdb_experiment_data_repos.py
Normal file
41
db/repositories/ch_experimentdb_experiment_data_repos.py
Normal file
@ -0,0 +1,41 @@
|
||||
from db.models.ch_experimentdb_experiment_data_model import ChExperimentDBExperimentData
|
||||
from sqlalchemy import select,func
|
||||
|
||||
class ChExperimentDBExperimentDataRepository:
|
||||
def __init__(self, session):
|
||||
self.session = session
|
||||
|
||||
def get_all(self):
|
||||
return self.session.query(ChExperimentDBExperimentData).all()
|
||||
|
||||
def get_by_id(self, id: int) -> ChExperimentDBExperimentData:
|
||||
return self.session.query(ChExperimentDBExperimentData).filter(ChExperimentDBExperimentData.id == id).one_or_none()
|
||||
|
||||
def get_by_file_id(self, file_id: str) -> ChExperimentDBExperimentData:
|
||||
return self.session.query(ChExperimentDBExperimentData).filter(ChExperimentDBExperimentData.file_id == file_id).all()
|
||||
|
||||
def create(self, ch_experiment_data: ChExperimentDBExperimentData) -> ChExperimentDBExperimentData:
|
||||
max_id_query = select(func.max(ChExperimentDBExperimentData.id))
|
||||
max_id_result = self.session.execute(max_id_query).scalar()
|
||||
|
||||
max_id = max_id_result or 0
|
||||
|
||||
ch_experiment_data.id = max_id + 1
|
||||
|
||||
self.session.add(ch_experiment_data)
|
||||
self.session.commit()
|
||||
|
||||
return ch_experiment_data
|
||||
|
||||
def update(self, id: int, updated_data: dict) -> ChExperimentDBExperimentData:
|
||||
self.session.query(ChExperimentDBExperimentData).filter(ChExperimentDBExperimentData.id == id).update(updated_data)
|
||||
self.session.commit()
|
||||
return self.get_by_id(id)
|
||||
|
||||
def delete(self, id: int) -> bool:
|
||||
item = self.get_by_id(id)
|
||||
if item:
|
||||
self.session.delete(item)
|
||||
self.session.commit()
|
||||
return True
|
||||
return False
|
41
db/repositories/experiment_category_repos.py
Normal file
41
db/repositories/experiment_category_repos.py
Normal file
@ -0,0 +1,41 @@
|
||||
from typing import Sequence
|
||||
|
||||
from sqlalchemy import update, delete
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.future import select
|
||||
from typing_extensions import deprecated
|
||||
from db.models import ExperimentCategory
|
||||
|
||||
|
||||
@deprecated(
|
||||
"теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории"
|
||||
)
|
||||
class ExperimentCategoryRepository:
|
||||
def __init__(self, session: AsyncSession):
|
||||
self.session = session
|
||||
|
||||
async def get_all(self) -> Sequence[ExperimentCategory]:
|
||||
result = await self.session.execute(select(ExperimentCategory))
|
||||
return result.scalars().all()
|
||||
|
||||
async def get_by_id(self, id: int) -> ExperimentCategory:
|
||||
result = await self.session.execute(select(ExperimentCategory).where(ExperimentCategory.id == id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
async def create(self, new_data: ExperimentCategory):
|
||||
self.session.add(new_data)
|
||||
await self.session.commit()
|
||||
|
||||
async def update(self, id: int, updated_data: dict):
|
||||
stmt = (
|
||||
update(ExperimentCategory).
|
||||
where(ExperimentCategory.id == id).
|
||||
values(**updated_data)
|
||||
)
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
||||
|
||||
async def delete(self, id: int):
|
||||
stmt = delete(ExperimentCategory).where(ExperimentCategory.id == id)
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
24
db/repositories/experiment_data_repos.py
Normal file
24
db/repositories/experiment_data_repos.py
Normal file
@ -0,0 +1,24 @@
|
||||
from typing import Sequence
|
||||
|
||||
from sqlalchemy.future import select
|
||||
|
||||
from db.models.experiment_data_model import ExperimentData
|
||||
from db.postgres_db_connection import async_session_postgres
|
||||
|
||||
|
||||
async def get_exp_data_by_file_id(file_id: str) -> Sequence[ExperimentData]:
|
||||
async with async_session_postgres() as session:
|
||||
result = await session.execute(
|
||||
select(ExperimentData).where(ExperimentData.file_id == file_id)
|
||||
)
|
||||
return result.scalars().all()
|
||||
|
||||
|
||||
async def get_all_exp_data(page: int, page_size: int) -> Sequence[ExperimentData]:
|
||||
async with async_session_postgres() as session:
|
||||
offset = (page - 1) * page_size
|
||||
|
||||
result = await session.execute(
|
||||
select(ExperimentData).offset(offset).limit(page_size)
|
||||
)
|
||||
return result.scalars().all()
|
21
db/repositories/experiment_parameters_repos.py
Normal file
21
db/repositories/experiment_parameters_repos.py
Normal file
@ -0,0 +1,21 @@
|
||||
from typing import Sequence
|
||||
|
||||
from sqlalchemy.future import select
|
||||
|
||||
from db.models.experiment_parameters_model import ExperimentParameters
|
||||
from db.postgres_db_connection import async_session_postgres
|
||||
|
||||
|
||||
async def get_exp_parameters_by_category(category_id: int) -> Sequence[ExperimentParameters]:
|
||||
async with async_session_postgres() as session:
|
||||
result = await session.execute(
|
||||
select(ExperimentParameters).where(ExperimentParameters.experiment_category_id == category_id)
|
||||
)
|
||||
return result.scalars().all()
|
||||
|
||||
async def get_exp_parameters_by_exp_hash(exp_hash: str) -> Sequence[ExperimentParameters]:
|
||||
async with async_session_postgres() as session:
|
||||
result = await session.execute(
|
||||
select(ExperimentParameters).where(ExperimentParameters.experiment_hash == exp_hash)
|
||||
)
|
||||
return result.scalars().all()
|
76
db/repositories/load_parameters_repos.py
Normal file
76
db/repositories/load_parameters_repos.py
Normal file
@ -0,0 +1,76 @@
|
||||
from typing import Optional, Sequence
|
||||
|
||||
from sqlalchemy import delete as delete_
|
||||
from sqlalchemy import update as update_
|
||||
from sqlalchemy.future import select
|
||||
|
||||
from db.models.load_parameters_model import LoadParameters
|
||||
from db.postgres_db_connection import async_session_postgres
|
||||
|
||||
|
||||
# async def get_all() -> Sequence[LoadParameters]:
|
||||
# async with async_session_postgres() as session:
|
||||
# result = await session.execute(select(LoadParameters))
|
||||
# return result.scalars().all()
|
||||
#
|
||||
#
|
||||
# async def get_by_id(id: int) -> LoadParameters:
|
||||
# async with async_session_postgres() as session:
|
||||
# result = await session.execute(select(LoadParameters).where(LoadParameters.id == id))
|
||||
# return result.scalar_one_or_none()
|
||||
#
|
||||
#
|
||||
# async def create(new_data: LoadParameters):
|
||||
# async with async_session_postgres() as session:
|
||||
# session.add(new_data)
|
||||
# await session.commit()
|
||||
#
|
||||
#
|
||||
# async def update(id: int, updated_data: dict):
|
||||
# async with async_session_postgres() as session:
|
||||
# stmt = (
|
||||
# update_(LoadParameters).
|
||||
# where(LoadParameters.id == id).
|
||||
# values(**updated_data)
|
||||
# )
|
||||
# await session.execute(stmt)
|
||||
# await session.commit()
|
||||
#
|
||||
#
|
||||
# async def delete(id: int) -> bool:
|
||||
# async with async_session_postgres() as session:
|
||||
# stmt = delete_(LoadParameters).where(LoadParameters.id == id)
|
||||
# result = await session.execute(stmt)
|
||||
# await session.commit()
|
||||
# return result.rowcount > 0
|
||||
|
||||
|
||||
# class LoadParametersRepository:
|
||||
# def __init__(self, session: AsyncSession):
|
||||
# self.session = session
|
||||
#
|
||||
# async def get_all(self) -> Sequence[LoadParameters]:
|
||||
# result = await self.session.execute(select(LoadParameters))
|
||||
# return result.scalars().all()
|
||||
#
|
||||
# async def get_by_id(self, id: int) -> LoadParameters:
|
||||
# result = await self.session.execute(select(LoadParameters).where(LoadParameters.id == id))
|
||||
# return result.scalar_one_or_none()
|
||||
#
|
||||
# async def create(self, new_data: LoadParameters):
|
||||
# self.session.add(new_data)
|
||||
# await self.session.commit()
|
||||
#
|
||||
# async def update(self, id: int, updated_data: dict):
|
||||
# stmt = (
|
||||
# update_(LoadParameters).
|
||||
# where(LoadParameters.id == id).
|
||||
# values(**updated_data)
|
||||
# )
|
||||
# await self.session.execute(stmt)
|
||||
# await self.session.commit()
|
||||
#
|
||||
# async def delete(self, id: int):
|
||||
# stmt = delete_(LoadParameters).where(LoadParameters.id == id)
|
||||
# await self.session.execute(stmt)
|
||||
# await self.session.commit()
|
41
db/repositories/recycling_parameters_repos.py
Normal file
41
db/repositories/recycling_parameters_repos.py
Normal file
@ -0,0 +1,41 @@
|
||||
from typing import Sequence
|
||||
from typing_extensions import deprecated
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import update, delete
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from db.models.recycling_parameters_model import RecyclingParameters
|
||||
|
||||
@deprecated(
|
||||
"теперь есть параметризованный круд, а уже свои специфичные методы у каждой сущности в своем репозитории"
|
||||
)
|
||||
class RecyclingParametersRepository:
|
||||
def __init__(self, session: AsyncSession):
|
||||
self.session = session
|
||||
|
||||
async def get_all(self) -> Sequence[RecyclingParameters]:
|
||||
result = await self.session.execute(select(RecyclingParameters))
|
||||
return result.scalars().all()
|
||||
|
||||
async def get_by_id(self, id: int) -> RecyclingParameters:
|
||||
result = await self.session.execute(select(RecyclingParameters).where(RecyclingParameters.id == id))
|
||||
return result.scalar_one_or_none()
|
||||
|
||||
async def create(self, new_data: RecyclingParameters):
|
||||
self.session.add(new_data)
|
||||
await self.session.commit()
|
||||
|
||||
async def update(self, id: int, updated_data: dict):
|
||||
stmt = (
|
||||
update(RecyclingParameters).
|
||||
where(RecyclingParameters.id == id).
|
||||
values(**updated_data)
|
||||
)
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
||||
|
||||
async def delete(self, id: int):
|
||||
stmt = delete(RecyclingParameters).where(RecyclingParameters.id == id)
|
||||
await self.session.execute(stmt)
|
||||
await self.session.commit()
|
40
docker-compose.yml
Normal file
40
docker-compose.yml
Normal file
@ -0,0 +1,40 @@
|
||||
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
container_name: postgres-db
|
||||
environment:
|
||||
POSTGRES_DB: ${DATABASE}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
clickhouse:
|
||||
image: clickhouse/clickhouse-server:latest
|
||||
container_name: clickhouse-db
|
||||
environment:
|
||||
CLICKHOUSE_USER: ${CLICKHOUSE_USER}
|
||||
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
|
||||
ports:
|
||||
- "8123:8123"
|
||||
- "9000:9000"
|
||||
volumes:
|
||||
- clickhouse_data:/var/lib/clickhouse
|
||||
|
||||
fastapi:
|
||||
build: .
|
||||
container_name: fastapi-app
|
||||
ports:
|
||||
- "8000:8000"
|
||||
depends_on:
|
||||
- db
|
||||
- clickhouse
|
||||
volumes:
|
||||
- .:/app
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
clickhouse_data:
|
213
experiment_planner.py
Normal file
213
experiment_planner.py
Normal file
@ -0,0 +1,213 @@
|
||||
import requests
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
import psutil
|
||||
import argparse
|
||||
import macros_generator as mg
|
||||
|
||||
|
||||
STARCCM_PATH = '/home/user/Siemens/19.02.009-R8/STAR-CCM+19.02.009-R8/star/bin/starccm+'
|
||||
NUMBER_PROCESSES = 16
|
||||
|
||||
|
||||
def download_file_from_fastapi(api_url, params, full_file_name):
|
||||
response = requests.post(api_url, json=params)
|
||||
|
||||
if response.status_code == 200:
|
||||
with open(full_file_name, "wb") as f:
|
||||
f.write(response.content)
|
||||
print("File downloaded successfully.")
|
||||
else:
|
||||
print(f"Failed to download file. Status code: {response.status_code}")
|
||||
|
||||
|
||||
def terminate_process_by_name(process_name):
|
||||
# Проходим по всем процессам в системе
|
||||
for proc in psutil.process_iter(['pid', 'name']):
|
||||
try:
|
||||
# Если имя процесса совпадает с искомым
|
||||
if proc.info['name'] == process_name:
|
||||
# Завершаем процесс
|
||||
proc.terminate()
|
||||
print(f"Процесс '{process_name}' с PID {proc.pid} был завершен.")
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
|
||||
print(f"Не удалось завершить процесс '{process_name}': {e}")
|
||||
|
||||
|
||||
def create_directory(path):
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
|
||||
def delete_directory(path):
|
||||
if os.path.exists(path):
|
||||
os.remove(path)
|
||||
|
||||
|
||||
def run_macros(macros_name, model_name=None, new_model=False, is_gpgpu=False):
|
||||
|
||||
np_value = '1 -gpgpu auto' if is_gpgpu else str(NUMBER_PROCESSES)
|
||||
|
||||
if new_model:
|
||||
macros_command = f'{STARCCM_PATH} -np {np_value} -new -batch \'{macros_name}\''
|
||||
else:
|
||||
if model_name is None:
|
||||
raise ValueError("model_name must be provided if new_model is False")
|
||||
macros_command = f'{STARCCM_PATH} -np {np_value} \'{model_name}\' -batch \'{macros_name}\''
|
||||
|
||||
subprocess.run(
|
||||
["bash", "-c", macros_command])
|
||||
|
||||
|
||||
def run_experiment(angle):
|
||||
|
||||
chemkin_path = "/media/user/Новый том/burner_automation/burner_data/chemkin"
|
||||
mesh_base_size = 0.7
|
||||
cpu_stopping_criterion = 200
|
||||
stopping_criterion = 7000
|
||||
|
||||
main_path = '/media/user/Новый том/burner_automation/experiment_data'
|
||||
create_directory(main_path)
|
||||
|
||||
diameters = {'d1': 1442, 'd2': 1016, 'd3': 640, 'd4': 325, 'd5': 325, 'd6': 245}
|
||||
|
||||
default_values = {
|
||||
"N1": 24,
|
||||
"L1": 70.0,
|
||||
"a1": 60.0,
|
||||
"N2": 18,
|
||||
"L2": 105.0,
|
||||
"N3": 9,
|
||||
"L3": 30.0
|
||||
}
|
||||
|
||||
# number_outer_blades = [12, 24, 36, 48]
|
||||
#number_outer_blades = 24.0
|
||||
# length_outer_blades = [44, 70, 86, 107.5]
|
||||
#length_outer_blades = 70.0
|
||||
# angle_outer_blades = [30.0, 45.0, 60.0, 75.0]
|
||||
# number_middle_blades = [9, 18, 27, 36]
|
||||
#number_middle_blades = 18.0
|
||||
# load = [190, 260, 315, 400, 465]
|
||||
# load_eco = [260, 315, 400, 465]
|
||||
load = 450
|
||||
# recycling_eco = [0, 7, 14, 21, 28]
|
||||
# recycling = [0, 5, 10, 15, 20, 25, 30]
|
||||
# recycling = [0, 6, 12, 18, 24, 30]
|
||||
recycling = 0
|
||||
|
||||
start_time = time.time()
|
||||
|
||||
directories_list = []
|
||||
|
||||
api_url = "http://10.6.23.120:8000/api/v1/generate_geom"
|
||||
params = {
|
||||
"a1": angle
|
||||
}
|
||||
geometry_path = str(24) + '_' + str(70) + '_' + str(angle) + '_' + str(18)
|
||||
geometry_path_full = os.path.join(main_path, geometry_path, 'geometry')
|
||||
create_directory(geometry_path_full)
|
||||
|
||||
geometry_file_name = os.path.join(geometry_path_full, 'geometry.stp')
|
||||
|
||||
download_file_from_fastapi(api_url, params, geometry_file_name)
|
||||
|
||||
macros_path = os.path.join(main_path, geometry_path, 'general_macros')
|
||||
directories_list.append(macros_path)
|
||||
|
||||
MODEL_PATH = os.path.join(main_path, geometry_path, 'model')
|
||||
directories_list.append(MODEL_PATH)
|
||||
|
||||
model_parameters = {
|
||||
'geometry_path': geometry_file_name,
|
||||
'chemkin_path': chemkin_path,
|
||||
'init_model_folder': MODEL_PATH,
|
||||
'bladeCount': 18,
|
||||
'mesh_base_size': mesh_base_size
|
||||
}
|
||||
|
||||
fuel_parameters = mg.load_calculation(load, diameters)
|
||||
|
||||
recycling_parameters = mg.recycling_calculation(fuel_parameters['alpha'], fuel_parameters['gas_consumption'],
|
||||
fuel_parameters['air_consumption'], recycling)
|
||||
|
||||
experiments_path = os.path.join(main_path, geometry_path, 'experiments')
|
||||
directories_list.append(experiments_path)
|
||||
|
||||
load_path = os.path.join(experiments_path, str(load))
|
||||
directories_list.append(load_path)
|
||||
|
||||
load_macros_experiment_path = os.path.join(load_path, 'macros')
|
||||
directories_list.append(load_macros_experiment_path)
|
||||
|
||||
load_model_experiment_path = os.path.join(load_path, 'model')
|
||||
directories_list.append(load_model_experiment_path)
|
||||
|
||||
recycling_experiment_path = os.path.join(load_path, str(recycling))
|
||||
directories_list.append(recycling_experiment_path)
|
||||
|
||||
recycling_macros_experiment_path = os.path.join(recycling_experiment_path, 'macros')
|
||||
directories_list.append(recycling_macros_experiment_path)
|
||||
|
||||
solver_parameters = {
|
||||
'experiment_path': recycling_experiment_path,
|
||||
'stopping_criterion': stopping_criterion
|
||||
}
|
||||
|
||||
prc_macros_file = os.path.join(macros_path, 'preprocess_macro.java')
|
||||
fuel_macros_file = os.path.join(load_macros_experiment_path, 'fuel_macro.java')
|
||||
rec_macros_file = os.path.join(recycling_macros_experiment_path, 'recycle_macro.java')
|
||||
run_macros_file = os.path.join(recycling_macros_experiment_path, 'run_macros.java')
|
||||
|
||||
for directory in directories_list:
|
||||
create_directory(directory)
|
||||
|
||||
model_file = os.path.join(MODEL_PATH, 'init_model.sim')
|
||||
|
||||
mg.preprocessor_settings(prc_macros_file, model_parameters, model_file)
|
||||
|
||||
load_model_file = os.path.join(load_model_experiment_path, "load_"+str(load)+".sim")
|
||||
|
||||
mg.fuel_settings(fuel_macros_file, fuel_parameters, load_model_file)
|
||||
|
||||
exp_file = os.path.join(recycling_experiment_path, "recycling_"+str(recycling)+".sim")
|
||||
|
||||
mg.fgm_table_settings(rec_macros_file, recycling_parameters, exp_file)
|
||||
mg.setting_and_running_solver(run_macros_file, solver_parameters, exp_file)
|
||||
|
||||
run_macros(prc_macros_file, new_model=True)
|
||||
run_macros(fuel_macros_file, model_file)
|
||||
run_macros(rec_macros_file, load_model_file)
|
||||
run_macros(run_macros_file, exp_file, is_gpgpu=True)
|
||||
_EXP_FILE = exp_file + "~"
|
||||
delete_directory(_EXP_FILE)
|
||||
|
||||
# solver_parameters['stopping_criterion'] = STOPPING_CRITERION
|
||||
# mg.setting_and_running_solver(run_macros_file, solver_parameters, EXP_FILE)
|
||||
# run_macros(run_macros_file, EXP_FILE, is_gpgpu=True)
|
||||
# _EXP_FILE = EXP_FILE + "~"
|
||||
# delete_directory(_EXP_FILE)
|
||||
|
||||
# Конец замера времени
|
||||
end_time = time.time()
|
||||
|
||||
# Вычисление времени выполнения
|
||||
execution_time = end_time - start_time
|
||||
print(f"Execution time: {execution_time}")
|
||||
|
||||
# time.sleep(10)
|
||||
#
|
||||
# processes_name = ["starccm+", "star-ccm+"]
|
||||
#
|
||||
# for process in processes_name:
|
||||
# terminate_process_by_name(process)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Запуск экспериментов с энергетической установкой ГМУ-45")
|
||||
parser.add_argument("angle", type=str, help="Угол наклона лопаток во внешнем контуре")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
run_experiment(args.angle)
|
74
insert_to_db.py
Normal file
74
insert_to_db.py
Normal file
@ -0,0 +1,74 @@
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
from settings import settings
|
||||
|
||||
from clickhouse_tools import ClickHouseClient
|
||||
import utils
|
||||
from postgres_tools import PostgresClient
|
||||
|
||||
# Загрузка конфигурации из файла config.yaml
|
||||
with open('config.yaml', 'r') as config_file:
|
||||
config = yaml.safe_load(config_file)
|
||||
|
||||
MAIN_PATH = config['paths']['main']
|
||||
main_path = Path(MAIN_PATH)
|
||||
|
||||
|
||||
def add_data_to_db(experiment_parameters, load_parameters, recycling_parameters):
|
||||
|
||||
geometry_path = (f"{experiment_parameters['outer_blades_count']}_{experiment_parameters['outer_blades_length']}_"
|
||||
f"{experiment_parameters['outer_blades_angle']}_{experiment_parameters['middle_blades_count']}")
|
||||
experiments_path = main_path / geometry_path / 'experiments'
|
||||
load_path = experiments_path / str(experiment_parameters['load'])
|
||||
load_parameters_path = load_path / 'parameters'
|
||||
recycling_path = load_path / str(experiment_parameters['recycling'])
|
||||
load_parameters_file = load_parameters_path / f"load_{experiment_parameters['load']}_parameters.yaml"
|
||||
plot_csv = recycling_path / 'plot.csv'
|
||||
table_csv = recycling_path / 'data_table.csv'
|
||||
|
||||
file_id = utils.calculate_hash(experiment_parameters)
|
||||
|
||||
clickhouse_client = ClickHouseClient("localhost", 8123, settings.DATABASE, settings.CLICKHOUSE_USER, settings.CLICKHOUSE_PASSWORD)
|
||||
|
||||
# Инициализация базы данных
|
||||
db = PostgresClient(
|
||||
dbname=settings.DATABASE,
|
||||
user=settings.POSTGRES_USER,
|
||||
password=settings.POSTGRES_PASSWORD,
|
||||
host="localhost",
|
||||
port="5432"
|
||||
)
|
||||
|
||||
try:
|
||||
|
||||
if load_parameters_file.exists():
|
||||
with open(load_parameters_file, 'r') as fuel_dict_file:
|
||||
fuel_parameters = yaml.safe_load(fuel_dict_file)
|
||||
load_parameters['primary_air_consumption'] = fuel_parameters['primary_air_consumption']
|
||||
load_parameters['secondary_air_consumption'] = fuel_parameters['secondary_air_consumption']
|
||||
load_parameters['gas_inlet_consumption'] = fuel_parameters['gas_inlet_consumption']
|
||||
|
||||
# Вставка данных в load_parameters и получение id
|
||||
load_id = db.insert_load_parameters(load_parameters)
|
||||
|
||||
# Вставка данных в recycling_parameters и получение id
|
||||
recycling_id = db.insert_recycling_parameters(recycling_parameters, load_id)
|
||||
|
||||
# Вставка данных в experiment_parameters
|
||||
db.insert_experiment_parameters(experiment_parameters, load_id, recycling_id, file_id)
|
||||
|
||||
# Сохранение изменений
|
||||
db.connection.commit()
|
||||
|
||||
db.save_csv_to_postgres(plot_csv, file_id)
|
||||
|
||||
clickhouse_client.save_csv_to_clickhouse(table_csv, file_id)
|
||||
|
||||
print('Загружено: ', experiment_parameters)
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
|
||||
|
1339
macros_generator.py
Normal file
1339
macros_generator.py
Normal file
File diff suppressed because it is too large
Load Diff
108
main.py
Normal file
108
main.py
Normal file
@ -0,0 +1,108 @@
|
||||
import pandas as pd
|
||||
from fastapi import FastAPI, HTTPException, BackgroundTasks
|
||||
from pyDOE3 import pbdesign, lhs
|
||||
|
||||
from db.csv_to_db import csv_to_db
|
||||
from network.routes import (ch_experimentdb_experiment_data_router, experiment_data_router,
|
||||
experiment_parameters_router, experiment_category_router)
|
||||
from network.routes import load_parameters_router, recycling_parameters_router
|
||||
from network.schemas import *
|
||||
from new_experiment_planner import run_experiment
|
||||
from new_experiment_planner_pyDOE3 import scale_design, scale_design_lhs, round_by_index
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.include_router(ch_experimentdb_experiment_data_router.router,
|
||||
prefix="/ch_experimentdb_experiment_data",
|
||||
tags=["ch_experimentdb_experiment_data"])
|
||||
app.include_router(experiment_category_router.router,
|
||||
prefix="/experiment_category",
|
||||
tags=["experiment_category"])
|
||||
app.include_router(experiment_data_router.router,
|
||||
prefix="/experiment_data",
|
||||
tags=["experiment_data"])
|
||||
app.include_router(experiment_parameters_router.router,
|
||||
prefix="/experiment_parameters",
|
||||
tags=["experiment_parameters"])
|
||||
app.include_router(load_parameters_router.router,
|
||||
prefix="/load_parameters",
|
||||
tags=["load_parameters"])
|
||||
app.include_router(recycling_parameters_router.router,
|
||||
prefix="/recycling_parameters",
|
||||
tags=["recycling_parameters"])
|
||||
|
||||
|
||||
# Эндпоинт для запуска эксперимента
|
||||
@app.post("/run_experiment/")
|
||||
def run_experiment_api(params: ExperimentParameters):
|
||||
try:
|
||||
# Вызываем функцию run_experiment с параметрами
|
||||
run_experiment(
|
||||
params.outer_blades_count,
|
||||
params.outer_blades_length,
|
||||
params.outer_blades_angle,
|
||||
params.middle_blades_count,
|
||||
params.load,
|
||||
params.recycling
|
||||
)
|
||||
return {"status": "success", "message": "Experiment started successfully."}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
# эндпоинт инициализации бд из csv файлов
|
||||
@app.get('/init_db_data')
|
||||
async def init_db_data(background_tasks: BackgroundTasks):
|
||||
try:
|
||||
background_tasks.add_task(csv_to_db)
|
||||
return {"status": "success", "message": "Инициализация БД запущена в фоне"}
|
||||
except Exception as e:
|
||||
print(str(e.with_traceback()))
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
# Пример запроса
|
||||
# {
|
||||
# "param_ranges": {
|
||||
# "outer_blades_count": [12, 48],
|
||||
# "outer_blades_length": [44, 107.5],
|
||||
# "outer_blades_angle": [30, 75],
|
||||
# "middle_blades_count": [9, 36],
|
||||
# "load": [315, 465],
|
||||
# "recycling_level": [0, 20],
|
||||
# "oxidizer_temp": [471, 493]
|
||||
# },
|
||||
# "count_exp": 1440,
|
||||
# "round_rules": [0, 1, 1, 0, 1, 1, 1]
|
||||
# }
|
||||
|
||||
@app.post("/pyDOE3_screening_design")
|
||||
def generate_screening_design(request: ExperimentParametersPyDOE3) -> List[Dict[str, float]]:
|
||||
param_ranges = request.param_ranges
|
||||
|
||||
# Создаем screening design и масштабируем его
|
||||
num_factors = len(param_ranges)
|
||||
screening_design = pbdesign(num_factors)
|
||||
scaled_screening_design = scale_design(screening_design, param_ranges)
|
||||
|
||||
# Преобразуем в DataFrame и возвращаем результат
|
||||
df_screening = pd.DataFrame(scaled_screening_design, columns=param_ranges.keys())
|
||||
return df_screening.to_dict(orient="records")
|
||||
|
||||
|
||||
@app.post("/pyDOE3_lhs_design")
|
||||
def generate_lhs_design(request: ExperimentParametersPyDOE3) -> List[Dict[str, float]]:
|
||||
param_ranges = request.param_ranges
|
||||
count_exp = request.count_exp
|
||||
round_rules = request.round_rules
|
||||
|
||||
# Создаем lhs design и масштабируем его
|
||||
num_factors = len(param_ranges)
|
||||
lhs_samples = lhs(num_factors, samples=count_exp)
|
||||
scaled_lhs_samples = scale_design_lhs(lhs_samples, param_ranges)
|
||||
|
||||
# Округляем значения
|
||||
round_scaled_lhs_samples = round_by_index(scaled_lhs_samples, round_rules)
|
||||
|
||||
# Преобразуем в DataFrame и возвращаем результат
|
||||
df_lhs = pd.DataFrame(round_scaled_lhs_samples, columns=param_ranges.keys())
|
||||
return df_lhs.to_dict(orient="records")
|
80
network/routes/ch_experimentdb_experiment_data_router.py
Normal file
80
network/routes/ch_experimentdb_experiment_data_router.py
Normal file
@ -0,0 +1,80 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from db.clickhouse_db_connection import session_clickhouse
|
||||
from db.models import ChExperimentDBExperimentData
|
||||
from db.repositories.ch_experimentdb_experiment_data_repos import ChExperimentDBExperimentDataRepository
|
||||
from network.schemas import ChExperimentDBExperimentDataBody
|
||||
from typing import List
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
repository = ChExperimentDBExperimentDataRepository(session_clickhouse)
|
||||
|
||||
@router.post('/create')
|
||||
async def create_ch_experimentdb_experiment_data(data: ChExperimentDBExperimentDataBody):
|
||||
try:
|
||||
new_record = repository.create(ChExperimentDBExperimentData(
|
||||
volume=data.volume,
|
||||
nitrogen_oxide_emission=data.nitrogen_oxide_emission,
|
||||
temperature=data.temperature,
|
||||
co_fraction=data.co_fraction,
|
||||
co2_fraction=data.co2_fraction,
|
||||
x=data.x,
|
||||
y=data.y,
|
||||
z=data.z,
|
||||
file_id=data.file_id
|
||||
))
|
||||
|
||||
return {"message": "Новая запись успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all', response_model=List[ChExperimentDBExperimentDataBody])
|
||||
async def get_all_ch_experimentdb_experiment_data():
|
||||
try:
|
||||
result = repository.get_all()
|
||||
|
||||
if result:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Нет записей"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_ch_experimentdb_experiment_data_by_id(id: int):
|
||||
try:
|
||||
record = repository.get_by_id(id)
|
||||
if record:
|
||||
return record
|
||||
else:
|
||||
raise HTTPException(status_code=404, detail="Запись не найдена")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/file_id/{file_id}')
|
||||
async def get_ch_experimentdb_experiment_data_by_file_id(file_id: str):
|
||||
try:
|
||||
record = repository.get_by_file_id(file_id)
|
||||
if record:
|
||||
return record
|
||||
else:
|
||||
raise HTTPException(status_code=404, detail="Запись не найдена")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_ch_experimentdb_experiment_data(id: int):
|
||||
try:
|
||||
is_deleted = repository.delete(id)
|
||||
|
||||
if is_deleted:
|
||||
return {"message": "Запись успешно удалена"}
|
||||
else:
|
||||
raise HTTPException(status_code=404, detail="Запись не найдена")
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
59
network/routes/experiment_category_router.py
Normal file
59
network/routes/experiment_category_router.py
Normal file
@ -0,0 +1,59 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from db.crud import *
|
||||
from db.models import ExperimentCategory
|
||||
from network.schemas import ExperimentCategoryBody
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
|
||||
@router.post('/create')
|
||||
async def create_experiment_category(body: ExperimentCategoryBody):
|
||||
try:
|
||||
await create(ExperimentCategory,
|
||||
name=body.name
|
||||
)
|
||||
|
||||
return {"message": "Новая запись <ExperimentCategory> успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all')
|
||||
async def get_all_experiment_category():
|
||||
try:
|
||||
result = await get_all(ExperimentCategory)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Нет записей в <ExperimentCategory>"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_by_id_experiment_category(id: int):
|
||||
try:
|
||||
result = await get_by_id(ExperimentCategory, id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Запись <ExperimentCategory> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_experiment_category(id: int):
|
||||
try:
|
||||
is_deleted = await delete(ExperimentCategory, id)
|
||||
if is_deleted:
|
||||
return {"message": "Запись <ExperimentCategory> успешно удалена"}
|
||||
else:
|
||||
return {"message": "Запись <ExperimentCategory> не найдена"}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
79
network/routes/experiment_data_router.py
Normal file
79
network/routes/experiment_data_router.py
Normal file
@ -0,0 +1,79 @@
|
||||
import math
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
|
||||
from db.crud import *
|
||||
from db.models import ExperimentData
|
||||
from db.repositories import get_exp_data_by_file_id, get_all_exp_data
|
||||
from network.schemas import ExperimentDataBody
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/create')
|
||||
async def create_experiment_data(body: ExperimentDataBody):
|
||||
try:
|
||||
await create(ExperimentData,
|
||||
direction=body.direction,
|
||||
temperature=body.temperature,
|
||||
nox=body.nox,
|
||||
co2=body.co2,
|
||||
co=body.co,
|
||||
file_id=body.file_id
|
||||
)
|
||||
|
||||
return {"message": "Новая запись <ExperimentData> успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all')
|
||||
async def get_all_experiment_data(page: int = Query(ge=1, default=1),
|
||||
size: int = Query(ge = 1, le=100, default=15)):
|
||||
try:
|
||||
result = await get_all_exp_data(page, size)
|
||||
return {
|
||||
"items": result,
|
||||
"page": page,
|
||||
"size": size,
|
||||
}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_by_id_experiment_data(id: int):
|
||||
try:
|
||||
result = await get_by_id(ExperimentData, id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Запись <ExperimentData> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/file_id/{file_id}')
|
||||
async def get_experiment_data_by_file_id(file_id: str):
|
||||
try:
|
||||
result = await get_exp_data_by_file_id(file_id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": f'<ExperimentData> с file_id = {id} - не найдены'}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_experiment_data(id: int):
|
||||
try:
|
||||
is_deleted = await delete(ExperimentData, id)
|
||||
if is_deleted:
|
||||
return {"message": "Запись <ExperimentData> успешно удалена"}
|
||||
else:
|
||||
return {"message": "Запись <ExperimentData> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
90
network/routes/experiment_parameters_router.py
Normal file
90
network/routes/experiment_parameters_router.py
Normal file
@ -0,0 +1,90 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from db.crud import *
|
||||
from db.models import LoadParameters
|
||||
from db.repositories import get_exp_parameters_by_category, get_exp_parameters_by_exp_hash
|
||||
from network.schemas import ExperimentParametersBody
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/create')
|
||||
async def create_experiment_parameters(body: ExperimentParametersBody):
|
||||
try:
|
||||
await create(ExperimentParameters,
|
||||
outer_blades_count=body.outer_blades_count,
|
||||
outer_blades_length=body.outer_blades_length,
|
||||
outer_blades_angle=body.outer_blades_angle,
|
||||
middle_blades_count=body.middle_blades_count,
|
||||
load_id=body.load_id,
|
||||
recycling_id=body.recycling_id,
|
||||
experiment_hash=body.experiment_hash
|
||||
)
|
||||
|
||||
return {"message": "Новая запись <ExperimentParameters> успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all')
|
||||
async def get_all_experiment_parameters():
|
||||
try:
|
||||
result = await get_all(ExperimentParameters)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Нет записей в <ExperimentParameters>"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_by_id_experiment_parameters(id: int):
|
||||
try:
|
||||
result = await get_by_id(ExperimentParameters, id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Запись <ExperimentParameters> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/by_category/{id}')
|
||||
async def get_experiment_parameters_by_exp_category(id: int):
|
||||
try:
|
||||
result = await get_exp_parameters_by_category(id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": f'<ExperimentParameters> с идентификатором категории - {id} - не найдены'}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/by_exp_hash/{hash}')
|
||||
async def get_experiment_parameters_by_exp_category(hash: str):
|
||||
try:
|
||||
result = await get_exp_parameters_by_exp_hash(hash)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": f'<ExperimentParameters> с experiment_hash = {id} - не найдены'}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_experiment_parameters(id: int):
|
||||
try:
|
||||
is_deleted = await delete(LoadParameters, id)
|
||||
if is_deleted:
|
||||
return {"message": "Запись <ExperimentParameters> успешно удалена"}
|
||||
else:
|
||||
return {"message": "Запись <ExperimentParameters> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
60
network/routes/load_parameters_router.py
Normal file
60
network/routes/load_parameters_router.py
Normal file
@ -0,0 +1,60 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from db.crud import *
|
||||
from db.models import LoadParameters
|
||||
from network.schemas import LoadParametersBody
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/create')
|
||||
async def create_load_parameters(body: LoadParametersBody):
|
||||
try:
|
||||
await create(LoadParameters,
|
||||
load=body.load,
|
||||
primary_air_consumption=body.primary_air_consumption,
|
||||
secondary_air_consumption=body.secondary_air_consumption,
|
||||
gas_inlet_consumption=body.gas_inlet_consumption
|
||||
)
|
||||
return {"message": "Новая запись <LoadParameters> успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all')
|
||||
async def get_all_load_parameters():
|
||||
try:
|
||||
result = await get_all(LoadParameters)
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Нет записей в <LoadParameters>"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_by_id_load_parameters(id: int):
|
||||
try:
|
||||
result = await get_by_id(LoadParameters, id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Запись <LoadParameters> не найдена"}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_load_parameters(id: int):
|
||||
try:
|
||||
is_deleted = await delete(LoadParameters, id)
|
||||
if is_deleted:
|
||||
return {"message": "Запись <LoadParameters> успешно удалена"}
|
||||
else:
|
||||
return {"message": "Запись <LoadParameters> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
61
network/routes/recycling_parameters_router.py
Normal file
61
network/routes/recycling_parameters_router.py
Normal file
@ -0,0 +1,61 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
|
||||
from db.crud import *
|
||||
from db.models import RecyclingParameters
|
||||
from network.schemas import RecyclingParametersBody
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/create')
|
||||
async def create_recycling_parameters(body: RecyclingParametersBody):
|
||||
try:
|
||||
await create(RecyclingParameters,
|
||||
load_id=body.load_id,
|
||||
recycling_level=body.recycling_level,
|
||||
co2=body.co2,
|
||||
n2=body.n2,
|
||||
h2o=body.h2o,
|
||||
o2=body.o2
|
||||
)
|
||||
return {"message": "Новая запись <RecyclingParameters> успешно добавлена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/all')
|
||||
async def get_all_recycling_parameters():
|
||||
try:
|
||||
result = await get_all(RecyclingParameters)
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Нет записей в <RecyclingParameters>"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.get('/{id}')
|
||||
async def get_by_id_recycling_parameters(id: int):
|
||||
try:
|
||||
result = await get_by_id(RecyclingParameters, id)
|
||||
|
||||
if result is not None:
|
||||
return result
|
||||
else:
|
||||
return {"message": "Запись <RecyclingParameters> не найдена"}
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||||
|
||||
|
||||
@router.delete('/{id}/delete')
|
||||
async def delete_recycling_parameters(id: int):
|
||||
try:
|
||||
is_deleted = await delete(RecyclingParameters, id)
|
||||
if is_deleted:
|
||||
return {"message": "Запись <RecyclingParameters> успешно удалена"}
|
||||
else:
|
||||
return {"message": "Запись <RecyclingParameters> не найдена"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
73
network/schemas.py
Normal file
73
network/schemas.py
Normal file
@ -0,0 +1,73 @@
|
||||
from typing import Optional, Dict, Tuple, List
|
||||
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
class ExperimentParametersPyDOE3(BaseModel):
|
||||
param_ranges: Dict[str, Tuple[float, float]]
|
||||
count_exp: int
|
||||
round_rules: List[int]
|
||||
|
||||
class ExperimentParameters(BaseModel):
|
||||
outer_blades_count: str
|
||||
outer_blades_length: str
|
||||
outer_blades_angle: str
|
||||
middle_blades_count: str
|
||||
load: str
|
||||
recycling: str
|
||||
|
||||
|
||||
class ChExperimentDBExperimentDataBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
volume: float
|
||||
nitrogen_oxide_emission: float
|
||||
temperature: float
|
||||
co_fraction: float
|
||||
co2_fraction: float
|
||||
x: float
|
||||
y: float
|
||||
z: float
|
||||
file_id: str
|
||||
|
||||
|
||||
class ExperimentCategoryBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
name: str
|
||||
|
||||
|
||||
class ExperimentDataBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
direction: float
|
||||
temperature: float
|
||||
nox: float
|
||||
co2: float
|
||||
co: float
|
||||
file_id: Optional[str]
|
||||
|
||||
|
||||
class ExperimentParametersBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
outer_blades_count: int
|
||||
outer_blades_length: float
|
||||
outer_blades_angle: float
|
||||
middle_blades_count: int
|
||||
load_id: Optional[int]
|
||||
recycling_id: Optional[int]
|
||||
experiment_hash: str
|
||||
|
||||
|
||||
class LoadParametersBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
load: int
|
||||
primary_air_consumption: float
|
||||
secondary_air_consumption: float
|
||||
gas_inlet_consumption: float
|
||||
|
||||
|
||||
class RecyclingParametersBody(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
load_id: Optional[int]
|
||||
recycling_level: int
|
||||
co2: float
|
||||
n2: float
|
||||
h2o: float
|
||||
o2: float
|
231
new_experiment_planner.py
Normal file
231
new_experiment_planner.py
Normal file
@ -0,0 +1,231 @@
|
||||
import requests
|
||||
import subprocess
|
||||
import argparse
|
||||
import yaml
|
||||
import psutil
|
||||
import time
|
||||
|
||||
import macros_generator as mg
|
||||
from settings import settings
|
||||
|
||||
from clickhouse_tools import ClickHouseClient
|
||||
import utils
|
||||
from postgres_tools import PostgresClient
|
||||
|
||||
from pathlib import Path
|
||||
from contextlib import contextmanager
|
||||
|
||||
# Загрузка конфигурации из файла config.yaml
|
||||
with open('config.yaml', 'r') as config_file:
|
||||
config = yaml.safe_load(config_file)
|
||||
|
||||
STARCCM_PATH = config['paths']['starccm']
|
||||
CHEMKIN_PATH = config['paths']['chemkin']
|
||||
MAIN_PATH = config['paths']['main']
|
||||
|
||||
NUMBER_PROCESSES = config['parameters']['number_processes']
|
||||
MESH_BASE_SIZE = config['parameters']['mesh_base_size']
|
||||
STOPPING_CRITERION = config['parameters']['stopping_criterion']
|
||||
DIAMETERS = config['parameters']['diameters']
|
||||
DEFAULT_VALUES = config['parameters']['default_values']
|
||||
|
||||
API_URL = config['api_url']
|
||||
|
||||
|
||||
def download_file_from_fastapi(api_url, params, full_file_name):
|
||||
try:
|
||||
response = requests.post(api_url, json=params)
|
||||
response.raise_for_status()
|
||||
with open(full_file_name, "wb") as f:
|
||||
f.write(response.content)
|
||||
print("File downloaded successfully.")
|
||||
except requests.RequestException as e:
|
||||
print(f"Failed to download file: {e}")
|
||||
|
||||
|
||||
def terminate_process_by_name(process_name):
|
||||
for proc in psutil.process_iter(['pid', 'name']):
|
||||
try:
|
||||
if proc.info['name'] == process_name:
|
||||
proc.terminate()
|
||||
print(f"Process '{process_name}' with PID {proc.pid} was terminated.")
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as e:
|
||||
print(f"Failed to terminate process '{process_name}': {e}")
|
||||
|
||||
|
||||
def create_directory(path):
|
||||
Path(path).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
@contextmanager
|
||||
def remove_file_on_exit(file_path):
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
if file_path.exists():
|
||||
file_path.unlink()
|
||||
|
||||
|
||||
def run_macros(macros_name, model_name=None, new_model=False, is_gpgpu=False):
|
||||
np_value = '1 -gpgpu auto' if is_gpgpu else str(NUMBER_PROCESSES)
|
||||
|
||||
if new_model:
|
||||
macros_command = f'{STARCCM_PATH} -np {np_value} -new -batch \'{macros_name}\''
|
||||
else:
|
||||
if model_name is None:
|
||||
raise ValueError("model_name must be provided if new_model is False")
|
||||
macros_command = f'{STARCCM_PATH} -np {np_value} \'{model_name}\' -batch \'{macros_name}\''
|
||||
|
||||
subprocess.run(["bash", "-c", macros_command], check=True)
|
||||
|
||||
|
||||
def run_experiment(outer_blades_count, outer_blades_length, outer_blades_angle, middle_blades_count, load, recycling):
|
||||
main_path = Path(MAIN_PATH)
|
||||
create_directory(main_path)
|
||||
|
||||
geometry_path = f"{outer_blades_count}_{outer_blades_length}_{outer_blades_angle}_{middle_blades_count}"
|
||||
geometry_path_full = main_path / geometry_path / 'geometry'
|
||||
create_directory(geometry_path_full)
|
||||
|
||||
geometry_file_name = geometry_path_full / 'geometry.stp'
|
||||
|
||||
general_macros_path = main_path / geometry_path / 'general_macros'
|
||||
create_directory(general_macros_path)
|
||||
|
||||
model_path = main_path / geometry_path / 'model'
|
||||
create_directory(model_path)
|
||||
model_file = model_path / 'init_model.sim'
|
||||
|
||||
experiments_path = main_path / geometry_path / 'experiments'
|
||||
load_path = experiments_path / str(load)
|
||||
load_parameters_path = load_path / 'parameters'
|
||||
load_macros_path = load_path / 'macros'
|
||||
load_model_path = load_path / 'model'
|
||||
recycling_path = load_path / str(recycling)
|
||||
recycling_macros_path = recycling_path / 'macros'
|
||||
|
||||
for directory in [experiments_path, load_path, load_parameters_path, load_macros_path, load_model_path,
|
||||
recycling_path, recycling_macros_path]:
|
||||
create_directory(directory)
|
||||
|
||||
load_parameters_file = load_parameters_path / f"load_{load}_parameters.yaml"
|
||||
load_model_file = load_model_path / f"load_{load}.sim"
|
||||
exp_file = recycling_path / f"recycling_{recycling}.sim"
|
||||
|
||||
# Проверка наличия файла init_model.sim
|
||||
if not model_file.exists():
|
||||
download_file_from_fastapi(API_URL, {"N1": outer_blades_count,
|
||||
"L1": outer_blades_length,
|
||||
"a1": outer_blades_angle,
|
||||
"N2": middle_blades_count},
|
||||
geometry_file_name)
|
||||
prc_macros_file = general_macros_path / 'preprocess_macro.java'
|
||||
model_parameters = {
|
||||
'geometry_path': geometry_file_name,
|
||||
'chemkin_path': CHEMKIN_PATH,
|
||||
'init_model_folder': model_path,
|
||||
'bladeCount': middle_blades_count,
|
||||
'mesh_base_size': MESH_BASE_SIZE
|
||||
}
|
||||
mg.preprocessor_settings(prc_macros_file, model_parameters, model_file)
|
||||
run_macros(prc_macros_file, new_model=True)
|
||||
|
||||
if not load_parameters_file.exists():
|
||||
fuel_parameters = mg.load_calculation(float(load), DIAMETERS)
|
||||
with open(load_parameters_file, 'w') as fuel_dict_file:
|
||||
yaml.dump(fuel_parameters, fuel_dict_file, default_flow_style=False, allow_unicode=True)
|
||||
else:
|
||||
with open(load_parameters_file, 'r') as fuel_dict_file:
|
||||
fuel_parameters = yaml.safe_load(fuel_dict_file)
|
||||
|
||||
# Проверка наличия файла load_{load}.sim
|
||||
if not load_model_file.exists():
|
||||
fuel_macros_file = load_macros_path / 'fuel_macro.java'
|
||||
mg.fuel_settings(fuel_macros_file, fuel_parameters, load_model_file)
|
||||
run_macros(fuel_macros_file, model_file)
|
||||
|
||||
# Проверка наличия файла recycling_{recycling}.sim
|
||||
if not exp_file.exists():
|
||||
rec_macros_file = recycling_macros_path / 'recycle_macro.java'
|
||||
run_macros_file = recycling_macros_path / 'run_macros.java'
|
||||
recycling_parameters = mg.recycling_calculation(
|
||||
fuel_parameters['alpha'], fuel_parameters['gas_consumption'], fuel_parameters['air_consumption'],
|
||||
float(recycling))
|
||||
solver_parameters = {
|
||||
'experiment_path': recycling_path,
|
||||
'stopping_criterion': STOPPING_CRITERION
|
||||
}
|
||||
mg.fgm_table_settings(rec_macros_file, recycling_parameters, exp_file)
|
||||
mg.setting_and_running_solver(run_macros_file, solver_parameters, exp_file)
|
||||
run_macros(rec_macros_file, load_model_file)
|
||||
run_macros(run_macros_file, exp_file, is_gpgpu=True)
|
||||
|
||||
experiment_parameters = {
|
||||
'outer_blades_count': int(float(outer_blades_count)),
|
||||
'outer_blades_length': outer_blades_length,
|
||||
'outer_blades_angle': outer_blades_angle,
|
||||
'middle_blades_count': int(float(middle_blades_count)),
|
||||
'load': float(load),
|
||||
'recycling': float(recycling),
|
||||
}
|
||||
|
||||
fields_to_select = ['primary_air_consumption', 'secondary_air_consumption', 'gas_inlet_consumption']
|
||||
|
||||
load_parameters = {key: fuel_parameters[key] for key in fields_to_select}
|
||||
load_parameters['load'] = float(load)
|
||||
|
||||
recycling_parameters['load'] = float(load)
|
||||
recycling_parameters['recycling_level'] = float(recycling)
|
||||
|
||||
plot_csv = recycling_path / 'plot.csv'
|
||||
table_csv = recycling_path / 'data_table.csv'
|
||||
|
||||
clickhouse_client = ClickHouseClient("localhost", 8123, settings.DATABASE, settings.CLICKHOUSE_USER,
|
||||
settings.CLICKHOUSE_PASSWORD)
|
||||
db = PostgresClient(
|
||||
dbname=settings.DATABASE,
|
||||
user=settings.POSTGRES_USER,
|
||||
password=settings.POSTGRES_PASSWORD,
|
||||
host="localhost",
|
||||
port="5432"
|
||||
)
|
||||
|
||||
file_id = utils.calculate_hash(experiment_parameters)
|
||||
|
||||
try:
|
||||
clickhouse_client.save_csv_to_clickhouse(table_csv, file_id)
|
||||
print("Clickhouse saved successfully")
|
||||
|
||||
load_id = db.insert_load_parameters(load_parameters)
|
||||
recycling_id = db.insert_recycling_parameters(recycling_parameters, load_id)
|
||||
db.insert_experiment_parameters(experiment_parameters, load_id, recycling_id, file_id)
|
||||
db.connection.commit()
|
||||
db.save_csv_to_postgres(plot_csv, file_id)
|
||||
print("Postgres saved successfully")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
with remove_file_on_exit(exp_file.with_suffix(".sim~")):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description="Запуск экспериментов с энергетической установкой ГМУ-45")
|
||||
parser.add_argument("outer_blades_count", type=str, help="Количество лопаток во внешнем контуре")
|
||||
parser.add_argument("outer_blades_length", type=str, help="Ширина лопаток во внешнем контуре")
|
||||
parser.add_argument("outer_blades_angle", type=str, help="Угол наклона лопаток во внешнем контуре")
|
||||
parser.add_argument("middle_blades_count", type=str, help="Количество лопаток в среднем контуре")
|
||||
parser.add_argument("load", type=str, help="Паровая нагрузка")
|
||||
parser.add_argument("recycling", type=str, help="Уровень рециркуляции уходящих газов")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
run_experiment(
|
||||
args.outer_blades_count,
|
||||
args.outer_blades_length,
|
||||
args.outer_blades_angle,
|
||||
args.middle_blades_count,
|
||||
args.load,
|
||||
args.recycling
|
||||
)
|
36
new_experiment_planner_pyDOE3.py
Normal file
36
new_experiment_planner_pyDOE3.py
Normal file
@ -0,0 +1,36 @@
|
||||
import numpy as np
|
||||
|
||||
# Функция для масштабирования значений дизайна
|
||||
def scale_design(design, param_ranges):
|
||||
scaled_design = []
|
||||
for row in design:
|
||||
scaled_row = []
|
||||
for i, val in enumerate(row):
|
||||
min_val, max_val = param_ranges[list(param_ranges.keys())[i]]
|
||||
scaled_val = (val + 1) / 2 * (max_val - min_val) + min_val
|
||||
scaled_row.append(scaled_val)
|
||||
scaled_design.append(scaled_row)
|
||||
return np.array(scaled_design)
|
||||
|
||||
|
||||
def scale_design_lhs(design, param_ranges):
|
||||
scaled_design = []
|
||||
for row in design:
|
||||
scaled_row = []
|
||||
for i, val in enumerate(row):
|
||||
min_val, max_val = param_ranges[list(param_ranges.keys())[i]]
|
||||
scaled_val = val * (max_val - min_val) + min_val
|
||||
scaled_row.append(scaled_val)
|
||||
scaled_design.append(scaled_row)
|
||||
return np.array(scaled_design)
|
||||
|
||||
|
||||
# Функция для округления значений
|
||||
def round_by_index(array, rules):
|
||||
rounded_array = np.zeros(array.shape)
|
||||
for i in range(array.shape[0]):
|
||||
for j in range(array.shape[1]):
|
||||
rounded_array[i, j] = round(array[i, j], rules[j])
|
||||
return rounded_array
|
||||
|
||||
|
0
oop_experiment_planner.py
Normal file
0
oop_experiment_planner.py
Normal file
375
postgres_tools.py
Normal file
375
postgres_tools.py
Normal file
@ -0,0 +1,375 @@
|
||||
import psycopg
|
||||
import pandas as pd
|
||||
|
||||
class PostgresClient:
|
||||
def __init__(self, dbname, user, password, host, port):
|
||||
self.connection = psycopg.connect(
|
||||
dbname=dbname,
|
||||
user=user,
|
||||
password=password,
|
||||
host=host,
|
||||
port=port
|
||||
)
|
||||
self.init_db()
|
||||
|
||||
def init_db(self):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("""
|
||||
CREATE TABLE IF NOT EXISTS load_parameters (
|
||||
id SERIAL PRIMARY KEY,
|
||||
load NUMERIC NOT NULL UNIQUE,
|
||||
primary_air_consumption NUMERIC NOT NULL,
|
||||
secondary_air_consumption NUMERIC NOT NULL,
|
||||
gas_inlet_consumption NUMERIC NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS recycling_parameters (
|
||||
id SERIAL PRIMARY KEY,
|
||||
load_id INTEGER NOT NULL,
|
||||
recycling_level NUMERIC NOT NULL,
|
||||
CO2 NUMERIC NOT NULL,
|
||||
N2 NUMERIC NOT NULL,
|
||||
H2O NUMERIC NOT NULL,
|
||||
O2 NUMERIC NOT NULL,
|
||||
UNIQUE(load_id, recycling_level),
|
||||
FOREIGN KEY (load_id) REFERENCES load_parameters(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS experiment_parameters (
|
||||
id SERIAL PRIMARY KEY,
|
||||
outer_blades_count INTEGER NOT NULL,
|
||||
outer_blades_length NUMERIC NOT NULL,
|
||||
outer_blades_angle NUMERIC NOT NULL,
|
||||
middle_blades_count INTEGER NOT NULL,
|
||||
load_id INTEGER NOT NULL,
|
||||
recycling_id INTEGER NOT NULL,
|
||||
experiment_hash CHAR(64) NOT NULL UNIQUE,
|
||||
FOREIGN KEY (load_id) REFERENCES load_parameters(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (recycling_id) REFERENCES recycling_parameters(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS experiment_data (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
Direction DOUBLE PRECISION,
|
||||
Temperature DOUBLE PRECISION,
|
||||
NOx DOUBLE PRECISION,
|
||||
CO2 DOUBLE PRECISION,
|
||||
CO DOUBLE PRECISION,
|
||||
file_id CHAR(64) NOT NULL
|
||||
);
|
||||
""")
|
||||
self.connection.commit()
|
||||
|
||||
def insert_load_parameters(self, load_parameters):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT id FROM load_parameters WHERE load = %s", (load_parameters['load'],))
|
||||
load_id = cur.fetchone()
|
||||
if load_id is None:
|
||||
cur.execute("""
|
||||
INSERT INTO load_parameters (load, primary_air_consumption, secondary_air_consumption, gas_inlet_consumption)
|
||||
VALUES (%s, %s, %s, %s)
|
||||
RETURNING id;
|
||||
""", (load_parameters['load'], load_parameters['primary_air_consumption'],
|
||||
load_parameters['secondary_air_consumption'], load_parameters['gas_inlet_consumption']))
|
||||
load_id = cur.fetchone()[0]
|
||||
else:
|
||||
load_id = load_id[0]
|
||||
self.connection.commit()
|
||||
return load_id
|
||||
|
||||
def insert_recycling_parameters(self, recycling_parameters, load_id):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT id FROM recycling_parameters WHERE load_id = %s AND recycling_level = %s",
|
||||
(load_id, recycling_parameters['recycling_level']))
|
||||
recycling_id = cur.fetchone()
|
||||
if recycling_id is None:
|
||||
cur.execute("""
|
||||
INSERT INTO recycling_parameters (load_id, recycling_level, CO2, N2, H2O, O2)
|
||||
VALUES (%s, %s, %s, %s, %s, %s)
|
||||
RETURNING id;
|
||||
""", (load_id, recycling_parameters['recycling_level'], recycling_parameters['CO2'],
|
||||
recycling_parameters['N2'], recycling_parameters['H2O'], recycling_parameters['O2']))
|
||||
recycling_id = cur.fetchone()[0]
|
||||
else:
|
||||
recycling_id = recycling_id[0]
|
||||
self.connection.commit()
|
||||
return recycling_id
|
||||
|
||||
def insert_experiment_parameters(self, experiment_parameters, load_id, recycling_id, file_id):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT id FROM experiment_parameters WHERE experiment_hash = %s", (file_id,))
|
||||
experiment_id = cur.fetchone()
|
||||
if experiment_id is None:
|
||||
cur.execute("""
|
||||
INSERT INTO experiment_parameters (outer_blades_count, outer_blades_length, outer_blades_angle, middle_blades_count, load_id, recycling_id, experiment_hash)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s);
|
||||
""", (experiment_parameters['outer_blades_count'], experiment_parameters['outer_blades_length'],
|
||||
experiment_parameters['outer_blades_angle'], experiment_parameters['middle_blades_count'], load_id,
|
||||
recycling_id, file_id))
|
||||
self.connection.commit()
|
||||
|
||||
def get_load_parameters(self, load):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT * FROM load_parameters WHERE load = %s", (load,))
|
||||
row = cur.fetchone()
|
||||
if row:
|
||||
return {
|
||||
'load': row[1],
|
||||
'primary_air_consumption': row[2],
|
||||
'secondary_air_consumption': row[3],
|
||||
'gas_inlet_consumption': row[4]
|
||||
}
|
||||
return None
|
||||
|
||||
def get_recycling_parameters(self, load, recycling_level):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("""
|
||||
SELECT rp.* FROM recycling_parameters rp
|
||||
JOIN load_parameters lp ON rp.load_id = lp.id
|
||||
WHERE lp.load = %s AND rp.recycling_level = %s
|
||||
""", (load, recycling_level))
|
||||
row = cur.fetchone()
|
||||
if row:
|
||||
return {
|
||||
'load': load,
|
||||
'recycling_level': row[2],
|
||||
'CO2': row[3],
|
||||
'N2': row[4],
|
||||
'H2O': row[5],
|
||||
'O2': row[6]
|
||||
}
|
||||
return None
|
||||
|
||||
def get_experiment_parameters(self, experiment_hash):
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT * FROM experiment_parameters WHERE experiment_hash = %s", (experiment_hash,))
|
||||
row = cur.fetchone()
|
||||
if row:
|
||||
load_params = self.get_load_parameters(row[5])
|
||||
recycling_params = self.get_recycling_parameters(load_params['load'], row[6])
|
||||
return {
|
||||
'outer_blades_count': row[1],
|
||||
'outer_blades_length': row[2],
|
||||
'outer_blades_angle': row[3],
|
||||
'middle_blades_count': row[4],
|
||||
'load': load_params['load'],
|
||||
'recycling': recycling_params['recycling_level'],
|
||||
'experiment_hash': row[7]
|
||||
}
|
||||
return None
|
||||
|
||||
def get_experiments(self):
|
||||
# query = """
|
||||
# SELECT
|
||||
# ep.experiment_hash AS file_id,
|
||||
# ep.outer_blades_count,
|
||||
# ep.outer_blades_length,
|
||||
# ep.outer_blades_angle,
|
||||
# ep.middle_blades_count,
|
||||
# lp.primary_air_consumption,
|
||||
# lp.secondary_air_consumption,
|
||||
# lp.gas_inlet_consumption,
|
||||
# rp.n2,
|
||||
# rp.o2,
|
||||
# rp.h2o,
|
||||
# rp.co2
|
||||
# FROM
|
||||
# experiment_parameters ep
|
||||
# JOIN
|
||||
# load_parameters lp ON ep.load_id = lp.id
|
||||
# JOIN
|
||||
# recycling_parameters rp ON ep.recycling_id = rp.id
|
||||
# """
|
||||
query = """
|
||||
SELECT
|
||||
ep.experiment_hash AS file_id,
|
||||
ep.outer_blades_count,
|
||||
ep.outer_blades_length,
|
||||
ep.outer_blades_angle,
|
||||
ep.middle_blades_count,
|
||||
lp.load,
|
||||
rp.recycling_level
|
||||
FROM
|
||||
experiment_parameters ep
|
||||
JOIN
|
||||
load_parameters lp ON ep.load_id = lp.id
|
||||
JOIN
|
||||
recycling_parameters rp ON ep.recycling_id = rp.id
|
||||
"""
|
||||
with self.connection.cursor() as cursor:
|
||||
cursor.execute(query)
|
||||
data = cursor.fetchall()
|
||||
columns = [desc[0] for desc in cursor.description]
|
||||
|
||||
df = pd.DataFrame(data, columns=columns)
|
||||
return df
|
||||
|
||||
def save_csv_to_postgres(self, csv_path, file_id):
|
||||
|
||||
try:
|
||||
# Прочитать файл и добавить хэш как новую колонку
|
||||
df = pd.read_csv(csv_path)
|
||||
|
||||
first_col = df.columns[0]
|
||||
df = df[[first_col] + [col for col in df.columns if "Line Section: Direction [-1,0,0] (m)" not in col]]
|
||||
|
||||
# Переименовать колонки
|
||||
rename_dict = {
|
||||
"Line Section: Direction [-1,0,0] (m)": "Direction",
|
||||
"Line Section: Temperature (K)": "Temperature",
|
||||
"Line Section: Mass Fraction of Nitrogen Oxide Emission": "NOx",
|
||||
"Line Section: Mass Fraction of CO2": "CO2",
|
||||
"Line Section: Mass Fraction of CO": "CO"
|
||||
}
|
||||
df.rename(columns=rename_dict, inplace=True)
|
||||
|
||||
df['file_id'] = file_id
|
||||
|
||||
with self.connection.cursor() as cur:
|
||||
cur.execute("SELECT file_id FROM experiment_data WHERE file_id = %s", (file_id,))
|
||||
row = cur.fetchone()
|
||||
if row:
|
||||
cur.execute("DELETE FROM experiment_data WHERE file_id = %s", (file_id,))
|
||||
self.connection.commit()
|
||||
|
||||
# Вставка новых данных из DataFrame в таблицу
|
||||
insert_query = '''
|
||||
INSERT INTO experiment_data (Direction, Temperature, NOx, CO2, CO, file_id)
|
||||
VALUES (%s, %s, %s, %s, %s, %s)
|
||||
'''
|
||||
data_to_insert = df.to_records(index=False).tolist()
|
||||
cur.executemany(insert_query, data_to_insert)
|
||||
self.connection.commit()
|
||||
|
||||
# Закрытие соединения
|
||||
cur.close()
|
||||
|
||||
return "Success"
|
||||
|
||||
except Exception as e:
|
||||
return f"Failed: {str(e)}"
|
||||
|
||||
def get_data(self):
|
||||
query = """
|
||||
WITH max_temp AS (
|
||||
SELECT
|
||||
file_id,
|
||||
temperature AS max_temperature,
|
||||
direction AS direction_for_max_temp,
|
||||
ROW_NUMBER() OVER (PARTITION BY file_id ORDER BY temperature DESC) AS temp_rank
|
||||
FROM
|
||||
experiment_data
|
||||
),
|
||||
max_co2 AS (
|
||||
SELECT
|
||||
file_id,
|
||||
co2 AS max_co2,
|
||||
direction AS direction_for_max_co2,
|
||||
ROW_NUMBER() OVER (PARTITION BY file_id ORDER BY co2 DESC) AS co2_rank
|
||||
FROM
|
||||
experiment_data
|
||||
),
|
||||
max_co AS (
|
||||
SELECT
|
||||
file_id,
|
||||
co AS max_co,
|
||||
direction AS direction_for_max_co,
|
||||
ROW_NUMBER() OVER (PARTITION BY file_id ORDER BY co DESC) AS co_rank
|
||||
FROM
|
||||
experiment_data
|
||||
),
|
||||
max_nox AS (
|
||||
SELECT
|
||||
file_id,
|
||||
nox AS max_nox,
|
||||
direction AS direction_for_max_nox,
|
||||
ROW_NUMBER() OVER (PARTITION BY file_id ORDER BY nox DESC) AS nox_rank
|
||||
FROM
|
||||
experiment_data
|
||||
)
|
||||
SELECT
|
||||
t.file_id,
|
||||
t.direction_for_max_temp,
|
||||
t.max_temperature,
|
||||
cx.direction_for_max_co2,
|
||||
cx.max_co2,
|
||||
c.direction_for_max_co,
|
||||
c.max_co,
|
||||
n.direction_for_max_nox,
|
||||
n.max_nox
|
||||
FROM
|
||||
(SELECT * FROM max_temp WHERE temp_rank = 1) t
|
||||
LEFT JOIN
|
||||
(SELECT * FROM max_nox WHERE nox_rank = 1) n ON t.file_id = n.file_id
|
||||
LEFT JOIN
|
||||
(SELECT * FROM max_co2 WHERE co2_rank = 1) cx ON t.file_id = cx.file_id
|
||||
LEFT JOIN
|
||||
(SELECT * FROM max_co WHERE co_rank = 1) c ON t.file_id = c.file_id;
|
||||
"""
|
||||
with self.connection.cursor() as cursor:
|
||||
cursor.execute(query)
|
||||
data = cursor.fetchall()
|
||||
columns = [desc[0] for desc in cursor.description]
|
||||
|
||||
df = pd.DataFrame(data, columns=columns)
|
||||
return df
|
||||
|
||||
def close(self):
|
||||
self.connection.close()
|
||||
|
||||
|
||||
# Основной скрипт
|
||||
# def main():
|
||||
# # Данные
|
||||
# experiment_parameters = {
|
||||
# 'outer_blades_count': 24,
|
||||
# 'outer_blades_length': 74.0,
|
||||
# 'outer_blades_angle': 65.0,
|
||||
# 'middle_blades_count': 18,
|
||||
# 'load': 315.0,
|
||||
# 'recycling': 8.0,
|
||||
# }
|
||||
#
|
||||
# load_parameters = {
|
||||
# 'load': 315.0,
|
||||
# 'primary_air_consumption': 15.2239,
|
||||
# 'secondary_air_consumption': 63.9876,
|
||||
# 'gas_inlet_consumption': 0.8648
|
||||
# }
|
||||
#
|
||||
# recycling_parameters = {
|
||||
# 'load': 315.0,
|
||||
# 'recycling_level': 8.0,
|
||||
# 'CO2': 0.04,
|
||||
# 'N2': 0.70,
|
||||
# 'H2O': 0.06,
|
||||
# 'O2': 0.20
|
||||
# }
|
||||
#
|
||||
# # Инициализация базы данных
|
||||
# db = PostgresClient(
|
||||
# dbname="your_db_name",
|
||||
# user="your_db_user",
|
||||
# password="your_db_password",
|
||||
# host="your_db_host",
|
||||
# port="your_db_port"
|
||||
# )
|
||||
#
|
||||
# try:
|
||||
#
|
||||
# # Извлечение и печать данных
|
||||
# retrieved_experiment = db.get_experiment_parameters(experiment_parameters['experiment_hash'])
|
||||
# print("Retrieved experiment parameters:", retrieved_experiment)
|
||||
#
|
||||
# retrieved_load = db.get_load_parameters(load_parameters['load'])
|
||||
# print("Retrieved load parameters:", retrieved_load)
|
||||
#
|
||||
# retrieved_recycling = db.get_recycling_parameters(recycling_parameters['load'],
|
||||
# recycling_parameters['recycling_level'])
|
||||
# print("Retrieved recycling parameters:", retrieved_recycling)
|
||||
# finally:
|
||||
# db.close()
|
||||
#
|
||||
#
|
||||
# if __name__ == "__main__":
|
||||
# main()
|
BIN
requirements.txt
Normal file
BIN
requirements.txt
Normal file
Binary file not shown.
56
runner.py
Normal file
56
runner.py
Normal file
@ -0,0 +1,56 @@
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
|
||||
def run_script():
|
||||
|
||||
# outer_blades_count = [12.0, 24.0, 36.0, 48.0]
|
||||
# outer_blades_count = [24.0, 36.0]
|
||||
outer_blades_count = [24.0]
|
||||
# outer_blades_length = [44.0, 86.0, 107.5]
|
||||
outer_blades_length = [70.0]
|
||||
# outer_blades_angle = [30.0, 45.0, 60.0, 75.0]
|
||||
outer_blades_angle = [45.0, 60.0]
|
||||
middle_blades_count = [9.0, 27.0, 36.0]
|
||||
# middle_blades_count = 18.0
|
||||
# load = [190, 260, 315, 400, 465]
|
||||
load = [315, 400, 465]
|
||||
# load_eco = [260, 315, 400, 465]
|
||||
# load = [190, 260, 465]
|
||||
# recycling_eco = [0, 7, 14, 21, 28]
|
||||
# recycling_full = [0, 5, 8, 10, 15, 20, 25, 30]
|
||||
recycling_full = [0, 5, 10, 20]
|
||||
# recycling = [0, 6, 12, 18, 24, 30]
|
||||
# recycling = [0, 5, 8]
|
||||
|
||||
for middle_count in middle_blades_count:
|
||||
for length in outer_blades_length:
|
||||
for outer_blade in outer_blades_count:
|
||||
for angle in outer_blades_angle:
|
||||
for current_load in load:
|
||||
for current_recycling in recycling_full:
|
||||
|
||||
# Начало замера времени
|
||||
start_time = time.time()
|
||||
|
||||
result = subprocess.run(['python', 'new_experiment_planner.py', str(outer_blade),
|
||||
str(length), str(angle), str(middle_count),
|
||||
str(current_load), str(current_recycling)], capture_output=True, text=True)
|
||||
|
||||
# Конец замера времени
|
||||
end_time = time.time()
|
||||
|
||||
# Вычисление времени выполнения
|
||||
execution_time = end_time - start_time
|
||||
|
||||
print("Output of the script:")
|
||||
print(result.stdout)
|
||||
|
||||
print("Errors (if any):")
|
||||
print(result.stderr)
|
||||
|
||||
print("Execution time:", execution_time)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_script()
|
58
runner_db.py
Normal file
58
runner_db.py
Normal file
@ -0,0 +1,58 @@
|
||||
from insert_to_db import add_data_to_db
|
||||
import macros_generator as mg
|
||||
import yaml
|
||||
|
||||
|
||||
# Загрузка конфигурации из файла config.yaml
|
||||
with open('config.yaml', 'r') as config_file:
|
||||
config = yaml.safe_load(config_file)
|
||||
DIAMETERS = config['parameters']['diameters']
|
||||
|
||||
# outer_blades_count = [12, 24, 36, 48]
|
||||
outer_blades_count = 24.0
|
||||
# outer_blades_length = [44, 70, 86, 107.5]
|
||||
outer_blades_length = 70.0
|
||||
outer_blades_angle = [30.0, 45.0, 60.0, 75.0]
|
||||
# middle_blades_count = [9, 18, 27, 36]
|
||||
middle_blades_count = 18.0
|
||||
# load = [190, 260, 315, 400, 465]
|
||||
# load_eco = [260, 315, 400, 465]
|
||||
load = [190, 260, 315, 400, 465]
|
||||
# recycling_eco = [0, 7, 14, 21, 28]
|
||||
recycling_full = [0, 5, 8, 10, 15, 20, 25, 30]
|
||||
# recycling = [0, 6, 12, 18, 24, 30]
|
||||
# recycling = [0, 5, 8]
|
||||
for angle in outer_blades_angle:
|
||||
for current_load in load:
|
||||
for current_recycling in recycling_full:
|
||||
|
||||
experiment_parameters = {
|
||||
'outer_blades_count': outer_blades_count,
|
||||
'outer_blades_length': outer_blades_length,
|
||||
'outer_blades_angle': angle,
|
||||
'middle_blades_count': middle_blades_count,
|
||||
'load': current_load,
|
||||
'recycling': current_recycling,
|
||||
}
|
||||
|
||||
_cur_diameters = DIAMETERS.copy()
|
||||
|
||||
fuel_parameters = mg.load_calculation(float(current_load), _cur_diameters)
|
||||
|
||||
load_parameters = {
|
||||
'load': current_load,
|
||||
'primary_air_consumption': fuel_parameters['primary_air_consumption'],
|
||||
'secondary_air_consumption': fuel_parameters['secondary_air_consumption'],
|
||||
'gas_inlet_consumption': fuel_parameters['gas_inlet_consumption']
|
||||
}
|
||||
|
||||
recycling_parameters = mg.recycling_calculation(
|
||||
fuel_parameters['alpha'], fuel_parameters['gas_consumption'], fuel_parameters['air_consumption'],
|
||||
float(current_recycling))
|
||||
|
||||
recycling_parameters['load'] = float(current_load)
|
||||
recycling_parameters['recycling_level'] = float(current_recycling)
|
||||
|
||||
add_data_to_db(experiment_parameters, load_parameters, recycling_parameters)
|
||||
|
||||
|
31
settings.py
Normal file
31
settings.py
Normal file
@ -0,0 +1,31 @@
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
class Settings(BaseSettings):
|
||||
DB_USER: str
|
||||
DB_PASSWORD: str
|
||||
DB_HOST: str
|
||||
DB_PORT: int
|
||||
DB_NAME: str
|
||||
DATABASE: str
|
||||
POSTGRES_USER: str
|
||||
POSTGRES_PASSWORD: str
|
||||
CLICKHOUSE_USER: str
|
||||
CLICKHOUSE_PASSWORD: str
|
||||
|
||||
@property
|
||||
def db_url_asyncpg(self):
|
||||
# 'postgresql+asyncpg://username:password@localhost:5432/database_name'
|
||||
return f'postgresql+asyncpg://{self.DB_USER}:{self.DB_PASSWORD}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}'
|
||||
|
||||
@property
|
||||
def db_url_asyncpg_docker(self):
|
||||
# 'postgresql+asyncpg://username:password@localhost:5432/database_name'
|
||||
return f'postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@db:{self.DB_PORT}/{self.DATABASE}'
|
||||
|
||||
@property
|
||||
def clickhouse_url(self):
|
||||
return f'clickhouse://{self.CLICKHOUSE_USER}:{self.CLICKHOUSE_PASSWORD}@clickhouse:8123/{self.DATABASE}'
|
||||
|
||||
model_config = SettingsConfigDict(env_file=".env")
|
||||
|
||||
settings = Settings()
|
33
test_db.py
Normal file
33
test_db.py
Normal file
@ -0,0 +1,33 @@
|
||||
from clickhouse_tools import ClickHouseClient
|
||||
from settings import settings
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
import utils
|
||||
|
||||
experiment_parameters = {
|
||||
'outer_blades_count': 24.0,
|
||||
'outer_blades_length': 70.0,
|
||||
'outer_blades_angle': 60.0,
|
||||
'middle_blades_count': 18.0,
|
||||
'load': 400,
|
||||
'recycling': 15,
|
||||
}
|
||||
|
||||
with open('config.yaml', 'r') as config_file:
|
||||
config = yaml.safe_load(config_file)
|
||||
|
||||
MAIN_PATH = config['paths']['main']
|
||||
main_path = Path(MAIN_PATH)
|
||||
|
||||
geometry_path = (f"{experiment_parameters['outer_blades_count']}_{experiment_parameters['outer_blades_length']}_"
|
||||
f"{experiment_parameters['outer_blades_angle']}_{experiment_parameters['middle_blades_count']}")
|
||||
experiments_path = main_path / geometry_path / 'experiments'
|
||||
load_path = experiments_path / str(experiment_parameters['load'])
|
||||
recycling_path = load_path / str(experiment_parameters['recycling'])
|
||||
table_csv = recycling_path / 'data_table.csv'
|
||||
|
||||
file_id = utils.calculate_hash(experiment_parameters)
|
||||
|
||||
clickhouse_client = ClickHouseClient("localhost", 8123, 'SuperService', 'UserMyHouse',
|
||||
'NotWarningWord2')
|
||||
clickhouse_client.save_csv_to_clickhouse(table_csv, file_id)
|
Loading…
Reference in New Issue
Block a user