code: def run(self, *args, **kwargs):
          
          b_status            = True
          d_pftreeRun         = {}
          d_inputAnalysis     = {}
          d_env               = self.env_check()
          b_timerStart        = False
  
          self.dp.qprint(
                  "\tStarting pfdicom run... (please be patient while running)", 
                  level = 1
                  )
  
          for k, v in kwargs.items():
              if k == 'timerStart':   b_timerStart    = bool(v)
  
          if b_timerStart:
              other.tic()
  
          if d_env['status']:
              d_pftreeRun = self.pf_tree.run(timerStart = False)
          else:
              b_status    = False 
  
          str_startDir    = os.getcwd()
          os.chdir(self.str_inputDir)
          if b_status:
              if len(self.str_extension):
                  d_inputAnalysis = self.pf_tree.tree_process(
                                  inputReadCallback       = None,
                                  analysisCallback        = self.filelist_prune,
                                  outputWriteCallback     = None,
                                  applyResultsTo          = 'inputTree',
                                  applyKey                = 'l_file',
                                  persistAnalysisResults  = True
                  )
          os.chdir(str_startDir)
  
          d_ret = {
              'status':           b_status and d_pftreeRun['status'],
              'd_env':            d_env,
              'd_pftreeRun':      d_pftreeRun,
              'd_inputAnalysis':  d_inputAnalysis,
              'runTime':          other.toc()
          }
  
          if self.b_json:
              self.ret_dump(d_ret, **kwargs)
  
          self.dp.qprint('\tReturning from pfdicom run...', level = 1)
  
          return d_ret
docs: The run method is merely a thin shim down to the 
          embedded pftree run method.