在ROOT中绘制ASCII文件

时间:2015-05-27 06:57:18

标签: c++ root-framework

我正在尝试编写一个小宏,它从具有4列的ASCII文件中读取数据。但是我想仅将第二列的第二列绘制为(x,y)。

3 个答案:

答案 0 :(得分:5)

TGraph的构造函数可以直接获取CSV文件,请参阅documentation

TGraph g("data.csv", "%*lg %lg %lg %*lg", ",");

第一个参数是文件名,第二个参数是格式字符串。跳过的列用*表示;要跳过最后一列,您实际上可以从格式字符串

中省略它
%*lg %lg %lg

第三个参数是列分隔符,对于您的CSV风格,它可能是,

答案 1 :(得分:0)

按照此示例:https://root.cern.ch/root/html534/tutorials/tree/basic.C.html而不是填充直方图制作图表。

答案 2 :(得分:0)

您可以使用上面显示的“CSV Contructor”或只是生成一个空的TGraph(或TGraphErrors),循环CSV文件并添加点。第一行/标题中给出一些常量错误条的示例:

    ifstream infile("input.csv");

    TGraphErrors *g1 = new TGraphErrors();
    g1->SetName("name_for_graph");
    g1->SetTitle("Title for your Graph;x values [x unit];y values [y unit]");

    Int_t pt=0, nv=0;
    Double_t e_vc=0.;
    Double_t vs=0., vc=0.;

    infile >> e_vs >> e_vc;

    while (1) {
            if(!infile.good()) break;

            infile >> vs >> vc;

            g1->SetPoint(pt, vs, vc);
            g1->SetPointError(pt, e_vs, e_vc);
            pt++;
    }
    infile.close();

...

    g1->Draw("APX");