Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooConstraintSum.cxx
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * @(#)root/roofitcore:$Id$
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 
17 /**
18 \file RooConstraintSum.cxx
19 \class RooConstraintSum
20 \ingroup Roofitcore
21 
22 RooConstraintSum calculates the sum of the -(log) likelihoods of
23 a set of RooAbsPfs that represent constraint functions. This class
24 is used to calculate the composite -log(L) of constraints to be
25 added to the regular -log(L) in RooAbsPdf::fitTo() with Constrain(..)
26 arguments.
27 **/
28 
29 
30 #include "RooFit.h"
31 
32 #include "Riostream.h"
33 #include "Riostream.h"
34 #include <math.h>
35 
36 #include "RooConstraintSum.h"
37 #include "RooAbsReal.h"
38 #include "RooAbsPdf.h"
39 #include "RooErrorHandler.h"
40 #include "RooArgSet.h"
41 #include "RooNLLVar.h"
42 #include "RooChi2Var.h"
43 #include "RooMsgService.h"
44 
45 using namespace std;
46 
47 ClassImp(RooConstraintSum);
48 ;
49 
50 
51 ////////////////////////////////////////////////////////////////////////////////
52 /// Default constructor
53 
54 RooConstraintSum::RooConstraintSum()
55 {
56 
57 }
58 
59 
60 
61 
62 ////////////////////////////////////////////////////////////////////////////////
63 /// Constructor with set of constraint p.d.f.s. All elements in constraintSet must inherit from RooAbsPdf
64 
65 RooConstraintSum::RooConstraintSum(const char* name, const char* title, const RooArgSet& constraintSet, const RooArgSet& normSet) :
66  RooAbsReal(name, title),
67  _set1("set1","First set of components",this),
68  _paramSet("paramSet","Set of parameters",this)
69 {
70  for (const auto comp : constraintSet) {
71  if (!dynamic_cast<RooAbsPdf*>(comp)) {
72  coutE(InputArguments) << "RooConstraintSum::ctor(" << GetName() << ") ERROR: component " << comp->GetName()
73  << " is not of type RooAbsPdf" << endl ;
74  RooErrorHandler::softAbort() ;
75  }
76  _set1.add(*comp) ;
77  }
78 
79  _paramSet.add(normSet) ;
80 }
81 
82 
83 
84 
85 
86 ////////////////////////////////////////////////////////////////////////////////
87 /// Copy constructor
88 
89 RooConstraintSum::RooConstraintSum(const RooConstraintSum& other, const char* name) :
90  RooAbsReal(other, name),
91  _set1("set1",this,other._set1),
92  _paramSet("paramSet",this,other._paramSet)
93 {
94 
95 }
96 
97 
98 
99 ////////////////////////////////////////////////////////////////////////////////
100 /// Destructor
101 
102 RooConstraintSum::~RooConstraintSum()
103 {
104 
105 }
106 
107 
108 
109 ////////////////////////////////////////////////////////////////////////////////
110 /// Return sum of -log of constraint p.d.f.s
111 
112 Double_t RooConstraintSum::evaluate() const
113 {
114  Double_t sum(0);
115 
116  for (const auto comp : _set1) {
117  sum -= static_cast<RooAbsPdf*>(comp)->getLogVal(&_paramSet);
118  }
119 
120  return sum;
121 }
122