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() override = default;
53 Digitizer(const Digitizer&) = delete;
54 Digitizer& operator=(const Digitizer&) = delete;
55
56 void setDigits(std::vector<o2::itsmft::Digit>* dig) { mDigits = dig; }
58 void setROFRecords(std::vector<o2::itsmft::ROFRecord>* rec) { mROFRecords = rec; }
60 const o2::itsmft::DigiParams& getParams() const { return mParams; }
61 void setNoiseMap(const o2::itsmft::NoiseMap* mp) { mNoiseMap = mp; }
62 void setDeadChannelsMap(const o2::itsmft::NoiseMap* mp) { mDeadChanMap = mp; }
63
64 void init();
65 void setAlpideResponse(const o2::itsmft::AlpideSimResponse* resp, int i) { mAlpSimResp[i] = resp; }
66
67 auto getChipResponse(int chipID);
68
70 void process(const std::vector<Hit>* hits, int evID, int srcID);
72 double getEndTimeOfROFMax() const
73 {
75 return mParams.getROFrameLength() * (mROFrameMax + 1) + mParams.getTimeOffset();
76 }
77
78 void setContinuous(bool v) { mParams.setContinuous(v); }
79 bool isContinuous() const { return mParams.isContinuous(); }
80 void fillOutputContainer(uint32_t maxFrame = 0xffffffff);
81
82 void setDigiParams(const o2::itsmft::DigiParams& par) { mParams = par; }
83 const o2::itsmft::DigiParams& getDigitParams() const { return mParams; }
84
85 // provide the common itsmft::GeometryTGeo to access matrices and segmentation
86 void setGeometry(const o2::itsmft::GeometryTGeo* gm) { mGeometry = gm; }
87
88 uint32_t getEventROFrameMin() const { return mEventROFrameMin; }
89 uint32_t getEventROFrameMax() const { return mEventROFrameMax; }
91 {
92 mEventROFrameMin = 0xffffffff;
93 mEventROFrameMax = 0;
94 }
95
96 private:
97 void processHit(const o2::itsmft::Hit& hit, uint32_t& maxFr, int evID, int srcID);
98 void registerDigits(ChipDigitsContainer& chip, uint32_t roFrame, float tInROF, int nROF,
99 uint16_t row, uint16_t col, int nEle, o2::MCCompLabel& lbl);
100
101 ExtraDig* getExtraDigBuffer(uint32_t roFrame)
102 {
103 if (mROFrameMin > roFrame) {
104 return nullptr; // nothing to do
105 }
106 int ind = roFrame - mROFrameMin;
107 while (ind >= int(mExtraBuff.size())) {
108 mExtraBuff.emplace_back(std::make_unique<ExtraDig>());
109 }
110 return mExtraBuff[ind].get();
111 }
112
113 static constexpr float sec2ns = 1e9;
114
115 o2::itsmft::DigiParams mParams;
116 o2::InteractionTimeRecord mEventTime;
117 o2::InteractionRecord mIRFirstSampledTF;
118 double mCollisionTimeWrtROF;
119 uint32_t mROFrameMin = 0;
120 uint32_t mROFrameMax = 0;
121 uint32_t mNewROFrame = 0;
122 bool mIsBeforeFirstRO = false;
123
124 uint32_t mEventROFrameMin = 0xffffffff;
125 uint32_t mEventROFrameMax = 0;
126
127 int mNumberOfChips = 0;
128 const o2::itsmft::AlpideSimResponse* mAlpSimRespMFT = nullptr;
129 const o2::itsmft::AlpideSimResponse* mAlpSimRespIB = nullptr;
130 const o2::itsmft::AlpideSimResponse* mAlpSimRespOB = nullptr;
131 const o2::itsmft::AlpideSimResponse* mAlpSimResp[2]; // simulated response
132 const o2::itsmft::GeometryTGeo* mGeometry = nullptr;
133
134 std::vector<o2::itsmft::ChipDigitsContainer> mChips;
135 std::deque<std::unique_ptr<ExtraDig>> mExtraBuff;
136
137 std::vector<o2::itsmft::Digit>* mDigits = nullptr;
138 std::vector<o2::itsmft::ROFRecord>* mROFRecords = nullptr;
140 const o2::itsmft::NoiseMap* mNoiseMap = nullptr;
141 const o2::itsmft::NoiseMap* mDeadChanMap = nullptr;
142
143 ClassDefOverride(Digitizer, 2);
144};
145} // namespace itsmft
146} // namespace o2
147
148#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:68
bool isContinuous() const
Definition DigiParams.h:52
float getROFrameLength() const
Definition DigiParams.h:58
void setContinuous(bool v)
Definition DigiParams.h:51
double getEndTimeOfROFMax() const
Definition Digitizer.h:72
void setDeadChannelsMap(const o2::itsmft::NoiseMap *mp)
Definition Digitizer.h:62
const o2::itsmft::DigiParams & getDigitParams() const
Definition Digitizer.h:83
void setEventTime(const o2::InteractionTimeRecord &irt)
Digitizer(const Digitizer &)=delete
void setGeometry(const o2::itsmft::GeometryTGeo *gm)
Definition Digitizer.h:86
auto getChipResponse(int chipID)
Definition Digitizer.cxx:93
void setMCLabels(o2::dataformats::MCTruthContainer< o2::MCCompLabel > *mclb)
Definition Digitizer.h:57
void setAlpideResponse(const o2::itsmft::AlpideSimResponse *resp, int i)
Definition Digitizer.h:65
void setContinuous(bool v)
Definition Digitizer.h:78
~Digitizer() override=default
Digitizer & operator=(const Digitizer &)=delete
void setNoiseMap(const o2::itsmft::NoiseMap *mp)
Definition Digitizer.h:61
void setROFRecords(std::vector< o2::itsmft::ROFRecord > *rec)
Definition Digitizer.h:58
void setDigits(std::vector< o2::itsmft::Digit > *dig)
Definition Digitizer.h:56
uint32_t getEventROFrameMax() const
Definition Digitizer.h:89
bool isContinuous() const
Definition Digitizer.h:79
const o2::itsmft::DigiParams & getParams() const
Definition Digitizer.h:60
o2::itsmft::DigiParams & getParams()
Definition Digitizer.h:59
void fillOutputContainer(uint32_t maxFrame=0xffffffff)
uint32_t getEventROFrameMin() const
Definition Digitizer.h:88
void setDigiParams(const o2::itsmft::DigiParams &par)
Definition Digitizer.h:82
NoiseMap class for the ITS and MFT.
Definition NoiseMap.h:39
const GLdouble * v
Definition glcorearb.h:832
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
GPUReconstruction * rec
std::vector< int > row