65 {
66
68
69 std::vector<eflowRecCluster*> matchedClusters;
70 matchedClusters.clear();
71 std::vector<eflowTrackClusterLink*>
links = thisEfRecTrack->getClusterMatches();
72 std::vector<eflowTrackClusterLink*>::iterator itLink =
links.begin();
73 std::vector<eflowTrackClusterLink*>::iterator endLink =
links.end();
74 for (; itLink != endLink; ++itLink) {
75 matchedClusters.push_back((*itLink)->getCluster());
76 }
77
78 double trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getEM1eta();
79
80 if(trackEM1eta<-998.) trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getEM2eta();
81
82 if(trackEM1eta<-998.) trackEM1eta = thisEfRecTrack->getTrackCaloPoints().getFCAL0eta();
83
84 double trackE = thisEfRecTrack->getTrack()->e();
85
86 if (!binnedParameters->
binExists(trackE, trackEM1eta)) {
87 thisEfRecTrack->setHasBin(false);
88 return;
89 }
90
91
94
95
96 thisEfRecTrack->setLayerHED(j1st);
97
98
99 eflowRingSubtractionManager& cellSubtractionManager = thisEfRecTrack->getCellSubtractionManager();
100 cellSubtractionManager.
getOrdering(binnedParameters, trackE, trackEM1eta, j1st,useLegacyEnergyBinIndexing);
101
102
103 const double expectedEnergy = energyP ? energyP->
nnEnergyPrediction(thisEfRecTrack) : cellSubtractionManager.
fudgeMean() * thisEfRecTrack->getTrack()->e();
104 const double expectedEnergySigma = fabs(cellSubtractionManager.
fudgeStdDev() * thisEfRecTrack->getTrack()->e());
105
106 const std::vector<eflowTrackClusterLink*>* bestClusters_015 = thisEfRecTrack->getAlternativeClusterMatches("cone_015");
107 const std::vector<eflowTrackClusterLink*>* bestClusters_02 = thisEfRecTrack->getAlternativeClusterMatches("cone_02");
108
109
110 float totalE_015 = 0.0;
111
112
113 if (bestClusters_015){
114 for (eflowTrackClusterLink* thisLink : *bestClusters_015){
115 eflowRecCluster* thisBestCluster = thisLink->getCluster();
116 if (thisBestCluster){
118 if (theCluster) {
119 if (theCluster->
e()>0.0){
120 totalE_015 += theCluster->
e();
121 }
122 }
123 }
124 }
125 }
126
127 double pull_015 = NAN;
128 if (expectedEnergySigma > 1e-6 ) pull_015 = (totalE_015-expectedEnergy)/expectedEnergySigma;
129 thisEfRecTrack->setpull15(pull_015);
130
131 double trackPt = thisEfRecTrack->getTrack()->pt();
132
133 if (!std::isnan(pull_015)){
134
135
136
137
138
139 if (pull_015 > 0.0 + (log10(40000)-log10(trackPt))*33.2 && 0.0 != expectedEnergySigma && bestClusters_015 && bestClusters_02){
140 thisEfRecTrack->setSubtracted();
141 thisEfRecTrack->setIsInDenseEnvironment();
142
143
144 std::vector<eflowRecCluster*> theBestEfRecClusters_02;
145 for (eflowTrackClusterLink* thisLink : *bestClusters_02) if (thisLink->getCluster()->getCluster()->e() > 0.0) theBestEfRecClusters_02.push_back(thisLink->getCluster());
146 integrator->
measureNewClus(theBestEfRecClusters_02, thisEfRecTrack);
148 cellSubtractionManager.
getOrdering(binnedParameters, trackE, trackEM1eta, j1st,useLegacyEnergyBinIndexing);
149 thisEfRecTrack->setEExpect(cellSubtractionManager.
fudgeMean() * trackE, fabs(cellSubtractionManager.
fudgeStdDev()*trackE)*fabs(cellSubtractionManager.
fudgeStdDev()*trackE));
150 }
151 else {
152 thisEfRecTrack->setEExpect(expectedEnergy, expectedEnergySigma*expectedEnergySigma);
153 }
154 }
155 }
156}
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.