# class RooSpHarmonic: public RooLegendre




Implementation of the so-called real spherical harmonics, using the orthonormal normalization, which are related to spherical harmonics as: Y_{l0} = Y_l^0 (m=0) Y_{lm} = \frac{1}{\sqrt{2}} \left( Y_l^m + (-1)^m Y_l^{-m} \right) (m>0) Y_{lm} = \frac{1}{i\sqrt{2}} \left( Y_l^{|m|} - (-1)^{|m|} Y_l^{-|m|} \right) (m<0) which implies: Y_{l0}(\cos\theta,\phi) = N_{l0} P_l^0 (\cos\theta) (m=0) Y_{lm}(\cos\theta,\phi) = \sqrt{2} N_{lm} P_l^m (\cos\theta) cos(|m|\phi) (m>0) Y_{lm}(\cos\theta,\phi) = \sqrt{2} N_{l|m|} P_l^{|m|}(\cos\theta) sin(|m|\phi) (m<0) where N_{lm} = \sqrt{ \frac{2l+1}{4\pi} \frac{ (l-m)! }{ (l+m)! } } Note that the normalization corresponds to the orthonormal case, and thus we have Int d\cos\theta d\phi Y_{lm} Y_{l'm'} = \delta_{ll'} \delta{mm'} Note that in addition, this code can also represent the product of two (real) spherical harmonics -- it actually uses the fact that Y_{00} = \sqrt{\frac{1}{4\pi}} in order to represent a single spherical harmonics by multiplying it by \sqrt{4\pi} Y_00, as this makes it trivial to compute the analytical integrals, using the orthogonality properties of Y_l^m...



## Function Members (Methods)

public:
protected:
 void RooAbsArg::attachToStore(RooAbsDataStore& store) virtual void RooAbsReal::attachToTree(TTree& t, Int_t bufSize = 32000) virtual void RooAbsReal::attachToVStore(RooVectorDataStore& vstore) RooFitResult* RooAbsReal::chi2FitDriver(RooAbsReal& fcn, RooLinkedList& cmdList) TString RooAbsArg::cleanBranchName() const virtual void RooAbsReal::copyCache(const RooAbsArg* source, Bool_t valueOnly = kFALSE, Bool_t setValDirty = kTRUE) RooAbsReal* RooAbsReal::createIntObj(const RooArgSet& iset, const RooArgSet* nset, const RooNumIntConfig* cfg, const char* rangeName) const virtual void TObject::DoError(int level, const char* location, const char* fmt, va_list va) const virtual void RooAbsReal::fillTreeBranch(TTree& t) void RooAbsReal::findInnerMostIntegration(const RooArgSet& allObs, RooArgSet& innerObs, const char* rangeName) const virtual void RooAbsArg::getObservablesHook(const RooArgSet*, RooArgSet*) const virtual void RooAbsArg::getParametersHook(const RooArgSet*, RooArgSet*, Bool_t) const RooAbsProxy* RooAbsArg::getProxy(Int_t index) const static void RooAbsReal::globalSelectComp(Bool_t flag) void RooAbsArg::graphVizAddConnections(set >&) Bool_t RooAbsArg::inhibitDirty() const TString RooAbsReal::integralNameSuffix(const RooArgSet& iset, const RooArgSet* nset = 0, const char* rangeName = 0, Bool_t omitEmpty = kFALSE) const Bool_t RooAbsReal::isSelectedComp() const virtual Bool_t RooAbsReal::isValid() const virtual Bool_t RooAbsReal::isValidReal(Double_t value, Bool_t printError = kFALSE) const void RooAbsReal::makeProjectionSet(const RooAbsArg* plotVar, const RooArgSet* allVars, RooArgSet& projectedVars, Bool_t silent) const void TObject::MakeZombie() Bool_t RooAbsReal::matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, const RooArgProxy& a) const Bool_t RooAbsReal::matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, const RooArgSet& set) const Bool_t RooAbsReal::matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, const RooArgProxy& a, const RooArgProxy& b) const Bool_t RooAbsReal::matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, const RooArgProxy& a, const RooArgProxy& b, const RooArgProxy& c) const Bool_t RooAbsReal::matchArgs(const RooArgSet& allDeps, RooArgSet& numDeps, const RooArgProxy& a, const RooArgProxy& b, const RooArgProxy& c, const RooArgProxy& d) const Int_t RooAbsArg::numProxies() const virtual void RooAbsArg::operModeHook() virtual void RooAbsArg::optimizeDirtyHook(const RooArgSet*) virtual RooPlot* RooAbsReal::plotAsymOn(RooPlot* frame, const RooAbsCategoryLValue& asymCat, RooAbsReal::PlotOpt o) const virtual RooPlot* RooAbsReal::plotOn(RooPlot* frame, RooAbsReal::PlotOpt o) const void RooAbsReal::plotOnCompSelect(RooArgSet* selNodes) const RooPlot* RooAbsReal::plotOnWithErrorBand(RooPlot* frame, const RooFitResult& fr, Double_t Z, const RooArgSet* params, const RooLinkedList& argList, Bool_t method1) const Bool_t RooAbsReal::plotSanityChecks(RooPlot* frame) const void RooAbsArg::printAttribList(ostream& os) const void RooAbsArg::registerProxy(RooArgProxy& proxy) void RooAbsArg::registerProxy(RooSetProxy& proxy) void RooAbsArg::registerProxy(RooListProxy& proxy) void RooAbsReal::selectComp(Bool_t flag) virtual void RooAbsReal::selectNormalization(const RooArgSet* depSet = 0, Bool_t force = kFALSE) virtual void RooAbsReal::selectNormalizationRange(const char* rangeName = 0, Bool_t force = kFALSE) void RooAbsArg::setProxyNormSet(const RooArgSet* nset) void RooAbsArg::setShapeDirty(const RooAbsArg* source) const virtual void RooAbsReal::setTreeBranchStatus(TTree& t, Bool_t active) void RooAbsArg::setValueDirty(const RooAbsArg* source) const virtual void RooAbsReal::syncCache(const RooArgSet* set = 0) Double_t RooAbsReal::traceEval(const RooArgSet* set) const virtual Bool_t RooAbsReal::traceEvalHook(Double_t) const void RooAbsArg::unRegisterProxy(RooArgProxy& proxy) void RooAbsArg::unRegisterProxy(RooSetProxy& proxy) void RooAbsArg::unRegisterProxy(RooListProxy& proxy)
private:
 virtual Double_t evaluate() const

## Data Members

public:
 static RooAbsArg::OperMode RooAbsArg::AClean static RooAbsArg::OperMode RooAbsArg::ADirty static RooAbsArg::ConstOpCode RooAbsArg::Activate static RooAbsArg::CacheMode RooAbsArg::Always static RooAbsArg::OperMode RooAbsArg::Auto static RooAbsReal::ErrorLoggingMode RooAbsReal::CollectErrors static RooAbsArg::ConstOpCode RooAbsArg::ConfigChange static RooAbsReal::ErrorLoggingMode RooAbsReal::CountErrors static RooAbsArg::ConstOpCode RooAbsArg::DeActivate static RooAbsReal::ErrorLoggingMode RooAbsReal::Ignore static RooAbsArg::CacheMode RooAbsArg::Never static RooAbsArg::CacheMode RooAbsArg::NotAdvised static RooAbsReal::ScaleType RooAbsReal::NumEvent static RooAbsReal::ErrorLoggingMode RooAbsReal::PrintErrors static RooAbsReal::ScaleType RooAbsReal::Raw static RooAbsReal::ScaleType RooAbsReal::Relative static RooAbsReal::ScaleType RooAbsReal::RelativeExpected static RooAbsArg::ConstOpCode RooAbsArg::ValueChange static map RooAbsArg::_ioEvoList temporary holding list for proxies needed in schema evolution static stack RooAbsArg::_ioReadStack reading stack static const UInt_t RooAbsArg::fnv1a32start static const ULong64_t RooAbsArg::fnv1a64start static RooPrintable::ContentsOption RooPrintable::kAddress static RooPrintable::ContentsOption RooPrintable::kArgs static TObject::(anonymous) TObject::kBitMask static TObject::EStatusBits TObject::kCanDelete static TObject::EStatusBits TObject::kCannotPick static RooPrintable::ContentsOption RooPrintable::kClassName static RooPrintable::ContentsOption RooPrintable::kCollectionHeader static RooPrintable::ContentsOption RooPrintable::kExtras static TObject::EStatusBits TObject::kHasUUID static RooPrintable::StyleOption RooPrintable::kInline static TObject::EStatusBits TObject::kInvalidObject static TObject::(anonymous) TObject::kIsOnHeap static TObject::EStatusBits TObject::kIsReferenced static TObject::EStatusBits TObject::kMustCleanup static RooPrintable::ContentsOption RooPrintable::kName static TObject::EStatusBits TObject::kNoContextMenu static TObject::(anonymous) TObject::kNotDeleted static TObject::EStatusBits TObject::kObjInCanvas static TObject::(anonymous) TObject::kOverwrite static TObject::(anonymous) TObject::kSingleKey static RooPrintable::StyleOption RooPrintable::kSingleLine static RooPrintable::StyleOption RooPrintable::kStandard static RooPrintable::ContentsOption RooPrintable::kTitle static RooPrintable::StyleOption RooPrintable::kTreeStructure static RooPrintable::ContentsOption RooPrintable::kValue static RooPrintable::StyleOption RooPrintable::kVerbose static TObject::(anonymous) TObject::kWriteDelete static TObject::(anonymous) TObject::kZombie
protected:
 set RooAbsArg::_boolAttrib Boolean attributes set RooAbsArg::_boolAttribTransient ! Transient boolean attributes (not copied in ctor) Bool_t RooAbsReal::_boolValue ! Transient cache for bool values from tree branches UChar_t RooAbsReal::_byteValue ! Transient cache for byte values from tree branches static Bool_t RooAbsReal::_cacheCheck If true, always validate contents of clean which outcome of evaluate() deque RooAbsArg::_cacheList list of caches RooRefCountList RooAbsArg::_clientList list of client objects RooRefCountList RooAbsArg::_clientListShape subset of clients that requested shape dirty flag propagation RooRefCountList RooAbsArg::_clientListValue subset of clients that requested value dirty flag propagation TIterator* RooAbsArg::_clientShapeIter ! Iterator over _clientListShape TIterator* RooAbsArg::_clientValueIter ! Iterator over _clientListValue RooRealProxy RooLegendre::_ctheta Bool_t RooAbsArg::_deleteWatch ! Delete watch flag RooExpensiveObjectCache* RooAbsArg::_eocache Pointer to global cache manager for any expensive components created by this object Bool_t RooAbsArg::_fast Allow fast access mode in getVal() and proxies Float_t RooAbsReal::_floatValue ! Transient cache for floating point values from tree branches Bool_t RooAbsReal::_forceNumInt Force numerical integration if flag set static Bool_t RooAbsReal::_globalSelectComp Global activation switch for component selection static Bool_t RooAbsReal::_hideOffset Offset hiding flag static Bool_t RooAbsArg::_inhibitDirty Static flag controlling global inhibit of dirty state propagation Int_t RooAbsReal::_intValue ! Transient cache for integer values from tree branches Bool_t RooAbsArg::_isConstant ! Cached isConstant status int RooLegendre::_l1 int RooLegendre::_l2 TString RooAbsReal::_label Plot label for objects value RooArgSet* RooAbsReal::_lastNSet ! Bool_t RooAbsArg::_localNoInhibitDirty ! Prevent 'AlwaysDirty' mode for this node int RooLegendre::_m1 int RooLegendre::_m2 static Int_t RooPrintable::_nameLength TNamed* RooAbsArg::_namePtr ! Do not persist. Pointer to global instance of string that matches object named RooAbsArg::OperMode RooAbsArg::_operMode Dirty state propagation mode RooArgSet* RooAbsArg::_ownedComponents ! Set of owned component Int_t RooAbsReal::_plotBins Number of plot bins Double_t RooAbsReal::_plotMax Maximum of plot range Double_t RooAbsReal::_plotMin Minimum of plot range Bool_t RooAbsArg::_prohibitServerRedirect ! Prohibit server redirects -- Debugging tool RooRefArray RooAbsArg::_proxyList list of proxies Char_t RooAbsReal::_sbyteValue ! Transient cache for signed byte values from tree branches Bool_t RooAbsReal::_selectComp ! Component selection flag for RooAbsPdf::plotCompOn RooRefCountList RooAbsArg::_serverList list of server objects Bool_t RooAbsArg::_shapeDirty Flag set if value needs recalculating because input shapes modified RooNumIntConfig* RooAbsReal::_specIntegratorConfig Numeric integrator configuration specific for this object map RooAbsArg::_stringAttrib String attributes Bool_t RooAbsReal::_treeVar !do not persist UInt_t RooAbsReal::_uintValue ! Transient cache for unsigned integer values from tree branches TString RooAbsReal::_unit Unit for objects value Double_t RooAbsReal::_value Cache for current value of object Bool_t RooAbsArg::_valueDirty Flag set if value needs recalculating because input values modified static Bool_t RooAbsArg::_verboseDirty Static flag controlling verbose messaging for dirty state changes TString TNamed::fName object identifier TString TNamed::fTitle object title
private:
 double _n RooRealProxy _phi int _sgn1 int _sgn2

## Function documentation

RooSpHarmonic(const char* name, const char* title, RooAbsReal& ctheta, RooAbsReal& phi, int l, int m)
RooSpHarmonic(const char* name, const char* title, RooAbsReal& ctheta, RooAbsReal& phi, int l1, int m1, int l2, int m2)
RooSpHarmonic(const RooSpHarmonic& other, const char* name = 0)
Double_t evaluate() const
Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars, const char* rangeName = 0) const
 we don't support indefinite integrals... maybe one day, when there is a use for it.....

Double_t analyticalIntegral(Int_t code, const char* rangeName = 0) const
Int_t getMaxVal(const RooArgSet& vars) const
Double_t maxVal(Int_t code) const
TObject* clone(const char* newname) const
{ return new RooSpHarmonic(*this, newname); }
virtual ~RooSpHarmonic()
{ }