@@ -2271,44 +2271,50 @@ def use_calibrated_mz_values_as_default(
22712271 )
22722272 self ._use_calibrated_mz_values_as_default = use_calibrated_mz_values
22732273
2274-
22752274 def set_cycle (self ) -> None :
22762275 """Set the quad cycle for diaPASEF data.
22772276 """
2278- subframes = self .fragment_frames .drop ("Frame" , axis = 1 )
2279- for max_index in range (1 , len (subframes )):
2280- subframe = subframes .iloc [max_index ]
2281- if subframe .equals (subframes .iloc [0 ]):
2282- break
2283- frames = self .fragment_frames .Frame [max_index ] - 1
2284- frames += (1 - int (self .zeroth_frame ))
2285- sub_cycles = frames - len (np .unique (self .fragment_frames .Frame [:max_index ]))
2277+ ms1_diffs = np .diff (
2278+ np .flatnonzero (self .frames .MsMsType [int (self .zeroth_frame ):]== 0 )
2279+ )
2280+ subcycle_length_count = np .bincount (ms1_diffs )
2281+ if np .all (subcycle_length_count [:- 1 ]!= 0 ):
2282+ raise ValueError ("No consistent subcycle length" )
2283+ subcycle_length = len (subcycle_length_count ) - 1
2284+ max_precursor = len (self .fragment_frames .Precursor .unique ())
2285+ subcycle_count = max_precursor // (subcycle_length - 1 )
2286+ frame_count = subcycle_length * subcycle_count
22862287 cycle = np .zeros (
22872288 (
2288- frames ,
2289+ frame_count ,
22892290 self .scan_max_index ,
22902291 2 ,
22912292 )
22922293 )
2293- # cycle[:] = -1
2294- precursor_frames = np .ones (frames , dtype = np .bool_ )
2294+ precursor_frames = np .ones (frame_count , dtype = np .bool_ )
2295+
2296+ subframes = self .fragment_frames .drop ("Frame" , axis = 1 )
2297+ for max_index in range (1 , len (subframes )):
2298+ subframe = subframes .iloc [max_index ]
2299+ if subframe .equals (subframes .iloc [0 ]):
2300+ break
22952301 for index , row in self .fragment_frames [:max_index ].iterrows ():
22962302 frame = int (row .Frame - self .zeroth_frame )
22972303 scan_begin = int (row .ScanNumBegin )
22982304 scan_end = int (row .ScanNumEnd )
22992305 low_mz = row .IsolationMz - row .IsolationWidth / 2
23002306 high_mz = row .IsolationMz + row .IsolationWidth / 2
2301- # print(low_mz, high_mz)
23022307 cycle [
23032308 frame ,
23042309 scan_begin : scan_end ,
23052310 ] = (low_mz , high_mz )
23062311 precursor_frames [frame ] = False
2312+
23072313 cycle [precursor_frames ] = (- 1 , - 1 )
23082314 cycle = cycle .reshape (
23092315 (
2310- sub_cycles ,
2311- frames // sub_cycles ,
2316+ subcycle_count ,
2317+ subcycle_length ,
23122318 * cycle .shape [1 :]
23132319 )
23142320 )
0 commit comments