首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针类型错误(根CERN)

指针类型错误(根CERN)
EN

Stack Overflow用户
提问于 2022-11-23 18:05:48
回答 1查看 45关注 0票数 0

我正在尝试从给定的特定文件中生成直方图,但我得到了以下错误:

代码语言:javascript
复制
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.)只要包含条目的数量、平均值和代表这一点的行,它们看起来都是一样的。

我是新来的,所以请容忍我。任何帮助都将不胜感激!

我的脚本(没有标题):

代码语言:javascript
复制
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>,但这给我带来了更多的错误。

代码语言:javascript
复制
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);

可能有一种不同的方法来解决整个问题,我就是找不到。

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 18:27:21

看看这个参考指南,https://root.cern.ch/doc/master/classTTree.html

关于TTree::SetBranchAddress,下面是准备读取TTree不同类型分支的示例。请注意,SetBranchAddress将只将给定分支链接到特定的TTree对象;之后,为了读取给定TTree条目x的分支内容,必须调用TTree::GetEntry(x)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74551275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档