ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 *    File: $Id: RooResolutionModel.h,v 1.26 2007/05/14 18:37:46 wouter Exp $
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/
#ifndef ROO_RESOLUTION_MODEL
#define ROO_RESOLUTION_MODEL

#include "RooAbsPdf.h"
#include "RooRealProxy.h"
#include "RooRealVar.h"
#include "RooFormulaVar.h"

class RooResolutionModel : public RooAbsPdf {
public:

  // Constructors, assignment etc
  inline RooResolutionModel() : _basis(0) { }
  RooResolutionModel(const char *name, const char *title, RooRealVar& x) ; 
  RooResolutionModel(const RooResolutionModel& other, const char* name=0);
  virtual TObject* clone(const char* newname) const = 0 ;
  virtual ~RooResolutionModel();

  Double_t getVal(const RooArgSet* nset=0) const ;
  virtual RooResolutionModel* convolution(RooFormulaVar* basis, RooAbsArg* owner) const ;
  RooRealVar& convVar() const ;
  const RooRealVar& basisConvVar() const ;

  inline Bool_t isBasisSupported(const char* name) const { return basisCode(name)?kTRUE:kFALSE ; }
  virtual Int_t basisCode(const char* name) const = 0 ;

  virtual void normLeafServerList(RooArgSet& list) const ;
  Double_t getNorm(const RooArgSet* nset=0) const ;

  inline const RooFormulaVar& basis() const { return _basis?*_basis:*identity() ; }
  Bool_t isConvolved() { return _basis ? kTRUE : kFALSE ; }

  virtual void printMultiline(ostream& os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const ;

  static void cleanup() ;

  static RooFormulaVar* identity() ;

protected:

  static RooFormulaVar* _identity ;  // Identity basis function pointe


  friend class RooConvGenContext ;
  friend class RooAddModel ;
  RooRealProxy x ;                   // Dependent/convolution variable

  virtual Bool_t redirectServersHook(const RooAbsCollection& newServerList, Bool_t mustReplaceAll, Bool_t nameChange, Bool_t isRecursive) ;
  virtual void changeBasis(RooFormulaVar* basis) ;
  Bool_t traceEvalHook(Double_t value) const ;


  friend class RooAbsAnaConvPdf ;

  Int_t _basisCode ;         // Identifier code for selected basis function
  RooFormulaVar* _basis ;    // Basis function convolved with this resolution model
  Bool_t _ownBasis ;         // Flag indicating ownership of _basis 

  ClassDef(RooResolutionModel,1) // Abstract Resolution Model
};

#endif
 RooResolutionModel.h:1
 RooResolutionModel.h:2
 RooResolutionModel.h:3
 RooResolutionModel.h:4
 RooResolutionModel.h:5
 RooResolutionModel.h:6
 RooResolutionModel.h:7
 RooResolutionModel.h:8
 RooResolutionModel.h:9
 RooResolutionModel.h:10
 RooResolutionModel.h:11
 RooResolutionModel.h:12
 RooResolutionModel.h:13
 RooResolutionModel.h:14
 RooResolutionModel.h:15
 RooResolutionModel.h:16
 RooResolutionModel.h:17
 RooResolutionModel.h:18
 RooResolutionModel.h:19
 RooResolutionModel.h:20
 RooResolutionModel.h:21
 RooResolutionModel.h:22
 RooResolutionModel.h:23
 RooResolutionModel.h:24
 RooResolutionModel.h:25
 RooResolutionModel.h:26
 RooResolutionModel.h:27
 RooResolutionModel.h:28
 RooResolutionModel.h:29
 RooResolutionModel.h:30
 RooResolutionModel.h:31
 RooResolutionModel.h:32
 RooResolutionModel.h:33
 RooResolutionModel.h:34
 RooResolutionModel.h:35
 RooResolutionModel.h:36
 RooResolutionModel.h:37
 RooResolutionModel.h:38
 RooResolutionModel.h:39
 RooResolutionModel.h:40
 RooResolutionModel.h:41
 RooResolutionModel.h:42
 RooResolutionModel.h:43
 RooResolutionModel.h:44
 RooResolutionModel.h:45
 RooResolutionModel.h:46
 RooResolutionModel.h:47
 RooResolutionModel.h:48
 RooResolutionModel.h:49
 RooResolutionModel.h:50
 RooResolutionModel.h:51
 RooResolutionModel.h:52
 RooResolutionModel.h:53
 RooResolutionModel.h:54
 RooResolutionModel.h:55
 RooResolutionModel.h:56
 RooResolutionModel.h:57
 RooResolutionModel.h:58
 RooResolutionModel.h:59
 RooResolutionModel.h:60
 RooResolutionModel.h:61
 RooResolutionModel.h:62
 RooResolutionModel.h:63
 RooResolutionModel.h:64
 RooResolutionModel.h:65
 RooResolutionModel.h:66
 RooResolutionModel.h:67
 RooResolutionModel.h:68
 RooResolutionModel.h:69
 RooResolutionModel.h:70
 RooResolutionModel.h:71
 RooResolutionModel.h:72
 RooResolutionModel.h:73
 RooResolutionModel.h:74
 RooResolutionModel.h:75
 RooResolutionModel.h:76
 RooResolutionModel.h:77