def METHOD_NAME(self, eventsFilename=None, zstepsFilename=None, pushTaskToCluster=False):
    """Called when the series is finished (ie we have seen)
    the events file"""
    if (not eventsFilename is None) and (os.path.exists(eventsFilename)):
        # Update event Log with events.json
        with open(eventsFilename, 'r') as f:
             events = json.load(f)
        for evt in events:
            name, descr, timestamp = evt
            self.spooler.evtLogger.logEvent(eventName=name, eventDescr=descr, timestamp=float(timestamp))
    if (not zstepsFilename is None) and (os.path.exists(zstepsFilename)):
        #create pseudo events based on our zstep information
        with open(zstepsFilename, 'r') as f:
            zsteps = json.load(f)
        positions = zsteps['PIFOC_positions']
        startFrames = zsteps['Start_Frame_eachZ']
        startTime = self.mdh.getOrDefault('StartTime', 0)
        cycleTime = self.mdh.getOrDefault('Camera.CycleTime', 0.01) #use a default frame length of 10 ms. Not super critical
        for pos, fr in zip(positions, startFrames):
            fakeTime = startTime + cycleTime*fr
            self.spooler.evtLogger.logEvent(eventName='StartAq', eventDescr='%d' % fr, timestamp=fakeTime)
            self.spooler.evtLogger.logEvent(eventName='ProtocolFocus', eventDescr='%d, %3.3f' % (fr, pos),
                                            timestamp=fakeTime)
    self.spooler.StopSpool()
    self.spooler.FlushBuffer()
    if pushTaskToCluster:
        self.mdh.setEntry('Analysis.BGRange', [-32, 0])
        self.mdh.setEntry('Analysis.DebounceRadius', 4)
        self.mdh.setEntry('Analysis.DetectionThreshold', 0.75)
        self.mdh.setEntry('Analysis.FiducialThreshold', 1.8)
        self.mdh.setEntry('Analysis.FitModule', 'AstigGaussGPUFitFR')
        self.mdh.setEntry('Analysis.PCTBackground', 0.25)
        self.mdh.setEntry('Analysis.ROISize', 7.5)
        self.mdh.setEntry('Analysis.StartAt', 32)
        self.mdh.setEntry('Analysis.TrackFiducials', False)
        self.mdh.setEntry('Analysis.subtractBackground', True)
        self.mdh.setEntry('Analysis.GPUPCTBackground', True)
        cluster_filename = 'pyme-cluster://%s/%s' % (clusterIO.local_serverfilter, self.spooler.seriesName)
        HTTPRulePusher.launch_localize(analysisMDH=self.mdh, seriesName=cluster_filename)
    #remove the metadata generator
    MetaDataHandler.provideStartMetadata.remove(self.metadataSource)