#include #include #include #include #include #include #include #include #include #include "TFile.h" #include "TAxis.h" using namespace RooFit; class toto { public : toto(); virtual ~toto(); void init(); void dataset(); void treat(); private : //mass RooRealVar* m; RooPlot *m_mframe; //lifetime (observable and rooplot) RooRealVar* t; //error on lifetime RooRealVar* dt; //tag decision RooCategory* tag; RooCategory* tagCat; //reconstructed final flavour (using reco B flavour) RooCategory* finflav; //product of tag and finflav (+1 if unmixed and -1 if mixed) RooCategory* mixcat; //data sets RooDataSet* data; RooFitResult*m_massFitResults; double m_bmass; double m_bmasssigma; double m_bkgmassslope; }; toto::toto(){ m_bmass = 5.2796; m_bmasssigma = 0.017; m_bkgmassslope = -1.6; } toto::~toto(){} void toto::init() { //mass m = new RooRealVar("mass","B mass",4.89,5.69,"GeV/c^{2}"); m_mframe = m->frame(); m_mframe->GetXaxis()->SetTitle("#mu #mu K #pi invariant mass (GeV/c^{2})"); //lifetime t = new RooRealVar("t","t",-1.0,20.,"ps"); dt = new RooRealVar("dt","error on t",0.,1.0,"ps"); //tagged ? tagCat = new RooCategory("tagCat","tagCat"); tagCat->defineType("tagged",1); tagCat->defineType("noTag",0); //tag output : initial flavour tag = new RooCategory("tag","tag"); tag->defineType("B0d_bar",-1); tag->defineType("B0d",+1); tag->defineType("Untag",0); //reconstructed flavour : final flavour finflav = new RooCategory("finflav","finflav"); finflav->defineType("B0d_bar",-1); finflav->defineType("B0d",+1); //has mixed ? mixcat = new RooCategory("mixcat","mixcat"); mixcat->defineType("unmixed",+1); mixcat->defineType("mixed",-1); //cannot be untagged because integration neq 1, not valid pdf //mixcat->defineType("Untag",0); } void toto::dataset() { TFile*f = new TFile("data.root"); if(f->GetSize()>0){ data = (RooDataSet*)f->Get("data"); f->Clear(); f->Close(); delete f; } data->table(*mixcat)->Print(); data->Print("v"); for(int i =0;i<6;i++){ RooRealVar*mm = (RooRealVar*)data->get(i)->find("mass"); RooCategory*tg = (RooCategory*)data->get(i)->find("tag"); RooRealVar*time = (RooRealVar*)data->get(i)->find("t"); RooCategory*mix = (RooCategory*)data->get(i)->find("mixcat"); cout<<"val "<getVal() <<" tag "<getIndex() <<" t "<getVal() <<" mix "<getIndex() <plotOn(m_mframe); RooRealVar * mean = new RooRealVar("mean","mean",m_bmass, m_bmass-3*m_bmasssigma, m_bmass+3*m_bmasssigma, "GeV/c^{2}"); RooRealVar * sigma = new RooRealVar("sigma","sigma",m_bmasssigma, m_bmasssigma-0.005, m_bmasssigma+0.005, "GeV/c^{2}"); RooGaussian*m_mass = new RooGaussian("massgaus","Sig mass gaussian", *m,*mean,*sigma); m_mass->plotOn(m_mframe); m_mframe->Draw(); m_massFitResults = m_mass->fitTo(*data,Minos(false), Strategy(1), PrintLevel(printlev), Save(true)); } //======================================================================= void test() { toto *to = new toto(); to->init(); to->dataset(); to->treat(); return; }