Skip to content
Snippets Groups Projects
Commit edb2beed authored by Pintér Gergő's avatar Pintér Gergő
Browse files

first commit - committing all file to repository

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 830 additions and 0 deletions
File added
File added
File added
File added
import pandas as pd
import constants as c
import sleep_stage_classifer as s
def check_pip(tester_list):
last_probas = [{k: v for k, v in elem.items() if k != 'Stage'} for elem in tester_list[-c.CHECK_LEN:]]
conditions_met_count = sum((elem['N2'] + elem['N3'] > 0.85) and (elem['N3'] <= 0.5) for elem in last_probas)
if len(last_probas) < c.CHECK_LEN:
return False
return conditions_met_count >= c.CHECK_LEN-1 #egy híján mindre igaz
#data/device managing
SAMPLING_FREQ = 250 #mintavételi freq, ez stabil, írja, ha megváltozik, nem változtatni
SIGNAL_TIME = 350 #ha időre fut a kód, akkor a start signal után az input() helyére sleep(...)
RESIST_TIME = 5
EPOCH_LEN = 30 #30 s-nyi epochokkal dolgozik
YASA_INPUT_LEN = 2*60*7 #percben (az epoch 30 s)
#EEG metadata values
MALE = True
AGE = 22
#file managing
FILE_IDENTIFIER = "full_night_full_time"
FILE_FOLDER_NAME = "C:\Programkornyezet\PythonProjects\AudiostimulationProject\AudiostimulationDirectory\output_files"
SHOW_FEEDBACK = True
#audiofeedback decision
CHECK_LEN = 3
"""
BrainBit eszköz kezelése, adatok fogadása,
kommunikáció az eszközzel.
Ezt futtatni!
Az on_signal_recieved-ből lehet kinyerni a beérkező adatot. Specifikációja a leírásában.
"""
from neurosdk.scanner import Scanner
from neurosdk.cmn_types import *
import concurrent.futures
from time import sleep
import constants as c
import sleep_stage_classifer as s
import file_manager as f
def sensor_found(scanner, sensors):
"""
Kiíratja az összes hatókörön belüli szenzort
"""
for index in range(len(sensors)):
print('Sensor found: %s' % sensors[index])
def on_sensor_state_changed(sensor, state):
"""
Ha a szenzor állapota megváltozik (pl.: disconnect) kiírja
"""
print('Sensor {0} is {1}'.format(sensor.name, state))
def on_battery_changed(sensor, battery):
"""
Amikor a szenzor töltöttségi állapota megváltozik kiírja az értékét
"""
print('Battery: {0}'.format(battery))
def on_signal_received(sensor, data):
"""
Ha beérkezik jel a szenzorból, továbbadja
és elindítja a feldolgozást.\n
A sleep_stage_classifiernek adjuk itt át a 'data' beérkező adatot.\n
Fontos! az adatok páronként érkeznek, de minden elem megfelel egy mérésnek.
A PackNum, ami meghatározza melyik adat érkezett, kettőnél megegyezik (250 Hz-en biztosan),
egy lista két eleme, ilyen listákból áll a 'data'. Pl.: 2 s alatt 250 Hz-en 250 PackNum-nyi adat érkezik,
de ez 500 mintát jelent, a frekvencia rendben van tehát. Ezeket később választjuk szét.
"""
s.epoch_maker(data)
def on_resist_received(sensor, data):
"""
Ha ellenállást mérünk, amikor új adat érkezikkiírja Ohm-ban az egyes elektródák értékeit.
"""
print(data)
try:
"""
Irányítja a kezelést
- Inicializálja a szenzort, és 5 s-ig keresi a hatókörben. A scanner csak eddig fut. (Elég)
- Kiír minden információt, és létrehoz egy sensor-t, inicializálja a fenti függvényeket.
- Kiírja az alap adatokat, a sorozatszámot és frekvenciát a biztonság kedvéért
- Futtat egy constants-ban meghatározott idejű ellenállásmérést, kiírja (Vált. lehet)
- Futtatja az adatgyűjtést addig, amég input nem jön(felébredtünk) (enter), akkor leállítja
- Ekkor futtatja a fájlbamentést, ami egy globális változóból ment, csv fájlba. (file_manager)
- Ezt a globális listát biztonsági okokból töröljük
- Lecsatlakozik és eltávolítja a szenzort
"""
scanner = Scanner([SensorFamily.LEBrainBit, SensorFamily.LEBrainBitBlack])
scanner.sensorsChanged = sensor_found
scanner.start()
print("Starting search for 5 sec...")
sleep(5)
scanner.stop()
sensorsInfo = scanner.sensors()
for i in range(len(sensorsInfo)):
current_sensor_info = sensorsInfo[i]
print(sensorsInfo[i])
def device_connection(sensor_info):
return scanner.create_sensor(sensor_info)
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(device_connection, current_sensor_info)
sensor = future.result()
print("Device connected")
sensor.sensorStateChanged = on_sensor_state_changed
sensor.batteryChanged = on_battery_changed
sensFamily = sensor.sens_family
sensorState = sensor.state
if sensorState == SensorState.StateInRange:
print("connected")
else:
print("Disconnected")
print("sensor serial number:", sensor.serial_number) #az eszköz beazonosítása
if sensor.is_supported_parameter(SensorParameter.SamplingFrequency):
if sensor.sampling_frequency == sensor.sampling_frequency.FrequencyHz250:
print("sampling frequency:", 250, "Hz")
else:
print("sampling frequency changed:", sensor.sampling_frequency)
if sensor.is_supported_feature(SensorFeature.Resist):
sensor.resistDataReceived = on_resist_received
if sensor.is_supported_feature(SensorFeature.Signal):
sensor.signalDataReceived = on_signal_received
if sensor.is_supported_command(SensorCommand.StartResist):
sensor.exec_command(SensorCommand.StartResist)
print("Start resist")
sleep(c.RESIST_TIME)
sensor.exec_command(SensorCommand.StopResist)
print("Stop resist")
if sensor.is_supported_command(SensorCommand.StartSignal):
sensor.exec_command(SensorCommand.StartSignal)
print("Start signal")
input()
sensor.exec_command(SensorCommand.StopSignal)
print("Stop signal")
f.sleep_stage_file_maker() #stop signal után menti el fájlba az eredményt
s.yasa_output_list.clear() #biztonság kedvéért törli a nagy listát
sensor.disconnect()
print("Disconnect from sensor")
del sensor
del scanner
print('Remove scanner')
except Exception as err:
print(err)
"""
Az egész mérés adataiból csv fájl írása, a fájlok vizualizálása,
feldolgozása
Feldolgozáshoz beírni az analyze_file()-ba a fájl abszolút elérési útvonalát és ezt futtatni.
"""
import os
import datetime
import constants as c
import sleep_stage_classifer as s
import audio_feedback as a
import pandas as pd
import matplotlib.pyplot as plt
import yasa
def sleep_stage_file_maker():
"""
Létrehoz egy csv. fájlt az mérés során felvett összes
adatból
A névkonvenció: hóvap_nap_file_identifier. Az atuális hónap nap, a file_identifiert pedig a
constants-ban lehet beállítani. (pl.:full_night, vagy test)
A mentés helye az output_files (C:\Programkornyezet\PythonProjects\AudiostimulationProject\AudiostimulationDirectory\output_files)
DataFrame-ből csv írása, mentődnek a:
prediktált alvási fázisok
és az egyes alvási fázisok valószínűségei minden 30s epochra.
Pl egy sor: W, 0.22, 0.4, 0.28, 0.01, 0.99 (5 fázis: N1, N2, N3, R, W)
"""
current_date = datetime.datetime.now().strftime("%m_%d")
file_name = f"{current_date}_{c.FILE_IDENTIFIER}.csv" # A fájl neve most tartalmazza a dátumot
file_path = os.path.join(c.FILE_FOLDER_NAME, file_name) # Célmappa megadása
yasa_output_df = pd.DataFrame(s.yasa_output_list)
yasa_output_df.to_csv(file_path, index=False)
def analyze_file(csv_file_path):
"""
Fájl feldolgozása, statisztika, valószínűségi plot,
hisztogram.
- A csv.-t feldolgozzuk, külön DataFrame-be kerülnek a betűvel jelzett 'Stage'-k és az 5 oszlopnyi 'Probability'.
- Ábrázoljuk egy 'yasa' parancssor alapján a hisztogramot. Méretét az adatok mennyisége határozza meg.
- Ábrázoljuk 'matplotlib'-bel a valószínűségeket (ahogy a 'yasa'-ban is, de az fájlból nem működik). Méretét az
adatmennyiség határozza meg.
- Ábrázoljuk az összes szükséges értéket és kimutatást 'yasa' függvény segítségével.
:param csv_file_path: output_list-be mentett .csv fájlok abszolút elérési útvonala
"""
df = pd.read_csv(csv_file_path)
stages = df['Stage']
probabilities = df.iloc[:, 1:] # Az első oszlop a 'Stages', a többi a valószínűsége
stages_int = yasa.hypno_str_to_int(stages)
if c.SHOW_FEEDBACK:
dict_list = df.to_dict(orient='records')
pip_results = [a.check_pip(dict_list[:i + 1]) for i in range(len(dict_list))]
# Hipnogram ábrázolása
plt.figure(figsize=(int(len(stages)/40), 5))
hypn = yasa.Hypnogram(stages, freq="30s")
hypn.plot_hypnogram(lw=2, fill_color="whitesmoke")
plt.show()
# Valószínűségplot ábrázolása
colors = ["#99d7f1", "#009DDC", "xkcd:twilight blue", "xkcd:rich purple", "xkcd:sunflower"]
ax = probabilities.plot(kind='area', figsize=(int(len(probabilities)/6), 5), stacked=True, color=colors, alpha=0.8, linewidth=0)
ax.set_xlabel('Time (30-sec epoch)')
ax.set_ylabel('Probability')
ax.legend(frameon=False, bbox_to_anchor=(1, 1))
if c.SHOW_FEEDBACK:
for i, result in enumerate(pip_results):
if result: # Ha True, akkor kiemeljük az adott szakaszt
ax.axvspan(i, i + 1, color='yellow', alpha=0.5) # Kiemelés sárga színnel
plt.show()
print((sum(pip_results)/2), "percnyi ingerlés volt összesen")
# Alvási statisztikák kiíratása táblázatban
statistics = yasa.sleep_statistics(stages_int, sf_hyp=1/30)
stat_df = pd.DataFrame(list(statistics.items()), columns=['Parameter', 'Value'])
plt.figure(figsize=(4, 6))
plt.title('Sleep Statistics')
plt.axis('off')
plt.table(cellText=stat_df.values, colLabels=stat_df.columns, loc='center', cellLoc='center', colColours=['lightgray'] * 2)
plt.tight_layout()
plt.show()
#A függvény használata (r-el kezdődjön), csak akkor kikommentelni, ha ezt akarjuk!:
analyze_file(r'C:\Programkornyezet\PythonProjects\AudiostimulationProject\AudiostimulationDirectory\output_files\02_14_full_night_full_time.csv')
Megjegyzsek: Valami komment
Megjegyzsek:
Alvs hossza: 300 msodperc
Alvsstdiumok:
WWWWWWWWN3N3
\ No newline at end of file
Megjegyzsek:
Alvs hossza: 27600 msodperc
Alvsstdiumok:
WWWN1WWWRN1N1N1WRRWWWWWWWWWWWRWWRRWWN1N1N2N2N2N2N2N2WWRRN2N1N1N2N2N2WWWN2N1N2N2N2N2N2WWWN2N2N2N2N2N2N3N2N2N2N2N2N2N2N2N3N3N2N2N2N2N2N2N2WN2N2WN3N2WN2N2N2N2N2N3N1N2N2N2N2N2N2N3N3WN1N3N2N2N2N2N2RRN2WN2N2N2N2N2N3N3N3N3N3WN2N2N2N2N2N3N2N3N3N2N2N2N2N2N2N2RRN1N2N2N2N2N2N3RRRWWWN1N2N1N2N2N1N3WN2N2N2N2N2N2N2N2N2N1N2N2N2N2N1WN1N1WWWN2N2N2N1N1N1WN1WRWN2N1N1N1N1N2WN2RRRN2N1N2WWWWN2N1N2N2N2N1RRRWN2N2N2N2N2N3N2N2WWWRN2N2N2N2N3N1N2WWRN2N2N2N2N3N3N2N3N3N2N2N2N2N2N2RRWN3N1N1N2N2N3N3N3N2WWN2N2N2N2N2N3WWWN3N3N3N2N2N2N2N2WWWN2N2N2N1N2N3N3N3WN1N2N2N3N1RRRN1N3N2N2N2N2N2WN3RWRN1N1N2N2N2N2N2N2N2N3N3N3N2N2N2N2N1N1RWRRN2N2N2N2N2N2N3N2N3N1N2N2N2N2N2N1WN3N2N2N2N2N2RWWRWN2N2N2N2N2WN2N2RRN1N1N1N2N2N1WWWWWN1N1N2N2N2N2N2WWWN1RN1N2N2N1N2N2WN1N2N2N1N1N1RN1WWN2N2WN1N1RN2N2N2WN2N1N2N1N1RRN1N1WWN1N1N1N1N2N1N1N1RRRRN2N2N2N2N2N2WWN2N2N2N2N2N2WWWN1RN2N2N2N2N2WN2WN2N2N2N1N2N2N2N2RWN2N2N2N2WN2N2N2N2RWRRN2N2N2N2N2WN2N2N2RN2RN2N2N1WWWN1N2N2N2N2N2N2N2WN1N2N2N2N2N2N2N2N2WN2N2N2N2N2N2N2N2N2N1N1N1N2N2N2N2N2N2WWN2N2N2N2N2N2N2N2N2N1N1N2N2RN2N2WN2N2N2WWWN2N1WRRWN1N1WN1N1N1N2RWWWN1N1N1N1RRRN1RWWWN2N1RN1N1N1RN2WRRN1N1N1N2WWWWN2N1N2N2N1RRRWWN2N2N2RRN1WRWN1N1N1N2WRRWN1WWN1N1N1N2RRRRWRN2N2N1N2N1N1N2N2N2N2N2N2N2N2N2N2N2N2N2N2WN2N2WN2N2WN2WWN2N2N2N2N2N2N2N2WWN1N2N2N2N2N3N2N2N3N2N2N2N2N2N2N2N2N2N1WRRN2N2N1N2N2N2WN2N3N2N2N2N2N2N2WWN2N2N2RN2N2N2RWWN2N2N2N2RN1N1N1RN2N2N1N2N1N1RRN1RRWN1N1N1N1WN1WWWWRRRWN1N1N1N2WN1WN1N1N1N1N1N1WWN2N1N1N2RN1N1RRWN2N2N1N1RRRRRN1N2N1N2N2RRRN1WWWWRRRN2N2N2N2N2N2N1N2N2N2N2N2N2RWWN2N2N2N2N2N2N2N2WWWN2N1N2N2N2N2N2RRRN2N2N2N2N2N1WN2N2RRN2N2N2N2N2RN2N2N2N2N2N2N2N2N2N2
\ No newline at end of file
,Stages,Wake,N1,N2,N3,REM
Stage,N1,N2,N3,R,W
W,0.002025900648336483,0.009979557415976325,0.01171355587644056,2.224687916083924e-05,0.9762587391800857
W,2.90158196275357e-09,0.024423642771819798,0.10950051368826261,0.0001899210398244758,0.8658859195985111
N3,0.022629665001471472,0.0818853683578004,0.7496875233967508,0.00022653612552841834,0.14557090711844894
W,0.008276845851208843,0.11888112668369767,0.02332754183335283,0.0005157720289213804,0.8489987136028192
W,0.03565482372045853,0.2597570083894267,0.07319620642229158,0.04324808554239315,0.5881438759254299
W,0.009909968480305929,0.0634486010217303,0.06080684116391874,0.005219620796238941,0.8606149685378061
W,0.1325512293352536,0.17271264929839975,0.01325466198179207,0.026014960183161302,0.6554664992013932
W,0.0452223865262344,0.02315421216180819,0.0029222264245234767,0.03318452375773362,0.8955166511297002
W,0.07035429645396082,0.039163804415101915,0.0069106393995640725,0.06928877013710229,0.8142824895942709
W,0.05706552239486159,0.019662641664345212,0.015049185872325205,0.13045439865920944,0.7777682514092585
W,0.022214476601400485,0.010829513694268671,0.002176552723987714,0.024006585761255025,0.940772871219088
W,0.013626923605200866,0.018888202378959884,0.048230677270222136,0.1045728586331831,0.814681338112434
W,0.030042626901077986,0.023422322997999893,0.003766560318475127,0.19041392351710382,0.7523545662653432
W,0.12420056125338974,0.07242519839480432,0.01027438412066539,0.1971833879198383,0.5959164683113022
W,0.07362903273024068,0.14334823383055598,0.005939035893297939,0.14178703983673788,0.6352966577091675
W,0.040093618528286634,0.25681086985324986,0.003851931858316699,0.0880761513234036,0.6111674284367432
W,0.013322951984131488,0.09576162884364431,0.025098390989393322,0.015532215536175682,0.8502848126466552
W,0.04865500127878461,0.060733899410997126,0.0028260428289169615,0.03171378252458794,0.8560712739567135
W,0.07563164640230227,0.057876159266785715,0.002413070899277222,0.015361138304666629,0.8487179851269682
W,0.06172424360603551,0.12759625351251108,0.003352094489946202,0.014816265336526399,0.7925111430549808
N2,0.12942806582614869,0.42989853281764756,0.002959224517117996,0.05415795739799791,0.3835562194410879
W,0.015249566165468955,0.31457743399852633,0.03541343141594838,0.05507987518633362,0.5796796932337226
W,0.00043362124545577363,0.021987195363591058,0.05869162653674065,0.44459286984228114,0.47429468701193145
W,3.720779500613049e-10,0.02967606716796003,0.009012937072576058,0.22938968609833404,0.731921309289052
W,0.0024112053714663057,0.04657764663995931,0.017850162600028613,0.3623411354846584,0.5708198499038873
W,0.020026101916746503,0.1461429391443934,0.005885004950519741,0.3217309447498832,0.5062150092384571
N2,0.028595156159133474,0.39403794494200395,0.016274804968531197,0.32235105537924763,0.23874103855108372
N2,0.018132742009970643,0.7587611755093091,0.03133407623450841,0.06057257306697668,0.13119943317923508
W,5.947481702839215e-07,0.326557845075159,0.10543430949916606,0.09586988231098459,0.47213736836652015
W,0.04340181479816643,0.33593855131310785,0.009485715391254495,0.2604771312185694,0.35069678727890197
This diff is collapsed.
Stage,N1,N2,N3,R,W
W,0.0008895853014080202,0.0022713948453392005,0.00034338871852268213,4.167058199082962e-05,0.9964539605527394
W,0.05509204365403952,0.15931451506262417,0.026786944292761315,0.00047481625235089157,0.7583316807382241
W,0.06771030655650585,0.19492434226657993,0.043607584728122095,0.0010693858259889898,0.6926883806228032
W,0.044448641191602314,0.17029671180553144,0.020858943797353348,0.003043816877363092,0.7613518863281498
W,0.0874437311371782,0.23925601072631272,0.10941383766002957,0.0052147036136014095,0.5586717168628782
N2,0.06625930738082794,0.48555234087904203,0.04131852858985634,0.034431256143415585,0.372438567006858
W,0.047914516428623856,0.24173388442174745,0.003589538249468626,0.14388643412602029,0.5628756267741398
W,0.015221256711729313,0.0878632771963969,0.03151975531016059,0.06835409907802316,0.79704161170369
W,0.026073048014952815,0.010377252801707761,0.009372008089323331,0.09737997987433784,0.8567977112196783
W,0.012087436773320881,0.006359162309277259,0.0018551938054154446,0.049625365767893906,0.9300728413440925
W,0.028155749403293916,0.014314318390862137,0.0015639166322385233,0.0667597967694567,0.8892062188041487
W,0.01823885765611203,0.02946036786354922,0.0021686052582777127,0.05245962523321586,0.8976725439888451
W,0.015763588683894977,0.0048353015858062145,0.0004330374052047901,0.10351737249929398,0.8754506998258
W,0.009245345979069064,0.09168104361353097,0.029100192663368017,0.12784078496983858,0.7421326327741934
W,0.013094976615717818,0.02332634743559203,0.0007856112180404759,0.05383291151421418,0.9089601532164354
W,0.043067734006227584,0.02655953457501415,0.0012783601644698677,0.1465189134694068,0.7825754577848816
W,0.04738541541575175,0.10575538378421599,0.003914672085262455,0.16602819048419543,0.6769163382305744
W,0.04725483622214221,0.08131039867851883,0.002932443023407398,0.04438641625205691,0.8241159058238747
W,0.016708269793059876,0.054349088173815396,0.001425372159768101,0.0690884355418241,0.8584288343315325
W,0.01485819961533023,0.14139352253952853,0.005482455457716664,0.14313961517559728,0.6951262072118273
W,0.020627965673816567,0.12788823346303285,0.002182479491973216,0.11368757200407588,0.7356137493671014
W,0.01585506291676829,0.09867732236776666,0.002484582874396156,0.14856557498084108,0.7344174568602277
W,0.022593604733523467,0.0546691385430778,0.002442049574274942,0.12994428182579557,0.7903509253233282
W,0.022609457962281254,0.08188705223382427,0.00979869878032654,0.2187259796133968,0.6669788114101711
W,0.027392506770238467,0.06831682488068605,0.0010708466640158558,0.21082792300840886,0.6923918986766509
W,0.018601974972508328,0.28470637831348383,0.021400929526158134,0.09964893659491308,0.5756417805929367
W,0.04128274980082811,0.14557896785343163,0.0029744247876089852,0.22077611633723768,0.5893877412208937
N2,0.00420250468494365,0.5815821859032337,0.04105932913616937,0.005989496850957443,0.36716648342469577
W,0.04105371064884853,0.2764049160031375,0.01381335871798781,0.11549295838576074,0.5532350562442655
W,2.2057981697694086e-17,0.009714837557046815,0.011137870472054117,0.0008402528996976602,0.9783070390712014
W,0.005507284958360325,0.04675374734847352,0.005691761521469343,0.0021609870247754183,0.9398862191469215
W,0.011248984175130226,0.022785282109072724,0.0031458613126980183,0.0006324587119231481,0.9621874136911759
W,0.008109813687413715,0.015853050944635672,0.0005031974009655673,0.0071102139065281796,0.968423724060457
W,0.07657144365602181,0.1178598151461415,0.0036727340808055215,0.008169308400956279,0.7937266987160748
W,0.02022578020989842,0.0158556111436918,0.0010655736073420196,0.017553093702121658,0.9452999413369461
W,0.016298847826262786,0.1406603216396216,0.006417544970704315,0.11495959475421155,0.7216636908091998
W,0.019058864812435142,0.03194369959220403,0.01901667030055629,0.17811289352787077,0.7518678717669338
W,0.005861488982326433,0.005802584903645221,0.0005875163683219276,0.01706579337961139,0.9706826163660951
W,0.0032740406190055454,0.0013887661624797333,0.00046558225252348766,0.007108967272042949,0.9877626436939482
W,0.0057446776165013995,0.006490993822956914,0.0010115988218984868,0.03870399469176141,0.9480487350468818
W,0.018342924330069323,0.011460267235387882,0.0003656861645425772,0.0889412648526679,0.8808898574173323
W,0.0057431255433458344,0.004091242843090174,0.0006460005196306586,0.041547700800312976,0.9479719302936205
W,0.005971234521874955,0.011000699142312088,0.0058007766202120715,0.28659413722346694,0.6906331524921339
W,0.014640277193011163,0.017108506051094242,0.004037896098649046,0.03463379994801014,0.9295795207092354
W,0.01021170754140041,0.006467524841289129,0.00034994956596773395,0.04720099988935097,0.9357698181619918
W,0.021633995553418488,0.021578429313201114,0.0007382398851975147,0.05850026398000604,0.897549071268177
W,0.04067703358811717,0.012855631784383143,0.0003794764784256483,0.020371112207816122,0.925716745941258
W,0.12558920455689576,0.20203664194245724,0.00021119496444475165,0.11670060583804621,0.555462352698156
W,0.1475590069878239,0.031165495491672617,0.00011654673135597654,0.345204953963248,0.47595399682589945
W,0.05408695968134732,0.024023809552223892,0.00043375896162869623,0.17258712744563662,0.7488683443591635
W,0.11036400411851208,0.05553788738499605,0.00012908867646632978,0.35917758687023,0.4747914329497955
R,0.12502902711466266,0.07473362547103171,8.33987129241667e-05,0.4907707800814265,0.3093831686199549
R,0.14801752993181377,0.16161643619584998,7.001200392686447e-05,0.5029348959011373,0.18736112596727225
W,0.011826479678875665,0.23994479231953342,0.0022935988951138836,0.3484735349739683,0.39746159413250876
R,0.014416031917179975,0.30115781664387836,0.001321231654113311,0.4487343747390051,0.2343705450458233
R,1.273137311880395e-25,0.17450040006968973,0.0003832977815021097,0.6272793753195326,0.19783692682927562
R,1.745718387836511e-25,0.1939967545050437,0.002461592625926342,0.684632334722229,0.11890931814680104
R,0.007956818884578642,0.36317187986732974,0.0026950764967672695,0.5196721561400784,0.10650406861124591
R,1.3264671760281657e-25,0.23211541491246543,0.0009849236391201032,0.689238553537707,0.07766110791070756
R,1.154641585382692e-25,0.23626821702914422,0.0013668129148369217,0.7115321392991342,0.05083283075688475
R,0.007481729787007711,0.4412827696785615,0.0024890887737381187,0.4837258380661829,0.06502057369450973
R,2.2060504175880056e-25,0.21238501755305533,0.0020008813071013478,0.705365045711396,0.08024905542844735
N2,1.5861398114804758e-25,0.4346488542248131,0.0018670710581575197,0.4181296148305016,0.1453544598865278
N2,0.035182711617132836,0.4334249976192925,0.0055966322592083855,0.35813646227037504,0.16765919623399125
N2,3.813971942720173e-25,0.49507025358181284,0.00690153020101177,0.28388107025287473,0.2141471459643008
N2,0.015861703595857427,0.6249196654569953,0.002155729342319467,0.20602737884529154,0.1510355227595363
N2,5.193628292404824e-25,0.496293813966832,0.01210501357676596,0.19166828032277225,0.2999328921336299
N2,0.01830808700099944,0.5187125824109347,0.004801552930752237,0.15467142189130428,0.3035063557660095
R,0.01847544336997967,0.23575603190932445,0.0022147078807154253,0.4718177216721671,0.2717360951678132
N2,0.013641763608109904,0.6580905813376885,0.003320374456810864,0.030354778616543475,0.2945925019808473
N2,0.046794828874759324,0.6935280039250662,0.01103452698247479,0.10109047134204274,0.14755216887565703
N2,0.02591022672383204,0.4855976785127494,0.003931909250027964,0.3577182789234645,0.12684190658992617
N2,0.023618043398119768,0.4738972439301745,0.004969455695535924,0.38900390299297766,0.10851135398319213
N2,0.0642730741361839,0.48629133340360287,0.0024686339229106065,0.21528863590352967,0.231678322633773
N2,0.04261824805746659,0.574722954852271,0.008360942857605413,0.14434663457681843,0.22995121965583853
N2,0.038875315469946124,0.7712535332920565,0.011481602619471135,0.01821577076515836,0.16017377785336787
W,0.011917302677098153,0.3038062778141975,0.024110326309898462,0.023526962305910414,0.6366391308928955
W,0.027831258571203436,0.09835971171720465,0.0005787318462565022,0.031279084779352435,0.841951213085983
W,0.05103214216894528,0.13220863305940408,0.0014028961515900583,0.0050830768780040095,0.8102732517420566
W,0.05706123532107907,0.07449453400791822,0.000571671181356268,0.002263429315788511,0.865609130173858
W,0.04371860691568612,0.10455858999328464,0.0010760033167330218,0.008411874961195229,0.842234924813101
W,0.18361359328248653,0.37660169244395436,0.006940295001381699,0.04556188370538574,0.38728253556679165
W,0.021235289543200732,0.06697412949398594,0.004604088957132592,0.01720137153278379,0.8899851204728969
W,0.027989312985702404,0.0845812577314323,0.005390158837048856,0.022642075796994055,0.8593971946488222
W,0.040774060308419735,0.09344477818629926,0.003636839292879281,0.028950215344534257,0.8331941068678674
W,0.009088295474951508,0.020630360952877704,0.0022521570222840924,0.019526751777413167,0.9485024347724735
W,0.02940759102758029,0.050686684607679625,0.006588982958926837,0.023221456629724354,0.8900952847760888
W,0.018163068501282457,0.026882819743431614,0.00022752381653718445,0.004075186433137155,0.9506514015056116
W,0.03927010345742716,0.2357892863518326,0.016435015039410264,0.0037921045571580017,0.704713490594172
W,0.05118812190956738,0.08718839626162928,0.005419439385702484,0.001339249867499736,0.854864792575601
W,0.05016593131006062,0.03168045098273046,0.0019780717714530855,0.0022064124266260076,0.9139691335091298
W,0.016991773567515252,0.02161183943236497,0.0004276632227225899,0.0025035705284459143,0.9584651532489513
W,0.0884884859586024,0.2956084003882462,0.009233433146545672,0.009186917917123259,0.5974827625894824
W,0.003827097119420468,0.0833054417807263,0.05203345833862659,0.017094188634812248,0.8437398141264143
W,0.05689479161209634,0.09583550519243599,0.004534935125020866,0.0020773532663887623,0.8406574148040581
W,0.02689245340933574,0.04863431344946418,0.000744818139369549,0.002814156329074125,0.9209142586727563
W,0.026444025141582873,0.025793016336597755,0.0017288414000711343,0.0034356282763475608,0.9425984888454008
W,0.020488095596967234,0.010050413983219299,3.815800687689164e-05,0.010230058471653085,0.9591932739412834
W,0.033221750301463765,0.012085225838543599,0.00018035150609612343,0.025484847269152483,0.929027825084744
W,0.027816947028167588,0.0308628682758096,0.0012873795463435504,0.026537551197957157,0.9134952539517222
W,0.012127633766663301,0.006693583463062022,0.00022325043001740654,0.011494993675754931,0.9694605386645023
W,0.057134355207127285,0.00919827007616799,0.0002068238701345533,0.009384585180438701,0.9240759656661314
W,0.03828538809899856,0.03535213066658931,0.00033756051869081067,0.010861631607089708,0.9151632891086315
W,0.04759548403515591,0.07173914451922672,0.0015276679040679465,0.014225788296916458,0.8649119152446328
W,0.050501576572229076,0.07019077596898446,0.000757396467549965,0.004162995420922323,0.8743872555703143
W,0.005631053859955932,0.0893723817237018,0.11138115675091012,0.03944575541706846,0.7541696522483637
W,0.012888684192977295,0.014512425053054423,0.0007340365679395559,0.0017953604180943735,0.9700694937679343
W,0.010563628508877591,0.013257125522209593,0.0001377412210556481,0.0026493081528358455,0.9733921965950213
W,0.01439752191944047,0.01651030245433727,0.000283508537409211,0.0012527712728851372,0.9675558958159278
W,0.056275404274603064,0.14693500329140657,0.02027652846158357,0.01770077929042092,0.7588122846819859
W,0.008723197094268508,0.04766008856914667,0.0014180947297468731,0.0018500584026962725,0.9403485612041417
W,0.04513214578573216,0.2034559382965496,0.0038536465946800635,0.022809347868007215,0.724748921455031
W,0.06447104400183855,0.23928503437091372,0.001894910933794891,0.014750409920966533,0.6795986007724863
W,0.12339557126703735,0.1346533290467276,0.0013425372473022563,0.04638651165371805,0.6942220507852148
W,0.07811584974257857,0.04982816287450078,0.00023434929305554805,0.04311744088417718,0.8287041972056879
W,0.10298940199217448,0.12625520455450528,0.001425733170273164,0.06699013101543914,0.7023395292676078
W,0.1226154547699539,0.08774396391926255,0.001737974950862538,0.1887059324151525,0.5991966739447685
W,9.055882134792436e-25,0.3598782240075776,0.0035875387915618485,0.24145713974740554,0.39507709745345493
R,0.040942160689266184,0.17424646231980137,0.0023140092281608545,0.559700791171962,0.2227965765908097
N2,0.009824171473187607,0.4201218219354137,0.008361482531770952,0.32189055806916705,0.2398019659904606
W,0.002009091327815209,0.013119529483021619,0.00038352795416317923,0.03528815370962754,0.9491996975253725
W,0.002050652003413257,0.034863727060068704,0.002289609075471339,0.02620775396117789,0.9345882578998689
W,0.0032441627950698516,0.036859988226809186,0.0011359341659983562,0.05552112970232075,0.9032387851098019
W,0.004535533358182458,0.03917022223201765,0.0017238328371327546,0.07082597682820421,0.8837444347444631
W,0.0029414643829321417,0.08379852983684329,0.0024932037642388443,0.028470890042245577,0.8822959119737401
W,0.006524921669107823,0.06928954591142077,0.0008775972771866284,0.029748453401576877,0.8935594817407078
W,0.005243510292211716,0.09613909019644569,0.0028204094227855733,0.01708815714632458,0.8787088329422325
W,0.0041896234019352975,0.07224924625048669,0.0013202412892894273,0.03346052358899555,0.8887803654692931
W,0.005279369770629662,0.15449656436408685,0.004533490256698838,0.015045394861060775,0.820645180747524
W,0.011055288904077289,0.10708535366247622,0.0020900792827528614,0.03290217113399608,0.8468671070166974
W,0.010094315791257195,0.14084219438319964,0.0016487415050904443,0.027921844223026893,0.8194929040974258
W,6.000714418464408e-26,0.15369069667375418,0.0007596917770828915,0.01018213624057468,0.8353674753085883
W,0.006120781980602775,0.34322763251080646,0.011053165744936628,0.013259597388949053,0.6263388223747052
N2,0.029005282875804644,0.7577115258089789,0.0051169826710100895,0.09790903073256761,0.11025717791163862
N2,0.012912481181918869,0.8709116489992588,0.007737144968797261,0.024155207535141318,0.08428351731488391
N2,0.021351521638398832,0.7023292384337868,0.01117389068568732,0.026620604678968745,0.23852474456315825
N2,0.013888979398465546,0.6825351430359289,0.005834201549747611,0.14455522404048787,0.15318645197537004
N2,0.009490097561841923,0.7134415002297021,0.015642769627238134,0.11063415049763489,0.15079148208358298
W,0.013622434115270908,0.33610659637354,0.008987346738246053,0.02452170084879879,0.6167619219241443
N2,0.009682050969967366,0.8096584792875217,0.03692013791799588,0.01323079055549204,0.1305085412690229
W,0.013351522435444262,0.03883390816053462,0.0021497610868018,0.003251772226070301,0.942413036091149
W,0.020690342485630533,0.10854257651227087,0.00226749477470321,0.008589477662946909,0.8599101085644486
W,0.23270372842581083,0.05661776013596183,0.001199345529335309,0.018686747397564183,0.6907924185113278
W,0.02631188715181574,0.029418022704969866,0.0011677174416135886,0.00084982653567219,0.9422525461659286
W,0.043277375515221365,0.13647803722999635,0.006488454697929009,0.0026199807676236964,0.8111361517892296
W,0.03628522615045448,0.07739290517220306,0.004063280221778049,0.002207358069481946,0.8800512303860825
W,0.03808902635040466,0.15432209822848275,0.006482752719459583,0.006445769461381297,0.7946603532402717
W,0.049791795743642286,0.37339044468894117,0.026749255731200523,0.0028429980431683957,0.5472255057930475
W,0.1366740416370918,0.19070777669987185,0.0010840671748602359,0.019500367976292857,0.6520337465118834
W,0.015164258190833195,0.15097565998341947,0.02296772412590545,0.002770321650071851,0.8081220360497701
W,0.16020474983080885,0.40452309471589276,0.0005338905230707951,0.002382643169954599,0.4323556217602731
W,0.009486073279580332,0.019427397404080008,0.0011342599521657155,0.00019549450065099318,0.969756774863523
W,0.012092186735716996,0.02665209142316951,0.0007751657890370926,0.0004737909112392485,0.9600067651408372
W,0.01932159169009538,0.011920824315628959,7.559588745189617e-05,0.00027646442704481545,0.968405523679779
W,0.002501951648613387,0.037611893201629026,0.003284692270331784,0.00025474803343762984,0.9563467148459882
W,0.02567148302896008,0.03568920030288365,0.00031211691398319645,0.007332753973213506,0.9309944457809595
W,0.032264401449614996,0.015517295702413334,0.00011046752702168957,0.012441879879652973,0.939665955441297
W,0.011428904775195495,0.004715646344627412,4.8180554070945865e-05,0.0038899380500806414,0.9799173302760255
W,0.006356762693751246,0.0031230894115817187,0.000141093756703598,0.0016522869722894558,0.988726767165674
W,0.003873115551275952,0.003143449053897703,0.00014776385750634471,0.0009276927271439254,0.991907978810176
W,0.0065104895426395665,0.004053163609110463,0.00018804697495966488,0.006628987349460627,0.9826193125238297
W,0.014914851945986064,0.013887541621126718,0.000253343436437538,0.005152719053044966,0.9657915439434046
W,0.03871156808004957,0.037458278154685214,0.0011046569502957452,0.02208078202216636,0.9006447147928031
W,0.09727347447669712,0.11211441967259939,0.00016571548447718754,0.05903187592482835,0.7314145144413979
W,0.005180136335748399,0.009042512146321615,0.00025419235072854206,0.006936368878353957,0.9785867902888475
W,0.0008224937000803565,0.0023927475079261453,7.428213788894587e-05,0.0026653240876985396,0.9940451525664059
W,0.0014428099847082947,0.009962146792595704,0.0020153742397780393,0.005424575655580637,0.9811550933273373
W,0.0018278643099476682,0.004068151913528649,0.013470315030699682,0.0009611659667270014,0.979672502779097
W,0.015486493061533832,0.010030898900733509,2.8676740944789615e-05,0.0020654860994022742,0.9723884451973857
W,0.004106836340213439,0.008096265592069728,0.0008297230324923743,0.00783579742583655,0.979131377609388
W,0.002699916139795004,0.007570773581371533,0.005646106063650205,0.0005174011233643035,0.9835658030918191
W,0.008811871990036878,0.03271334203463224,1.0305452308127988e-05,0.0615646380207077,0.8968998425023151
W,0.013788548529186817,0.060107251806917526,0.000578930708917687,0.0004912405408966305,0.9250340284140814
W,0.006487714232656683,0.012267507511377613,0.000180497678194123,0.00027823573203624206,0.9807860448457354
W,0.007410798080651164,0.022479945874829696,0.0006446692392029633,0.0019166529367932181,0.967547933868523
W,0.027920408551307226,0.03285756882836541,8.817290216668971e-05,0.014959156370774069,0.9241746933473867
W,0.027245231825203838,0.2704220658864427,0.0032017780556048083,0.008501430347047957,0.6906294938857007
W,0.04053923390974019,0.09781627023466369,0.0003088141633192959,0.0120631545359439,0.849272527156333
W,0.03758872914641142,0.01919792777368303,0.00012632042572630113,0.012154852938044398,0.9309321697161348
W,0.019574550991336568,0.017278272224548915,7.0447823183964e-05,0.0074156143471647736,0.9556611146137658
W,0.04032877006708589,0.023859363520412024,0.00015698087818401772,0.015617710428221684,0.9200371751060965
W,0.04169800636495828,0.02134432251241768,0.00016456513640008833,0.014991608916473383,0.9218014970697505
W,0.024423945934631933,0.0361989602390107,9.50455288380478e-05,0.01874130676277312,0.9205407415347462
W,0.07163749343154616,0.10876427288461106,0.00020409212068480832,0.027121823579806165,0.7922723179833518
W,0.045670528046733445,0.042202688951624316,0.005921060506744902,0.02019939733426296,0.8860063251606344
W,0.06749650313155059,0.07176786537367214,0.00044834682595076613,0.0375690436877082,0.8227182409811183
W,0.008214553375363153,0.02936608368552168,0.001161717093668671,0.006717387703578566,0.9545402581418679
W,0.07832791817895102,0.13173626776476421,0.002753428476292265,0.06547854948905343,0.721703836090939
Stage,N1,N2,N3,R,W
W,0.002626378060979944,0.0008452205235932133,9.257080365551088e-05,1.203247549055142e-05,0.9964237981362808
W,0.006735267523176601,0.04214023533110446,0.0003006590672606694,0.00017949491712633957,0.950644343161332
N1,1.0,1.4199884619444972e-29,8.409307922546103e-31,2.026861113536818e-31,6.767822444362542e-29
W,0.012244129970904476,0.04432503530076358,0.011029222031614647,0.006980005124859897,0.9254216075718573
W,0.05231632598150453,0.2948076292310942,0.10252965238574721,0.02032226037802676,0.5300241320236272
N2,0.16901092894497807,0.37971069661276696,0.07588710637177844,0.031102351051729656,0.34428891701874687
W,0.09184619157539443,0.14853949071088823,0.011585092998889757,0.014347288703027995,0.7336819360117995
N2,0.057571730481338644,0.5848773923933529,2.16934074117868e-19,0.05708008191660571,0.30047079520870285
N2,0.14438217868613532,0.6522908440744886,0.0016636269766680135,0.07605830354545953,0.12560504671724843
N2,0.09357152339652389,0.6736560078405235,0.008951013749988829,0.030668329501450327,0.19315312551151365
W,0.15577005116253453,0.04996430659982471,1.9069089638254923e-16,0.0031853539372140634,0.7910802883004265
W,0.01507256186434252,0.10490402469237095,0.10628590028136727,0.05299290643779035,0.720744606724129
W,0.10049720254341893,0.05315291712386953,0.0002006024120529332,0.23341314730608217,0.6127361306145764
R,0.18290763592625142,0.09133022582978993,0.00039795011490684803,0.4770928170366954,0.24827137109235636
R,0.08129300630232483,0.17996554739271511,0.0004067404618271504,0.6006101563687967,0.1377245494743363
R,0.0539052947302153,0.18861668010069954,0.0005223973060189988,0.5972376348440667,0.15971799301899947
R,0.02156744549569251,0.2358256553152908,0.0009973659059537498,0.5067925321439251,0.23481700113913795
N2,0.013616279680657444,0.4641107439222475,0.0017849695781581062,0.43311553721638574,0.08737246960255124
R,0.01077103609767435,0.307976306467244,0.0020291498467854413,0.547220961439225,0.13200254614907114
R,0.010766269329211592,0.09105793913701035,0.0008677838027594278,0.8327262633751434,0.06458174435587516
N2,0.004552360328953477,0.5521022950725851,0.0044328696425775796,0.4123046359925116,0.026607838963372214
N2,0.008892637336449969,0.4991598326094913,0.006604193012795026,0.2531582690671525,0.23218506797411131
N2,0.007364679987098732,0.6980289660310971,0.0024713795862073484,0.1322577827432272,0.15987719165236958
N2,0.007167487404042679,0.8773848107312886,0.010966194892541229,0.019488040588986594,0.084993466383141
N2,0.00906140882308519,0.923822442945422,0.013100685448306972,0.016919327514156045,0.03709613526902971
N2,0.006536561164978216,0.9395457602661944,0.006071625316952741,0.0279595764026661,0.019886476849208516
N2,0.00794662215503057,0.8465666247878527,0.00682751428736703,0.10245428016498416,0.03620495860476552
N2,0.0036260209884749657,0.953413315845864,0.0019189097765071733,0.025523677388570358,0.015518076000583535
N2,0.005983644186745773,0.9262337853534811,0.009252254693679025,0.03436224759371562,0.024168068172378352
N2,0.05172149051334346,0.6312362550694937,0.05911555298869515,0.0583294394043087,0.19959726202415895
N2,0.2128661874617179,0.6336351663236978,0.0008699915668861579,0.07353045285047699,0.0790982017972213
N2,0.18621204867554816,0.6321138367048561,0.0021603323509899242,0.12644175814193892,0.05307202412666693
N2,0.20117464194583196,0.6376599300349589,0.0026398113110965844,0.12617599106651176,0.03234962564160075
N2,0.23411486800339656,0.6034331257512301,0.001301005556121556,0.14286215722520287,0.018288843464048816
N2,0.04887831903175016,0.896790543305438,0.0011599798225582017,0.0406530403832961,0.012518117456957589
N2,0.02416548784162753,0.9258309166236633,0.0038102903367230228,0.023260260948531064,0.022933044249455043
N2,0.1047717762006615,0.6454060587145528,0.0011268697818069317,0.18201910467430427,0.06667619062867444
N2,0.022455033096990238,0.8902242610942162,0.003013851488372495,0.04265520991354347,0.0416516444068778
W,0.022601071675601197,0.09706362295044363,0.007117844460868583,0.08156370655758158,0.791653754355505
W,0.0056131321850588535,0.011596740775329187,0.0015095097071186345,0.03308812986082292,0.9481924874716703
W,0.012964222686392812,0.08170876600058483,0.018621971901183754,0.013881123852003205,0.8728239155598355
N1,0.46118786891752056,0.10846675844386063,0.00021029867198588492,0.018679776811492448,0.4114552971551407
N2,0.3041693022407568,0.41518714553246205,0.0023389469101834214,0.06222812626471374,0.21607647905188399
N2,0.20054272286815927,0.5548893475443666,0.013065994822774814,0.03298006998835005,0.19852186477634914
N2,0.09294625439985033,0.8623755096682687,0.01206272316004201,0.006170344698678468,0.026445168073160538
N2,0.14682899000690947,0.7835298765345108,0.009291453222921076,0.028394495413734618,0.03195518482192406
N2,0.005159933195409031,0.9711382619962775,0.008119349937578896,0.0009746694341877204,0.014607785436546866
N2,0.036621235614451575,0.8533569999269518,0.01142300695804313,0.023921714723019967,0.07467704277753354
N2,0.0251275100523895,0.9287020713648303,0.006082990415118854,0.014644997861565789,0.02544243030609566
N2,0.025240519463425547,0.9370339725579026,0.007928270987619774,0.0034820305428864503,0.02631520644816552
N2,0.036706244817910745,0.9323495314096304,0.010390194653623133,0.003425124700125169,0.017128904418710515
N2,0.14596667654179393,0.7755246911707092,0.001355714093952575,0.029744936888775955,0.04740798130476829
N2,0.05327435872092505,0.8687588764865362,0.0016090553166257704,0.03943288773614826,0.03692482173976471
N2,0.07039781056035894,0.7552865691191353,0.0006425494687578691,0.13777786893557661,0.03589520191617135
N2,0.012768665473131453,0.9457664828300701,0.006263847155780403,0.024047803983881982,0.011153200557135807
N2,0.016346285071163605,0.9633184185318672,0.0036522899003834544,0.006966947394532024,0.009716059102053861
N2,0.017310698581203047,0.9372520885748512,0.009500157895669088,0.011718814303830481,0.024218240644446106
N2,0.03453095270232838,0.9219139862937112,0.005335182369283379,0.016603272441569065,0.021616606193107627
N2,0.017020390232605848,0.9606146633896546,0.004628719845881929,0.006574401823499334,0.011161824708358054
N2,0.010864737933130211,0.9678675930637685,0.008160851873936163,0.005575053874499794,0.007531763254665215
N2,0.013273247482434428,0.9231813368524541,0.025878597011972242,0.0013360499236539417,0.036330768729485076
W,0.014923923863849164,0.07341520866923647,0.017578779766555874,0.01043081130342402,0.8836512763969345
W,0.0006862858920612143,0.011715284308492007,0.007991688503842015,0.0012920459716104522,0.9783146953239942
W,0.08568611237266113,0.0746048207074697,0.0049615889744649274,0.005121020186037019,0.8296264577593672
N2,0.27135270997732513,0.43705879726550584,0.0033253847092369593,0.016061030042909534,0.2722020780050226
W,0.2582565829918959,0.25796750064400015,0.0019479708905543193,0.07515542120289555,0.406672524270654
N2,0.06268389891202293,0.6577144260040948,0.018753111869294414,0.006029092884072148,0.25481947033051566
N2,0.2506685023310592,0.6750776688290178,0.0028991407511126206,0.011679069728956744,0.05967561835985355
N2,0.10354603374562352,0.7880665302235756,0.005398605465921488,0.015205118383377566,0.0877837121815019
N2,0.01393822622493823,0.9532666561921636,0.015504300227979079,0.003351667786267222,0.013939149568651634
N2,0.08196357156650848,0.838978658867622,0.004240270985954298,0.023418483744617753,0.051399014835297234
N2,0.01669761923628464,0.9237597826689355,0.010793911955461909,0.006355358212615071,0.04239332792670306
N2,0.03153943516631304,0.9278946869113385,0.003640774982205802,0.008950452166859803,0.027974650773282574
N2,0.02093537703189581,0.9402831269084322,0.010176518901357881,0.013756748962663348,0.01484822819565095
N2,0.03648967275418589,0.9321170054177919,0.002048375646409508,0.014093668593538448,0.015251277588074342
N2,0.017216061434707598,0.9495008042394241,0.010906962588738599,0.0025936140731651347,0.01978255766396467
N2,0.022249708428369642,0.9404670733831904,0.006148752677353041,0.007051028288791006,0.024083437222295993
N2,0.0556054454593777,0.8935155377422932,0.0010424217792009435,0.01512483172938737,0.03471176328974084
N2,0.012846143893108257,0.9756869574367129,0.0017625003073858446,0.004060694416701065,0.005643703946091901
N2,0.06970740859405504,0.8109675275958566,0.0013635627306734662,0.03229324960118239,0.08566825147823263
N2,0.2160037340747208,0.5093048130404872,0.0006755029392559945,0.02257620423457498,0.251439745710961
N1,0.4536262641645023,0.22782477093838874,0.0004427024244900951,0.18911217225237534,0.12899409022024355
N2,0.10881794347576886,0.8283421598979839,0.0009439198504327486,0.0311156653414121,0.03078031143440247
N2,0.0840258744018989,0.7680885564065113,0.0025197559071638118,0.037379335851717314,0.10798647743270873
N2,0.025518475680423154,0.8781591162923532,0.0487121787412668,0.02424725324863791,0.023362976037318788
N2,0.12255193234299236,0.7554632415054333,0.008760467418349446,0.02922214661657319,0.0840022121166517
N2,0.12040833409899311,0.8030831824021475,0.004697934805020714,0.03144733301764789,0.04036321567619069
N2,0.054017515573642046,0.7714130933894077,0.0021829563498228207,0.011163487690360817,0.16122294699676673
W,0.004741443529608093,0.03827452359384384,0.01847036755161189,0.19557258763156674,0.7429410776933694
W,0.12029389326311,0.1492515991638702,0.005856423942916418,0.005784335929445484,0.718813747700658
N1,0.4663014677378334,0.2533913641156883,0.0016575855619988104,0.023676429699120826,0.2549731528853586
W,0.06448523816630379,0.2878719273105516,0.004823560914354166,0.027386914155865458,0.615432359452925
N2,0.10553868050685705,0.8185996913919087,0.0033035865361709356,0.005370303455367491,0.0671877381096959
N2,0.048139689771675126,0.8957104816776774,0.0042438409002533315,0.001819739223537129,0.050086248426856946
N2,0.003807500429113669,0.8699165615995735,0.09913744952456362,0.0003824065165435229,0.02675608193020561
N2,0.006240763287630813,0.9672400373883875,0.004015156475832888,0.0004057251751444522,0.02209831767300404
N2,0.0036835657404507343,0.9765604465589196,0.003901943435013481,0.0051043612967132095,0.010749682968903012
N2,0.010315219411967528,0.9264313516370443,0.005485051161719266,0.02148227814034223,0.03628609964892665
N2,0.006839332824855691,0.9611343464028419,0.007344265129980739,0.0033845984267528786,0.021297457215568995
N2,0.023244242633732596,0.9184359760819352,0.0057281053560307525,0.015440002074105393,0.03715167385419624
N2,0.015368126561104213,0.9109105719774577,0.01610621499890675,0.012770677269277551,0.04484440919325361
N2,0.013851218924815278,0.93915591927412,0.0029699456115659557,0.008008133818082023,0.03601478237141684
N2,0.0047706741187323815,0.9671235241771635,0.010462912332500638,0.0032574307174129172,0.014385458654190462
N2,0.003899430812191735,0.7446452771329898,0.20838426614291572,0.0003563392502001467,0.04271468666170268
N2,0.04781986534747766,0.8000945106632957,0.006770810446029271,0.00045635809466418163,0.14485845544853307
W,0.027052073653513767,0.30635296185129296,0.1830508050709491,0.0010352444054615216,0.4825089150187825
N2,0.39417948544338394,0.5174540865410462,0.004421237548216403,0.0006817423938622702,0.0832634480734912
W,0.14651919722358175,0.264201766119944,0.001134720715195692,0.0014362023704716648,0.5867081135708068
N2,0.2492621931378057,0.3837796143864566,0.0012928758578106064,0.0070510593030466565,0.3586142573148804
W,0.18363073714923872,0.2798094002984598,0.0022425728666308387,0.0016449065625165605,0.5326723831231541
W,0.1449759220508788,0.12212316232029245,0.0033668010470531604,0.0017937389502343717,0.7277403756315413
W,0.03375720602409768,0.07376689141830943,0.0034997239301274535,0.0072597988335635,0.8817163797939018
N1,0.473690949337984,0.06763621852367087,0.001356706623940935,0.2398391305083166,0.2174769950060877
W,0.1580227804728825,0.01253634143178934,0.0004398440891666888,0.10198465276833765,0.7270163812378236
W,0.24479022932629368,0.05014302704713486,0.001706907706458567,0.28263945930659157,0.4207203766135213
W,0.29256525707547565,0.12361407354583592,0.0008831106258909849,0.07381514477113951,0.5091224139816579
W,0.03906307955017551,0.06059202845716242,0.005687584313649068,0.05534432267559193,0.839312985003421
W,0.0021979828025702353,0.003457493471651447,0.013842034718916261,0.023050757967699363,0.9574517310391626
W,0.058499294769184966,0.04132945988001313,0.000719143498778592,0.012722789219855604,0.8867293126321677
W,0.2559368156878348,0.18046425123172122,0.002661328949906092,0.01753360998886881,0.5434039941416691
W,0.2218589288228164,0.04639785604202153,0.0002167358790188988,0.02315564227131277,0.7083708369848305
W,0.09911797401809491,0.16518108418026117,0.0012732578171497397,0.05482444265764457,0.6796032413268496
W,0.22110638903149019,0.06900028566525279,0.0012995092872373146,0.05521933118985099,0.6533744848261688
N1,0.40032252938974755,0.07455029121469996,0.001209499840649447,0.13169914171875863,0.39221853783614447
W,0.3232303377067485,0.03495816608493509,0.0015319295673757816,0.18832908318764022,0.45195048345330036
N1,0.45250342438838353,0.12817537021571027,0.0030337969985350073,0.10527615423120336,0.31101125416616787
N1,0.43268747980903327,0.07475892422318431,0.0006144217985427023,0.1071479331156462,0.3847912410535935
W,0.2830696833515257,0.2169390876566663,0.0012869144846857914,0.05510976579395013,0.44359454871317194
W,0.2623103137114527,0.046412622775699346,0.0006894960844608519,0.07532053436660188,0.6152670330617853
W,0.09410461577820281,0.04703988544378095,0.001956682827064771,0.038833625476036554,0.818065190474915
W,0.03588304356528002,0.03480989387885707,0.0026558603776204582,0.027266578666702283,0.8993846235115401
W,0.2666716481255152,0.06262267893249183,0.0008028802684177562,0.11554306869291539,0.5543597239806599
W,0.3522489875533225,0.060134114499056354,0.0010565008504505255,0.17051150396075204,0.41604889313641846
W,0.03372310431349903,0.02946226401044163,0.0031585098014135183,0.0804423490710346,0.8532137728036112
W,0.12235476559807551,0.07663144361592719,0.00026898750307875557,0.08092843299839342,0.7198163702845252
W,0.3313000109783217,0.08089795382871313,0.0004692800773617828,0.15281503981304423,0.43451771530255906
N1,0.3762244750346523,0.12306306117144752,0.00042042595024169847,0.25272348310401105,0.24756855473964742
N1,0.35388306590719504,0.20217346429704328,0.0014631562105721896,0.23251561810595764,0.2099646954792318
W,0.06278273126686412,0.26348748459666027,0.003671244486038429,0.20880620959482818,0.46125233005560895
R,0.009348678072361217,0.08702009530226086,0.009756142598331359,0.772659559371208,0.1212155246558386
W,0.3210144452748198,0.23744848273522673,0.0011438828474988321,0.023186129773168102,0.41720705936928637
W,0.2665577388498211,0.11980550377443178,0.0015406809722398212,0.018340179431675457,0.5937558969718318
W,0.3567741585312742,0.08311406214805511,0.00027180356565032236,0.031725437008376024,0.5281145387466444
N1,0.6243889585788309,0.06765374815527682,0.00013178959888117937,0.007007893681164703,0.3008176099858464
W,0.16326498183843682,0.05126520045487815,0.0002473284556825649,0.0036982026991371035,0.7815242865518653
W,0.06662891691803696,0.06744786811859159,0.0022072437345471534,0.00784060935267688,0.8558753618761474
W,0.06049417861850162,0.044212219116404695,0.0001500384533370894,0.008830937646379022,0.8863126261653775
W,0.02556734030045777,0.031361942094716086,0.001895856158282308,0.010916130662296,0.9302587307842479
W,0.037034884217428204,0.02079428978068587,0.0004839740146044015,0.004741760240765636,0.9369450917465157
W,0.14150094024542528,0.047302436115502715,0.0006837692942714004,0.03955862148547268,0.770954232859328
W,0.1770625614909312,0.1123224324441353,0.001794083287647057,0.13305181183953624,0.5757691109377502
W,0.017907731482572315,0.01628279970896173,6.545952986049924e-05,0.009548045643293583,0.9561959636353118
W,0.11080759812833038,0.11110161632732325,0.0006620266445315908,0.04801190132731432,0.7294168575725005
W,0.28475274560405694,0.2419045402973054,0.0014512171229292558,0.13555836501039656,0.3363331319653119
N1,0.5011811143002958,0.16017858900762097,0.0009074333794937956,0.04126336832623912,0.2964694949863504
W,0.24288684597584034,0.3392096954091829,0.0007610139386937149,0.05027297984701982,0.3668694648292632
W,0.24583608921396272,0.2227967020889546,0.00177244830151192,0.05020084004772453,0.4793939203478463
W,0.20940304260757525,0.3420829399405112,0.0016898663428429725,0.03524389520180822,0.4115802559072623
N2,0.3367558329585474,0.3511133787905657,0.0005165624566181249,0.11385619948280952,0.19775802631145933
R,0.0028050184542643512,0.035694822390255246,0.006241964014401433,0.6535470558658067,0.30171113927527227
N2,0.12039129811953975,0.5230200415302809,0.031349733063096366,0.08088288038431819,0.24435604690276472
W,0.07553829461143731,0.12662360731183775,0.0007096616426467916,0.013144304987359004,0.7839841314467192
N1,0.4676171016329594,0.3843994525363553,0.0009138566661597559,0.0584357408265757,0.08863384833794996
N1,0.41843348765738947,0.1072370480515955,0.0011429610248153133,0.24864163963247315,0.22454486363372667
W,0.07623305962159699,0.3846836973705932,0.011932943403717243,0.021391067482238194,0.5057592321218544
N2,0.26439174892192885,0.5325520342673724,0.0016192977352450426,0.05149376885270228,0.14994315022275134
N1,0.441383540304607,0.22506462552047563,0.021874142084369916,0.018358043915476376,0.2933196481750711
W,0.18757043400173593,0.2660740446824086,0.007752219006932537,0.019727234448250117,0.5188760678606729
N1,0.37428035192162573,0.3367560701472017,0.016510489941830155,0.02558233531688363,0.24687075267245884
"""
A beérkező adatokat epochokra bontja, és alkalmazza a 'yasa' alvási fázis
osztályozó metódust
- A 'YASA' egy open-source előtanított osztályozó metóus: https://raphaelvallat.com/yasa/build/html/index.html
- Egy epoch-lista folyamatosan töltődik (30s-nyi adat a frek függvényében)
- Egy lista, ami alapján a 'yasa' klasszifikál majd folyamatosan töltődik ebből, nagysága állítható, optimalizálandó
- Ezt a bemeneti listát raw EDF változóvá alakítjuk a szabványok szerint, mert ezt tudja kezelni a 'yasa'
Megtörténik a klasszifikáció, ennek három kimenete van:
- Printeli a prediktált értéket (betűjelek) amikor elkészül, tehát kb. 3 0 s-onkékt.
- Feltölt egy globális listát, amiből majd a fájl megíródik.
- Az aktuális érték továbbadódik az audio_feedbacknak, ami döntést hoz ez alapján a hangstimulációról
"""
import yasa
import mne
import numpy as np
import time
import constants as c
import audio_feedback as a
epoch_data_list = [] # egy epochnyi adat
yasa_input_list = [] # a yasa-ba bemenő adatmennyiség
yasa_output_list = [] # a fájlba írandó lista folyamatos bővüléggel
first_call = True # az első 5 perc flagje a yasa_classifier-ben
def yasa_classifier(raw):
"""
A beérkező nyers EEG adatokból meghatározza epochonként az
alvási fázist és a valószínűségeket
- A yasa.SleepStaging parancs tölti be az EDF adatokat a sls ('yasa'-ba töltött (változtatható nagyságú)
adathalmazt tartalmazó saját típusú) változóba. A 'yasa' kizárólag EGY! elektródával működik,
ezért célszerű egy central-derivationt megadni (változtatható). Az alany metaadatai a constants-ban
változtathatóak. Ez után a
- .predict() fél perces epochok készítése után a fázisoknak megfelelő betűjelek listájával tér vissza.
- .predict_proba() az ugyanezen 5 s-es epochoknál az egyes alvási fázisokhoz tartozó valószínűségekkel
(5 fázis: N1, N2, N3, R, W) tér vissza.
- A 'yasa' esetéban minél hosszabb időtartamot elemez annál jobb az eredmény, 5 percnél kevesebbet nem tud,
így az első 5 percet meg kell várni, utána tudjuk epochonként megkapni az értékeket.Ezt kezeli az if/else.
Az első 5 perc esetén kiírjuk az egész listát, utána, fél percenként ablakolt adatok érkeznek, az ezekből készült
listából az utolsó elem szükséges/új nekünk. több adat a pontos mérést szolgálja.
- Az if/else-n belül a prediktálás eredményei, és a valószínűségek, mint dictionary
a yasa_output_list globális változóhoz adódnak, amiből a file_maker a teljes mérés végén csv. fájlt készít.
- Kiírja az aktuális értéket
- Meghívja majd az audio_feedbacket az érték alapján, ami majd meghatározza az audiostimulációt.
:param raw: EDF fájl
"""
start_time = time.time()
global yasa_output_list, first_call
sls = yasa.SleepStaging(raw, eeg_name="O1-O2", metadata=dict(age=c.AGE, male=c.MALE))
y_pred = sls.predict()
y_proba = sls.predict_proba()
if first_call:
for i in range(len(y_pred)):
y_pred_i = y_pred[i]
y_proba_i = y_proba.iloc[i].to_dict()
yasa_output_list.append({"Stage": y_pred_i, **y_proba_i})
print(y_pred_i)
first_call = False
else:
y_pred_last = y_pred[-1]
y_proba_last = y_proba.iloc[-1].to_dict()
yasa_output_list.append({"Stage": y_pred_last, **y_proba_last})
print(y_pred_last)
end_time = time.time()
elapsed_time = end_time - start_time
print(
f"Eltelt idő: {elapsed_time} s, y_pred hossza: {len(y_pred)}\n") # Eltelt idő és az y_pred hosszának kiírása
def raw_object_maker(yasa_input_list): #névkonvenció? nemtudom
"""
A beérkező adatokból a 'yasa' számára feldolgozható
EDF fájlt készít
- Az eszközből a yasa_input_list-be töltött adatok párosával (2 elemű listaként) érkeznek. Ezt először kezelni kell.
- Létrehozzuk az egyes elektródák értékeit tároló változókat, és ebbe töltjük az összes értéket,
így a dupla elemek megszűnnek
- Elvégezzük az EDF formátum megvalósításához szükséges formázásokat
- Elkészítünk central-derivationokat, később ezeket az EEG csatornákat lehet a 'yasa' klasszifikálónak beadni,
a kapott és kiszámolt EEG adatok listáival, az EEG nevekkel és a mintavételi
frekvenciával létrehozzuk az EDF fájlt.
- Meghívjuk a yasa_classifier függvényt
:param yasa_input_list: Az apoch_maker által meghatározott méretűbrainBitből érkező lista (dupla elemekkel)
"""
o1_data = []
o2_data = []
t3_data = []
t4_data = []
for pair in yasa_input_list:
for obj in pair:
o1_data.append(obj.O1)
o2_data.append(obj.O2)
t3_data.append(obj.T3)
t4_data.append(obj.T4)
o1_np = np.array(o1_data)
o2_np = np.array(o2_data)
t3_np = np.array(t3_data)
t4_np = np.array(t4_data)
o1_o2_derivation = o2_np - o1_np
t3_t4_derivation = t4_np - t3_np
eeg_data = np.array([o1_np, o2_np, t3_np, t4_np, o1_o2_derivation, t3_t4_derivation])
ch_names = ['O1', 'O2', 'T3', 'T4', 'O1-O2', 'T3-T4']
ch_types = ['eeg'] * 6
sfreq = c.SAMPLING_FREQ
info = mne.create_info(ch_names=ch_names, sfreq=sfreq, ch_types=ch_types)
raw = mne.io.RawArray(eeg_data, info)
yasa_classifier(raw)
def epoch_maker(data):
"""
A beérkező nyers adatból elkészíti a szükséges méretű listát, amelyet továbbít közvetetten a
klasszifikálónak
A listák méretei itt változtathatóak meg!
- A globális változók a többszöri meghívás miatt szerepelnek:
- Az epoch_data_list egy-egy epoch hosszát határozza meg. Ez ugyan a constants-ban változtatható, de ne változtass,
a sampling_freq (250 Hz) és az epoch_len (30 s) is adott. /2 a duplikált bemeneti adatok miatt fontos, megoldása
a raw_object_maker-ben.
- A beérkező adat hozzáadódik az epoch_data_list-hez. Ez az alapegységünk, 30 s-nyi adat! Ha ez "megtelik"
hozzáadódik a yasa_input_list-hez, ez az (epoch méret egész többszörösére) változtatható hosszúságú lista,
amit a 'yasa' klasszifikáló egészben kap meg. Most 15 perc, minél hosszab, annál pontosabb a klasszifikálás,
de nő a feldolgozási idő is.
- A YASA_INPUT_LEN a constants-ban változtatható méretű.
- A yasa-nak szükséges legalább 5 perc, ezért az első 5 percet egyben adjuk át, utána epochonként.
- Amikor "megtelik" az első epoch törlődik, és egy új hozzáadódik, ablakolunk.
:param data: BrainBit-ből érkező nyers adat
"""
global epoch_data_list, yasa_input_list
epoch_data_list_len = int(c.SAMPLING_FREQ * c.EPOCH_LEN / 2)
epoch_data_list.append(data)
if len(epoch_data_list) >= epoch_data_list_len:
yasa_input_list.extend(epoch_data_list)
epoch_data_list = []
if len(yasa_input_list) > (c.YASA_INPUT_LEN) * epoch_data_list_len:
del yasa_input_list[:epoch_data_list_len]
if len(yasa_input_list) > epoch_data_list_len * 10:
raw_object_maker(yasa_input_list)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment