Skip to content

Commit

Permalink
Merge pull request #35 from llegregam/Dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
llegregam committed Mar 31, 2023
2 parents f5ea561 + c0f2741 commit 82198ef
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 37 deletions.
4 changes: 1 addition & 3 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Tests
name: Launch tests

on:
pull_request:
Expand All @@ -25,5 +25,3 @@ jobs:
pip install tox tox-gh-actions
- name: Test with tox
run: tox


2 changes: 1 addition & 1 deletion ms_reader/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.3.3"
__version__ = "1.4.0"
8 changes: 7 additions & 1 deletion ms_reader/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ def convert_df(df):
preview = st.form_submit_button("Preview")
submit_export = st.form_submit_button("Export selection")
submit_stat_out = st.form_submit_button("Export stat output")
submit_pca_out = st.form_submit_button("Export stat output for PCA")

if reader.calib_data is not None:
reader.handle_calibration()
Expand Down Expand Up @@ -264,4 +265,9 @@ def convert_df(df):
st.success("The final excel has been generated")
if submit_stat_out:
reader.export_stat_output(destination)
st.success("The output for the stat object has been generated")
st.success("The input for GraphStatR has been generated")
if submit_pca_out:
reader.export_stat_output(destination, pca=True)
if conc_box or lloq_box:
st.warning("**WARNING:** The PCA output only exports areas and ratios")
st.success("The input for GraphStatR has been generated (PCA mode)")
75 changes: 43 additions & 32 deletions ms_reader/extract.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def __init__(self, data, calrep=None, metadata=None, met_class="CM"):
]
self.data = self.data[columns].copy()
self._replace_nf()
self._split_dataframes_test()
self._split_dataframes()

# If metadata file is given, check that the sample names are the
# same as in the data
Expand Down Expand Up @@ -283,19 +283,19 @@ def _split_dataframes(self):

self.calib_data = self.data[
self.data["Sample Type"].str.contains("Cal")
]
].copy()
self.sample_data = self.data[
self.data["Sample Type"].str.contains("Unknown")
]
].copy()
self.qc_data = self.data[
self.data["Sample Type"].str.contains("QC")
]
].copy()
self.anal_blank = self.data[
self.data["Sample Type"].str.contains("Solvent")
]
].copy()
self.data_blank = self.data[
self.data["Sample Type"].str.contains("Matrix Blank")
]
].copy()

def _split_dataframes_test(self):

Expand Down Expand Up @@ -918,11 +918,11 @@ def _output_log(self, destination):
with open(f"{destination}\\file.log", "w") as log:
print(self.stream.getvalue(), file=log)

def export_stat_output(self, path):
def export_stat_output(self, path, pca=False):

dest = Path(path)
dest = dest / "output_for_graphstat.tsv"
stat_out = self._build_stat_output()
stat_out = self._build_stat_output(pca)
stat_out.to_csv(str(dest), sep="\t", index=False, encoding='utf-8-sig')
self._output_log(path)

Expand Down Expand Up @@ -1032,7 +1032,7 @@ def _replace(
if axis == "dataframe":
df.replace(
to_replace=to_replace,
value="NA",
value=value,
inplace=True)
if drop:
try:
Expand All @@ -1046,48 +1046,59 @@ def _replace(
else:
return df

def _build_stat_output(self):
def _build_stat_output(self, pca):

to_out = []
if isinstance(self.c12_areas, pd.DataFrame) and isinstance(
self.c13_areas, pd.DataFrame):
c12_areas = self._replace(self.c12_areas, [0, np.inf, "", "ND"],
"NA", "dataframe")
if pca:
c12_areas = self._replace(self.c12_areas, ["NA", np.inf, "", "ND"], 0, "dataframe")
else:
c12_areas = self._replace(self.c12_areas, [0, np.inf, "", "ND"], "NA", "dataframe")
c12_areas = c12_areas.reset_index()
c12_areas = c12_areas.rename({"Compound": "features"}, axis=1)
c12_areas.insert(1, "type", "C12 area")
to_out.append(c12_areas)
if not self.c13_areas.empty:
c13_areas = self._replace(self.c13_areas, [0, np.inf, "", "ND"],
"NA", "dataframe")
if pca:
c13_areas = self._replace(self.c12_areas, ["NA", np.inf, "", "ND"], 0, "dataframe")
else:
c13_areas = self._replace(self.c13_areas, [0, np.inf, "", "ND"], "NA", "dataframe")
c13_areas = c13_areas.reset_index()
c13_areas = c13_areas.rename({"Compound": "features"}, axis=1)
c13_areas.insert(1, "type", "C13 area")
to_out.append(c13_areas)

if isinstance(self.concentration_table, pd.DataFrame) or isinstance(
self.loq_table, pd.DataFrame):
concentrations = self.loq_table.drop(
["LLOQ", "ULOQ"], axis=1
).copy()
concentrations = self._replace(concentrations, ["<LLOQ", "ND"],
"NA", "dataframe")
concentrations = self._replace(concentrations, [">ULOQ", "ND"],
"NA", "dataframe")
concentrations = self._replace(concentrations, "", "NA",
"dataframe")
concentrations = concentrations.reset_index()
concentrations = concentrations.rename({"Compound": "features"},
axis=1)
concentrations.insert(1, "type", "concentration")
to_out.append(concentrations)
if isinstance(self.ratios, pd.DataFrame):
ratios = self.ratios.reset_index()
ratios = self._replace(ratios, [np.inf, np.nan, "", "ND"], "NA",
"dataframe")
if pca:
ratios = self._replace(ratios, ["NA", np.inf, np.nan, "", "ND"], 0, "dataframe")
else:
ratios = self._replace(ratios, [np.inf, np.nan, "", "ND"], "NA", "dataframe")
ratios = ratios.rename({"Compound": "features"}, axis=1)
ratios.insert(1, "type", "C12/C13 ratios")
to_out.append(ratios)

if not pca:
if isinstance(self.concentration_table, pd.DataFrame) or isinstance(
self.loq_table, pd.DataFrame):
concentrations = self.loq_table.drop(
["LLOQ", "ULOQ"], axis=1
).copy()
concentrations = self._replace(concentrations, ["<LLOQ", "ND"],
"NA", "dataframe")
concentrations = self._replace(concentrations, [">ULOQ", "ND"],
"NA", "dataframe")
concentrations = self._replace(concentrations, "", "NA",
"dataframe")
concentrations = concentrations.reset_index()
concentrations = concentrations.rename({"Compound": "features"},
axis=1)
concentrations.insert(1, "type", "concentration")
to_out.append(concentrations)

# if isinstance(self.quantities)

stat_out = pd.concat(to_out)
stat_out["unit"] = stat_out["unit"].str.replace(
pat="/",
Expand Down

0 comments on commit 82198ef

Please sign in to comment.