Skip to content

Commit cb0f54c

Browse files
committed
handling empty results for queries
1 parent 4b33646 commit cb0f54c

2 files changed

Lines changed: 37 additions & 11 deletions

File tree

massql/msql_engine.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -235,20 +235,36 @@ def _evalute_variable_query(parsed_dict, input_filename,
235235
# Here we will start with the smallest mass and then go up
236236
masses_considered_df_list = []
237237
if variable_properties["query_ms1"]:
238-
masses_considered_df_list.append(variable_x_ms1_df["mz"])
238+
try:
239+
masses_considered_df_list.append(variable_x_ms1_df["mz"])
240+
except:
241+
pass
239242
if variable_properties["query_ms2"]:
240-
masses_considered_df_list.append(ms2_df["mz"])
243+
try:
244+
masses_considered_df_list.append(ms2_df["mz"])
245+
except:
246+
pass
241247
if variable_properties["query_ms2prec"]:
242-
masses_considered_df_list.append(ms2_df["precmz"])
248+
try:
249+
masses_considered_df_list.append(ms2_df["precmz"])
250+
except:
251+
pass
243252

244253
masses_considered_df = pd.DataFrame()
245-
masses_considered_df["mz"] = pd.concat(masses_considered_df_list)
246-
# NOTE: This might cause bugs, we might consider every mass within every single scan, or at least we could make the tolernace as even smaller than half the max
247-
masses_considered_df["mz_max"] = masses_considered_df["mz"].apply(lambda x: _determine_mz_max(x, variable_properties["ppm_tolerance"], variable_properties["da_tolerance"]))
254+
255+
if len(masses_considered_df_list) > 0:
256+
masses_considered_df["mz"] = pd.concat(masses_considered_df_list)
248257

249-
masses_considered_df = masses_considered_df.sort_values("mz")
250-
masses_list = masses_considered_df.to_dict(orient="records")
258+
# NOTE: This might cause bugs, we might consider every mass within every single scan, or at least we could make the tolernace as even smaller than half the max
259+
masses_considered_df["mz_max"] = masses_considered_df["mz"].apply(lambda x: _determine_mz_max(x, variable_properties["ppm_tolerance"], variable_properties["da_tolerance"]))
260+
261+
masses_considered_df = masses_considered_df.sort_values("mz")
262+
263+
masses_list = masses_considered_df.to_dict(orient="records")
264+
else:
265+
masses_list = []
251266

267+
# Going through the masses
252268
running_max_mz = 0
253269
for masses_obj in tqdm(masses_list):
254270
mz_val = masses_obj["mz"]
@@ -349,8 +365,12 @@ def _evalute_variable_query(parsed_dict, input_filename,
349365
collated_list.append(collated_df)
350366

351367
# Concatenating all the results
352-
collated_df = pd.concat(collated_list)
353-
collated_df = collated_df.reset_index(drop=True)
368+
if len(collated_list) > 0:
369+
collated_df = pd.concat(collated_list)
370+
collated_df = collated_df.reset_index(drop=True)
371+
else:
372+
collated_df = pd.DataFrame()
373+
354374

355375
# Lets try to remove duplicates
356376
try:

tests/test_query.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,10 @@ def test_otherscan():
723723

724724
assert(831 in list(results_df["scan"]))
725725

726+
def debug_query():
727+
query = "QUERY scaninfo(MS2DATA) WHERE MS2PROD=341.28:TOLERANCEMZ=0.01:INTENSITYPERCENT=2 AND MS2PROD=323.27:TOLERANCEMZ=0.01:INTENSITYPERCENT=2 AND MS2PREC=X AND MS2PROD=X-358.2871:TOLERANCEMZ=0.01:INTENSITYPERCENT=2"
728+
729+
msql_engine.process_query(query, "tests/data/GNPS00002_A3_p.mzML")
726730

727731

728732
def main():
@@ -781,7 +785,7 @@ def main():
781785
#test_translator()
782786
#test_ms1_iron_X_changes_intensity()
783787
#test_nocache()
784-
test_topdown()
788+
#test_topdown()
785789
#test_defect()
786790
#test_or_against_iron()
787791
#test_quad_brominated()
@@ -802,6 +806,8 @@ def main():
802806
#test_otherscan_query()
803807
#test_otherscan_iron_query()
804808
#test_otherscan()
809+
810+
debug_query()
805811

806812

807813
if __name__ == "__main__":

0 commit comments

Comments
 (0)