REST-for-Physics  v2.3
Rare Event Searches ToolKit for Physics
TRestRun.h
1
2#ifndef RestCore_TRestRun
3#define RestCore_TRestRun
4
5#define REST_MAXIMUM_EVENTS 2E9
6
7#include <TFile.h>
8#include <TFileMerger.h>
9#include <TKey.h>
10
11#include "TRestAnalysisTree.h"
12#include "TRestEvent.h"
13#include "TRestMetadata.h"
14
16
18class TRestRun : public TRestMetadata {
19 protected:
20 // run info
21 Int_t fRunNumber; //< first identification number
24 TString fRunClassName;
25 TString fRunType; //< Stores bit by bit the type of run. e.g. calibration, background, pedestal,
26 // simulation, data taking
27 TString fRunUser; //< To identify the author it has created the run. It might be also a word describing
28 // the origin of the run (I.e. REST_Prototype, T-REX, etc)
29 TString fRunTag; //< A tag to be written to the output file
30 TString fRunDescription; //< A word or sentence describing the run (I.e. Fe55 calibration, cosmics, etc)
31 TString fExperimentName;
32
33 // program data
34 TString fInputFileName;
35 TString fOutputFileName;
36 Double_t fStartTime;
37 Double_t fEndTime;
38 Int_t fEntriesSaved;
39 Int_t fNFilesSplit; // Number of files being split. Used when retrieving
40
41 // data-like metadata objects
42 std::vector<TRestMetadata*> fMetadata;
43 std::vector<TRestMetadata*> fInputMetadata;
44
45 // temp data members
46 std::vector<TString> fInputFileNames;
47 TFile* fInputFile;
48 TFile* fOutputFile;
49 TRestEvent* fInputEvent;
50 TTree* fEventTree;
51 TRestAnalysisTree* fAnalysisTree;
52 bool fOverwrite;
53 bool fSaveHistoricData;
54 TRestEventProcess* fFileProcess;
55 int fCurrentEvent;
56 Long64_t fBytesRead;
57 Long64_t fTotalBytes;
58 int fEventBranchLoc;
59 int fEventIndexCounter = 0;
60 bool fHangUpEndFile = false;
61 bool fFromRML = false;
62
63 void InitFromConfigFile() override;
64
65 private:
66 std::string ReplaceMetadataMember(const std::string& instr, Int_t precision = 0);
67
68 public:
70 void Initialize() override;
71
72 // file operation
73 void OpenInputFile(int i);
74 void OpenInputFile(const TString& filename, const std::string& mode = "");
75 void AddInputFileExternal(const std::string& file);
76 void ReadFileInfo(const std::string& filename);
77 void ReadInputFileMetadata();
78 void ReadInputFileTrees();
79
80 void ResetEntry();
81
82 Int_t GetNextEvent(TRestEvent* targetEvent, TRestAnalysisTree* targetTree);
83
84 void GetEntry(Long64_t entry);
85
86 void GetNextEntry() {
87 if (fCurrentEvent + 1 >= GetEntries()) {
88 fCurrentEvent = -1;
89 }
90 GetEntry(fCurrentEvent + 1);
91 }
92
93 TString FormFormat(const TString& FilenameFormat);
94 TFile* MergeToOutputFile(std::vector<std::string> filefullnames, std::string outputfilename = "");
95 TFile* FormOutputFile();
96 TFile* UpdateOutputFile();
97
98 void PassOutputFile() {
99 fOutputFile = fInputFile;
100 fOutputFileName = fOutputFile->GetName();
101 }
102
103 void WriteWithDataBase();
104
105 void CloseFile();
106
107 void ImportMetadata(const TString& rootFile, const TString& name, const TString& type, Bool_t store);
108
110 inline void AddMetadata(TRestMetadata* meta) {
111 if (meta != nullptr) {
112 fMetadata.push_back(meta);
113 } else {
114 RESTWarning << "REST Warning! A null metadata wants to be added in TRestRun!" << RESTendl;
115 }
116 }
117 void AddEventBranch(TRestEvent* event);
118 void SkipEventTree() {}
119
120 void cd() {
121 if (fInputFile != nullptr) fInputFile->cd();
122 }
123
124 // Getters
125 inline Int_t GetParentRunNumber() const { return fParentRunNumber; }
126 inline Int_t GetSubRunNumber() const { return fParentRunNumber; }
127 inline Int_t GetRunNumber() const { return fRunNumber; }
128 inline TString GetRunType() const { return fRunType; }
129 inline TString GetRunUser() const { return fRunUser; }
130 inline TString GetRunTag() const { return fRunTag; }
131 inline TString GetRunDescription() const { return fRunDescription; }
132 Double_t GetRunLength() const;
133 inline Double_t GetStartTimestamp() const { return fStartTime; }
134 inline Double_t GetEndTimestamp() const { return fEndTime; }
135 inline TString GetExperimentName() const { return fExperimentName; }
136
137 inline std::vector<TString> GetInputFileNames() const { return fInputFileNames; }
138 inline std::string GetInputFileName(unsigned int i) const {
139 return i < fInputFileNames.size() ? (std::string)fInputFileNames[i] : "";
140 }
141 inline std::string GetInputFileNamePattern() const { return fInputFileName.Data(); }
142 inline TString GetOutputFileName() const { return fOutputFileName; }
143 inline TFile* GetInputFile() const { return fInputFile; }
144 inline TFile* GetOutputFile() const { return fOutputFile; }
145 inline int GetCurrentEntry() const { return fCurrentEvent; }
146 inline Long64_t GetBytesReaded() const { return fBytesRead; }
147 Long64_t GetTotalBytes();
148 Long64_t GetEntries() const;
149
151 inline TRestEvent* GetInputEvent() const { return fInputEvent; }
153 template <class T>
154 inline T* GetInputEvent() {
155 return static_cast<T*>(fInputEvent);
156 }
157
158 TRestEvent* GetEventWithID(Int_t eventID, Int_t subEventID = -1, const TString& tag = "");
159 std::vector<int> GetEventEntriesWithConditions(const std::string&, int startingIndex = 0,
160 int maxNumber = -1);
161 std::vector<int> GetEventIdsWithConditions(const std::string&, int startingIndex = 0, int maxNumber = -1);
162 TRestEvent* GetNextEventWithConditions(const std::string&);
163 inline TRestEventProcess* GetFileProcess() const { return fFileProcess; }
164 std::string GetRunInformation(const std::string& info);
165 inline Int_t GetObservableID(const std::string& name) { return fAnalysisTree->GetObservableID(name); }
166 inline Bool_t ObservableExists(const std::string& name) { return fAnalysisTree->ObservableExists(name); }
167 inline TString GetInputEventName() const { return fInputEvent->ClassName(); }
168 inline TRestAnalysisTree* GetAnalysisTree() const { return fAnalysisTree; }
169 inline TTree* GetEventTree() const { return fEventTree; }
170 inline Int_t GetInputFileNumber() const { return fFileProcess == nullptr ? fInputFileNames.size() : 1; }
171
172 std::vector<std::string> GetEventTypesList();
173
174 TRestMetadata* GetMetadata(const TString& name, TFile* file = nullptr);
175 TRestMetadata* GetMetadataClass(const TString& type, TFile* file = nullptr);
176 std::vector<std::string> GetMetadataNames();
177 std::vector<std::string> GetMetadataTitles();
178 inline int GetNumberOfMetadata() const { return fMetadata.size(); }
179
180 inline std::string GetMetadataMember(const std::string& instr) { return ReplaceMetadataMember(instr); }
181 std::string ReplaceMetadataMembers(const std::string& instr, Int_t precision = 8);
182
183 Bool_t EvaluateMetadataMember(const std::string& instr);
184
185 // Setters
186 inline void SetInputFileName(const std::string& s) {
187 fInputFileName = s;
188 fInputFileNames = Vector_cast<std::string, TString>(
189 TRestTools::GetFilesMatchingPattern((std::string)fInputFileName));
190 }
191 inline void SetOutputFileName(const std::string& s) { fOutputFileName = s; }
193 inline void SetCurrentEntry(int i) { fCurrentEvent = i; }
194 // void AddFileTask(TRestFileTask* t) { fFileTasks.push_back(t); }
195 void SetInputEvent(TRestEvent* event);
196 inline void SetRunNumber(Int_t number) { fRunNumber = number; }
197 inline void SetParentRunNumber(Int_t number) { fParentRunNumber = number; }
198 inline void SetRunType(const TString& type) {
199 std::string cleanType = RemoveWhiteSpaces((std::string)type);
200 fRunType = (TString)cleanType;
201 }
202 inline void SetRunTag(const TString& tag) {
203 std::string cleanTag = RemoveWhiteSpaces((std::string)tag);
204 fRunTag = (TString)cleanTag;
205 }
206 inline void SetRunUser(const TString& user) {
207 std::string cleanUser = RemoveWhiteSpaces((std::string)user);
208 fRunUser = (TString)cleanUser;
209 }
210 inline void SetRunDescription(const TString& description) { fRunDescription = description; }
211 inline void SetStartTimeStamp(Double_t timestamp) { fStartTime = timestamp; }
212 inline void SetEndTimeStamp(Double_t timestamp) { fEndTime = timestamp; }
213 inline void SetTotalBytes(Long64_t totalBytes) { fTotalBytes = totalBytes; }
214 inline void SetHistoricMetadataSaving(bool save) { fSaveHistoricData = save; }
215 inline void SetNFilesSplit(int n) { fNFilesSplit = n; }
216 inline void HangUpEndFile() { fHangUpEndFile = true; }
217 inline void ReleaseEndFile() { fHangUpEndFile = false; }
218 // Printers
219 void PrintStartDate();
220 void PrintEndDate();
221
222 void PrintMetadata() override;
223 inline void PrintAllMetadata() {
225 for (unsigned int i = 0; i < fMetadata.size(); i++) fMetadata[i]->PrintMetadata();
226 }
227 inline void PrintTrees() const {
228 if (fEventTree != nullptr) {
229 RESTcout << RESTendl;
230 RESTcout << "=====EventTree=====" << RESTendl;
231 fEventTree->Print();
232 }
233 if (fAnalysisTree != nullptr) {
234 RESTcout << RESTendl;
235 RESTcout << "=====AnalysisTree=====" << RESTendl;
236 fAnalysisTree->Print();
237 }
238 }
239 void PrintObservables() {
240 if (fAnalysisTree != nullptr) fAnalysisTree->PrintObservables();
241 }
242
243 inline void PrintEvent() const { fInputEvent->PrintEvent(); }
244 void PrintErrors();
245 void PrintWarnings();
246
247 Int_t Write(const char* name = nullptr, Int_t option = 0, Int_t bufsize = 0) override;
248
249 // Constructor & Destructor
250 TRestRun();
251 explicit TRestRun(const std::string& filename);
252 ~TRestRun();
253
254 ClassDefOverride(TRestRun, 6);
255};
256
257#endif
REST core data-saving helper based on TTree.
Int_t GetObservableID(const std::string &obsName)
Get the index of the specified observable.
Bool_t ObservableExists(const std::string &obsName)
Get if the specified observable exists.
A base class for any REST event process.
A base class for any REST event.
Definition: TRestEvent.h:38
virtual void PrintEvent() const
Definition: TRestEvent.cxx:187
A base class for any REST metadata class.
Definition: TRestMetadata.h:70
endl_t RESTendl
Termination flag object for TRestStringOutput.
Data provider and manager in REST.
Definition: TRestRun.h:18
void PrintWarnings()
Prints out all the warnings registered by metadata classes accessible to TRestRun,...
Definition: TRestRun.cxx:1928
void AddEventBranch(TRestEvent *event)
Add an event branch in output EventTree.
Definition: TRestRun.cxx:1282
void OpenInputFile(int i)
Open the i th file in the file list.
Definition: TRestRun.cxx:314
void CloseFile()
Close both input file and output file, setting trees to nullptr also.
Definition: TRestRun.cxx:1155
TFile * FormOutputFile()
Create a new TFile as REST output file. Writing metadata objects into it.
Definition: TRestRun.cxx:1036
void AddMetadata(TRestMetadata *meta)
add metadata object to the metadata list
Definition: TRestRun.h:110
void ResetEntry()
Reset file reading progress.
Definition: TRestRun.cxx:781
TRestEvent * GetInputEvent() const
Calling GetInputEvent() will return a basic TRestEvent*
Definition: TRestRun.h:151
Int_t fParentRunNumber
It can be used as parent number of subrun number.
Definition: TRestRun.h:23
T * GetInputEvent()
Calling GetInputEvent<TRestGeant4Event>() will return a TRestGeant4Event*
Definition: TRestRun.h:154
void SetInputEvent(TRestEvent *event)
Retarget input event in the tree.
Definition: TRestRun.cxx:1245
std::string ReplaceMetadataMember(const std::string &instr, Int_t precision=0)
It will replace the data member from the corresponding metadata class type or name defined in the inp...
Definition: TRestRun.cxx:1703
void GetEntry(Long64_t entry)
Calls GetEntry() for both AnalysisTree and EventTree.
Definition: TRestRun.cxx:908
void InitFromConfigFile() override
Initialize logic of TRestRun.
Definition: TRestRun.cxx:122
void Initialize() override
REST run class.
Definition: TRestRun.cxx:71
void PrintErrors()
Prints out all the warnings registered by metadata classes accessible to TRestRun,...
Definition: TRestRun.cxx:1902
std::string ReplaceMetadataMembers(const std::string &instr, Int_t precision=8)
It will replace the data members contained inside the string given as input. The data members in the ...
Definition: TRestRun.cxx:1652
void PrintMetadata() override
Prints the basic run information.
Definition: TRestRun.cxx:1821
std::vector< std::string > GetEventTypesList()
It returns a list of available event types inside the file.
Definition: TRestRun.cxx:892
void ImportMetadata(const TString &rootFile, const TString &name, const TString &type, Bool_t store)
Open the root file and import the metadata of the given name.
Definition: TRestRun.cxx:1298
Bool_t EvaluateMetadataMember(const std::string &instr)
It will evaluate the expression given including the data member from the corresponding metadata class...
Definition: TRestRun.cxx:1768
void SetExtProcess(TRestEventProcess *p)
Set external file process.
Definition: TRestRun.cxx:1203
TString FormFormat(const TString &FilenameFormat)
Form output file name according to file info list, proc info list and run data.
Definition: TRestRun.cxx:940
TFile * MergeToOutputFile(std::vector< std::string > filefullnames, std::string outputfilename="")
Form REST output file by merging a list of files together.
Definition: TRestRun.cxx:985
void PrintStartDate()
Prints the run start date and time in human format.
Definition: TRestRun.cxx:1860
Double_t fStartTime
Event absolute starting time/date (unix timestamp)
Definition: TRestRun.h:36
void WriteWithDataBase()
Write this object into TFile and add a new entry in database.
Definition: TRestRun.cxx:1092
Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0) override
overwriting the write() method with fStore considered
Definition: TRestRun.cxx:1347
void ReadFileInfo(const std::string &filename)
Extract file info from a file, and save it in the file info list.
Definition: TRestRun.cxx:652
Double_t fEndTime
Event absolute ending time/date (unix timestamp)
Definition: TRestRun.h:37
Int_t GetNextEvent(TRestEvent *targetEvent, TRestAnalysisTree *targetTree)
Get next event by writing event data into target event and target tree.
Definition: TRestRun.cxx:796
TRestEvent * GetNextEventWithConditions(const std::string &)
Load the next event that satisfies the conditions specified by a string.
Definition: TRestRun.cxx:1525
static std::vector< std::string > GetFilesMatchingPattern(std::string pattern, bool unlimited=false)
Returns a list of files whose name match the pattern string. Key word is "*". e.g....
Definition: TRestTools.cxx:976
std::string RemoveWhiteSpaces(std::string in)
Returns the input string removing all white spaces.