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 Long64_t fFeminosDaqTotalEvents = 0;
64
65 void InitFromConfigFile() override;
66
67 private:
68 std::string ReplaceMetadataMember(const std::string& instr, Int_t precision = 0);
69
70 public:
72 void Initialize() override;
73
74 // file operation
75 void OpenInputFile(int i);
76 void OpenInputFile(const TString& filename, const std::string& mode = "");
77 void AddInputFileExternal(const std::string& file);
78 void ReadFileInfo(const std::string& filename);
79 void ReadInputFileMetadata();
80 void ReadInputFileTrees();
81
82 void ResetEntry();
83
84 Int_t GetNextEvent(TRestEvent* targetEvent, TRestAnalysisTree* targetTree);
85
86 void GetEntry(Long64_t entry);
87
88 void GetNextEntry() {
89 if (fCurrentEvent + 1 >= GetEntries()) {
90 fCurrentEvent = -1;
91 }
92 GetEntry(fCurrentEvent + 1);
93 }
94
95 TString FormFormat(const TString& filenameFormat);
96 TFile* MergeToOutputFile(std::vector<std::string> fileFullNames, std::string outputFileName = "");
97 TFile* FormOutputFile();
98 TFile* UpdateOutputFile();
99
100 void PassOutputFile() {
101 fOutputFile = fInputFile;
102 fOutputFileName = fOutputFile->GetName();
103 }
104
105 void WriteWithDataBase();
106
107 void CloseFile();
108
109 void ImportMetadata(const TString& rootFile, const TString& name, const TString& type, Bool_t store);
110
112 inline void AddMetadata(TRestMetadata* meta) {
113 if (meta != nullptr) {
114 fMetadata.push_back(meta);
115 } else {
116 RESTWarning << "REST Warning! A null metadata wants to be added in TRestRun!" << RESTendl;
117 }
118 }
119 void AddEventBranch(TRestEvent* event);
120 void SkipEventTree() {}
121
122 void cd() {
123 if (fInputFile != nullptr) fInputFile->cd();
124 }
125
126 // Getters
127 inline Int_t GetParentRunNumber() const { return fParentRunNumber; }
128 inline Int_t GetSubRunNumber() const { return fParentRunNumber; }
129 inline Int_t GetRunNumber() const { return fRunNumber; }
130 inline TString GetRunType() const { return fRunType; }
131 inline TString GetRunUser() const { return fRunUser; }
132 inline TString GetRunTag() const { return fRunTag; }
133 inline TString GetRunDescription() const { return fRunDescription; }
134 Double_t GetRunLength() const;
135 inline Double_t GetStartTimestamp() const { return fStartTime; }
136 inline Double_t GetEndTimestamp() const { return fEndTime; }
137 inline TString GetExperimentName() const { return fExperimentName; }
138
139 inline std::vector<TString> GetInputFileNames() const { return fInputFileNames; }
140 inline std::string GetInputFileName(unsigned int i) const {
141 return i < fInputFileNames.size() ? (std::string)fInputFileNames[i] : "";
142 }
143 inline std::string GetInputFileNamePattern() const { return fInputFileName.Data(); }
144 inline TString GetOutputFileName() const { return fOutputFileName; }
145 inline TFile* GetInputFile() const { return fInputFile; }
146 inline TFile* GetOutputFile() const { return fOutputFile; }
147 inline int GetCurrentEntry() const { return fCurrentEvent; }
148 inline Long64_t GetBytesRead() const { return fBytesRead; }
149 Long64_t GetTotalBytes();
150 Long64_t GetEntries() const;
151
153 inline TRestEvent* GetInputEvent() const { return fInputEvent; }
155 template <class T>
156 inline T* GetInputEvent() {
157 return static_cast<T*>(fInputEvent);
158 }
159
160 TRestEvent* GetEventWithID(Int_t eventID, Int_t subEventID = -1, const TString& tag = "");
161 std::vector<int> GetEventEntriesWithConditions(const std::string&, int startingIndex = 0,
162 int maxNumber = -1);
163 std::vector<int> GetEventIdsWithConditions(const std::string&, int startingIndex = 0, int maxNumber = -1);
164 TRestEvent* GetNextEventWithConditions(const std::string&);
165 inline TRestEventProcess* GetFileProcess() const { return fFileProcess; }
166 std::string GetRunInformation(const std::string& info);
167 inline Int_t GetObservableID(const std::string& name) { return fAnalysisTree->GetObservableID(name); }
168 inline Bool_t ObservableExists(const std::string& name) { return fAnalysisTree->ObservableExists(name); }
169 inline TString GetInputEventName() const { return fInputEvent->ClassName(); }
170 inline TRestAnalysisTree* GetAnalysisTree() const { return fAnalysisTree; }
171 inline TTree* GetEventTree() const { return fEventTree; }
172 inline Int_t GetInputFileNumber() const { return fFileProcess == nullptr ? fInputFileNames.size() : 1; }
173
174 std::vector<std::string> GetEventTypesList();
175
176 TRestMetadata* GetMetadata(const TString& name, TFile* file = nullptr);
177 TRestMetadata* GetMetadataClass(const TString& type, TFile* file = nullptr);
178 std::vector<std::string> GetMetadataNames();
179 std::vector<std::string> GetMetadataTitles();
180 inline int GetNumberOfMetadata() const { return fMetadata.size(); }
181 Double_t GetElapsedTimeSeconds() const { return fEndTime - fStartTime; }
182
183 inline std::string GetMetadataMember(const std::string& instr) { return ReplaceMetadataMember(instr); }
184 std::string ReplaceMetadataMembers(const std::string& instr, Int_t precision = 8);
185
186 Bool_t EvaluateMetadataMember(const std::string& instr);
187
188 // Setters
189 inline void SetInputFileName(const std::string& s) {
190 fInputFileName = s;
191 fInputFileNames = Vector_cast<std::string, TString>(
192 TRestTools::GetFilesMatchingPattern((std::string)fInputFileName));
193 }
194 inline void SetOutputFileName(const std::string& s) { fOutputFileName = s; }
196 inline void SetCurrentEntry(int i) { fCurrentEvent = i; }
197 void SetInputEvent(TRestEvent* event);
198 inline void SetRunNumber(Int_t number) { fRunNumber = number; }
199 inline void SetParentRunNumber(Int_t number) { fParentRunNumber = number; }
200 inline void SetRunType(const TString& type) {
201 std::string cleanType = RemoveWhiteSpaces((std::string)type);
202 fRunType = (TString)cleanType;
203 }
204 inline void SetRunTag(const TString& tag) {
205 std::string cleanTag = RemoveWhiteSpaces((std::string)tag);
206 fRunTag = (TString)cleanTag;
207 }
208 inline void SetRunUser(const TString& user) {
209 std::string cleanUser = RemoveWhiteSpaces((std::string)user);
210 fRunUser = (TString)cleanUser;
211 }
212 inline void SetRunDescription(const TString& description) { fRunDescription = description; }
213 inline void SetStartTimeStamp(Double_t timestamp) { fStartTime = timestamp; }
214 inline void SetEndTimeStamp(Double_t timestamp) { fEndTime = timestamp; }
215 inline void SetTotalBytes(Long64_t totalBytes) { fTotalBytes = totalBytes; }
216 inline void SetHistoricMetadataSaving(bool save) { fSaveHistoricData = save; }
217 inline void SetNFilesSplit(int n) { fNFilesSplit = n; }
218 inline void HangUpEndFile() { fHangUpEndFile = true; }
219 inline void ReleaseEndFile() { fHangUpEndFile = false; }
220
221 inline void SetFeminosDaqTotalEvents(Long64_t n) { fFeminosDaqTotalEvents = n; }
222 inline Long64_t GetFeminosDaqTotalEvents() const { return fFeminosDaqTotalEvents; }
223
224 // Printers
225 void PrintStartDate();
226 void PrintEndDate();
227
228 void PrintMetadata() override;
229 inline void PrintAllMetadata() {
231 for (unsigned int i = 0; i < fMetadata.size(); i++) {
232 fMetadata[i]->PrintMetadata();
233 }
234 }
235 inline void PrintTrees() const {
236 if (fEventTree != nullptr) {
237 RESTcout << RESTendl;
238 RESTcout << "=====EventTree=====" << RESTendl;
239 fEventTree->Print();
240 }
241 if (fAnalysisTree != nullptr) {
242 RESTcout << RESTendl;
243 RESTcout << "=====AnalysisTree=====" << RESTendl;
244 fAnalysisTree->Print();
245 }
246 }
247 void PrintObservables() {
248 if (fAnalysisTree != nullptr) {
249 fAnalysisTree->PrintObservables();
250 }
251 }
252
253 inline void PrintEvent() const { fInputEvent->PrintEvent(); }
254 void PrintErrors();
255 void PrintWarnings();
256
257 Int_t Write(const char* name = nullptr, Int_t option = 0, Int_t bufsize = 0) override;
258
259 // Constructor & Destructor
260 TRestRun();
261 explicit TRestRun(const std::string& filename);
262 ~TRestRun();
263
264 ClassDefOverride(TRestRun, 6);
265};
266
267#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:74
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:112
void ResetEntry()
Reset file reading progress.
Definition: TRestRun.cxx:781
TString FormFormat(const TString &filenameFormat)
Form output file name according to file info list, proc info list and run data.
Definition: TRestRun.cxx:940
TRestEvent * GetInputEvent() const
Calling GetInputEvent() will return a basic TRestEvent*
Definition: TRestRun.h:153
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:156
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
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
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
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.