Exemplo n.º 1
0
   RooDataSet*GenericPDFModel::GenerateDataSet(RooAbsPdf& parDist, const RooArgList* params)
   {
      // Generate dataset for the observables using the given parameter probability distribution
      // If optional parameter list params is given, it is used instead of the default
      // defined parameter list of the model

      Info("GenerateDataSet","Generating %d datapoints with parameter distribution %s",
           GetNumGen(), parDist.GetName());
      RooProdPdf Multimodel("Multimodel","observables for parameter distributions", parDist,
                            Conditional(*theModel,GetObservables()));
      // get marginalized distributions model for observables
      if(!params) params = &GetParameters();
      RooAbsPdf* margin = Multimodel.createProjection(*params);
      RooDataSet* data = margin->generate(GetObservables(),fNGen);
      delete margin;
      return data;
   }
Exemplo n.º 2
0
   void GenericModel::ConstructPseudoPDF(Bool_t)
   {
      // Build a parameterised pseudo-PDF from all the imported model datasets.
      // Each dataset is transformed into a RooNDKeysPdf kernel estimation p.d.f.
      // This p.d.f. models the distribution of an arbitrary input dataset as a
      // superposition of Gaussian kernels, one for each data point, each
      // contributing 1/N to the total integral of the p.d.f.
      //
      // If debug=kTRUE, each dataset and kernel PDF will be displayed in a canvas.
      // This can help to decide if the kernel smoothing parameter needs attention.

      if (!GetNumberOfDataSets()) {
         Error("ConstructPseudoPDF", "import model datasets with ImportModelData() first");
         return;
      }

      if (fModelPseudoPDF) {
         delete fModelPseudoPDF;
         fModelPseudoPDF = 0;
         fNDKeys.Delete();
         fFractions.removeAll();
      }
      //generate kernels
      RooArgList kernels;
      Double_t initialWeight = 1. / GetNumberOfDataSets();

      for (int i = 0; i < GetNumberOfDataSets(); i++) {

         Info("ConstructPseudoPDF", "Kernel estimation of dataset#%d...", i);
         RooNDKeysPdf* p = new RooNDKeysPdf(Form("NDK%d", i),
                                            Form("Kernel estimation of dataset#%d", i),
                                            GetObservables(),
                                            *((RooDataSet*)fDataSets[i]),
                                            "am", fSmoothing);
         fNDKeys.Add(p);
         kernels.add(*p);
         if (i < (GetNumberOfDataSets() - 1))
            fFractions.addClone(RooRealVar(Form("W%d", i), Form("fractional weight of kernel-PDF #%d", i), initialWeight, 0., 1.));

      }
      fModelPseudoPDF = new RooAddPdf("Model", "Pseudo-PDF constructed from kernels for model datasets", kernels, fFractions, kTRUE);
   }