# Spec HardwiredShape
A structure to define a fixed gapped shape.

Extends | GappedShape
All Extended | GappedShape, Shape
Defined in | <seqan/index.h>
Signature | `template <typename TValue, typename P1[, typename P2[, ..., typename Pn]]> class Shape<TValue, HardwiredShape<P1[, P2[, ..., Pn]]> >;`

## Template Parameters

`TValue` | The type to use for the values.
`Pi` | Pi is the distance of the i'th '1' to the next '1' in the shape.At most 20 parameters are allowed, so the maximal shape weight is 21.

## Interface Function Overview

### Interface Functions Inherited From Shape

- `hash`
- `hash2`
- `hash2Next`
- `hash2Upper`
- `hashInit`
- `hashNext`
- `hashUpper`
- `length`
- `resize`
- `shapeToString`
- `stringToShape`
- `unhash`
- `value`
- `weight`

## Interface Metafunction Overview

### Interface Metafunctions Inherited From Shape

- `Host`
- `LENGTH`
- `Size`
- `Value`
- `ValueSize`
- `WEIGHT`

## Detailed Description

You can use this structure to define your one gapped shapes in conjunction with GappedShape.

The shape `1100101` corresponds to `HardwiredShape<1,3,2>`.

Note The following predefined shapes are already available in `seqan/index/shape_predefined.h`:

    // ==========================================================================
    //                 SeqAn - The Library for Sequence Analysis
    // ==========================================================================
    // Copyright (c) 2006-2018, Knut Reinert, FU Berlin
    // All rights reserved.
    //
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions are met:
    //
    //     * Redistributions of source code must retain the above copyright
    //       notice, this list of conditions and the following disclaimer.
    //     * Redistributions in binary form must reproduce the above copyright
    //       notice, this list of conditions and the following disclaimer in the
    //       documentation and/or other materials provided with the distribution.
    //     * Neither the name of Knut Reinert or the FU Berlin nor the names of
    //       its contributors may be used to endorse or promote products derived
    //       from this software without specific prior written permission.
    //
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    // ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE
    // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
    // DAMAGE.
    //
    // ==========================================================================
    // Author: David Weese <david.weese@fu-berlin.de>
    // ==========================================================================

    #ifndef SEQAN_HEADER_SHAPE_PREDEFINED_H
    #define SEQAN_HEADER_SHAPE_PREDEFINED_H

    //SEQAN_NO_GENERATED_FORWARDS: no forwards are generated for this file

    namespace seqan
    {

        //////////////////////////////////////////////////////////////////////////////
        // some predefined gapped shapes

        //////////////////////////////////////////////////////////////////////////////
        // Single seed of
        // B.Ma and J.Tromp and M.Li,
        // "PatternHunter: faster and more sensitive homology search"
        // Bioinformatics 18, 2002
        //
        // weight:11
        // length:18
        //
        // shape:
        // 111010010100110111

        typedef GappedShape<
            HardwiredShape< 1, 1, 2, 3, 2, 3, 1, 2, 1, 1 >
        > ShapePatternHunter;

        //////////////////////////////////////////////////////////////////////////////
        // Multiple seeds of
        // L.Ilie and S.Ilie, "Fast Computation of Good Multiple Spaced Seeds"
        // WABI, 2007
        //
        // weight:9
        // length:15
        //
        // shapes:
        // 111010100100111
        // 110100110011101
        // 111010001011011
        //
        // sensitivity:
        // 65% 0.747975        70% 0.897741
        // 75% 0.973134        80% 0.996226

        typedef GappedShape<
            HardwiredShape< 1, 1, 2, 2, 3, 3, 1, 1 >
        > ShapeIlieA1;

        typedef GappedShape<
            HardwiredShape< 1, 2, 3, 1, 3, 1, 1, 2 >
        > ShapeIlieA2;

        typedef GappedShape<
            HardwiredShape< 1, 1, 2, 4, 2, 1, 2, 1 >
        > ShapeIlieA3;

        //////////////////////////////////////////////////////////////////////////////
        // Multiple seeds of
        // L.Ilie and S.Ilie, "Fast Computation of Good Multiple Spaced Seeds"
        // WABI 2007
        //
        // weight:9
        // length:13..23
        //
        // shapes:
        // 1110110100111
        // 11010000110010111
        // 11100010010000101011
        //
        // sensitivity:
        // 65% 0.767413        70% 0.910949
        // 75% 0.978558        80% 0.997357

        typedef GappedShape<
            HardwiredShape< 1, 1, 2, 1, 2, 3, 1, 1 >
        > ShapeIlieB1;

        typedef GappedShape<
            HardwiredShape< 1, 2, 5, 1, 3, 2, 1, 1 >
        > ShapeIlieB2;

        typedef GappedShape<
            HardwiredShape< 1, 1, 4, 3, 5, 2, 2, 1 >
        > ShapeIlieB3;

    }    // namespace seqan

    #endif

Demo: include/seqan/index/shape_predefined.h

## See Also

- GappedShape
- GenericShape

#### Dox Sources

    /*!
     * @class HardwiredShape
     *
     * @extends GappedShape
     *
     * @headerfile <seqan/index.h>
     *
     * @brief A structure to define a fixed gapped shape.
     *
     * @signature template <typename TValue, typename P1[, typename P2[, ...,
     *            typename Pn]]> class Shape<TValue, HardwiredShape<P1[, P2[, ...,
     *            Pn]]> >;
     *
     * @tparam TValue The type to use for the values.
     * @tparam Pi Pi is the distance of the i'th '1' to the next '1' in the shape.At
     *            most 20 parameters are allowed, so the maximal shape weight is 21.
     *
     * You can use this structure to define your one gapped shapes in conjunction
     * with @link GappedShape @endlink.
     *
     * The shape <tt>1100101</tt> corresponds to <tt>HardwiredShape<1,3,2></tt>.
     *
     * Note The following predefined shapes are already available in
     * <tt>seqan/index/shape_predefined.h</tt>:
     *
     * @include include/seqan/index/shape_predefined.h
     *
     * @see GappedShape
     * @see GenericShape
     */