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 int mROFsWrtFirstRO = 0;
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.
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
auto getChipResponse(int chipID)
Definition Digitizer.cxx:95
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
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)
void process(const std::vector< Hit > *hits, int evID, int srcID, int layer=-1)
Steer conversion of hits to digits.
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
const int float col
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
GPUReconstruction * rec
std::vector< int > row