00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00014
00015
00016
00017
00018
00019
00020 #include "RooRarFit/rarVersion.hh"
00021
00022 #include "Riostream.h"
00023
00024 #include "RooFitCore/RooArgList.hh"
00025 #include "RooFitCore/RooDataSet.hh"
00026 #include "RooFitCore/RooProdPdf.hh"
00027 #include "RooFitCore/RooRealVar.hh"
00028 #include "RooFitCore/RooStringVar.hh"
00029 #include "RooFitCore/RooGlobalFunc.hh"
00030 using namespace RooFit;
00031
00032 #include "RooRarFit/rarProd.hh"
00033
00034 ClassImp(rarProd)
00035 ;
00036
00040 rarProd::rarProd()
00041 : rarCompBase()
00042 {
00043 init();
00044 }
00045
00058 rarProd::rarProd(const char *configFile, const char *configSec,
00059 const char *configStr,
00060 rarDatasets *theDatasets, RooDataSet *theData,
00061 const char *name, const char *title)
00062 : rarCompBase(configFile, configSec, configStr,
00063 theDatasets, theData, name, title, kFALSE)
00064 {
00065 init();
00066 }
00067
00068 rarProd::~rarProd()
00069 {
00070 }
00071
00078 void rarProd::init()
00079 {
00080
00081
00082
00083
00084 setControlBit("noUseBasePdfFit", "ndFit");
00085
00086
00087 RooLinkedList cmdList;
00088
00089
00090 RooArgSet condObsSet(getArgSet(readConfStr("CondObss",""),kFALSE));
00091
00092 rarStrParser condPdfsStr=readConfStr("CondPdfs","");
00093 while (condPdfsStr.nArgs()>0) {
00094 rarBasePdf *condPdf=(rarBasePdf*)_pdfList.FindObject(condPdfsStr[0]);
00095 condPdfsStr.Remove();
00096 if (condPdf) {
00097 _condPdfList.Add(condPdf);
00098 _condPdfs.add(*condPdf->getPdf());
00099
00100
00101
00102 RooArgSet *thisPdfSet=new RooArgSet(*condPdf->getPdf());
00103 RooArgSet *thisCondObsSet=new RooArgSet(condObsSet);
00104 thisCondObsSet->
00105 add(getArgSet(readConfStr
00106 (Form("CondObss_%s",condPdf->GetName()),""),kFALSE));
00107 condPdf->setCondObss(*thisCondObsSet);
00108 cmdList.Add(Conditional(*thisPdfSet,*thisCondObsSet).Clone());
00109 cout<<" "<<condPdf->GetName()<<" is conditional PDF"<<endl;
00110 cout<<" The normalization of this PDF is on "<<endl;
00111 thisCondObsSet->Print();
00112 }
00113 }
00114
00115 RooArgList subPdfs(_subPdfs);
00116 subPdfs.remove(_condPdfs);
00117 if (_condPdfs.getSize()>0) {
00118
00119
00120
00121 cout<<"The following PDFs are conditional PDFs:"<<endl;
00122 _condPdfs.Print();
00123 cout<<endl;
00124
00125
00126
00127 cout<<"The remaining PDFs in the production are:"<<endl;
00128 subPdfs.Print();
00129 cout<<endl;
00130 }
00131
00132
00133
00134 _thePdf=new RooProdPdf(Form("the_%s", GetName()), _pdfType+" "+GetTitle(),
00135 subPdfs, cmdList);
00136
00137 cout<<"done init of rarProd for "<<GetName()<<endl<<endl;
00138 }
00139
00147 RooAbsPdf *rarProd::getPdfWOvar(RooArgList ignoredObs)
00148 {
00149 RooAbsPdf *thePdf=_thePdf;
00150
00151 if (!(thePdf->dependsOn(ignoredObs))) return thePdf;
00152
00153 TString theName=Form("the_%s_%s", ignoredObs[0].GetName(), GetName());
00154 TString theTitle=Form("%s w/o %s", GetTitle(), ignoredObs[0].GetName());
00155 RooArgList myPdfList=getPdfsWOvar(ignoredObs);
00156 thePdf=new RooProdPdf(theName, theTitle, myPdfList);
00157
00158
00159 if (!(thePdf->dependsOn(ignoredObs))) return thePdf;
00160 delete thePdf;
00161
00162 thePdf=new RooGenericPdf(theName, theTitle, "1",
00163 *_thePdf->getParameters(_fullObs));
00164
00165
00166 return thePdf;
00167 }
00168
00175 RooAbsPdf *rarProd::getDPdfWvar(RooRealVar *theVar)
00176 {
00177 RooAbsPdf *retVal(0);
00178 for (Int_t i=0; i<_nComp; i++) {
00179 rarBasePdf *thePdf=(rarBasePdf*)_pdfList.At(i);
00180 retVal=thePdf->getDPdfWvar(theVar);
00181 if (retVal) return retVal;
00182 }
00183 return retVal;
00184 }
00185
00190 RooAbsPdf *rarProd::getProtGen()
00191 {
00192 if (_theProtGen) return _theProtGen;
00193
00194 rarCompBase::getProtGen();
00195 _theProtGen=_myDummyPdf;
00196 RooArgList pdfList(_protGenPdfs);
00197 if (!getControlBit("dummySubGenPdfs")) pdfList.add(_subProtGenPdfs);
00198 else pdfList.add(*_theProtGen);
00199 if ((pdfList.getSize()>1)||(!getControlBit("dummySubGenPdfs")))
00200 _theProtGen = new RooProdPdf (Form("protGen_%s",GetName()),
00201 Form("Prot Gen for %s", GetName()), pdfList);
00202
00203 return _theProtGen;
00204 }