Skip to content

Commit 300fa70

Browse files
jmyrchashahor02
authored andcommitted
o2-eve: fixes (event creation time, GID from old root files)
1 parent 8234357 commit 300fa70

File tree

7 files changed

+73
-49
lines changed

7 files changed

+73
-49
lines changed

EventVisualisation/Base/include/EventVisualisationBase/ConfigurationManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace o2
2525
namespace event_visualisation
2626
{
2727
/// Version of the software
28-
const static int o2_eve_version = 171;
28+
const static int o2_eve_version = 172;
2929

3030
/// Configuration Manager allows an easy access to the config file.
3131
///

EventVisualisation/Base/include/EventVisualisationBase/DirectoryLoader.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ namespace event_visualisation
2828
class DirectoryLoader
2929
{
3030
private:
31-
static int getNumberOfFiles(std::string& path, std::vector<std::string>& ext);
32-
static std::string getLatestFile(std::string& path, std::vector<std::string>& ext);
31+
static int getNumberOfFiles(const std::string& path, std::vector<std::string>& ext);
32+
static std::string getLatestFile(const std::string& path, std::vector<std::string>& ext);
3333

3434
public:
3535
static std::deque<std::string> load(const std::string& path, const std::string& marker, const std::vector<std::string>& ext);
3636
static std::deque<std::string> load(const std::vector<std::string>& paths, const std::string& marker, const std::vector<std::string>& ext);
3737
static std::vector<std::string> allFolders(const std::string& location);
3838
static bool canCreateNextFile(const std::vector<std::string>& paths, const std::string& marker, const std::vector<std::string>& ext, long long millisec, long capacityAllowed);
3939
static void reduceNumberOfFiles(const std::string& path, const std::deque<std::string>& files, std::size_t filesInFolder);
40-
static void removeOldestFiles(std::string& path, std::vector<std::string>& ext, int remaining);
40+
static void removeOldestFiles(const std::string& path, std::vector<std::string>& ext, int remaining);
4141
};
4242

4343
} // namespace event_visualisation

EventVisualisation/Base/src/DataSource.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace o2::event_visualisation
2424
std::string DataSource::getCreationTimeAsString() const
2525
{
2626
char buffer[90];
27-
time_t time = this->mCreationTime;
27+
time_t time = this->mCreationTime / 1000;
2828
const char* format = "%a %b %-d %H:%M:%S %Y";
2929
struct tm* timeinfo = localtime(&time);
3030
strftime(buffer, sizeof(buffer), format, timeinfo);

EventVisualisation/Base/src/DirectoryLoader.cxx

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ deque<string> DirectoryLoader::load(const std::string& path, const std::string&
3636
}
3737
// comparison with safety if marker not in the filename (-1+1 gives 0)
3838
std::sort(result.begin(), result.end(),
39-
[marker](std::string a, std::string b) {
39+
[marker](const std::string& a, const std::string& b) {
4040
return a.substr(a.find_first_of(marker) + 1) < b.substr(b.find_first_of(marker) + 1);
4141
});
4242

@@ -118,7 +118,7 @@ void DirectoryLoader::reduceNumberOfFiles(const std::string& path, const std::de
118118
if (filesInFolder == -1) {
119119
return; // do not reduce
120120
}
121-
int items = files.size() - std::min(files.size(), filesInFolder);
121+
const auto items = files.size() - std::min(files.size(), filesInFolder);
122122
for (int i = 0; i < items; i++) {
123123
std::remove((path + "/" + files[i]).c_str()); // delete file
124124
}
@@ -132,7 +132,7 @@ std::time_t to_time_t(TP tp)
132132
return system_clock::to_time_t(sctp);
133133
}
134134

135-
int DirectoryLoader::getNumberOfFiles(std::string& path, std::vector<std::string>& ext)
135+
int DirectoryLoader::getNumberOfFiles(const std::string& path, std::vector<std::string>& ext)
136136
{
137137
int res = 0;
138138
for (const auto& entry : std::filesystem::directory_iterator(path)) {
@@ -142,24 +142,23 @@ int DirectoryLoader::getNumberOfFiles(std::string& path, std::vector<std::string
142142
}
143143
return res;
144144
}
145-
std::string DirectoryLoader::getLatestFile(std::string& path, std::vector<std::string>& ext)
145+
std::string DirectoryLoader::getLatestFile(const std::string& path, std::vector<std::string>& ext)
146146
{
147147
std::string oldest_file_name = "";
148148
std::time_t oldest_file_time = LONG_MAX;
149149
for (const auto& entry : std::filesystem::directory_iterator(path)) {
150150
if (std::find(ext.begin(), ext.end(), entry.path().extension()) != ext.end()) {
151-
auto file_time = entry.last_write_time();
152-
std::time_t tt = to_time_t(file_time);
153-
if (tt < oldest_file_time) {
151+
const auto file_time = entry.last_write_time();
152+
if (const std::time_t tt = to_time_t(file_time); tt < oldest_file_time) {
154153
oldest_file_time = tt;
155-
oldest_file_name = entry.path().filename();
154+
oldest_file_name = entry.path().filename().string();
156155
}
157156
}
158157
}
159158
return oldest_file_name;
160159
}
161160

162-
void DirectoryLoader::removeOldestFiles(std::string& path, std::vector<std::string>& ext, const int remaining)
161+
void DirectoryLoader::removeOldestFiles(const std::string& path, std::vector<std::string>& ext, const int remaining)
163162
{
164163
while (getNumberOfFiles(path, ext) > remaining) {
165164
LOGF(info, "removing oldest file in folder: %s : %s", path, getLatestFile(path, ext));

EventVisualisation/DataConverter/include/EventVisualisationDataConverter/VisualisationEventOpenGLSerializer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class VisualisationEventOpenGLSerializer : public VisualisationEventSerializer
3333
static float* asFloat(void* chunk) { return (float*)((char*)chunk + 8); }
3434
static unsigned char* asByte(void* chunk) { return (unsigned char*)((char*)chunk + 8); }
3535
static signed char* asSignedByte(void* chunk) { return (signed char*)((char*)chunk + 8); }
36-
unsigned chunkSize(void* chunk);
36+
static unsigned chunkSize(void* chunk);
3737

3838
public:
3939
const std::string serializerName() const override { return std::string("VisualisationEventOpenGLSerializer"); }

EventVisualisation/DataConverter/src/VisualisationEventOpenGLSerializer.cxx

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,13 @@
2121
#include <fstream>
2222
#include <filesystem>
2323

24-
namespace o2
25-
{
26-
namespace event_visualisation
24+
namespace o2::event_visualisation
2725
{
2826

2927
enum Header : uint8_t {
3028
version,
3129
runNumber,
32-
creationTime,
30+
creationTimeUnused,
3331
firstTForbit,
3432
runType,
3533
trkMask,
@@ -40,6 +38,8 @@ enum Header : uint8_t {
4038
emcCount,
4139
primaryVertex,
4240
tfCounter,
41+
creationTimeLow,
42+
creationTimeHigh,
4343
last // number of fields
4444
};
4545

@@ -89,7 +89,7 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
8989
"TPC-TOF", "TPC-TRD", "MFT-MCH", "ITS-TPC-TRD", "ITS-TPC-TOF", "TPC-TRD-TOF", "MFT-MCH-MID", "ITS-TPC-TRD-TOF", "ITS-AB", "CTP",
9090
"MCH-MID"};
9191
std::ostringstream buf;
92-
const auto SIGSIZE = 512;
92+
constexpr auto SIGSIZE = 512;
9393
unsigned char data[SIGSIZE];
9494
std::ofstream out(fileName, std::ios::out | std::ios::binary);
9595
// head --bytes 512 fileName.eve
@@ -126,7 +126,10 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
126126
const auto head = asUnsigned(chunkHEAD);
127127
head[Header::version] = event.mEveVersion;
128128
head[Header::runNumber] = event.getRunNumber();
129-
head[Header::creationTime] = event.getCreationTime();
129+
unsigned long creationTime = event.getCreationTime();
130+
head[Header::creationTimeLow] = creationTime;
131+
head[Header::creationTimeHigh] = creationTime / (1L << 32);
132+
;
130133
head[Header::firstTForbit] = event.getFirstTForbit();
131134
head[Header::runType] = event.getRunType();
132135
head[Header::trkMask] = event.getTrkMask();
@@ -137,7 +140,7 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
137140
head[Header::emcCount] = emcCount;
138141
head[Header::primaryVertex] = event.getPrimaryVertex();
139142
head[Header::tfCounter] = event.getTfCounter();
140-
out.write((char*)chunkHEAD, chunkSize(chunkHEAD)); // <----1 HEAD
143+
out.write(static_cast<char*>(chunkHEAD), chunkSize(chunkHEAD)); // <----1 HEAD
141144
free(chunkHEAD);
142145
}
143146

@@ -168,15 +171,15 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
168171
celm[index] = track.getClusterCount();
169172
index++;
170173
}
171-
out.write((char*)chunkTTYP, chunkSize(chunkTTYP)); // <----2 TTYP
174+
out.write(static_cast<char*>(chunkTTYP), chunkSize(chunkTTYP)); // <----2 TTYP
172175
free(chunkTTYP);
173-
out.write((char*)chunkTELM, chunkSize(chunkTELM)); // <----3 TELM
176+
out.write(static_cast<char*>(chunkTELM), chunkSize(chunkTELM)); // <----3 TELM
174177
free(chunkTELM);
175-
out.write((char*)chunkCELM, chunkSize(chunkCELM)); // <----3 CELM
178+
out.write(static_cast<char*>(chunkCELM), chunkSize(chunkCELM)); // <----3 CELM
176179
free(chunkCELM);
177-
out.write((char*)chunkTGID, chunkSize(chunkTGID)); // <----3 GIND
180+
out.write(static_cast<char*>(chunkTGID), chunkSize(chunkTGID)); // <----3 GIND
178181
free(chunkTGID);
179-
out.write((char*)chunkTPID, chunkSize(chunkTPID)); // <----3 TPID (tracks pid)
182+
out.write(static_cast<char*>(chunkTPID), chunkSize(chunkTPID)); // <----3 TPID (tracks pid)
180183
free(chunkTPID);
181184
}
182185

@@ -206,7 +209,7 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
206209

207210
for (const auto& track : event.getTracksSpan()) {
208211
time[tno] = track.getTime();
209-
crge[tno] = track.getCharge();
212+
crge[tno] = static_cast<signed char>(track.getCharge());
210213
tno++;
211214
sxyz[sxyzidx++] = track.getStartCoordinates()[0];
212215
sxyz[sxyzidx++] = track.getStartCoordinates()[1];
@@ -227,17 +230,17 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
227230
cxyz[cidx++] = track.getClustersSpan()[i].Z();
228231
}
229232
}
230-
out.write((char*)chunkTXYZ, chunkSize(chunkTXYZ)); // <----4 TXYZ
233+
out.write(static_cast<char*>(chunkTXYZ), chunkSize(chunkTXYZ)); // <----4 TXYZ
231234
free(chunkTXYZ);
232-
out.write((char*)chunkCXYZ, chunkSize(chunkCXYZ)); // <----4 CXYZ
235+
out.write(static_cast<char*>(chunkCXYZ), chunkSize(chunkCXYZ)); // <----4 CXYZ
233236
free(chunkCXYZ);
234-
out.write((char*)chunkTIME, chunkSize(chunkTIME)); // <----4 TIME
237+
out.write(static_cast<char*>(chunkTIME), chunkSize(chunkTIME)); // <----4 TIME
235238
free(chunkTIME);
236-
out.write((char*)chunkSXYZ, chunkSize(chunkSXYZ)); // <----4 SXYZ
239+
out.write(static_cast<char*>(chunkSXYZ), chunkSize(chunkSXYZ)); // <----4 SXYZ
237240
free(chunkSXYZ);
238-
out.write((char*)chunkCRGE, chunkSize(chunkCRGE)); // <----4 CRGE
241+
out.write(static_cast<char*>(chunkCRGE), chunkSize(chunkCRGE)); // <----4 CRGE
239242
free(chunkCRGE);
240-
out.write((char*)chunkATPE, chunkSize(chunkATPE)); // <----4 CRGE
243+
out.write(static_cast<char*>(chunkATPE), chunkSize(chunkATPE)); // <----4 CRGE
241244
free(chunkATPE);
242245
}
243246

@@ -257,11 +260,11 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
257260
uxyz[idx++] = c.Y();
258261
uxyz[idx++] = c.Z();
259262
}
260-
out.write((char*)chunkUGID, chunkSize(chunkUGID)); //
263+
out.write(static_cast<char*>(chunkUGID), chunkSize(chunkUGID)); //
261264
free(chunkUGID);
262-
out.write((char*)chunkUTIM, chunkSize(chunkUTIM)); //
265+
out.write(static_cast<char*>(chunkUTIM), chunkSize(chunkUTIM)); //
263266
free(chunkUTIM);
264-
out.write((char*)chunkUXYZ, chunkSize(chunkUXYZ)); //
267+
out.write(static_cast<char*>(chunkUXYZ), chunkSize(chunkUXYZ)); //
265268
free(chunkUXYZ);
266269
}
267270

@@ -309,33 +312,48 @@ void VisualisationEventOpenGLSerializer::toFile(const VisualisationEvent& event,
309312

310313
{
311314
const auto chunkFINE = createChunk(FINE, 0);
312-
out.write((char*)chunkFINE, chunkSize(chunkFINE)); // <----5 FINE
315+
out.write(static_cast<char*>(chunkFINE), chunkSize(chunkFINE)); // <----5 FINE
313316
free(chunkFINE);
314317
}
315318
out.close();
316319
}
317320

318321
void* VisualisationEventOpenGLSerializer::createChunk(const char* lbl, unsigned size)
319322
{
320-
auto result = (unsigned char*)calloc(4 * ((size + 3) / 4) + 8, 1);
323+
const auto result = static_cast<unsigned char*>(calloc(4 * ((size + 3) / 4) + 8, 1));
321324
result[0] = lbl[0];
322325
result[1] = lbl[1];
323326
result[2] = lbl[2];
324327
result[3] = lbl[3];
325-
auto uResult = (unsigned*)&result[4];
328+
const auto uResult = (unsigned*)&result[4];
326329
*uResult = 4 * ((size + 3) / 4);
327330
return result;
328331
}
329332

330333
unsigned VisualisationEventOpenGLSerializer::chunkSize(void* chunk)
331334
{
332-
auto uResult = (unsigned*)((char*)chunk + 4);
335+
const auto uResult = (unsigned*)((char*)chunk + 4);
333336
return *uResult + 8;
334337
}
335338

336-
bool VisualisationEventOpenGLSerializer::fromFile(VisualisationEvent& event, std::string fileName)
339+
long timestamp_from_filename(const std::string& s)
337340
{
341+
const auto pos1 = s.find("tracks_");
342+
if (pos1 == std::string::npos) {
343+
return 0;
344+
}
345+
const auto pos2 = s.find('_', pos1 + 7);
346+
if (pos2 == std::string::npos) {
347+
return 0;
348+
}
349+
std::string::size_type sz; // alias of size_t
350+
const auto str_dec = s.substr(pos1 + 7, pos2 - pos1 - 7);
351+
const long li_dec = std::strtol(str_dec.c_str(), nullptr, 10);
352+
return li_dec;
353+
}
338354

355+
bool VisualisationEventOpenGLSerializer::fromFile(VisualisationEvent& event, std::string fileName)
356+
{
339357
std::filesystem::path inputFilePath{fileName};
340358
auto length = (long)std::filesystem::file_size(inputFilePath);
341359
if (length == 0) {
@@ -389,7 +407,8 @@ bool VisualisationEventOpenGLSerializer::fromFile(VisualisationEvent& event, std
389407
auto head = words;
390408
event.mEveVersion = head[Header::version];
391409
event.setRunNumber(head[Header::runNumber]);
392-
event.setCreationTime(head[Header::creationTime]);
410+
// event.setCreationTime(head[Header::creationTimeLow]+head[Header::creationTimeHigh]*(1L<<32));
411+
event.setCreationTime(timestamp_from_filename(fileName));
393412
event.setFirstTForbit(head[Header::firstTForbit]);
394413
event.setRunType((parameters::GRPECS::RunType)head[Header::runType]);
395414
event.setTrkMask((int)head[Header::trkMask]);
@@ -513,5 +532,4 @@ bool VisualisationEventOpenGLSerializer::fromFile(VisualisationEvent& event, std
513532
return false;
514533
}
515534

516-
} // namespace event_visualisation
517-
} // namespace o2
535+
} // namespace o2::event_visualisation

EventVisualisation/DataConverter/src/VisualisationEventSerializer.cxx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,17 @@ o2::dataformats::GlobalTrackID VisualisationEventSerializer::gidFromString(const
8787
{"ITSAB", 24}, // ITS AfterBurner tracklets
8888
{"CTP", 25}};
8989
const auto first = gid.find('/');
90-
const auto second = gid.find('/', first + 1);
91-
auto source = sources[gid.substr(1, first - 1)];
92-
auto index = std::stoi(gid.substr(first + 1, second - 1));
93-
auto flags = std::stoi(gid.substr(second + 1, gid.size() - 1));
90+
int source = 0;
91+
int index = 0;
92+
int flags = 0;
93+
if (first == -1) {
94+
source = sources[gid];
95+
} else {
96+
const auto second = gid.find('/', first + 1);
97+
source = sources[gid.substr(1, first - 1)];
98+
index = std::stoi(gid.substr(first + 1, second - 1));
99+
flags = std::stoi(gid.substr(second + 1, gid.size() - 1));
100+
}
94101
return index + source * (1 << 25) + flags * (1 << 30);
95102
}
96103

0 commit comments

Comments
 (0)