//Macro to take the P1 P2 and P3 dataset values for nHadrons and sum them and rewrite to the workspace. //It will take as argument the three dataset //Ian Connelly //19 4 12 void sumdata(RooWorkspace &*w, RooDataSet &*d1, RooDataSet &*d2, RooDataSet &*d3){ //sanity check - number of rows in each set is the same int d1_entries = d1->numEntries(); int d2_entries = d2->numEntries(); int d3_entries = d3->numEntries(); int entries; if(d1_entries != d2_entries || d1_entries != d3_entries || d2_entries != d3_entries){ cout << "ERROR - Sanity check failed!" << endl cout << "d1 : " << d1_entries << " d2 : " << d2_entries << " d3 : " << d3_entries << end; } else{entries = d1_entries;} int totaltotal =0; //Set up loop and variables RooRealVar* var = w->var("nHadrons"); RooArgSet* set; RooRealVar totalHadrons("totalHadrons","totalHadrons",0,100); cout << "Type the dataset name (syntax: data__totalHadrons) : " ; TString userDataName; cin >> userDataName; RooDataSet d_hadrons(userDataName,"Total number of hadrons in event",RooArgSet(totalHadrons)); RooRealVar* nHadrons; for(int i = 0 ; i < entries; i++){ int d1_hadrons = 0; int d2_hadrons = 0; int d3_hadrons = 0; int tot = 0; set = d1->get(i); var = (RooRealVar*)set->find(var->GetName()); d1_hadrons = var->getVal(); cout << d1_hadrons << " " ; set = d2->get(i); var = (RooRealVar*)set->find(var->GetName()); d2_hadrons = var->getVal(); cout << d2_hadrons << " " ; set = d3->get(i); var = (RooRealVar*)set->find(var->GetName()); d3_hadrons = var->getVal(); cout << d3_hadrons << " Total : " ; tot = d1_hadrons + d2_hadrons + d3_hadrons; cout << tot << endl; totaltotal+=tot; totalHadrons.setVal(tot); d_hadrons.add(RooArgSet(totalHadrons)); } cout << "==========================================" << endl; cout << "Grand total : " << totaltotal << endl; cout << "Number of entries : " << entries << endl; cout << "Mean total : " << static_casttotaltotal/entries << endl; //Save the new RooDataSet to the workspace being used w->import(d_hadrons); }