ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id: RooRandomizeParamMCSModule.cxx 29139 2009-06-22 14:31:47Z brun $
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
//
// BEGIN_HTML
// RooRandomizeParamMCSModule is an add-on modules to RooMCStudy that
// allows you to randomize input generation parameters. Randomized generation
// parameters can be sampled from a uniform or Gaussian distribution.
// For every randomized parameter, an extra variable is added to 
// RooMCStudy::fitParDataSet() named <tt><parname>_gen</tt> that indicates the actual
// value used for generation for each trial. 
// <p>
// You can also choose to randomize the sum of N parameters, rather
// than a single parameter. In that case common multiplicative scale
// factor is applied to each component to bring the sum to the desired
// target value taken from either uniform or Gaussian sampling. This
// latter option is for example useful if you want to change the total
// number of expected events of an extended p.d.f
// END_HTML
//


#include "Riostream.h"
#include "RooDataSet.h"
#include "RooRealVar.h"
#include "RooRandom.h"
#include "TString.h"
#include "RooFit.h"
#include "RooFitResult.h"
#include "RooAddition.h"
#include "RooMsgService.h"
#include "RooRandomizeParamMCSModule.h"

using namespace std ;

ClassImp(RooRandomizeParamMCSModule)
  ;



//_____________________________________________________________________________
RooRandomizeParamMCSModule::RooRandomizeParamMCSModule() : 
  RooAbsMCStudyModule("RooRandomizeParamMCSModule","RooRandomizeParamMCSModule"), _data(0)
{
  // Constructor
}



//_____________________________________________________________________________
RooRandomizeParamMCSModule::RooRandomizeParamMCSModule(const RooRandomizeParamMCSModule& other) : 
  RooAbsMCStudyModule(other), 
  _unifParams(other._unifParams),
  _gausParams(other._gausParams), 
  _data(0)
{
  // Copy constructor
}



//_____________________________________________________________________________
RooRandomizeParamMCSModule:: ~RooRandomizeParamMCSModule() 
{
  // Destructor

  if (_data) {
    delete _data ;
  }
}



//_____________________________________________________________________________
void RooRandomizeParamMCSModule::sampleUniform(RooRealVar& param, Double_t lo, Double_t hi) 
{  
  // Request uniform smearing of param in range [lo,hi] in RooMCStudy
  // generation cycle

  // If we're already attached to a RooMCStudy, check that given param is actual generator model parameter
  // If not attached, this check is repeated at the attachment moment
  if (genParams()) {
    RooRealVar* actualPar = static_cast<RooRealVar*>(genParams()->find(param.GetName())) ;
    if (!actualPar) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << param.GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;
      return ;
    }
  }

  _unifParams.push_back(UniParam(&param,lo,hi)) ;
}



//_____________________________________________________________________________
void RooRandomizeParamMCSModule::sampleGaussian(RooRealVar& param, Double_t mean, Double_t sigma) 
{
  // Request Gaussian smearing of param in with mean 'mean' and width
  // 'sigma' in RooMCStudy generation cycle

  // If we're already attached to a RooMCStudy, check that given param is actual generator model parameter
  // If not attached, this check is repeated at the attachment moment
  if (genParams()) {
    RooRealVar* actualPar = static_cast<RooRealVar*>(genParams()->find(param.GetName())) ;
    if (!actualPar) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << param.GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;
      return ;
    }
  }

  _gausParams.push_back(GausParam(&param,mean,sigma)) ;
}




//_____________________________________________________________________________
void RooRandomizeParamMCSModule::sampleSumUniform(const RooArgSet& paramSet, Double_t lo, Double_t hi) 
{
  // Request uniform smearing of sum of parameters in paramSet uniform
  // smearing in range [lo,hi] in RooMCStudy generation cycle.  This
  // option applies a common multiplicative factor to each parameter
  // in paramSet to make the sum of the parameters add up to the
  // sampled value in the range [lo,hi]

  // Check that all args are RooRealVars
  RooArgSet okset ;
  TIterator* iter = paramSet.createIterator() ;
  RooAbsArg* arg ;
  while((arg=(RooAbsArg*)iter->Next())) {
    // Check that arg is a RooRealVar
    RooRealVar* rrv = dynamic_cast<RooRealVar*>(arg) ;
    if (!rrv) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::sampleSumUniform() ERROR: input parameter " << arg->GetName() << " is not a RooRealVar and is ignored" << endl ;
      continue;
    }
    okset.add(*rrv) ;
  }
  delete iter ;

  // If we're already attached to a RooMCStudy, check that given param is actual generator model parameter
  // If not attached, this check is repeated at the attachment moment
  RooArgSet okset2 ;
  if (genParams()) {
    TIterator* psiter = okset.createIterator() ;
    RooAbsArg* arg2 ;
    while ((arg2=(RooAbsArg*)psiter->Next())) {
      RooRealVar* actualVar= static_cast<RooRealVar*>(genParams()->find(arg2->GetName())) ;
      if (!actualVar) {
	oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::sampleSumUniform: variable " << arg2->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;	
      } else {
	okset2.add(*actualVar) ;
      }
    }    
    delete psiter ;
  } else {

   // If genParams() are not available, skip this check for now
   okset2.add(okset) ;

  }


  _unifParamSets.push_back(UniParamSet(okset2,lo,hi)) ;

}




//_____________________________________________________________________________
void RooRandomizeParamMCSModule::sampleSumGauss(const RooArgSet& paramSet, Double_t mean, Double_t sigma) 
{
  // Request gaussian smearing of sum of parameters in paramSet
  // uniform smearing with mean 'mean' and width 'sigma' in RooMCStudy
  // generation cycle.  This option applies a common multiplicative
  // factor to each parameter in paramSet to make the sum of the
  // parameters add up to the sampled value from the
  // gaussian(mean,sigma)

  // Check that all args are RooRealVars
  RooArgSet okset ;
  TIterator* iter = paramSet.createIterator() ;
  RooAbsArg* arg ;
  while((arg=(RooAbsArg*)iter->Next())) {
    // Check that arg is a RooRealVar
    RooRealVar* rrv = dynamic_cast<RooRealVar*>(arg) ;
    if (!rrv) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::sampleSumGauss() ERROR: input parameter " << arg->GetName() << " is not a RooRealVar and is ignored" << endl ;
      continue;
    }
    okset.add(*rrv) ;
  }

  // If we're already attached to a RooMCStudy, check that given param is actual generator model parameter
  // If not attached, this check is repeated at the attachment moment
  RooArgSet okset2 ;
  if (genParams()) {
    TIterator* psiter = okset.createIterator() ;
    RooAbsArg* arg2 ;
    while ((arg2=(RooAbsArg*)psiter->Next())) {
      RooRealVar* actualVar= static_cast<RooRealVar*>(genParams()->find(arg2->GetName())) ;
      if (!actualVar) {
	oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::sampleSumUniform: variable " << arg2->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;	
      } else {
	okset2.add(*actualVar) ;
      }
    }    
    delete psiter ;
  } else {

   // If genParams() are not available, skip this check for now
   okset2.add(okset) ;

  }

  _gausParamSets.push_back(GausParamSet(okset,mean,sigma)) ;
  
}




//_____________________________________________________________________________
Bool_t RooRandomizeParamMCSModule::initializeInstance()
{
  // Initialize module after attachment to RooMCStudy object

  // Loop over all uniform smearing parameters
  std::list<UniParam>::iterator uiter ;
  for (uiter= _unifParams.begin() ; uiter!= _unifParams.end() ; ++uiter) {

    // Check that listed variable is actual generator model parameter
    RooRealVar* actualPar = static_cast<RooRealVar*>(genParams()->find(uiter->_param->GetName())) ;
    if (!actualPar) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << uiter->_param->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;
      uiter = _unifParams.erase(uiter) ;
      continue ;
    }
    uiter->_param = actualPar ;

    // Add variable to summary dataset to hold generator value
    TString parName = Form("%s_gen",uiter->_param->GetName()) ;
    TString parTitle = Form("%s as generated",uiter->_param->GetTitle()) ;
    RooRealVar* par_gen = new RooRealVar(parName.Data(),parTitle.Data(),0) ;    
    _genParSet.addOwned(*par_gen) ;
  }
  
  // Loop over all gaussian smearing parameters
  std::list<UniParam>::iterator giter ;
  for (giter= _unifParams.begin() ; giter!= _unifParams.end() ; ++giter) {

    // Check that listed variable is actual generator model parameter
    RooRealVar* actualPar = static_cast<RooRealVar*>(genParams()->find(giter->_param->GetName())) ;
    if (!actualPar) {
      oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << giter->_param->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;
      giter = _unifParams.erase(giter) ;
      continue ;
    }
    giter->_param = actualPar ;

    // Add variable to summary dataset to hold generator value
    TString parName = Form("%s_gen",giter->_param->GetName()) ;
    TString parTitle = Form("%s as generated",giter->_param->GetTitle()) ;
    RooRealVar* par_gen = new RooRealVar(parName.Data(),parTitle.Data(),0) ;    
    _genParSet.addOwned(*par_gen) ;
  }


  // Loop over all uniform smearing set of parameters
  std::list<UniParamSet>::iterator usiter ;
  for (usiter= _unifParamSets.begin() ; usiter!= _unifParamSets.end() ; ++usiter) {
    
    // Check that all listed variables are actual generator model parameters
    RooArgSet actualPSet ;
    TIterator* psiter = usiter->_pset.createIterator() ;
    RooAbsArg* arg ;
    while ((arg=(RooAbsArg*)psiter->Next())) {
      RooRealVar* actualVar= static_cast<RooRealVar*>(genParams()->find(arg->GetName())) ;
      if (!actualVar) {
	oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << arg->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;	
      } else {
	actualPSet.add(*actualVar) ;
      }
    }    
    delete psiter ;
    usiter->_pset.removeAll() ;
    usiter->_pset.add(actualPSet) ;

    // Add variables to summary dataset to hold generator values
    TIterator* iter = usiter->_pset.createIterator() ;
    RooRealVar* param ;
    while((param=(RooRealVar*)iter->Next())) {
      TString parName = Form("%s_gen",param->GetName()) ;
      TString parTitle = Form("%s as generated",param->GetTitle()) ;
      RooRealVar* par_gen = new RooRealVar(parName.Data(),parTitle.Data(),0) ;    
      _genParSet.addOwned(*par_gen) ;          
    }
    delete iter ;
  }
  
  // Loop over all gaussian smearing set of parameters
  std::list<GausParamSet>::iterator ugiter ;
  for (ugiter= _gausParamSets.begin() ; ugiter!= _gausParamSets.end() ; ++ugiter) {

    // Check that all listed variables are actual generator model parameters
    RooArgSet actualPSet ;
    TIterator* psiter = ugiter->_pset.createIterator() ;
    RooAbsArg* arg ;
    while ((arg=(RooAbsArg*)psiter->Next())) {
      RooRealVar* actualVar= static_cast<RooRealVar*>(genParams()->find(arg->GetName())) ;
      if (!actualVar) {
	oocoutW((TObject*)0,InputArguments) << "RooRandomizeParamMCSModule::initializeInstance: variable " << arg->GetName() << " is not a parameter of RooMCStudy model and is ignored!" << endl ;	
      } else {
	actualPSet.add(*actualVar) ;
      }
    }    
    ugiter->_pset.removeAll() ;
    ugiter->_pset.add(actualPSet) ;

    // Add variables to summary dataset to hold generator values
    TIterator* iter = ugiter->_pset.createIterator() ;
    RooRealVar* param ;
    while((param=(RooRealVar*)iter->Next())) {
      TString parName = Form("%s_gen",param->GetName()) ;
      TString parTitle = Form("%s as generated",param->GetTitle()) ;
      RooRealVar* par_gen = new RooRealVar(parName.Data(),parTitle.Data(),0) ;    
      _genParSet.addOwned(*par_gen) ;          
    }
  }
  
  // Create new dataset to be merged with RooMCStudy::fitParDataSet
  _data = new RooDataSet("DeltaLLSigData","Additional data for Delta(-log(L)) study",_genParSet) ;

  return kTRUE ;
}



//_____________________________________________________________________________
Bool_t RooRandomizeParamMCSModule::initializeRun(Int_t /*numSamples*/) 
{
  // Initialize module at beginning of RooCMStudy run

  // Clear dataset at beginning of run
  _data->reset() ;
  return kTRUE ;
}



//_____________________________________________________________________________
Bool_t RooRandomizeParamMCSModule::processBeforeGen(Int_t /*sampleNum*/) 
{
  // Apply all smearings to generator parameters

  // Apply uniform smearing to all generator parameters for which it is requested
  std::list<UniParam>::iterator uiter ;
  for (uiter= _unifParams.begin() ; uiter!= _unifParams.end() ; ++uiter) {
    Double_t newVal = RooRandom::randomGenerator()->Uniform(uiter->_lo,uiter->_hi) ;        
    oocoutE((TObject*)0,Generation) << "RooRandomizeParamMCSModule::processBeforeGen: applying uniform smearing to generator parameter " 
	 << uiter->_param->GetName() << " in range [" << uiter->_lo << "," << uiter->_hi << "], chosen value for this sample is " << newVal << endl ;
    uiter->_param->setVal(newVal) ;

    RooRealVar* genpar = static_cast<RooRealVar*>(_genParSet.find(Form("%s_gen",uiter->_param->GetName()))) ;
    genpar->setVal(newVal) ;
  }

  // Apply gaussian smearing to all generator parameters for which it is requested
  std::list<GausParam>::iterator giter ;
  for (giter= _gausParams.begin() ; giter!= _gausParams.end() ; ++giter) {
    Double_t newVal = RooRandom::randomGenerator()->Gaus(giter->_mean,giter->_sigma) ;
    oocoutI((TObject*)0,Generation) << "RooRandomizeParamMCSModule::processBeforeGen: applying gaussian smearing to generator parameter " 
	 << giter->_param->GetName() << " with a mean of " << giter->_mean << " and a width of " << giter->_sigma << ", chosen value for this sample is " << newVal << endl ;
    giter->_param->setVal(newVal) ;

    RooRealVar* genpar = static_cast<RooRealVar*>(_genParSet.find(Form("%s_gen",giter->_param->GetName()))) ;
    genpar->setVal(newVal) ;
  }

  // Apply uniform smearing to all sets of generator parameters for which it is requested
  std::list<UniParamSet>::iterator usiter ;
  for (usiter= _unifParamSets.begin() ; usiter!= _unifParamSets.end() ; ++usiter) {

    // Calculate new value for sum 
    Double_t newVal = RooRandom::randomGenerator()->Uniform(usiter->_lo,usiter->_hi) ;        
    oocoutI((TObject*)0,Generation) << "RooRandomizeParamMCSModule::processBeforeGen: applying uniform smearing to sum of set of generator parameters " 
				    <<  usiter->_pset
				    << " in range [" << usiter->_lo << "," << usiter->_hi << "], chosen sum value for this sample is " << newVal << endl ;

    // Determine original value of sum and calculate per-component scale factor to obtain new valye for sum
    RooAddition sumVal("sumVal","sumVal",usiter->_pset) ;
    Double_t compScaleFactor = newVal/sumVal.getVal() ;

    // Apply multiplicative correction to each term of the sum
    TIterator* iter = usiter->_pset.createIterator() ;
    RooRealVar* param ;
    while((param=(RooRealVar*)iter->Next())) {
      param->setVal(param->getVal()*compScaleFactor) ;
      RooRealVar* genpar = static_cast<RooRealVar*>(_genParSet.find(Form("%s_gen",param->GetName()))) ;
      genpar->setVal(param->getVal()) ;
    }
    delete iter ;
  }

  // Apply gaussian smearing to all sets of generator parameters for which it is requested
  std::list<GausParamSet>::iterator gsiter ;
  for (gsiter= _gausParamSets.begin() ; gsiter!= _gausParamSets.end() ; ++gsiter) {
    
    // Calculate new value for sum 
    Double_t newVal = RooRandom::randomGenerator()->Gaus(gsiter->_mean,gsiter->_sigma) ;        
    oocoutI((TObject*)0,Generation) << "RooRandomizeParamMCSModule::processBeforeGen: applying gaussian smearing to sum of set of generator parameters " 
				    << gsiter->_pset
				    << " with a mean of " << gsiter->_mean << " and a width of " << gsiter->_sigma 
				    << ", chosen value for this sample is " << newVal << endl ;

    // Determine original value of sum and calculate per-component scale factor to obtain new valye for sum
    RooAddition sumVal("sumVal","sumVal",gsiter->_pset) ;
    Double_t compScaleFactor = newVal/sumVal.getVal() ;

    // Apply multiplicative correction to each term of the sum
    TIterator* iter = gsiter->_pset.createIterator() ;
    RooRealVar* param ;
    while((param=(RooRealVar*)iter->Next())) {
      param->setVal(param->getVal()*compScaleFactor) ;
      RooRealVar* genpar = static_cast<RooRealVar*>(_genParSet.find(Form("%s_gen",param->GetName()))) ;
      genpar->setVal(param->getVal()) ;
    }
  }
  
  // Store generator values for all modified parameters
  _data->add(_genParSet) ;
  
  return kTRUE ;
}



//_____________________________________________________________________________
RooDataSet* RooRandomizeParamMCSModule::finalizeRun() 
{
  // Return auxiliary data of this module so that it is merged with
  // RooMCStudy::fitParDataSet()
  return _data ;
}


 RooRandomizeParamMCSModule.cxx:1
 RooRandomizeParamMCSModule.cxx:2
 RooRandomizeParamMCSModule.cxx:3
 RooRandomizeParamMCSModule.cxx:4
 RooRandomizeParamMCSModule.cxx:5
 RooRandomizeParamMCSModule.cxx:6
 RooRandomizeParamMCSModule.cxx:7
 RooRandomizeParamMCSModule.cxx:8
 RooRandomizeParamMCSModule.cxx:9
 RooRandomizeParamMCSModule.cxx:10
 RooRandomizeParamMCSModule.cxx:11
 RooRandomizeParamMCSModule.cxx:12
 RooRandomizeParamMCSModule.cxx:13
 RooRandomizeParamMCSModule.cxx:14
 RooRandomizeParamMCSModule.cxx:15
 RooRandomizeParamMCSModule.cxx:16
 RooRandomizeParamMCSModule.cxx:17
 RooRandomizeParamMCSModule.cxx:18
 RooRandomizeParamMCSModule.cxx:19
 RooRandomizeParamMCSModule.cxx:20
 RooRandomizeParamMCSModule.cxx:21
 RooRandomizeParamMCSModule.cxx:22
 RooRandomizeParamMCSModule.cxx:23
 RooRandomizeParamMCSModule.cxx:24
 RooRandomizeParamMCSModule.cxx:25
 RooRandomizeParamMCSModule.cxx:26
 RooRandomizeParamMCSModule.cxx:27
 RooRandomizeParamMCSModule.cxx:28
 RooRandomizeParamMCSModule.cxx:29
 RooRandomizeParamMCSModule.cxx:30
 RooRandomizeParamMCSModule.cxx:31
 RooRandomizeParamMCSModule.cxx:32
 RooRandomizeParamMCSModule.cxx:33
 RooRandomizeParamMCSModule.cxx:34
 RooRandomizeParamMCSModule.cxx:35
 RooRandomizeParamMCSModule.cxx:36
 RooRandomizeParamMCSModule.cxx:37
 RooRandomizeParamMCSModule.cxx:38
 RooRandomizeParamMCSModule.cxx:39
 RooRandomizeParamMCSModule.cxx:40
 RooRandomizeParamMCSModule.cxx:41
 RooRandomizeParamMCSModule.cxx:42
 RooRandomizeParamMCSModule.cxx:43
 RooRandomizeParamMCSModule.cxx:44
 RooRandomizeParamMCSModule.cxx:45
 RooRandomizeParamMCSModule.cxx:46
 RooRandomizeParamMCSModule.cxx:47
 RooRandomizeParamMCSModule.cxx:48
 RooRandomizeParamMCSModule.cxx:49
 RooRandomizeParamMCSModule.cxx:50
 RooRandomizeParamMCSModule.cxx:51
 RooRandomizeParamMCSModule.cxx:52
 RooRandomizeParamMCSModule.cxx:53
 RooRandomizeParamMCSModule.cxx:54
 RooRandomizeParamMCSModule.cxx:55
 RooRandomizeParamMCSModule.cxx:56
 RooRandomizeParamMCSModule.cxx:57
 RooRandomizeParamMCSModule.cxx:58
 RooRandomizeParamMCSModule.cxx:59
 RooRandomizeParamMCSModule.cxx:60
 RooRandomizeParamMCSModule.cxx:61
 RooRandomizeParamMCSModule.cxx:62
 RooRandomizeParamMCSModule.cxx:63
 RooRandomizeParamMCSModule.cxx:64
 RooRandomizeParamMCSModule.cxx:65
 RooRandomizeParamMCSModule.cxx:66
 RooRandomizeParamMCSModule.cxx:67
 RooRandomizeParamMCSModule.cxx:68
 RooRandomizeParamMCSModule.cxx:69
 RooRandomizeParamMCSModule.cxx:70
 RooRandomizeParamMCSModule.cxx:71
 RooRandomizeParamMCSModule.cxx:72
 RooRandomizeParamMCSModule.cxx:73
 RooRandomizeParamMCSModule.cxx:74
 RooRandomizeParamMCSModule.cxx:75
 RooRandomizeParamMCSModule.cxx:76
 RooRandomizeParamMCSModule.cxx:77
 RooRandomizeParamMCSModule.cxx:78
 RooRandomizeParamMCSModule.cxx:79
 RooRandomizeParamMCSModule.cxx:80
 RooRandomizeParamMCSModule.cxx:81
 RooRandomizeParamMCSModule.cxx:82
 RooRandomizeParamMCSModule.cxx:83
 RooRandomizeParamMCSModule.cxx:84
 RooRandomizeParamMCSModule.cxx:85
 RooRandomizeParamMCSModule.cxx:86
 RooRandomizeParamMCSModule.cxx:87
 RooRandomizeParamMCSModule.cxx:88
 RooRandomizeParamMCSModule.cxx:89
 RooRandomizeParamMCSModule.cxx:90
 RooRandomizeParamMCSModule.cxx:91
 RooRandomizeParamMCSModule.cxx:92
 RooRandomizeParamMCSModule.cxx:93
 RooRandomizeParamMCSModule.cxx:94
 RooRandomizeParamMCSModule.cxx:95
 RooRandomizeParamMCSModule.cxx:96
 RooRandomizeParamMCSModule.cxx:97
 RooRandomizeParamMCSModule.cxx:98
 RooRandomizeParamMCSModule.cxx:99
 RooRandomizeParamMCSModule.cxx:100
 RooRandomizeParamMCSModule.cxx:101
 RooRandomizeParamMCSModule.cxx:102
 RooRandomizeParamMCSModule.cxx:103
 RooRandomizeParamMCSModule.cxx:104
 RooRandomizeParamMCSModule.cxx:105
 RooRandomizeParamMCSModule.cxx:106
 RooRandomizeParamMCSModule.cxx:107
 RooRandomizeParamMCSModule.cxx:108
 RooRandomizeParamMCSModule.cxx:109
 RooRandomizeParamMCSModule.cxx:110
 RooRandomizeParamMCSModule.cxx:111
 RooRandomizeParamMCSModule.cxx:112
 RooRandomizeParamMCSModule.cxx:113
 RooRandomizeParamMCSModule.cxx:114
 RooRandomizeParamMCSModule.cxx:115
 RooRandomizeParamMCSModule.cxx:116
 RooRandomizeParamMCSModule.cxx:117
 RooRandomizeParamMCSModule.cxx:118
 RooRandomizeParamMCSModule.cxx:119
 RooRandomizeParamMCSModule.cxx:120
 RooRandomizeParamMCSModule.cxx:121
 RooRandomizeParamMCSModule.cxx:122
 RooRandomizeParamMCSModule.cxx:123
 RooRandomizeParamMCSModule.cxx:124
 RooRandomizeParamMCSModule.cxx:125
 RooRandomizeParamMCSModule.cxx:126
 RooRandomizeParamMCSModule.cxx:127
 RooRandomizeParamMCSModule.cxx:128
 RooRandomizeParamMCSModule.cxx:129
 RooRandomizeParamMCSModule.cxx:130
 RooRandomizeParamMCSModule.cxx:131
 RooRandomizeParamMCSModule.cxx:132
 RooRandomizeParamMCSModule.cxx:133
 RooRandomizeParamMCSModule.cxx:134
 RooRandomizeParamMCSModule.cxx:135
 RooRandomizeParamMCSModule.cxx:136
 RooRandomizeParamMCSModule.cxx:137
 RooRandomizeParamMCSModule.cxx:138
 RooRandomizeParamMCSModule.cxx:139
 RooRandomizeParamMCSModule.cxx:140
 RooRandomizeParamMCSModule.cxx:141
 RooRandomizeParamMCSModule.cxx:142
 RooRandomizeParamMCSModule.cxx:143
 RooRandomizeParamMCSModule.cxx:144
 RooRandomizeParamMCSModule.cxx:145
 RooRandomizeParamMCSModule.cxx:146
 RooRandomizeParamMCSModule.cxx:147
 RooRandomizeParamMCSModule.cxx:148
 RooRandomizeParamMCSModule.cxx:149
 RooRandomizeParamMCSModule.cxx:150
 RooRandomizeParamMCSModule.cxx:151
 RooRandomizeParamMCSModule.cxx:152
 RooRandomizeParamMCSModule.cxx:153
 RooRandomizeParamMCSModule.cxx:154
 RooRandomizeParamMCSModule.cxx:155
 RooRandomizeParamMCSModule.cxx:156
 RooRandomizeParamMCSModule.cxx:157
 RooRandomizeParamMCSModule.cxx:158
 RooRandomizeParamMCSModule.cxx:159
 RooRandomizeParamMCSModule.cxx:160
 RooRandomizeParamMCSModule.cxx:161
 RooRandomizeParamMCSModule.cxx:162
 RooRandomizeParamMCSModule.cxx:163
 RooRandomizeParamMCSModule.cxx:164
 RooRandomizeParamMCSModule.cxx:165
 RooRandomizeParamMCSModule.cxx:166
 RooRandomizeParamMCSModule.cxx:167
 RooRandomizeParamMCSModule.cxx:168
 RooRandomizeParamMCSModule.cxx:169
 RooRandomizeParamMCSModule.cxx:170
 RooRandomizeParamMCSModule.cxx:171
 RooRandomizeParamMCSModule.cxx:172
 RooRandomizeParamMCSModule.cxx:173
 RooRandomizeParamMCSModule.cxx:174
 RooRandomizeParamMCSModule.cxx:175
 RooRandomizeParamMCSModule.cxx:176
 RooRandomizeParamMCSModule.cxx:177
 RooRandomizeParamMCSModule.cxx:178
 RooRandomizeParamMCSModule.cxx:179
 RooRandomizeParamMCSModule.cxx:180
 RooRandomizeParamMCSModule.cxx:181
 RooRandomizeParamMCSModule.cxx:182
 RooRandomizeParamMCSModule.cxx:183
 RooRandomizeParamMCSModule.cxx:184
 RooRandomizeParamMCSModule.cxx:185
 RooRandomizeParamMCSModule.cxx:186
 RooRandomizeParamMCSModule.cxx:187
 RooRandomizeParamMCSModule.cxx:188
 RooRandomizeParamMCSModule.cxx:189
 RooRandomizeParamMCSModule.cxx:190
 RooRandomizeParamMCSModule.cxx:191
 RooRandomizeParamMCSModule.cxx:192
 RooRandomizeParamMCSModule.cxx:193
 RooRandomizeParamMCSModule.cxx:194
 RooRandomizeParamMCSModule.cxx:195
 RooRandomizeParamMCSModule.cxx:196
 RooRandomizeParamMCSModule.cxx:197
 RooRandomizeParamMCSModule.cxx:198
 RooRandomizeParamMCSModule.cxx:199
 RooRandomizeParamMCSModule.cxx:200
 RooRandomizeParamMCSModule.cxx:201
 RooRandomizeParamMCSModule.cxx:202
 RooRandomizeParamMCSModule.cxx:203
 RooRandomizeParamMCSModule.cxx:204
 RooRandomizeParamMCSModule.cxx:205
 RooRandomizeParamMCSModule.cxx:206
 RooRandomizeParamMCSModule.cxx:207
 RooRandomizeParamMCSModule.cxx:208
 RooRandomizeParamMCSModule.cxx:209
 RooRandomizeParamMCSModule.cxx:210
 RooRandomizeParamMCSModule.cxx:211
 RooRandomizeParamMCSModule.cxx:212
 RooRandomizeParamMCSModule.cxx:213
 RooRandomizeParamMCSModule.cxx:214
 RooRandomizeParamMCSModule.cxx:215
 RooRandomizeParamMCSModule.cxx:216
 RooRandomizeParamMCSModule.cxx:217
 RooRandomizeParamMCSModule.cxx:218
 RooRandomizeParamMCSModule.cxx:219
 RooRandomizeParamMCSModule.cxx:220
 RooRandomizeParamMCSModule.cxx:221
 RooRandomizeParamMCSModule.cxx:222
 RooRandomizeParamMCSModule.cxx:223
 RooRandomizeParamMCSModule.cxx:224
 RooRandomizeParamMCSModule.cxx:225
 RooRandomizeParamMCSModule.cxx:226
 RooRandomizeParamMCSModule.cxx:227
 RooRandomizeParamMCSModule.cxx:228
 RooRandomizeParamMCSModule.cxx:229
 RooRandomizeParamMCSModule.cxx:230
 RooRandomizeParamMCSModule.cxx:231
 RooRandomizeParamMCSModule.cxx:232
 RooRandomizeParamMCSModule.cxx:233
 RooRandomizeParamMCSModule.cxx:234
 RooRandomizeParamMCSModule.cxx:235
 RooRandomizeParamMCSModule.cxx:236
 RooRandomizeParamMCSModule.cxx:237
 RooRandomizeParamMCSModule.cxx:238
 RooRandomizeParamMCSModule.cxx:239
 RooRandomizeParamMCSModule.cxx:240
 RooRandomizeParamMCSModule.cxx:241
 RooRandomizeParamMCSModule.cxx:242
 RooRandomizeParamMCSModule.cxx:243
 RooRandomizeParamMCSModule.cxx:244
 RooRandomizeParamMCSModule.cxx:245
 RooRandomizeParamMCSModule.cxx:246
 RooRandomizeParamMCSModule.cxx:247
 RooRandomizeParamMCSModule.cxx:248
 RooRandomizeParamMCSModule.cxx:249
 RooRandomizeParamMCSModule.cxx:250
 RooRandomizeParamMCSModule.cxx:251
 RooRandomizeParamMCSModule.cxx:252
 RooRandomizeParamMCSModule.cxx:253
 RooRandomizeParamMCSModule.cxx:254
 RooRandomizeParamMCSModule.cxx:255
 RooRandomizeParamMCSModule.cxx:256
 RooRandomizeParamMCSModule.cxx:257
 RooRandomizeParamMCSModule.cxx:258
 RooRandomizeParamMCSModule.cxx:259
 RooRandomizeParamMCSModule.cxx:260
 RooRandomizeParamMCSModule.cxx:261
 RooRandomizeParamMCSModule.cxx:262
 RooRandomizeParamMCSModule.cxx:263
 RooRandomizeParamMCSModule.cxx:264
 RooRandomizeParamMCSModule.cxx:265
 RooRandomizeParamMCSModule.cxx:266
 RooRandomizeParamMCSModule.cxx:267
 RooRandomizeParamMCSModule.cxx:268
 RooRandomizeParamMCSModule.cxx:269
 RooRandomizeParamMCSModule.cxx:270
 RooRandomizeParamMCSModule.cxx:271
 RooRandomizeParamMCSModule.cxx:272
 RooRandomizeParamMCSModule.cxx:273
 RooRandomizeParamMCSModule.cxx:274
 RooRandomizeParamMCSModule.cxx:275
 RooRandomizeParamMCSModule.cxx:276
 RooRandomizeParamMCSModule.cxx:277
 RooRandomizeParamMCSModule.cxx:278
 RooRandomizeParamMCSModule.cxx:279
 RooRandomizeParamMCSModule.cxx:280
 RooRandomizeParamMCSModule.cxx:281
 RooRandomizeParamMCSModule.cxx:282
 RooRandomizeParamMCSModule.cxx:283
 RooRandomizeParamMCSModule.cxx:284
 RooRandomizeParamMCSModule.cxx:285
 RooRandomizeParamMCSModule.cxx:286
 RooRandomizeParamMCSModule.cxx:287
 RooRandomizeParamMCSModule.cxx:288
 RooRandomizeParamMCSModule.cxx:289
 RooRandomizeParamMCSModule.cxx:290
 RooRandomizeParamMCSModule.cxx:291
 RooRandomizeParamMCSModule.cxx:292
 RooRandomizeParamMCSModule.cxx:293
 RooRandomizeParamMCSModule.cxx:294
 RooRandomizeParamMCSModule.cxx:295
 RooRandomizeParamMCSModule.cxx:296
 RooRandomizeParamMCSModule.cxx:297
 RooRandomizeParamMCSModule.cxx:298
 RooRandomizeParamMCSModule.cxx:299
 RooRandomizeParamMCSModule.cxx:300
 RooRandomizeParamMCSModule.cxx:301
 RooRandomizeParamMCSModule.cxx:302
 RooRandomizeParamMCSModule.cxx:303
 RooRandomizeParamMCSModule.cxx:304
 RooRandomizeParamMCSModule.cxx:305
 RooRandomizeParamMCSModule.cxx:306
 RooRandomizeParamMCSModule.cxx:307
 RooRandomizeParamMCSModule.cxx:308
 RooRandomizeParamMCSModule.cxx:309
 RooRandomizeParamMCSModule.cxx:310
 RooRandomizeParamMCSModule.cxx:311
 RooRandomizeParamMCSModule.cxx:312
 RooRandomizeParamMCSModule.cxx:313
 RooRandomizeParamMCSModule.cxx:314
 RooRandomizeParamMCSModule.cxx:315
 RooRandomizeParamMCSModule.cxx:316
 RooRandomizeParamMCSModule.cxx:317
 RooRandomizeParamMCSModule.cxx:318
 RooRandomizeParamMCSModule.cxx:319
 RooRandomizeParamMCSModule.cxx:320
 RooRandomizeParamMCSModule.cxx:321
 RooRandomizeParamMCSModule.cxx:322
 RooRandomizeParamMCSModule.cxx:323
 RooRandomizeParamMCSModule.cxx:324
 RooRandomizeParamMCSModule.cxx:325
 RooRandomizeParamMCSModule.cxx:326
 RooRandomizeParamMCSModule.cxx:327
 RooRandomizeParamMCSModule.cxx:328
 RooRandomizeParamMCSModule.cxx:329
 RooRandomizeParamMCSModule.cxx:330
 RooRandomizeParamMCSModule.cxx:331
 RooRandomizeParamMCSModule.cxx:332
 RooRandomizeParamMCSModule.cxx:333
 RooRandomizeParamMCSModule.cxx:334
 RooRandomizeParamMCSModule.cxx:335
 RooRandomizeParamMCSModule.cxx:336
 RooRandomizeParamMCSModule.cxx:337
 RooRandomizeParamMCSModule.cxx:338
 RooRandomizeParamMCSModule.cxx:339
 RooRandomizeParamMCSModule.cxx:340
 RooRandomizeParamMCSModule.cxx:341
 RooRandomizeParamMCSModule.cxx:342
 RooRandomizeParamMCSModule.cxx:343
 RooRandomizeParamMCSModule.cxx:344
 RooRandomizeParamMCSModule.cxx:345
 RooRandomizeParamMCSModule.cxx:346
 RooRandomizeParamMCSModule.cxx:347
 RooRandomizeParamMCSModule.cxx:348
 RooRandomizeParamMCSModule.cxx:349
 RooRandomizeParamMCSModule.cxx:350
 RooRandomizeParamMCSModule.cxx:351
 RooRandomizeParamMCSModule.cxx:352
 RooRandomizeParamMCSModule.cxx:353
 RooRandomizeParamMCSModule.cxx:354
 RooRandomizeParamMCSModule.cxx:355
 RooRandomizeParamMCSModule.cxx:356
 RooRandomizeParamMCSModule.cxx:357
 RooRandomizeParamMCSModule.cxx:358
 RooRandomizeParamMCSModule.cxx:359
 RooRandomizeParamMCSModule.cxx:360
 RooRandomizeParamMCSModule.cxx:361
 RooRandomizeParamMCSModule.cxx:362
 RooRandomizeParamMCSModule.cxx:363
 RooRandomizeParamMCSModule.cxx:364
 RooRandomizeParamMCSModule.cxx:365
 RooRandomizeParamMCSModule.cxx:366
 RooRandomizeParamMCSModule.cxx:367
 RooRandomizeParamMCSModule.cxx:368
 RooRandomizeParamMCSModule.cxx:369
 RooRandomizeParamMCSModule.cxx:370
 RooRandomizeParamMCSModule.cxx:371
 RooRandomizeParamMCSModule.cxx:372
 RooRandomizeParamMCSModule.cxx:373
 RooRandomizeParamMCSModule.cxx:374
 RooRandomizeParamMCSModule.cxx:375
 RooRandomizeParamMCSModule.cxx:376
 RooRandomizeParamMCSModule.cxx:377
 RooRandomizeParamMCSModule.cxx:378
 RooRandomizeParamMCSModule.cxx:379
 RooRandomizeParamMCSModule.cxx:380
 RooRandomizeParamMCSModule.cxx:381
 RooRandomizeParamMCSModule.cxx:382
 RooRandomizeParamMCSModule.cxx:383
 RooRandomizeParamMCSModule.cxx:384
 RooRandomizeParamMCSModule.cxx:385
 RooRandomizeParamMCSModule.cxx:386
 RooRandomizeParamMCSModule.cxx:387
 RooRandomizeParamMCSModule.cxx:388
 RooRandomizeParamMCSModule.cxx:389
 RooRandomizeParamMCSModule.cxx:390
 RooRandomizeParamMCSModule.cxx:391
 RooRandomizeParamMCSModule.cxx:392
 RooRandomizeParamMCSModule.cxx:393
 RooRandomizeParamMCSModule.cxx:394
 RooRandomizeParamMCSModule.cxx:395
 RooRandomizeParamMCSModule.cxx:396
 RooRandomizeParamMCSModule.cxx:397
 RooRandomizeParamMCSModule.cxx:398
 RooRandomizeParamMCSModule.cxx:399
 RooRandomizeParamMCSModule.cxx:400
 RooRandomizeParamMCSModule.cxx:401
 RooRandomizeParamMCSModule.cxx:402
 RooRandomizeParamMCSModule.cxx:403
 RooRandomizeParamMCSModule.cxx:404
 RooRandomizeParamMCSModule.cxx:405
 RooRandomizeParamMCSModule.cxx:406
 RooRandomizeParamMCSModule.cxx:407
 RooRandomizeParamMCSModule.cxx:408
 RooRandomizeParamMCSModule.cxx:409
 RooRandomizeParamMCSModule.cxx:410
 RooRandomizeParamMCSModule.cxx:411
 RooRandomizeParamMCSModule.cxx:412
 RooRandomizeParamMCSModule.cxx:413
 RooRandomizeParamMCSModule.cxx:414
 RooRandomizeParamMCSModule.cxx:415
 RooRandomizeParamMCSModule.cxx:416
 RooRandomizeParamMCSModule.cxx:417
 RooRandomizeParamMCSModule.cxx:418
 RooRandomizeParamMCSModule.cxx:419
 RooRandomizeParamMCSModule.cxx:420
 RooRandomizeParamMCSModule.cxx:421
 RooRandomizeParamMCSModule.cxx:422
 RooRandomizeParamMCSModule.cxx:423
 RooRandomizeParamMCSModule.cxx:424
 RooRandomizeParamMCSModule.cxx:425
 RooRandomizeParamMCSModule.cxx:426
 RooRandomizeParamMCSModule.cxx:427
 RooRandomizeParamMCSModule.cxx:428
 RooRandomizeParamMCSModule.cxx:429
 RooRandomizeParamMCSModule.cxx:430
 RooRandomizeParamMCSModule.cxx:431
 RooRandomizeParamMCSModule.cxx:432
 RooRandomizeParamMCSModule.cxx:433
 RooRandomizeParamMCSModule.cxx:434
 RooRandomizeParamMCSModule.cxx:435
 RooRandomizeParamMCSModule.cxx:436
 RooRandomizeParamMCSModule.cxx:437
 RooRandomizeParamMCSModule.cxx:438
 RooRandomizeParamMCSModule.cxx:439
 RooRandomizeParamMCSModule.cxx:440
 RooRandomizeParamMCSModule.cxx:441
 RooRandomizeParamMCSModule.cxx:442
 RooRandomizeParamMCSModule.cxx:443
 RooRandomizeParamMCSModule.cxx:444
 RooRandomizeParamMCSModule.cxx:445
 RooRandomizeParamMCSModule.cxx:446
 RooRandomizeParamMCSModule.cxx:447
 RooRandomizeParamMCSModule.cxx:448
 RooRandomizeParamMCSModule.cxx:449
 RooRandomizeParamMCSModule.cxx:450
 RooRandomizeParamMCSModule.cxx:451
 RooRandomizeParamMCSModule.cxx:452
 RooRandomizeParamMCSModule.cxx:453
 RooRandomizeParamMCSModule.cxx:454
 RooRandomizeParamMCSModule.cxx:455
 RooRandomizeParamMCSModule.cxx:456
 RooRandomizeParamMCSModule.cxx:457
 RooRandomizeParamMCSModule.cxx:458
 RooRandomizeParamMCSModule.cxx:459
 RooRandomizeParamMCSModule.cxx:460
 RooRandomizeParamMCSModule.cxx:461