ROOT  6.06/09
Reference Guide
RooFracRemainder.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 //
19 // BEGIN_HTML
20 //
21 // RooFracRemainder calculates the remainder fraction of a sum of RooAbsReal
22 // fraction, i.e (1 - sum_i a_i). This class is used by RooSimWSTool to
23 // as specialization of the remainder fraction term of a parameter with
24 // a constrained split
25 // END_HTML
26 //
27 
28 
29 #include "RooFit.h"
30 
31 #include "Riostream.h"
32 #include "Riostream.h"
33 #include <math.h>
34 
35 #include "RooFracRemainder.h"
36 #include "RooAbsReal.h"
37 #include "RooAbsPdf.h"
38 #include "RooErrorHandler.h"
39 #include "RooArgSet.h"
40 #include "RooMsgService.h"
41 
42 using namespace std;
43 
45 ;
46 
47 
48 ////////////////////////////////////////////////////////////////////////////////
49 /// Default constructor
50 
52 {
53  _setIter1 = _set1.createIterator() ;
54 }
55 
56 
57 
58 ////////////////////////////////////////////////////////////////////////////////
59 /// Constructor with given set of input fractions. All arguments in sumSet must be of type RooAbsReal.
60 
61 RooFracRemainder::RooFracRemainder(const char* name, const char* title, const RooArgSet& sumSet) :
62  RooAbsReal(name, title),
63  _set1("set1","First set of components",this)
64 {
66 
67  TIterator* inputIter = sumSet.createIterator() ;
68  RooAbsArg* comp ;
69  while((comp = (RooAbsArg*)inputIter->Next())) {
70  if (!dynamic_cast<RooAbsReal*>(comp)) {
71  coutE(InputArguments) << "RooFracRemainder::ctor(" << GetName() << ") ERROR: component " << comp->GetName()
72  << " is not of type RooAbsReal" << endl ;
74  }
75  _set1.add(*comp) ;
76  }
77 
78  delete inputIter ;
79 }
80 
81 
82 
83 
84 ////////////////////////////////////////////////////////////////////////////////
85 /// Copy constructor
86 
88  RooAbsReal(other, name),
89  _set1("set1",this,other._set1)
90 {
92 
93  // Member _ownedList is intentionally not copy-constructed -- ownership is not transferred
94 }
95 
96 
97 
98 ////////////////////////////////////////////////////////////////////////////////
99 /// Destructor
100 
102 {
103  if (_setIter1) delete _setIter1 ;
104 }
105 
106 
107 
108 ////////////////////////////////////////////////////////////////////////////////
109 /// Calculate value
110 
112 {
113  Double_t sum(1);
114  RooAbsReal* comp ;
115  const RooArgSet* nset = _set1.nset() ;
116 
117  _setIter1->Reset() ;
118 
119  while((comp=(RooAbsReal*)_setIter1->Next())) {
120  sum -= comp->getVal(nset) ;
121  }
122 
123  return sum ;
124 }
125 
const RooArgSet * nset() const
Definition: RooAbsProxy.h:47
#define coutE(a)
Definition: RooMsgService.h:35
static void softAbort()
virtual void Reset()=0
TIterator * _setIter1
STL namespace.
ClassImp(RooFracRemainder)
Iterator abstract base class.
Definition: TIterator.h:32
RooFracRemainder()
Default constructor.
TIterator * createIterator(Bool_t dir=kIterForward) const
Double_t getVal(const RooArgSet *set=0) const
Definition: RooAbsReal.h:64
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
virtual ~RooFracRemainder()
Destructor.
Double_t evaluate() const
Iterator over set of input fractions.
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
#define name(a, b)
Definition: linkTestLib0.cpp:5
RooListProxy _set1
virtual TObject * Next()=0
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:66