#include typedef std::vector HistVector_t; typedef std::vector::iterator HistVectorItr; void TestMacro() { TH1F* ht = new TH1F("ht", "TestHist", 100, -5, 5); //template histogram TH1F* h1 = ht->Clone("h2"); TH1F* h2 = ht->Clone("h2"); TH1F* h3 = ht->Clone("h3"); h1->FillRandom("gaus", 10000); h2->FillRandom("pol2", 10000); h2->SetLineColor(kRed); h3->FillRandom("expo", 10000); h3->SetLineColor(kBlue); h1->Draw(); h2->Draw("same"); h3->Draw("same"); HistVector_t vec; vec.push_back(&h2); vec.push_back(&h3); TH1F* hb = MergeHistograms(vec, ht, cout); hb->SetLineColor(16); hb->SetFillStyle(3005); h1->Draw(); hb->Draw("same"); } ////////////////////////////////////////////////////////////////////////////////////////////////// TH1F* MergeHistograms(HistVector_t &hvec, TH1F* hmodel, ostream& sout) { TH1F* h_bkg = (TH1F*)hmodel->Clone("h_bkg"); sout << endl << "Merging "<< hvec.size() << " background histograms." << endl; for(Int_t binc = 1; binc <= h_bkg->GetNbinsX(); binc++) { //for each bin //for(HistVectorItr binc = hvec.begin(); binc != hvec.end(); ++binc) std::vector values; sout << "Bin " << binc << endl; //for(Int_t cc = 0; cc < hvec.size(); cc++) { // for each background for( HistVectorItr itr = hvec.begin(); itr != hvec.end(); ++itr) { sout << "histo " << endl; Float_t vtemp = (*itr).GetBinContent(binc); // fill values vector sout << "value = " << vtemp << endl; values.push_back(vtemp); } //find max element sout << "Finding max el.." << endl; std::vector::iterator melement = max_element( values.begin(), values.end() ); //sout << "Bin: " << binc << ", value= " << melement << endl; h_bkg->SetBinContent(binc, (*melement) ); } return h_bkg; }