CbmRoot
Loading...
Searching...
No Matches
CbmAnaTreeSource.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023-2023 Warsaw University of Technology, Warsaw
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Daniel Wielanek [committer] */
4#include "CbmAnaTreeSource.h"
5
7
8#include <FairLogger.h>
9#include <FairRootManager.h>
10
11#include <TBranch.h>
12#include <TChain.h>
13#include <TFile.h>
14
15#include <AnalysisTree/Configuration.hpp>
16#include <fstream>
17
18
20
21CbmAnaTreeSource::CbmAnaTreeSource(TString inFile, TString treeName)
22 : fNFiles(1)
23 , fTreeName(treeName)
24 , fChain(nullptr)
25 , fFileName(nullptr)
26 , fContainerReco(nullptr)
27 , fContainerSim(nullptr)
28{
29 fFileName = new TString[1];
30 fFileName[0] = inFile;
31}
32
37
39{
40 LOG(debug) << "Init source ";
41 FairRootManager* mngr = FairRootManager::Instance();
42 fChain = new TChain(fTreeName); //new name of tree?
43 TString first_file_name;
44 if (fFileName[0].EndsWith(".root")) {
45 for (int i = 0; i < fNFiles; i++) {
46 LOG(debug) << "CbmAnaTree: opening single file" << fFileName[i];
47 fChain->Add(fFileName[i]);
48 }
49 first_file_name = fFileName[0];
50 }
51 else { // this is long list
52 std::ifstream list;
53 list.open(fFileName[0]);
54 bool first = true;
55 do {
56 TString temp;
57 list >> temp;
58 if (temp.Length() > 1) {
59 fChain->Add(temp);
60 if (first) {
61 first_file_name = temp;
62 first = false;
63 }
64 }
65 else {
66 break;
67 }
68 LOG(debug) << "Adding file " << temp << " to chain";
69 } while (!list.eof());
70 list.close();
71 }
72 LOG(debug) << "load container ";
75 Bool_t recoAvail = fContainerReco->ConnectToTree(fChain);
76 Bool_t simAvail = fContainerSim->ConnectToTree(fChain);
77 if (recoAvail == kFALSE) {
78 delete fContainerReco;
79 fContainerReco = nullptr;
80 }
81 if (simAvail == kFALSE) {
82 delete fContainerSim;
83 fContainerSim = nullptr;
84 }
85 LOG(debug) << "load conf ";
86 LoadConf(first_file_name);
87 mngr->SetInChain(fChain, -1);
88 if (fContainerReco) {
89 LOG(debug) << "Loading reco data";
90 mngr->Register("CbmAnaTreeSourceContainer.", "CbmAnaTreeSourceContainer", fContainerReco, kFALSE);
91 }
92 if (fContainerSim) {
93 LOG(debug) << "Loading sim ana";
94 mngr->Register("CbmAnaTreeMcSourceContainer.", "CbmAnaTreeMcSourceContainer", fContainerSim, kFALSE);
95 }
96 return kTRUE;
97}
98
99Int_t CbmAnaTreeSource::ReadEvent(UInt_t unsignedInt)
100{
101 fChain->GetEntry(unsignedInt);
102 return 0;
103}
104
106
108{
110 TFile* oldFile = gFile;
111 TDirectory* oldDir = gDirectory;
112
113 if (fContainerReco) {
115 }
116 if (fContainerSim) {
118 }
119
121 gFile = oldFile;
122 gDirectory = oldDir;
123}
124
126{
127 TString* temp = fFileName;
128 fFileName = new TString[fNFiles + 1];
129 for (int i = 0; i < fNFiles; i++) {
130 fFileName[i] = temp[i];
131 }
132 delete[] temp;
133 fFileName[fNFiles] = file;
134 fNFiles = fNFiles + 1;
135}
136
137Int_t CbmAnaTreeSource::CheckMaxEventNo(Int_t /*int1*/) { return fChain->GetEntries(); }
bool first
CbmAnaTreeMcSourceContainer * fContainerSim
virtual void AddFile(TString file)
void LoadConf(TString name)
virtual Int_t CheckMaxEventNo(Int_t=0)
virtual Bool_t Init()
CbmAnaTreeRecoSourceContainer * fContainerReco
virtual Int_t ReadEvent(UInt_t=0)