docs: def getScans(self, modifications=False, fdr=True):
          """
          get a random scan
          """
          if fdr:
              sql = self.base_sql+"WHERE p.ConfidenceLevel >= {} and p.SearchEngineRank <= {} {}".format(self.clvl, self.srank, self.extra)
              try:
                  self.cur.execute(sql)
              except sqlite3.OperationalError:
                  sql = self.base_sql+"WHERE p.ConfidenceLevel >= {} {}".format(self.clvl, self.extra)
                  self.cur.execute(sql)
          else:
              sql = self.base_sql
              self.cur.execute(sql)
          while True:
              # results = self.cur.fetchmany(1000)
              # if not results:
              #     break
              try:
                  tup = self.cur.fetchone()
              except:
                  sys.stderr.write('Error fetching scan:\n{}\n'.format(traceback.format_exc()))
              else:
                  while tup is not None:
                      if tup is None:
                          break
                      if tup[1] is not None:
                          scan = self.parseFullScan(tup, modifications=modifications)
                          scan.spectrumId = tup[3]
                          yield scan
                      try:
                          tup = self.cur.fetchone()
                      except:
                          sys.stderr.write('Error fetching scan:\n{}\n'.format(traceback.format_exc()))
                  if tup is None:
                      break
          yield None