         let fissionTime = absTime(CUnsignedShort(firstFissionAlphaTime), cycleEvent:mainCycleTimeEvent)
         let directions: Set<SearchDirection> = [.backward]
         search(directions: directions, startTime: fissionTime, minDeltaTime: recoilMinTime, maxDeltaTime: recoilMaxTime, useCycleTime: true, updateCycleEvent: false) { (event: ISAEvent, time: CUnsignedLongLong, deltaTime: CLongLong, stop: UnsafeMutablePointer<Bool>) in
-            if self.isFront(event, type: .recoil) && self.isEventFrontNearToFirstFissionAlphaFront(event, maxDelta: Int(self.recoilFrontMaxDeltaStrips)) {
-                let energy = self.getEnergy(event, type: .recoil)
-                if energy >= self.recoilFrontMinEnergy && energy <= self.recoilFrontMaxEnergy {
-                    // Сохраняем рекойл только если к нему найден Recoil Back и TOF (если required)
-                    var position = fpos_t()
-                    fgetpos(self.file, &position)
-                    let isRecoilBackFounded = self.findRecoilBack(CUnsignedLongLong(event.param1))
-                    fseek(self.file, Int(position), SEEK_SET)
-                    if (isRecoilBackFounded) {
-                        let isTOFFounded = self.findTOFForRecoil(event, timeRecoil: time)
+            let isRecoil = self.isFront(event, type: .recoil)
+            if isRecoil {
+                let isNear = self.isEventFrontNearToFirstFissionAlphaFront(event, maxDelta: Int(self.recoilFrontMaxDeltaStrips))
+                if isNear {
+                    let energy = self.getEnergy(event, type: .recoil)
+                    if energy >= self.recoilFrontMinEnergy && energy <= self.recoilFrontMaxEnergy {
+                        // Сохраняем рекойл только если к нему найден Recoil Back и TOF (если required)
+                        var position = fpos_t()
+                        fgetpos(self.file, &position)
+                        let t = CUnsignedLongLong(event.param1)
+                        let isRecoilBackFounded = self.findRecoilBack(t)
                         fseek(self.file, Int(position), SEEK_SET)
-                        if (!self.requiredTOF || isTOFFounded) {
-                            self.storeRecoil(event, deltaTime: deltaTime)
-                        }
-                    }
-                }
-            }
+                        if (isRecoilBackFounded) {
+                            let isTOFFounded = self.findTOFForRecoil(event, timeRecoil: t)
+                            fseek(self.file, Int(position), SEEK_SET)
+                            if (!self.requiredTOF || isTOFFounded) {
+                                self.storeRecoil(event, deltaTime: deltaTime)
+                            }
+                        }
+                    }
+                }
+            }
+            
         }
     }
     

                    }
                case 16:
                    if row < gammaPerAct.count {
                        if let energy = getValueFrom(array: gammaPerAct, row: row, key: kEnergy) as? Double {
                            field = String(format: "%.7f", energy)
                        }
                    }
                case 17:
                    if row < gammaPerAct.count {
                        if let deltaTime = getValueFrom(array: gammaPerAct, row: row, key: kDeltaTime) as? CLongLong {
                            field = String(format: "%llu", deltaTime)
                        }
                    }
                case 18:

                switch column {
                case 0:
                    if row < recoilsFrontPerAct.count {
                        if let eventNumberObject = getValueFrom(array: recoilsFrontPerAct, row: row, key: kEventNumber) {
                            field = currentFileEventNumber(eventNumberObject as! CUnsignedLongLong)
                        }
                    }
                case 1:
                    if row < recoilsFrontPerAct.count {
                        if let recoilEnergy = getValueFrom(array: recoilsFrontPerAct, row: row, key: kEnergy) {
                            field = String(format: "%.7f", recoilEnergy as! Double)
                        }
                    }
                case 2:
                    if row < recoilsFrontPerAct.count {
                        if let deltaTimeRecoilFission = getValueFrom(array: recoilsFrontPerAct, row: row, key: kDeltaTime) {
                            field = String(format: "%lld", deltaTimeRecoilFission as! CLongLong)
                        }
                    }
                case 3:
                    if row < tofRealPerAct.count {
                        if let tof = getValueFrom(array: tofRealPerAct, row: row, key: kValue) {
                            let format = "%." + (unitsTOF == .channels ? "0" : "7") + "f"
                            field = String(format: format, tof as! Double)
                        }
                    }
                case 4:
                    if row < tofRealPerAct.count {
                        if let deltaTimeTOFRecoil = getValueFrom(array: tofRealPerAct, row: row, key: kDeltaTime) {
                            field = String(format: "%lld", deltaTimeTOFRecoil as! CLongLong)
                        }
                    }
                case 5:
                    if row < fissionsAlphaFrontPerAct.count {
                        if let eventNumber = getValueFrom(array: fissionsAlphaFrontPerAct, row: row, key: kEventNumber) {
                            field = currentFileEventNumber(eventNumber as! CUnsignedLongLong)
                        }
                    }
                case 6:
                    if row == 0 {
                        var summ: Double = 0
                        for info in fissionsAlphaFrontPerAct {
                            if let energy = (info as? [String: Any])?[kEnergy] {
                                summ += energy as! Double
                            }
                        }
                        field = String(format: "%.7f", summ)
                    }
                case 7:
                    if row < fissionsAlphaFrontPerAct.count {
                        if let energy = getValueFrom(array: fissionsAlphaFrontPerAct, row: row, key: kEnergy) {
                            field = String(format: "%.7f", energy as! Double)
                        }
                    }
                case 8:
                    if row < fissionsAlphaFrontPerAct.count {
                        if let deltaTime = getValueFrom(array: fissionsAlphaFrontPerAct, row: row, key: kDeltaTime) {
                            field = String(format: "%lld", deltaTime as! CLongLong)
                        }
                    }
                case 9:
                    if row < fissionsAlphaFrontPerAct.count {
                        if let info = fissionsAlphaFrontPerAct[row] as? [String: Any], let strip_0_15 = info[kStrip0_15], let encoder = info[kEncoder] {
                            let strip = stripConvertToFormat_1_48(strip_0_15 as! CUnsignedShort, encoder: encoder as! CUnsignedShort)
                            field = String(format: "%d", strip)
                        }
                    }
                case 10:
                    if row < fissionsAlphaBackPerAct.count {
                        if let energy = getValueFrom(array: fissionsAlphaBackPerAct, row: row, key: kEnergy) {
                            field = String(format: "%.7f", energy as! Double)
                        }
                    }
                case 11:
                    if row < fissionsAlphaBackPerAct.count {
                        if let deltaTime = getValueFrom(array: fissionsAlphaBackPerAct, row: row, key: kDeltaTime) {
                            field = String(format: "%lld", deltaTime as! CLongLong)
                        }
                    }
                case 12:
                    if row < fissionsAlphaBackPerAct.count {
                        if let info = fissionsAlphaBackPerAct[row] as? [String: Any], let strip_0_15 = info[kStrip0_15], let encoder = info[kEncoder] {
                            let strip = stripConvertToFormat_1_48(strip_0_15 as! CUnsignedShort, encoder: encoder as! CUnsignedShort)
                            field = String(format: "%d", strip)
                        }
                    }
                case 13:
                    if row < fissionsAlphaWelPerAct.count {
                        if let energy = getValueFrom(array: fissionsAlphaWelPerAct, row: row, key: kEnergy) {
                            field = String(format: "%.7f", energy as! Double)
                        }
                    }
                case 14:
                    if row < fissionsAlphaWelPerAct.count {
                        if let info = fissionsAlphaWelPerAct[row] as? [String: Any], let strip_0_15 = info[kStrip0_15], let encoder = info[kEncoder] {
                            field = String(format: "FWel%d.%d", encoder as! CUnsignedShort, (strip_0_15  as! CUnsignedShort) + 1)
                        }
                    }
                case 15:
