From e6379d618bea8b6b0e96975b09bc5a2eb19afe26 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 8 Aug 2024 02:37:51 +0000 Subject: [PATCH] Deployed e1d652a to v0.3.1 with MkDocs 1.6.0 and mike 2.1.2 --- v0.3.1/404.html | 110 ++ v0.3.1/api/engines/index.html | 1095 +++++++++++++++++++ v0.3.1/api/index.html | 816 ++++++++++++++ v0.3.1/assets/_mkdocstrings.css | 119 ++ v0.3.1/assets/images/social/api/engines.png | Bin 0 -> 20535 bytes v0.3.1/assets/images/social/api/index.png | Bin 0 -> 22649 bytes v0.3.1/index.html | 110 ++ v0.3.1/installation/index.html | 128 +++ v0.3.1/objects.inv | Bin 0 -> 182 bytes v0.3.1/search/search_index.json | 2 +- v0.3.1/sitemap.xml | 10 + v0.3.1/sitemap.xml.gz | Bin 231 -> 245 bytes 12 files changed, 2389 insertions(+), 1 deletion(-) create mode 100644 v0.3.1/api/engines/index.html create mode 100644 v0.3.1/api/index.html create mode 100644 v0.3.1/assets/images/social/api/engines.png create mode 100644 v0.3.1/assets/images/social/api/index.png create mode 100644 v0.3.1/objects.inv diff --git a/v0.3.1/404.html b/v0.3.1/404.html index d622d65..2ac5935 100644 --- a/v0.3.1/404.html +++ b/v0.3.1/404.html @@ -402,6 +402,116 @@ + + + + + + + + + + + + + +
  • + + + + + + + + + + +
  • + + + + diff --git a/v0.3.1/api/engines/index.html b/v0.3.1/api/engines/index.html new file mode 100644 index 0000000..398249e --- /dev/null +++ b/v0.3.1/api/engines/index.html @@ -0,0 +1,1095 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Engines - camlhmp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + Skip to content + + +
    +
    + +
    + + + + + + + + +
    + + + + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    + +
    + + + + + + + + + + + + + +

    Engines

    +

    Blast

    + + +
    + + + + +
    + +

    Query sequences against a input subject using BLASTN.

    + + +

    Parameters:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionDefault
    engine + str + +
    +

    The BLAST engine to use

    +
    +
    + required +
    subject + str + +
    +

    The subject database (input)

    +
    +
    + required +
    query + str + +
    +

    The query file (targets)

    +
    +
    + required +
    min_pident + float + +
    +

    The minimum percent identity to count a hit

    +
    +
    + required +
    min_coverage + int + +
    +

    The minimum percent coverage to count a hit

    +
    +
    + required +
    + + +

    Returns:

    + + + + + + + + + + + + + +
    Name TypeDescription
    list + list + +
    +

    The parsed BLAST results, raw blast results, and stderr

    +
    +
    + +
    + Source code in camlhmp/engines/blast.py +
    24
    +25
    +26
    +27
    +28
    +29
    +30
    +31
    +32
    +33
    +34
    +35
    +36
    +37
    +38
    +39
    +40
    +41
    +42
    +43
    +44
    +45
    +46
    +47
    +48
    +49
    +50
    +51
    +52
    +53
    +54
    +55
    +56
    +57
    +58
    +59
    +60
    +61
    def run_blast(engine: str, subject: str, query: str, min_pident: float, min_coverage: int) -> list:
    +    """
    +    Query sequences against a input subject using BLASTN.
    +
    +    Args:
    +        engine (str): The BLAST engine to use
    +        subject (str): The subject database (input)
    +        query (str): The query file (targets)
    +        min_pident (float): The minimum percent identity to count a hit
    +        min_coverage (int): The minimum percent coverage to count a hit
    +
    +    Returns:
    +        list: The parsed BLAST results, raw blast results, and stderr
    +    """
    +    outfmt = " ".join(BLASTN_COLS)
    +    cat_type = "zcat" if str(subject).endswith(".gz") else "cat"
    +    qcov_hsp_perc = f"-qcov_hsp_perc {min_coverage}" if min_coverage else ""
    +    perc_identity = f"-perc_identity {min_pident}" if min_pident and engine != "tblastn" else ""
    +    stdout, stderr = execute(
    +        f"{cat_type} {subject} | {engine} -query {query} -subject - -outfmt '6 {outfmt}' {qcov_hsp_perc} {perc_identity}",
    +        capture=True,
    +    )
    +
    +    # Convert BLAST results to a list of dicts
    +    results = []
    +    target_hits = []
    +    for line in stdout.split("\n"):
    +        if line == "":
    +            continue
    +        cols = line.split("\t")
    +        results.append(dict(zip(BLASTN_COLS, cols)))
    +        target_hits.append(cols[0])
    +
    +    if not results:
    +        # Create an empty dict if no results are found
    +        results.append(dict(zip(BLASTN_COLS, ["NO_HITS"] * len(BLASTN_COLS))))
    +
    +    return [target_hits, results, stderr]
    +
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    +
    + + + +
    + + + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v0.3.1/api/index.html b/v0.3.1/api/index.html new file mode 100644 index 0000000..473c841 --- /dev/null +++ b/v0.3.1/api/index.html @@ -0,0 +1,816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Overview - camlhmp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + + + +
    + + + + + + + +
    + +
    + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    + +
    + + + + + + + + + + + + + +

    Overview

    + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v0.3.1/assets/_mkdocstrings.css b/v0.3.1/assets/_mkdocstrings.css index e69de29..85449ec 100644 --- a/v0.3.1/assets/_mkdocstrings.css +++ b/v0.3.1/assets/_mkdocstrings.css @@ -0,0 +1,119 @@ + +/* Avoid breaking parameter names, etc. in table cells. */ +.doc-contents td code { + word-break: normal !important; +} + +/* No line break before first paragraph of descriptions. */ +.doc-md-description, +.doc-md-description>p:first-child { + display: inline; +} + +/* Max width for docstring sections tables. */ +.doc .md-typeset__table, +.doc .md-typeset__table table { + display: table !important; + width: 100%; +} + +.doc .md-typeset__table tr { + display: table-row; +} + +/* Defaults in Spacy table style. */ +.doc-param-default { + float: right; +} + +/* Backward-compatibility: docstring section titles in bold. */ +.doc-section-title { + font-weight: bold; +} + +/* Symbols in Navigation and ToC. */ +:root, +[data-md-color-scheme="default"] { + --doc-symbol-attribute-fg-color: #953800; + --doc-symbol-function-fg-color: #8250df; + --doc-symbol-method-fg-color: #8250df; + --doc-symbol-class-fg-color: #0550ae; + --doc-symbol-module-fg-color: #5cad0f; + + --doc-symbol-attribute-bg-color: #9538001a; + --doc-symbol-function-bg-color: #8250df1a; + --doc-symbol-method-bg-color: #8250df1a; + --doc-symbol-class-bg-color: #0550ae1a; + --doc-symbol-module-bg-color: #5cad0f1a; +} + +[data-md-color-scheme="slate"] { + --doc-symbol-attribute-fg-color: #ffa657; + --doc-symbol-function-fg-color: #d2a8ff; + --doc-symbol-method-fg-color: #d2a8ff; + --doc-symbol-class-fg-color: #79c0ff; + --doc-symbol-module-fg-color: #baff79; + + --doc-symbol-attribute-bg-color: #ffa6571a; + --doc-symbol-function-bg-color: #d2a8ff1a; + --doc-symbol-method-bg-color: #d2a8ff1a; + --doc-symbol-class-bg-color: #79c0ff1a; + --doc-symbol-module-bg-color: #baff791a; +} + +code.doc-symbol { + border-radius: .1rem; + font-size: .85em; + padding: 0 .3em; + font-weight: bold; +} + +code.doc-symbol-attribute { + color: var(--doc-symbol-attribute-fg-color); + background-color: var(--doc-symbol-attribute-bg-color); +} + +code.doc-symbol-attribute::after { + content: "attr"; +} + +code.doc-symbol-function { + color: var(--doc-symbol-function-fg-color); + background-color: var(--doc-symbol-function-bg-color); +} + +code.doc-symbol-function::after { + content: "func"; +} + +code.doc-symbol-method { + color: var(--doc-symbol-method-fg-color); + background-color: var(--doc-symbol-method-bg-color); +} + +code.doc-symbol-method::after { + content: "meth"; +} + +code.doc-symbol-class { + color: var(--doc-symbol-class-fg-color); + background-color: var(--doc-symbol-class-bg-color); +} + +code.doc-symbol-class::after { + content: "class"; +} + +code.doc-symbol-module { + color: var(--doc-symbol-module-fg-color); + background-color: var(--doc-symbol-module-bg-color); +} + +code.doc-symbol-module::after { + content: "mod"; +} + +.doc-signature .autorefs { + color: inherit; + border-bottom: 1px dotted currentcolor; +} diff --git a/v0.3.1/assets/images/social/api/engines.png b/v0.3.1/assets/images/social/api/engines.png new file mode 100644 index 0000000000000000000000000000000000000000..0798247ca771441bf8b242dafeaadbe335da5aa9 GIT binary patch literal 20535 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 literal 0 HcmV?d00001 diff --git a/v0.3.1/assets/images/social/api/index.png b/v0.3.1/assets/images/social/api/index.png new file mode 100644 index 0000000000000000000000000000000000000000..8700e2309ffcde91f6b3ca56198d82b6a4e01560 GIT binary patch literal 22649 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 literal 0 HcmV?d00001 diff --git a/v0.3.1/index.html b/v0.3.1/index.html index 41fbe5a..20f0b5d 100644 --- a/v0.3.1/index.html +++ b/v0.3.1/index.html @@ -799,6 +799,116 @@ + + + + + + + + + + + + + +
  • + + + + + + + + + + +
  • + + + + diff --git a/v0.3.1/installation/index.html b/v0.3.1/installation/index.html index 6126992..be4b904 100644 --- a/v0.3.1/installation/index.html +++ b/v0.3.1/installation/index.html @@ -18,6 +18,8 @@ + + @@ -799,6 +801,116 @@ + + + + + + + + + + + + + +
  • + + + + + + + + + + +
  • + + + + @@ -1886,6 +1998,22 @@

    License + + + + diff --git a/v0.3.1/objects.inv b/v0.3.1/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..52fd48fef74d9c5a8f5147a49eb6423a03907de1 GIT binary patch literal 182 zcmY#Z2rkIT%&Sny%qvUHE6FdaR47X=D$dN$Q!wIERtPA{&q_@$u~JA*%+1NjEdUCI zL8Pq|4D^5yC=im7s!)`go0yrGl3JvYpQccfky)&emYI{P0Hl-ia|?=6i;GiJ6iSOT z^U@Wnax#ufjsW)Uu}wU@j;Px3bU b{8@xYREXQ?>q4!sQ$s~cb}}$*70U+z9rQ$W literal 0 HcmV?d00001 diff --git a/v0.3.1/search/search_index.json b/v0.3.1/search/search_index.json index b78e643..971710c 100644 --- a/v0.3.1/search/search_index.json +++ b/v0.3.1/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Introduction","text":""},{"location":"#camlhmp","title":"camlhmp","text":"

    \ud83d\udc2a camlhmp \ud83d\udc2a - Classification through yAML Heuristic Mapping Protocol

    camlhmp is a tool for generating organism typing tools from YAML schemas. The idea came up from discussions with Tim Read about the need for a tool that would allow researchers to more easily define typing schemas for their organisms of interest. YAML seemed like a a nice format for this due to its simplicity and readability.

    camlhmp is under active development, and any feedback is appreciated.

    "},{"location":"#purpose","title":"Purpose","text":"

    The primary purpose of camlhmp is to provide a framework that enables researchers to independently define typing schemas for their organisms of interest using YAML. This facilitates the management and analysis biological data, no matter the researchers experience level.

    camlhmp does not supply any pre-defined typing schemas. Instead, it provides researchers with the tools necessary tools to create and maintain their own schemas. This I believe will ensure the schemas remain up to date with the latest developments in its respective field.

    Additionally, this really arose from a practical need to streamline my maintenance of multiple organism typing tools. Long-term maintenance of these tools is a challenge, and I think camlhmp will help me to keep them up-to-date and consistent.

    "},{"location":"#installation","title":"Installation","text":"

    camlhmp will be made available through PyPI and Bioconda. For now, you can install it from the GitHub repository with the following command:

    conda create -n camlhmp -c conda-forge -c bioconda camlhmp\nconda activate camlhmp\ncamlhmp\n
    "},{"location":"#yaml-schema-structure","title":"YAML Schema Structure","text":"

    The schema structure is designed to be simple and intuitive. Here is a basic skeleton of the expected schema structure:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"\"          # unique identifier for the schema\n  name: \"\"        # name of the schema\n  description: \"\" # description of the schema\n  version: \"\"     # version of the schema\n  curators: []    # A list of curators of the schema\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: \"\" # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets: []\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"\"     # name of the alias\n    targets: []  # list of targets that are part of the alias\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"\"     # name of the profile\n    targets: []  # list of targets (can use aliases) that are part of the profile\n    excludes: [] # list of targets (or aliases) that will automatically fail the type\n

    From this schema we have a few sections:

    • metadata: general information about the schema
    • engine: computational requirements for sequence analysis
    • targets: lists the sequence targets such as genes, proteins, or markers
    • aliases: groups multiple targets under a common name for easier reference
    • profiles: defines combinations of targets and aliases to form typing profiles

    Within each section there are additional fields that will be descibed in the next sections.

    "},{"location":"#metadata","title":"metadata","text":"

    The metadata section provides general information about the schema. This includes:

    Field Type Description id string A unique identifier for the schema name string The name of the schema description string A brief description of the schema version string The version of the schema curators list A list of curators of the schema"},{"location":"#engine","title":"engine","text":"

    The engine section specifies the computational tools used for sequence analysis. Currently only one tool can be specified, and only blastn is supported.

    Field Type Description tool string The tool used to generate the data"},{"location":"#targets","title":"targets","text":"

    The targets section lists the specific sequence targets such as genes, proteins, or markers that the schema will analyze. These should be included in the associated sequence query data.

    Field Type Description targets list A list of targets to be analyzed"},{"location":"#aliases","title":"aliases","text":"

    aliases are a convenient way to group multiple targets under a common name for easier reference.

    Field Type Description name string The name of the alias targets list A list of targets that are part of the alias"},{"location":"#types","title":"types","text":"

    The types section defines specific combinations of targets and aliases to form distinct types.

    Field Type Description name string The name of the profile targets list A list of targets (or aliases) that are part of the type excludes list A list of targets (or aliases) that will automatically fail the type"},{"location":"#example-schema-partial-sccmec-typing","title":"Example Schema: Partial SCCmec Typing","text":"

    Here is an example of a partial schema for SCCmec typing:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"sccmec_partial\"                                # unique identifier for the schema\n  name: \"SCCmec Typing\"                              # name of the schema\n  description: \"A partial schema for SCCmec typing\"  # description of the schema\n  version: \"0.0.1\"                                     # version of the schema\n  curators:                                          # A list of curators of the schema\n    - \"Robert Petit\"\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: blastn # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets:\n  - \"ccrA1\"\n  - \"ccrA2\"\n  - \"ccrA3\"\n  - \"ccrB1\"\n  - \"ccrB2\"\n  - \"ccrB3\"\n  - \"IS431\"\n  - \"IS1272\"\n  - \"mecA\"\n  - \"mecI\"\n  - \"mecR1\"\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"ccr Type 1\"           # name of the alias\n    targets: [\"ccrA1\", \"ccrB1\"]  # list of targets that are part of the alias\n  - name: \"ccr Type 2\"\n    targets: [\"ccrA2\", \"ccrB2\"]\n  - name: \"ccr Type 3\"\n    targets: [\"ccrA3\", \"ccrB3\"]\n  - name: \"mec Class A\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"mecI\"]\n  - name: \"mec Class B\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"IS1272\"]\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"I\"          # name of the profile\n    targets:           # list of targets (can use aliases) that are part of the profile\n      - \"ccr Type 1\"\n      - \"mec Class B\"\n  - name: \"II\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class A\"\n  - name: \"III\"\n    targets:\n      - \"ccr Type 3\"\n      - \"mec Class A\"\n  - name: \"IV\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class B\"\n

    From this schema, camlhmp can generate a typing tool that can be used to analyze input assemblies. This is only a partial schema, as there are many more SCCmec types and subtypes. But using this schema it should be straight forward to add additional targets and profiles.

    "},{"location":"#camlhmp-blast","title":"camlhmp-blast","text":"

    camlhmp-blast is a command that allows users to type their samples using a provided schema with BLAST algorithms.

    "},{"location":"#usage","title":"Usage","text":"
     \ud83d\udc2a camlhmp-blast \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST                          \n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502    --version       -V           Show the version and exit.                                  \u2502\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --help                       Show this message and exit.                                 |\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#output-files","title":"Output Files","text":"

    camlhmp-blast will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"#example-prefixtsv","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets schema  schema_version  camlhmp_version params  comment\ncamlhmp I   ccrA1,ccrB1,IS431,IS1272,mecA,mecR1 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#example-prefixblasttsv","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nccrA1   AB033763.2  100.000 100 1350    39332   1350    1350    0   0   1   1350    23692   25041   0.0 2494\nccrB1   AB033763.2  100.000 100 1152    39332   1152    1152    0   0   1   1152    25063   26214   0.0 2128\nIS1272  AB033763.2  100.000 100 1659    39332   1659    1659    0   0   1   1659    28423   30081   0.0 3064\nmecR1   AB033763.2  100.000 100 987 39332   987 987 0   0   1   987 30304   31290   0.0 1823\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nIS431   AB033763.2  99.873  100 790 39332   790 789 1   0   1   790 35958   36747   0.0 1454\nIS431   AB033763.2  100.000 100 792 39332   792 792 0   0   1   792 35957   36748   0.0 1463\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"#example-prefixdetailstsv","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing schema  schema_version  camlhmp_version params  comment\ncamlhmp I   True    ccrA1,ccrB1,IS431,mecA,mecR1,IS1272     sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp II  False   IS431,mecA,mecR1    ccrA2,ccrB2,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp III False   IS431,mecA,mecR1    ccrA3,ccrB3,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp IV  False   IS431,mecA,mecR1,IS1272 ccrA2,ccrB2 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#camlhmp-blast-region","title":"camlhmp-blast-region","text":"

    camlhmp-blast-region is a command that allows users to search for full regions of interest. It is nearly identical to camlhmp-blast, but instead of many smaller targets the idea is to instead look at full regions such as O-antigens and or similar features.

    "},{"location":"#usage_1","title":"Usage","text":"
     Usage: camlhmp-blast-region [OPTIONS]\n\n \ud83d\udc2a camlhmp-blast-region \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST against\n larger genomic regions\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --version       -V           Print schema and camlhmp version                            \u2502\n\u2502    --help                       Show this message and exit.                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#output-files_1","title":"Output Files","text":"

    camlhmp-blast-region will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"#example-prefixtsv_1","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O5  O2  100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#example-prefixblasttsv_1","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6874509 6875103 0.0 717\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6920911 6921505 0.0 717\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6872864 6873403 0.0 680\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6919266 6919805 0.0 680\nO1  NZ_PSQS01000003.1   97.972  12  18368   6935329 1972    1932    38  2   16398   18368   6620589 6618619 0.0 3419\nO1  NZ_PSQS01000003.1   96.296  12  18368   6935329 324 312 11  1   1   323 6641914 6641591 1.68e-149   531\nO2  NZ_PSQS01000003.1   99.841  100 23303   6935329 23303   23266   30  1   1   23303   6618619 6641914 0.0 42821\nO2  NZ_PSQS01000003.1   86.935  100 23303   6935329 1240    1078    130 12  2542    3749    3864567 3863328 0.0 1363\nO3  NZ_PSQS01000003.1   94.442  13  20210   6935329 2393    2260    114 15  1   2386    6618619 6620999 0.0 3664\nO3  NZ_PSQS01000003.1   99.308  13  20210   6935329 289 287 2   0   19922   20210   6641626 6641914 3.09e-147   523\nO4  NZ_PSQS01000003.1   97.448  14  15279   6935329 1842    1795    47  0   1   1842    6618619 6620460 0.0 3142\nO4  NZ_PSQS01000003.1   99.638  14  15279   6935329 276 275 1   0   15004   15279   6641639 6641914 8.46e-142   505\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"#example-prefixdetailstsv_1","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O1  False       O1  12.49   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O2  False   O2  wzyB    100.00,0.00 1,0 pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O3  False       O3  1.43    1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O4  False       O4  13.86   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O5  True    O2      100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#camlhmp-extract","title":"camlhmp-extract","text":"

    camlhmp-extract is a command that allows users to extract targets from a set of references. You should think of this script as a \"helper\" script for curators. It allows you to maintain a TSV file with the targets and their positions in the reference sequences. camlhmp-extract will then extract the targets from the reference sequences and write them to a FASTA file.

    "},{"location":"#usage_2","title":"Usage","text":"
     \ud83d\udc2a camlhmp-extract \ud83d\udc2a - Extract typing targets from a set of reference sequences\n\n\u256d\u2500 Required Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --path     -i  TEXT  The path where input files are located [required]                   \u2502\n\u2502 *  --targets  -t  TEXT  A TSV of targets to extract in FASTA format [required]              \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Additional Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --outdir   -o  TEXT  The path to save the extracted targets                                 \u2502\n\u2502 --verbose            Increase the verbosity of output                                       \u2502\n\u2502 --silent             Only critical errors will be printed                                   \u2502\n\u2502 --version  -V        Show the version and exit.                                             \u2502\n\u2502 --help               Show this message and exit.                                            \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#citations","title":"Citations","text":"

    If you make use of this tool, please cite the following:

    • camlhmp Petit III RA camlhmp: Classification through yAML Heuristic Mapping Protocol (GitHub)

    • BLAST__ Basic Local Alignment Search Tool _Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL BLAST+: architecture and applications. BMC Bioinformatics 10, 421 (2009)

    "},{"location":"#naming","title":"Naming","text":"

    If I'm being honest, I really wanted to name a tool with \"camel\" in it because they are my wife's favorite animal\ud83d\udc2a and they also remind me of my friends in Oman!

    Once it was decided YAML was going to be the format for defining schemas, I quickly stumbled on \"Classification through YAML\" and quickly found out I wasn't the only once who thought of \"CAML\". But, no matter, it was decided it would be something with \"CAML\", then Tim Read came with the save and suggested \"Heuristic Mapping Protocol\". So, here we are - camlhmp!

    "},{"location":"#license","title":"License","text":"

    I'm not a lawyer and MIT has always been my go-to license. So, MIT it is!

    "},{"location":"installation/","title":"Installation","text":""},{"location":"installation/#camlhmp","title":"camlhmp","text":"

    \ud83d\udc2a camlhmp \ud83d\udc2a - Classification through yAML Heuristic Mapping Protocol

    camlhmp is a tool for generating organism typing tools from YAML schemas. The idea came up from discussions with Tim Read about the need for a tool that would allow researchers to more easily define typing schemas for their organisms of interest. YAML seemed like a a nice format for this due to its simplicity and readability.

    camlhmp is under active development, and any feedback is appreciated.

    "},{"location":"installation/#purpose","title":"Purpose","text":"

    The primary purpose of camlhmp is to provide a framework that enables researchers to independently define typing schemas for their organisms of interest using YAML. This facilitates the management and analysis biological data, no matter the researchers experience level.

    camlhmp does not supply any pre-defined typing schemas. Instead, it provides researchers with the tools necessary tools to create and maintain their own schemas. This I believe will ensure the schemas remain up to date with the latest developments in its respective field.

    Additionally, this really arose from a practical need to streamline my maintenance of multiple organism typing tools. Long-term maintenance of these tools is a challenge, and I think camlhmp will help me to keep them up-to-date and consistent.

    "},{"location":"installation/#installation","title":"Installation","text":"

    camlhmp will be made available through PyPI and Bioconda. For now, you can install it from the GitHub repository with the following command:

    conda create -n camlhmp -c conda-forge -c bioconda camlhmp\nconda activate camlhmp\ncamlhmp\n
    "},{"location":"installation/#yaml-schema-structure","title":"YAML Schema Structure","text":"

    The schema structure is designed to be simple and intuitive. Here is a basic skeleton of the expected schema structure:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"\"          # unique identifier for the schema\n  name: \"\"        # name of the schema\n  description: \"\" # description of the schema\n  version: \"\"     # version of the schema\n  curators: []    # A list of curators of the schema\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: \"\" # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets: []\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"\"     # name of the alias\n    targets: []  # list of targets that are part of the alias\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"\"     # name of the profile\n    targets: []  # list of targets (can use aliases) that are part of the profile\n    excludes: [] # list of targets (or aliases) that will automatically fail the type\n

    From this schema we have a few sections:

    • metadata: general information about the schema
    • engine: computational requirements for sequence analysis
    • targets: lists the sequence targets such as genes, proteins, or markers
    • aliases: groups multiple targets under a common name for easier reference
    • profiles: defines combinations of targets and aliases to form typing profiles

    Within each section there are additional fields that will be descibed in the next sections.

    "},{"location":"installation/#metadata","title":"metadata","text":"

    The metadata section provides general information about the schema. This includes:

    Field Type Description id string A unique identifier for the schema name string The name of the schema description string A brief description of the schema version string The version of the schema curators list A list of curators of the schema"},{"location":"installation/#engine","title":"engine","text":"

    The engine section specifies the computational tools used for sequence analysis. Currently only one tool can be specified, and only blastn is supported.

    Field Type Description tool string The tool used to generate the data"},{"location":"installation/#targets","title":"targets","text":"

    The targets section lists the specific sequence targets such as genes, proteins, or markers that the schema will analyze. These should be included in the associated sequence query data.

    Field Type Description targets list A list of targets to be analyzed"},{"location":"installation/#aliases","title":"aliases","text":"

    aliases are a convenient way to group multiple targets under a common name for easier reference.

    Field Type Description name string The name of the alias targets list A list of targets that are part of the alias"},{"location":"installation/#types","title":"types","text":"

    The types section defines specific combinations of targets and aliases to form distinct types.

    Field Type Description name string The name of the profile targets list A list of targets (or aliases) that are part of the type excludes list A list of targets (or aliases) that will automatically fail the type"},{"location":"installation/#example-schema-partial-sccmec-typing","title":"Example Schema: Partial SCCmec Typing","text":"

    Here is an example of a partial schema for SCCmec typing:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"sccmec_partial\"                                # unique identifier for the schema\n  name: \"SCCmec Typing\"                              # name of the schema\n  description: \"A partial schema for SCCmec typing\"  # description of the schema\n  version: \"0.0.1\"                                     # version of the schema\n  curators:                                          # A list of curators of the schema\n    - \"Robert Petit\"\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: blastn # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets:\n  - \"ccrA1\"\n  - \"ccrA2\"\n  - \"ccrA3\"\n  - \"ccrB1\"\n  - \"ccrB2\"\n  - \"ccrB3\"\n  - \"IS431\"\n  - \"IS1272\"\n  - \"mecA\"\n  - \"mecI\"\n  - \"mecR1\"\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"ccr Type 1\"           # name of the alias\n    targets: [\"ccrA1\", \"ccrB1\"]  # list of targets that are part of the alias\n  - name: \"ccr Type 2\"\n    targets: [\"ccrA2\", \"ccrB2\"]\n  - name: \"ccr Type 3\"\n    targets: [\"ccrA3\", \"ccrB3\"]\n  - name: \"mec Class A\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"mecI\"]\n  - name: \"mec Class B\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"IS1272\"]\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"I\"          # name of the profile\n    targets:           # list of targets (can use aliases) that are part of the profile\n      - \"ccr Type 1\"\n      - \"mec Class B\"\n  - name: \"II\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class A\"\n  - name: \"III\"\n    targets:\n      - \"ccr Type 3\"\n      - \"mec Class A\"\n  - name: \"IV\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class B\"\n

    From this schema, camlhmp can generate a typing tool that can be used to analyze input assemblies. This is only a partial schema, as there are many more SCCmec types and subtypes. But using this schema it should be straight forward to add additional targets and profiles.

    "},{"location":"installation/#camlhmp-blast","title":"camlhmp-blast","text":"

    camlhmp-blast is a command that allows users to type their samples using a provided schema with BLAST algorithms.

    "},{"location":"installation/#usage","title":"Usage","text":"
     \ud83d\udc2a camlhmp-blast \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST                          \n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502    --version       -V           Show the version and exit.                                  \u2502\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --help                       Show this message and exit.                                 |\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#output-files","title":"Output Files","text":"

    camlhmp-blast will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"installation/#example-prefixtsv","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets schema  schema_version  camlhmp_version params  comment\ncamlhmp I   ccrA1,ccrB1,IS431,IS1272,mecA,mecR1 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#example-prefixblasttsv","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nccrA1   AB033763.2  100.000 100 1350    39332   1350    1350    0   0   1   1350    23692   25041   0.0 2494\nccrB1   AB033763.2  100.000 100 1152    39332   1152    1152    0   0   1   1152    25063   26214   0.0 2128\nIS1272  AB033763.2  100.000 100 1659    39332   1659    1659    0   0   1   1659    28423   30081   0.0 3064\nmecR1   AB033763.2  100.000 100 987 39332   987 987 0   0   1   987 30304   31290   0.0 1823\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nIS431   AB033763.2  99.873  100 790 39332   790 789 1   0   1   790 35958   36747   0.0 1454\nIS431   AB033763.2  100.000 100 792 39332   792 792 0   0   1   792 35957   36748   0.0 1463\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"installation/#example-prefixdetailstsv","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing schema  schema_version  camlhmp_version params  comment\ncamlhmp I   True    ccrA1,ccrB1,IS431,mecA,mecR1,IS1272     sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp II  False   IS431,mecA,mecR1    ccrA2,ccrB2,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp III False   IS431,mecA,mecR1    ccrA3,ccrB3,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp IV  False   IS431,mecA,mecR1,IS1272 ccrA2,ccrB2 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#camlhmp-blast-region","title":"camlhmp-blast-region","text":"

    camlhmp-blast-region is a command that allows users to search for full regions of interest. It is nearly identical to camlhmp-blast, but instead of many smaller targets the idea is to instead look at full regions such as O-antigens and or similar features.

    "},{"location":"installation/#usage_1","title":"Usage","text":"
     Usage: camlhmp-blast-region [OPTIONS]\n\n \ud83d\udc2a camlhmp-blast-region \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST against\n larger genomic regions\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --version       -V           Print schema and camlhmp version                            \u2502\n\u2502    --help                       Show this message and exit.                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#output-files_1","title":"Output Files","text":"

    camlhmp-blast-region will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"installation/#example-prefixtsv_1","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O5  O2  100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#example-prefixblasttsv_1","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6874509 6875103 0.0 717\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6920911 6921505 0.0 717\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6872864 6873403 0.0 680\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6919266 6919805 0.0 680\nO1  NZ_PSQS01000003.1   97.972  12  18368   6935329 1972    1932    38  2   16398   18368   6620589 6618619 0.0 3419\nO1  NZ_PSQS01000003.1   96.296  12  18368   6935329 324 312 11  1   1   323 6641914 6641591 1.68e-149   531\nO2  NZ_PSQS01000003.1   99.841  100 23303   6935329 23303   23266   30  1   1   23303   6618619 6641914 0.0 42821\nO2  NZ_PSQS01000003.1   86.935  100 23303   6935329 1240    1078    130 12  2542    3749    3864567 3863328 0.0 1363\nO3  NZ_PSQS01000003.1   94.442  13  20210   6935329 2393    2260    114 15  1   2386    6618619 6620999 0.0 3664\nO3  NZ_PSQS01000003.1   99.308  13  20210   6935329 289 287 2   0   19922   20210   6641626 6641914 3.09e-147   523\nO4  NZ_PSQS01000003.1   97.448  14  15279   6935329 1842    1795    47  0   1   1842    6618619 6620460 0.0 3142\nO4  NZ_PSQS01000003.1   99.638  14  15279   6935329 276 275 1   0   15004   15279   6641639 6641914 8.46e-142   505\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"installation/#example-prefixdetailstsv_1","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O1  False       O1  12.49   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O2  False   O2  wzyB    100.00,0.00 1,0 pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O3  False       O3  1.43    1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O4  False       O4  13.86   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O5  True    O2      100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#camlhmp-extract","title":"camlhmp-extract","text":"

    camlhmp-extract is a command that allows users to extract targets from a set of references. You should think of this script as a \"helper\" script for curators. It allows you to maintain a TSV file with the targets and their positions in the reference sequences. camlhmp-extract will then extract the targets from the reference sequences and write them to a FASTA file.

    "},{"location":"installation/#usage_2","title":"Usage","text":"
     \ud83d\udc2a camlhmp-extract \ud83d\udc2a - Extract typing targets from a set of reference sequences\n\n\u256d\u2500 Required Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --path     -i  TEXT  The path where input files are located [required]                   \u2502\n\u2502 *  --targets  -t  TEXT  A TSV of targets to extract in FASTA format [required]              \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Additional Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --outdir   -o  TEXT  The path to save the extracted targets                                 \u2502\n\u2502 --verbose            Increase the verbosity of output                                       \u2502\n\u2502 --silent             Only critical errors will be printed                                   \u2502\n\u2502 --version  -V        Show the version and exit.                                             \u2502\n\u2502 --help               Show this message and exit.                                            \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#citations","title":"Citations","text":"

    If you make use of this tool, please cite the following:

    • camlhmp Petit III RA camlhmp: Classification through yAML Heuristic Mapping Protocol (GitHub)

    • BLAST__ Basic Local Alignment Search Tool _Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL BLAST+: architecture and applications. BMC Bioinformatics 10, 421 (2009)

    "},{"location":"installation/#naming","title":"Naming","text":"

    If I'm being honest, I really wanted to name a tool with \"camel\" in it because they are my wife's favorite animal\ud83d\udc2a and they also remind me of my friends in Oman!

    Once it was decided YAML was going to be the format for defining schemas, I quickly stumbled on \"Classification through YAML\" and quickly found out I wasn't the only once who thought of \"CAML\". But, no matter, it was decided it would be something with \"CAML\", then Tim Read came with the save and suggested \"Heuristic Mapping Protocol\". So, here we are - camlhmp!

    "},{"location":"installation/#license","title":"License","text":"

    I'm not a lawyer and MIT has always been my go-to license. So, MIT it is!

    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Introduction","text":""},{"location":"#camlhmp","title":"camlhmp","text":"

    \ud83d\udc2a camlhmp \ud83d\udc2a - Classification through yAML Heuristic Mapping Protocol

    camlhmp is a tool for generating organism typing tools from YAML schemas. The idea came up from discussions with Tim Read about the need for a tool that would allow researchers to more easily define typing schemas for their organisms of interest. YAML seemed like a a nice format for this due to its simplicity and readability.

    camlhmp is under active development, and any feedback is appreciated.

    "},{"location":"#purpose","title":"Purpose","text":"

    The primary purpose of camlhmp is to provide a framework that enables researchers to independently define typing schemas for their organisms of interest using YAML. This facilitates the management and analysis biological data, no matter the researchers experience level.

    camlhmp does not supply any pre-defined typing schemas. Instead, it provides researchers with the tools necessary tools to create and maintain their own schemas. This I believe will ensure the schemas remain up to date with the latest developments in its respective field.

    Additionally, this really arose from a practical need to streamline my maintenance of multiple organism typing tools. Long-term maintenance of these tools is a challenge, and I think camlhmp will help me to keep them up-to-date and consistent.

    "},{"location":"#installation","title":"Installation","text":"

    camlhmp will be made available through PyPI and Bioconda. For now, you can install it from the GitHub repository with the following command:

    conda create -n camlhmp -c conda-forge -c bioconda camlhmp\nconda activate camlhmp\ncamlhmp\n
    "},{"location":"#yaml-schema-structure","title":"YAML Schema Structure","text":"

    The schema structure is designed to be simple and intuitive. Here is a basic skeleton of the expected schema structure:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"\"          # unique identifier for the schema\n  name: \"\"        # name of the schema\n  description: \"\" # description of the schema\n  version: \"\"     # version of the schema\n  curators: []    # A list of curators of the schema\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: \"\" # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets: []\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"\"     # name of the alias\n    targets: []  # list of targets that are part of the alias\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"\"     # name of the profile\n    targets: []  # list of targets (can use aliases) that are part of the profile\n    excludes: [] # list of targets (or aliases) that will automatically fail the type\n

    From this schema we have a few sections:

    • metadata: general information about the schema
    • engine: computational requirements for sequence analysis
    • targets: lists the sequence targets such as genes, proteins, or markers
    • aliases: groups multiple targets under a common name for easier reference
    • profiles: defines combinations of targets and aliases to form typing profiles

    Within each section there are additional fields that will be descibed in the next sections.

    "},{"location":"#metadata","title":"metadata","text":"

    The metadata section provides general information about the schema. This includes:

    Field Type Description id string A unique identifier for the schema name string The name of the schema description string A brief description of the schema version string The version of the schema curators list A list of curators of the schema"},{"location":"#engine","title":"engine","text":"

    The engine section specifies the computational tools used for sequence analysis. Currently only one tool can be specified, and only blastn is supported.

    Field Type Description tool string The tool used to generate the data"},{"location":"#targets","title":"targets","text":"

    The targets section lists the specific sequence targets such as genes, proteins, or markers that the schema will analyze. These should be included in the associated sequence query data.

    Field Type Description targets list A list of targets to be analyzed"},{"location":"#aliases","title":"aliases","text":"

    aliases are a convenient way to group multiple targets under a common name for easier reference.

    Field Type Description name string The name of the alias targets list A list of targets that are part of the alias"},{"location":"#types","title":"types","text":"

    The types section defines specific combinations of targets and aliases to form distinct types.

    Field Type Description name string The name of the profile targets list A list of targets (or aliases) that are part of the type excludes list A list of targets (or aliases) that will automatically fail the type"},{"location":"#example-schema-partial-sccmec-typing","title":"Example Schema: Partial SCCmec Typing","text":"

    Here is an example of a partial schema for SCCmec typing:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"sccmec_partial\"                                # unique identifier for the schema\n  name: \"SCCmec Typing\"                              # name of the schema\n  description: \"A partial schema for SCCmec typing\"  # description of the schema\n  version: \"0.0.1\"                                     # version of the schema\n  curators:                                          # A list of curators of the schema\n    - \"Robert Petit\"\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: blastn # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets:\n  - \"ccrA1\"\n  - \"ccrA2\"\n  - \"ccrA3\"\n  - \"ccrB1\"\n  - \"ccrB2\"\n  - \"ccrB3\"\n  - \"IS431\"\n  - \"IS1272\"\n  - \"mecA\"\n  - \"mecI\"\n  - \"mecR1\"\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"ccr Type 1\"           # name of the alias\n    targets: [\"ccrA1\", \"ccrB1\"]  # list of targets that are part of the alias\n  - name: \"ccr Type 2\"\n    targets: [\"ccrA2\", \"ccrB2\"]\n  - name: \"ccr Type 3\"\n    targets: [\"ccrA3\", \"ccrB3\"]\n  - name: \"mec Class A\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"mecI\"]\n  - name: \"mec Class B\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"IS1272\"]\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"I\"          # name of the profile\n    targets:           # list of targets (can use aliases) that are part of the profile\n      - \"ccr Type 1\"\n      - \"mec Class B\"\n  - name: \"II\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class A\"\n  - name: \"III\"\n    targets:\n      - \"ccr Type 3\"\n      - \"mec Class A\"\n  - name: \"IV\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class B\"\n

    From this schema, camlhmp can generate a typing tool that can be used to analyze input assemblies. This is only a partial schema, as there are many more SCCmec types and subtypes. But using this schema it should be straight forward to add additional targets and profiles.

    "},{"location":"#camlhmp-blast","title":"camlhmp-blast","text":"

    camlhmp-blast is a command that allows users to type their samples using a provided schema with BLAST algorithms.

    "},{"location":"#usage","title":"Usage","text":"
     \ud83d\udc2a camlhmp-blast \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST                          \n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502    --version       -V           Show the version and exit.                                  \u2502\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --help                       Show this message and exit.                                 |\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#output-files","title":"Output Files","text":"

    camlhmp-blast will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"#example-prefixtsv","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets schema  schema_version  camlhmp_version params  comment\ncamlhmp I   ccrA1,ccrB1,IS431,IS1272,mecA,mecR1 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#example-prefixblasttsv","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nccrA1   AB033763.2  100.000 100 1350    39332   1350    1350    0   0   1   1350    23692   25041   0.0 2494\nccrB1   AB033763.2  100.000 100 1152    39332   1152    1152    0   0   1   1152    25063   26214   0.0 2128\nIS1272  AB033763.2  100.000 100 1659    39332   1659    1659    0   0   1   1659    28423   30081   0.0 3064\nmecR1   AB033763.2  100.000 100 987 39332   987 987 0   0   1   987 30304   31290   0.0 1823\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nIS431   AB033763.2  99.873  100 790 39332   790 789 1   0   1   790 35958   36747   0.0 1454\nIS431   AB033763.2  100.000 100 792 39332   792 792 0   0   1   792 35957   36748   0.0 1463\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"#example-prefixdetailstsv","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing schema  schema_version  camlhmp_version params  comment\ncamlhmp I   True    ccrA1,ccrB1,IS431,mecA,mecR1,IS1272     sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp II  False   IS431,mecA,mecR1    ccrA2,ccrB2,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp III False   IS431,mecA,mecR1    ccrA3,ccrB3,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp IV  False   IS431,mecA,mecR1,IS1272 ccrA2,ccrB2 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#camlhmp-blast-region","title":"camlhmp-blast-region","text":"

    camlhmp-blast-region is a command that allows users to search for full regions of interest. It is nearly identical to camlhmp-blast, but instead of many smaller targets the idea is to instead look at full regions such as O-antigens and or similar features.

    "},{"location":"#usage_1","title":"Usage","text":"
     Usage: camlhmp-blast-region [OPTIONS]\n\n \ud83d\udc2a camlhmp-blast-region \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST against\n larger genomic regions\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --version       -V           Print schema and camlhmp version                            \u2502\n\u2502    --help                       Show this message and exit.                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#output-files_1","title":"Output Files","text":"

    camlhmp-blast-region will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"#example-prefixtsv_1","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O5  O2  100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#example-prefixblasttsv_1","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6874509 6875103 0.0 717\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6920911 6921505 0.0 717\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6872864 6873403 0.0 680\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6919266 6919805 0.0 680\nO1  NZ_PSQS01000003.1   97.972  12  18368   6935329 1972    1932    38  2   16398   18368   6620589 6618619 0.0 3419\nO1  NZ_PSQS01000003.1   96.296  12  18368   6935329 324 312 11  1   1   323 6641914 6641591 1.68e-149   531\nO2  NZ_PSQS01000003.1   99.841  100 23303   6935329 23303   23266   30  1   1   23303   6618619 6641914 0.0 42821\nO2  NZ_PSQS01000003.1   86.935  100 23303   6935329 1240    1078    130 12  2542    3749    3864567 3863328 0.0 1363\nO3  NZ_PSQS01000003.1   94.442  13  20210   6935329 2393    2260    114 15  1   2386    6618619 6620999 0.0 3664\nO3  NZ_PSQS01000003.1   99.308  13  20210   6935329 289 287 2   0   19922   20210   6641626 6641914 3.09e-147   523\nO4  NZ_PSQS01000003.1   97.448  14  15279   6935329 1842    1795    47  0   1   1842    6618619 6620460 0.0 3142\nO4  NZ_PSQS01000003.1   99.638  14  15279   6935329 276 275 1   0   15004   15279   6641639 6641914 8.46e-142   505\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"#example-prefixdetailstsv_1","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O1  False       O1  12.49   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O2  False   O2  wzyB    100.00,0.00 1,0 pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O3  False       O3  1.43    1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O4  False       O4  13.86   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O5  True    O2      100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"#camlhmp-extract","title":"camlhmp-extract","text":"

    camlhmp-extract is a command that allows users to extract targets from a set of references. You should think of this script as a \"helper\" script for curators. It allows you to maintain a TSV file with the targets and their positions in the reference sequences. camlhmp-extract will then extract the targets from the reference sequences and write them to a FASTA file.

    "},{"location":"#usage_2","title":"Usage","text":"
     \ud83d\udc2a camlhmp-extract \ud83d\udc2a - Extract typing targets from a set of reference sequences\n\n\u256d\u2500 Required Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --path     -i  TEXT  The path where input files are located [required]                   \u2502\n\u2502 *  --targets  -t  TEXT  A TSV of targets to extract in FASTA format [required]              \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Additional Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --outdir   -o  TEXT  The path to save the extracted targets                                 \u2502\n\u2502 --verbose            Increase the verbosity of output                                       \u2502\n\u2502 --silent             Only critical errors will be printed                                   \u2502\n\u2502 --version  -V        Show the version and exit.                                             \u2502\n\u2502 --help               Show this message and exit.                                            \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"#citations","title":"Citations","text":"

    If you make use of this tool, please cite the following:

    • camlhmp Petit III RA camlhmp: Classification through yAML Heuristic Mapping Protocol (GitHub)

    • BLAST__ Basic Local Alignment Search Tool _Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL BLAST+: architecture and applications. BMC Bioinformatics 10, 421 (2009)

    "},{"location":"#naming","title":"Naming","text":"

    If I'm being honest, I really wanted to name a tool with \"camel\" in it because they are my wife's favorite animal\ud83d\udc2a and they also remind me of my friends in Oman!

    Once it was decided YAML was going to be the format for defining schemas, I quickly stumbled on \"Classification through YAML\" and quickly found out I wasn't the only once who thought of \"CAML\". But, no matter, it was decided it would be something with \"CAML\", then Tim Read came with the save and suggested \"Heuristic Mapping Protocol\". So, here we are - camlhmp!

    "},{"location":"#license","title":"License","text":"

    I'm not a lawyer and MIT has always been my go-to license. So, MIT it is!

    "},{"location":"installation/","title":"Installation","text":""},{"location":"installation/#camlhmp","title":"camlhmp","text":"

    \ud83d\udc2a camlhmp \ud83d\udc2a - Classification through yAML Heuristic Mapping Protocol

    camlhmp is a tool for generating organism typing tools from YAML schemas. The idea came up from discussions with Tim Read about the need for a tool that would allow researchers to more easily define typing schemas for their organisms of interest. YAML seemed like a a nice format for this due to its simplicity and readability.

    camlhmp is under active development, and any feedback is appreciated.

    "},{"location":"installation/#purpose","title":"Purpose","text":"

    The primary purpose of camlhmp is to provide a framework that enables researchers to independently define typing schemas for their organisms of interest using YAML. This facilitates the management and analysis biological data, no matter the researchers experience level.

    camlhmp does not supply any pre-defined typing schemas. Instead, it provides researchers with the tools necessary tools to create and maintain their own schemas. This I believe will ensure the schemas remain up to date with the latest developments in its respective field.

    Additionally, this really arose from a practical need to streamline my maintenance of multiple organism typing tools. Long-term maintenance of these tools is a challenge, and I think camlhmp will help me to keep them up-to-date and consistent.

    "},{"location":"installation/#installation","title":"Installation","text":"

    camlhmp will be made available through PyPI and Bioconda. For now, you can install it from the GitHub repository with the following command:

    conda create -n camlhmp -c conda-forge -c bioconda camlhmp\nconda activate camlhmp\ncamlhmp\n
    "},{"location":"installation/#yaml-schema-structure","title":"YAML Schema Structure","text":"

    The schema structure is designed to be simple and intuitive. Here is a basic skeleton of the expected schema structure:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"\"          # unique identifier for the schema\n  name: \"\"        # name of the schema\n  description: \"\" # description of the schema\n  version: \"\"     # version of the schema\n  curators: []    # A list of curators of the schema\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: \"\" # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets: []\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"\"     # name of the alias\n    targets: []  # list of targets that are part of the alias\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"\"     # name of the profile\n    targets: []  # list of targets (can use aliases) that are part of the profile\n    excludes: [] # list of targets (or aliases) that will automatically fail the type\n

    From this schema we have a few sections:

    • metadata: general information about the schema
    • engine: computational requirements for sequence analysis
    • targets: lists the sequence targets such as genes, proteins, or markers
    • aliases: groups multiple targets under a common name for easier reference
    • profiles: defines combinations of targets and aliases to form typing profiles

    Within each section there are additional fields that will be descibed in the next sections.

    "},{"location":"installation/#metadata","title":"metadata","text":"

    The metadata section provides general information about the schema. This includes:

    Field Type Description id string A unique identifier for the schema name string The name of the schema description string A brief description of the schema version string The version of the schema curators list A list of curators of the schema"},{"location":"installation/#engine","title":"engine","text":"

    The engine section specifies the computational tools used for sequence analysis. Currently only one tool can be specified, and only blastn is supported.

    Field Type Description tool string The tool used to generate the data"},{"location":"installation/#targets","title":"targets","text":"

    The targets section lists the specific sequence targets such as genes, proteins, or markers that the schema will analyze. These should be included in the associated sequence query data.

    Field Type Description targets list A list of targets to be analyzed"},{"location":"installation/#aliases","title":"aliases","text":"

    aliases are a convenient way to group multiple targets under a common name for easier reference.

    Field Type Description name string The name of the alias targets list A list of targets that are part of the alias"},{"location":"installation/#types","title":"types","text":"

    The types section defines specific combinations of targets and aliases to form distinct types.

    Field Type Description name string The name of the profile targets list A list of targets (or aliases) that are part of the type excludes list A list of targets (or aliases) that will automatically fail the type"},{"location":"installation/#example-schema-partial-sccmec-typing","title":"Example Schema: Partial SCCmec Typing","text":"

    Here is an example of a partial schema for SCCmec typing:

    %YAML 1.2\n---\n# metadata: general information about the schema\nmetadata:\n  id: \"sccmec_partial\"                                # unique identifier for the schema\n  name: \"SCCmec Typing\"                              # name of the schema\n  description: \"A partial schema for SCCmec typing\"  # description of the schema\n  version: \"0.0.1\"                                     # version of the schema\n  curators:                                          # A list of curators of the schema\n    - \"Robert Petit\"\n\n# engine: specifies the computational tools and additional parameters used for sequence\n#         analysis.\nengine:\n  tool: blastn # The tool used to generate the data\n\n# targets: Lists the specific sequence targets such as genes, proteins, or markers that the\n#          schema will analyze. These should be included in the associated sequence query data\ntargets:\n  - \"ccrA1\"\n  - \"ccrA2\"\n  - \"ccrA3\"\n  - \"ccrB1\"\n  - \"ccrB2\"\n  - \"ccrB3\"\n  - \"IS431\"\n  - \"IS1272\"\n  - \"mecA\"\n  - \"mecI\"\n  - \"mecR1\"\n\n# aliases: groups multiple targets under a common name for easier reference\naliases:\n  - name: \"ccr Type 1\"           # name of the alias\n    targets: [\"ccrA1\", \"ccrB1\"]  # list of targets that are part of the alias\n  - name: \"ccr Type 2\"\n    targets: [\"ccrA2\", \"ccrB2\"]\n  - name: \"ccr Type 3\"\n    targets: [\"ccrA3\", \"ccrB3\"]\n  - name: \"mec Class A\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"mecI\"]\n  - name: \"mec Class B\"\n    targets: [\"IS431\", \"mecA\", \"mecR1\", \"IS1272\"]\n\n# types: define specific combinations of targets and aliases to form distinct types\ntypes:\n  - name: \"I\"          # name of the profile\n    targets:           # list of targets (can use aliases) that are part of the profile\n      - \"ccr Type 1\"\n      - \"mec Class B\"\n  - name: \"II\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class A\"\n  - name: \"III\"\n    targets:\n      - \"ccr Type 3\"\n      - \"mec Class A\"\n  - name: \"IV\"\n    targets:\n      - \"ccr Type 2\"\n      - \"mec Class B\"\n

    From this schema, camlhmp can generate a typing tool that can be used to analyze input assemblies. This is only a partial schema, as there are many more SCCmec types and subtypes. But using this schema it should be straight forward to add additional targets and profiles.

    "},{"location":"installation/#camlhmp-blast","title":"camlhmp-blast","text":"

    camlhmp-blast is a command that allows users to type their samples using a provided schema with BLAST algorithms.

    "},{"location":"installation/#usage","title":"Usage","text":"
     \ud83d\udc2a camlhmp-blast \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST                          \n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502    --version       -V           Show the version and exit.                                  \u2502\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --help                       Show this message and exit.                                 |\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#output-files","title":"Output Files","text":"

    camlhmp-blast will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"installation/#example-prefixtsv","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets schema  schema_version  camlhmp_version params  comment\ncamlhmp I   ccrA1,ccrB1,IS431,IS1272,mecA,mecR1 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#example-prefixblasttsv","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nccrA1   AB033763.2  100.000 100 1350    39332   1350    1350    0   0   1   1350    23692   25041   0.0 2494\nccrB1   AB033763.2  100.000 100 1152    39332   1152    1152    0   0   1   1152    25063   26214   0.0 2128\nIS1272  AB033763.2  100.000 100 1659    39332   1659    1659    0   0   1   1659    28423   30081   0.0 3064\nmecR1   AB033763.2  100.000 100 987 39332   987 987 0   0   1   987 30304   31290   0.0 1823\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nmecA    AB033763.2  99.950  100 2007    39332   2007    2006    1   0   1   2007    31390   33396   0.0 3701\nIS431   AB033763.2  99.873  100 790 39332   790 789 1   0   1   790 35958   36747   0.0 1454\nIS431   AB033763.2  100.000 100 792 39332   792 792 0   0   1   792 35957   36748   0.0 1463\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"installation/#example-prefixdetailstsv","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing schema  schema_version  camlhmp_version params  comment\ncamlhmp I   True    ccrA1,ccrB1,IS431,mecA,mecR1,IS1272     sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp II  False   IS431,mecA,mecR1    ccrA2,ccrB2,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp III False   IS431,mecA,mecR1    ccrA3,ccrB3,mecI    sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp IV  False   IS431,mecA,mecR1,IS1272 ccrA2,ccrB2 sccmec_partial  0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#camlhmp-blast-region","title":"camlhmp-blast-region","text":"

    camlhmp-blast-region is a command that allows users to search for full regions of interest. It is nearly identical to camlhmp-blast, but instead of many smaller targets the idea is to instead look at full regions such as O-antigens and or similar features.

    "},{"location":"installation/#usage_1","title":"Usage","text":"
     Usage: camlhmp-blast-region [OPTIONS]\n\n \ud83d\udc2a camlhmp-blast-region \ud83d\udc2a - Classify assemblies with a camlhmp schema using BLAST against\n larger genomic regions\n\n\u256d\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --input         -i  TEXT     Input file in FASTA format to classify [required]           \u2502\n\u2502 *  --yaml          -y  TEXT     YAML file documenting the targets and types [required]      \u2502\n\u2502 *  --targets       -t  TEXT     Query targets in FASTA format [required]                    \u2502\n\u2502    --outdir        -o  PATH     Directory to write output [default: ./]                     \u2502\n\u2502    --prefix        -p  TEXT     Prefix to use for output files [default: camlhmp]           \u2502\n\u2502    --min-pident        INTEGER  Minimum percent identity to count a hit [default: 95]       \u2502\n\u2502    --min-coverage      INTEGER  Minimum percent coverage to count a hit [default: 95]       \u2502\n\u2502    --force                      Overwrite existing reports                                  \u2502\n\u2502    --verbose                    Increase the verbosity of output                            \u2502\n\u2502    --silent                     Only critical errors will be printed                        \u2502\n\u2502    --version       -V           Print schema and camlhmp version                            \u2502\n\u2502    --help                       Show this message and exit.                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#output-files_1","title":"Output Files","text":"

    camlhmp-blast-region will generate three output files:

    File Name Description {PREFIX}.tsv A tab-delimited file with the predicted type {PREFIX}.blast.tsv A tab-delimited file of all blast hits {PREFIX}.details.tsv A tab-delimited file with details for each type"},{"location":"installation/#example-prefixtsv_1","title":"Example {PREFIX}.tsv","text":"
    sample  type    targets coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O5  O2  100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n
    Column Description sample The sample name as determined by --prefix type The predicted type targets The targets for the given type that had a hit coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#example-prefixblasttsv_1","title":"Example {PREFIX}.blast.tsv","text":"
    qseqid  sseqid  pident  qcovs   qlen    slen    length  nident  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6874509 6875103 0.0 717\nwzyB    NZ_PSQS01000003.1   88.403  99  1140    6935329 595 526 69  0   545 1139    6920911 6921505 0.0 717\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6872864 6873403 0.0 680\nwzyB    NZ_PSQS01000003.1   89.444  99  1140    6935329 540 483 56  1   1   539 6919266 6919805 0.0 680\nO1  NZ_PSQS01000003.1   97.972  12  18368   6935329 1972    1932    38  2   16398   18368   6620589 6618619 0.0 3419\nO1  NZ_PSQS01000003.1   96.296  12  18368   6935329 324 312 11  1   1   323 6641914 6641591 1.68e-149   531\nO2  NZ_PSQS01000003.1   99.841  100 23303   6935329 23303   23266   30  1   1   23303   6618619 6641914 0.0 42821\nO2  NZ_PSQS01000003.1   86.935  100 23303   6935329 1240    1078    130 12  2542    3749    3864567 3863328 0.0 1363\nO3  NZ_PSQS01000003.1   94.442  13  20210   6935329 2393    2260    114 15  1   2386    6618619 6620999 0.0 3664\nO3  NZ_PSQS01000003.1   99.308  13  20210   6935329 289 287 2   0   19922   20210   6641626 6641914 3.09e-147   523\nO4  NZ_PSQS01000003.1   97.448  14  15279   6935329 1842    1795    47  0   1   1842    6618619 6620460 0.0 3142\nO4  NZ_PSQS01000003.1   99.638  14  15279   6935329 276 275 1   0   15004   15279   6641639 6641914 8.46e-142   505\n

    This is the standard BLAST output with -outfmt 6

    "},{"location":"installation/#example-prefixdetailstsv_1","title":"Example {PREFIX}.details.tsv","text":"
    sample  type    status  targets missing coverage    hits    schema  schema_version  camlhmp_version params  comment\ncamlhmp O1  False       O1  12.49   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O2  False   O2  wzyB    100.00,0.00 1,0 pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O3  False       O3  1.43    1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \ncamlhmp O4  False       O4  13.86   2   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   Coverage based on 2 hits\ncamlhmp O5  True    O2      100.00  1   pseudomonas_serogroup_partial   0.0.1   0.2.1   min-coverage=95;min-pident=95   \n

    This file provides a detailed view of the results. The columns are:

    Column Description sample The sample name as determined by --prefix type The predicted type status The status of the type (True if failed) targets The targets for the given type that had a match missing The targets for the given type that were not found coverage The coverage of the target region hits The number of hits used to calculate coverage of the target region schema The schema used to determine the type schema_version The version of the schema used camlhmp_version The version of camlhmp used params The parameters used for the analysis comment A small comment about the result"},{"location":"installation/#camlhmp-extract","title":"camlhmp-extract","text":"

    camlhmp-extract is a command that allows users to extract targets from a set of references. You should think of this script as a \"helper\" script for curators. It allows you to maintain a TSV file with the targets and their positions in the reference sequences. camlhmp-extract will then extract the targets from the reference sequences and write them to a FASTA file.

    "},{"location":"installation/#usage_2","title":"Usage","text":"
     \ud83d\udc2a camlhmp-extract \ud83d\udc2a - Extract typing targets from a set of reference sequences\n\n\u256d\u2500 Required Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 *  --path     -i  TEXT  The path where input files are located [required]                   \u2502\n\u2502 *  --targets  -t  TEXT  A TSV of targets to extract in FASTA format [required]              \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\u256d\u2500 Additional Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 --outdir   -o  TEXT  The path to save the extracted targets                                 \u2502\n\u2502 --verbose            Increase the verbosity of output                                       \u2502\n\u2502 --silent             Only critical errors will be printed                                   \u2502\n\u2502 --version  -V        Show the version and exit.                                             \u2502\n\u2502 --help               Show this message and exit.                                            \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n
    "},{"location":"installation/#citations","title":"Citations","text":"

    If you make use of this tool, please cite the following:

    • camlhmp Petit III RA camlhmp: Classification through yAML Heuristic Mapping Protocol (GitHub)

    • BLAST__ Basic Local Alignment Search Tool _Camacho C, Coulouris G, Avagyan V, Ma N, Papadopoulos J, Bealer K, Madden TL BLAST+: architecture and applications. BMC Bioinformatics 10, 421 (2009)

    "},{"location":"installation/#naming","title":"Naming","text":"

    If I'm being honest, I really wanted to name a tool with \"camel\" in it because they are my wife's favorite animal\ud83d\udc2a and they also remind me of my friends in Oman!

    Once it was decided YAML was going to be the format for defining schemas, I quickly stumbled on \"Classification through YAML\" and quickly found out I wasn't the only once who thought of \"CAML\". But, no matter, it was decided it would be something with \"CAML\", then Tim Read came with the save and suggested \"Heuristic Mapping Protocol\". So, here we are - camlhmp!

    "},{"location":"installation/#license","title":"License","text":"

    I'm not a lawyer and MIT has always been my go-to license. So, MIT it is!

    "},{"location":"api/engines/","title":"Engines","text":""},{"location":"api/engines/#blast","title":"Blast","text":"

    Query sequences against a input subject using BLASTN.

    Parameters:

    Name Type Description Default engine str

    The BLAST engine to use

    required subject str

    The subject database (input)

    required query str

    The query file (targets)

    required min_pident float

    The minimum percent identity to count a hit

    required min_coverage int

    The minimum percent coverage to count a hit

    required

    Returns:

    Name Type Description list list

    The parsed BLAST results, raw blast results, and stderr

    Source code in camlhmp/engines/blast.py
    def run_blast(engine: str, subject: str, query: str, min_pident: float, min_coverage: int) -> list:\n    \"\"\"\n    Query sequences against a input subject using BLASTN.\n\n    Args:\n        engine (str): The BLAST engine to use\n        subject (str): The subject database (input)\n        query (str): The query file (targets)\n        min_pident (float): The minimum percent identity to count a hit\n        min_coverage (int): The minimum percent coverage to count a hit\n\n    Returns:\n        list: The parsed BLAST results, raw blast results, and stderr\n    \"\"\"\n    outfmt = \" \".join(BLASTN_COLS)\n    cat_type = \"zcat\" if str(subject).endswith(\".gz\") else \"cat\"\n    qcov_hsp_perc = f\"-qcov_hsp_perc {min_coverage}\" if min_coverage else \"\"\n    perc_identity = f\"-perc_identity {min_pident}\" if min_pident and engine != \"tblastn\" else \"\"\n    stdout, stderr = execute(\n        f\"{cat_type} {subject} | {engine} -query {query} -subject - -outfmt '6 {outfmt}' {qcov_hsp_perc} {perc_identity}\",\n        capture=True,\n    )\n\n    # Convert BLAST results to a list of dicts\n    results = []\n    target_hits = []\n    for line in stdout.split(\"\\n\"):\n        if line == \"\":\n            continue\n        cols = line.split(\"\\t\")\n        results.append(dict(zip(BLASTN_COLS, cols)))\n        target_hits.append(cols[0])\n\n    if not results:\n        # Create an empty dict if no results are found\n        results.append(dict(zip(BLASTN_COLS, [\"NO_HITS\"] * len(BLASTN_COLS))))\n\n    return [target_hits, results, stderr]\n
    "}]} \ No newline at end of file diff --git a/v0.3.1/sitemap.xml b/v0.3.1/sitemap.xml index 018b904..d1b491b 100644 --- a/v0.3.1/sitemap.xml +++ b/v0.3.1/sitemap.xml @@ -10,4 +10,14 @@ 2024-08-08 daily + + https://rpetit3.github.io/camlhmp/v0.3.1/api/ + 2024-08-08 + daily + + + https://rpetit3.github.io/camlhmp/v0.3.1/api/engines/ + 2024-08-08 + daily + \ No newline at end of file diff --git a/v0.3.1/sitemap.xml.gz b/v0.3.1/sitemap.xml.gz index e86c61ebd7c3f1d157ec60d27c8ed12baf7c10e0..e8891448c481fcc60e0e81cac2c8377a59bee8a1 100644 GIT binary patch delta 231 zcmVP4r42AbO#fW_{NxDd@8M5mMngdXV0uq10PA0v5nIx)a zUv&}768P!)=@X(qTw~}irlQYjU>h!2XOhmNPj+C(kN5SS9ptJ%*MNq)W==RTM^xSb zrfK5n$wXC<=V}49YXibV1i@dKTy?GHfcx!MeaKqQDcE9aF<|6r$E_!K{^UM`Rx!9( z;3D{rZ=i?SzT8$wF^_U9wl8b3Z`~{pZDG?+C2PK_ImuD^@ZG~gxnsdE*PjS|LQ)|p hYOnYNxT^Rkp)|?*WbprKZ%6y$@&^uv5V#Tp006p!al8Nk delta 217 zcmV;~04D$S0p|gb7Js!-%Z|b@47~FdRqn(o?15dS;l>xh2V~RGM9QPYhO&RZDWFyF zD=bU4N8{1Rmiv1Q&CM3{Id!b%f;Bdo-1{_i>~uV=cWkd#@>&8~YAQKl#~ji41u#t$ zM^85D5qT~HpmB9Tc!41JCsV7Y#w_sc9w9?EYF5E2Q$|akwo-iXE0<8&JAx!8;9wGTfM7Rb{U{Q3HqL!Xdz2%72@ T-*5L(>O0ggn*n?8z5xILV4rKm