// @(#)root/roostats:$Id$
// Author: Kyle Cranmer   28/07/2008

/*************************************************************************
 * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef RooStats_NumberCountingPdfFactory
#define RooStats_NumberCountingPdfFactory

#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif

class RooWorkspace; 
class RooRealVar; 

namespace RooStats{

   class  NumberCountingPdfFactory {

   public:
      // need one for expected and one for observed
      NumberCountingPdfFactory();
      virtual ~NumberCountingPdfFactory();

      void AddModel(Double_t* sigExp, Int_t nchan, RooWorkspace* ws, 
                    const char* pdfName = "CombinedPdf", const char* masterSignalName = "masterSignal") ; 

      void AddData(Double_t* mainMeas, Double_t* bkgMeas, Double_t* db, 
                   Int_t nbins, RooWorkspace* ws, const char* dsName = "NumberCountingData");
      void AddExpData(Double_t* sigExp, Double_t* bkgExp, Double_t* db, 
                      Int_t nbins, RooWorkspace* ws, const char* dsName = "ExpectedNumberCountingData");
      void AddExpDataWithSideband(Double_t* sigExp, Double_t* bkgExp, Double_t* tau, 
                                  Int_t nbins, RooWorkspace* ws, const char* dsName = "NumberCountingData");
      void AddDataWithSideband(Double_t* mainMeas, Double_t* sideband, Double_t* tau, 
                               Int_t nbins, RooWorkspace* ws, const char* dsName = "ExpectedNumberCountingData");

   private:
      RooRealVar* SafeObservableCreation(RooWorkspace* ws, const char* varName, Double_t value) ;
      RooRealVar* SafeObservableCreation(RooWorkspace* ws, const char* varName, Double_t value, Double_t maximum) ;


   protected:
      ClassDef(NumberCountingPdfFactory,1) // A factory specific to common number counting problems.

   };
}

#endif
 NumberCountingPdfFactory.h:1
 NumberCountingPdfFactory.h:2
 NumberCountingPdfFactory.h:3
 NumberCountingPdfFactory.h:4
 NumberCountingPdfFactory.h:5
 NumberCountingPdfFactory.h:6
 NumberCountingPdfFactory.h:7
 NumberCountingPdfFactory.h:8
 NumberCountingPdfFactory.h:9
 NumberCountingPdfFactory.h:10
 NumberCountingPdfFactory.h:11
 NumberCountingPdfFactory.h:12
 NumberCountingPdfFactory.h:13
 NumberCountingPdfFactory.h:14
 NumberCountingPdfFactory.h:15
 NumberCountingPdfFactory.h:16
 NumberCountingPdfFactory.h:17
 NumberCountingPdfFactory.h:18
 NumberCountingPdfFactory.h:19
 NumberCountingPdfFactory.h:20
 NumberCountingPdfFactory.h:21
 NumberCountingPdfFactory.h:22
 NumberCountingPdfFactory.h:23
 NumberCountingPdfFactory.h:24
 NumberCountingPdfFactory.h:25
 NumberCountingPdfFactory.h:26
 NumberCountingPdfFactory.h:27
 NumberCountingPdfFactory.h:28
 NumberCountingPdfFactory.h:29
 NumberCountingPdfFactory.h:30
 NumberCountingPdfFactory.h:31
 NumberCountingPdfFactory.h:32
 NumberCountingPdfFactory.h:33
 NumberCountingPdfFactory.h:34
 NumberCountingPdfFactory.h:35
 NumberCountingPdfFactory.h:36
 NumberCountingPdfFactory.h:37
 NumberCountingPdfFactory.h:38
 NumberCountingPdfFactory.h:39
 NumberCountingPdfFactory.h:40
 NumberCountingPdfFactory.h:41
 NumberCountingPdfFactory.h:42
 NumberCountingPdfFactory.h:43
 NumberCountingPdfFactory.h:44
 NumberCountingPdfFactory.h:45
 NumberCountingPdfFactory.h:46
 NumberCountingPdfFactory.h:47
 NumberCountingPdfFactory.h:48
 NumberCountingPdfFactory.h:49
 NumberCountingPdfFactory.h:50
 NumberCountingPdfFactory.h:51
 NumberCountingPdfFactory.h:52
 NumberCountingPdfFactory.h:53
 NumberCountingPdfFactory.h:54