0
我創建了一個腳本,從文本文件中獲取數據並將其繪製在根(CERN)中,但在大約一年時間內沒有使用root,更新爲當前版本的Root,現在它獲取錯誤「錯誤:函數readprn()沒有在當前範圍中定義:0: *解釋器錯誤恢復*」當我嘗試使用它與根。閱讀數據文件的根cern圖
它運行一個excel數據文件,我保存爲一個txt文件。第一列是後續768列中每個y值對應的x值。最後,它繪製並擬合併在幾張圖上循環。
我最想知道的是,如果在新版本中有任何東西會導致它無法被root讀取。
#include <TGraph.h>
#include <TCanvas.h>
#include <TF1.h>
#include <TMath.h>
#include <TStyle.h>
#include <iostream>
#include <fstream>
#include <string>
using std::cout; using std::endl;
int threshold1(Int_t channel=0)
{
const char* ifname = "thresholdScanRun110FPGA4.txt";
cout<< "processing file " << ifname <<endl;
std::ifstream ifile(ifname);
if (!ifile) {
cout<< "Could not find file " << ifname <<endl;
return 0;
}
//std::string line;
// discard the first two lines
//std::getline(ifile, line);
//cout<< line <<endl;
//std::getline(ifile, line);
//cout<< line <<endl;
std::string str;
double number;
// read the first row (in sense of Exel's row)
ifile >> str;
//cout<< str <<endl;
for (int i=0; i<768; ++i) {
ifile >> number;
//cout<< number << " ";
}
//cout<<endl;
// read the second "row"
ifile >> str;
//cout<< str <<endl;
for (int i=0; i<768; ++i) {
ifile >> number;
//cout<< number << " ";
}
//cout<<endl;
double thres[60];
double prob[60][768];
int nthres_max = 60;
for (int ithres=0; ithres<nthres_max; ++ithres) {
ifile >> thres[ithres];
for (int iprob=0; iprob<768; ++iprob) ifile >> prob[ithres][iprob];
}
cout<< "The channel " << channel <<endl;
for (int ithres=0; ithres<60; ++ithres) {
cout<< thres[ithres] << " " << prob[ithres][channel] <<endl;
}
Double_t probability[60];
for (int ithres=0; ithres<60; ++ithres) probability[ithres] = prob[ithres][channel];
TGraph* gr = new TGraph(60, thres, probability);
gr->SetMarkerStyle(29);
gr->SetMarkerColor(4);
gr->SetTitle("Threshold Scan ChipX, ChanY");
TF1* ferfc = new TF1("ferfc", "0.5*TMath::Erfc((x-[0])/[1])", 0, 767);
ferfc->SetParameters(100,10);
new TCanvas;
gStyle->SetOptFit(1);
gr->Draw("apl");
gr->Fit("ferfc");
return 0;
}
int threshold_all()
{
for (Int_t channel=0; channel<2; ++channel) {
threshold1(channel);
}
}
我認爲你需要C++標籤。 – Michi
「收到解釋器錯誤」可能意味着您只是在不編譯它的情況下運行此腳本。你編譯過了嗎?如果沒有,請在ROOT外編譯。 ROOT最近從v5變成了v6,而CINT解釋器已經被替換爲保持(no,not clang),這對於它允許的限制更多。也就是說,用gcc或clang編譯它並在ROOT之外運行。它應該告訴你發生了什麼事。 – KyleKnoepfel