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 . AUTHOR Diab Jerius