И это работает очень хорошо для многих переменных (как и для Ntracks в примере ниже), но когда дело доходит до вектора какого -то пользовательского класса, я в конечном итоге с пустыми векторами, что у корне. То же поведение: < /p>
Код: Выделить всё
#include
#include
#include
#include
#include
#include "caf__SRTrack.h"
TFile *outFile = nullptr;
TTree *inTree = nullptr, *outTree = nullptr;
int main(int argc, const char *const argv[]){
outFile = new TFile("/home/raphael/Bureau/travail/stage_apc/code/mini_flatTree.root","recreate");
TFile infile("/home/raphael/Bureau/travail/stage_apc/code/caf_new_sum_weighted.root");
inTree = (TTree*) infile.Get("cafTree");
outTree = new TTree("flatTree","flatTree");
outTree->SetDirectory(outFile);
std::vector tracks;
inTree->SetBranchAddress("fd.hd.pandora.tracks",&tracks);
outTree->Branch("tracks",&tracks);
unsigned long ntracks;
inTree->SetBranchAddress("fd.hd.pandora.ntracks",&ntracks);
outTree->Branch("ntracks",&ntracks);
for (int i = 0, cafEntries = 20; i < cafEntries; i++){
inTree->GetEntry(i);
std::cout
И результат, который я получаю, это: < /p>
Warning in : No streamer element for branch: nd.trkmatch.extrap subbranch: nd.trkmatch.extrap.minervaid.ixn
Warning in : No streamer element for branch: nd.trkmatch.extrap subbranch: nd.trkmatch.extrap.minervaid.idx
Warning in : No streamer element for branch: nd.shwmatch.extrap subbranch: nd.shwmatch.extrap.minervaid.ixn
Warning in : No streamer element for branch: nd.shwmatch.extrap subbranch: nd.shwmatch.extrap.minervaid.idx
size of vector `tracks` : 0 ; ntracks : 2
size of vector `tracks` : 0 ; ntracks : 3
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 4
size of vector `tracks` : 0 ; ntracks : 4
size of vector `tracks` : 0 ; ntracks : 4
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 3
size of vector `tracks` : 0 ; ntracks : 3
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 3
size of vector `tracks` : 0 ; ntracks : 8
size of vector `tracks` : 0 ; ntracks : 8
size of vector `tracks` : 0 ; ntracks : 8
size of vector `tracks` : 0 ; ntracks : 8
size of vector `tracks` : 0 ; ntracks : 3
size of vector `tracks` : 0 ; ntracks : 1
size of vector `tracks` : 0 ; ntracks : 1
Код: Выделить всё
TFile f("caf_new_sum_weighted.root")
f.MakeProject("includesCAF","*","update+")
< /code>
У вас есть представление о том, в чем проблема?#pragma link C++ class std::vector+;
< /code>
Но в результате я получаю постоянный вектор размера 2, а атрибуты 2 треков, которые он содержит, являются постоянными (независимыми от события) случайными значениями. Корень, кажется, просто не может переписать вектор. g ++
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-is-empty
Мобильная версия