def METHOD_NAME(self, logdata, verbose):
    self.result = TestResult()
    self.result.status = TestResult.StatusType.GOOD
    if logdata.vehicleType != VehicleType.Copter:
        self.result.status = TestResult.StatusType.NA
        return
    for i in ['EV','ATDE','ATUN']:
        r = False
        if not i in logdata.channels:
            self.result.status = TestResult.StatusType.UNKNOWN
            self.result.statusMessage = "No {} log data".format(i)
            r = True
    if r:
        return
    events = filter(lambda x: x[1] in AUTOTUNE_EVENTS, logdata.channels["EV"]["Id"].listData)
    attempts = []
    j = None
    for i in range(0,len(events)):
        line,ev = events[i]
        if ev == AUTOTUNE_INITIALISED:
            if j is not None:
                attempts.append(TestAutotune.AutotuneSession(events[j:i]))
            j = i
    # last attempt
    if j is not None:
        attempts.append(TestAutotune.AutotuneSession(events[j:]))
    for a in attempts:
            # this should not be necessary!
            def class_from_channel(c):
                members = dict({'__init__':lambda x: setattr(x,i,None) for i in logdata.channels[c]})
                cls = type(\
                           'Channel__{:s}'.format(c),
                           (object,),
                           members
                           )
                return cls
            # last wins
            if a.success:
                self.result.status = TestResult.StatusType.GOOD
                s = "[+]"
            elif a.failure:
                self.result.status = TestResult.StatusType.FAIL
                s = "[-]"
            else:
                self.result.status = TestResult.StatusType.UNKNOWN
                s = "[?]"
            s += " Autotune {}-{}\n".format(a.linestart,a.linestop)
            self.result.statusMessage += s
            if verbose:
                linenext = a.linestart + 1
                while linenext < a.linestop:
                    try:
                        line = logdata.channels['ATUN']['RateMax'].getNearestValueFwd(linenext)[1]
                        if line > a.linestop:
                            break
                    except:
                        break
                    atun = class_from_channel('ATUN')()
                    for key in logdata.channels['ATUN']:
                        setattr(atun, key, logdata.channels['ATUN'][key].getNearestValueFwd(linenext)[0])
                    linenext = logdata.channels['ATUN'][key].getNearestValueFwd(linenext)[1] + 1
                    self.result.statusMessage += 'ATUN Axis:{atun.Axis} TuneStep:{atun.TuneStep} RateMin:{atun.RateMin:5.0f} RateMax:{atun.RateMax:5.0f} RPGain:{atun.RPGain:1.4f} RDGain:{atun.RDGain:1.4f} SPGain:{atun.SPGain:1.1f} (@line:{l})\n'.format(l=linenext,s=s, atun=atun)
                self.result.statusMessage += '\n'