Project
Loading...
Searching...
No Matches
DataInputDirector.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11#ifndef O2_FRAMEWORK_DATAINPUTDIRECTOR_H_
12#define O2_FRAMEWORK_DATAINPUTDIRECTOR_H_
13
14#include "TFile.h"
15
18
19#include <regex>
20#include "rapidjson/fwd.h"
21
23{
24class Monitoring;
25}
26
27namespace o2::framework
28{
29
31 std::string fileName;
33 std::vector<uint64_t> listOfTimeFrameNumbers;
34 std::vector<std::string> listOfTimeFrameKeys;
35 std::vector<bool> alreadyRead;
36};
37FileNameHolder* makeFileNameHolder(std::string fileName);
38
40 TFile* file = nullptr;
41 std::string folderName = "";
42};
43
45{
49
50 public:
51 std::string tablename = "";
52 std::string treename = "";
53 std::unique_ptr<data_matcher::DataDescriptorMatcher> matcher;
54
56 DataInputDescriptor(bool alienSupport, int level, o2::monitoring::Monitoring* monitoring = nullptr, int allowedParentLevel = 0, std::string parentFileReplacement = "");
57
58 void printOut();
59
60 // setters
61 void setInputfilesFile(std::string dffn) { minputfilesFile = dffn; }
62 void setInputfilesFile(std::string* dffnptr) { minputfilesFilePtr = dffnptr; }
63 void setFilenamesRegex(std::string fn) { mFilenameRegex = fn; }
64 void setFilenamesRegex(std::string* fnptr) { mFilenameRegexPtr = fnptr; }
65
66 void setDefaultInputfiles(std::vector<FileNameHolder*>* difnptr) { mdefaultFilenamesPtr = difnptr; }
67
69 int fillInputfiles();
70 bool setFile(int counter);
71
72 // getters
73 std::string getInputfilesFilename();
74 std::string getFilenamesRegexString();
75 std::regex getFilenamesRegex();
76 int getNumberInputfiles() { return mfilenames.size(); }
77 int getNumberTimeFrames() { return mtotalNumberTimeFrames; }
78 int findDFNumber(int file, std::string dfName);
79
80 uint64_t getTimeFrameNumber(int counter, int numTF);
81 FileAndFolder getFileFolder(int counter, int numTF);
82 DataInputDescriptor* getParentFile(int counter, int numTF, std::string treename);
85
86 bool readTree(DataAllocator& outputs, header::DataHeader dh, int counter, int numTF, std::string treename, size_t& totalSizeCompressed, size_t& totalSizeUncompressed);
87
89 void closeInputFile();
90 bool isAlienSupportOn() { return mAlienSupport; }
91
92 private:
93 std::string minputfilesFile = "";
94 std::string* minputfilesFilePtr = nullptr;
95 std::string mFilenameRegex = "";
96 std::string* mFilenameRegexPtr = nullptr;
97 int mAllowedParentLevel = 0;
98 std::string mParentFileReplacement;
99 std::vector<FileNameHolder*> mfilenames;
100 std::vector<FileNameHolder*>* mdefaultFilenamesPtr = nullptr;
101 TFile* mcurrentFile = nullptr;
102 int mCurrentFileID = -1;
103 bool mAlienSupport = false;
104
105 o2::monitoring::Monitoring* mMonitoring = nullptr;
106
107 TMap* mParentFileMap = nullptr;
108 DataInputDescriptor* mParentFile = nullptr;
109 int mLevel = 0; // level of parent files
110
111 int mtotalNumberTimeFrames = 0;
112
113 uint64_t mIOTime = 0;
114 uint64_t mCurrentFileStartedAt = 0;
115};
116
118{
122
123 public:
125 DataInputDirector(std::string inputFile, o2::monitoring::Monitoring* monitoring = nullptr, int allowedParentLevel = 0, std::string parentFileReplacement = "");
126 DataInputDirector(std::vector<std::string> inputFiles, o2::monitoring::Monitoring* monitoring = nullptr, int allowedParentLevel = 0, std::string parentFileReplacement = "");
128
129 void reset();
131 void printOut();
132 bool atEnd(int counter);
133
134 // setters
135 void setInputfilesFile(std::string iffn) { minputfilesFile = iffn; }
136 void setFilenamesRegex(std::string dfn) { mFilenameRegex = dfn; }
137 bool readJson(std::string const& fnjson);
138 void closeInputFiles();
139
140 // getters
142 int getNumberInputDescriptors() { return mdataInputDescriptors.size(); }
143
144 bool readTree(DataAllocator& outputs, header::DataHeader dh, int counter, int numTF, size_t& totalSizeCompressed, size_t& totalSizeUncompressed);
145 uint64_t getTimeFrameNumber(header::DataHeader dh, int counter, int numTF);
148
151
152 private:
153 std::string minputfilesFile;
154 std::string* const minputfilesFilePtr = &minputfilesFile;
155 std::string mFilenameRegex;
156 int mAllowedParentLevel = 0;
157 std::string mParentFileReplacement;
158 std::string* const mFilenameRegexPtr = &mFilenameRegex;
159 DataInputDescriptor* mdefaultDataInputDescriptor = nullptr;
160 std::vector<FileNameHolder*> mdefaultInputFiles;
161 std::vector<DataInputDescriptor*> mdataInputDescriptors;
162
163 o2::monitoring::Monitoring* mMonitoring = nullptr;
164
165 bool mDebugMode = false;
166 bool mAlienSupport = false;
167
168 bool readJsonDocument(rapidjson::Document* doc);
169 bool isValid();
170};
171
172} // namespace o2::framework
173
174#endif // O2_FRAMEWORK_DATAINPUTDIRECTOR_H_
o2::monitoring::Monitoring Monitoring
void addFileNameHolder(FileNameHolder *fn)
bool readTree(DataAllocator &outputs, header::DataHeader dh, int counter, int numTF, std::string treename, size_t &totalSizeCompressed, size_t &totalSizeUncompressed)
std::unique_ptr< data_matcher::DataDescriptorMatcher > matcher
uint64_t getTimeFrameNumber(int counter, int numTF)
FileAndFolder getFileFolder(int counter, int numTF)
void setDefaultInputfiles(std::vector< FileNameHolder * > *difnptr)
void setInputfilesFile(std::string dffn)
void setInputfilesFile(std::string *dffnptr)
void setFilenamesRegex(std::string *fnptr)
DataInputDescriptor * getParentFile(int counter, int numTF, std::string treename)
int findDFNumber(int file, std::string dfName)
bool readTree(DataAllocator &outputs, header::DataHeader dh, int counter, int numTF, size_t &totalSizeCompressed, size_t &totalSizeUncompressed)
DataInputDescriptor * getDataInputDescriptor(header::DataHeader dh)
void setInputfilesFile(std::string iffn)
int getTimeFramesInFile(header::DataHeader dh, int counter)
uint64_t getTimeFrameNumber(header::DataHeader dh, int counter, int numTF)
void setFilenamesRegex(std::string dfn)
bool readJson(std::string const &fnjson)
FileAndFolder getFileFolder(header::DataHeader dh, int counter, int numTF)
GLuint counter
Definition glcorearb.h:3987
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
FileNameHolder * makeFileNameHolder(std::string fileName)
std::vector< uint64_t > listOfTimeFrameNumbers
std::vector< std::string > listOfTimeFrameKeys
the main header struct
Definition DataHeader.h:618