NAME
      PDLx::Mask - Mask multiple piddles with two way feedback
      PDLx::MaskedData - Automatically synchronize data and valid data masks

SYNOPSIS
      use 5.10.0;

      use PDLx::MaskedData;

      $data1 = PDLx::MaskedData->new( sequence(9) );
      say $data1;    # [0 1 2 3 4 5 6 7 8]

      # grab the mask
      $mask = $data1->mask;
      say $mask;    # [1 1 1 1 1 1 1 1 1]


      # create another masked piddle with the same mask
      my $pdl = $data1 + 1;

      $data2 = PDLx::MaskedData->new( $pdl, $mask );

      say $data2;    # [1 2 3 4 5 6 7 8 9]

      # update the mask
      $mask->set( 3, 0 );
      say $mask;     # [1 1 1 0 1 1 1 1 1]

      # and see it propagate
      say $data1;    # [0 1 2 0 4 5 6 7 8]
      say $data2;    # [1 2 3 0 5 6 7 8 9]

      # use bad values for $data1
      $data1->badflag(1);
      # notice that the invalid element is now bad
      say $data1;    # [0 1 2 BAD 4 5 6 7 8]

      # push invalid values upstream to the shared mask
      $data1->upstream_mask(1);
      $data1->setbadat(0);
      say $data1;    # [BAD 1 2 BAD 4 5 6 7 8]

      # see the mask change
      say $mask;     # [0 1 1 0 1 1 1 1 1]

      # and see the other piddle change
      say $data2;    # [0 2 3 0 5 6 7 8 9]

DESCRIPTION
    Typically PDL uses bad values to mark elements in a piddle which contain
    invalid data. When multiple piddles should have the same elements marked
    as invalid, a separate *mask* piddle (whose values are true for valid
    data and false otherwise) is used.

    PDLx::Mask in concert with PDLx::MaskedData simplifies the management of
    mutiple piddles sharing the same mask. PDLx::Mask is the shared mask,
    and PDLx::MaskedData is a specialized piddle which will dynamically
    respond to changes in the mask, so that they are always up-to-date.

    Additionally, invalid elements in the data piddles may be added to the
    shared mask, so that there is a consistent view of valid elements across
    all piddles.

LICENSE AND COPYRIGHT
    Copyright (c) 2016 The Smithsonian Astrophysical Observatory

    PDLx::Mask is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
    Free Software Foundation, either version 3 of the License, or (at your
    option) any later version.

    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
    Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program. If not, see <http://www.gnu.org/licenses/>.

AUTHOR
      Diab Jerius <djerius@cpan.org>

