67 {
68
70
71 std::vector<eflowRecCluster*> matchedClusters;
72 const std::vector<eflowTrackClusterLink*>&
links = thisEfRecTrack->getClusterMatches();
73 for (auto* itLink : links) {
74 matchedClusters.push_back(itLink->getCluster());
75 }
76
77 double trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getEM1eta();
78
79 if(trackEM1eta<-998.) trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getEM2eta();
80
81 if(trackEM1eta<-998.) trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getFCAL0eta();
82
83 double trackE = thisEfRecTrack->getTrack()->e();
84
85 if (!binnedParameters->
binExists(trackE, trackEM1eta)) {
86 thisEfRecTrack->setHasBin(false);
87 return;
88 }
89
90
93
94
95 thisEfRecTrack->setLayerHED(j1st);
96
97
98 eflowRingSubtractionManager& cellSubtractionManager = thisEfRecTrack->getCellSubtractionManager();
99 cellSubtractionManager.
getOrdering(binnedParameters, trackE, trackEM1eta, j1st,useLegacyEnergyBinIndexing);
100
101
102 const double expectedEnergy = energyP ? energyP->
nnEnergyPrediction(thisEfRecTrack) : cellSubtractionManager.
fudgeMean() * thisEfRecTrack->getTrack()->e();
103 const double expectedEnergySigma = std::fabs(cellSubtractionManager.
fudgeStdDev() * thisEfRecTrack->getTrack()->e());
104
105 const std::vector<eflowTrackClusterLink*>* bestClusters_015 = thisEfRecTrack->getAlternativeClusterMatches("cone_015");
106 const std::vector<eflowTrackClusterLink*>* bestClusters_02 = thisEfRecTrack->getAlternativeClusterMatches("cone_02");
107
108
109 float totalE_015 = 0.0;
110
111
112 if (bestClusters_015){
113 for (eflowTrackClusterLink* thisLink : *bestClusters_015){
114 eflowRecCluster* thisBestCluster = thisLink->getCluster();
115 if (thisBestCluster){
117 if (theCluster) {
118 if (theCluster->
e()>0.0){
119 totalE_015 += theCluster->
e();
120 }
121 }
122 }
123 }
124 }
125
126 double pull_015 = NAN;
127 if (expectedEnergySigma > 1e-6 ) pull_015 = (totalE_015-expectedEnergy)/expectedEnergySigma;
128 thisEfRecTrack->setpull15(pull_015);
129
130 double trackPt = thisEfRecTrack->getTrack()->pt();
131
132 if (!std::isnan(pull_015)){
133
134
135
136
137
138 if (pull_015 > 0.0 + (log10(40000)-log10(trackPt))*33.2 && 0.0 != expectedEnergySigma && bestClusters_015 && bestClusters_02){
139 thisEfRecTrack->setSubtracted();
140 thisEfRecTrack->setIsInDenseEnvironment();
141
142
143 std::vector<eflowRecCluster*> theBestEfRecClusters_02;
144 for (eflowTrackClusterLink* thisLink : *bestClusters_02) if (thisLink->getCluster()->getCluster()->e() > 0.0) theBestEfRecClusters_02.push_back(thisLink->getCluster());
145 integrator->
measureNewClus(ctx, theBestEfRecClusters_02, thisEfRecTrack);
147 cellSubtractionManager.
getOrdering(binnedParameters, trackE, trackEM1eta, j1st,useLegacyEnergyBinIndexing);
148 thisEfRecTrack->setEExpect(cellSubtractionManager.
fudgeMean() * trackE, std::fabs(cellSubtractionManager.
fudgeStdDev()*trackE)*std::fabs(cellSubtractionManager.
fudgeStdDev()*trackE));
149 }
150 else {
151 thisEfRecTrack->setEExpect(expectedEnergy, expectedEnergySigma*expectedEnergySigma);
152 }
153 }
154 }
155}
bool binExists(double e, double eta) const
void measureNewClus(const xAOD::CaloCluster *clus, const eflowTrackCaloPoints &trackCalo)
eflowFirstIntENUM getFirstIntLayer() const
bool getOrdering(const eflowEEtaBinnedParameters *binnedParameters, double e, double eta, eflowFirstIntENUM j1st, bool useLegacyEnergyBinIndexing)
double fudgeStdDev() const
eflowFirstIntRegions::J1STLAYER eflowFirstIntENUM
bool trackPt(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.