ROOT logo
// @(#)root/roostats:$Id:  cranmer $
// Author: Kyle Cranmer, Akira Shibata
/*************************************************************************
 * 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.             *
 *************************************************************************/

//_________________________________________________
/*
BEGIN_HTML
<p>
</p>
END_HTML
*/
//

#include "RooFit.h"

#include "Riostream.h"
#include "Riostream.h"
#include <math.h>
#include "TMath.h"

#include "RooAbsReal.h"
#include "RooRealVar.h"
#include "RooArgList.h"
#include "RooMsgService.h"
#include "TMath.h"

#include "RooStats/HistFactory/LinInterpVar.h"

ClassImp(RooStats::HistFactory::LinInterpVar)

using namespace RooStats;
using namespace HistFactory;

//_____________________________________________________________________________
LinInterpVar::LinInterpVar()
{
  // Default constructor
  _paramIter = _paramList.createIterator() ;
  _nominal = 0 ;
}


//_____________________________________________________________________________
LinInterpVar::LinInterpVar(const char* name, const char* title, 
		       const RooArgList& paramList, 
		       double nominal, vector<double> low, vector<double> high) :
  RooAbsReal(name, title),
  _paramList("paramList","List of paramficients",this),
  _nominal(nominal), _low(low), _high(high)
{

  _paramIter = _paramList.createIterator() ;


  TIterator* paramIter = paramList.createIterator() ;
  RooAbsArg* param ;
  while((param = (RooAbsArg*)paramIter->Next())) {
    if (!dynamic_cast<RooAbsReal*>(param)) {
      coutE(InputArguments) << "LinInterpVar::ctor(" << GetName() << ") ERROR: paramficient " << param->GetName() 
			    << " is not of type RooAbsReal" << endl ;
      assert(0) ;
    }
    _paramList.add(*param) ;
  }
  delete paramIter ;

}

//_____________________________________________________________________________
LinInterpVar::LinInterpVar(const char* name, const char* title) :
  RooAbsReal(name, title),
  _paramList("paramList","List of coefficients",this)
{
  // Constructor of flat polynomial function

  _paramIter = _paramList.createIterator() ;
}

//_____________________________________________________________________________
LinInterpVar::LinInterpVar(const LinInterpVar& other, const char* name) :
  RooAbsReal(other, name), 
  _paramList("paramList",this,other._paramList),
  _nominal(other._nominal), _low(other._low), _high(other._high)
  
{
  // Copy constructor
  _paramIter = _paramList.createIterator() ;
  
}


//_____________________________________________________________________________
LinInterpVar::~LinInterpVar() 
{
  // Destructor
  delete _paramIter ;
}




//_____________________________________________________________________________
Double_t LinInterpVar::evaluate() const 
{
  // Calculate and return value of polynomial

  Double_t sum(_nominal) ;
  _paramIter->Reset() ;

  RooAbsReal* param ;
  //const RooArgSet* nset = _paramList.nset() ;
  int i=0;

  while((param=(RooAbsReal*)_paramIter->Next())) {
    //    param->Print("v");

    if(param->getVal()>0)
      sum +=  param->getVal()*(_high.at(i) - _nominal );
    else
      sum += param->getVal()*(_nominal - _low.at(i));

    ++i;
  }

  if(sum<=0) {
    sum=1E-9;
  }    

  return sum;
}



 LinInterpVar.cxx:1
 LinInterpVar.cxx:2
 LinInterpVar.cxx:3
 LinInterpVar.cxx:4
 LinInterpVar.cxx:5
 LinInterpVar.cxx:6
 LinInterpVar.cxx:7
 LinInterpVar.cxx:8
 LinInterpVar.cxx:9
 LinInterpVar.cxx:10
 LinInterpVar.cxx:11
 LinInterpVar.cxx:12
 LinInterpVar.cxx:13
 LinInterpVar.cxx:14
 LinInterpVar.cxx:15
 LinInterpVar.cxx:16
 LinInterpVar.cxx:17
 LinInterpVar.cxx:18
 LinInterpVar.cxx:19
 LinInterpVar.cxx:20
 LinInterpVar.cxx:21
 LinInterpVar.cxx:22
 LinInterpVar.cxx:23
 LinInterpVar.cxx:24
 LinInterpVar.cxx:25
 LinInterpVar.cxx:26
 LinInterpVar.cxx:27
 LinInterpVar.cxx:28
 LinInterpVar.cxx:29
 LinInterpVar.cxx:30
 LinInterpVar.cxx:31
 LinInterpVar.cxx:32
 LinInterpVar.cxx:33
 LinInterpVar.cxx:34
 LinInterpVar.cxx:35
 LinInterpVar.cxx:36
 LinInterpVar.cxx:37
 LinInterpVar.cxx:38
 LinInterpVar.cxx:39
 LinInterpVar.cxx:40
 LinInterpVar.cxx:41
 LinInterpVar.cxx:42
 LinInterpVar.cxx:43
 LinInterpVar.cxx:44
 LinInterpVar.cxx:45
 LinInterpVar.cxx:46
 LinInterpVar.cxx:47
 LinInterpVar.cxx:48
 LinInterpVar.cxx:49
 LinInterpVar.cxx:50
 LinInterpVar.cxx:51
 LinInterpVar.cxx:52
 LinInterpVar.cxx:53
 LinInterpVar.cxx:54
 LinInterpVar.cxx:55
 LinInterpVar.cxx:56
 LinInterpVar.cxx:57
 LinInterpVar.cxx:58
 LinInterpVar.cxx:59
 LinInterpVar.cxx:60
 LinInterpVar.cxx:61
 LinInterpVar.cxx:62
 LinInterpVar.cxx:63
 LinInterpVar.cxx:64
 LinInterpVar.cxx:65
 LinInterpVar.cxx:66
 LinInterpVar.cxx:67
 LinInterpVar.cxx:68
 LinInterpVar.cxx:69
 LinInterpVar.cxx:70
 LinInterpVar.cxx:71
 LinInterpVar.cxx:72
 LinInterpVar.cxx:73
 LinInterpVar.cxx:74
 LinInterpVar.cxx:75
 LinInterpVar.cxx:76
 LinInterpVar.cxx:77
 LinInterpVar.cxx:78
 LinInterpVar.cxx:79
 LinInterpVar.cxx:80
 LinInterpVar.cxx:81
 LinInterpVar.cxx:82
 LinInterpVar.cxx:83
 LinInterpVar.cxx:84
 LinInterpVar.cxx:85
 LinInterpVar.cxx:86
 LinInterpVar.cxx:87
 LinInterpVar.cxx:88
 LinInterpVar.cxx:89
 LinInterpVar.cxx:90
 LinInterpVar.cxx:91
 LinInterpVar.cxx:92
 LinInterpVar.cxx:93
 LinInterpVar.cxx:94
 LinInterpVar.cxx:95
 LinInterpVar.cxx:96
 LinInterpVar.cxx:97
 LinInterpVar.cxx:98
 LinInterpVar.cxx:99
 LinInterpVar.cxx:100
 LinInterpVar.cxx:101
 LinInterpVar.cxx:102
 LinInterpVar.cxx:103
 LinInterpVar.cxx:104
 LinInterpVar.cxx:105
 LinInterpVar.cxx:106
 LinInterpVar.cxx:107
 LinInterpVar.cxx:108
 LinInterpVar.cxx:109
 LinInterpVar.cxx:110
 LinInterpVar.cxx:111
 LinInterpVar.cxx:112
 LinInterpVar.cxx:113
 LinInterpVar.cxx:114
 LinInterpVar.cxx:115
 LinInterpVar.cxx:116
 LinInterpVar.cxx:117
 LinInterpVar.cxx:118
 LinInterpVar.cxx:119
 LinInterpVar.cxx:120
 LinInterpVar.cxx:121
 LinInterpVar.cxx:122
 LinInterpVar.cxx:123
 LinInterpVar.cxx:124
 LinInterpVar.cxx:125
 LinInterpVar.cxx:126
 LinInterpVar.cxx:127
 LinInterpVar.cxx:128
 LinInterpVar.cxx:129
 LinInterpVar.cxx:130
 LinInterpVar.cxx:131
 LinInterpVar.cxx:132
 LinInterpVar.cxx:133
 LinInterpVar.cxx:134
 LinInterpVar.cxx:135
 LinInterpVar.cxx:136
 LinInterpVar.cxx:137
 LinInterpVar.cxx:138
 LinInterpVar.cxx:139