50 ClassImp(RooRandomizeParamMCSModule);
58 RooRandomizeParamMCSModule::RooRandomizeParamMCSModule() :
59 RooAbsMCStudyModule(
"RooRandomizeParamMCSModule",
"RooRandomizeParamMCSModule"), _data(0)
68 RooRandomizeParamMCSModule::RooRandomizeParamMCSModule(
const RooRandomizeParamMCSModule& other) :
69 RooAbsMCStudyModule(other),
70 _unifParams(other._unifParams),
71 _gausParams(other._gausParams),
81 RooRandomizeParamMCSModule:: ~RooRandomizeParamMCSModule()
94 void RooRandomizeParamMCSModule::sampleUniform(RooRealVar& param, Double_t lo, Double_t hi)
99 RooRealVar* actualPar =
static_cast<RooRealVar*
>(genParams()->find(param.GetName())) ;
101 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << param.GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
106 _unifParams.push_back(UniParam(¶m,lo,hi)) ;
115 void RooRandomizeParamMCSModule::sampleGaussian(RooRealVar& param, Double_t mean, Double_t sigma)
120 RooRealVar* actualPar =
static_cast<RooRealVar*
>(genParams()->find(param.GetName())) ;
122 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << param.GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
127 _gausParams.push_back(GausParam(¶m,mean,sigma)) ;
140 void RooRandomizeParamMCSModule::sampleSumUniform(
const RooArgSet& paramSet, Double_t lo, Double_t hi)
144 TIterator* iter = paramSet.createIterator() ;
146 while((arg=(RooAbsArg*)iter->Next())) {
148 RooRealVar* rrv =
dynamic_cast<RooRealVar*
>(arg) ;
150 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::sampleSumUniform() ERROR: input parameter " << arg->GetName() <<
" is not a RooRealVar and is ignored" << endl ;
161 TIterator* psiter = okset.createIterator() ;
163 while ((arg2=(RooAbsArg*)psiter->Next())) {
164 RooRealVar* actualVar=
static_cast<RooRealVar*
>(genParams()->find(arg2->GetName())) ;
166 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::sampleSumUniform: variable " << arg2->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
168 okset2.add(*actualVar) ;
180 _unifParamSets.push_back(UniParamSet(okset2,lo,hi)) ;
195 void RooRandomizeParamMCSModule::sampleSumGauss(
const RooArgSet& paramSet, Double_t mean, Double_t sigma)
199 TIterator* iter = paramSet.createIterator() ;
201 while((arg=(RooAbsArg*)iter->Next())) {
203 RooRealVar* rrv =
dynamic_cast<RooRealVar*
>(arg) ;
205 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::sampleSumGauss() ERROR: input parameter " << arg->GetName() <<
" is not a RooRealVar and is ignored" << endl ;
215 TIterator* psiter = okset.createIterator() ;
217 while ((arg2=(RooAbsArg*)psiter->Next())) {
218 RooRealVar* actualVar=
static_cast<RooRealVar*
>(genParams()->find(arg2->GetName())) ;
220 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::sampleSumUniform: variable " << arg2->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
222 okset2.add(*actualVar) ;
233 _gausParamSets.push_back(GausParamSet(okset,mean,sigma)) ;
243 Bool_t RooRandomizeParamMCSModule::initializeInstance()
246 std::list<UniParam>::iterator uiter ;
247 for (uiter= _unifParams.begin() ; uiter!= _unifParams.end() ; ++uiter) {
250 RooRealVar* actualPar =
static_cast<RooRealVar*
>(genParams()->find(uiter->_param->GetName())) ;
252 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << uiter->_param->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
253 uiter = _unifParams.erase(uiter) ;
256 uiter->_param = actualPar ;
259 TString parName = Form(
"%s_gen",uiter->_param->GetName()) ;
260 TString parTitle = Form(
"%s as generated",uiter->_param->GetTitle()) ;
261 RooRealVar* par_gen =
new RooRealVar(parName.Data(),parTitle.Data(),0) ;
262 _genParSet.addOwned(*par_gen) ;
266 std::list<GausParam>::iterator giter ;
267 for (giter= _gausParams.begin() ; giter!= _gausParams.end() ; ++giter) {
270 RooRealVar* actualPar =
static_cast<RooRealVar*
>(genParams()->find(giter->_param->GetName())) ;
272 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << giter->_param->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
273 giter = _gausParams.erase(giter) ;
276 giter->_param = actualPar ;
279 TString parName = Form(
"%s_gen",giter->_param->GetName()) ;
280 TString parTitle = Form(
"%s as generated",giter->_param->GetTitle()) ;
281 RooRealVar* par_gen =
new RooRealVar(parName.Data(),parTitle.Data(),0) ;
282 _genParSet.addOwned(*par_gen) ;
287 std::list<UniParamSet>::iterator usiter ;
288 for (usiter= _unifParamSets.begin() ; usiter!= _unifParamSets.end() ; ++usiter) {
291 RooArgSet actualPSet ;
292 TIterator* psiter = usiter->_pset.createIterator() ;
294 while ((arg=(RooAbsArg*)psiter->Next())) {
295 RooRealVar* actualVar=
static_cast<RooRealVar*
>(genParams()->find(arg->GetName())) ;
297 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << arg->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
299 actualPSet.add(*actualVar) ;
303 usiter->_pset.removeAll() ;
304 usiter->_pset.add(actualPSet) ;
307 TIterator* iter = usiter->_pset.createIterator() ;
309 while((param=(RooRealVar*)iter->Next())) {
310 TString parName = Form(
"%s_gen",param->GetName()) ;
311 TString parTitle = Form(
"%s as generated",param->GetTitle()) ;
312 RooRealVar* par_gen =
new RooRealVar(parName.Data(),parTitle.Data(),0) ;
313 _genParSet.addOwned(*par_gen) ;
319 std::list<GausParamSet>::iterator ugiter ;
320 for (ugiter= _gausParamSets.begin() ; ugiter!= _gausParamSets.end() ; ++ugiter) {
323 RooArgSet actualPSet ;
324 TIterator* psiter = ugiter->_pset.createIterator() ;
326 while ((arg=(RooAbsArg*)psiter->Next())) {
327 RooRealVar* actualVar=
static_cast<RooRealVar*
>(genParams()->find(arg->GetName())) ;
329 oocoutW((TObject*)0,InputArguments) <<
"RooRandomizeParamMCSModule::initializeInstance: variable " << arg->GetName() <<
" is not a parameter of RooMCStudy model and is ignored!" << endl ;
331 actualPSet.add(*actualVar) ;
334 ugiter->_pset.removeAll() ;
335 ugiter->_pset.add(actualPSet) ;
338 TIterator* iter = ugiter->_pset.createIterator() ;
340 while((param=(RooRealVar*)iter->Next())) {
341 TString parName = Form(
"%s_gen",param->GetName()) ;
342 TString parTitle = Form(
"%s as generated",param->GetTitle()) ;
343 RooRealVar* par_gen =
new RooRealVar(parName.Data(),parTitle.Data(),0) ;
344 _genParSet.addOwned(*par_gen) ;
349 _data =
new RooDataSet(
"DeltaLLSigData",
"Additional data for Delta(-log(L)) study",_genParSet) ;
359 Bool_t RooRandomizeParamMCSModule::initializeRun(Int_t )
371 Bool_t RooRandomizeParamMCSModule::processBeforeGen(Int_t )
374 std::list<UniParam>::iterator uiter ;
375 for (uiter= _unifParams.begin() ; uiter!= _unifParams.end() ; ++uiter) {
376 Double_t newVal = RooRandom::randomGenerator()->Uniform(uiter->_lo,uiter->_hi) ;
377 oocoutE((TObject*)0,Generation) <<
"RooRandomizeParamMCSModule::processBeforeGen: applying uniform smearing to generator parameter "
378 << uiter->_param->GetName() <<
" in range [" << uiter->_lo <<
"," << uiter->_hi <<
"], chosen value for this sample is " << newVal << endl ;
379 uiter->_param->setVal(newVal) ;
381 RooRealVar* genpar =
static_cast<RooRealVar*
>(_genParSet.find(Form(
"%s_gen",uiter->_param->GetName()))) ;
382 genpar->setVal(newVal) ;
386 std::list<GausParam>::iterator giter ;
387 for (giter= _gausParams.begin() ; giter!= _gausParams.end() ; ++giter) {
388 Double_t newVal = RooRandom::randomGenerator()->Gaus(giter->_mean,giter->_sigma) ;
389 oocoutI((TObject*)0,Generation) <<
"RooRandomizeParamMCSModule::processBeforeGen: applying gaussian smearing to generator parameter "
390 << giter->_param->GetName() <<
" with a mean of " << giter->_mean <<
" and a width of " << giter->_sigma <<
", chosen value for this sample is " << newVal << endl ;
391 giter->_param->setVal(newVal) ;
393 RooRealVar* genpar =
static_cast<RooRealVar*
>(_genParSet.find(Form(
"%s_gen",giter->_param->GetName()))) ;
394 genpar->setVal(newVal) ;
398 std::list<UniParamSet>::iterator usiter ;
399 for (usiter= _unifParamSets.begin() ; usiter!= _unifParamSets.end() ; ++usiter) {
402 Double_t newVal = RooRandom::randomGenerator()->Uniform(usiter->_lo,usiter->_hi) ;
403 oocoutI((TObject*)0,Generation) <<
"RooRandomizeParamMCSModule::processBeforeGen: applying uniform smearing to sum of set of generator parameters "
405 <<
" in range [" << usiter->_lo <<
"," << usiter->_hi <<
"], chosen sum value for this sample is " << newVal << endl ;
408 RooAddition sumVal(
"sumVal",
"sumVal",usiter->_pset) ;
409 Double_t compScaleFactor = newVal/sumVal.getVal() ;
412 TIterator* iter = usiter->_pset.createIterator() ;
414 while((param=(RooRealVar*)iter->Next())) {
415 param->setVal(param->getVal()*compScaleFactor) ;
416 RooRealVar* genpar =
static_cast<RooRealVar*
>(_genParSet.find(Form(
"%s_gen",param->GetName()))) ;
417 genpar->setVal(param->getVal()) ;
423 std::list<GausParamSet>::iterator gsiter ;
424 for (gsiter= _gausParamSets.begin() ; gsiter!= _gausParamSets.end() ; ++gsiter) {
427 Double_t newVal = RooRandom::randomGenerator()->Gaus(gsiter->_mean,gsiter->_sigma) ;
428 oocoutI((TObject*)0,Generation) <<
"RooRandomizeParamMCSModule::processBeforeGen: applying gaussian smearing to sum of set of generator parameters "
430 <<
" with a mean of " << gsiter->_mean <<
" and a width of " << gsiter->_sigma
431 <<
", chosen value for this sample is " << newVal << endl ;
434 RooAddition sumVal(
"sumVal",
"sumVal",gsiter->_pset) ;
435 Double_t compScaleFactor = newVal/sumVal.getVal() ;
438 TIterator* iter = gsiter->_pset.createIterator() ;
440 while((param=(RooRealVar*)iter->Next())) {
441 param->setVal(param->getVal()*compScaleFactor) ;
442 RooRealVar* genpar =
static_cast<RooRealVar*
>(_genParSet.find(Form(
"%s_gen",param->GetName()))) ;
443 genpar->setVal(param->getVal()) ;
448 _data->add(_genParSet) ;
459 RooDataSet* RooRandomizeParamMCSModule::finalizeRun()