CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

GenericFunctions/SphericalHarmonicFit.hh
Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id: 
00003 //---------------------SphericalHarmonicFit------------------------------------------//
00004 //                                                                          //
00005 // Class SphericalHarmonicFit.  This is a fitting function consisting of a super     //
00006 // position of N legendre polynomials.  Cascading fractions and phases are  //
00007 // the input parameters. Function is normalized to one (on [-1,1])          //
00008 // Joe Boudreau, Petar Maksimovic, January 2000                             //
00009 //                                                                          //
00010 //--------------------------------------------------------------------------//
00011 #ifndef SphericalHarmonicFit_h
00012 #define SphericalHarmonicFit_h 
00013 #include "CLHEP/GenericFunctions/AbsFunction.hh"
00014 #include "CLHEP/GenericFunctions/Parameter.hh"
00015 namespace Genfun {
00016 
00021   class SphericalHarmonicFit : public AbsFunction  {
00022 
00023     FUNCTION_OBJECT_DEF(SphericalHarmonicFit)
00024 
00025       public:
00026 
00027     // Constructor.  Builds all the 
00028     SphericalHarmonicFit(unsigned int LMAX);
00029 
00030     // Copy constructor
00031     SphericalHarmonicFit(const SphericalHarmonicFit &right);
00032   
00033     // Destructor
00034     virtual ~SphericalHarmonicFit();
00035   
00036     // Dimensionality=2.  They are; cosTheta (not theta) and phi
00037     virtual unsigned int dimensionality() const {return 2;}
00038 
00039     // Retreive function value
00040     virtual double operator ()(double argument) const;    // Gives an error.
00041     virtual double operator ()(const Argument & a) const; // Must use this one
00042 
00043     // Total number of parameters
00044     unsigned int numComponents() const;
00045     
00046     // Max L ("angular momentum")
00047     unsigned int lMax() const;
00048     
00049     // MINUIT-SAFE PARAMETERIZATION: Fractions vary on the range 0,1, 
00050     // Phases need not be bounded:
00051 
00052     // The fraction of amplitude sq which is L OR HIGHER:
00053     Parameter *getFractionLOrHigher(unsigned int L);
00054     const Parameter *getFractionLOrHigher(unsigned int L) const;
00055 
00056     // The phase of coefficient L, M=0;
00057     Parameter *getPhaseLM0(unsigned int L);
00058     const Parameter *getPhaseLM0(unsigned int L) const;
00059 
00060     // The fraction of amplitude sq which is L which is +- M OR HIGHER
00061     Parameter *getFractionAbsMOrHigher(unsigned int L, unsigned int M);
00062     const Parameter *getFractionAbsMOrHigher(unsigned int L, unsigned int M) const;
00063 
00064     // The fraction of amplitude sq which is +- M, which is positive
00065     Parameter *getFractionMPositive(unsigned int L, unsigned int M);
00066     const Parameter *getFractionMPositive(unsigned int L, unsigned int M) const;
00067 
00068     // The phase of the positive M coefficient
00069     Parameter *getPhaseMPlus(unsigned int L, unsigned int M);
00070     const Parameter *getPhaseMPlus(unsigned int L, unsigned int M) const;
00071 
00072     // The phase of the negative M coefficient
00073     Parameter *getPhaseMMinus(unsigned int L, unsigned int M);
00074     const Parameter *getPhaseMMinus(unsigned int L, unsigned int M) const;
00075 
00076     
00077     
00078 
00079 
00080   private:
00081 
00082     // It is illegal to assign an adjustable constant
00083     const SphericalHarmonicFit & operator=(const SphericalHarmonicFit &right);
00084     
00085     
00086     class Clockwork;
00087     Clockwork *c;
00088 
00089   };
00090 } // namespace Genfun
00091 
00092 
00093 
00094 #include "CLHEP/GenericFunctions/SphericalHarmonicFit.icc"
00095 #endif