Project
Loading...
Searching...
No Matches
DataReaderTask.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
15
16#ifndef O2_TRD_DATAREADERTASK
17#define O2_TRD_DATAREADERTASK
18
19#include "Framework/Task.h"
26#include <fstream>
27
28using namespace o2::framework;
29
30namespace o2::trd
31{
32
33class DataReaderTask : public Task
34{
35 public:
36 DataReaderTask(int tracklethcheader, int halfchamberwords, int halfchambermajor, std::bitset<16> option) : mTrackletHCHeaderState(tracklethcheader), mHalfChamberWords(halfchamberwords), mHalfChamberMajor(halfchambermajor), mOptions(option) {}
37 ~DataReaderTask() override = default;
38 void init(InitContext& ic) final;
39 void run(ProcessingContext& pc) final;
42 void finaliseCCDB(ConcreteDataMatcher& matcher, void* obj) final;
43
44 private:
45 void updateTimeDependentParams(framework::ProcessingContext& pc);
46 CruRawReader mReader; // this will do the parsing, of raw data passed directly through the flp(no compression)
47 // we pull the data from the vectors build message and pass on.
48 // they will internally produce a vector of digits and a vector tracklets and associated indexing.
49
50 bool mVerbose{false}; // verbos output general debuggign and info output.
51 bool mDataVerbose{false}; // verbose output of data unpacking
52 bool mHeaderVerbose{false}; // verbose output of headers
53 bool mCompressedData{false}; // are we dealing with the compressed data from the flp (send via option)
54 int mProcessEveryNthTF{1}; // to parse only every n-th TF and send empty output for the rest
55 bool mInitOnceDone{false}; // flag for requesting new CCDB object upon global run number change
56 std::bitset<16> mOptions; // stores the incoming of the above bools, useful to be able to send this on instead of the individual ones above
57 // the above bools make the code more readable hence still here.
58
59 int mTrackletHCHeaderState{0}; // what to do about tracklethcheader, 0 never there, 2 always there, 1 there iff tracklet data, i.e. only there if next word is *not* endmarker 10001000.
60 int mHalfChamberWords{0}; // if the halfchamber header is effectively blanked major.minor = 0.0 and halfchamberwords=0 then this value is used as the number of additional words to try recover the data
61 int mHalfChamberMajor{0}; // if the halfchamber header is effectively blanked major.minor = 0.0 and halfchamberwords=0 then this value is used as the major version to try recover the data
62 o2::header::DataDescription mUserDataDescription = o2::header::gDataDescriptionInvalid; // alternative user-provided description to pick
63 bool mFixDigitEndCorruption{false}; // fix the parsing of corrupt end of digit data. bounce over it.
64 uint64_t mDatasizeInTotal{0}; // accumulate the total data size read in bytes
65 uint64_t mWordsRejectedTotal{0}; // accumulate the total number of words rejected
66 uint64_t mDigitsTotal{0}; // accumulate the total number of digits read
67 uint64_t mTrackletsTotal{0}; // accumulate the total number os tracklets read
68 size_t mNTFsProcessed{0}; // keep track of the total number of TFs processed
69};
70
71} // namespace o2::trd
72
73#endif // O2_TRD_DATAREADERTASK
TRD raw data translator.
void init(InitContext &ic) final
DataReaderTask(int tracklethcheader, int halfchamberwords, int halfchambermajor, std::bitset< 16 > option)
~DataReaderTask() override=default
void endOfStream(o2::framework::EndOfStreamContext &ec) override
This is invoked whenever we have an EndOfStream event.
void finaliseCCDB(ConcreteDataMatcher &matcher, void *obj) final
void run(ProcessingContext &pc) final
bool isTimeFrameEmpty(ProcessingContext &pc)
constexpr o2::header::DataDescription gDataDescriptionInvalid
Definition DataHeader.h:596
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20