本文整理汇总了C++中TChain::GetListOfLeaves方法的典型用法代码示例。如果您正苦于以下问题:C++ TChain::GetListOfLeaves方法的具体用法?C++ TChain::GetListOfLeaves怎么用?C++ TChain::GetListOfLeaves使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TChain
的用法示例。
在下文中一共展示了TChain::GetListOfLeaves方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main (int argc, char** argv)
{
gROOT->ProcessLine("#include <vector>");
//TFile* f1 = new TFile(argv[1]);
TChain *tree = new TChain("tree");
for (int i = 1 ; i < argc ; i++)
{
std::cout << "Adding file " << argv[i] << std::endl;
tree->Add(argv[i]);
}
//play with input names
// std::string inputFileName =
// find the number of channels directly from the tchain file
// before creating the variables
// first, get the list of leaves
TObjArray *leavescopy = tree->GetListOfLeaves();
int nLeaves = leavescopy->GetEntries();
std::vector<std::string> leavesName;
// fill a vector with the leaves names
// std::cout << nLeaves << std::endl;
for(int i = 0 ; i < nLeaves ; i++)
{
// std::cout << i << std::endl;
leavesName.push_back(leavescopy->At(i)->GetName());
}
// count the entries that start with "ch"
int numOfCh = 0;
int numOfCry = 0;
std::string det_prefix("detector");
std::string cry_prefix("cry");
for(int i = 0 ; i < nLeaves ; i++)
{
// leavesName.push_back(leavescopy->At(i)->GetName());
if (!leavesName[i].compare(0, det_prefix.size(), det_prefix))
numOfCh++;
if (!leavesName[i].compare(0, cry_prefix.size(), cry_prefix))
numOfCry++;
}
//the string "cry" appears 4 times per crystal..
numOfCry = numOfCry / 4;
std::cout << numOfCh << std::endl;
std::cout << numOfCry << std::endl;
Long64_t Seed;
int Run;
int Event;
float totalEnergyDeposited;
int NumOptPhotons;
int NumCherenkovPhotons;
std::vector<float> *CryEnergyDeposited;
std::vector<float> **pCryEnergyDeposited;
std::vector<float> *PosXEnDep;
std::vector<float> **pPosXEnDep;
std::vector<float> *PosYEnDep;
std::vector<float> **pPosYEnDep;
std::vector<float> *PosZEnDep;
std::vector<float> **pPosZEnDep;
// DetectorHit = new Short_t [numOfCh];
CryEnergyDeposited = new std::vector<float> [numOfCry];
pCryEnergyDeposited = new std::vector<float>* [numOfCry];
PosXEnDep = new std::vector<float> [numOfCry];
pPosXEnDep = new std::vector<float>* [numOfCry];
PosYEnDep = new std::vector<float> [numOfCry];
pPosYEnDep = new std::vector<float>* [numOfCry];
PosZEnDep = new std::vector<float> [numOfCry];
pPosZEnDep = new std::vector<float>* [numOfCry];
// short RunDetectorHit[16];
std::vector<float> **pEdep;
std::vector<float> **px;
std::vector<float> **py;
std::vector<float> **pz;
pEdep = new std::vector<float>* [numOfCry];
px = new std::vector<float>* [numOfCry];
py = new std::vector<float>* [numOfCry];
pz = new std::vector<float>* [numOfCry];
for (int i = 0 ; i < numOfCry ; i++)
{
pEdep[i] = 0;
px[i] = 0;
py[i] = 0;
pz[i] = 0;
}
Short_t *detector;
detector = new Short_t [numOfCh];
//.........这里部分代码省略.........
示例2: plotter
void plotter(const char* datafilename, const char* mcfilename, const char *idmvaCorrectionFile = NULL) {
// READ Transformations
std::vector<TGraph*> graphs;
if (idmvaCorrectionFile != NULL) readTransformations(graphs);
//readTransformations(graphs, idmvaCorrectionFile);
//std::vector<TGraph*> graphs;
//readTransformations(graphs);
// READ SAMPLES
ifstream myReadFile;
myReadFile.open("inputfiles.dat");
char output[100];
int itype = -1;
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
float xsec;
myReadFile >> output >> xsec >> itype;
std::string init(output);
if (init.substr(0,1) != "#") {
samples.push_back(std::pair<std::string, int>(output, itype));
//std::cout << output << " " << itype << std::endl;
}
}
}
myReadFile.close();
std::cout<< "Debug level 1" << std::endl;
//std::string weight = "weight";
for (int sampletype=0; sampletype<2; sampletype++) {
TChain* chain = new TChain("PhotonToRECO/fitter_tree");
if (sampletype == 0)
chain->Add(datafilename);
else
chain->Add(mcfilename);
TBranchesI branchesI;
TBranchesF branchesF;
TBranchesD branchesD;
TBranchesUI branchesUI;
TBranchesUC branchesUC;
auto leafList = chain->GetListOfLeaves();
for (auto leaf : *leafList) {
std::string name =((TLeaf*)leaf)->GetName();
std::string type = ((TLeaf*)leaf)->GetTypeName();
std::cout << name << type << endl;
if (type == "Int_t") {
Int_t a = 0;
branchesI[name] = a;
chain->SetBranchAddress(name.c_str(), &(branchesI[name]));
} else if (type == "Float_t") {
Float_t a = 0;
branchesF[name] = a;
chain->SetBranchAddress(name.c_str(), &(branchesF[name]));
} else if (type == "Double_t") {
Double_t a = 0;
branchesD[name] = a;
chain->SetBranchAddress(name.c_str(), &(branchesD[name]));
} else if (type == "UInt_t") {
UInt_t a = 0;
branchesUI[name] = a;
chain->SetBranchAddress(name.c_str(), &(branchesUI[name]));
} else if (type == "UChar_t") {
UChar_t a = 0;
branchesUC[name] = a;
chain->SetBranchAddress(name.c_str(), &(branchesUC[name]));
}
//std::cout<< "Debug level 1.1" << std::endl;
}
//std::cout<< "Debug level 2" << std::endl;
std::map<int, std::vector<TTreeFormula*> > categories;
std::cout << "Reading categories...." << std::endl;
myReadFile.open("categories.dat");
std::string line;
int cat;
while(!myReadFile.eof()) {
myReadFile >> cat >> line;
char a[100];
if (categories.find(cat) == categories.end() ) {
sprintf(a, "cat%d_%d", cat, 0);
std::cout << a << " " << line << std::endl;
categories[cat].push_back(new TTreeFormula(a, line.c_str(), chain));
} else {
sprintf(a, "cat%d_%zu", cat, categories[cat].size());
std::cout << a << " " << line << std::endl;
categories[cat].push_back(new TTreeFormula(a, line.c_str(), chain));
}
}
myReadFile.close();
//std::cout<< "Debug level 3" << std::endl;
std::vector<HistoDefinition> histoDef;
// READING PLOT DEFINITION
//.........这里部分代码省略.........
示例3: main
int main (int argc, char** argv)
{
gROOT->ProcessLine("#include <vector>"); //needed by ROOT to deal with standard vectors
//HACK to use the dictionary easily
std::string fullFileName = "";
// Code taken from: http://www.gamedev.net/community/forums/topic.asp?topic_id=459511
std::string path = "";
pid_t pid = getpid();
char buf[20] = {0};
sprintf(buf,"%d",pid);
std::string _link = "/proc/";
_link.append( buf );
_link.append( "/exe");
char proc[512];
int ch = readlink(_link.c_str(),proc,512);
if (ch != -1) {
proc[ch] = 0;
path = proc;
std::string::size_type t = path.find_last_of("/");
path = path.substr(0,t);
}
fullFileName = path + std::string("/");
//now even worse, assuming the executable is in build and the .C macro in code
// std::string command = ".L " + fullFileName.substr(0,fullFileName.size()-7) + "/code/structDictionary.C+";
std::string command = ".L " + fullFileName + "structDictionary.C+";
// std::cout << fullFileName << std::endl;
// std::cout << "command " << command << std::endl;
gROOT->ProcessLine(command.c_str());
//-------------------
// Input Files
//-------------------
TChain *tree = new TChain("tree"); // read input files
for (int i = 1 ; i < argc ; i++)
{
std::cout << "Adding file " << argv[i] << std::endl;
tree->Add(argv[i]);
}
// find the number of channels directly from the tchain file
// before creating the variables
// first, get the list of leaves
TObjArray *leavescopy = tree->GetListOfLeaves();
int nLeaves = leavescopy->GetEntries();
std::vector<std::string> leavesName;
// fill a vector with the leaves names
for(int i = 0 ; i < nLeaves ; i++)
{
leavesName.push_back(leavescopy->At(i)->GetName());
}
// count the entries that start with "ch"
int numOfCh = 0;
// int numOfCry = 0;
std::string det_prefix("detector");
// std::string cry_prefix("cry");
for(int i = 0 ; i < nLeaves ; i++)
{
// leavesName.push_back(leavescopy->At(i)->GetName());
if (!leavesName[i].compare(0, det_prefix.size(), det_prefix))
numOfCh++;
// if (!leavesName[i].compare(0, cry_prefix.size(), cry_prefix))
// numOfCry++;
}
//the string "cry" appears 4 times per crystal..
// numOfCry = numOfCry / 4;
std::cout << "Detector Channels \t= " << numOfCh << std::endl;
// std::cout << "Number of Crystals \t= "<< numOfCry << std::endl;
//------------------
// Input TTree
//------------------
//create the branches in the input ttree and connect to the variables
// global variables
// these are 1 number per TTree entry - so 1 number per gamma shot
Long64_t Seed; // seed of the simulation (read every time, but always the same)
int Run; // run id (usually just 1)(read every time, but always the same)
int Event; // event id
float totalEnergyDeposited; // total energy deposited in this event, in all the matrix
int NumOptPhotons; // number of optical photons generated in this event, in the entire matrix
int NumCherenkovPhotons; // number of Cherenkov photons generated in this event, in the entire matrix
// energy deposition, each gamma 511 event has a std::vector of struct (type enDep) with all the data of each energy deposition
std::vector<enDep> *energyDeposition = 0;
// Total number of photons detected in this event
// for each TTree entry, a simple number saying how many optical photons entered that
// specific detector, passed the PDE check and where "detected" (i.e. saved)
Short_t *detector;
detector = new Short_t [numOfCh];
// optical photons. for each gamma 511 event, every optical photon detected is a struct of type optPhot. a std::vector<optPhot> is saved for each gamma 511
std::vector<optPhot> *photons = 0;
//------------------------
// Set Branch Addresses
//------------------------
//.........这里部分代码省略.........
示例4: main
int main (int argc, char** argv)
{
gROOT->ProcessLine("#include <vector>"); //needed by ROOT to deal with standard vectors
//HACK to use the dictionary easily
std::string fullFileName = "";
// Code taken from: http://www.gamedev.net/community/forums/topic.asp?topic_id=459511
std::string path = "";
pid_t pid = getpid();
char buf[20] = {0};
sprintf(buf,"%d",pid);
std::string _link = "/proc/";
_link.append( buf );
_link.append( "/exe");
char proc[512];
int ch = readlink(_link.c_str(),proc,512);
if (ch != -1) {
proc[ch] = 0;
path = proc;
std::string::size_type t = path.find_last_of("/");
path = path.substr(0,t);
}
fullFileName = path + std::string("/");
//now even worse, assuming the executable is in build and the .C macro in code
// std::string command = ".L " + fullFileName.substr(0,fullFileName.size()-7) + "/code/structDictionary.C+";
std::string command = ".L " + fullFileName + "structDictionary.C+";
// std::cout << fullFileName << std::endl;
// std::cout << "command " << command << std::endl;
gROOT->ProcessLine(command.c_str());
//-------------------
// Input Files
//-------------------
TChain *tree = new TChain("tree"); // read input files
for (int i = 1 ; i < argc ; i++)
{
std::cout << "Adding file " << argv[i] << std::endl;
tree->Add(argv[i]);
}
// find the number of channels directly from the tchain file
// before creating the variables
// first, get the list of leaves
TObjArray *leavescopy = tree->GetListOfLeaves();
int nLeaves = leavescopy->GetEntries();
std::vector<std::string> leavesName;
// fill a vector with the leaves names
for(int i = 0 ; i < nLeaves ; i++)
{
leavesName.push_back(leavescopy->At(i)->GetName());
}
// count the entries that start with "ch"
int numOfCh = 0;
// int numOfCry = 0;
std::string det_prefix("detector");
// std::string cry_prefix("cry");
for(int i = 0 ; i < nLeaves ; i++)
{
// leavesName.push_back(leavescopy->At(i)->GetName());
if (!leavesName[i].compare(0, det_prefix.size(), det_prefix))
numOfCh++;
// if (!leavesName[i].compare(0, cry_prefix.size(), cry_prefix))
// numOfCry++;
}
//the string "cry" appears 4 times per crystal..
// numOfCry = numOfCry / 4;
std::cout << "Detector Channels \t= " << numOfCh << std::endl;
// std::cout << "Number of Crystals \t= "<< numOfCry << std::endl;
//------------------
// Input TTree
//------------------
//create the branches in the input ttree and connect to the variables
// global variables
// these are 1 number per TTree entry - so 1 number per gamma shot
Long64_t Seed; // seed of the simulation (read every time, but always the same)
int Run; // run id (usually just 1)(read every time, but always the same)
int Event; // event id
float totalEnergyDeposited; // total energy deposited in this event, in all the matrix
int NumOptPhotons; // number of optical photons generated in this event, in the entire matrix
int NumCherenkovPhotons; // number of Cherenkov photons generated in this event, in the entire matrix
// energy deposition, each gamma 511 event has a std::vector of struct (type enDep) with all the data of each energy deposition
std::vector<enDep> *energyDeposition = 0;
// Total number of photons detected in this event
// for each TTree entry, a simple number saying how many optical photons entered that
// specific detector, passed the PDE check and where "detected" (i.e. saved)
Short_t *detector;
detector = new Short_t [numOfCh];
// optical photons. for each gamma 511 event, every optical photon detected is a struct of type optPhot. a std::vector<optPhot> is saved for each gamma 511
std::vector<optPhot> *photons = 0;
//------------------------
// Set Branch Addresses
//------------------------
//.........这里部分代码省略.........