"Dynamic" TH1 creation

I’m writing some some code, which is designed to take as input two vectors containing between 1 and 10 non-empty sets of data, each of which is to be plotted in a separate TH1. These histos are filled, and plotted “ontop” of one another using the “SAME” drawing command.

Currently, I simply define 10 TH1’s. I have 10 for loops for filling the histograms, which run only if there exists a corresponding dataset (e.g. the 10th loop will run only if there are 10 sets of XY data). After filling, I check each histogram, drawing only those with at least one entry.

As you can imagine, this is a bit messy and cumbersome. I imagine there must be a better way?

I have something like this:

void my_messy_function(vector<vector<double>> data){

  TH1 *h1 = new TH1D(...);
  TH1 *h2 = new TH1D(...);
  TH1 *h3 = new TH1D(...);
  ...

  for(...)
    h1->Fill(data[0][i]);

  if(data.size() > 1)
   for(...)
    h2->Fill(data[1][i]);

  if(data.size()> 2)
   for(...) 
    h3->Fill(data[2][i]);


  h1->Draw();

  if(h2->GetEntries() > 0)
     h2->Draw("SAME");

  ...



}

Hi,

I guess instead of

you can define an array of histograms, and then fill them all in the same loop. Do you think it will work for you?