From 6230382b79d34ffe8fc51c923b5f0a3ca0529b1c Mon Sep 17 00:00:00 2001
From: Schneider Leo <leo.schneider@etu.ec-lyon.fr>
Date: Tue, 1 Oct 2024 16:46:56 +0200
Subject: [PATCH] local integration working

---
 local_integration_msms.py | 63 +++++++++++++++++++++++++++++++--------
 1 file changed, 51 insertions(+), 12 deletions(-)

diff --git a/local_integration_msms.py b/local_integration_msms.py
index 2e5723f..17c67ab 100644
--- a/local_integration_msms.py
+++ b/local_integration_msms.py
@@ -27,23 +27,28 @@ def get_df(expe, long: bool = False):
     """
 
 
-    cols = ["RT", "mzarray", "intarray", 'MSlevel','MS1 MZ']
+    cols = ["RT", "mzarray", "intarray", 'MSlevel','MS1_mz_min','MS1_mz_max']
 
-    df = pd.DataFrame(data=((spec.getRT(), *spec.get_peaks(), spec.getMSLevel(), spec.getPrecursors()[0].getMZ() if  spec.getMSLevel() ==2 else None) for spec in expe), columns=cols)
+    df = pd.DataFrame(data=((spec.getRT(), *spec.get_peaks(), spec.getMSLevel(),
+                             spec.getPrecursors()[0].getMZ() - spec.getPrecursors()[0].getIsolationWindowLowerOffset() if  spec.getMSLevel()==2 else None,
+                             spec.getPrecursors()[0].getMZ() + spec.getPrecursors()[0].getIsolationWindowUpperOffset() if  spec.getMSLevel()==2 else None
+                             ) for spec in expe), columns=cols)
 
     if long:
         RT = []
         mz = []
         inty = []
         ms_lv = []
-        ms1_mz = []
+        ms1_mz_min = []
+        ms1_mz_max = []
         for index, row in df.iterrows():
             mz.extend(row['mzarray'])
             inty.extend(row['intarray'])
             RT.extend([row['RT']]*len(row['intarray']))
             ms_lv.extend([row['MSlevel']] * len(row['intarray']))
-            ms1_mz.extend([row['MS1 MZ']] * len(row['intarray']))
-        dico = {"RT": RT, "mz": mz, "inty": inty, "MSlevel": ms_lv, "MS1 MZ": ms1_mz}
+            ms1_mz_min.extend([row['MS1_mz_min']] * len(row['intarray']))
+            ms1_mz_max.extend([row['MS1_mz_max']] * len(row['intarray']))
+        dico = {"RT": RT, "mz": mz, "inty": inty, "MSlevel": ms_lv, "MS1_mz_min": ms1_mz_min, "MS1_mz_max": ms1_mz_max}
         return pd.DataFrame(dico)
 
     else :
@@ -71,13 +76,21 @@ def generate_RT_int_imgs(exp,star_mz,stop_mz):
         plt.savefig('fig/rt_local/{}_to_{}.png'.format(mz_range[i] ,mz_range[i+1]))
         plt.clf()
 
-def integrate_ms_ms(time_start, time_end, df):
-    df_useful = df[(df['MS1 RT']>time_start) & (df['MS1 RT']<time_end) & (df['MSlevel']==2)].reset_index(inplace=True)
-
-    value = 0
-
-
-    return value
+def integrate_ms_ms(df, mz_bin, output='temp.png', display = False):
+    # df_useful = df[(df['MS1 RT']>time_start) & (df['MS1 RT']<time_end) & (df['MSlevel']==2)].reset_index(inplace=True)
+    min_mz, max_mz = min(df['mz']), max(df['mz'])
+    mz_list = np.linspace(min_mz,max_mz,num = int((max_mz-min_mz)//mz_bin)+1)
+    int_list = np.zeros(int((max_mz-min_mz)//mz_bin)+1)
+    for index, row in df.iterrows():
+        int_list[int((row['mz']-min_mz)//mz_bin)]+=row['inty']
+    if display :
+        plt.clf()
+        fig, ax = plt.subplots()
+        ax.plot(mz_list, int_list,linewidth=0.1)
+        ax.set_xlim(200,1800)
+        plt.savefig(output)
+        plt.clf()
+    return mz_list,int_list
 
 if __name__ == "__main__":
     e = oms.MSExperiment()
@@ -97,4 +110,30 @@ if __name__ == "__main__":
     ax.plot(mz_sorted,inty_sorted)
 
     plt.savefig('temp.png')
+
+    #pic d'étude 462-468
+    #mz 750.13
+    df_peak = df[df['MSlevel'] == 2]
+    df_peak = df_peak[750.1 < df_peak['MS1_mz_max']]
+    df_peak = df_peak[750.1 > df_peak['MS1_mz_min']]
+    df_peak = df_peak[465 < df_peak['RT']]
+    df_peak = df_peak[466 > df_peak['RT']]
+
+
+    df_peak2 = df[df['MSlevel'] == 2]
+    df_peak2 = df_peak2[750.1 < df_peak2['MS1_mz_max']]
+    df_peak2 = df_peak2[750.1 > df_peak2['MS1_mz_min']]
+    df_peak2 = df_peak2[463 < df_peak2['RT']]
+    df_peak2 = df_peak2[467 > df_peak2['RT']]
+
+    mz1, inty1 = integrate_ms_ms(df_peak, 1)
+    mz2, inty2 = integrate_ms_ms(df_peak2, 1)
+    plt.clf()
+    fig, ax = plt.subplots()
+    ax.plot(mz1, inty1, linewidth=0.3)
+    ax.plot(mz2, inty2, linewidth=0.3)
+    ax.set_xlim(200, 1800)
+    plt.savefig('spec_combined.png')
+    plt.clf()
+
 #358.1 358.32
\ No newline at end of file
-- 
GitLab