Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2026-05-23 08:10:32

0001 #ifndef PARTICLEMODEL_H
0002 #define PARTICLEMODEL_H
0003 
0004 struct ParticleModel
0005 {
0006   std::string name;
0007 
0008   std::shared_ptr<RooRealVar> mass;
0009 
0010   // Some RooFit functions prefer RooRealVars, some prefer RooArgLists
0011   // (they are not interconvertible, as RooArgLists object-slice RooRealVars into RooAbsArgs)
0012   // so we fill our parameter lists with a separate function
0013 
0014   std::shared_ptr<RooAbsPdf> signal_function;
0015   std::vector<RooRealVar> signal_parameters;
0016   RooArgList signal_parameter_arglist;
0017 
0018   std::shared_ptr<RooAbsPdf> background_function;
0019   std::vector<RooRealVar> background_parameters;
0020   RooArgList background_parameter_arglist;
0021 
0022   void add_signal_parameter(const std::string& name, const std::string& title, float init_val, float min_val, float max_val)
0023   {
0024     signal_parameters.emplace_back(name.c_str(),title.c_str(),init_val,min_val,max_val);
0025     signal_parameter_arglist.addClone(signal_parameters.back());
0026   }
0027   void add_background_parameter(const std::string& name, const std::string& title, float init_val, float min_val, float max_val)
0028   {
0029     background_parameters.emplace_back(name.c_str(),title.c_str(),init_val,min_val,max_val);
0030     background_parameter_arglist.addClone(background_parameters.back());
0031   }
0032 
0033   std::shared_ptr<RooRealVar> n_signal;
0034   std::shared_ptr<RooRealVar> n_background;
0035 
0036   // (optional) setup reasonable defaults for mass, nSignal, nBackground
0037   void setup_default_mass_nsignal_nbackground(const std::string& particle_name, const std::string& particle_title, float min_mass, float max_mass)
0038   {
0039     mass = std::make_shared<RooRealVar>((particle_name+"_mass").c_str(),(particle_title+" mass").c_str(),min_mass,max_mass);
0040     n_signal = std::make_shared<RooRealVar>((particle_name+"_nsignal").c_str(),(particle_title+" nSignal").c_str(),0.,1e9);
0041     n_background = std::make_shared<RooRealVar>((particle_name+"_nbackground").c_str(),(particle_title+" nBackground").c_str(),0.,1e9);
0042   }
0043 
0044   std::shared_ptr<RooAbsPdf> fit_function;
0045 
0046   void fitTo(RooAbsData& ds)
0047   {
0048     fit_function->fitTo(ds);
0049   }
0050 };
0051 
0052 #endif