9 #include "TLorentzVector.h"
25 return u->getBDTValue() >
v->getBDTValue();
30 return u->p4().Et() >
v->p4().Et();
36 m_Tool_InformationStore(
"PanTau::Tool_InformationStore/Tool_InformationStore"){
50 ATH_CHECK( m_Tool_InformationStore.retrieve() );
52 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Sum", m_varTypeName_Sum) );
53 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Ratio", m_varTypeName_Ratio) );
54 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_EtInRing", m_varTypeName_EtInRing) );
55 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Isolation", m_varTypeName_Isolation) );
56 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Num", m_varTypeName_Num) );
57 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Mean", m_varTypeName_Mean) );
58 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_StdDev", m_varTypeName_StdDev) );
59 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_HLV", m_varTypeName_HLV) );
60 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Angle", m_varTypeName_Angle) );
61 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_DeltaR", m_varTypeName_DeltaR) );
62 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_JetMoment", m_varTypeName_JetMoment) );
63 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Combined", m_varTypeName_Combined) );
64 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_JetShape", m_varTypeName_JetShape) );
65 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_ImpactParams", m_varTypeName_ImpactParams) );
66 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_Basic", m_varTypeName_Basic) );
67 ATH_CHECK( m_Tool_InformationStore->getInfo_String(
"FeatureExtractor_VarTypeName_varTypeName_PID", m_varTypeName_PID) );
69 ATH_CHECK( m_Tool_InformationStore->getInfo_Int(
"FeatureExtractor_UseEmptySeeds", m_Config_UseEmptySeeds) );
71 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"CellBased_BinEdges_Eta", m_Config_CellBased_BinEdges_Eta) );
72 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"CellBased_EtaBinned_Pi0MVACut_1prong", m_Config_CellBased_EtaBinned_Pi0MVACut_1prong) );
73 ATH_CHECK( m_Tool_InformationStore->getInfo_VecDouble(
"CellBased_EtaBinned_Pi0MVACut_3prong", m_Config_CellBased_EtaBinned_Pi0MVACut_3prong) );
75 return StatusCode::SUCCESS;
80 std::map<std::string, double>& variants_SeedEt) {
83 variants_SeedEt[
"EtAllConsts"] = 0.0;
84 variants_SeedEt[
"EtNeutLowA"] = 0.0;
85 variants_SeedEt[
"EtNeutLowB"] = 0.0;
88 for (
unsigned int iConst = 0; iConst < tauConstituents.size(); iConst++) {
92 double curEt = curConstituent->
p4().Et();
96 variants_SeedEt[
"EtAllConsts"] += curEt;
97 variants_SeedEt[
"EtNeutLowA"] += curEt;
98 variants_SeedEt[
"EtNeutLowB"] += curEt;
101 variants_SeedEt[
"EtAllConsts"] += curEt;
104 variants_SeedEt[
"EtNeutLowA"] += curEt;
107 variants_SeedEt[
"EtNeutLowB"] += curEt;
116 const std::string& featName,
118 const std::map<std::string, double>& denominatorMap) {
119 std::map<std::string, double>::const_iterator
it = denominatorMap.begin();
120 for(;
it!=denominatorMap.end(); ++
it) {
134 bool isBadSeed = (noAnyConstituents || noSelConstituents || noValidInputTau);
135 if(
static_cast<bool>(m_Config_UseEmptySeeds)) isBadSeed = noValidInputTau;
138 ATH_MSG_DEBUG(
"Seed is not valid for feature extraction (no constituents or no valid input tau) - just fill isPanTauCandidate feature");
140 return StatusCode::SUCCESS;
145 ATH_CHECK( calculateBasicFeatures(inSeed) );
147 ATH_CHECK( addConstituentMomenta(inSeed) );
150 std::map<std::string, double> variants_SeedEt;
165 ATH_CHECK( addCombinedFeatures(inSeed, variants_SeedEt) );
168 ATH_CHECK( addImpactParameterFeatures(inSeed) );
170 return StatusCode::SUCCESS;
179 std::string featurePrefix = m_varTypeName_Basic;
180 std::string
name = featureAlg +
"_" + featurePrefix;
182 double SumCharge = 0;
183 double AbsCharge = 0;
190 bool foundIt =
false;
192 if(!foundIt)
continue;
196 unsigned int nConstituents = curList.size();
201 for(
unsigned int iConst=0; iConst<nConstituents; iConst++) {
203 SumCharge += curConstituent->
getCharge();
204 AbsCharge += std::abs((
double)curConstituent->
getCharge());
221 featureMap->
addFeature(
name +
"_ProtoMomentumCore_pt", tlv_ProtoMomentumCore.Perp());
222 featureMap->
addFeature(
name +
"_ProtoMomentumCore_eta", tlv_ProtoMomentumCore.Eta());
223 featureMap->
addFeature(
name +
"_ProtoMomentumCore_phi", tlv_ProtoMomentumCore.Phi());
224 featureMap->
addFeature(
name +
"_ProtoMomentumCore_m", tlv_ProtoMomentumCore.M());
227 featureMap->
addFeature(
name +
"_ProtoMomentumWide_pt", tlv_ProtoMomentumWide.Perp());
228 featureMap->
addFeature(
name +
"_ProtoMomentumWide_eta", tlv_ProtoMomentumWide.Eta());
229 featureMap->
addFeature(
name +
"_ProtoMomentumWide_phi", tlv_ProtoMomentumWide.Phi());
230 featureMap->
addFeature(
name +
"_ProtoMomentumWide_m", tlv_ProtoMomentumWide.M());
232 return StatusCode::SUCCESS;
239 std::string prefixVARType = m_varTypeName_HLV;
242 std::vector<PanTau::TauConstituent*> list_TypeConstituents = inSeed->
getConstituentsOfType(iType, isOK);
243 unsigned int n_Constituents_Type = list_TypeConstituents.size();
244 TLorentzVector tlv_TypeConstituents = inSeed->
getSubsystemHLV(iType, isOK);
246 std::string
name = inputAlgName +
"_" + curTypeName +
"_" + prefixVARType;
248 std::vector<PanTau::TauConstituent*> list_TypeConstituents_SortBDT = inSeed->
getConstituentsOfType(iType, isOK);
249 std::sort(list_TypeConstituents_SortBDT.begin(), list_TypeConstituents_SortBDT.end(),
sortTauConstituentMVA);
251 if(!list_TypeConstituents.empty()) {
252 tauFeatureMap->
addFeature(
name +
"_SumPt", tlv_TypeConstituents.Perp());
253 tauFeatureMap->
addFeature(
name +
"_SumEta", tlv_TypeConstituents.Eta());
254 tauFeatureMap->
addFeature(
name +
"_SumPhi", tlv_TypeConstituents.Phi());
255 tauFeatureMap->
addFeature(
name +
"_SumM", tlv_TypeConstituents.M());
259 std::vector<double> curConsts_pt = std::vector<double>(0);
260 std::vector<double> curConsts_eta = std::vector<double>(0);
261 std::vector<double> curConsts_phi = std::vector<double>(0);
262 std::vector<double> curConsts_m = std::vector<double>(0);
263 for(
unsigned int iConst=0; iConst<n_Constituents_Type; iConst++) {
264 TLorentzVector tlv_curConst = list_TypeConstituents[iConst]->p4();
265 curConsts_pt.push_back(tlv_curConst.Perp());
266 curConsts_eta.push_back(tlv_curConst.Eta());
267 curConsts_phi.push_back(tlv_curConst.Phi());
268 curConsts_m.push_back(tlv_curConst.M());
276 std::vector<double> curConstsBDT_pt = std::vector<double>(0);
277 std::vector<double> curConstsBDT_eta = std::vector<double>(0);
278 std::vector<double> curConstsBDT_phi = std::vector<double>(0);
279 std::vector<double> curConstsBDT_m = std::vector<double>(0);
280 for(
unsigned int iConst=0; iConst<n_Constituents_Type; iConst++) {
281 TLorentzVector tlv_curConstBDT = list_TypeConstituents_SortBDT[iConst]->p4();
282 curConstsBDT_pt.push_back(tlv_curConstBDT.Perp());
283 curConstsBDT_eta.push_back(tlv_curConstBDT.Eta());
284 curConstsBDT_phi.push_back(tlv_curConstBDT.Phi());
285 curConstsBDT_m.push_back(tlv_curConstBDT.M());
287 tauFeatureMap->
addVecFeature(
name +
"_BDTSort_Constituents_pt", curConstsBDT_pt);
288 tauFeatureMap->
addVecFeature(
name +
"_BDTSort_Constituents_eta", curConstsBDT_eta);
289 tauFeatureMap->
addVecFeature(
name +
"_BDTSort_Constituents_phi", curConstsBDT_phi);
294 return StatusCode::SUCCESS;
299 int tauConstituentType,
300 const std::map<std::string, double>& variants_SeedEt)
const {
310 bool foundIt =
false;
311 std::vector<PanTau::TauConstituent*> list_TypeConstituents;
314 if (!foundIt)
return StatusCode::SUCCESS;
316 unsigned int n_Constituents_All = list_AllConstituents.size();
317 unsigned int n_Constituents_Type = list_TypeConstituents.size();
323 TLorentzVector tlv_1st_Et;
324 TLorentzVector tlv_2nd_Et;
325 TLorentzVector tlv_3rd_Et;
327 if(!list_TypeConstituents.empty()) tlv_1st_Et = list_TypeConstituents[0]->p4();
328 if(list_TypeConstituents.size() > 1) tlv_2nd_Et = list_TypeConstituents[1]->p4();
329 if(list_TypeConstituents.size() > 2) tlv_3rd_Et = list_TypeConstituents[2]->p4();
332 TLorentzVector tlv_Last_Et;
333 if(!list_TypeConstituents.empty()) tlv_Last_Et = list_TypeConstituents.back()->p4();
336 std::vector<PanTau::TauConstituent*> list_TypeConstituents_SortBDT = list_TypeConstituents;
337 std::sort(list_TypeConstituents_SortBDT.begin(), list_TypeConstituents_SortBDT.end(),
sortTauConstituentMVA);
339 TLorentzVector tlv_1st_BDT;
340 TLorentzVector tlv_2nd_BDT;
341 TLorentzVector tlv_3rd_BDT;
343 if(!list_TypeConstituents_SortBDT.empty()) tlv_1st_BDT = list_TypeConstituents_SortBDT[0]->p4();
344 if(list_TypeConstituents_SortBDT.size() > 1) tlv_2nd_BDT = list_TypeConstituents_SortBDT[1]->p4();
345 if(list_TypeConstituents_SortBDT.size() > 2) tlv_3rd_BDT = list_TypeConstituents_SortBDT[2]->p4();
352 TLorentzVector tlv_TypeConstituents;
354 double sum_DRToReference = 0;
355 double sum_DR2ToReference = 0;
356 double sum_DRToLeading = 0;
357 double sum_DR2ToLeading = 0;
364 double sum_EtxDR = 0;
365 double sum_EtxDR2 = 0;
366 double sum_EtxDRprime = 0;
367 double sum_EtxAngle = 0;
369 double sum_EtInRing00To01 = 0;
370 double sum_EtInRing01To02 = 0;
371 double sum_EtInRing02To03 = 0;
372 double sum_EtInRing03To04 = 0;
373 double sum_EtInRing04To05 = 0;
375 unsigned int num_EFOs = 0;
376 unsigned int num_ConstsIn00To01 = 0;
377 unsigned int num_ConstsIn01To02 = 0;
378 unsigned int num_ConstsIn02To03 = 0;
379 unsigned int num_ConstsIn03To04 = 0;
381 double max_DeltaR = 0;
387 for(
unsigned int iTypeConst=0; iTypeConst<list_TypeConstituents.size(); iTypeConst++) {
390 TLorentzVector tlv_curConst = list_TypeConstituents.at(iTypeConst)->p4();
393 if (std::isnan(tlv_curConst.Pt()) || std::isinf(tlv_curConst.Pt()))
continue;
398 tlv_TypeConstituents += tlv_curConst;
401 double hlp_Et = tlv_curConst.Et();
402 double hlp_Et2 = hlp_Et * hlp_Et;
403 double hlp_E = tlv_curConst.E();
404 double hlp_E2 = hlp_E * hlp_E;
405 double hlp_DeltaR = tlv_Reference.DeltaR(tlv_curConst);
406 double hlp_DeltaR2 = hlp_DeltaR * hlp_DeltaR;
407 double hlp_DeltaRLeading = (tlv_1st_Et.Pt() == 0 ? 0 : tlv_1st_Et.DeltaR(tlv_curConst));
408 double hlp_DeltaR2Leading = hlp_DeltaRLeading * hlp_DeltaRLeading;
409 double hlp_DeltaRprime = m_HelperFunctions.deltaRprime(tlv_Reference.Vect(), tlv_curConst.Vect());
410 double hlp_Angle = tlv_Reference.Angle(tlv_curConst.Vect());
413 sum_DRToReference += hlp_DeltaR;
414 sum_DR2ToReference += hlp_DeltaR2;
415 sum_DRToLeading += hlp_DeltaRLeading;
416 sum_DR2ToLeading += hlp_DeltaR2Leading;
423 sum_EtxDR += hlp_Et * hlp_DeltaR;
424 sum_EtxDR2 += hlp_Et * hlp_DeltaR2;
425 sum_EtxDRprime += hlp_Et * hlp_DeltaRprime;
426 sum_EtxAngle += hlp_Et * hlp_Angle;
428 if(hlp_DeltaR >= 0.0 && hlp_DeltaR < 0.1) sum_EtInRing00To01 += hlp_Et;
429 if(hlp_DeltaR >= 0.1 && hlp_DeltaR < 0.2) sum_EtInRing01To02 += hlp_Et;
430 if(hlp_DeltaR >= 0.2 && hlp_DeltaR < 0.3) sum_EtInRing02To03 += hlp_Et;
431 if(hlp_DeltaR >= 0.3 && hlp_DeltaR < 0.4) sum_EtInRing03To04 += hlp_Et;
432 if(hlp_DeltaR >= 0.4 && hlp_DeltaR < 0.5) sum_EtInRing04To05 += hlp_Et;
435 if(hlp_DeltaR >= 0.0 && hlp_DeltaR < 0.1) num_ConstsIn00To01++;
436 if(hlp_DeltaR >= 0.1 && hlp_DeltaR < 0.2) num_ConstsIn01To02++;
437 if(hlp_DeltaR >= 0.2 && hlp_DeltaR < 0.3) num_ConstsIn02To03++;
438 if(hlp_DeltaR >= 0.3 && hlp_DeltaR < 0.4) num_ConstsIn03To04++;
440 if(hlp_DeltaR > max_DeltaR) max_DeltaR = hlp_DeltaR;
450 std::string prefixVARType =
"";
454 if( num_EFOs == 0 ) {
455 return StatusCode::SUCCESS;
458 prefixVARType = m_varTypeName_Num;
459 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ConstsIn00To01", num_ConstsIn00To01);
460 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ConstsIn01To02", num_ConstsIn01To02);
461 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ConstsIn02To03", num_ConstsIn02To03);
462 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ConstsIn03To04", num_ConstsIn03To04);
465 prefixVARType = m_varTypeName_PID;
468 double value_sumBDT_BDTSort = 0;
469 for(
unsigned int iTypeConst=0; iTypeConst<n_Constituents_Type; iTypeConst++) {
471 double value_BDT = list_TypeConstituents_SortBDT[iTypeConst]->getBDTValue();
472 if( std::isnan(value_BDT) || std::isinf(value_BDT) )
continue;
476 double mvaCorrection = 0.0;
477 double etaCurConst = list_TypeConstituents_SortBDT[iTypeConst]->p4().Eta();
478 int etaBinIndex = m_HelperFunctions.getBinIndex(m_Config_CellBased_BinEdges_Eta, std::abs(etaCurConst));
480 if(numTrack == 1) { mvaCorrection = m_Config_CellBased_EtaBinned_Pi0MVACut_1prong.at(etaBinIndex); }
481 else { mvaCorrection = m_Config_CellBased_EtaBinned_Pi0MVACut_3prong.at(etaBinIndex); }
483 value_BDT = value_BDT - mvaCorrection;
486 value_sumBDT_BDTSort += value_BDT;
487 std::string iConst = m_HelperFunctions.convertNumberToString((
double)(iTypeConst+1));
488 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_BDTValues_BDTSort_" + iConst, value_BDT);
489 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_BDTValuesSum_BDTSort_" + iConst, value_sumBDT_BDTSort);
493 double value_sumBDT_EtSort = 0;
494 for(
unsigned int iTypeConst=0; iTypeConst<n_Constituents_Type; iTypeConst++) {
496 double value_BDT = list_TypeConstituents[iTypeConst]->getBDTValue();
497 if( std::isnan(value_BDT) || std::isinf(value_BDT) )
continue;
499 value_sumBDT_EtSort += value_BDT;
500 std::string iConst = m_HelperFunctions.convertNumberToString((
double)(iTypeConst+1));
501 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_BDTValues_EtSort_" + iConst, value_BDT);
502 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_BDTValuesSum_EtSort_" + iConst, value_sumBDT_EtSort);
511 TLorentzVector totalTLV_SumShots = TLorentzVector(0., 0., 0., 0.);
512 unsigned int totalPhotonsInSeed = 0;
513 unsigned int totalShotsInSeed = 0;
514 double maxDeltaRSumShotToConst = -999;
515 double minDeltaRSumShotToConst = 999;
516 double maxDeltaRSumShotToTau = -999;
517 double minDeltaRSumShotToTau = 999;
519 std::vector<TLorentzVector> allShotTLVs = std::vector<TLorentzVector>(0);
521 for(
unsigned int iConst=0; iConst<list_TypeConstituents_SortBDT.size(); iConst++) {
524 TLorentzVector tlv_CurConst = curConst->
p4();
525 std::vector<PanTau::TauConstituent*> shotConstituents = curConst->
getShots();
526 unsigned int nShots = shotConstituents.size();
528 unsigned int totalPhotonsInNeutral = 0;
529 TLorentzVector tlv_SumShots = TLorentzVector(0., 0., 0., 0.);
531 for(
unsigned int iShot=0; iShot<nShots; iShot++) {
534 tlv_SumShots += curShot->
p4();
535 allShotTLVs.push_back(curShot->
p4());
537 totalShotsInSeed += nShots;
538 totalTLV_SumShots += tlv_SumShots;
539 totalPhotonsInSeed += totalPhotonsInNeutral;
541 std::string iConstStr = m_HelperFunctions.convertNumberToString((
double)(iConst+1));
543 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_nPhotons_BDTSort_" + iConstStr, totalPhotonsInNeutral);
544 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_nShots_BDTSort_" + iConstStr, nShots);
547 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_SumShots_Et_BDTSort_" + iConstStr, tlv_SumShots.Et());
548 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_SumShots_Eta_BDTSort_" + iConstStr, tlv_SumShots.Eta());
549 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_SumShots_Phi_BDTSort_" + iConstStr, tlv_SumShots.Phi());
550 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_SumShots_M_BDTSort_" + iConstStr, tlv_SumShots.M());
553 double deltaRSumShotToConst = tlv_CurConst.DeltaR(tlv_SumShots);
554 if(deltaRSumShotToConst > maxDeltaRSumShotToConst) maxDeltaRSumShotToConst = deltaRSumShotToConst;
555 if(deltaRSumShotToConst < minDeltaRSumShotToConst) minDeltaRSumShotToConst = deltaRSumShotToConst;
556 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ConstDeltaRToSumShots_BDTSort_" + iConstStr, deltaRSumShotToConst);
557 if(tlv_CurConst.Et() > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtSumShotsOverConstEt_BDTSort_" + iConstStr, tlv_SumShots.Et() / tlv_CurConst.Et());
560 double deltaRSumShotToTau = tlv_Reference.DeltaR(tlv_SumShots);
561 if(deltaRSumShotToTau > maxDeltaRSumShotToTau) maxDeltaRSumShotToTau = deltaRSumShotToTau;
562 if(deltaRSumShotToTau < minDeltaRSumShotToTau) minDeltaRSumShotToTau = deltaRSumShotToTau;
563 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_TauDeltaRToSumShots_BDTSort_" + iConstStr, deltaRSumShotToTau);
564 if(tlv_Reference.Et() > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtSumShotsOverTauEt_BDTSort_" + iConstStr, tlv_SumShots.Et() / tlv_Reference.Et());
569 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MaxDeltaRSumShotToConst", maxDeltaRSumShotToConst);
570 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MinDeltaRSumShotToConst", minDeltaRSumShotToConst);
571 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MaxDeltaRSumShotToTau", maxDeltaRSumShotToTau);
572 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MinDeltaRSumShotToTau", minDeltaRSumShotToTau);
573 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_DeltaRAllShotsToTau", tlv_Reference.DeltaR(totalTLV_SumShots));
576 if(tlv_Reference.Et() > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtAllShotsOverEtTau", totalTLV_SumShots.Et() / tlv_Reference.Et());
579 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_NShotsInSeed", totalShotsInSeed);
580 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_NPhotonsInSeed", totalPhotonsInSeed);
583 double maxDiShotMass = -200;
584 double minDiShotMass = 99999;
585 double bestDiShotMass = -200;
586 double bestPi0Diff = 99999;
587 for(
unsigned int iShot=0; iShot<allShotTLVs.size(); iShot++) {
588 TLorentzVector cur_iShot = allShotTLVs.at(iShot);
590 for(
unsigned int jShot=iShot+1; jShot<allShotTLVs.size(); jShot++) {
591 TLorentzVector cur_jShot = allShotTLVs.at(jShot);
593 ATH_MSG_DEBUG(
"\t\tBuilding di-shot mass of shots " << iShot <<
" & " << jShot);
594 TLorentzVector tlv_DiShot = cur_iShot + cur_jShot;
595 double curDiShotMass = tlv_DiShot.M();
596 double curpi0Diff = std::abs(curDiShotMass - 134.98);
598 if(curpi0Diff < bestPi0Diff) bestDiShotMass = curDiShotMass;
599 if(curDiShotMass > maxDiShotMass) maxDiShotMass = curDiShotMass;
600 if(curDiShotMass < minDiShotMass) minDiShotMass = curDiShotMass;
604 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_BestDiShotMass", bestDiShotMass);
605 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MaxDiShotMass", maxDiShotMass);
606 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MinDiShotMass", minDiShotMass);
612 prefixVARType = m_varTypeName_Ratio;
614 if(curTypeName != curTypeName_All) addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtOver", sum_Et, variants_SeedEt);
616 if(tlv_1st_Et.Pt() != 0) addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stEtOver", tlv_1st_Et.Et(), variants_SeedEt);
617 if(tlv_1st_BDT.Pt() != 0) addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stBDTEtOver", tlv_1st_BDT.Et(), variants_SeedEt);
619 if(tlv_Last_Et.Pt() != 0) addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_SoftestEtOver", tlv_Last_Et.Et(), variants_SeedEt);
621 if(tlv_1st_Et.Pt() != 0 && sum_Et > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stEtOverTypeEt", tlv_1st_Et.Et() / sum_Et);
622 if(tlv_1st_BDT.Pt() != 0 && sum_Et > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stBDTEtOverTypeEt", tlv_1st_BDT.Et() / sum_Et);
624 if(n_Constituents_All != 0 && curTypeName != curTypeName_All) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EFOsOverTotalEFOs", (
double)(((
double)num_EFOs) / ((
double)n_Constituents_All)));
625 if(tlv_1st_Et.Pt() != 0 && tlv_2nd_Et.Pt() != 0) {
626 if(tlv_1st_Et.Et() > 0. && tlv_2nd_Et.Et() > 0. ) {
627 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log1stEtOver2ndEt", std::log10(tlv_1st_Et.Et() / tlv_2nd_Et.Et()));
630 if(tlv_1st_Et.Pt() != 0 && tlv_3rd_Et.Pt() != 0) {
631 if(tlv_1st_Et.Et() > 0. && tlv_3rd_Et.Et() > 0.) {
632 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log1stEtOver3rdEt", std::log10(tlv_1st_Et.Et() / tlv_3rd_Et.Et()));
635 if(tlv_2nd_Et.Pt() != 0 && tlv_3rd_Et.Pt() != 0) {
636 if(tlv_2nd_Et.Et() > 0. && tlv_3rd_Et.Et() > 0.) {
637 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log2ndEtOver3rdEt", std::log10(tlv_2nd_Et.Et() / tlv_3rd_Et.Et()));
642 if(tlv_1st_BDT.Pt() != 0 && tlv_2nd_BDT.Pt() != 0) {
643 if(tlv_1st_BDT.Et() > 0. && tlv_2nd_BDT.Et() > 0. ) {
644 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log1stEtOver2ndEt_BDTSort", std::log10(tlv_1st_BDT.Et() / tlv_2nd_BDT.Et()));
647 if(tlv_1st_BDT.Pt() != 0 && tlv_3rd_BDT.Pt() != 0) {
648 if(tlv_1st_BDT.Et() > 0. && tlv_3rd_BDT.Et() > 0.) {
649 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log1stEtOver3rdEt_BDTSort", std::log10(tlv_1st_BDT.Et() / tlv_3rd_BDT.Et()));
652 if(tlv_2nd_BDT.Pt() != 0 && tlv_3rd_BDT.Pt() != 0) {
653 if(tlv_2nd_BDT.Et() > 0. && tlv_3rd_BDT.Et() > 0.) {
654 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Log2ndEtOver3rdEt_BDTSort", std::log10(tlv_2nd_BDT.Et() / tlv_3rd_BDT.Et()));
660 if(curTypeName == curTypeName_All) {
661 prefixVARType = m_varTypeName_EtInRing;
663 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_00To01", sum_EtInRing00To01);
664 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_01To02", sum_EtInRing01To02);
665 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_02To03", sum_EtInRing02To03);
666 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_03To04", sum_EtInRing03To04);
667 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_04To05", sum_EtInRing04To05);
672 if(curTypeName == curTypeName_All) {
673 prefixVARType = m_varTypeName_Isolation;
675 double iso_EtIn01 = sum_EtInRing00To01;
676 double iso_EtIn02 = iso_EtIn01 + sum_EtInRing01To02;
677 double iso_EtIn03 = iso_EtIn02 + sum_EtInRing02To03;
678 double iso_EtIn04 = iso_EtIn03 + sum_EtInRing03To04;
680 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn01Over", iso_EtIn01, variants_SeedEt);
681 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn02Over", iso_EtIn02, variants_SeedEt);
682 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn03Over", iso_EtIn03, variants_SeedEt);
683 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn04Over", iso_EtIn04, variants_SeedEt);
685 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn00To02Over", (sum_EtInRing00To01 + sum_EtInRing01To02), variants_SeedEt);
686 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn02To04Over", (sum_EtInRing02To03 + sum_EtInRing03To04), variants_SeedEt);
688 if(iso_EtIn02>0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn01OverEtIn02", iso_EtIn01 / iso_EtIn02);
689 if(iso_EtIn04>0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtIn01OverEtIn04", iso_EtIn01 / iso_EtIn04);
694 prefixVARType = m_varTypeName_Mean;
697 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Et_Wrt", (sum_Et / num_EFOs), variants_SeedEt);
698 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_DRToJetAxis_Wrt", (sum_DRToReference / num_EFOs), variants_SeedEt);
699 addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_DRToLeading_Wrt", (sum_DRToLeading / num_EFOs), variants_SeedEt);
704 prefixVARType = m_varTypeName_StdDev;
706 double stddev_E = m_HelperFunctions.stddev(sum_E2, sum_E, num_EFOs);
707 double stddev_Et = m_HelperFunctions.stddev(sum_Et2, sum_Et, num_EFOs);
708 double stddev_DRToJetAxis = m_HelperFunctions.stddev(sum_DR2ToReference, sum_DRToReference, num_EFOs);
709 double stddev_DRToLeading = m_HelperFunctions.stddev(sum_DRToLeading, sum_DR2ToLeading, num_EFOs);
711 if(stddev_E > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_E", stddev_E);
712 if(stddev_Et > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Et", stddev_Et);
713 if(stddev_Et > 0.) addFeatureWrtSeedEnergy(tauFeatureMap, inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Et_Wrt", stddev_Et, variants_SeedEt);
714 if(stddev_DRToJetAxis > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_DRToJetAxis", stddev_DRToJetAxis);
715 if(stddev_DRToLeading > 0.) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_DRToLeading", stddev_DRToLeading);
719 prefixVARType = m_varTypeName_Angle;
725 if(curTypeName != curTypeName_All) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ToJetAxis", tlv_Reference.Angle(tlv_TypeConstituents.Vect()));
726 if(tlv_1st_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stToJetAxis", tlv_Reference.Angle(tlv_1st_Et.Vect()));
727 if(tlv_2nd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndToJetAxis", tlv_Reference.Angle(tlv_2nd_Et.Vect()));
728 if(tlv_3rd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_3rdToJetAxis", tlv_Reference.Angle(tlv_3rd_Et.Vect()));
729 if(tlv_1st_Et.Pt() != 0) {
730 if(tlv_2nd_Et.Pt() != 0) {
731 angle_12 = tlv_1st_Et.Angle(tlv_2nd_Et.Vect());
732 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo2nd", angle_12);
734 if(tlv_3rd_Et.Pt() != 0) {
735 angle_13 = tlv_1st_Et.Angle(tlv_3rd_Et.Vect());
736 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo3rd", angle_13);
739 if(tlv_2nd_Et.Pt() != 0 && tlv_3rd_Et.Pt() != 0) {
740 angle_23 = tlv_2nd_Et.Angle(tlv_3rd_Et.Vect());
741 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndTo3rd", angle_23);
743 if(num_EFOs > 2 && tlv_1st_Et.Pt() != 0 && tlv_2nd_Et.Pt() != 0 && tlv_3rd_Et.Pt() != 0) {
744 double angle_Planes = ( tlv_1st_Et.Vect().Cross(tlv_2nd_Et.Vect()) ).
Angle( tlv_1st_Et.Vect().Cross(tlv_3rd_Et.Vect()) );
745 double angle_max = 0;
746 if(angle_12 > angle_13) {
747 if(angle_12 > angle_23) angle_max = angle_12;
748 else angle_max =angle_23;
750 if(angle_13 > angle_23) angle_max =angle_13;
751 else angle_max =angle_23;
753 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MaxToJetAxis", angle_max);
754 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MeanValue123", (angle_12 + angle_13 + angle_23)/3.);
755 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_Btw1213Planes", angle_Planes);
761 prefixVARType = m_varTypeName_DeltaR;
763 if(curTypeName != curTypeName_All) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_ToJetAxis", tlv_Reference.DeltaR(tlv_TypeConstituents));
764 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_MaxToJetAxis_EtSort", max_DeltaR);
765 if(tlv_1st_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stToJetAxis_EtSort", tlv_Reference.DeltaR(tlv_1st_Et));
766 if(tlv_2nd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndToJetAxis_EtSort", tlv_Reference.DeltaR(tlv_2nd_Et));
767 if(tlv_3rd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_3rdToJetAxis_EtSort", tlv_Reference.DeltaR(tlv_3rd_Et));
768 if(tlv_1st_Et.Pt() != 0) {
769 if(tlv_2nd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo2nd_EtSort", tlv_1st_Et.DeltaR(tlv_2nd_Et));
770 if(tlv_3rd_Et.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo3rd_EtSort", tlv_1st_Et.DeltaR(tlv_3rd_Et));
772 if(tlv_2nd_Et.Pt() != 0 && tlv_3rd_Et.Pt() != 0) {
773 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndTo3rd_EtSort", tlv_2nd_Et.DeltaR(tlv_3rd_Et));
776 if(tlv_1st_BDT.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stToJetAxis_BDTSort", tlv_Reference.DeltaR(tlv_1st_BDT));
777 if(tlv_2nd_BDT.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndToJetAxis_BDTSort", tlv_Reference.DeltaR(tlv_2nd_BDT));
778 if(tlv_3rd_BDT.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_3rdToJetAxis_BDTSort", tlv_Reference.DeltaR(tlv_3rd_BDT));
779 if(tlv_1st_BDT.Pt() != 0) {
780 if(tlv_2nd_BDT.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo2nd_BDTSort", tlv_1st_BDT.DeltaR(tlv_2nd_BDT));
781 if(tlv_3rd_BDT.Pt() != 0) tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_1stTo3rd_BDTSort", tlv_1st_BDT.DeltaR(tlv_3rd_BDT));
783 if(tlv_2nd_BDT.Pt() != 0 && tlv_3rd_BDT.Pt() != 0) {
784 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_2ndTo3rd_BDTSort", tlv_2nd_BDT.DeltaR(tlv_3rd_BDT));
792 prefixVARType = m_varTypeName_JetMoment;
796 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtDR", sum_EtxDR / sum_Et);
797 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtDRprime", sum_EtxDRprime / sum_Et);
798 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtDR2", sum_EtxDR2 / sum_Et);
799 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtAngle", sum_EtxAngle / sum_Et);
800 tauFeatureMap->
addFeature(inputAlgName +
"_" + curTypeName +
"_" + prefixVARType +
"_EtDRxTotalEt", (sum_EtxDR / sum_Et) * variants_SeedEt.at(
"EtAllConsts"));
803 return StatusCode::SUCCESS;
808 const std::map<std::string, double>& variants_SeedEt)
const {
821 std::vector<PanTau::TauConstituent*> list_NeutralConstituents = inSeed->
getConstituentsOfType(et_Neutral, foundIt);
839 name_EFOType[iType] =
"";
840 num_EFOs[iType] = 0.;
841 tlv_System[iType] = TLorentzVector();
842 tlv_1stEFO[iType] = TLorentzVector();
843 tlv_2ndEFO[iType] = TLorentzVector();
844 tlv_Sys_OK[iType] =
false;
845 tlv_1st_OK[iType] =
false;
846 tlv_2nd_OK[iType] =
false;
853 if (!tlv_Sys_OK[iType])
continue;
855 std::vector<TauConstituent*> typeConstituents = inSeed->
getConstituentsOfType(iType, tlv_Sys_OK[iType]);
856 if (typeConstituents.empty()) tlv_Sys_OK[iType] =
false;
857 if (!tlv_Sys_OK[iType])
continue;
859 num_EFOs[iType] = typeConstituents.size();
861 if (!typeConstituents.empty()) {
862 tlv_1stEFO[iType] = typeConstituents.at(0)->p4();
863 tlv_1st_OK[iType] =
true;
865 tlv_1st_OK[iType] =
false;
868 if (typeConstituents.size() > 1) {
869 tlv_2ndEFO[iType] = typeConstituents.at(1)->p4();
870 tlv_2nd_OK[iType] =
true;
872 tlv_2nd_OK[iType] =
false;
878 std::string prefixVARType = m_varTypeName_Combined;
882 if(tlv_Sys_OK[et_Charged] && tlv_Sys_OK[et_Neutral] && num_EFOs[et_Neutral] > 0.) {
883 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_NumChargedOverNumNeutral", num_EFOs[et_Charged] / num_EFOs[et_Neutral]);
885 if(tlv_Sys_OK[et_Charged] && tlv_Sys_OK[et_All] && num_EFOs[et_All] > 0.) {
886 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_NumChargedOverNumTotal", num_EFOs[et_Charged] / num_EFOs[et_All]);
889 if(num_EFOs[et_Charged]>0. && num_EFOs[et_Neutral]>1.) {
890 if(tlv_1st_OK[et_Charged] && tlv_1st_OK[et_Neutral] && tlv_2nd_OK[et_Neutral]) {
891 TVector3 axis_Plane_cn1 = (tlv_1stEFO[et_Charged].Vect()).Cross( tlv_1stEFO[et_Neutral].Vect() );
892 TVector3 axis_Plane_cn2 = (tlv_1stEFO[et_Charged].Vect()).Cross( tlv_2ndEFO[et_Neutral].Vect() );
893 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_AnglePlane1stCharged1st2ndNeutral", axis_Plane_cn1.Angle(axis_Plane_cn2));
898 list_NeutralConstituents);
899 if(tauConst_NeutralLargestAngle !=
nullptr) {
900 TLorentzVector tlv_NeutralLargestAngle = tauConst_NeutralLargestAngle->
p4();
902 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_FarthestNeutral_AngleToCharged", tlv_System[et_Charged].
Angle(tlv_NeutralLargestAngle.Vect()) );
903 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_FarthestNeutral_BDTScore", tauConst_NeutralLargestAngle->
getBDTValue());
904 if(tlv_System[et_Charged].Et() > 0) tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_FarthestNeutral_EtOverChargedEt", tlv_NeutralLargestAngle.Et() / tlv_System[et_Charged].Et());
915 int type_Denom = iType;
920 int type_Nom = jType;
922 if(jType == iType)
continue;
927 double sum_Et_Nom = 0.0;
928 double sum_Et_Denom = 0.0;
929 if(tlv_Sys_OK[type_Nom] && tlv_Sys_OK[type_Denom]) {
930 sum_Et_Nom = tlv_System[type_Nom].Et();
931 sum_Et_Denom = tlv_System[type_Denom].Et();
936 if(tlv_1st_OK[type_Nom]) {
937 if(tlv_1stEFO[type_Nom].Et() > 0. && sum_Et_Denom > 0.) {
938 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_Log1st" + typeName_Nom +
"EtOver" + typeName_Denom +
"Et", std::log10(tlv_1stEFO[type_Nom].Et() / sum_Et_Denom) );
943 if(jType <= iType)
continue;
946 if(sum_Et_Denom > 0. && sum_Et_Nom > 0.) {
947 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_Log" + typeName_Nom +
"EtOver" + typeName_Denom +
"Et", std::log10(sum_Et_Nom / sum_Et_Denom) );
951 if(tlv_Sys_OK[type_Nom] && tlv_Sys_OK[type_Denom]) {
952 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_Angle" + typeName_Nom +
"To" + typeName_Denom, tlv_System[type_Nom].
Angle( tlv_System[type_Denom].Vect()) );
955 if(tlv_1st_OK[type_Nom] && tlv_1st_OK[type_Denom]) {
957 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_DeltaR1st" + typeName_Nom +
"To1st" + typeName_Denom, tlv_1stEFO[type_Nom].
DeltaR( tlv_1stEFO[type_Denom] ) );
960 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_Angle1st" + typeName_Nom +
"To1st" + typeName_Denom, tlv_1stEFO[type_Nom].
Angle( tlv_1stEFO[type_Denom].Vect() ) );
970 const int cTypes = 1;
971 const int nTypes = 2;
972 int index_charged[cTypes] = {et_Charged};
973 int index_neutral[nTypes] = {et_Pi0Neut, et_Neutral};
975 for(
int cType=0; cType<cTypes; cType++) {
976 for(
int nType=0; nType<nTypes; nType++) {
978 int et_c = index_charged[cType];
979 int et_n = index_neutral[nType];
984 if(!tlv_Sys_OK[et_c] || !tlv_Sys_OK[et_n])
continue;
987 if(num_EFOs[et_c] + num_EFOs[et_n] > 0.) {
988 double mean_cTypenTypeEt = ( tlv_System[et_c].Et() + tlv_System[et_n].Et() ) / (num_EFOs[et_c] + num_EFOs[et_n]);
989 addFeatureWrtSeedEnergy(tauFeatures, inputAlgName +
"_" + prefixVARType +
"_Mean" + name_cType + name_nType +
"Et_Wrt", mean_cTypenTypeEt, variants_SeedEt);
993 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_InvMass" + name_cType + name_nType, ( tlv_System[et_c] + tlv_System[et_n] ).M() );
996 if(tlv_2nd_OK[et_n]) {
998 tauFeatures->
addFeature(inputAlgName +
"_" + prefixVARType +
"_Angle1st2nd" + name_cType + name_nType, tlv_1stEFO[et_c].
Angle( tlv_2ndEFO[et_n].Vect()) );
1004 return StatusCode::SUCCESS;
1014 ATH_MSG_DEBUG(
"Vertex of taujet points to 0! Not extracting impact parameters");
1015 return StatusCode::SUCCESS;
1020 std::string featureNamePrefix = m_varTypeName_ImpactParams;
1021 std::vector<double> impactParameters(0);
1022 std::vector<double> impactParameterSignf(0);
1028 if (!foundIt || list_ChargedConsts.empty())
return StatusCode::SUCCESS;
1031 std::vector<const xAOD::TrackParticle*> list_Tracks;
1032 for(
unsigned int iChrg=0; iChrg<list_ChargedConsts.size(); iChrg++) list_Tracks.push_back( list_ChargedConsts[iChrg]->getPFO()->track(0) );
1035 for(
unsigned int iTrk=0; iTrk<list_Tracks.size(); iTrk++) {
1039 double signfD0 = -999.;
1040 if(errD02 > 0) signfD0 = curTrack->
d0() / sqrtf( errD02 );
1043 double signfZ0 = -999.;
1044 if(errZ02 > 0) signfZ0 = curTrack->
z0() / sqrtf( errZ02 );
1048 std::string indexTrk = m_HelperFunctions.convertNumberToString(iTrk+1);
1049 tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_TransIPTrack" + indexTrk +
"_SortByEt", curTrack->
d0() );
1050 tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_LongIPTrack" + indexTrk +
"_SortByEt", curTrack->
z0() );
1052 if (!std::isnan(signfD0)) tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_TransSignfIPTrack" + indexTrk +
"_SortByEt", signfD0);
1053 if (!std::isnan(signfZ0)) tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_LongSignfIPTrack" + indexTrk +
"_SortByEt", signfZ0);
1055 impactParameters.push_back(std::abs(curTrack->
d0()));
1056 impactParameterSignf.push_back(std::abs(signfD0));
1062 std::sort( impactParameters.begin(), impactParameters.end(), std::greater<double>() );
1063 std::sort( impactParameterSignf.begin(), impactParameterSignf.end(), std::greater<double>() );
1065 for(
unsigned int iIP=0; iIP<impactParameters.size(); iIP++) {
1066 std::string curNum = m_HelperFunctions.convertNumberToString(iIP+1);
1067 tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_TransIP" + curNum +
"_SortByValue", impactParameters[iIP] );
1068 tauFeatures->
addFeature(inputAlgName +
"_" + featureNamePrefix +
"_TransSignfIP" + curNum +
"_SortByValue", impactParameterSignf[iIP] );
1071 return StatusCode::SUCCESS;