def _callback(self, data):
local = copy.deepcopy(data)<EOL>output = dict()<EOL>output['<STR_LIT>'] = local<EOL>if self._roast_start:<EOL><INDENT>td = (now_time() - load_time(self._roast_start))<EOL>output['<STR_LIT:time>'] = ((td.total_seconds() + <NUM_LIT>) / <NUM_LIT>) - <NUM_LIT:1><EOL>self._roast['<STR_LIT>'] = output['<STR_LIT:time>']<EOL>local.update({'<STR_LIT:time>': output['<STR_LIT:time>']})<EOL>output['<STR_LIT>'] = now_time(str=True)<EOL>ct = load_time(now_time(str=True))<EOL>st = load_time(self._roast['<STR_LIT>'])<EOL>self._roast['<STR_LIT>'] = timedelta2period(ct - st)<EOL><DEDENT>if self._roast['<STR_LIT>']:<EOL><INDENT>copied = copy.deepcopy(output)<EOL>self._derive_charge(copied['<STR_LIT>'])<EOL>self._derive_turning_point(copied['<STR_LIT>'])<EOL>self._roast['<STR_LIT>'].append(copied)<EOL>if self._roast['<STR_LIT>']:<EOL><INDENT>delta = local['<STR_LIT>'] - self._roast['<STR_LIT>']['<STR_LIT>']<EOL>output['<STR_LIT>']['<STR_LIT>'] = delta<EOL><DEDENT>self._roast['<STR_LIT>'] = local<EOL><DEDENT>if self._user_callback:<EOL><INDENT>self._log.debug("<STR_LIT>")<EOL>output['<STR_LIT>'] = self._roast<EOL>output['<STR_LIT>'] = self._roasting<EOL>if local.get('<STR_LIT>', True):<EOL><INDENT>self._user_callback(output)<EOL><DEDENT><DEDENT>
Processor callback to clean-up stream data.

        This function provides a hook into the output stream of data from the
        controller processing thread. Hottop readings are saved into a local
        class variable for later saving. If the user has defined a callback, it
        will be called within this private function.

        :param data: Information from the controller process
        :type data: dict
        :returns: None