Getting sweights

Hi,

I am using trying to get the sweights for my data. Following is the code:

    TFile* file1 = new TFile("TMVA_output_splots.root");
    TTree* datatree = (TTree*)(file1->Get("tree"));

    TH1F* data_p_30_bdt = (TH1F*)(file1->Get("p_30_bdt"));
    TH1F* data_p_b_30_bdt = (TH1F*)(file1->Get("p_b_30_bdt"));
    TH1F* data_p_n_30_bdt = (TH1F*)(file1->Get("p_n_30_bdt"));

    RooRealVar BDT_response("BDT_response", "BDT_response",-1,1);
    RooRealVar BDT_response_30("BDT_response_30", "BDT_response_30",-1,1);
    RooRealVar jet_pt("jet_pt", "jet_pt",-1,1);

    RooDataSet data_set("data_set","data_set",RooArgSet(jet_pt,BDT_response),Import(*datatree));

    RooDataHist p_30_bdt("p_30_bdt","p_30_bdt",RooArgList(BDT_response),Import(*data_p_30_bdt));
    RooDataHist p_b_30_bdt("p_b_30_bdt","p_b_30_bdt",RooArgList(BDT_response),Import(*data_p_b_30_bdt));
    RooDataHist p_n_30_bdt("p_n_30_bdt","p_n_30_bdt",RooArgList(BDT_response),Import(*data_p_n_30_bdt));

    RooRealVar yield_b_30("yield_b_30","yield_b_30",100,0,max);
    RooRealVar yield_n_30("yield_n_30","yield_n_30",100,0,max);

    RooHistPdf pdf_b_30("pdf_b_30","",BDT_response,p_b_30_bdt);
    RooHistPdf pdf_n_30("pdf_n_30","",BDT_response,p_n_30_bdt);
  
    RooAddPdf totalPdf_30("totalPdf_30","totalPdf_30",RooArgList(pdf_b_30,pdf_n_30),RooArgList(yield_b_30,yield_n_30));
    totalPdf_30.fitTo(p_30_bdt,Extended());

//There is no error till here.

    RooAbsPdf* kkk = &totalPdf_30;
    RooStats::SPlot* sData = new RooStats::SPlot("sData","An SPlot",data_set,kkk,RooArgList(yield_b_30,yield_n_30));

So, I am unable to get my dataset with s weights.

The error is :

Error in <TDecompLU::DecomposeLUCrout>: matrix is singular
Error in <TDecompLU::DecomposeLUCrout>: matrix is singular
[#0] ERROR:Eval -- SPlot Error: covariance matrix is singular; I can't invert it!

Can’t understand why this is happening even if I change the variables in my dataset.

Thanks!

Hi,

The problem got solved!
The issue was with the branch itself.

Thanks!