c++ 指针类型错误(ROOT CERN)

ax6ht2ek  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(93)

我尝试从提供给我的特定文件制作直方图,但我得到以下错误:

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、能量...)只包含条目数、平均值和代表它们的线条,它们看起来都一样。
我是新来的,请耐心等待。任何帮助都将不胜感激!
我的脚本(无标题):

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();

}
  • ROOT版本:* 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);

也许有一种不同的方法来解决整个问题,我只是找不到。

nkcskrwz

nkcskrwz1#

请参阅参考指南https://root.cern.ch/doc/master/classTTree.html
关于TTree::SetBranchAddress,下面是一个准备阅读不同类型的分支的例子。注意SetBranchAddress只会将一个给定的分支与某个Python对象链接起来;此后,为了读取给定TTree条目x的这种分支的内容,必须调用TTree::GetEntry(x)。

相关问题