210 if (
meInClusters.capacity() <
static_cast<unsigned int>(mult)) {
215 const std::vector<FullCluster::CluElement>* cluElist = iniClu.
getElementList();
218 std::array<float, NLMMax> xMax;
219 std::array<float, NLMMax>
zMax;
220 std::array<float, NLMMax> eMax;
223 std::array<float, NLMMax>
a;
224 std::array<float, NLMMax>
b;
225 std::array<float, NLMMax>
c;
227 for (
int iclu = 0; iclu < nMax; iclu++) {
228 xMax[iclu] = (*cluElist)[digitId[iclu]].localX;
229 zMax[iclu] = (*cluElist)[digitId[iclu]].localZ;
230 eMax[iclu] = 2. * (*cluElist)[digitId[iclu]].energy;
233 std::array<float, NLMMax> prop;
237 bool insuficientAccuracy =
true;
239 insuficientAccuracy =
false;
240 std::memset(&
a, 0,
sizeof a);
241 std::memset(&
b, 0,
sizeof b);
242 std::memset(&
c, 0,
sizeof c);
244 for (
int idig = 0; idig < mult; idig++) {
245 auto it = (*cluElist)[idig];
246 for (
int iclu = 0; iclu < nMax; iclu++) {
252 for (
int idig = 0; idig < mult; idig++) {
253 auto it = (*cluElist)[idig];
254 for (
int iclu = 0; iclu < nMax; iclu++) {
255 a[iclu] +=
mfij[idig][iclu] *
mfij[idig][iclu];
256 b[iclu] += it.energy *
mfij[idig][iclu];
257 for (
int kclu = 0; kclu < nMax; kclu++) {
261 c[iclu] += eMax[kclu] *
mfij[idig][iclu] *
mfij[idig][kclu];
266 for (
int iclu = 0; iclu < nMax; iclu++) {
268 float eNew = (
b[iclu] -
c[iclu]) /
a[iclu];
277 for (
int idig = 0; idig < mult; idig++) {
278 float eEstimated = 0;
279 for (
int iclu = 0; iclu < nMax; iclu++) {
280 prop[iclu] = eMax[iclu] *
mfij[idig][iclu];
281 eEstimated += prop[iclu];
283 if (eEstimated == 0.) {
287 for (
int iclu = 0; iclu < nMax; iclu++) {
288 meInClusters[idig][iclu] = (*cluElist)[idig].energy * prop[iclu] / eEstimated;
293 for (
int iclu = 0; iclu < nMax; iclu++) {
294 float oldX = xMax[iclu];
295 float oldZ =
zMax[iclu];
298 for (
int idig = 0; idig < mult; idig++) {
304 for (
int idig = 0; idig < mult; idig++) {
309 xMax[iclu] += (*cluElist)[idig].localX *
w;
310 zMax[iclu] += (*cluElist)[idig].localZ *
w;
326 for (
int iclu = 0; iclu < nMax; iclu++) {
330 for (
int idig = 0; idig < mult; idig++) {
336 clu.addDigit((*cluElist)[idig].absId, eDigit, (*cluElist)[idig].label);
377 const std::vector<FullCluster::CluElement>* vl =
clu->getElementList();
378 auto ll = vl->begin();
379 while (ll != vl->end()) {
385 gsl::span<const o2::MCCompLabel> spDigList = dmc->
getLabels(
i);
386 gsl::span<o2::MCCompLabel> spCluList = cluMC->
getLabels(labelIndex);
387 auto digL = spDigList.begin();
388 while (digL != spDigList.end()) {
390 auto cluL = spCluList.begin();
391 while (cluL != spCluList.end()) {
392 if (*digL == *cluL) {
void process(gsl::span< const Digit > digits, gsl::span< const TriggerRecord > dtr, const o2::dataformats::MCTruthContainer< o2::MCCompLabel > *dmc, std::vector< Cluster > *clusters, std::vector< TriggerRecord > *trigRec, o2::dataformats::MCTruthContainer< o2::MCCompLabel > *cluMC, std::vector< Digit > *calibDigits)