37 ATH_MSG_INFO(
"Intialize TauTrackRNNClassifier tool : " << classifier );
43 return StatusCode::SUCCESS;
50 if (!vertexInHandle.
isValid()) {
51 ATH_MSG_ERROR (
"Could not retrieve HiveDataObj with key " << vertexInHandle.
key());
52 return StatusCode::FAILURE;
69 std::vector<xAOD::TauTrack*> vLRTs;
71 while(
it != vTracks.end()) {
74 it = vTracks.erase(
it);
83 ATH_CHECK(classifier->classifyTracks(vLRTs, xTau, vertexContainer, tauTrackCon,
true));
93 std::vector<xAOD::TauTrack*> excludedTracks;
95 while(
it != vTracks.end()) {
98 excludedTracks.push_back(*
it);
99 it = vTracks.erase(
it);
107 ATH_CHECK(classifier->classifyTracks(excludedTracks, xTau, vertexContainer, tauTrackCon,
true));
113 ATH_CHECK(classifier->classifyTracks(vTracks, xTau, vertexContainer, tauTrackCon));
117 std::sort(tauTrackLinks.begin(), tauTrackLinks.end(),
sortTracks);
120 charge += trk->track()->charge();
143 return StatusCode::SUCCESS;
151 TrackRNN::TrackRNN(
const std::string&
name)
157 TrackRNN::~TrackRNN()
165 ATH_MSG_INFO(
"Using calibration file: " << inputWeightsPath);
167 std::ifstream nn_config_istream(inputWeightsPath);
174 return StatusCode::FAILURE;
177 return StatusCode::SUCCESS;
185 bool skipTracks)
const
187 if(vTracks.empty()) {
188 return StatusCode::SUCCESS;
199 idScoreCharged(*
track) = 0.;
200 idScoreConv(*
track) = 0.;
201 idScoreIso(*
track) = 0.;
202 idScoreFake(*
track) = 0.;
204 return StatusCode::SUCCESS;
215 seqInput[
"input_1"] = valueMap;
219 std::vector<double> vClassProb(5);
221 for (
unsigned int i = 0;
i < vTracks.size(); ++
i){
230 vClassProb[0] = mValue[
"type_0"][
i];
231 vClassProb[1] = mValue[
"type_1"][
i];
232 vClassProb[2] = mValue[
"type_2"][
i];
233 vClassProb[3] = mValue[
"type_3"][
i];
237 idScoreCharged(*vTracks[
i]) = vClassProb[0];
238 idScoreConv(*vTracks[
i]) = vClassProb[1];
239 idScoreIso(*vTracks[
i]) = vClassProb[2];
240 idScoreFake(*vTracks[
i]) = vClassProb[3];
243 for (
unsigned int j = 1; j < vClassProb.size(); ++j){
244 if(vClassProb[j] > vClassProb[iMaxIndex]) iMaxIndex = j;
253 }
else if(iMaxIndex == 0){
255 }
else if(iMaxIndex == 1){
257 }
else if(iMaxIndex == 2){
263 bool alreadyUsed =
false;
264 for (
unsigned int i = 0;
i < vTracks.size(); ++
i){
269 if( vTracks[
i]->
track() == tau_trk->track()) alreadyUsed =
true;
273 ATH_MSG_INFO(
"Found Already Used charged track new, now putting it as unclassified" );
283 return StatusCode::SUCCESS;
295 unsigned int n_timeSteps = vTracks.size();
300 valueMap[
"log(trackPt)"] = std::vector<double>(n_timeSteps);
301 valueMap[
"log(jetSeedPt)"] = std::vector<double>(n_timeSteps);
302 valueMap[
"trackPt/tauPtIntermediateAxis"] = std::vector<double>(n_timeSteps);
303 valueMap[
"trackEta"] = std::vector<double>(n_timeSteps);
304 valueMap[
"z0sinthetaTJVA"] = std::vector<double>(n_timeSteps);
305 valueMap[
"z0sinthetaSigTJVA"] = std::vector<double>(n_timeSteps);
306 valueMap[
"log(rConv)"] = std::vector<double>(n_timeSteps);
307 valueMap[
"tanh(rConvII/500)"] = std::vector<double>(n_timeSteps);
308 valueMap[
"dRJetSeedAxis"] = std::vector<double>(n_timeSteps);
309 valueMap[
"dRIntermediateAxis"] = std::vector<double>(n_timeSteps);
310 valueMap[
"tanh(d0SigTJVA/10)"] = std::vector<double>(n_timeSteps);
311 valueMap[
"tanh(d0TJVA/10)"] = std::vector<double>(n_timeSteps);
312 valueMap[
"qOverP*1000"] = std::vector<double>(n_timeSteps);
313 valueMap[
"numberOfInnermostPixelLayerHits"] = std::vector<double>(n_timeSteps);
314 valueMap[
"numberOfPixelSharedHits"] = std::vector<double>(n_timeSteps);
315 valueMap[
"numberOfSCTSharedHits"] = std::vector<double>(n_timeSteps);
316 valueMap[
"numberOfTRTHits"] = std::vector<double>(n_timeSteps);
317 valueMap[
"eProbabilityHT"] = std::vector<double>(n_timeSteps);
318 valueMap[
"nPixHits"] = std::vector<double>(n_timeSteps);
319 valueMap[
"nSCTHits"] = std::vector<double>(n_timeSteps);
320 valueMap[
"dz0_TV_PV0"] = std::vector<double>(n_timeSteps);
321 valueMap[
"log_sumpt_TV"] = std::vector<double>(n_timeSteps);
322 valueMap[
"log_sumpt2_TV"] = std::vector<double>(n_timeSteps);
323 valueMap[
"log_sumpt_PV0"] = std::vector<double>(n_timeSteps);
324 valueMap[
"log_sumpt2_PV0"] = std::vector<double>(n_timeSteps);
325 valueMap[
"charge"] = std::vector<double>(n_timeSteps);
327 valueMap[
"(trackPt/jetSeedPt)"] = std::vector<double>(n_timeSteps);
328 valueMap[
"numberOfInnermostPixelLayerEndcapHits"] = std::vector<double>(n_timeSteps);
329 valueMap[
"nSiHits"] = std::vector<double>(n_timeSteps);
335 double dz0_TV_PV0 = 0., sumpt_TV = 0., sumpt2_TV = 0., sumpt_PV0 = 0., sumpt2_PV0 = 0.;
336 if(vertexContainer !=
nullptr && !vertexContainer->
empty() && xTau.
vertex()!=
nullptr) {
337 dz0_TV_PV0 = xTau.
vertex()->
z() - vertexContainer->
at(0)->z();
340 sumpt_PV0 += (*trk)->pt();
341 sumpt2_PV0 +=
pow((*trk)->pt(), 2.);
344 sumpt_TV += (*trk)->pt();
345 sumpt2_TV +=
pow((*trk)->pt(), 2.);
349 double log_sumpt_TV = (sumpt_TV>0.) ?
std::log(sumpt_TV) : 0.;
350 double log_sumpt2_TV = (sumpt2_TV>0.) ?
std::log(sumpt2_TV) : 0.;
351 double log_sumpt_PV0 = (sumpt_PV0>0.) ?
std::log(sumpt_PV0) : 0.;
352 double log_sumpt2_PV0 = (sumpt2_PV0>0.) ?
std::log(sumpt2_PV0) : 0.;
379 valueMap[
"log(trackPt)"][
i] =
std::log( xTrackParticle->
pt() );
380 valueMap[
"log(jetSeedPt)"][
i] = log_ptJetSeed;
382 valueMap[
"trackEta"][
i] = xTrackParticle->
eta();
383 valueMap[
"z0sinthetaTJVA"][
i] = xTrack->z0sinthetaTJVA();
384 valueMap[
"z0sinthetaSigTJVA"][
i] = xTrack->z0sinthetaSigTJVA();
385 valueMap[
"log(rConv)"][
i] =
std::log( xTrack->rConv() );
386 valueMap[
"tanh(rConvII/500)"][
i] = std::tanh( xTrack->rConvII()/500. );
390 valueMap[
"tanh(d0SigTJVA/10)"][
i] = std::tanh( xTrack->d0SigTJVA()/10. );
391 valueMap[
"tanh(d0TJVA/10)"][
i] = std::tanh( xTrack->d0TJVA()/10. );
392 valueMap[
"qOverP*1000"][
i] = xTrackParticle->
qOverP()*1000.;
396 valueMap[
"numberOfTRTHits"][
i] =
nTRTHits;
400 valueMap[
"dz0_TV_PV0"][
i] = dz0_TV_PV0;
401 valueMap[
"log_sumpt_TV"][
i] = log_sumpt_TV;
402 valueMap[
"log_sumpt2_TV"][
i] = log_sumpt2_TV;
403 valueMap[
"log_sumpt_PV0"][
i] = log_sumpt_PV0;
404 valueMap[
"log_sumpt2_PV0"][
i] = log_sumpt2_PV0;
405 valueMap[
"charge"][
i] = xTrackParticle->
charge();
407 valueMap[
"(trackPt/jetSeedPt)"][
i] = xTrackParticle->
pt()/xTau.
ptJetSeed();
417 return StatusCode::SUCCESS;