16 #include "TLorentzVector.h"
23 return StatusCode::SUCCESS;
30 if (!tracks.
isValid()) {
return StatusCode::SUCCESS; }
34 if (PixelMonitoringTrack.
record(std::make_unique<xAOD::TrackParticleContainer>(),
35 std::make_unique<xAOD::TrackParticleAuxContainer>()).isFailure()) {
36 return StatusCode::SUCCESS;
40 if (!pixClusters.
isValid()) {
return StatusCode::SUCCESS; }
43 const int nbin_charge = 60;
44 const int nbin_tot = 120;
45 const int nbin_eta = 30;
46 const int nbin_dedx = 300;
47 const int nbin_size = 10;
48 const int nbin_reso = 80;
49 const int nbin_occ = 80;
51 std::vector<std::vector<int>> clusCharge(11,std::vector<int>(nbin_charge,0));
52 std::vector<std::vector<int>> clusToT(11,std::vector<int>(nbin_tot,0));
53 std::vector<std::vector<int>> clusEta(11,std::vector<int>(nbin_eta,0));
54 std::vector<std::vector<int>> clusHitEta(11,std::vector<int>(nbin_eta,0));
55 std::vector<std::vector<int>> clusdEdx(11,std::vector<int>(nbin_dedx,0));
56 std::vector<std::vector<int>> clusSizeX(11,std::vector<int>(nbin_size,0));
57 std::vector<std::vector<int>> clusSizeZ(11,std::vector<int>(nbin_size,0));
58 std::vector<std::vector<int>> clusResidualX(11,std::vector<int>(nbin_reso,0));
59 std::vector<std::vector<int>> clusResidualY(11,std::vector<int>(nbin_reso,0));
60 std::vector<std::vector<int>> clusHole(11,std::vector<int>(nbin_eta,0));
61 std::vector<std::vector<int>> clusOcc(11,std::vector<int>(nbin_occ,0));
63 std::vector<int> trkEta(nbin_eta,0);
64 std::vector<int> trkHole(nbin_eta,0);
65 std::vector<int> trkdEdx(nbin_dedx,0);
70 std::vector<float> tmpCov(15,0.);
78 if (trk->pt()<1000.0 && nPixHits<4) {
continue; }
79 if (trk->pt()<1000.0 &&
nSCTHits<1) {
continue; }
81 std::vector<uint64_t> holeIndex;
82 std::vector<int> clusterLayer;
83 std::vector<int> clusterBEC;
84 std::vector<int> clusterModulePhi;
85 std::vector<int> clusterModuleEta;
86 std::vector<float> clusterCharge;
87 std::vector<int> clusterToT;
88 std::vector<int> clusterL1A;
89 std::vector<int> clusterIsSplit;
90 std::vector<int> clusterSize;
91 std::vector<int> clusterSizePhi;
92 std::vector<int> clusterSizeZ;
93 std::vector<bool> isEdge;
94 std::vector<bool> isOverflow;
96 std::vector<float> trackTheta;
97 std::vector<float> trackX;
98 std::vector<float> trackY;
99 std::vector<float> localX;
100 std::vector<float> localY;
101 std::vector<float> globalX;
102 std::vector<float> globalY;
104 std::vector<float> unbiasedResidualX;
105 std::vector<float> unbiasedResidualY;
106 std::vector<int> clusterIsolation10x2;
107 std::vector<int> clusterIsolation20x4;
108 std::vector<int> numTotalClustersPerModule;
109 std::vector<int> numTotalPixelsPerModule;
110 std::vector<float> moduleLorentzShift;
112 std::vector<std::vector<int>> rdoToT;
113 std::vector<std::vector<float>> rdoCharge;
114 std::vector<std::vector<int>> rdoPhi;
115 std::vector<std::vector<int>> rdoEta;
118 for (
const auto & msos_iter : measurementsOnTrack) {
119 if (!msos_iter.isValid()) {
continue; }
146 for (
const auto *clus_itr : *pixClusters) {
147 if (clus_itr->identifier()!=(msosClus)->identifier()) {
continue; }
148 if (chargeAcc(*clus_itr)!=chargeAcc(*msosClus)) {
continue; }
150 clusterLayer.push_back(layerAcc(*clus_itr));
151 clusterBEC.push_back(becAcc(*clus_itr));
152 clusterModulePhi.push_back(phi_moduleAcc(*clus_itr));
153 clusterModuleEta.push_back(eta_moduleAcc(*clus_itr));
154 clusterCharge.push_back(chargeAcc(*clus_itr));
155 clusterToT.push_back(ToTAcc(*clus_itr));
156 clusterL1A.push_back(LVL1AAcc(*clus_itr));
157 clusterIsSplit.push_back(isSplitAcc(*clus_itr));
158 clusterSize.push_back(nRDOAcc(*clus_itr));
159 clusterSizePhi.push_back(sizePhiAcc(*clus_itr));
160 clusterSizeZ.push_back(sizeZAcc(*clus_itr));
164 trackX.push_back(msos->
localX());
165 trackY.push_back(msos->
localY());
166 localX.push_back(clus_itr->localX());
167 localY.push_back(clus_itr->localY());
168 globalX.push_back(clus_itr->globalX());
169 globalY.push_back(clus_itr->globalY());
170 globalZ.push_back(clus_itr->globalZ());
173 moduleLorentzShift.push_back(LorentzShiftAcc(*clus_itr));
177 int numNeighborCluster10x2 = 0;
178 int numNeighborCluster20x4 = 0;
179 int nTotalClustersPerModule = 0;
180 int nTotalPixelsPerModule = 0;
181 for (
const auto *clus_neighbor : *pixClusters) {
182 if (layerAcc(*clus_neighbor)==layerAcc(*clus_itr)
183 && becAcc(*clus_neighbor)==becAcc(*clus_itr)
184 && phi_moduleAcc(*clus_neighbor)==phi_moduleAcc(*clus_itr)
185 && eta_moduleAcc(*clus_neighbor)==eta_moduleAcc(*clus_itr)) {
186 float deltaX = std::abs(clus_neighbor->localX()-clus_itr->localX());
187 float deltaY = std::abs(clus_neighbor->localY()-clus_itr->localY());
188 nTotalClustersPerModule++;
189 nTotalPixelsPerModule += nRDOAcc(*clus_neighbor);
191 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
192 if (
deltaX<0.500 &&
deltaY<0.500) { numNeighborCluster10x2++; }
193 if (
deltaX<1.000 &&
deltaY<1.000) { numNeighborCluster20x4++; }
196 if (
deltaX<0.500 &&
deltaY<0.800) { numNeighborCluster10x2++; }
197 if (
deltaX<1.000 &&
deltaY<1.600) { numNeighborCluster20x4++; }
202 clusterIsolation10x2.push_back(numNeighborCluster10x2);
203 clusterIsolation20x4.push_back(numNeighborCluster20x4);
204 numTotalClustersPerModule.push_back(nTotalClustersPerModule);
205 numTotalPixelsPerModule.push_back(nTotalPixelsPerModule);
209 bool checkEdge =
false;
210 bool checkOverflow =
false;
213 std::vector<int> tmpToT;
214 std::vector<float> tmpCharge;
215 std::vector<int> tmpPhi;
216 std::vector<int> tmpEta;
219 int nrdo = rdo_phi_pixel_indexAcc.
isAvailable(*clus_itr) ? rdo_phi_pixel_indexAcc(*clus_itr).size() : -1;
220 for (
int i=0;
i<nrdo;
i++) {
222 int phi = rdo_phi_pixel_indexAcc(*clus_itr)[
i];
223 if (
phi<5) { checkEdge=
true; }
224 if (
phi>320) { checkEdge=
true; }
226 int eta = rdo_phi_pixel_indexAcc(*clus_itr)[
i];
227 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
228 if (eta_moduleAcc(*clus_itr)>-7 && eta_moduleAcc(*clus_itr)<6) {
229 if (
eta<5) { checkEdge=
true; }
230 if (
eta>154) { checkEdge=
true; }
233 if (
eta<5) { checkEdge=
true; }
234 if (
eta>74) { checkEdge=
true; }
238 if (
eta<5) { checkEdge=
true; }
239 if (
eta>154) { checkEdge=
true; }
242 int tot = rdo_totAcc(*clus_itr)[
i];
243 if (layerAcc(*clus_itr)==0 && becAcc(*clus_itr)==0) {
244 if (
tot==16) { checkOverflow=
true; }
246 else if (layerAcc(*clus_itr)==1 && becAcc(*clus_itr)==0) {
247 if (
tot==150) { checkOverflow=
true; }
250 if (
tot==255) { checkOverflow=
true; }
253 float charge = rdo_chargeAcc(*clus_itr)[
i];
254 if (trk->pt()>2000.0) {
255 tmpToT.push_back(
tot);
256 tmpCharge.push_back(
charge);
257 tmpPhi.push_back(
phi);
258 tmpEta.push_back(
eta);
261 isEdge.push_back(checkEdge);
262 isOverflow.push_back(checkOverflow);
264 rdoToT.push_back(tmpToT);
265 rdoCharge.push_back(tmpCharge);
266 rdoPhi.push_back(tmpPhi);
267 rdoEta.push_back(tmpEta);
272 if (m_storeMode==1) {
310 d0err(*trk) = trk->definingParametersCovMatrixVec().at(0);
311 z0err(*trk) = trk->definingParametersCovMatrixVec().at(2);
312 HoleIndex(*trk) = std::move(holeIndex);
313 ClusterLayer(*trk) = std::move(clusterLayer);
314 ClusterBEC(*trk) = std::move(clusterBEC);
315 ClusterModulePhi(*trk) = std::move(clusterModulePhi);
316 ClusterModuleEta(*trk) = std::move(clusterModuleEta);
317 ClusterCharge(*trk) = std::move(clusterCharge);
318 ClusterToT(*trk) = std::move(clusterToT);
319 ClusterL1A(*trk) = std::move(clusterL1A);
320 ClusterIsSplit(*trk) = std::move(clusterIsSplit);
321 ClusterSize(*trk) = std::move(clusterSize);
322 ClusterSizePhi(*trk) = std::move(clusterSizePhi);
323 ClusterSizeZ(*trk) = std::move(clusterSizeZ);
324 ClusterIsEdge(*trk) = std::move(isEdge);
325 ClusterIsOverflow(*trk) = std::move(isOverflow);
326 TrackLocalPhi(*trk) = std::move(
trackPhi);
327 TrackLocalTheta(*trk) = std::move(trackTheta);
328 TrackLocalX(*trk) = std::move(trackX);
329 TrackLocalY(*trk) = std::move(trackY);
330 ClusterLocalX(*trk) = std::move(localX);
331 ClusterLocalY(*trk) = std::move(localY);
332 ClusterGlobalX(*trk) = std::move(globalX);
333 ClusterGlobalY(*trk) = std::move(globalY);
334 ClusterGlobalZ(*trk) = std::move(
globalZ);
335 UnbiasedResidualX(*trk) = std::move(unbiasedResidualX);
336 UnbiasedResidualY(*trk) = std::move(unbiasedResidualY);
337 ClusterIsolation10x2(*trk) = std::move(clusterIsolation10x2);
338 ClusterIsolation20x4(*trk) = std::move(clusterIsolation20x4);
339 NumTotalClustersPerModule(*trk) = std::move(numTotalClustersPerModule);
340 NumTotalPixelsPerModule(*trk) = std::move(numTotalPixelsPerModule);
341 ModuleLorentzShift(*trk) = std::move(moduleLorentzShift);
342 RdoToT(*trk) = std::move(rdoToT);
343 RdoCharge(*trk) = std::move(rdoCharge);
344 RdoPhi(*trk) = std::move(rdoPhi);
345 RdoEta(*trk) = std::move(rdoEta);
358 bool passLooseCut =
static_cast<bool>(m_selector->accept(trk));
359 if (!passLooseCut) {
continue; }
364 int checkIBL(0),check3D(0),checkBLY(0),checkLY1(0),checkLY2(0),checkEA1(0),checkEA2(0),checkEA3(0),checkEC1(0),checkEC2(0),checkEC3(0);
365 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
366 if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==0) {
367 if (clusterModuleEta.at(
i)>-7 && clusterModuleEta.at(
i)<6) { checkIBL++; }
370 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==1) { checkBLY++; }
371 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==2) { checkLY1++; }
372 else if (clusterBEC.at(
i)== 0 && clusterLayer.at(
i)==3) { checkLY2++; }
373 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==0) { checkEA1++; }
374 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==1) { checkEA2++; }
375 else if (clusterBEC.at(
i)== 2 && clusterLayer.at(
i)==2) { checkEA3++; }
376 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==0) { checkEC1++; }
377 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==1) { checkEC2++; }
378 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==2) { checkEC3++; }
381 if (trk->pt()>2000.0 && nPixelDeadSensor==0) {
382 int ietabin = trunc((trk->eta()+3.0)/0.2);
384 std::for_each((trkEta.begin()+ietabin),(trkEta.begin()+ietabin+1),[](
int &
n){ n++; });
385 if (
numberOfPixelHoles>0) { std::for_each((trkHole.begin()+ietabin),(trkHole.begin()+ietabin+1),[](
int &
n){ n++; }); }
387 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++; }); }}
388 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++; }); }}
389 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++; }); }}
390 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++; }); }}
391 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++; }); }}
392 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++; }); }}
393 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++; }); }}
394 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++; }); }}
395 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++; }); }}
396 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++; }); }}
397 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++; }); }}
399 for (
int i=0;
i<(
int)holeIndex.size();
i++) {
400 int becH, layerH, etaH, phiH;
401 GetLayerEtaPhiFromId(holeIndex.at(
i),&becH,&layerH,&etaH,&phiH);
402 if (becH== 0 && layerH==0) {
403 if (etaH>-7 && etaH<6) { std::for_each((clusHole[0].
begin()+ietabin),(clusHole[0].
begin()+ietabin+1),[](
int &
n){
n++; }); }
404 else { std::for_each((clusHole[1].
begin()+ietabin),(clusHole[1].
begin()+ietabin+1),[](
int &
n){
n++; }); }
406 if (becH== 0 && layerH==1) { std::for_each((clusHole[2].
begin()+ietabin),(clusHole[2].
begin()+ietabin+1),[](
int &
n){
n++; }); }
407 if (becH== 0 && layerH==2) { std::for_each((clusHole[3].
begin()+ietabin),(clusHole[3].
begin()+ietabin+1),[](
int &
n){
n++; }); }
408 if (becH== 0 && layerH==3) { std::for_each((clusHole[4].
begin()+ietabin),(clusHole[4].
begin()+ietabin+1),[](
int &
n){
n++; }); }
409 if (becH== 2 && layerH==0) { std::for_each((clusHole[5].
begin()+ietabin),(clusHole[5].
begin()+ietabin+1),[](
int &
n){
n++; }); }
410 if (becH== 2 && layerH==1) { std::for_each((clusHole[6].
begin()+ietabin),(clusHole[6].
begin()+ietabin+1),[](
int &
n){
n++; }); }
411 if (becH== 2 && layerH==2) { std::for_each((clusHole[7].
begin()+ietabin),(clusHole[7].
begin()+ietabin+1),[](
int &
n){
n++; }); }
412 if (becH==-2 && layerH==0) { std::for_each((clusHole[8].
begin()+ietabin),(clusHole[8].
begin()+ietabin+1),[](
int &
n){
n++; }); }
413 if (becH==-2 && layerH==1) { std::for_each((clusHole[9].
begin()+ietabin),(clusHole[9].
begin()+ietabin+1),[](
int &
n){
n++; }); }
414 if (becH==-2 && layerH==2) { std::for_each((clusHole[10].
begin()+ietabin),(clusHole[10].
begin()+ietabin+1),[](
int &
n){
n++; }); }
420 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { clusterEdge+=isEdge.at(
i); }
423 int clusterOverflow = 0;
424 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { clusterOverflow+=isOverflow.at(
i); }
428 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
isSplit+=clusterIsSplit.at(
i); }
432 for (
int i=0;
i<(
int)clusterLayer.size();
i++) { iso20x4+=clusterIsolation20x4.at(
i); }
435 bool passCut =
false;
437 if (checkIBL>0 && checkBLY>0 && checkLY1>0 && checkLY2>0) {
440 else if (checkIBL>0 && checkEA1>0 && checkEA2>0 && checkEA3>0) {
443 else if (checkIBL>0 && checkEC1>0 && checkEC2>0 && checkEC3>0) {
446 else if (check3D>0 && checkEC2>0 && checkEC3>0) {
450 if (!passCut) {
continue; }
453 bool isAlphaCut =
false;
454 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
458 if (isAlphaCut) {
continue; }
460 if (trk->pt()>maxPt) {
466 float energyPair = 3.62
e-6;
467 float siDensity = 2.329;
468 float thicknessIBL = 0.0200;
469 float thickness3D = 0.0230;
470 float thicknessPIX = 0.0250;
473 for (
int i=0;
i<(
int)clusterLayer.size();
i++) {
476 float thickness = thicknessPIX;
477 if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==0) {
478 thickness = (clusterModuleEta[
i]<6 && clusterModuleEta[
i]>-7) ? thicknessIBL : thickness3D;
480 float recodEdx = clusterCharge[
i]*energyPair/thickness/siDensity*
std::cos(
alpha);
481 sumE += clusterCharge[
i]*energyPair;
484 int ibc = (clusterCharge[
i]>0.0 && clusterCharge[
i]<120000.0) ? trunc(clusterCharge[
i]/2000.0) : nbin_charge-1;
485 int ibt = (clusterToT[
i]>0 && clusterToT[
i]<120) ? trunc(clusterToT[
i]) : nbin_tot-1;
486 int ibe = (recodEdx>0.0 && recodEdx<3.0) ? trunc(recodEdx*100) : nbin_dedx-1;
487 int ibx = (clusterSizePhi[
i]>-0.5 && clusterSizePhi[
i]<9.5) ? trunc(clusterSizePhi[
i]) : nbin_size-1;
488 int ibz = (clusterSizeZ[
i]>-0.5 && clusterSizeZ[
i]<9.5) ? trunc(clusterSizeZ[
i]) : nbin_size-1;
489 int irx = (unbiasedResidualX[
i]>-0.4 && unbiasedResidualX[
i]<0.4) ? trunc((unbiasedResidualX[
i]+0.4)/0.01) : nbin_reso-1;
490 int iry = (unbiasedResidualY[
i]>-0.4 && unbiasedResidualY[
i]<0.4) ? trunc((unbiasedResidualY[
i]+0.4)/0.01) : nbin_reso-1;
491 int ibo = (numTotalPixelsPerModule[
i]>-0.1 && numTotalPixelsPerModule[
i]<160) ? trunc(numTotalPixelsPerModule[
i]/2.0) : nbin_occ-1;
494 if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==0) {
495 if (clusterModuleEta[
i]<6 && clusterModuleEta[
i]>-7) {
idx=0; }
498 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==1) {
idx=2; }
499 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==2) {
idx=3; }
500 else if (clusterBEC.at(
i)==0 && clusterLayer.at(
i)==3) {
idx=4; }
501 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==0) {
idx=5; }
502 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==1) {
idx=6; }
503 else if (clusterBEC.at(
i)==2 && clusterLayer.at(
i)==2) {
idx=7; }
504 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==0) {
idx=8; }
505 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==1) {
idx=9; }
506 else if (clusterBEC.at(
i)==-2 && clusterLayer.at(
i)==2) {
idx=10; }
508 std::for_each((clusCharge[
idx].
begin()+ibc),(clusCharge[
idx].
begin()+ibc+1),[](
int &
n){
n++; });
509 std::for_each((clusToT[
idx].
begin()+ibt),(clusToT[
idx].
begin()+ibt+1),[](
int &
n){
n++; });
510 std::for_each((clusdEdx[
idx].
begin()+ibe),(clusdEdx[
idx].
begin()+ibe+1),[](
int &
n){
n++; });
511 std::for_each((clusSizeX[
idx].
begin()+ibx),(clusSizeX[
idx].
begin()+ibx+1),[](
int &
n){
n++; });
512 std::for_each((clusSizeZ[
idx].
begin()+ibz),(clusSizeZ[
idx].
begin()+ibz+1),[](
int &
n){
n++; });
513 std::for_each((clusResidualX[
idx].
begin()+irx),(clusResidualX[
idx].
begin()+irx+1),[](
int &
n){
n++; });
514 std::for_each((clusResidualY[
idx].
begin()+iry),(clusResidualY[
idx].
begin()+iry+1),[](
int &
n){
n++; });
515 std::for_each((clusOcc[
idx].
begin()+ibo),(clusOcc[
idx].
begin()+ibo+1),[](
int &
n){
n++; });
519 int iby = (sumE/sumX>0.0 && sumE/sumX<3.0) ? trunc(sumE/sumX*100) : 299;
520 std::for_each((trkdEdx.begin()+iby),(trkdEdx.begin()+iby+1),[](
int &
n){ n++; });
524 if (m_storeMode==2) {
527 tp->makePrivateStore(*trk_maxpt);
528 tp->setDefiningParametersCovMatrixVec(tmpCov);
655 TrackEtaIBL(*
tp) = std::move(clusEta[0]);
656 TrackEta3D(*
tp) = std::move(clusEta[1]);
657 TrackEtaBL(*
tp) = std::move(clusEta[2]);
658 TrackEtaL1(*
tp) = std::move(clusEta[3]);
659 TrackEtaL2(*
tp) = std::move(clusEta[4]);
660 TrackEtaEA1(*
tp) = std::move(clusEta[5]);
661 TrackEtaEA2(*
tp) = std::move(clusEta[6]);
662 TrackEtaEA3(*
tp) = std::move(clusEta[7]);
663 TrackEtaEC1(*
tp) = std::move(clusEta[8]);
664 TrackEtaEC2(*
tp) = std::move(clusEta[9]);
665 TrackEtaEC3(*
tp) = std::move(clusEta[10]);
666 TrackHitEtaIBL(*
tp) = std::move(clusHitEta[0]);
667 TrackHitEta3D(*
tp) = std::move(clusHitEta[1]);
668 TrackHitEtaBL(*
tp) = std::move(clusHitEta[2]);
669 TrackHitEtaL1(*
tp) = std::move(clusHitEta[3]);
670 TrackHitEtaL2(*
tp) = std::move(clusHitEta[4]);
671 TrackHitEtaEA1(*
tp) = std::move(clusHitEta[5]);
672 TrackHitEtaEA2(*
tp) = std::move(clusHitEta[6]);
673 TrackHitEtaEA3(*
tp) = std::move(clusHitEta[7]);
674 TrackHitEtaEC1(*
tp) = std::move(clusHitEta[8]);
675 TrackHitEtaEC2(*
tp) = std::move(clusHitEta[9]);
676 TrackHitEtaEC3(*
tp) = std::move(clusHitEta[10]);
677 ClusterChargeIBL(*
tp) = std::move(clusCharge[0]);
678 ClusterCharge3D(*
tp) = std::move(clusCharge[1]);
679 ClusterChargeBL(*
tp) = std::move(clusCharge[2]);
680 ClusterChargeL1(*
tp) = std::move(clusCharge[3]);
681 ClusterChargeL2(*
tp) = std::move(clusCharge[4]);
682 ClusterChargeEA1(*
tp) = std::move(clusCharge[5]);
683 ClusterChargeEA2(*
tp) = std::move(clusCharge[6]);
684 ClusterChargeEA3(*
tp) = std::move(clusCharge[7]);
685 ClusterChargeEC1(*
tp) = std::move(clusCharge[8]);
686 ClusterChargeEC2(*
tp) = std::move(clusCharge[9]);
687 ClusterChargeEC3(*
tp) = std::move(clusCharge[10]);
688 ClusterToTIBL(*
tp) = std::move(clusToT[0]);
689 ClusterToT3D(*
tp) = std::move(clusToT[1]);
690 ClusterToTBL(*
tp) = std::move(clusToT[2]);
691 ClusterToTL1(*
tp) = std::move(clusToT[3]);
692 ClusterToTL2(*
tp) = std::move(clusToT[4]);
693 ClusterToTEA1(*
tp) = std::move(clusToT[5]);
694 ClusterToTEA2(*
tp) = std::move(clusToT[6]);
695 ClusterToTEA3(*
tp) = std::move(clusToT[7]);
696 ClusterToTEC1(*
tp) = std::move(clusToT[8]);
697 ClusterToTEC2(*
tp) = std::move(clusToT[9]);
698 ClusterToTEC3(*
tp) = std::move(clusToT[10]);
699 ClusterdEdxIBL(*
tp) = std::move(clusdEdx[0]);
700 ClusterdEdx3D(*
tp) = std::move(clusdEdx[1]);
701 ClusterdEdxBL(*
tp) = std::move(clusdEdx[2]);
702 ClusterdEdxL1(*
tp) = std::move(clusdEdx[3]);
703 ClusterdEdxL2(*
tp) = std::move(clusdEdx[4]);
704 ClusterdEdxEA1(*
tp) = std::move(clusdEdx[5]);
705 ClusterdEdxEA2(*
tp) = std::move(clusdEdx[6]);
706 ClusterdEdxEA3(*
tp) = std::move(clusdEdx[7]);
707 ClusterdEdxEC1(*
tp) = std::move(clusdEdx[8]);
708 ClusterdEdxEC2(*
tp) = std::move(clusdEdx[9]);
709 ClusterdEdxEC3(*
tp) = std::move(clusdEdx[10]);
710 ClusterSizeXIBL(*
tp) = std::move(clusSizeX[0]);
711 ClusterSizeX3D(*
tp) = std::move(clusSizeX[1]);
712 ClusterSizeXBL(*
tp) = std::move(clusSizeX[2]);
713 ClusterSizeXL1(*
tp) = std::move(clusSizeX[3]);
714 ClusterSizeXL2(*
tp) = std::move(clusSizeX[4]);
715 ClusterSizeXEA1(*
tp) = std::move(clusSizeX[5]);
716 ClusterSizeXEA2(*
tp) = std::move(clusSizeX[6]);
717 ClusterSizeXEA3(*
tp) = std::move(clusSizeX[7]);
718 ClusterSizeXEC1(*
tp) = std::move(clusSizeX[8]);
719 ClusterSizeXEC2(*
tp) = std::move(clusSizeX[9]);
720 ClusterSizeXEC3(*
tp) = std::move(clusSizeX[10]);
721 ClusterSizeZIBL(*
tp) = std::move(clusSizeZ[0]);
722 ClusterSizeZ3D(*
tp) = std::move(clusSizeZ[1]);
723 ClusterSizeZBL(*
tp) = std::move(clusSizeZ[2]);
724 ClusterSizeZL1(*
tp) = std::move(clusSizeZ[3]);
725 ClusterSizeZL2(*
tp) = std::move(clusSizeZ[4]);
726 ClusterSizeZEA1(*
tp) = std::move(clusSizeZ[5]);
727 ClusterSizeZEA2(*
tp) = std::move(clusSizeZ[6]);
728 ClusterSizeZEA3(*
tp) = std::move(clusSizeZ[7]);
729 ClusterSizeZEC1(*
tp) = std::move(clusSizeZ[8]);
730 ClusterSizeZEC2(*
tp) = std::move(clusSizeZ[9]);
731 ClusterSizeZEC3(*
tp) = std::move(clusSizeZ[10]);
732 ClusterResidualXIBL(*
tp) = std::move(clusResidualX[0]);
733 ClusterResidualX3D(*
tp) = std::move(clusResidualX[1]);
734 ClusterResidualXBL(*
tp) = std::move(clusResidualX[2]);
735 ClusterResidualXL1(*
tp) = std::move(clusResidualX[3]);
736 ClusterResidualXL2(*
tp) = std::move(clusResidualX[4]);
737 ClusterResidualXEA1(*
tp) = std::move(clusResidualX[5]);
738 ClusterResidualXEA2(*
tp) = std::move(clusResidualX[6]);
739 ClusterResidualXEA3(*
tp) = std::move(clusResidualX[7]);
740 ClusterResidualXEC1(*
tp) = std::move(clusResidualX[8]);
741 ClusterResidualXEC2(*
tp) = std::move(clusResidualX[9]);
742 ClusterResidualXEC3(*
tp) = std::move(clusResidualX[10]);
743 ClusterResidualYIBL(*
tp) = std::move(clusResidualY[0]);
744 ClusterResidualY3D(*
tp) = std::move(clusResidualY[1]);
745 ClusterResidualYBL(*
tp) = std::move(clusResidualY[2]);
746 ClusterResidualYL1(*
tp) = std::move(clusResidualY[3]);
747 ClusterResidualYL2(*
tp) = std::move(clusResidualY[4]);
748 ClusterResidualYEA1(*
tp) = std::move(clusResidualY[5]);
749 ClusterResidualYEA2(*
tp) = std::move(clusResidualY[6]);
750 ClusterResidualYEA3(*
tp) = std::move(clusResidualY[7]);
751 ClusterResidualYEC1(*
tp) = std::move(clusResidualY[8]);
752 ClusterResidualYEC2(*
tp) = std::move(clusResidualY[9]);
753 ClusterResidualYEC3(*
tp) = std::move(clusResidualY[10]);
754 ClusterHoleIBL(*
tp) = std::move(clusHole[0]);
755 ClusterHole3D(*
tp) = std::move(clusHole[1]);
756 ClusterHoleBL(*
tp) = std::move(clusHole[2]);
757 ClusterHoleL1(*
tp) = std::move(clusHole[3]);
758 ClusterHoleL2(*
tp) = std::move(clusHole[4]);
759 ClusterHoleEA1(*
tp) = std::move(clusHole[5]);
760 ClusterHoleEA2(*
tp) = std::move(clusHole[6]);
761 ClusterHoleEA3(*
tp) = std::move(clusHole[7]);
762 ClusterHoleEC1(*
tp) = std::move(clusHole[8]);
763 ClusterHoleEC2(*
tp) = std::move(clusHole[9]);
764 ClusterHoleEC3(*
tp) = std::move(clusHole[10]);
765 ClusterOccIBL(*
tp) = std::move(clusOcc[0]);
766 ClusterOcc3D(*
tp) = std::move(clusOcc[1]);
767 ClusterOccBL(*
tp) = std::move(clusOcc[2]);
768 ClusterOccL1(*
tp) = std::move(clusOcc[3]);
769 ClusterOccL2(*
tp) = std::move(clusOcc[4]);
770 ClusterOccEA1(*
tp) = std::move(clusOcc[5]);
771 ClusterOccEA2(*
tp) = std::move(clusOcc[6]);
772 ClusterOccEA3(*
tp) = std::move(clusOcc[7]);
773 ClusterOccEC1(*
tp) = std::move(clusOcc[8]);
774 ClusterOccEC2(*
tp) = std::move(clusOcc[9]);
775 ClusterOccEC3(*
tp) = std::move(clusOcc[10]);
776 TrackALL(*
tp) = std::move(trkEta);
777 TrackHOLE(*
tp) = std::move(trkHole);
778 TrackdEdx(*
tp) = std::move(trkdEdx);
783 return StatusCode::SUCCESS;
787 *
eta =(
id>>43) % 0x20 - 10;
788 *
phi =(
id>>43) % 0x800 / 0x20;
789 int layer_index = ((
id>>43) / 0x800) & 0xF;
792 switch (layer_index) {