Project
Loading...
Searching...
No Matches
Trap2CRU.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
13// //
14// TRD Trap2CRU class //
15// Convert simulated digits and tracklets into a CRU data stream //
16// //
18
19#ifndef ALICE_O2_TRD_TRAP2CRU_H
20#define ALICE_O2_TRD_TRAP2CRU_H
21
22#include <string>
29
30namespace o2
31{
32namespace trd
33{
34
36{
37 public:
38 Trap2CRU() = default;
39 Trap2CRU(const std::string& outputDir, const std::string& inputDigitsFilename, const std::string& inputTrackletsFilename);
40
41 // entry point for processing, is called from trap2raw.cxx
42 void readTrapData();
43
44 // sort digits and tracklets by link ID
45 void sortDataToLinks();
46
47 // open digits and tracklets files for reading
48 void openInputFiles();
49
50 // main processing function, called for every TRD trigger and creates the raw data stream for each half CRU
51 void convertTrapData(o2::trd::TriggerRecord const& trigrecord, const int& triggercount);
52
53 // settings
54 void setFilePer(std::string fileper) { mFilePer = fileper; };
55 void setOutputDir(std::string outdir) { mOutputDir = outdir; };
56 void setVerbosity(int verbosity) { mVerbosity = verbosity; }
57 void setTrackletHCHeader(int tracklethcheader) { mUseTrackletHCHeader = tracklethcheader; }
58 void setTimeStamp(long ts) { mTimeStamp = ts; }
59
60 // make the writer available in trap2raw.cxx for configuration
61 o2::raw::RawFileWriter& getWriter() { return mWriter; }
62 // build the half cru header holding the lengths of all links amongst other things.
63 uint32_t buildHalfCRUHeader(HalfCRUHeader& header, const uint32_t bc, const uint32_t halfcru, bool isCalibTrigger);
64
65 // write digits for single MCM into raw stream (include DigitMCMHeader and ADC mask)
66 int buildDigitRawData(const int digitstartindex, const int digitendindex, const int mcm, const int rob, const uint32_t triggercount);
67 // write tracklets for single MCM into raw stream (includes TrackletMCMHeader)
68 int buildTrackletRawData(unsigned int trackletIndexStart);
69 // write two digit end markers
71 // write two tracklet end markers
73 // write digit HC header (two headers are written)
74 void writeDigitHCHeaders(const int eventcount, uint32_t hcId);
75 // write tracklet HC header
76 void writeTrackletHCHeader(int hcid, int eventcount);
77
78 private:
79 uint8_t mLinkID{constants::TRDLINKID}; // always 15 for TRD
80 uint16_t mCruID{0}; // built into the FeeID
81 uint16_t mFeeID{0}; // front end id defining the cru sm:8 bits, blank 3 bits, side:1,blank 3 bits, end point:1
82 uint8_t mEndPointID{0}; // end point on the cru in question, there are 2 pci end points per cru
83
84 // settings
85 std::string mFilePer; // how to split up the raw data files, sm:per supermodule, halfcru: per half cru, cru: per cru, all: singular file.
86 int mVerbosity{0}; // currently only 2 levels: 0 - OFF, 1 - verbose output
87 std::string mOutputDir;
88 int mUseTrackletHCHeader{0}; // 0 - don't write header, 1 - write header if tracklets available, 2 - always write header
89
90 // input
91 // digits
92 std::string mInputDigitsFileName;
93 TFile* mDigitsFile;
94 TTree* mDigitsTree;
95 std::vector<Digit> mDigits, *mDigitsPtr = &mDigits;
96 // tracklets and trigger records
97 std::string mInputTrackletsFileName;
98 TFile* mTrackletsFile;
99 TTree* mTrackletsTree;
100 std::vector<Tracklet64> mTracklets, *mTrackletsPtr{&mTracklets};
101 std::vector<o2::trd::TriggerRecord> mTrackletTriggerRecords, *mTrackletTriggerRecordsPtr{&mTrackletTriggerRecords};
102
103 // helpers
104 long mTimeStamp{0}; // used to retrieve the correct link to HCID mapping from CCDB
105 const LinkToHCIDMapping* mLinkMap = nullptr; // to retrieve HCID from Link ID
106 std::vector<uint32_t> mDigitsIndex; // input digits are sorted using this index array
107 char* mRawDataPtr{nullptr}; // points to the current position in the raw data where we are writing
108 uint64_t mCurrentTracklet{0}; //the tracklet we are currently busy adding
109 uint64_t mCurrentDigit{0}; //the digit we are currently busy adding
110 uint64_t mTotalTrackletsWritten{0}; // count the total number of tracklets written to the raw data
111 uint64_t mTotalDigitsWritten{0}; // count the total number of digits written to the raw data
112
114 o2::raw::RawFileWriter mWriter{"TRD"};
115
116 ClassDefNV(Trap2CRU, 4);
117};
118
119} // end namespace trd
120} // end namespace o2
121#endif
#define verbosity
uint16_t mcm
uint16_t rob
Global TRD definitions and constants.
uint64_t bc
Definition RawEventData.h:5
uint32_t eventcount
Definition RawData.h:1
Utility class to write detectors data to (multiple) raw data file(s) respecting CRU format.
void setTimeStamp(long ts)
Definition Trap2CRU.h:58
void writeDigitEndMarkers()
Definition Trap2CRU.cxx:458
void writeDigitHCHeaders(const int eventcount, uint32_t hcId)
Definition Trap2CRU.cxx:495
int buildTrackletRawData(unsigned int trackletIndexStart)
Definition Trap2CRU.cxx:381
void setOutputDir(std::string outdir)
Definition Trap2CRU.h:55
void writeTrackletEndMarkers()
Definition Trap2CRU.cxx:468
void setFilePer(std::string fileper)
Definition Trap2CRU.h:54
Trap2CRU()=default
void convertTrapData(o2::trd::TriggerRecord const &trigrecord, const int &triggercount)
Definition Trap2CRU.cxx:522
void writeTrackletHCHeader(int hcid, int eventcount)
Definition Trap2CRU.cxx:478
uint32_t buildHalfCRUHeader(HalfCRUHeader &header, const uint32_t bc, const uint32_t halfcru, bool isCalibTrigger)
Definition Trap2CRU.cxx:306
int buildDigitRawData(const int digitstartindex, const int digitendindex, const int mcm, const int rob, const uint32_t triggercount)
Definition Trap2CRU.cxx:323
o2::raw::RawFileWriter & getWriter()
Definition Trap2CRU.h:61
void setTrackletHCHeader(int tracklethcheader)
Definition Trap2CRU.h:57
void setVerbosity(int verbosity)
Definition Trap2CRU.h:56
Header for data corresponding to the same hardware trigger adapted from DataFormatsITSMFT/ROFRecord.
uint8_t itsSharedClusterMap uint8_t
constexpr int TRDLINKID
hard coded link id, specific to TRD
Definition Constants.h:39
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Header for half a cru, each cru has 2 output, 1 for each pciid.
Definition RawData.h:35