本文整理汇总了C++中TFile::FindKeyAny方法的典型用法代码示例。如果您正苦于以下问题:C++ TFile::FindKeyAny方法的具体用法?C++ TFile::FindKeyAny怎么用?C++ TFile::FindKeyAny使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TFile
的用法示例。
在下文中一共展示了TFile::FindKeyAny方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addHists
//.........这里部分代码省略.........
// TFile *f = (*sourceList.begin())->getFile();
TFile *f = (*itSourceFile)->getFile();
// TTree *tree= (*sourceList.begin())->getTree();
TTree *tree= (*itSourceFile)->getTree();
int myLineColor = (*itSourceFile)->getLineColor();
int myLineStyle = (*itSourceFile)->getLineStyle();
TString myLegendName = (*itSourceFile)->getName();
if (!f || !tree) {
std::cout << "PlotAlignmentValidation::addHists: no tree or no file" << std::endl;
return 0;
}
// Todo: TLegend?
// first loop on tree to find out which entries (i.e. modules) fulfill the selection
// 'Entry$' gives the entry number in the tree
Long64_t nSel = tree->Draw("Entry$", selection, "goff");
if (nSel == -1) return 0; // error in selection
if (nSel == 0) {
std::cout << "PlotAlignmentValidation::addHists: no selected module." << std::endl;
return 0;
}
// copy entry numbers that fulfil the selection
const std::vector<double> selected(tree->GetV1(), tree->GetV1() + nSel);
TH1 *h = 0; // becomes result
UInt_t nEmpty = 0;// selected, but empty hists
Long64_t nentries = tree->GetEntriesFast();
std::vector<double>::const_iterator iterEnt = selected.begin();
// second loop on tree:
// for each selected entry get the hist from the file and merge
TkOffTreeVariables *treeMem = 0; // ROOT will initialise
tree->SetBranchAddress("TkOffTreeVariables", &treeMem);
for (Long64_t i = 0; i < nentries; i++){
if (i < *iterEnt - 0.1 // smaller index (with tolerance): skip
|| iterEnt == selected.end()) { // at the end: skip
continue;
} else if (TMath::Abs(i - *iterEnt) < 0.11) {
++iterEnt; // take this entry!
} else std::cout << "Must not happen: " << i << " " << *iterEnt << std::endl;
tree->GetEntry(i);
if (printModuleIds) {
std::cout << treeMem->moduleId << ": " << treeMem->entries << " entries" << std::endl;
}
if (treeMem->entries <= 0) { // little speed up: skip empty hists
++nEmpty;
continue;
}
TString hName;
switch(rType) {
case xPrimeRes: hName = treeMem->histNameX.c_str(); break;
case yPrimeRes: hName = treeMem->histNameY.c_str(); break;
case xPrimeNormRes: hName = treeMem->histNameNormX.c_str(); break;
case yPrimeNormRes: hName = treeMem->histNameNormY.c_str(); break;
case xRes: hName = treeMem->histNameLocalX.c_str(); break;
case yRes: hName = treeMem->histNameLocalY.c_str(); break;
case xNormRes: hName = treeMem->histNameNormLocalX.c_str(); break;
/*case yResNorm: hName = treeMem->histNameNormLocalY.c_str(); break;*/
case ResXvsXProfile: hName = treeMem->profileNameResXvsX.c_str(); break;
case ResXvsYProfile: hName = treeMem->profileNameResXvsY.c_str(); break;
case ResYvsXProfile: hName = treeMem->profileNameResYvsX.c_str(); break;
case ResYvsYProfile: hName = treeMem->profileNameResYvsY.c_str(); break;
}
TKey *histKey = f->FindKeyAny(hName);
TH1 *newHist = (histKey ? static_cast<TH1*>(histKey->ReadObj()) : 0);
if (!newHist) {
std::cout << "Hist " << hName << " not found in file, break loop." << std::endl;
break;
}
newHist->SetLineColor(myLineColor);
newHist->SetLineStyle(myLineStyle);
if (!h) { // first hist: clone, but rename keeping only first part of name
TString name(newHist->GetName());
Ssiz_t pos_ = 0;
for (UInt_t i2 = 0; i2 < 3; ++i2) pos_ = name.Index("_", pos_+1);
name = name(0, pos_); // only up to three '_'
h = static_cast<TH1*>(newHist->Clone("summed_"+name));
// TString myTitle = Form("%s: %lld modules", selection, nSel);
// h->SetTitle( myTitle );
} else { // otherwise just add
h->Add(newHist);
}
delete newHist;
}
std::cout << "PlotAlignmentValidation::addHists" << "Result is merged from " << nSel-nEmpty
<< " modules, " << nEmpty << " hists were empty." << std::endl;
if (nSel-nEmpty == 0) continue;
myLegend->AddEntry(myLegendName, myLegendName, "L");
retHistoStack->Add(h);
}
myLegend->Draw();
return retHistoStack;
}