我正在尝试从给定的特定文件中生成直方图,但我得到了以下错误:
Error in <TTree::SetBranchAddress>: The pointer type given "Double_t" (8) does not correspond to the type needed "vector<float>" by the branch: mu_phi我猜问题是,我试图加入的变量是以向量的形式存在的,但我不知道如何修正它。运行后的画布(无论是eta、phi、energy.)只要包含条目的数量、平均值和代表这一点的行,它们看起来都是一样的。
我是新来的,所以请容忍我。任何帮助都将不胜感激!
我的脚本(没有标题):
void script(){
TFile *file = TFile::Open("output_data.root");
TTree* tree = (TTree*)file->Get("nominal");
TChain* fchain = new TChain("nominal");
fchain->Add("output_data.root");
Double_t mu_pt, mu_e, mu_eta, mu_phi;
//set branches to variables
tree->SetBranchAddress("mu_pt", &mu_pt);
tree->SetBranchAddress("mu_e", &mu_e);
tree->SetBranchAddress("mu_eta", &mu_eta);
tree->SetBranchAddress("mu_phi", &mu_phi);
TH1D *muPt = new TH1D("muPt", ";p_{T} [GeV/c];Events", 100, 0., 200.);
TH1D *muEta = new TH1D("muEta", ";#eta;Events", 50, -3, 3);
TH1D *muE = new TH1D("muE", ";Energy;Events", 50, 0, 200);
TH1D *muPhi = new TH1D("muPhi", ";#phi;Events", 50, -4, 4);
TH1D *mass = new TH1D("mass", ";mass;Events", 50, 0, 200);
Long64_t nentries = fchain->GetEntries();
for (int i=0; i<nentries ; i++) {
Long64_t ientry = fchain->LoadTree(i);
if (ientry <0 ) break;
fchain->GetEntry(i);
muEta->Fill(mu_eta);
muPt->Fill(mu_pt);
muPhi->Fill(mu_phi);
muE->Fill(mu_e);
}
cout << "entries = " << nentries << endl;
TCanvas *c1 = new TCanvas("Eta","Eta",800 ,800);
c1->cd();
muEta->Draw();
}根版本: 6.26/10平台:未提供编译器:未提供
我尝试将Double_t转换为vector<float>,但这给我带来了更多的错误。
error: no matching member function for call to 'Fill'
muEta->Fill(mu_eta);
~~~~~~~^~~~
/snap/root-framework/838/usr/local/include/TH1.h:219:21: note: candidate function not viable: no known conversion from 'vector<float>' to 'Double_t' (aka 'double') for 1st argument
virtual Int_t Fill(Double_t x);
^
/snap/root-framework/838/usr/local/include/TH1.h:220:21: note: candidate function not viable: requires 2 arguments, but 1 was provided
virtual Int_t Fill(Double_t x, Double_t w);
^
/snap/root-framework/838/usr/local/include/TH1.h:221:21: note: candidate function not viable: requires 2 arguments, but 1 was provided
virtual Int_t Fill(const char *name, Double_t w);可能有一种不同的方法来解决整个问题,我就是找不到。
发布于 2022-11-23 18:27:21
看看这个参考指南,https://root.cern.ch/doc/master/classTTree.html
关于TTree::SetBranchAddress,下面是准备读取TTree不同类型分支的示例。请注意,SetBranchAddress将只将给定分支链接到特定的TTree对象;之后,为了读取给定TTree条目x的分支内容,必须调用TTree::GetEntry(x)。
https://stackoverflow.com/questions/74551275
复制相似问题