USGS

Isis 3.0 Application Source Code Reference

Home

phohillier.cpp

Go to the documentation of this file.
00001 // $Id: phohillier.cpp,v 1.1 2010/02/24 04:05:19 kbecker Exp $
00002 #include "Isis.h"
00003 
00004 #include <string>
00005 #include <memory>
00006 
00007 #include "Cube.h"
00008 #include "Hillier.h"
00009 #include "iException.h"
00010 #include "ProcessByLine.h"
00011 #include "Pvl.h"
00012 #include "PvlGroup.h"
00013 #include "SpecialPixel.h"
00014 
00015 using namespace std;
00016 using namespace Isis;
00017 
00018 // Global variables
00019 Hillier *pho;
00020 
00021 void hillier(Buffer &in, Buffer &out);
00022 
00023 void IsisMain() {
00024   // We will be processing by line
00025   ProcessByLine p;
00026 
00027   // Set up the input cube and get camera information
00028   Cube *icube = p.SetInputCube("FROM");
00029 
00030   // Create the output cube
00031   Cube *ocube = p.SetOutputCube("TO");
00032 
00033   // Set up the user interface
00034   UserInterface &ui = Application::GetUserInterface();
00035   // Get the name of the parameter file
00036   Pvl par(ui.GetFilename("PHOPAR"));
00037   auto_ptr<Hillier> photom = auto_ptr<Hillier> (new Hillier(par,  *icube));
00038   pho = photom.get();
00039 
00040   // Start the processing
00041   p.StartProcess(hillier);
00042 
00043   PvlGroup photo("Photometry");
00044   pho->Report(photo);
00045   ocube->putGroup(photo);
00046   Application::Log(photo);
00047   p.EndProcess();
00048 }
00049 
00050 /**
00051  * @brief Apply Hillier photometric correction
00052  *
00053  * Short function dispatched for each line to apply the Hillier photometrc
00054  * correction function.
00055  *
00056  * @author kbecker (2/20/2010)
00057  *
00058  * @param in Buffer containing input data
00059  * @param out Buffer of photometrically corrected data
00060  */
00061 void hillier(Buffer &in, Buffer &out) {
00062 
00063   for(int i = 0; i < in.size(); i++) {
00064     //  Don't correct special pixels
00065     if(IsSpecial(in[i])) {
00066       out[i] = in[i];
00067     }
00068     else {
00069       // Get correction and test for validity
00070       double ph = pho->Compute(in.Line(i), in.Sample(i), in.Band(i));
00071       out[i] = (IsSpecial(ph) ?  Null : in[i] * ph);
00072     }
00073   }
00074   return;
00075 }
00076