/*===========================================================================
*
*                            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.
*
* ===========================================================================
*
*/

/*==========================================================================
 * NCBI Sequence Read Archive schema
 */
version 1;

include 'insdc/sra.vschema';


/*--------------------------------------------------------------------------
 * types
 */
typeset NCBI:SRA:stats:qual_type
{
    INSDC:quality:phred,
    INSDC:quality:log_odds,
    INSDC:quality:log_odds [ 4 ]
};


/*--------------------------------------------------------------------------
 * functions
 */

/*
   trigger to build meta statistics: spot count, base count, etc.
 */
extern function U8 NCBI:SRA:stats_trigger #1
    ( U8 read_bin, U32 read_len, INSDC:SRA:xread_type read_type * ascii spot_group );

/* trigger to build meta statistics from compressed reads
 *
 * cmp_stats_trigger takes spot length from quality
 * cmpf_stats_trigger takes spot length from an explicit spot length input
 * cmpb_stats_trigger only computes CMP_BASE_COUNT
 */
extern function
U8 NCBI:SRA:cmp_stats_trigger #1 ( B8 cmp_read_bin, NCBI:SRA:stats:qual_type qual_bin,
    U32 read_len, INSDC:SRA:xread_type read_type * ascii spot_group );

extern function
U8 NCBI:SRA:cmpf_stats_trigger #1 ( B8 cmp_read_bin, U32 spot_len,
    U32 read_len, INSDC:SRA:xread_type read_type * ascii spot_group );

extern function
U8 NCBI:SRA:cmpb_stats_trigger #1 ( B8 cmp_read_bin * ascii spot_group );

extern function
U8 NCBI:SRA:readlen_stats_trigger #1 ( U32 read_len, INSDC:SRA:xread_type read_type );


/* trigger to build phred_quality statistics in meta
 */
extern function
U8 NCBI:SRA:phred_stats_trigger #1 ( INSDC:quality:phred qual_bin );

/*--------------------------------------------------------------------------
 * table
 */

/* stats
 *  holds sequence statistics
 *
 * history:
 *  1.0.1 - explicitly interit from sra #1.0.1
 *  1.1.0 - incorporate stats from compressed read
 *  1.1.1 - sra #1.0.2
 *  1.1.2 - sra #1.0.3 + cmp_base_count or to base_count
 *  1.2.1 - sra #1.0.4 and readlen_stats trigger
 */
table NCBI:SRA:tbl:stats #1.2.1 = INSDC:SRA:tbl:stats #1.1, INSDC:SRA:tbl:sra #1.0.4
{
    INSDC:SRA:spotid_t min_spot_id
        = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MIN" > ();

    INSDC:SRA:spotid_t max_spot_id
        = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MAX" > ();

    U64 spot_count
        = < U64 > meta:value < "STATS/TABLE/SPOT_COUNT" > ();

    U64 base_count
        = < U64 > meta:value < "STATS/TABLE/BASE_COUNT" > ();

    U64 bio_base_count
        = < U64 > meta:value < "STATS/TABLE/BIO_BASE_COUNT" > ();

    U64 cmp_base_count
        = < U64 > meta:value < "STATS/TABLE/CMP_BASE_COUNT" > () | base_count;

    trigger meta_stats
        = NCBI:SRA:stats_trigger ( in_stats_bin, in_read_len, in_read_type, in_spot_group )
        | NCBI:SRA:stats_trigger ( in_stats_bin, in_read_len, in_read_type )
        | NCBI:SRA:cmp_stats_trigger ( in_cmp_stats_bin, in_stats_qual, in_read_len, in_read_type, in_spot_group )
        | NCBI:SRA:cmp_stats_trigger ( in_cmp_stats_bin, in_stats_qual, in_read_len, in_read_type )
        | NCBI:SRA:cmpf_stats_trigger ( in_cmp_stats_bin, in_spot_len, in_read_len, in_read_type, in_spot_group )
        | NCBI:SRA:cmpf_stats_trigger ( in_cmp_stats_bin, in_spot_len, in_read_len, in_read_type )
        | NCBI:SRA:cmpb_stats_trigger ( in_cmp_stats_bin, in_spot_group )
        | NCBI:SRA:cmpb_stats_trigger ( in_cmp_stats_bin )
        ;

    trigger readlen_stats
        = NCBI:SRA:readlen_stats_trigger ( in_read_len, in_read_type );
    trigger qual_stats
        = NCBI:SRA:phred_stats_trigger #1 ( in_qual_phred );

	/* INSDC:SRA:tbl:stats inherited virtual productions
	 *  in_stats_bin
	 */
};
