Я пытаюсь прочитать TTREE из корневого файла и скопировать некоторые переменные в плоское дерево.
И это отлично работает для множества переменных (как для Recoe_numu и Recoe_nue в примере ниже), но когда он приходит к вектору какого -то пользовательского класса, я в конечном итоге в конечном итоге. /> Вот сокращенная версия моего кода, которая имеет одинаковое поведение: < /p>
#include
#include
#include
#include
#include
#include
#include "caf__SRTrack.h"
#include "caf__SRFDInt.h"
#include "caf__SRFD.h"
#include "caf__SRFDBranch.h"
using std::vector, std::cout, std::endl;
TFile *outFile = nullptr;
TTree *cafTree = nullptr, *outTree = nullptr;
template
void LinkBranches(const char* bname, const char* newbname, T *var){
cafTree->SetBranchAddress(bname,var);
outTree->Branch(newbname,var);
}
int main(int argc, const char *const argv[]){
outFile = new TFile("flatTree2.root","recreate");
TFile infile("caf_new_sum_weighted.root");
cafTree = (TTree*) infile.Get("cafTree");
outTree = new TTree("flatTree","flatTree");
outTree->SetDirectory(outFile);
Float_t recoE_numu; LinkBranches("common.ixn.pandora.Enu.lep_calo","recoE_numu",&recoE_numu);
Float_t recoE_nue; LinkBranches("common.ixn.pandora.Enu.e_calo","recoE_nue",&recoE_nue);
vector tracks; cafTree->SetBranchAddress("fd.hd.pandora.tracks",&tracks);
outTree->Branch("tracks",&tracks);
unsigned long ntracks; cafTree->SetBranchAddress("fd.hd.pandora.ntracks",&ntracks);
int cafEntries = 1000; // I test my code only on the first entries, so that it doesn't take too long
//int cafEntries = cafTree->GetEntries();
for (int i = 0; i < cafEntries; i++){
cafTree->GetEntry(i);
if ( i%100 == 0 ) {
cout vector tracks = {caf::SRTrack(), caf::SRTrack()}
< /code>
Но в результате я получаю постоянный вектор размера 2, а атрибуты 2 треков, которые он содержит, являются постоянными (независимыми от события) случайными значениями. Корень, кажется, просто не может переписать вектор. g ++
Подробнее здесь: [url]https://stackoverflow.com/questions/79768589/vectorsomeclass-read-from-ttree-is-void[/url]
Я пытаюсь прочитать TTREE из корневого файла и скопировать некоторые переменные в плоское дерево. И это отлично работает для множества переменных (как для Recoe_numu и Recoe_nue в примере ниже), но когда он приходит к вектору какого -то пользовательского класса, я в конечном итоге в конечном итоге. /> Вот сокращенная версия моего кода, которая имеет одинаковое поведение: < /p> [code]#include #include #include #include
vector tracks; cafTree->SetBranchAddress("fd.hd.pandora.tracks",&tracks); outTree->Branch("tracks",&tracks); unsigned long ntracks; cafTree->SetBranchAddress("fd.hd.pandora.ntracks",&ntracks);
int cafEntries = 1000; // I test my code only on the first entries, so that it doesn't take too long //int cafEntries = cafTree->GetEntries(); for (int i = 0; i < cafEntries; i++){ cafTree->GetEntry(i);
if ( i%100 == 0 ) { cout vector tracks = {caf::SRTrack(), caf::SRTrack()} < /code> Но в результате я получаю постоянный вектор размера 2, а атрибуты 2 треков, которые он содержит, являются постоянными (независимыми от события) случайными значениями. Корень, кажется, просто не может переписать вектор. g ++