/*===========================================================================
*
*                            PUBLIC DOMAIN NOTICE
*               National Center for Biotechnology Information
*
*  This software/database is a "United States Government Work" under the
*  terms of the United States Copyright Act.  It was written as part of
*  the author's official duties as a United States Government employee and
*  thus cannot be copyrighted.  This software/database is freely available
*  to the public for use. The National Library of Medicine and the U.S.
*  Government have not placed any restriction on its use or reproduction.
*
*  Although all reasonable efforts have been taken to ensure the accuracy
*  and reliability of the software and data, the NLM and the U.S.
*  Government do not and cannot warrant the performance or results that
*  may be obtained by using this software or data. The NLM and the U.S.
*  Government disclaim all warranties, express or implied, including
*  warranties of performance, merchantability or fitness for any particular
*  purpose.
*
*  Please cite the author in any work or product based on this material.
*
* ===========================================================================
*
*/

version 1;

include 'vdb/built-in.vschema';
include 'vdb/vdb.vschema';
include 'insdc/insdc.vschema';


/*--------------------------------------------------------------------------
 * tables
 */

table NCBI:pileup:tbl:pileup_stats #1
{
    /* RUN_NAME
     *  expected to be a single value for entire object
     */
    extern column ascii RUN_NAME;

    /* REFERENCE_SPEC
     *  the canonical reference accession
     *  an index is stored in 'ref_spec'.
     */
    extern column ascii REFERENCE_SPEC = out_reference_spec;
    physical < ascii > zip_encoding .REFERENCE_SPEC
        = idx:text:insert #1.0 < 'ref_spec' > ( REFERENCE_SPEC );
    ascii out_reference_spec
        = idx:text:project #1.0 < 'ref_spec' > ( .REFERENCE_SPEC );

    /* REF_POS
     *  we dedicate a row to every position on the reference
     *  some rows are empty, other than their position
     */
    extern column I64 REF_POS = out_ref_pos;
    physical < I64 > izip_encoding .REF_POS = in_ref_pos;
    I64 in_ref_pos
        = < I64 > sub_row_id ( REF_POS )
        ;
    I64 out_ref_pos
        = < I64 > add_row_id ( .REF_POS )
        | < I64 > add_row_id ( .REF_POS_TRANS )
        ;

    /* REF_POS_TRANS
     *  records the translation between current row-id
     *  and REF_POS, such that
     *    row-id () + REF_POS_TRANS == REF_POS
     */
    extern column I64 REF_POS_TRANS = out_ref_pos_trans;
    physical < I64 > izip_encoding .REF_POS_TRANS = in_ref_pos_trans;
    I64 in_ref_pos_trans
        = REF_POS_TRANS
        ;
    I64 out_ref_pos_trans
        = .REF_POS_TRANS
        | < I64 > sub_row_id ( .REF_POS )
        ;

    /* REF_BASE
     *  this optional column records data extracted from reference
     *  it is the base at REF_POS
     */
    extern column < INSDC:dna:text > zip_encoding REF_BASE;

    /* DEPTH
     *  depth of coverage at REF_POS
     */
    extern column < U32 > izip_encoding DEPTH;

    /* MISMATCH_COUNTS
     *  the number of pileup bases that do not match against REF_BASE
     *  the normal vector MISMATCH_COUNTS [ 4 ] is recorded as MISMATCH_COUNTS [ 3 ]
     *  where the element representing REF_BASE has been eliminated.
     */
    extern column < U32 > izip_encoding MISMATCH_COUNTS;

    /* INSERTION_COUNTS
     *  the number of insertions-before-bases
     */
    extern column < U32 > izip_encoding INSERTION_COUNTS;

    /* DELETION_COUNT
     *  the number of deletions at REF_POS
     */
    extern column < U32 > izip_encoding DELETION_COUNT;
}

/*--------------------------------------------------------------------------
 * databases
 */

database NCBI:pileup:db:pileup_stats #1
{
    table NCBI:pileup:tbl:pileup_stats #1 STATS;
}
