38 int collId,
int source,
double dt)
54 LOG(info) <<
"Use default calibration";
57 std::map<std::string, std::string> metadata;
70 LOG(info) <<
"Use default trigger map and turn-on curves";
73 std::map<std::string, std::string> metadata;
85 for (
int i = NCHANNELS;
i--;) {
88 int nBgTrigFirst = digitsOut.size();
90 if (digitsBg.size() == 0) {
91 for (
int i = NCHANNELS;
i--;) {
96 mArrayD[
i].setAmplitude(energy);
97 mArrayD[
i].setTime(
time);
98 mArrayD[
i].setAbsId(
i + OFFSET);
102 for (
auto& dBg : digitsBg) {
104 digitsOut.emplace_back(dBg);
106 mArrayD[dBg.getAbsId() - OFFSET] = dBg;
112 for (
auto&
h : *hits) {
113 short absId =
h.GetDetectorID();
114 short i = absId - OFFSET;
115 float energy =
h.GetEnergyLoss();
119 float time =
h.GetTime() + dt * 1.e-9;
124 if (mArrayD[
i].getAmplitude() > 0) {
126 if (mArrayD[
i].isHighGain()) {
127 mArrayD[
i].addEnergyTime(energy,
time);
130 float hglgratio = mCalibParams->getHGLGRatio(absId);
131 mArrayD[
i].setAmplitude(mArrayD[
i].getAmplitude() / hglgratio);
132 mArrayD[
i].setHighGain(
false);
135 float hglgratio = mCalibParams->getHGLGRatio(absId);
137 mArrayD[
i].addEnergyTime(energy,
time);
141 if (mArrayD[
i].isHighGain()) {
142 mArrayD[
i].setAmplitude(energy);
144 float hglgratio = mCalibParams->getHGLGRatio(absId);
145 mArrayD[
i].setAmplitude(energy / hglgratio);
147 mArrayD[
i].setTime(
time);
148 mArrayD[
i].setAbsId(absId);
152 int labelIndex = mArrayD[
i].getLabel();
153 if (labelIndex == -1) {
157 mArrayD[
i].setLabel(labelIndex);
160 gsl::span<MCLabel> sp = labels.
getLabels(labelIndex);
174 std::sort(sp.begin(), sp.end(),
179 mArrayD[
i].setLabel(-1);
183 bool mL0Fired =
false;
184 float sum2x2[65][57];
185 float time2x2[65][57];
187 for (
short module = 1;
module < 5;
module++) {
188 short xmin = (module == 1) ? 33 : 1;
189 for (
short ix = xmin; ix < 64; ix++) {
190 for (
short iz = 1; iz < 56; iz++) {
193 if (!mTrigUtils->isGood2x2(tileId)) {
196 short i1, i2, i3, i4;
198 relId[1] = relId[1] + 1;
200 relId[2] = relId[2] + 1;
202 relId[1] = relId[1] - 1;
204 sum2x2[ix][iz] = mArrayD[i1 - OFFSET].getAmplitude() + mArrayD[i2 - OFFSET].getAmplitude() +
205 mArrayD[i3 - OFFSET].getAmplitude() + mArrayD[i4 - OFFSET].getAmplitude();
206 float ampMax = mArrayD[i1 - OFFSET].getAmplitude();
207 tt = mArrayD[i1 - OFFSET].getTime();
208 if (mArrayD[i2 - OFFSET].getAmplitude() > ampMax) {
209 ampMax = mArrayD[i2 - OFFSET].getAmplitude();
210 tt = mArrayD[i2 - OFFSET].getTime();
212 if (mArrayD[i3 - OFFSET].getAmplitude() > ampMax) {
213 ampMax = mArrayD[i3 - OFFSET].getAmplitude();
214 tt = mArrayD[i3 - OFFSET].getTime();
216 if (mArrayD[i4 - OFFSET].getAmplitude() > ampMax) {
217 tt = mArrayD[i4 - OFFSET].getTime();
219 time2x2[ix][iz] =
tt;
222 mL0Fired |= mTrigUtils->isFiredMC2x2(sum2x2[ix][iz], module,
short(ix),
short(iz));
227 for (
int ibgTr = nBgTrigFirst; ibgTr < digitsOut.size(); ibgTr++) {
228 Digit& bgTr = digitsOut[ibgTr];
240 digitsOut.emplace_back(tileId, sum2x2[ix][iz],
tt,
true, -1);
248 for (
short ix = xmin; ix < 62; ix++) {
249 for (
short iz = 1; iz < 54; iz++) {
252 if (!mTrigUtils->isGood4x4(tileId)) {
255 float sum4x4 = sum2x2[ix][iz] + sum2x2[ix][iz + 2] + sum2x2[ix + 2][iz] + sum2x2[ix + 2][iz + 2];
257 mL0Fired |= mTrigUtils->isFiredMC4x4(sum4x4, module,
short(ix),
short(iz));
259 tt = time2x2[ix][iz];
260 float ampMax = sum2x2[ix][iz];
261 if (sum2x2[ix][iz + 2] > ampMax) {
262 ampMax = sum2x2[ix][iz + 2];
263 tt = sum2x2[ix][iz + 2];
265 if (sum2x2[ix + 2][iz] > ampMax) {
266 ampMax = sum2x2[ix + 2][iz];
267 tt = sum2x2[ix + 2][iz];
269 if (sum2x2[ix + 2][iz + 2] > ampMax) {
270 tt = sum2x2[ix][iz + 2];
275 for (
int ibgTr = nBgTrigFirst; ibgTr < digitsOut.size(); ibgTr++) {
276 Digit& bgTr = digitsOut[ibgTr];
288 digitsOut.emplace_back(tileId, sum4x4,
tt,
false, -1);
295 for (
int i = 0;
i < NCHANNELS;
i++) {
297 digitsOut.push_back(mArrayD[
i]);
std::enable_if<!std::is_base_of< o2::conf::ConfigurableParam, T >::value, T * >::type retrieveFromTFileAny(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp=-1, std::map< std::string, std::string > *headers=nullptr, std::string const &etag="", const std::string &createdNotAfter="", const std::string &createdNotBefore="") const
void processHits(const std::vector< Hit > *mHits, const std::vector< Digit > &digitsBg, std::vector< Digit > &digitsOut, o2::dataformats::MCTruthContainer< MCLabel > &mLabels, int source, int entry, double dt)
Steer conversion of hits to digits.