class Buggy { protected: TChain* fInChain = {nullptr}; virtual Bool_t InitInternal(); public: Buggy(TChain* chain) { fInChain = chain; } Bool_t Init() { InitInternal(); return true; }; virtual void UpdateBranches(); virtual ~Buggy(); ClassDef(Buggy, 1) }; void Buggy::UpdateBranches() { fInChain->GetEntry(0); TObjArray* list_branch = fInChain->GetListOfBranches(); std::vector brnames; std::vector classname; std::vector tobjects; for (int i = 0; i < list_branch->GetEntries(); i++) { TBranchElement* branch = (TBranchElement*) list_branch->At(i); TString name = branch->GetName(); TString classStored = branch->GetClassName(); TClass* cl = TClass::GetClass(classStored); Bool_t tobj = kFALSE; if (cl) { if (cl->InheritsFrom("TObject")) { tobj = kTRUE; } } brnames.push_back(name); classname.push_back(classStored); tobjects.push_back(tobj); } #ifdef BUGTEST AnalysisTree::EventHeader* pointer = new AnalysisTree::EventHeader(); if (fInChain->GetBranch("SimEventHeader.")) fInChain->SetBranchAddress("SimEventHeader.", &pointer); AnalysisTree::EventHeader* pointer2 = new AnalysisTree::EventHeader(); if (fInChain->GetBranch("RecEventHeader.")) fInChain->SetBranchAddress("RecEventHeader.", &pointer2); AnalysisTree::Detector* pointer3 = nullptr; if (fInChain->GetBranch("SimParticles.")) fInChain->SetBranchAddress("SimParticles.", &pointer3); AnalysisTree::Detector* pointer4 = nullptr; //new AnalysisTree::Detector; fInChain->SetBranchAddress("VtxTracks.", &pointer4); #else for (int i = 0; i < brnames.size(); i++) { TString strx = classname[i]; if (tobjects[i]) { } else { if (strx.EqualTo("AnalysisTree::EventHeader")) { AnalysisTree::EventHeader* pointer = new AnalysisTree::EventHeader(); fInChain->SetBranchAddress(brnames[i], &pointer); std::cout<<"Connecting "<Class_Name()<<" to " <")) { AnalysisTree::Detector* pointer = new AnalysisTree::Detector; fInChain->SetBranchAddress("VtxTracks.", &pointer); std::cout<<"Connecting "<Class_Name()<<" to " <")) { AnalysisTree::Detector* pointer = new AnalysisTree::Detector; fInChain->SetBranchAddress("SimParticles.", &pointer); std::cout<<"Connecting "<Class_Name()<<" to " <GetEntry(i); std::cout << "GOT" << std::endl; } /* for (auto branch : fBranches) { std::cout << branch.GetBranchName() << std::endl; }*/ } Buggy::~Buggy() {} Bool_t Buggy::InitInternal() { UpdateBranches(); return true; } void macro(){ TChain* chain = new TChain("rTree"); chain->AddFile("1.analysistree.root"); //chain->AddFile("../raw/2.analysistree.root"); // auto io = new IoTest::HalCbmRootIOManager(input); auto io = new Buggy(chain); io->Init(); }