Unverified Commit c95d3233 authored by Jesse Mapel's avatar Jesse Mapel Committed by GitHub
Browse files

Merge pull request #362 from twilson271828/isis3_mosaic_tracking

Added 4-byte unsigned integer special pixel vals to  SpecialPixel.h
parents ea8b672c 74e62307
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -241,4 +241,18 @@ namespace Isis {

  }


  double Blobber::int2ToDouble(unsigned int value) const {
    if (value == NULLUI4) return NULL8;
    else if (value == LOW_REPR_SATUI4) return LOW_REPR_SAT8;
    else if (value == LOW_INSTR_SATUI4) return LOW_INSTR_SAT8;
    else if (value == HIGH_INSTR_SATUI4) return HIGH_INSTR_SAT8;
    else if (value == HIGH_REPR_SATUI4) return HIGH_REPR_SAT8;
    else return value;

  }




}  //  end namespace Isis
+3 −0
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ namespace Isis {
   *                           coding standards. Added padding to control
   *                           statements. References #1169.
   *   @history 2017-08-30 Summer Stapleton - Updated documentation. References #4807.
   *   @history 2018-07-20 Tyler Wilson - Overloaded the int2Double function so it can handle
   *                       special pixel types for 4-byte unsigned integers.  References #971.
   */
  class Blobber {
    public:
@@ -262,6 +264,7 @@ namespace Isis {
//  Low/level I/O and conversion methods
      void loadDouble(Table &tbl);
      void loadInteger(Table &tbl);
      double int2ToDouble(unsigned int value) const;
      double int2ToDouble(int value) const;
  };
};
+84 −0
Original line number Diff line number Diff line
@@ -1508,6 +1508,40 @@ namespace Isis {
              ((unsigned short *)buffersRawBuf)[bufferIndex] = raw;
            }

            else if(m_pixelType == UnsignedInteger) {

              unsigned int raw = ((unsigned int *)chunkBuf)[chunkIndex];
              if(m_byteSwapper)
                raw = m_byteSwapper->Uint32_t(&raw);

              if(raw >= VALID_MINUI4) {
                bufferVal = (double) raw * m_multiplier + m_base;
              }
              else if (raw > VALID_MAXUI4) {
                if(raw == HIGH_INSTR_SATUI4)
                  bufferVal = HIGH_INSTR_SAT8;
                else if(raw == HIGH_REPR_SATUI4)
                  bufferVal = HIGH_REPR_SAT8;
                else
                  bufferVal = LOW_REPR_SAT8;
              }
              else {
                if(raw == NULLUI4)
                  bufferVal = NULL8;
                else if(raw == LOW_INSTR_SATUI4)
                  bufferVal = LOW_INSTR_SAT8;
                else if(raw == LOW_REPR_SATUI4)
                  bufferVal = LOW_REPR_SAT8;
                else
                  bufferVal = LOW_REPR_SAT8;
              }

              ((unsigned int *)buffersRawBuf)[bufferIndex] = raw;



            }

            else if(m_pixelType == UnsignedByte) {
              unsigned char raw = ((unsigned char *)chunkBuf)[chunkIndex];

@@ -1626,6 +1660,7 @@ namespace Isis {
              ((float *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->Float(&raw) : raw;
            }

            else if(m_pixelType == SignedWord) {
              short raw;

@@ -1670,6 +1705,55 @@ namespace Isis {
              ((short *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->ShortInt(&raw) : raw;
            }

            else if(m_pixelType == UnsignedInteger) {

              unsigned int raw;

              if(bufferVal >= VALID_MINUI4) {
                double filePixelValueDbl = (bufferVal - m_base) /
                    m_multiplier;
                if(filePixelValueDbl < VALID_MINUI4 - 0.5) {
                  raw = LOW_REPR_SATUI4;
                }
                if(filePixelValueDbl > VALID_MAXUI4) {
                  raw = HIGH_REPR_SATUI4;
                }
                else {
                  unsigned int filePixelValue = (unsigned int)round(filePixelValueDbl);

                  if(filePixelValue < VALID_MINUI4) {
                    raw = LOW_REPR_SATUI4;
                  }
                  else if(filePixelValue > VALID_MAXUI4) {
                    raw = HIGH_REPR_SATUI4;
                  }
                  else {
                    raw = filePixelValue;
                  }
                }
              }
              else {
                if(bufferVal == NULLUI4)
                  raw = NULLUI4;
                else if(bufferVal == LOW_INSTR_SATUI4)
                  raw = LOW_INSTR_SATUI4;
                else if(bufferVal == LOW_REPR_SATUI4)
                  raw = LOW_REPR_SATUI4;
                else if(bufferVal == HIGH_INSTR_SATUI4)
                  raw = HIGH_INSTR_SATUI4;
                else if(bufferVal == HIGH_REPR_SATUI4)
                  raw = HIGH_REPR_SATUI4;
                else
                  raw = LOW_REPR_SATUI4;
              }

              ((unsigned int *)chunkBuf)[chunkIndex] =
                  m_byteSwapper ? m_byteSwapper->Uint32_t(&raw) : raw;

            }


            else if(m_pixelType == UnsignedWord) {
              unsigned short raw;

+3 −0
Original line number Diff line number Diff line
@@ -116,6 +116,9 @@ namespace Isis {
   *                           implementation causing warnings in clang. Part of OS X 10.11 porting.
   *                           QPair forward declaration now properly claims it as a struct.
   *   @history 2017-09-22 Cole Neubauer - Fixed documentation. References #4807
   *   @history 2018-07-20 Tyler Wilson - Added support for unsigned integer special pixel values.
   *                            in functions writeIntoRaw(...) and writeIntoDouble(...)
   *                            References #971.
   */
  class CubeIoHandler {
    public:
+17 −2
Original line number Diff line number Diff line
@@ -279,7 +279,7 @@ namespace Isis {

    if ((type == Isis::Double) || (type == Isis::Real) || (type == Isis::SignedWord) ||
        (type == Isis::UnsignedWord) || (type == Isis::UnsignedByte) ||
        (type == Isis::SignedInteger)) {
        (type == Isis::SignedInteger) || type==Isis::UnsignedInteger) {
      p_pixelType = type;
    }
    else {
@@ -1226,6 +1226,11 @@ namespace Isis {
        min = Isis::IVALID_MIN4;
        max = Isis::IVALID_MAX4;
      }

      else if (p_pixelType == Isis::UnsignedInteger) {
        min = Isis::VALID_MINUI4;
        max = Isis::VALID_MAXUI4;
      }
      else if (p_pixelType == Isis::SignedWord) {
        min = Isis::VALID_MIN2 * p_mult[0] + p_base[0];
        max = Isis::VALID_MAX2 * p_mult[0] + p_base[0];
@@ -1480,6 +1485,10 @@ namespace Isis {
            case Isis::SignedInteger:
              (*out)[samp] = (double)swapper.Int((int *)in+samp);
              break;

          case Isis::UnsignedInteger:
            (*out)[samp] = (double)swapper.Uint32_t((unsigned int *)in+samp);
            break;
            case Isis::Real:
              if(p_vax_convert) {
                (*out)[samp]= VAXConversion( (float *)in+samp );
@@ -1733,6 +1742,9 @@ namespace Isis {
            case Isis::SignedInteger:
              (*out)[samp] = (double)swapper.Int((int *)in+samp);
              break;
          case Isis::UnsignedInteger:
            (*out)[samp] = (double)swapper.Uint32_t((unsigned int *)in+samp);
            break;
            case Isis::Real:
              if(p_vax_convert) {
                (*out)[samp]= VAXConversion( (float *)in+samp );
@@ -1966,6 +1978,9 @@ namespace Isis {
            case Isis::SignedInteger:
              (*out)[samp] = (double)swapper.Int(&in[bufferIndex]);
              break;            
          case Isis::UnsignedInteger:
            (*out)[samp] = (double)swapper.Uint32_t(&in[bufferIndex]);
            break;
            case Isis::Real:
              if(p_vax_convert) {
                (*out)[osamp]= VAXConversion(&in[bufferIndex]);
Loading