Execute - called for each tau candidate.
30 {
31
32 std::map<TString, float*> availableVars;
34
35
37 availableVars.insert( std::make_pair("TauJetsAuxDyn.mu", &vars.mu) );
38 availableVars.insert( std::make_pair("TauJetsAuxDyn.nVtxPU", &vars.nVtxPU) );
39 availableVars.insert( std::make_pair("TauJetsAuxDyn.rho", &vars.rho) );
40 availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
41 availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
42 availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
43 availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
44 availableVars.insert( std::make_pair("TauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
45 availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxisEM/TauJetsAuxDyn.ptIntermediateAxis", &vars.ptEM_D_ptLC) );
46 availableVars.insert( std::make_pair("TauJetsAuxDyn.ptIntermediateAxis/TauJetsAuxDyn.ptCombined", &vars.ptLC_D_ptCombined) );
47 availableVars.insert( std::make_pair("TauJetsAuxDyn.etaPanTauCellBased", &vars.etaConstituent) );
49 availableVars.insert( std::make_pair("log(TauJetsAuxDyn.ptCombined)", &vars.logPtCombined) );
50 availableVars.insert( std::make_pair("TauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
51 availableVars.insert( std::make_pair("TauJetsAuxDyn.centFrac", &vars.centFrac) );
52 availableVars.insert( std::make_pair("TauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
53 availableVars.insert( std::make_pair("TauJetsAuxDyn.ptJetSeed/TauJetsAuxDyn.ptCombined", &vars.ptSeed_D_ptCombined) );
54 }
55 else {
56 availableVars.insert( std::make_pair("TauJetsAuxDyn.ptPanTauCellBased/TauJetsAuxDyn.ptCombined", &vars.ptConstituent_D_ptCombined) );
57 availableVars.insert( std::make_pair("TauJetsAuxDyn.ptCombined", &vars.ptCombined) );
58 availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p0n_vs_1p1n", &vars.PanTauBDT_1p0n_vs_1p1n) );
59 availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_1p1n_vs_1pXn", &vars.PanTauBDT_1p1n_vs_1pXn) );
60 availableVars.insert( std::make_pair("TauJetsAuxDyn.PanTau_BDTValue_3p0n_vs_3pXn", &vars.PanTauBDT_3p0n_vs_3pXn) );
61 availableVars.insert( std::make_pair("TauJetsAuxDyn.nTracks", &vars.nTracks) );
62 availableVars.insert( std::make_pair("TauJetsAuxDyn.PFOEngRelDiff", &vars.PFOEngRelDiff) );
63 }
64 }
65 else {
66 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.mu", &vars.mu) );
67 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanCenterLambda", &vars.center_lambda) );
68 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanFirstEngDens", &vars.first_eng_dens) );
69 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanSecondLambda", &vars.second_lambda) );
70 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanPresamplerFrac", &vars.presampler_frac) );
71 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ClustersMeanEMProbability", &vars.eprobability) );
72 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.LeadClusterFrac", &vars.lead_cluster_frac) );
73 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.SecondClusterFrac", &vars.second_cluster_frac) );
74 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ThirdClusterFrac", &vars.third_cluster_frac) );
75 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.UpsilonCluster", &vars.upsilon_cluster) );
76 availableVars.insert( std::make_pair("log(TrigTauJetsAuxDyn.ptDetectorAxis)", &vars.logPtDetectorAxis) );
77 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.etaDetectorAxis", &vars.etaDetectorAxis) );
78 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptIntermediateAxisEM/TrigTauJetsAuxDyn.ptDetectorAxis", &vars.ptEM_D_ptLC) );
79 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.ptDetectorAxis/TrigTauJetsAuxDyn.ptJetSeed", &vars.ptDetectorAxis_D_ptJetSeed) );
80 availableVars.insert( std::make_pair("TrigTauJetsAuxDyn.centFrac", &vars.centFrac) );
81 }
82
83
84 static const SG::ConstAccessor<float> acc_mu("mu");
85 vars.mu = acc_mu(xTau);
86
87
93
94 static const SG::ConstAccessor<float> acc_ptIntermediateAxisEM("ptIntermediateAxisEM");
95 float ptEM = acc_ptIntermediateAxisEM(xTau);
96
98 static const SG::ConstAccessor<float> acc_ptCombined("ptCombined");
99 float ptCombined = acc_ptCombined(xTau);
100
101 if (ptCombined==0.) {
103
104 xTau.setP4(1., xTau.etaPanTauCellBased(), xTau.phiPanTauCellBased(), 0.);
105 return StatusCode::SUCCESS;
106 }
107
108 static const SG::ConstAccessor<int> acc_nVtxPU("nVtxPU");
109 vars.nVtxPU = acc_nVtxPU(xTau);
110
111 static const SG::ConstAccessor<float> acc_rho("rho");
112 vars.rho = acc_rho(xTau);
113
114 float ptLC = xTau.ptIntermediateAxis();
115
116 float ptConstituent = xTau.ptPanTauCellBased();
117 vars.etaConstituent = xTau.etaPanTauCellBased();
118
119 vars.ptEM_D_ptLC = (ptLC != 0.) ? ptEM / ptLC : 0.;
120 vars.ptLC_D_ptCombined = ptLC / ptCombined;
121
122 float ptMVA = 0.;
123
125 vars.logPtCombined = std::log(ptCombined);
126 vars.ptSeed_D_ptCombined = xTau.ptJetSeed() / ptCombined;
127
128 static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
129 vars.upsilon_cluster = acc_UpsilonCluster(xTau);
130
131 static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
132 vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
133
135
137 }
138 else {
139 vars.ptCombined = ptCombined;
140 vars.ptConstituent_D_ptCombined = ptConstituent / ptCombined;
141
142
143 static const SG::ConstAccessor<float> acc_PanTauBDT_1p0n_vs_1p1n("PanTau_BDTValue_1p0n_vs_1p1n");
144 static const SG::ConstAccessor<float> acc_PanTauBDT_1p1n_vs_1pXn("PanTau_BDTValue_1p1n_vs_1pXn");
145 static const SG::ConstAccessor<float> acc_PanTauBDT_3p0n_vs_3pXn("PanTau_BDTValue_3p0n_vs_3pXn");
146
147 vars.PanTauBDT_1p0n_vs_1p1n = std::max(acc_PanTauBDT_1p0n_vs_1p1n(xTau), -5.1f);
148 vars.PanTauBDT_1p1n_vs_1pXn = std::max(acc_PanTauBDT_1p1n_vs_1pXn(xTau), -5.1f);
149 vars.PanTauBDT_3p0n_vs_3pXn = std::max(acc_PanTauBDT_3p0n_vs_3pXn(xTau), -5.1f);
150 vars.nTracks = static_cast<float>(xTau.nTracks());
152
154 }
155
156 if (ptMVA<1.) ptMVA=1.;
158
159 xTau.setP4(ptMVA, vars.etaConstituent, xTau.phiPanTauCellBased(), 0.);
160 }
161 else {
162
163 if (xTau.ptDetectorAxis()==0. || xTau.ptJetSeed()==0.) {
165 xTau.setP4(1., xTau.etaDetectorAxis(), xTau.phiDetectorAxis(), 0.);
166 return StatusCode::SUCCESS;
167 }
168
169 vars.logPtDetectorAxis = std::log(xTau.ptDetectorAxis());
170 vars.etaDetectorAxis = xTau.etaDetectorAxis();
171 vars.ptEM_D_ptLC = ptEM / xTau.ptDetectorAxis();
172 vars.ptDetectorAxis_D_ptJetSeed = xTau.ptDetectorAxis() / xTau.ptJetSeed();
173
174 static const SG::ConstAccessor<float> acc_UpsilonCluster("UpsilonCluster");
175 static const SG::ConstAccessor<float> acc_LeadClusterFrac("LeadClusterFrac");
176 static const SG::ConstAccessor<float> acc_SecondClusterFrac("SecondClusterFrac");
177 static const SG::ConstAccessor<float> acc_ThirdClusterFrac("ThirdClusterFrac");
178
179 vars.upsilon_cluster = acc_UpsilonCluster(xTau);
180 vars.lead_cluster_frac = acc_LeadClusterFrac(xTau);
181 vars.second_cluster_frac = acc_SecondClusterFrac(xTau);
182 vars.third_cluster_frac = acc_ThirdClusterFrac(xTau);
183
185
186 float ptMVA =
float( xTau.ptDetectorAxis() *
m_bdtHelper->getResponse(availableVars) );
187 if (ptMVA<1.) ptMVA=1.;
188
190
191 xTau.setP4(ptMVA, vars.etaDetectorAxis, xTau.phiDetectorAxis(), 0.);
192 }
193
194 ATH_MSG_DEBUG(
"final calib:" << xTau.pt() <<
" " << xTau.eta() <<
" " << xTau.phi() <<
" " << xTau.e());
195
196 return StatusCode::SUCCESS;
197}
std::unique_ptr< tauRecTools::BDTHelper > m_bdtHelper
std::unique_ptr< tauRecTools::BDTHelper > m_bdtHelper0p
@ ClustersMeanEMProbability
@ ClustersMeanSecondLambda
@ ClustersMeanFirstEngDens
@ ClustersMeanPresamplerFrac
@ centFrac
Get centrality fraction.
@ ClustersMeanCenterLambda