Project
Loading...
Searching...
No Matches
Digitizer.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
14#ifndef ALICEO2_ITSMFT_DIGITIZER_H
15#define ALICEO2_ITSMFT_DIGITIZER_H
16
17#include <vector>
18#include <deque>
19#include <memory>
20
21#include "Rtypes.h" // for Digitizer::Class
22#include "TObject.h" // for TObject
23
34
35namespace o2
36{
37
38namespace dataformats
39{
40template <typename T>
42}
43
44namespace itsmft
45{
46class Digitizer : public TObject
47{
48 using ExtraDig = std::vector<PreDigitLabelRef>;
49
50 public:
51 Digitizer() = default;
52 Digitizer(Digitizer&&) = delete;
54 ~Digitizer() override = default;
55 Digitizer(const Digitizer&) = delete;
56 Digitizer& operator=(const Digitizer&) = delete;
57
58 void setDigits(std::vector<o2::itsmft::Digit>* dig) { mDigits = dig; }
60 void setROFRecords(std::vector<o2::itsmft::ROFRecord>* rec) { mROFRecords = rec; }
61 o2::itsmft::DigiParams& getParams() { return mParams; }
62 const o2::itsmft::DigiParams& getParams() const { return mParams; }
63 void setNoiseMap(const o2::itsmft::NoiseMap* mp) { mNoiseMap = mp; }
64 void setDeadChannelsMap(const o2::itsmft::NoiseMap* mp) { mDeadChanMap = mp; }
65
66 void init();
67 void setAlpideResponse(const o2::itsmft::AlpideSimResponse* resp, int i) { mAlpSimResp[i] = resp; }
68
69 auto getChipResponse(int chipID);
70
72 void process(const std::vector<Hit>* hits, int evID, int srcID, int layer = -1);
73 void setEventTime(const o2::InteractionTimeRecord& irt, int layer = -1);
74 double getEndTimeOfROFMax() const
75 {
77 return (mParams.getROFrameLength() * (double)(mROFrameMax + 1)) + mParams.getTimeOffset();
78 }
79
80 void setContinuous(bool v) { mParams.setContinuous(v); }
81 bool isContinuous() const { return mParams.isContinuous(); }
82 void fillOutputContainer(uint32_t maxFrame = 0xffffffff, int layer = -1);
83
84 void setDigiParams(const o2::itsmft::DigiParams& par) { mParams = par; }
85 const o2::itsmft::DigiParams& getDigitParams() const { return mParams; }
86
87 // provide the common itsmft::GeometryTGeo to access matrices and segmentation
88 void setGeometry(const o2::itsmft::GeometryTGeo* gm) { mGeometry = gm; }
89
90 uint32_t getEventROFrameMin() const { return mEventROFrameMin; }
91 uint32_t getEventROFrameMax() const { return mEventROFrameMax; }
93 {
94 mEventROFrameMin = 0xffffffff;
95 mEventROFrameMax = 0;
96 }
98 {
99 mROFrameMin = 0;
100 mROFrameMax = 0;
101 mNewROFrame = 0;
102 }
103
104 private:
105 void processHit(const o2::itsmft::Hit& hit, uint32_t& maxFr, int evID, int srcID, int lay);
106 void registerDigits(ChipDigitsContainer& chip, uint32_t roFrame, float tInROF, int nROF,
107 uint16_t row, uint16_t col, int nEle, o2::MCCompLabel& lbl, int lay);
108
109 ExtraDig* getExtraDigBuffer(uint32_t roFrame)
110 {
111 if (mROFrameMin > roFrame) {
112 return nullptr; // nothing to do
113 }
114 int ind = roFrame - mROFrameMin;
115 while (ind >= int(mExtraBuff.size())) {
116 mExtraBuff.emplace_back(std::make_unique<ExtraDig>());
117 }
118 return mExtraBuff[ind].get();
119 }
120
121 static constexpr float sec2ns = 1e9;
122
123 o2::itsmft::DigiParams mParams;
124 o2::InteractionTimeRecord mEventTime;
125 o2::InteractionRecord mIRFirstSampledTF;
126 double mCollisionTimeWrtROF{};
127 uint32_t mROFrameMin = 0;
128 uint32_t mROFrameMax = 0;
129 uint32_t mNewROFrame = 0;
130 bool mIsBeforeFirstRO = false;
131
132 uint32_t mEventROFrameMin = 0xffffffff;
133 uint32_t mEventROFrameMax = 0;
134
135 int mNumberOfChips = 0;
136 const o2::itsmft::AlpideSimResponse* mAlpSimRespMFT = nullptr;
137 const o2::itsmft::AlpideSimResponse* mAlpSimRespIB = nullptr;
138 const o2::itsmft::AlpideSimResponse* mAlpSimRespOB = nullptr;
139 const o2::itsmft::AlpideSimResponse* mAlpSimResp[2]; // simulated response
140 const o2::itsmft::GeometryTGeo* mGeometry = nullptr;
141
142 std::vector<o2::itsmft::ChipDigitsContainer> mChips;
143 std::deque<std::unique_ptr<ExtraDig>> mExtraBuff;
144
145 std::vector<o2::itsmft::Digit>* mDigits = nullptr;
146 std::vector<o2::itsmft::ROFRecord>* mROFRecords = nullptr;
148 const o2::itsmft::NoiseMap* mNoiseMap = nullptr;
149 const o2::itsmft::NoiseMap* mDeadChanMap = nullptr;
150
151 ClassDefOverride(Digitizer, 2);
152};
153} // namespace itsmft
154} // namespace o2
155
156#endif /* ALICEO2_ITSMFT_DIGITIZER_H */
Definition of the ITSMFT Alpide simulated response parametrization.
Definition of the ITSMFT digit.
Simulation parameters for the ALIPIDE chip.
Definition of the ITSMFT Hit class.
int32_t i
Definition of the GeometryTGeo class : common part for ITS and MFT.
Definition of the ITSMFT ROFrame (trigger) record.
transient container for single chip digits accumulation
Definition of the ITSMFT NoiseMap.
uint32_t col
Definition RawData.h:4
Container for similated points connected to a given chip.
double getTimeOffset() const
Definition DigiParams.h:70
bool isContinuous() const
Definition DigiParams.h:54
float getROFrameLength(int layer=-1) const
Definition DigiParams.h:60
void setContinuous(bool v)
Definition DigiParams.h:53
double getEndTimeOfROFMax() const
Definition Digitizer.h:74
void setDeadChannelsMap(const o2::itsmft::NoiseMap *mp)
Definition Digitizer.h:64
const o2::itsmft::DigiParams & getDigitParams() const
Definition Digitizer.h:85
void fillOutputContainer(uint32_t maxFrame=0xffffffff, int layer=-1)
Digitizer(const Digitizer &)=delete
void setGeometry(const o2::itsmft::GeometryTGeo *gm)
Definition Digitizer.h:88
auto getChipResponse(int chipID)
Definition Digitizer.cxx:95
void setMCLabels(o2::dataformats::MCTruthContainer< o2::MCCompLabel > *mclb)
Definition Digitizer.h:59
void setAlpideResponse(const o2::itsmft::AlpideSimResponse *resp, int i)
Definition Digitizer.h:67
void setContinuous(bool v)
Definition Digitizer.h:80
~Digitizer() override=default
Digitizer & operator=(const Digitizer &)=delete
void setNoiseMap(const o2::itsmft::NoiseMap *mp)
Definition Digitizer.h:63
void setROFRecords(std::vector< o2::itsmft::ROFRecord > *rec)
Definition Digitizer.h:60
void setDigits(std::vector< o2::itsmft::Digit > *dig)
Definition Digitizer.h:58
uint32_t getEventROFrameMax() const
Definition Digitizer.h:91
Digitizer(Digitizer &&)=delete
Digitizer & operator=(Digitizer &&)=delete
bool isContinuous() const
Definition Digitizer.h:81
const o2::itsmft::DigiParams & getParams() const
Definition Digitizer.h:62
o2::itsmft::DigiParams & getParams()
Definition Digitizer.h:61
void setEventTime(const o2::InteractionTimeRecord &irt, int layer=-1)
uint32_t getEventROFrameMin() const
Definition Digitizer.h:90
void setDigiParams(const o2::itsmft::DigiParams &par)
Definition Digitizer.h:84
NoiseMap class for the ITS and MFT.
Definition NoiseMap.h:39
const GLdouble * v
Definition glcorearb.h:832
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
GPUReconstruction * rec
std::vector< int > row