16 #include "TLorentzVector.h"
28 ATH_CHECK(m_measurementContainerKey.initialize());
29 ATH_CHECK(m_monitoringTracks.initialize());
30 return StatusCode::SUCCESS;
35 return StatusCode::SUCCESS;
41 if (!tracks.
isValid()) {
return StatusCode::SUCCESS; }
45 if (PixelMonitoringTrack.
record(std::make_unique<xAOD::TrackParticleContainer>(),
46 std::make_unique<xAOD::TrackParticleAuxContainer>()).isFailure()) {
47 return StatusCode::SUCCESS;
51 if (!pixClusters.
isValid()) {
return StatusCode::SUCCESS; }
54 const int nbin_charge = 60;
55 const int nbin_tot = 120;
56 const int nbin_eta = 30;
57 const int nbin_dedx = 300;
58 const int nbin_size = 10;
59 const int nbin_reso = 80;
60 const int nbin_occ = 80;
62 std::vector<std::vector<int>> clusCharge(11,std::vector<int>(nbin_charge,0));
63 std::vector<std::vector<int>> clusToT(11,std::vector<int>(nbin_tot,0));
64 std::vector<std::vector<int>> clusEta(11,std::vector<int>(nbin_eta,0));
65 std::vector<std::vector<int>> clusHitEta(11,std::vector<int>(nbin_eta,0));
66 std::vector<std::vector<int>> clusdEdx(11,std::vector<int>(nbin_dedx,0));
67 std::vector<std::vector<int>> clusSizeX(11,std::vector<int>(nbin_size,0));
68 std::vector<std::vector<int>> clusSizeZ(11,std::vector<int>(nbin_size,0));
69 std::vector<std::vector<int>> clusResidualX(11,std::vector<int>(nbin_reso,0));
70 std::vector<std::vector<int>> clusResidualY(11,std::vector<int>(nbin_reso,0));
71 std::vector<std::vector<int>> clusHole(11,std::vector<int>(nbin_eta,0));
72 std::vector<std::vector<int>> clusOcc(11,std::vector<int>(nbin_occ,0));
74 std::vector<int> trkEta(nbin_eta,0);
75 std::vector<int> trkHole(nbin_eta,0);
76 std::vector<int> trkdEdx(nbin_dedx,0);
81 std::vector<float> tmpCov(15,0.);
89 if (trk->pt()<1000.0 && nPixHits<4) {
continue; }
90 if (trk->pt()<1000.0 &&
nSCTHits<1) {
continue; }
92 std::vector<uint64_t> holeIndex;
93 std::vector<int> clusterLayer;
94 std::vector<int> clusterBEC;
95 std::vector<int> clusterModulePhi;
96 std::vector<int> clusterModuleEta;
97 std::vector<float> clusterCharge;
98 std::vector<int> clusterToT;
99 std::vector<int> clusterL1A;
100 std::vector<int> clusterIsSplit;
101 std::vector<int> clusterSize;
102 std::vector<int> clusterSizePhi;
103 std::vector<int> clusterSizeZ;
104 std::vector<bool> isEdge;
105 std::vector<bool> isOverflow;
107 std::vector<float> trackTheta;
108 std::vector<float> trackX;
109 std::vector<float> trackY;
110 std::vector<float> localX;
111 std::vector<float> localY;
112 std::vector<float> globalX;
113 std::vector<float> globalY;
115 std::vector<float> unbiasedResidualX;
116 std::vector<float> unbiasedResidualY;
117 std::vector<int> clusterIsolation10x2;
118 std::vector<int> clusterIsolation20x4;
119 std::vector<int> numTotalClustersPerModule;
120 std::vector<int> numTotalPixelsPerModule;
121 std::vector<float> moduleLorentzShift;
123 std::vector<std::vector<int>> rdoToT;
124 std::vector<std::vector<float>> rdoCharge;
125 std::vector<std::vector<int>> rdoPhi;
126 std::vector<std::vector<int>> rdoEta;
129 for (
const auto & msos_iter : measurementsOnTrack) {
130 if (!msos_iter.isValid()) {
continue; }
157 for (
const auto *clus_itr : *pixClusters) {
158 if (clus_itr->identifier()!=(msosClus)->identifier()) {
continue; }
159 if (chargeAcc(*clus_itr)!=chargeAcc(*msosClus)) {
continue; }
161 clusterLayer.push_back(layerAcc(*clus_itr));
162 clusterBEC.push_back(becAcc(*clus_itr));
163 clusterModulePhi.push_back(phi_moduleAcc(*clus_itr));
164 clusterModuleEta.push_back(eta_moduleAcc(*clus_itr));
165 clusterCharge.push_back(chargeAcc(*clus_itr));
166 clusterToT.push_back(ToTAcc(*clus_itr));
167 clusterL1A.push_back(LVL1AAcc(*clus_itr));
168 clusterIsSplit.push_back(isSplitAcc(*clus_itr));
169 clusterSize.push_back(nRDOAcc(*clus_itr));
170 clusterSizePhi.push_back(sizePhiAcc(*clus_itr));
171 clusterSizeZ.push_back(sizeZAcc(*clus_itr));
175 trackX.push_back(msos->
localX());
176 trackY.push_back(msos->
localY());
177 localX.push_back(clus_itr->localX());
178 localY.push_back(clus_itr->localY());
179 globalX.push_back(clus_itr->globalX());
180 globalY.push_back(clus_itr->globalY());
181 globalZ.push_back(clus_itr->globalZ());
184 moduleLorentzShift.push_back(LorentzShiftAcc(*clus_itr));
188 int numNeighborCluster10x2 = 0;
189 int numNeighborCluster20x4 = 0;
190 int nTotalClustersPerModule = 0;
191 int nTotalPixelsPerModule = 0;
192 for (
const auto *clus_neighbor : *pixClusters) {
193 if (layerAcc(*clus_neighbor)==layerAcc(*clus_itr)
194 && becAcc(*clus_neighbor)==becAcc(*clus_itr)
195 && phi_moduleAcc(*clus_neighbor)==phi_moduleAcc(*clus_itr)
196 && eta_moduleAcc(*clus_neighbor)==eta_moduleAcc(*clus_itr)) {
197 float deltaX = std::abs(clus_neighbor->localX()-clus_itr->localX());
198 float deltaY = std::abs(clus_neighbor->localY()-clus_itr->localY());
199 nTotalClustersPerModule++;
200 nTotalPixelsPerModule += nRDOAcc(*clus_neighbor);
202 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
203 if (
deltaX<0.500 &&
deltaY<0.500) { numNeighborCluster10x2++; }
204 if (
deltaX<1.000 &&
deltaY<1.000) { numNeighborCluster20x4++; }
207 if (
deltaX<0.500 &&
deltaY<0.800) { numNeighborCluster10x2++; }
208 if (
deltaX<1.000 &&
deltaY<1.600) { numNeighborCluster20x4++; }
213 clusterIsolation10x2.push_back(numNeighborCluster10x2);
214 clusterIsolation20x4.push_back(numNeighborCluster20x4);
215 numTotalClustersPerModule.push_back(nTotalClustersPerModule);
216 numTotalPixelsPerModule.push_back(nTotalPixelsPerModule);
220 bool checkEdge =
false;
221 bool checkOverflow =
false;
224 std::vector<int> tmpToT;
225 std::vector<float> tmpCharge;
226 std::vector<int> tmpPhi;
227 std::vector<int> tmpEta;
230 int nrdo = rdo_phi_pixel_indexAcc.
isAvailable(*clus_itr) ? rdo_phi_pixel_indexAcc(*clus_itr).size() : -1;
231 for (
int i=0;
i<nrdo;
i++) {
233 int phi = rdo_phi_pixel_indexAcc(*clus_itr)[
i];
234 if (
phi<5) { checkEdge=
true; }
235 if (
phi>320) { checkEdge=
true; }
237 int eta = rdo_phi_pixel_indexAcc(*clus_itr)[
i];
238 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
239 if (eta_moduleAcc(*clus_itr)>-7 && eta_moduleAcc(*clus_itr)<6) {
240 if (
eta<5) { checkEdge=
true; }
241 if (
eta>154) { checkEdge=
true; }
244 if (
eta<5) { checkEdge=
true; }
245 if (
eta>74) { checkEdge=
true; }
249 if (
eta<5) { checkEdge=
true; }
250 if (
eta>154) { checkEdge=
true; }
253 int tot = rdo_totAcc(*clus_itr)[
i];
254 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
255 if (
tot==16) { checkOverflow=
true; }
257 else if (layerAcc(*clus_itr)==1 && becAcc(*clus_itr)==0) {
258 if (
tot==150) { checkOverflow=
true; }
261 if (
tot==255) { checkOverflow=
true; }
264 float charge = rdo_chargeAcc(*clus_itr)[
i];
265 if (trk->pt()>2000.0) {
266 tmpToT.push_back(
tot);
267 tmpCharge.push_back(
charge);
268 tmpPhi.push_back(
phi);
269 tmpEta.push_back(
eta);
272 isEdge.push_back(checkEdge);
273 isOverflow.push_back(checkOverflow);
275 rdoToT.push_back(tmpToT);
276 rdoCharge.push_back(tmpCharge);
277 rdoPhi.push_back(tmpPhi);
278 rdoEta.push_back(tmpEta);
283 if (m_storeMode==1) {
321 d0err(*trk) = trk->definingParametersCovMatrixVec().at(0);
322 z0err(*trk) = trk->definingParametersCovMatrixVec().at(2);
323 HoleIndex(*trk) = std::move(holeIndex);
324 ClusterLayer(*trk) = std::move(clusterLayer);
325 ClusterBEC(*trk) = std::move(clusterBEC);
326 ClusterModulePhi(*trk) = std::move(clusterModulePhi);
327 ClusterModuleEta(*trk) = std::move(clusterModuleEta);
328 ClusterCharge(*trk) = std::move(clusterCharge);
329 ClusterToT(*trk) = std::move(clusterToT);
330 ClusterL1A(*trk) = std::move(clusterL1A);
331 ClusterIsSplit(*trk) = std::move(clusterIsSplit);
332 ClusterSize(*trk) = std::move(clusterSize);
333 ClusterSizePhi(*trk) = std::move(clusterSizePhi);
334 ClusterSizeZ(*trk) = std::move(clusterSizeZ);
335 ClusterIsEdge(*trk) = std::move(isEdge);
336 ClusterIsOverflow(*trk) = std::move(isOverflow);
337 TrackLocalPhi(*trk) = std::move(
trackPhi);
338 TrackLocalTheta(*trk) = std::move(trackTheta);
339 TrackLocalX(*trk) = std::move(trackX);
340 TrackLocalY(*trk) = std::move(trackY);
341 ClusterLocalX(*trk) = std::move(localX);
342 ClusterLocalY(*trk) = std::move(localY);
343 ClusterGlobalX(*trk) = std::move(globalX);
344 ClusterGlobalY(*trk) = std::move(globalY);
345 ClusterGlobalZ(*trk) = std::move(
globalZ);
346 UnbiasedResidualX(*trk) = std::move(unbiasedResidualX);
347 UnbiasedResidualY(*trk) = std::move(unbiasedResidualY);
348 ClusterIsolation10x2(*trk) = std::move(clusterIsolation10x2);
349 ClusterIsolation20x4(*trk) = std::move(clusterIsolation20x4);
350 NumTotalClustersPerModule(*trk) = std::move(numTotalClustersPerModule);
351 NumTotalPixelsPerModule(*trk) = std::move(numTotalPixelsPerModule);
352 ModuleLorentzShift(*trk) = std::move(moduleLorentzShift);
353 RdoToT(*trk) = std::move(rdoToT);
354 RdoCharge(*trk) = std::move(rdoCharge);
355 RdoPhi(*trk) = std::move(rdoPhi);
356 RdoEta(*trk) = std::move(rdoEta);
369 bool passLooseCut =
static_cast<bool>(m_selector->accept(trk));
370 if (!passLooseCut) {
continue; }
375 int checkIBL(0),check3D(0),checkBLY(0),checkLY1(0),checkLY2(0),checkEA1(0),checkEA2(0),checkEA3(0),checkEC1(0),checkEC2(0),checkEC3(0);
376 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
377 if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==0) {
378 if (clusterModuleEta.at(
i)>-7 && clusterModuleEta.at(
i)<6) { checkIBL++; }
381 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==1) { checkBLY++; }
382 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==2) { checkLY1++; }
383 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==3) { checkLY2++; }
384 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==0) { checkEA1++; }
385 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==1) { checkEA2++; }
386 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==2) { checkEA3++; }
387 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==0) { checkEC1++; }
388 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==1) { checkEC2++; }
389 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==2) { checkEC3++; }
392 if (trk->pt()>2000.0 && nPixelDeadSensor==0) {
393 int ietabin = trunc((trk->eta()+3.0)/0.2);
395 std::for_each((trkEta.begin()+ietabin),(trkEta.begin()+ietabin+1),[](
int &
n){ n++; });
396 if (
numberOfPixelHoles>0) { std::for_each((trkHole.begin()+ietabin),(trkHole.begin()+ietabin+1),[](
int &
n){ n++; }); }
398 if (checkBLY>0 && checkLY1>0 && checkLY2>0) { std::for_each((clusEta[0].
begin()+ietabin),(clusEta[0].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkIBL>0) { std::for_each((clusHitEta[0].
begin()+ietabin),(clusHitEta[0].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
399 if (checkBLY>0 && checkEC2>0 && checkEC3>0) { std::for_each((clusEta[1].
begin()+ietabin),(clusEta[1].
begin()+ietabin+1),[](
int &
n){
n++; });
if (check3D>0) { std::for_each((clusHitEta[1].
begin()+ietabin),(clusHitEta[1].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
400 if (checkIBL>0 && checkLY1>0 && checkLY2>0) { std::for_each((clusEta[2].
begin()+ietabin),(clusEta[2].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkBLY>0) { std::for_each((clusHitEta[2].
begin()+ietabin),(clusHitEta[2].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
401 if (checkIBL>0 && checkBLY>0 && checkLY2>0) { std::for_each((clusEta[3].
begin()+ietabin),(clusEta[3].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkLY1>0) { std::for_each((clusHitEta[3].
begin()+ietabin),(clusHitEta[3].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
402 if (checkIBL>0 && checkBLY>0 && checkLY1>0) { std::for_each((clusEta[4].
begin()+ietabin),(clusEta[4].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkLY2>0) { std::for_each((clusHitEta[4].
begin()+ietabin),(clusHitEta[4].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
403 if (checkIBL>0 && checkEA2>0 && checkEA3>0) { std::for_each((clusEta[5].
begin()+ietabin),(clusEta[5].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEA1>0) { std::for_each((clusHitEta[5].
begin()+ietabin),(clusHitEta[5].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
404 if (checkIBL>0 && checkEA1>0 && checkEA3>0) { std::for_each((clusEta[6].
begin()+ietabin),(clusEta[6].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEA2>0) { std::for_each((clusHitEta[6].
begin()+ietabin),(clusHitEta[6].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
405 if (checkIBL>0 && checkEA1>0 && checkEA2>0) { std::for_each((clusEta[7].
begin()+ietabin),(clusEta[7].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEA3>0) { std::for_each((clusHitEta[7].
begin()+ietabin),(clusHitEta[7].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
406 if (checkIBL>0 && checkEC2>0 && checkEC3>0) { std::for_each((clusEta[8].
begin()+ietabin),(clusEta[8].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEC1>0) { std::for_each((clusHitEta[8].
begin()+ietabin),(clusHitEta[8].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
407 if (checkIBL>0 && checkEC1>0 && checkEC3>0) { std::for_each((clusEta[9].
begin()+ietabin),(clusEta[9].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEC2>0) { std::for_each((clusHitEta[9].
begin()+ietabin),(clusHitEta[9].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
408 if (checkIBL>0 && checkEC1>0 && checkEC2>0) { std::for_each((clusEta[10].
begin()+ietabin),(clusEta[10].
begin()+ietabin+1),[](
int &
n){
n++; });
if (checkEC3>0) { std::for_each((clusHitEta[10].
begin()+ietabin),(clusHitEta[10].
begin()+ietabin+1),[](
int &
n){
n++; }); }}
410 for (
int i=0;
i<(
int)holeIndex.size();
i++) {
411 int becH, layerH, etaH, phiH;
412 GetLayerEtaPhiFromId(holeIndex.at(
i),&becH,&layerH,&etaH,&phiH);
413 if (becH== 0 && layerH==0) {
414 if (etaH>-7 && etaH<6) { std::for_each((clusHole[0].
begin()+ietabin),(clusHole[0].
begin()+ietabin+1),[](
int &
n){
n++; }); }
415 else { std::for_each((clusHole[1].
begin()+ietabin),(clusHole[1].
begin()+ietabin+1),[](
int &
n){
n++; }); }
417 if (becH== 0 && layerH==1) { std::for_each((clusHole[2].
begin()+ietabin),(clusHole[2].
begin()+ietabin+1),[](
int &
n){
n++; }); }
418 if (becH== 0 && layerH==2) { std::for_each((clusHole[3].
begin()+ietabin),(clusHole[3].
begin()+ietabin+1),[](
int &
n){
n++; }); }
419 if (becH== 0 && layerH==3) { std::for_each((clusHole[4].
begin()+ietabin),(clusHole[4].
begin()+ietabin+1),[](
int &
n){
n++; }); }
420 if (becH== 2 && layerH==0) { std::for_each((clusHole[5].
begin()+ietabin),(clusHole[5].
begin()+ietabin+1),[](
int &
n){
n++; }); }
421 if (becH== 2 && layerH==1) { std::for_each((clusHole[6].
begin()+ietabin),(clusHole[6].
begin()+ietabin+1),[](
int &
n){
n++; }); }
422 if (becH== 2 && layerH==2) { std::for_each((clusHole[7].
begin()+ietabin),(clusHole[7].
begin()+ietabin+1),[](
int &
n){
n++; }); }
423 if (becH==-2 && layerH==0) { std::for_each((clusHole[8].
begin()+ietabin),(clusHole[8].
begin()+ietabin+1),[](
int &
n){
n++; }); }
424 if (becH==-2 && layerH==1) { std::for_each((clusHole[9].
begin()+ietabin),(clusHole[9].
begin()+ietabin+1),[](
int &
n){
n++; }); }
425 if (becH==-2 && layerH==2) { std::for_each((clusHole[10].
begin()+ietabin),(clusHole[10].
begin()+ietabin+1),[](
int &
n){
n++; }); }
431 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { clusterEdge+=isEdge.at(
i); }
434 int clusterOverflow = 0;
435 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { clusterOverflow+=isOverflow.at(
i); }
439 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
isSplit+=clusterIsSplit.at(
i); }
443 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { iso20x4+=clusterIsolation20x4.at(
i); }
446 bool passCut =
false;
448 if (checkIBL>0 && checkBLY>0 && checkLY1>0 && checkLY2>0) {
451 else if (checkIBL>0 && checkEA1>0 && checkEA2>0 && checkEA3>0) {
454 else if (checkIBL>0 && checkEC1>0 && checkEC2>0 && checkEC3>0) {
457 else if (check3D>0 && checkEC2>0 && checkEC3>0) {
461 if (!passCut) {
continue; }
464 bool isAlphaCut =
false;
465 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
469 if (isAlphaCut) {
continue; }
471 if (trk->pt()>maxPt) {
477 float energyPair = 3.62
e-6;
478 float siDensity = 2.329;
479 float thicknessIBL = 0.0200;
480 float thickness3D = 0.0230;
481 float thicknessPIX = 0.0250;
484 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
487 float thickness = thicknessPIX;
488 if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==0) {
489 thickness = (clusterModuleEta[
i]<6 && clusterModuleEta[
i]>-7) ? thicknessIBL : thickness3D;
491 float recodEdx = clusterCharge[
i]*energyPair/thickness/siDensity*
std::cos(
alpha);
492 sumE += clusterCharge[
i]*energyPair;
495 int ibc = (clusterCharge[
i]>0.0 && clusterCharge[
i]<120000.0) ? trunc(clusterCharge[
i]/2000.0) : nbin_charge-1;
496 int ibt = (clusterToT[
i]>0 && clusterToT[
i]<120) ? trunc(clusterToT[
i]) : nbin_tot-1;
497 int ibe = (recodEdx>0.0 && recodEdx<3.0) ? trunc(recodEdx*100) : nbin_dedx-1;
498 int ibx = (clusterSizePhi[
i]>-0.5 && clusterSizePhi[
i]<9.5) ? trunc(clusterSizePhi[
i]) : nbin_size-1;
499 int ibz = (clusterSizeZ[
i]>-0.5 && clusterSizeZ[
i]<9.5) ? trunc(clusterSizeZ[
i]) : nbin_size-1;
500 int irx = (unbiasedResidualX[
i]>-0.4 && unbiasedResidualX[
i]<0.4) ? trunc((unbiasedResidualX[
i]+0.4)/0.01) : nbin_reso-1;
501 int iry = (unbiasedResidualY[
i]>-0.4 && unbiasedResidualY[
i]<0.4) ? trunc((unbiasedResidualY[
i]+0.4)/0.01) : nbin_reso-1;
502 int ibo = (numTotalPixelsPerModule[
i]>-0.1 && numTotalPixelsPerModule[
i]<160) ? trunc(numTotalPixelsPerModule[
i]/2.0) : nbin_occ-1;
505 if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==0) {
506 if (clusterModuleEta[
i]<6 && clusterModuleEta[
i]>-7) {
idx=0; }
509 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==1) {
idx=2; }
510 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==2) {
idx=3; }
511 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==3) {
idx=4; }
512 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==0) {
idx=5; }
513 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==1) {
idx=6; }
514 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==2) {
idx=7; }
515 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==0) {
idx=8; }
516 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==1) {
idx=9; }
517 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==2) {
idx=10; }
519 std::for_each((clusCharge[
idx].
begin()+ibc),(clusCharge[
idx].
begin()+ibc+1),[](
int &
n){
n++; });
520 std::for_each((clusToT[
idx].
begin()+ibt),(clusToT[
idx].
begin()+ibt+1),[](
int &
n){
n++; });
521 std::for_each((clusdEdx[
idx].
begin()+ibe),(clusdEdx[
idx].
begin()+ibe+1),[](
int &
n){
n++; });
522 std::for_each((clusSizeX[
idx].
begin()+ibx),(clusSizeX[
idx].
begin()+ibx+1),[](
int &
n){
n++; });
523 std::for_each((clusSizeZ[
idx].
begin()+ibz),(clusSizeZ[
idx].
begin()+ibz+1),[](
int &
n){
n++; });
524 std::for_each((clusResidualX[
idx].
begin()+irx),(clusResidualX[
idx].
begin()+irx+1),[](
int &
n){
n++; });
525 std::for_each((clusResidualY[
idx].
begin()+iry),(clusResidualY[
idx].
begin()+iry+1),[](
int &
n){
n++; });
526 std::for_each((clusOcc[
idx].
begin()+ibo),(clusOcc[
idx].
begin()+ibo+1),[](
int &
n){
n++; });
530 int iby = (sumE/sumX>0.0 && sumE/sumX<3.0) ? trunc(sumE/sumX*100) : 299;
531 std::for_each((trkdEdx.begin()+iby),(trkdEdx.begin()+iby+1),[](
int &
n){ n++; });
535 if (m_storeMode==2) {
538 tp->makePrivateStore(*trk_maxpt);
539 tp->setDefiningParametersCovMatrixVec(tmpCov);
666 TrackEtaIBL(*
tp) = std::move(clusEta[0]);
667 TrackEta3D(*
tp) = std::move(clusEta[1]);
668 TrackEtaBL(*
tp) = std::move(clusEta[2]);
669 TrackEtaL1(*
tp) = std::move(clusEta[3]);
670 TrackEtaL2(*
tp) = std::move(clusEta[4]);
671 TrackEtaEA1(*
tp) = std::move(clusEta[5]);
672 TrackEtaEA2(*
tp) = std::move(clusEta[6]);
673 TrackEtaEA3(*
tp) = std::move(clusEta[7]);
674 TrackEtaEC1(*
tp) = std::move(clusEta[8]);
675 TrackEtaEC2(*
tp) = std::move(clusEta[9]);
676 TrackEtaEC3(*
tp) = std::move(clusEta[10]);
677 TrackHitEtaIBL(*
tp) = std::move(clusHitEta[0]);
678 TrackHitEta3D(*
tp) = std::move(clusHitEta[1]);
679 TrackHitEtaBL(*
tp) = std::move(clusHitEta[2]);
680 TrackHitEtaL1(*
tp) = std::move(clusHitEta[3]);
681 TrackHitEtaL2(*
tp) = std::move(clusHitEta[4]);
682 TrackHitEtaEA1(*
tp) = std::move(clusHitEta[5]);
683 TrackHitEtaEA2(*
tp) = std::move(clusHitEta[6]);
684 TrackHitEtaEA3(*
tp) = std::move(clusHitEta[7]);
685 TrackHitEtaEC1(*
tp) = std::move(clusHitEta[8]);
686 TrackHitEtaEC2(*
tp) = std::move(clusHitEta[9]);
687 TrackHitEtaEC3(*
tp) = std::move(clusHitEta[10]);
688 ClusterChargeIBL(*
tp) = std::move(clusCharge[0]);
689 ClusterCharge3D(*
tp) = std::move(clusCharge[1]);
690 ClusterChargeBL(*
tp) = std::move(clusCharge[2]);
691 ClusterChargeL1(*
tp) = std::move(clusCharge[3]);
692 ClusterChargeL2(*
tp) = std::move(clusCharge[4]);
693 ClusterChargeEA1(*
tp) = std::move(clusCharge[5]);
694 ClusterChargeEA2(*
tp) = std::move(clusCharge[6]);
695 ClusterChargeEA3(*
tp) = std::move(clusCharge[7]);
696 ClusterChargeEC1(*
tp) = std::move(clusCharge[8]);
697 ClusterChargeEC2(*
tp) = std::move(clusCharge[9]);
698 ClusterChargeEC3(*
tp) = std::move(clusCharge[10]);
699 ClusterToTIBL(*
tp) = std::move(clusToT[0]);
700 ClusterToT3D(*
tp) = std::move(clusToT[1]);
701 ClusterToTBL(*
tp) = std::move(clusToT[2]);
702 ClusterToTL1(*
tp) = std::move(clusToT[3]);
703 ClusterToTL2(*
tp) = std::move(clusToT[4]);
704 ClusterToTEA1(*
tp) = std::move(clusToT[5]);
705 ClusterToTEA2(*
tp) = std::move(clusToT[6]);
706 ClusterToTEA3(*
tp) = std::move(clusToT[7]);
707 ClusterToTEC1(*
tp) = std::move(clusToT[8]);
708 ClusterToTEC2(*
tp) = std::move(clusToT[9]);
709 ClusterToTEC3(*
tp) = std::move(clusToT[10]);
710 ClusterdEdxIBL(*
tp) = std::move(clusdEdx[0]);
711 ClusterdEdx3D(*
tp) = std::move(clusdEdx[1]);
712 ClusterdEdxBL(*
tp) = std::move(clusdEdx[2]);
713 ClusterdEdxL1(*
tp) = std::move(clusdEdx[3]);
714 ClusterdEdxL2(*
tp) = std::move(clusdEdx[4]);
715 ClusterdEdxEA1(*
tp) = std::move(clusdEdx[5]);
716 ClusterdEdxEA2(*
tp) = std::move(clusdEdx[6]);
717 ClusterdEdxEA3(*
tp) = std::move(clusdEdx[7]);
718 ClusterdEdxEC1(*
tp) = std::move(clusdEdx[8]);
719 ClusterdEdxEC2(*
tp) = std::move(clusdEdx[9]);
720 ClusterdEdxEC3(*
tp) = std::move(clusdEdx[10]);
721 ClusterSizeXIBL(*
tp) = std::move(clusSizeX[0]);
722 ClusterSizeX3D(*
tp) = std::move(clusSizeX[1]);
723 ClusterSizeXBL(*
tp) = std::move(clusSizeX[2]);
724 ClusterSizeXL1(*
tp) = std::move(clusSizeX[3]);
725 ClusterSizeXL2(*
tp) = std::move(clusSizeX[4]);
726 ClusterSizeXEA1(*
tp) = std::move(clusSizeX[5]);
727 ClusterSizeXEA2(*
tp) = std::move(clusSizeX[6]);
728 ClusterSizeXEA3(*
tp) = std::move(clusSizeX[7]);
729 ClusterSizeXEC1(*
tp) = std::move(clusSizeX[8]);
730 ClusterSizeXEC2(*
tp) = std::move(clusSizeX[9]);
731 ClusterSizeXEC3(*
tp) = std::move(clusSizeX[10]);
732 ClusterSizeZIBL(*
tp) = std::move(clusSizeZ[0]);
733 ClusterSizeZ3D(*
tp) = std::move(clusSizeZ[1]);
734 ClusterSizeZBL(*
tp) = std::move(clusSizeZ[2]);
735 ClusterSizeZL1(*
tp) = std::move(clusSizeZ[3]);
736 ClusterSizeZL2(*
tp) = std::move(clusSizeZ[4]);
737 ClusterSizeZEA1(*
tp) = std::move(clusSizeZ[5]);
738 ClusterSizeZEA2(*
tp) = std::move(clusSizeZ[6]);
739 ClusterSizeZEA3(*
tp) = std::move(clusSizeZ[7]);
740 ClusterSizeZEC1(*
tp) = std::move(clusSizeZ[8]);
741 ClusterSizeZEC2(*
tp) = std::move(clusSizeZ[9]);
742 ClusterSizeZEC3(*
tp) = std::move(clusSizeZ[10]);
743 ClusterResidualXIBL(*
tp) = std::move(clusResidualX[0]);
744 ClusterResidualX3D(*
tp) = std::move(clusResidualX[1]);
745 ClusterResidualXBL(*
tp) = std::move(clusResidualX[2]);
746 ClusterResidualXL1(*
tp) = std::move(clusResidualX[3]);
747 ClusterResidualXL2(*
tp) = std::move(clusResidualX[4]);
748 ClusterResidualXEA1(*
tp) = std::move(clusResidualX[5]);
749 ClusterResidualXEA2(*
tp) = std::move(clusResidualX[6]);
750 ClusterResidualXEA3(*
tp) = std::move(clusResidualX[7]);
751 ClusterResidualXEC1(*
tp) = std::move(clusResidualX[8]);
752 ClusterResidualXEC2(*
tp) = std::move(clusResidualX[9]);
753 ClusterResidualXEC3(*
tp) = std::move(clusResidualX[10]);
754 ClusterResidualYIBL(*
tp) = std::move(clusResidualY[0]);
755 ClusterResidualY3D(*
tp) = std::move(clusResidualY[1]);
756 ClusterResidualYBL(*
tp) = std::move(clusResidualY[2]);
757 ClusterResidualYL1(*
tp) = std::move(clusResidualY[3]);
758 ClusterResidualYL2(*
tp) = std::move(clusResidualY[4]);
759 ClusterResidualYEA1(*
tp) = std::move(clusResidualY[5]);
760 ClusterResidualYEA2(*
tp) = std::move(clusResidualY[6]);
761 ClusterResidualYEA3(*
tp) = std::move(clusResidualY[7]);
762 ClusterResidualYEC1(*
tp) = std::move(clusResidualY[8]);
763 ClusterResidualYEC2(*
tp) = std::move(clusResidualY[9]);
764 ClusterResidualYEC3(*
tp) = std::move(clusResidualY[10]);
765 ClusterHoleIBL(*
tp) = std::move(clusHole[0]);
766 ClusterHole3D(*
tp) = std::move(clusHole[1]);
767 ClusterHoleBL(*
tp) = std::move(clusHole[2]);
768 ClusterHoleL1(*
tp) = std::move(clusHole[3]);
769 ClusterHoleL2(*
tp) = std::move(clusHole[4]);
770 ClusterHoleEA1(*
tp) = std::move(clusHole[5]);
771 ClusterHoleEA2(*
tp) = std::move(clusHole[6]);
772 ClusterHoleEA3(*
tp) = std::move(clusHole[7]);
773 ClusterHoleEC1(*
tp) = std::move(clusHole[8]);
774 ClusterHoleEC2(*
tp) = std::move(clusHole[9]);
775 ClusterHoleEC3(*
tp) = std::move(clusHole[10]);
776 ClusterOccIBL(*
tp) = std::move(clusOcc[0]);
777 ClusterOcc3D(*
tp) = std::move(clusOcc[1]);
778 ClusterOccBL(*
tp) = std::move(clusOcc[2]);
779 ClusterOccL1(*
tp) = std::move(clusOcc[3]);
780 ClusterOccL2(*
tp) = std::move(clusOcc[4]);
781 ClusterOccEA1(*
tp) = std::move(clusOcc[5]);
782 ClusterOccEA2(*
tp) = std::move(clusOcc[6]);
783 ClusterOccEA3(*
tp) = std::move(clusOcc[7]);
784 ClusterOccEC1(*
tp) = std::move(clusOcc[8]);
785 ClusterOccEC2(*
tp) = std::move(clusOcc[9]);
786 ClusterOccEC3(*
tp) = std::move(clusOcc[10]);
787 TrackALL(*
tp) = std::move(trkEta);
788 TrackHOLE(*
tp) = std::move(trkHole);
789 TrackdEdx(*
tp) = std::move(trkdEdx);
794 return StatusCode::SUCCESS;
798 *
eta =(
id>>43) % 0x20 - 10;
799 *
phi =(
id>>43) % 0x800 / 0x20;
800 int layer_index = ((
id>>43) / 0x800) & 0xF;
803 switch (layer_index) {