This file is indexed.

/usr/include/OTB-5.8/otbModelComponentBase.h is in libotb-dev 5.8.0+dfsg-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/*=========================================================================

  Program:   ORFEO Toolbox
  Language:  C++
  Date:      $Date$
  Version:   $Revision$


  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
  See OTBCopyright.txt for details.

  Some parts of this code are covered by the IMT copyright.
  See IMTCopyright.txt for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef otbModelComponentBase_h
#define otbModelComponentBase_h

#include <vnl/vnl_vector.h>
#include <vnl/vnl_matrix.h>

#include "itkObject.h"
#include "itkArray.h"
#include "itkMembershipFunctionBase.h"

namespace otb
{
namespace Statistics
{

/** \class ModelComponentBase
 * \brief base class for distribution representation that supports
 * analytical way to update the distribution parameters
 *
 * This class expects that its subclasses (distribution components) should
 * have analytical expressions for updating its parameters using only
 * the measurement vectors.
 *
 * The difference from MixtureModelComponentBase is that it does not have
 * the knowledge of a mixture. Hence, no weights have to define.
 *
 * This class can be considered as a macro class that encapsulates the
 * storage for the model (subclasses of MembershipFunctionBase) and
 * model parameter estimators (implementation of analytical expressions).
 *
 * Subclasses of this class should define their own distribution specific
 * membership function. For example, GaussianModelComponent class
 * defines and creates a GaussianDensityFunction object for that matter.
 * Subclasses should also cast such membership function object to
 * MembershipFunctionBase object. By doing that, users can get pointers
 * to membership functions from different distributional model
 *
 * \sa FIXME: StochasticExpectationMaximizationMixtureModelEstimator
 *
 * \ingroup OTBCommon
 */

template<class TSample>
class ITK_EXPORT ModelComponentBase :
  public itk::Object
{
public:
  /**Standard class typedefs. */
  typedef ModelComponentBase            Self;
  typedef itk::Object                   Superclass;
  typedef itk::SmartPointer<Self>       Pointer;
  typedef itk::SmartPointer<const Self> ConstPointer;

  /**Standard Macros */
  itkNewMacro(Self);
  itkTypeMacro(ModelComponentBase, Object);

  typedef typename TSample::MeasurementVectorType     MeasurementVectorType;
  typedef typename TSample::MeasurementVectorSizeType MeasurementVectorSizeType;

  /** typedef for the MembershipFunctionBase */
  typedef itk::Statistics::MembershipFunctionBase<MeasurementVectorType>
  MembershipFunctionType;

  typedef itk::Array<double> ParametersType;

  /** stores the sample pointer (does not update the estimation by itself) */
  virtual void SetSample(const TSample* sample);

  /** returns the sample pointer */
  const TSample* GetSample() const;

  /** returns the pointer to the membership function object.
   * Subclasses of this class are responsible for creating the
   * actual membership function objects and cast them to
   * MembershipFunctionBase objects */
  MembershipFunctionType* GetPdfMembershipFunction();
  MembershipFunctionType* GetCdfMembershipFunction();

  /** stores the pointer to the membership function.
   * subclasses use this function to store their membership function
   * object after dynamic creation, when available (the Pdf part is
   * protected as soon as it is considered to be known for all
   * ModelComponent)*/
  void SetCdfMembershipFunction(MembershipFunctionType* function);

  /** Gets/Sets the parameter(s) required for the component */
  void SetParameters(const ParametersType& parameters);
  ParametersType GetParameters()
  {
    return m_Parameters;
  }

  /** returns the pdf of the "measurements" vector */
  double Evaluate(MeasurementVectorType& measurements);
  double Pdf(MeasurementVectorType& measurements);

  /** returns the cdf of the "measurements" vector */
  double Cdf(MeasurementVectorType& measurements);

  /** Update parameter estimation if necessary
   * (mainly when sample has changed) */
  virtual void Update();

  /** Show the parameters in a minimal form in comparison to PrintSelf */
  virtual void ShowParameters(std::ostream& os, itk::Indent indent) const;

  // TODO: Distance entre distribution via une sorte de fonction membre...

protected:
  ModelComponentBase();
  ~ModelComponentBase() ITK_OVERRIDE {}
  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;

  virtual void GenerateData();

  /** stores the pointer to the membership function.
   * subclasses use this function to store their membership function
   * object after dynamic creation, when available */
  void SetPdfMembershipFunction(MembershipFunctionType* function);

  /** Test on new data */
  int IsSampleModified();

  /** Set of parameters necessary for the statistical models */
  ParametersType m_Parameters;

private:
  ModelComponentBase(const Self &); //purposely not implemented
  void operator =(const Self&); //purposely not implemented
  /** target sample data pointer */
  const TSample* m_Sample;

protected:
  /** SmartPointer to the membership function - here density function */
  MembershipFunctionType* m_PdfFunction;
  /** SmartPointer to the membership function - here cumulative function */
  MembershipFunctionType* m_CdfFunction;
  /** indicative flag of membership function's parameter changes */
  int m_SampleModified;

}; // end of class

} // end of namespace Statistics
} // end of namespace otb

#ifndef OTB_MANUAL_INSTANTIATION
#include "otbModelComponentBase.txx"
#endif

#endif