TGraph with c++ vector

std::vector<Double_t> medianEnergy;
std::vector<UInt_t> runNumber_energy;

std::vector<double> energies;
const int entries_per_median = 10000;

for (size_t i = 0; i < tree->GetEntries(); ++i) {
    tree->GetEntry(i);
    energies.push_back(energy);

    if (energies.size() % entries_per_median == 0) {
        std::sort(energies.begin(), energies.end());
        medianEnergy.push_back((energies[entries_per_median / 2 - 1] + energies[entries_per_median / 2]) / 2.0);
        runNumber_energy.push_back(runNumber);
        energies.clear();
    }
}


TCanvas* canvas = new TCanvas("canvas", "Graph", 800, 600);

// Plotting the graph without errors
TGraph* graph = new TGraph(runNumber_energy.size(), runNumber_energy, medianEnergy);
graph->SetTitle("Energy vs Run Number");
graph->GetXaxis()->SetTitle("Run Number");
graph->GetYaxis()->SetTitle("Energy");
graph->SetMarkerStyle(20);
graph->SetMarkerSize(0.8);
graph->Draw("AP");    

it is giving an error because I am using a classical vector, is there any way to resolve it?

TGraph* graph = new TGraph(runNumber_energy.size(), runNumber_energy, medianEnergy);this line still giving error

What is the error you see?

For the TGraph constructors, both vectors have to be of the same type; you have one double and one uint, which won’t work; make both doubles in this case. And then try

TGraph *graph = new TGraph(runNumber_energy.size(), &runNumber_energy[0], &medianEnergy[0]);

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.