本文整理汇总了C++中RooDataSet::SetName方法的典型用法代码示例。如果您正苦于以下问题:C++ RooDataSet::SetName方法的具体用法?C++ RooDataSet::SetName怎么用?C++ RooDataSet::SetName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RooDataSet
的用法示例。
在下文中一共展示了RooDataSet::SetName方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: reweight_diphotonpt_1d
void reweight_diphotonpt_1d(TH1F*weight_diphopt,TH1F*weight_diphopto,TH2F*weight_diphoptn,TH2F*weight_diphopt2o,TH2F*weight_diphoptnr, TH2F* weight_diphopt2,RooDataSet **dset, RooDataSet *dsetdestination){
if (!(*dset)) return;
if (!(dsetdestination)) return;
///numerator and denominator
TH1F *hnum = new TH1F("hnum","hnum",n_diphoptbins_forreweighting,diphoptbins_forreweighting);
TH1F *hden = new TH1F("hden","hden",n_diphoptbins_forreweighting,diphoptbins_forreweighting);
hnum->Sumw2();
hden->Sumw2();
// RooAbsData->get*() Load a given row of data
//getRealValue Get value of a RooAbsReal stored in set with given name. If none is found, value of defVal is returned.
for (int i=0; i<(*dset)->numEntries(); i++){
hden->Fill(fabs((*dset)->get(i)->getRealValue("roodiphopt")),(*dset)->store()->weight(i));
}
for (int i=0; i<dsetdestination->numEntries(); i++){
hnum->Fill(fabs(dsetdestination->get(i)->getRealValue("roodiphopt")),dsetdestination->store()->weight(i));
}
//normalize to one
hnum->Scale(1.0/hnum->Integral());
hden->Scale(1.0/hden->Integral());
hnum->Divide(hden);
TH1F *h = hnum;
RooDataSet *newdset = new RooDataSet(**dset,Form("%s_diphoptrew",(*dset)->GetName()));
newdset->reset();
assert(newdset);
for (int i=0; i<(*dset)->numEntries(); i++){
RooArgSet args = *((*dset)->get(i));
float oldw = (*dset)->store()->weight(i);
float diphopt = fabs((*dset)->get(i)->getRealValue("roodiphopt"));
float neww = oldw*h->GetBinContent(h->FindBin(fabs(diphopt)));
newdset->add(args,neww);
if(debug){
weight_diphopt->Fill(neww);
weight_diphopto->Fill(oldw);
weight_diphopt2o->Fill((h->FindBin(fabs(diphopt))),oldw);
weight_diphoptn->Fill((h->FindBin(fabs(diphopt))),neww);
if(oldw!=0)weight_diphoptnr->Fill(h->FindBin(fabs(diphopt)),oldw/neww);
else {weight_diphoptnr->Fill(-10,1);}//cout << "dipho weight old 0" << endl;}
if(oldw!=0)weight_diphopt2->Fill(diphopt,oldw/neww);
else {weight_diphopt2->Fill(-10,1);}//cout << "dipho weight old 0" << endl;}
}
}
newdset->SetName((*dset)->GetName());
newdset->SetTitle((*dset)->GetTitle());
delete hnum; delete hden;
RooDataSet *old_dset = *dset;
*dset=newdset;
std::cout << "Diphoton Pt 1d rew: norm from " << old_dset->sumEntries() << " to " << newdset->sumEntries() << std::endl;
delete old_dset;
};
示例2: reweight_rhosigma
//2d reweighting of rho and its sigma
void reweight_rhosigma(TH1F* weight_rho, TH1F* weight_rhoo,TH2F*weight_rhon,TH2F*weight_rho2o,TH2F* weight_rhonr, TH2F* weight_rho2,TH2F*weight_sigman,TH2F*weight_sigma2o,TH2F* weight_sigmanr, TH2F* weight_sigma2,RooDataSet **dset, RooDataSet *dsetdestination, bool deleteold){
if (!(*dset)) return;
// TH2F *hnum = new TH2F("hnum","hnum",n_rhobins_forreweighting,rhobins_forreweighting,n_sigmabins_forreweighting,sigmabins_forreweighting);
// TH2F *hden = new TH2F("hden","hden",n_rhobins_forreweighting,rhobins_forreweighting,n_sigmabins_forreweighting,sigmabins_forreweighting);
TH2F *hnum = new TH2F("hnum","hnum",100,0,100,20,0,20);
TH2F *hden = new TH2F("hden","hden",100,0,100,20,0,20);
hnum->Sumw2();
hden->Sumw2();
for (int i=0; i<(*dset)->numEntries(); i++){
hden->Fill(fabs((*dset)->get(i)->getRealValue("roorho")),fabs((*dset)->get(i)->getRealValue("roosigma")),(*dset)->store()->weight(i));
}
for (int i=0; i<dsetdestination->numEntries(); i++){
hnum->Fill(fabs(dsetdestination->get(i)->getRealValue("roorho")),fabs(dsetdestination->get(i)->getRealValue("roosigma")),dsetdestination->store()->weight(i));
}
hnum->Scale(1.0/hnum->Integral());
hden->Scale(1.0/hden->Integral());
//data/MC
hnum->Divide(hden);
TH2F *h = hnum;
RooDataSet *newdset = new RooDataSet(**dset,Form("%s_rhosigmarew",(*dset)->GetName()));
newdset->reset();
for (int i=0; i<(*dset)->numEntries(); i++){
RooArgSet args = *((*dset)->get(i));
float oldw = (*dset)->store()->weight(i);
float rho = args.getRealValue("roorho");
float sigma = args.getRealValue("roosigma");
float neww = oldw*h->GetBinContent(h->FindBin(rho,sigma));
if(debug){
weight_rho->Fill(neww);
weight_rhoo->Fill(oldw);
weight_rho2o->Fill(h->GetXaxis()->FindBin(rho),oldw);
weight_rhon->Fill(h->GetXaxis()->FindBin(rho),neww);
if(oldw!=0)weight_rhonr->Fill(h->GetXaxis()->FindBin(rho),oldw/neww);
else {weight_rhonr->Fill(-10,1);}//cout << "dipho weight old 0" << endl;}
if(oldw!=0)weight_rho2->Fill(rho,oldw/neww);
weight_sigma2o->Fill(h->GetYaxis()->FindBin(sigma),oldw);
weight_sigman->Fill(h->GetYaxis()->FindBin(sigma),neww);
if(oldw!=0)weight_sigmanr->Fill(h->GetYaxis()->FindBin(sigma),oldw/neww);
else {weight_sigmanr->Fill(-10,1);}//cout << "dipho weight old 0" << endl;}
if(oldw!=0)weight_sigma2->Fill(sigma,oldw/neww);
}
newdset->add(args,neww);
}
newdset->SetName((*dset)->GetName());
newdset->SetTitle((*dset)->GetTitle());
delete hnum; delete hden;
RooDataSet *old_dset = *dset;
*dset=newdset;
std::cout << "RhoSigma2D rew: norm from " << old_dset->sumEntries() << " to " << newdset->sumEntries() << std::endl;
if (deleteold) delete old_dset;
};
示例3: main
int main() {
std::vector<float> masses;
masses.push_back( 300. );
masses.push_back( 400. );
masses.push_back( 500. );
masses.push_back( 750. );
masses.push_back( 1000. );
masses.push_back( 1250. );
masses.push_back( 1500. );
masses.push_back( 2000. );
masses.push_back( 2500. );
masses.push_back( 3000. );
masses.push_back( 5000. );
for( unsigned i=0; i<masses.size(); ++i ) {
std::cout << "-> Starting mass: " << masses[i] << std::endl;
TFile* file = TFile::Open( Form("toySignal_m%.0f.root", masses[i]), "recreate" );
file->cd();
float thisMass = masses[i];
RooRealVar x("mass", "mass", thisMass, 0.2*thisMass, 2.*thisMass );
// Crystal-Ball
RooRealVar mean( "mean", "mean", thisMass );
RooRealVar sigma( "sigma", "sigma", 0.015*thisMass );
RooRealVar alpha( "alpha", "alpha", 1.2 );
RooRealVar n( "n", "n", 0.81 );
RooCBShape cb( "cb", "cb", x, mean, sigma, alpha, n );
// Generate a toy dataset from the interpreted p.d.f
RooDataSet* data = cb.generate(x,10000) ;
data->SetName("data");
data->Write();
file->Close();
}
return 0;
}
示例4: main
int main (int argc, char **argv)
{
const char* chInFile = "ws.root";
const char* chOutFile = "ws_gen.root";
int numSignal = 10000;
int numBkg = 100000;
char option_char;
while ( (option_char = getopt(argc,argv, "i:o:s:b:")) != EOF )
switch (option_char)
{
case 'i': chInFile = optarg; break;
case 'o': chOutFile = optarg; break;
case 's': numSignal = atoi(optarg); break;
case 'b': numBkg = atoi(optarg); break;
case '?': fprintf (stderr,
"usage: %s [i<input file> o<output file>]\n", argv[0]);
}
cout << "In File = " << chInFile << endl;
cout << "Out File = " << chOutFile << endl;
cout << "Signal Events = " << numSignal << endl;
cout << "Bkg Events = " << numBkg << endl;
TFile inFile(chInFile,"READ");
RooWorkspace* ws = (RooWorkspace*) inFile.Get("rws");
TFile outFile(chOutFile,"RECREATE");
/*
ws->var("tau")->setVal(1.417);
ws->var("DG")->setVal(0.151);
ws->var("beta")->setVal(0.25);
ws->var("A02")->setVal(0.553);
ws->var("A1")->setVal(0.487);
ws->var("delta_l")->setVal(3.15);
ws->var("fs")->setVal(0.147);
*/
// ws->var("delta_l")->setConstant(kTRUE);
// ws->var("delta_p")->setConstant(kTRUE);
// ws->var("Dm")->setConstant(kTRUE);
//*ws->var("xs") = numSignal/(numSignal+numBkg);
// int numSignal = numEvents * ws->var("xs")->getVal();
// int numBkg = numEvents - numSignal;
ws->factory("Gaussian::dilutionGauss(d,0,0.276)");
//ws->factory("SUM::dSignalPDF(xds[0.109]*dilutionGauss,TruthModel(d))");
//ws->factory("SUM::dBkgPDF(xdb[0.109]*dilutionGauss,TruthModel(d))");
ws->factory("SUM::dSignalPDF(xds[1]*dilutionGauss,TruthModel(d))");
ws->factory("SUM::dBkgPDF(xdb[1]*dilutionGauss,TruthModel(d))");
/*
ws->factory("GaussModel::xetGaussianS(et,meanGaussEtS,sigmaGaussEtS)");
ws->factory("Decay::xerrorSignal(et,tauEtS,xetGaussianS,SingleSided]");
ws->factory("PROD::xsignalTimeAngle(timeAngle|et,xerrorSignal");
ws->factory("PROD::xsignal(massSignal,xsignalTimeAngle,DmConstraint)");
*/
RooDataSet* dSignalData = ws->pdf("dSignalPDF")->generate(RooArgSet(*ws->var("d")),numSignal);
RooDataSet *dataSignal = ws->pdf("signal")->generate(RooArgSet(*ws->var("m"),*ws->var("t"),*ws->var("et"),*ws->var("cpsi"),*ws->var("ctheta"),*ws->var("phi")), RooFit::ProtoData(*dSignalData));
ws->factory("GaussModel::xetGaussianPR(et,meanGaussEtPR,sigmaGaussEtPR)");
ws->factory("Decay::xerrBkgPR(et,tauEtPR,xetGaussianPR,SingleSided]");
ws->factory("GaussModel::xetGaussianNP(et,meanGaussEtNP,sigmaGaussEtNP)");
ws->factory("Decay::xerrBkgNP(et,tauEtNP,xetGaussianNP,SingleSided]");
/* Time */
ws->factory("GaussModel::xresolution(t,0,scale,et)");
ws->factory("Decay::xnegativeDecay(t,tauNeg,xresolution,Flipped)");
ws->factory("Decay::xpositiveDecay(t,tauPos,xresolution,SingleSided)");
ws->factory("Decay::xpositiveLongDecay(t,tauLngPos,xresolution,SingleSided)");
ws->factory("RSUM::xtBkgNP(xn*xnegativeDecay,xp*xpositiveDecay,xpositiveLongDecay");
/* Promt and Non-Prompt */
ws->factory("PROD::xtimeBkgNP(xtBkgNP|et,xerrBkgNP)");
ws->factory("PROD::xtimeBkgPR(xresolution|et,xerrBkgPR)");
ws->factory("PROD::xPrompt(massBkgPR,xtimeBkgPR,anglePR)");
ws->factory("PROD::xNonPrompt(massBkgNP,xtimeBkgNP,angleNP)");
ws->factory("SUM::xbackground(xprompt*xPrompt,xNonPrompt)");
RooDataSet* dBkgData = ws->pdf("dBkgPDF")->generate(RooArgSet(*ws->var("d")),numBkg);
RooDataSet* dataBkg = ws->pdf("xbackground")->generate(RooArgSet(*ws->var("m"),*ws->var("t"),*ws->var("et"),*ws->var("cpsi"),*ws->var("ctheta"),*ws->var("phi")), numBkg);
dataBkg->merge(dBkgData);
dataSignal->SetName("dataGenSignal");
dataBkg->SetName("dataGenBkg");
ws->import(*dataSignal);
ws->import(*dataBkg);
////ws->import(*dataBkg,RooFit::Rename("dataGenBkg"));
dataSignal->append(*dataBkg);
//.........这里部分代码省略.........
示例5: generate
void FitterUtilsSimultaneousExpOfPolyTimesX::generate(bool wantPlots, string plotsfile)
{
FitterUtilsExpOfPolyTimesX::generate(wantPlots, plotsfile);
TFile fw(workspacename.c_str(), "UPDATE");
RooWorkspace* workspace = (RooWorkspace*)fw.Get("workspace");
RooRealVar *B_plus_M = workspace->var("B_plus_M");
RooRealVar *misPT = workspace->var("misPT");
RooDataSet* dataSetCombExt = (RooDataSet*)workspace->data("dataSetCombExt");
RooDataSet* dataSetComb = (RooDataSet*)workspace->data("dataSetComb");
// RooRealVar *l1KeeGen = workspace->var("l1KeeGen");
// RooRealVar *l2KeeGen = workspace->var("l2KeeGen");
// RooRealVar *l3KeeGen = workspace->var("l3KeeGen");
// RooRealVar *l4KeeGen = workspace->var("l4KeeGen");
// RooRealVar *l5KeeGen = workspace->var("l5KeeGen");
//
//
// RooExpOfPolyTimesX kemuPDF("kemuPDF", "kemuPDF", *B_plus_M, *misPT, *l1KeeGen, *l2KeeGen, *l3KeeGen, *l4KeeGen, *l5KeeGen);
//
// RooAbsPdf::GenSpec* GenSpecKemu = kemuPDF.prepareMultiGen(RooArgSet(*B_plus_M, *misPT), RooFit::Extended(1), NumEvents(nGenKemu));
//
// cout<<"Generating Kemu"<<endl;
// RooDataSet* dataGenKemu = kemuPDF.generate(*GenSpecKemu);//(argset, 100, false, true, "", false, true);
// dataGenKemu->SetName("dataGenKemu"); dataGenKemu->SetTitle("dataGenKemu");
//
//
// RooWorkspace* workspaceGen = (RooWorkspace*)fw.Get("workspaceGen");
// workspaceGen->import(*dataGenKemu);
//
// workspaceGen->Write("", TObject::kOverwrite);
// fw.Close();
// delete dataGenKemu;
// delete GenSpecKemu;
TVectorD rho(2);
rho[0] = 2.5;
rho[1] = 1.5;
misPT->setRange(-2000, 5000);
RooNDKeysPdf kemuPDF("kemuPDF", "kemuPDF", RooArgList(*B_plus_M, *misPT), *dataSetCombExt, rho, "ma",3, true);
misPT->setRange(0, 5000);
RooAbsPdf::GenSpec* GenSpecKemu = kemuPDF.prepareMultiGen(RooArgSet(*B_plus_M, *misPT), RooFit::Extended(1), NumEvents(nGenKemu));
cout<<"Generating Kemu"<<endl;
RooDataSet* dataGenKemu = kemuPDF.generate(*GenSpecKemu);//(argset, 100, false, true, "", false, true);
dataGenKemu->SetName("dataGenKemu"); dataGenKemu->SetTitle("dataGenKemu");
RooWorkspace* workspaceGen = (RooWorkspace*)fw.Get("workspaceGen");
workspaceGen->import(*dataGenKemu);
if(wantPlots) PlotShape(*dataSetComb, *dataGenKemu, kemuPDF, plotsfile, "cKemuKeys", *B_plus_M, *misPT);
fw.cd();
workspaceGen->Write("", TObject::kOverwrite);
fw.Close();
delete dataGenKemu;
delete GenSpecKemu;
}
示例6: generate
void FitterUtils::generate()
{
//***************Get the PDFs from the workspace
TFile fw(workspacename.c_str(), "UPDATE");
RooWorkspace* workspace = (RooWorkspace*)fw.Get("workspace");
RooRealVar *B_plus_M = workspace->var("B_plus_M");
RooRealVar *misPT = workspace->var("misPT");
RooRealVar *T = workspace->var("T");
RooRealVar *n = workspace->var("n");
RooRealVar *expoConst = workspace->var("expoConst");
RooRealVar *trueExp = workspace->var("trueExp");
RooRealVar *fractionalErrorJpsiLeak = workspace->var("fractionalErrorJpsiLeak");
cout<<"VALUE OF T IN GENERATE: "<<T->getVal()<<" +- "<<T->getError()<<endl;
cout<<"VALUE OF n IN GENERATE: "<<n->getVal()<<" +- "<<n->getError()<<endl;
RooHistPdf *histPdfSignalZeroGamma = (RooHistPdf *) workspace->pdf("histPdfSignalZeroGamma");
RooHistPdf *histPdfSignalOneGamma = (RooHistPdf *) workspace->pdf("histPdfSignalOneGamma");
RooHistPdf *histPdfSignalTwoGamma = (RooHistPdf *) workspace->pdf("histPdfSignalTwoGamma");
RooHistPdf *histPdfPartReco = (RooHistPdf *) workspace->pdf("histPdfPartReco");
RooHistPdf *histPdfJpsiLeak(0);
if(nGenJpsiLeak>1) histPdfJpsiLeak = (RooHistPdf *) workspace->pdf("histPdfJpsiLeak");
RooAbsPdf *combPDF;
if (fit2D)
{
combPDF = new RooPTMVis("combPDF", "combPDF", *misPT, *B_plus_M, *T, *n, *expoConst);
}
else
{
combPDF = new RooExponential("combPDF", "combPDF", *B_plus_M, *expoConst);
}
double trueExpConst(trueExp->getValV());
expoConst->setVal(trueExpConst);
//***************Prepare generation
int nGenSignalZeroGamma(floor(nGenFracZeroGamma*nGenSignal));
int nGenSignalOneGamma(floor(nGenFracOneGamma*nGenSignal));
int nGenSignalTwoGamma(floor(nGenSignal-nGenSignalZeroGamma-nGenSignalOneGamma));
RooArgSet argset2(*B_plus_M);
if (fit2D) argset2.add(*misPT);
cout<<"Preparing the generation of events 1";
RooRandom::randomGenerator()->SetSeed();
RooAbsPdf::GenSpec* GenSpecSignalZeroGamma = histPdfSignalZeroGamma->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenSignalZeroGamma)); cout<<" 2 ";
RooAbsPdf::GenSpec* GenSpecSignalOneGamma = histPdfSignalOneGamma->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenSignalOneGamma)); cout<<" 3 ";
RooAbsPdf::GenSpec* GenSpecSignalTwoGamma = histPdfSignalTwoGamma->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenSignalTwoGamma)); cout<<" 4 ";
RooAbsPdf::GenSpec* GenSpecPartReco = histPdfPartReco->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenPartReco)); cout<<" 5 "<<endl;
RooAbsPdf::GenSpec* GenSpecComb = combPDF->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenComb));
RooAbsPdf::GenSpec* GenSpecJpsiLeak(0);
if(nGenJpsiLeak>1) GenSpecJpsiLeak = histPdfJpsiLeak->prepareMultiGen(argset2, RooFit::Extended(1), NumEvents(nGenJpsiLeak));
cout<<"Variable loaded:"<<endl;
B_plus_M->Print(); expoConst->Print(); //B_plus_DTFM_M_zero->Print();
if (fit2D) misPT->Print();
//***************Generate some datasets
cout<<"Generating signal Zero Photon"<<endl;
RooDataSet* dataGenSignalZeroGamma = histPdfSignalZeroGamma->generate(*GenSpecSignalZeroGamma);//(argset, 250, false, true, "", false, true);
dataGenSignalZeroGamma->SetName("dataGenSignalZeroGamma"); dataGenSignalZeroGamma->SetTitle("dataGenSignalZeroGamma");
cout<<"Generating signal One Photon"<<endl;
RooDataSet* dataGenSignalOneGamma = histPdfSignalOneGamma->generate(*GenSpecSignalOneGamma);//(argset, 250, false, true, "", false, true);
dataGenSignalOneGamma->SetName("dataGenSignalOneGamma"); dataGenSignalOneGamma->SetTitle("dataGenSignalOneGamma");
cout<<"Generating signal two Photons"<<endl;
RooDataSet* dataGenSignalTwoGamma = histPdfSignalTwoGamma->generate(*GenSpecSignalTwoGamma);//(argset, 250, false, true, "", false, true);
dataGenSignalTwoGamma->SetName("dataGenSignalTwoGamma"); dataGenSignalTwoGamma->SetTitle("dataGenSignalTwoGamma");
cout<<"Generating combinatorial"<<endl;
RooDataSet* dataGenComb = combPDF->generate(*GenSpecComb);//(argset, 100, false, true, "", false, true);
dataGenComb->SetName("dataGenComb"); dataGenComb->SetTitle("dataGenComb");
cout<<"Generating PartReco"<<endl;
RooDataSet* dataGenPartReco = histPdfPartReco->generate(*GenSpecPartReco);//argset, 160, false, true, "", false, true);
dataGenPartReco->SetName("dataGenPartReco"); dataGenPartReco->SetTitle("dataGenPartReco");
RooDataSet* dataGenJpsiLeak(0);
if(nGenJpsiLeak>1)
{
cout<<"Generating Leaking JPsi"<<endl;
dataGenJpsiLeak = histPdfJpsiLeak->generate(*GenSpecJpsiLeak);//argset, 160, false, true, "", false, true);
dataGenJpsiLeak->SetName("dataGenJpsiLeak"); dataGenJpsiLeak->SetTitle("dataGenJpsiLeak");
}
//*************Saving the generated datasets in a workspace
RooWorkspace workspaceGen("workspaceGen", "workspaceGen");
workspaceGen.import(*dataGenSignalZeroGamma);
workspaceGen.import(*dataGenSignalOneGamma);
workspaceGen.import(*dataGenSignalTwoGamma);
workspaceGen.import(*dataGenComb);
//.........这里部分代码省略.........
示例7: runQuickRejig
string runQuickRejig(string oldfilename, int ncats){
string newfilename="TestWS.root";
TFile *oldFile = TFile::Open(oldfilename.c_str());
TFile *newFile = new TFile(newfilename.c_str(),"RECREATE");
RooWorkspace *oldWS = (RooWorkspace*)oldFile->Get("cms_hgg_workspace");
RooWorkspace *newWS = new RooWorkspace("wsig_8TeV");
RooRealVar *mass = (RooRealVar*)oldWS->var("CMS_hgg_mass");
RooDataSet *tot;
RooRealVar *normT1 = new RooRealVar("nT1","nT1",500,0,550);
RooRealVar *meanT1 = new RooRealVar("mT1","mT1",125,122,128);
RooRealVar *sigmaT1 = new RooRealVar("sT1","sT1",3.1,1.,10.);
RooGaussian *gausT1 = new RooGaussian("gT1","gT1",*mass,*meanT1,*sigmaT1);
RooRealVar *normT2 = new RooRealVar("nT2","nT2",2,0,500);
RooRealVar *meanT2 = new RooRealVar("mT2","mT2",125,122,128);
RooRealVar *sigmaT2 = new RooRealVar("sT2","sT2",1.7,0.,10.);
RooGaussian *gausT2 = new RooGaussian("gT2","gT2",*mass,*meanT2,*sigmaT2);
RooRealVar *normT3 = new RooRealVar("nT3","nT3",2,0,500);
RooRealVar *meanT3 = new RooRealVar("mT3","mT3",125,122,128);
RooRealVar *sigmaT3 = new RooRealVar("sT3","sT3",1.7,0.,10.);
RooGaussian *gausT3 = new RooGaussian("gT3","gT3",*mass,*meanT3,*sigmaT3);
RooAddPdf *gausT = new RooAddPdf("gT","gT",RooArgList(*gausT1,*gausT2,*gausT3),RooArgList(*normT1,*normT2,*normT3));
for (int cat=0; cat<ncats; cat++){
RooDataSet *thisData = (RooDataSet*)oldWS->data(Form("sig_ggh_mass_m125_cat%d",cat));
newWS->import(*thisData);
RooRealVar *norm1 = new RooRealVar(Form("n1%d",cat),Form("n1%d",cat),500,0,550);
RooRealVar *mean1 = new RooRealVar(Form("m1%d",cat),Form("m1%d",cat),125,122,128);
RooRealVar *sigma1 = new RooRealVar(Form("s1%d",cat),Form("s1%d",cat),3.1,1.,10.);
RooGaussian *gaus1 = new RooGaussian(Form("g1%d",cat),Form("g1%d",cat),*mass,*mean1,*sigma1);
RooRealVar *norm2 = new RooRealVar(Form("n2%d",cat),Form("n2%d",cat),2,0,500);
RooRealVar *mean2 = new RooRealVar(Form("m2%d",cat),Form("m2%d",cat),125,122,128);
RooRealVar *sigma2 = new RooRealVar(Form("s2%d",cat),Form("s2%d",cat),1.7,0.,10.);
RooGaussian *gaus2 = new RooGaussian(Form("g2%d",cat),Form("g2%d",cat),*mass,*mean2,*sigma2);
RooRealVar *norm3 = new RooRealVar(Form("n3%d",cat),Form("n3%d",cat),2,0,500);
RooRealVar *mean3 = new RooRealVar(Form("m3%d",cat),Form("m3%d",cat),125,122,128);
RooRealVar *sigma3 = new RooRealVar(Form("s3%d",cat),Form("s3%d",cat),1.7,0.,10.);
RooGaussian *gaus3 = new RooGaussian(Form("g3%d",cat),Form("g3%d",cat),*mass,*mean3,*sigma3);
RooAddPdf *gaus = new RooAddPdf(Form("g%d",cat),"g",RooArgList(*gaus1,*gaus2,*gaus3),RooArgList(*norm1,*norm2,*norm3));
gaus->fitTo(*thisData,SumW2Error(kTRUE));
newWS->import(*gaus);
if (cat==0) {
tot = thisData;
tot->SetName("sig_ggh_m125");
}
else tot->append(*thisData);
}
newWS->import(*tot);
gausT->fitTo(*tot,SumW2Error(kTRUE));
newWS->import(*gausT);
newWS->Write();
oldFile->Close();
newFile->Close();
delete newFile;
delete newWS;
return newfilename;
}