### We generated invalid models too. Filter these bad models
import os
os.environ["OMP_NUM_THREADS"] = "1" # export OMP_NUM_THREADS=4
import sys
sys.path.insert(1, "../helperScripts")
import numpy as np
import matplotlib.pyplot as plt
import features as fts
import MOOSEModel as mm
import expcells
import brute_curvefit as bcf
from copy import deepcopy
from tqdm import tqdm
import pandas as pd
from pprint import pprint
from goMultiprocessing import Multiprocessthis_appendsave
import pickle
import json
from scipy import signal
import warnings
Featurelist = [
# "CellID",
# "E_rest_0",
# "Input resistance",
# "Cell capacitance",
# "Time constant",
# "sagV_m50",
# "sagrat_m50",
"AP1_amp_1.5e-10",
# "APp_amp_1.5e-10",
# "AP1_time_1.5e-10",
# "APp_time_1.5e-10",
# "APavgpratio_amp_1.5e-10",
# "AP1_width_1.5e-10",
# "APp_width_1.5e-10",
# "AP1_thresh_1.5e-10",
# "APp_thresh_1.5e-10",
# "AP1_lat_1.5e-10",
# "ISI1_1.5e-10",
# "ISIl_1.5e-10",
# "ISIavg_1.5e-10",
"ISImedian_1.5e-10",
"freq_1.5e-10",
# "Adptn_id_1.5e-10",
# "fAHP_AP1_amp_1.5e-10",
# "DBL_1.5e-10",
# "AbsDBL_1.5e-10",
# "AP1_amp_3e-10",
# "APp_amp_3e-10",
# "AP1_time_3e-10",
# "APp_time_3e-10",
# "APavgpratio_amp_3e-10",
# "AP1_width_3e-10",
# "APp_width_3e-10",
# "AP1_thresh_3e-10",
# "APp_thresh_3e-10",
# "AP1_lat_3e-10",
# "ISI1_3e-10",
# "ISIl_3e-10",
# "ISIavg_3e-10",
# "ISImedian_3e-10",
# "freq_3e-10",
# "Adptn_id_3e-10",
# "fAHP_AP1_amp_3e-10",
# "DBL_3e-10",
# "AbsDBL_3e-10",
# "freq300to150ratio",
]
df_expsummaryactiveF = pd.read_pickle("expsummaryactiveF.pkl")
##############################################################################
class NpEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
if isinstance(obj, np.floating):
return float(obj)
if isinstance(obj, np.ndarray):
return obj.tolist()
return super(NpEncoder, self).default(obj)
##############################################################################
# Load models from the JSON file
impmodels_list = []
file_path = "activemodels_imp_.json"
with open(file_path, "r") as file:
for line in file:
impmodel = json.loads(line)
impmodels_list.append(impmodel)
bnspasmodels_list = []
file_path = "activemodels_pas_.json"
with open(file_path, "r") as file:
for line in file:
bnspasmodel = json.loads(line)
bnspasmodels_list.append(bnspasmodel)
onecomptmodels_list = []
file_path = "activemodels_1compt_.json"
with open(file_path, "r") as file:
for line in file:
onecomptmodel = json.loads(line)
onecomptmodels_list.append(onecomptmodel)
##############################
def ourfunc(model):
modelF = fts.modelfeatures(
model, stim_start=0.5, stim_end=1, refreshKin=False
)
model["Features"] = modelF
return [model]
impmodels_list_ = []
impmodels_list_ = Multiprocessthis_appendsave(
ourfunc, impmodels_list, [impmodels_list_], [], seed=0, npool=100
)
bnspasmodels_list_ = []
bnspasmodels_list_ = Multiprocessthis_appendsave(
ourfunc, bnspasmodels_list, [bnspasmodels_list_], [], seed=0, npool=100
)
onecomptmodels_list_ = []
onecomptmodels_list_ = Multiprocessthis_appendsave(
ourfunc, onecomptmodels_list, [onecomptmodels_list_], [], seed=0, npool=100
)
for i in tqdm(range(len(onecomptmodels_list))):
isvalid=True
for rrow in Featurelist:
if (impmodels_list[i]["Features"][rrow]<df_expsummaryactiveF.loc[rrow, "10th quantile"]) or (impmodels_list[i]["Features"][rrow]>df_expsummaryactiveF.loc[rrow, "90th quantile"]):
isvalid=False
break
if (bnspasmodels_list[i]["Features"][rrow]<df_expsummaryactiveF.loc[rrow, "10th quantile"]) or (bnspasmodels_list[i]["Features"][rrow]>df_expsummaryactiveF.loc[rrow, "90th quantile"]):
isvalid=False
break
if (onecomptmodels_list[i]["Features"][rrow]<df_expsummaryactiveF.loc[rrow, "10th quantile"]) or (onecomptmodels_list[i]["Features"][rrow]>df_expsummaryactiveF.loc[rrow, "90th quantile"]):
isvalid=False
break
if isvalid:
with open('activemodels_imp.json', "a") as file:
json.dump(impmodels_list_[i], file, cls=NpEncoder)
file.write("\n")
with open('activemodels_pas.json', "a") as file:
json.dump(bnspasmodels_list_[i], file, cls=NpEncoder)
file.write("\n")
with open('activemodels_1compt.json', "a") as file:
json.dump(onecomptmodels_list_[i], file, cls=NpEncoder)
file.write("\n")
# with open('activemodels_imp.json', "a") as file:
# for i in range(len(impmodels_list[0])):
# json.dump(impmodels_list[0][i], file, cls=NpEncoder)
# file.write("\n")
# with open('activemodels_pas.json', "a") as file:
# for i in range(len(impmodels_list[0])):
# json.dump(bnspasmodels_list[0][i], file, cls=NpEncoder)
# file.write("\n")
# with open('activemodels_1compt.json', "a") as file:
# for i in range(len(impmodels_list[0])):
# json.dump(onecomptmodels_list[0][i], file, cls=NpEncoder)
# file.write("\n")