RooJeffreysPrior.cxx

Go to the documentation of this file.
00001 /*****************************************************************************
00002 
00003  *****************************************************************************/
00004 
00005 //////////////////////////////////////////////////////////////////////////////
00006 // 
00007 // BEGIN_HTML
00008 // RooJeffreysPrior 
00009 // END_HTML
00010 //
00011 
00012 
00013 #include "RooFit.h"
00014 
00015 #include "Riostream.h"
00016 #include "Riostream.h"
00017 #include <math.h>
00018 
00019 #include "RooJeffreysPrior.h"
00020 #include "RooAbsReal.h"
00021 #include "RooAbsPdf.h"
00022 #include "RooErrorHandler.h"
00023 #include "RooArgSet.h"
00024 #include "RooMsgService.h"
00025 #include "RooFitResult.h"
00026 #include "TMatrixDSym.h"
00027 #include "RooDataHist.h"
00028 #include "RooFitResult.h"
00029 #include "RooNumIntConfig.h"
00030 #include "RooRealVar.h"
00031 
00032 ClassImp(RooJeffreysPrior)
00033 ;
00034 
00035 using namespace RooFit;
00036 
00037 //_____________________________________________________________________________
00038 RooJeffreysPrior::RooJeffreysPrior(const char* name, const char* title, 
00039                              RooAbsPdf& nominal,
00040                              const RooArgList& paramSet,
00041                              const RooArgList& obsSet) :
00042   RooAbsPdf(name, title),
00043   _nominal("nominal","nominal",this,nominal,kFALSE,kFALSE),
00044   _obsSet("!obsSet","obs-side variation",this,kFALSE,kFALSE),
00045   _paramSet("!paramSet","high-side variation",this)
00046 {
00047   //_obsSet("!obsSet","obs-side variation",this),
00048   _obsIter = _obsSet.createIterator() ;
00049   _paramIter = _paramSet.createIterator() ;
00050 
00051 
00052   TIterator* inputIter1 = obsSet.createIterator() ;
00053   RooAbsArg* comp ;
00054   while((comp = (RooAbsArg*)inputIter1->Next())) {
00055     if (!dynamic_cast<RooAbsReal*>(comp)) {
00056       coutE(InputArguments) << "RooJeffreysPrior::ctor(" << GetName() << ") ERROR: component " << comp->GetName() 
00057                             << " in first list is not of type RooAbsReal" << endl ;
00058       RooErrorHandler::softAbort() ;
00059     }
00060     _obsSet.add(*comp) ;
00061     //    if (takeOwnership) {
00062     //      _ownedList.addOwned(*comp) ;
00063     //    }
00064   }
00065   delete inputIter1 ;
00066 
00067 
00068 
00069   TIterator* inputIter3 = paramSet.createIterator() ;
00070   while((comp = (RooAbsArg*)inputIter3->Next())) {
00071     if (!dynamic_cast<RooAbsReal*>(comp)) {
00072       coutE(InputArguments) << "RooJeffreysPrior::ctor(" << GetName() << ") ERROR: component " << comp->GetName() 
00073                             << " in first list is not of type RooAbsReal" << endl ;
00074       RooErrorHandler::softAbort() ;
00075     }
00076     _paramSet.add(*comp) ;
00077     //    if (takeOwnership) {
00078     //      _ownedList.addOwned(*comp) ;
00079     //    }
00080   }
00081   delete inputIter3 ;
00082 
00083 
00084   // use a different integrator by default.
00085   if(paramSet.getSize()==1)
00086     this->specialIntegratorConfig(kTRUE)->method1D().setLabel("RooAdaptiveGaussKronrodIntegrator1D")  ;
00087 
00088 }
00089 
00090 
00091 
00092 //_____________________________________________________________________________
00093 RooJeffreysPrior::RooJeffreysPrior(const RooJeffreysPrior& other, const char* name) :
00094   RooAbsPdf(other, name), 
00095   _nominal("!nominal",this,other._nominal),
00096   _obsSet("!obsSet",this,other._obsSet),
00097   _paramSet("!paramSet",this,other._paramSet)
00098 {
00099   // Copy constructor
00100   _obsIter = _obsSet.createIterator() ;
00101   _paramIter = _paramSet.createIterator() ;
00102 
00103   // Member _ownedList is intentionally not copy-constructed -- ownership is not transferred
00104 }
00105 
00106 //_____________________________________________________________________________
00107 RooJeffreysPrior::RooJeffreysPrior() 
00108 {
00109   // Default constructor
00110   _obsIter = NULL;
00111   _paramIter = NULL;
00112 
00113 }
00114 
00115 
00116 
00117 //_____________________________________________________________________________
00118 RooJeffreysPrior::~RooJeffreysPrior() 
00119 {
00120   // Destructor
00121 
00122   if (_obsIter) delete _obsIter ;
00123   if (_paramIter) delete _paramIter ;
00124 }
00125 
00126 
00127 
00128 
00129 //_____________________________________________________________________________
00130 Double_t RooJeffreysPrior::evaluate() const 
00131 {
00132   // Calculate and return current value of self
00133   RooFit::MsgLevel msglevel = RooMsgService::instance().globalKillBelow();
00134   RooMsgService::instance().setGlobalKillBelow(RooFit::WARNING);
00135   // create Asimov dataset
00136   //  _paramSet.Print("v");
00137   //  return sqrt(_paramSet.getRealValue("mu"));
00138   *(_nominal.arg().getVariables()) = _paramSet;
00139   /*
00140   cout << "_______________"<<endl;
00141   _paramSet.Print("v");
00142   _nominal->getVariables()->Print("v");
00143   cout << "_______________"<<endl;
00144   */
00145   RooDataHist* data = ((RooAbsPdf&)(_nominal.arg())).generateBinned(_obsSet,ExpectedData());
00146   //  data->Print("v");
00147   //RooFitResult* res = _nominal->fitTo(*data, Save(),PrintLevel(-1),Minos(kFALSE),SumW2Error(kTRUE));
00148   RooFitResult* res = ((RooAbsPdf&)(_nominal.arg())).fitTo(*data, Save(),PrintLevel(-1),Minos(kFALSE),SumW2Error(kFALSE));
00149   TMatrixDSym cov = res->covarianceMatrix();
00150   cov.Invert();
00151   double ret =  sqrt(cov.Determinant());
00152   
00153   /*
00154     // for 1 parameter can avoid making TMatrix etc.
00155     // but number of params may be > 1 with others held constant
00156   if(_paramSet.getSize()==1){
00157     RooRealVar* var = (RooRealVar*) _paramSet.first();
00158     // also, the _paramSet proxy one does not pick up a different value
00159     cout << "eval at "<< ret << " " << 1/(var->getError()) << endl; 
00160     // need to get the actual variable instance out of the pdf like below
00161     var = (RooRealVar*) _nominal->getVariables()->find(var->GetName());
00162     cout << "eval at "<< ret << " " << 1/(var->getError()) << endl; 
00163   }
00164   */
00165 
00166   //  res->Print();
00167   delete data;
00168   delete res;
00169   RooMsgService::instance().setGlobalKillBelow(msglevel);
00170 
00171   //  cout << "eval at "<< ret << endl; 
00172   //  _paramSet.Print("v");
00173   return ret;
00174 
00175 }
00176 
00177 //_____________________________________________________________________________
00178 Int_t RooJeffreysPrior::getAnalyticalIntegral(RooArgSet& /*allVars*/, RooArgSet& /*analVars*/, const char* /*rangeName*/) const 
00179 {
00180   //  if (matchArgs(allVars,analVars,x)) return 1 ;
00181   //  if (matchArgs(allVars,analVars,mean)) return 2 ;
00182   //  return 1;
00183   return 0 ;
00184 }
00185 
00186 
00187 
00188 //_____________________________________________________________________________
00189 Double_t RooJeffreysPrior::analyticalIntegral(Int_t code, const char* /*rangeName*/) const 
00190 {
00191   assert(code==1 );
00192   //cout << "evaluating analytic integral" << endl;
00193   return 1.;
00194 }
00195 
00196 

Generated on Tue Jul 5 14:55:15 2011 for ROOT_528-00b_version by  doxygen 1.5.1