docs: def _create_tables_if_not_exist(
              self):
          """*create the sherlock helper tables if they don't yet exist*
  
          **Key Arguments:**
              # -
  
          **Return:**
              - None
  
          **Usage:**
              ..  todo::
  
                  - add usage info
                  - create a sublime snippet for usage
                  - write a command-line tool for this method
                  - update package tutorial with command-line tool info if needed
  
              .. code-block:: python
  
                  usage code
  
          .. todo ::
  
              - update key arguments values and definitions with defaults
              - update return values and definitions
              - update usage examples and text
              - update docstring text
              - check sublime snippet exists
              - clip any useful text to docs mindmap
              - regenerate the docs and check redendering of this docstring
  
          """
          self.log.debug('starting the ``_create_tables_if_not_exist`` method')
  
          transientTable = self.settings["database settings"][
              "transients"]["transient table"]
          transientTableClassCol = self.settings["database settings"][
              "transients"]["transient classification column"]
          transientTableIdCol = self.settings["database settings"][
              "transients"]["transient primary id column"]
  
          crossmatchTable = "sherlock_crossmatches"
          createStatement = """
  CREATE TABLE IF NOT EXISTS `%(crossmatchTable)s` (
    `transient_object_id` bigint(20) unsigned DEFAULT NULL,
    `catalogue_object_id` varchar(30) DEFAULT NULL,
    `catalogue_table_id` smallint(5) unsigned DEFAULT NULL,
    `separationArcsec` double DEFAULT NULL,
    `northSeparationArcsec` DOUBLE DEFAULT NULL,
    `eastSeparationArcsec` DOUBLE DEFAULT NULL,
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `z` double DEFAULT NULL,
    `scale` double DEFAULT NULL,
    `distance` double DEFAULT NULL,
    `distance_modulus` double DEFAULT NULL,
    `photoZ` double DEFAULT NULL,
    `photoZErr` double DEFAULT NULL,
    `association_type` varchar(45) DEFAULT NULL,
    `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
    `physical_separation_kpc` double DEFAULT NULL,
    `catalogue_object_type` varchar(45) DEFAULT NULL,
    `catalogue_object_subtype` varchar(45) DEFAULT NULL,
    `association_rank` int(11) DEFAULT NULL,
    `catalogue_table_name` varchar(100) DEFAULT NULL,
    `catalogue_view_name` varchar(100) DEFAULT NULL,
    `rank` int(11) DEFAULT NULL,
    `rankScore` double DEFAULT NULL,
    `search_name` varchar(100) DEFAULT NULL,
    `major_axis_arcsec` double DEFAULT NULL,
    `direct_distance` double DEFAULT NULL,
    `direct_distance_scale` double DEFAULT NULL,
    `direct_distance_modulus` double DEFAULT NULL,
    `raDeg` double DEFAULT NULL,
    `decDeg` double DEFAULT NULL,
    `original_search_radius_arcsec` double DEFAULT NULL,
    `catalogue_view_id` int(11) DEFAULT NULL,
    `U` double DEFAULT NULL,
    `UErr` double DEFAULT NULL,
    `B` double DEFAULT NULL,
    `BErr` double DEFAULT NULL,
    `V` double DEFAULT NULL,
    `VErr` double DEFAULT NULL,
    `R` double DEFAULT NULL,
    `RErr` double DEFAULT NULL,
    `I` double DEFAULT NULL,
    `IErr` double DEFAULT NULL,
    `J` double DEFAULT NULL,
    `JErr` double DEFAULT NULL,
    `H` double DEFAULT NULL,
    `HErr` double DEFAULT NULL,
    `K` double DEFAULT NULL,
    `KErr` double DEFAULT NULL,
    `_u` double DEFAULT NULL,
    `_uErr` double DEFAULT NULL,
    `_g` double DEFAULT NULL,
    `_gErr` double DEFAULT NULL,
    `_r` double DEFAULT NULL,
    `_rErr` double DEFAULT NULL,
    `_i` double DEFAULT NULL,
    `_iErr` double DEFAULT NULL,
    `_z` double DEFAULT NULL,
    `_zErr` double DEFAULT NULL,
    `_y` double DEFAULT NULL,
    `_yErr` double DEFAULT NULL,
    `G` double DEFAULT NULL,
    `GErr` double DEFAULT NULL,
    `unkMag` double DEFAULT NULL,
    `unkMagErr` double DEFAULT NULL,
    `dateLastModified` datetime DEFAULT CURRENT_TIMESTAMP,
    `updated` TINYINT NULL DEFAULT 0,
    `classificationReliability` TINYINT NULL DEFAULT NULL,
    `transientAbsMag` DOUBLE NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `key_transient_object_id` (`transient_object_id`),
    KEY `key_catalogue_object_id` (`catalogue_object_id`),
    KEY `idx_separationArcsec` (`separationArcsec`),
    KEY `idx_rank` (`rank`)
  ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
  
  
  CREATE TABLE IF NOT EXISTS `sherlock_classifications` (
    `transient_object_id` bigint(20) NOT NULL,
    `classification` varchar(45) DEFAULT NULL,
    `annotation` TEXT COLLATE utf8_unicode_ci DEFAULT NULL,
    `summary` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL,
    `separationArcsec` DOUBLE DEFAULT NULL,
    `matchVerified` TINYINT NULL DEFAULT NULL,
    `developmentComment` VARCHAR(100) NULL,
    `dateLastModified` datetime DEFAULT CURRENT_TIMESTAMP,
    `dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,
    `updated` varchar(45) DEFAULT '0',
    PRIMARY KEY (`transient_object_id`),
    KEY `key_transient_object_id` (`transient_object_id`),
    KEY `idx_summary` (`summary`),
    KEY `idx_classification` (`classification`)
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  
  """ % locals()
  
          # A FIX FOR MYSQL VERSIONS < 5.6
          triggers = []
          if float(self.dbVersions["transients"][:3]) < 5.6:
              createStatement = createStatement.replace(
                  "`dateLastModified` datetime DEFAULT CURRENT_TIMESTAMP,", "`dateLastModified` datetime DEFAULT NULL,")
              createStatement = createStatement.replace(
                  "`dateCreated` datetime DEFAULT CURRENT_TIMESTAMP,", "`dateCreated` datetime DEFAULT NULL,")
  
              triggers.append("""
  CREATE TRIGGER dateCreated
  BEFORE INSERT ON `%(crossmatchTable)s`
  FOR EACH ROW
  BEGIN
     IF NEW.dateCreated IS NULL THEN
        SET NEW.dateCreated = NOW();
        SET NEW.dateLastModified = NOW();
     END IF;
  END""" % locals())
  
          try:
              writequery(
                  log=self.log,
                  sqlQuery=createStatement,
                  dbConn=self.transientsDbConn,
                  Force=True
              )
          except:
              self.log.info(
                  "Could not create table (`%(crossmatchTable)s`). Probably already exist." % locals())
  
          sqlQuery = u"""
              SHOW TRIGGERS;
          """ % locals()
          rows = readquery(
              log=self.log,
              sqlQuery=sqlQuery,
              dbConn=self.transientsDbConn,
          )
  
          # DON'T ADD TRIGGERS IF THEY ALREADY EXIST
          for r in rows:
              if r["Trigger"] in ("sherlock_classifications_BEFORE_INSERT", "sherlock_classifications_AFTER_INSERT"):
                  return None
  
          triggers.append("""CREATE TRIGGER `sherlock_classifications_BEFORE_INSERT` BEFORE INSERT ON `sherlock_classifications` FOR EACH ROW
  BEGIN
      IF new.classification = "ORPHAN" THEN
          SET new.annotation = "The transient location is not matched against any known catalogued source", new.summary = "No catalogued match";
      END IF;
  END""" % locals())
  
          triggers.append("""CREATE TRIGGER `sherlock_classifications_AFTER_INSERT` AFTER INSERT ON `sherlock_classifications` FOR EACH ROW
  BEGIN
      update `%(transientTable)s` set `%(transientTableClassCol)s` = new.classification
                          where `%(transientTableIdCol)s`  = new.transient_object_id;
  END""" % locals())
  
          for t in triggers:
              try:
                  writequery(
                      log=self.log,
                      sqlQuery=t,
                      dbConn=self.transientsDbConn,
                      Force=True
                  )
              except:
                  self.log.info(
                      "Could not create trigger (`%(crossmatchTable)s`). Probably already exist." % locals())
  
          self.log.debug('completed the ``_create_tables_if_not_exist`` method')
          return None