2121#include < fstream>
2222#include < filesystem>
2323
24- namespace o2
25- {
26- namespace event_visualisation
24+ namespace o2 ::event_visualisation
2725{
2826
2927enum 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
318321void * 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
330333unsigned 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
0 commit comments