Source code for ipfx.bin.run_qc

#!/usr/bin/python
import logging
from ipfx.stimulus import StimulusOntology
import ipfx.qc_feature_evaluator as qcp
import argschema as ags
from ipfx._schemas import QcParameters
import allensdk.core.json_utilities as ju
import ipfx.sweep_props as sp
import pandas as pd
import ipfx.logging_utils as lu


[docs]def run_qc(stimulus_ontology_file, cell_features, sweep_features, qc_criteria): """ Parameters ---------- stimulus_ontology_file : str ontology file name cell_features: dict cell features sweep_features : list of dicts sweep features qc_criteria: dict qc criteria Returns ------- dict containing state of the cell and sweeps """ lu.log_pretty_header("Perform QC checks", level=1) if not stimulus_ontology_file: stimulus_ontology_file = StimulusOntology.DEFAULT_STIMULUS_ONTOLOGY_FILE logging.info(F"Ontology is not provided, using default {StimulusOntology.DEFAULT_STIMULUS_ONTOLOGY_FILE}") ont = StimulusOntology(ju.read(stimulus_ontology_file)) cell_state, sweep_states = qcp.qc_experiment(ont, cell_features, sweep_features, qc_criteria) qc_summary(sweep_features, sweep_states, cell_features, cell_state) return dict(cell_state=cell_state, sweep_states=sweep_states)
[docs]def qc_summary(sweep_features, sweep_states, cell_features, cell_state): """ Output QC summary Parameters ---------- sweep_features: list of dicts sweep_states: list of dict cell_features: list of dicts cell_state: dict Returns ------- """ lu.log_pretty_header("QC Summary:",level=2) logging.info("Cell State:") for k,v in cell_state.items(): logging.info("%s:%s" % (k,v)) logging.info("Sweep States:") sp.assign_sweep_states(sweep_states, sweep_features) sweep_table = pd.DataFrame(sweep_features) if sweep_features: for stimulus_name, sg_table in sweep_table.groupby("stimulus_name"): passed_sweep_numbers = sg_table[sg_table.passed == True].sweep_number.sort_values().values failed_sweep_numbers = sg_table[sg_table.passed == False].sweep_number.sort_values().values logging.info("{} sweeps passed: {}, failed {}".format(stimulus_name, passed_sweep_numbers,failed_sweep_numbers)) else: logging.warning("No current clamp sweeps available for QC")
[docs]def main(): """ Usage: python run_qc.py --input_json INPUT_JSON --output_json OUTPUT_JSON """ module = ags.ArgSchemaParser(schema_type=QcParameters) output = run_qc(module.args.get("stimulus_ontology_file", None), module.args["cell_features"], module.args["sweep_features"], module.args["qc_criteria"]) ju.write(module.args["output_json"], output)
if __name__ == "__main__": main()