36 const EventContext& ctx)
const {
44 ATH_MSG_WARNING (
"EventInfo decoration not available! Will set mu=0." );
48 mu =
static_cast<int>(eventInfoDecorHandle(0));
56 if (!vertexInHandle.
isValid()) {
57 ATH_MSG_WARNING (
"Could not retrieve HiveDataObj with key " << vertexInHandle.
key() <<
", will set nVtxPU=0.");
61 for (
const auto *xVertex : *vertexContainer){
67 acc_nVtxPU(xTau) = nVtxPU;
80 acc_rho(xTau) =
static_cast<float>(rho);
83 double center_lambda=0. , first_eng_dens=0. , em_probability=0. , second_lambda=0. ;
84 double mean_center_lambda=0. , mean_first_eng_dens=0. , mean_em_probability=0. , mean_second_lambda=0. ;
85 double mean_presampler_frac=0., lead_cluster_frac=0. , second_cluster_frac=0. , third_cluster_frac=0. ;
86 double clE=0., Etot=0.;
89 TLorentzVector clusters_EM_P4;
90 clusters_EM_P4.SetPtEtaPhiM(0,0,0,0);
91 TLorentzVector clusters_had_P4;
92 clusters_had_P4.SetPtEtaPhiM(0,0,0,0);
93 TLorentzVector tauIntermediateAxisEM;
94 tauIntermediateAxisEM.SetPtEtaPhiM(0,0,0,0);
103 std::vector<xAOD::CaloVertexedTopoCluster> vertexedClusters = xTau.
vertexedClusters();
109 if (clusterP4.DeltaR(tauAxis) > 0.2)
continue;
113 clE = cluster.
calE();
116 if (clE > lead_cluster_frac) {
117 third_cluster_frac = second_cluster_frac;
118 second_cluster_frac = lead_cluster_frac;
119 lead_cluster_frac = clE;
121 else if (clE > second_cluster_frac) {
122 third_cluster_frac = second_cluster_frac;
123 second_cluster_frac = clE;
125 else if (clE > third_cluster_frac) {
126 third_cluster_frac = clE;
130 mean_center_lambda += clE*center_lambda;
134 mean_first_eng_dens += clE*first_eng_dens;
138 mean_em_probability += clE*em_probability;
148 mean_second_lambda += clE*second_lambda;
151 mean_presampler_frac += (cluster.
eSample(CaloSampling::PreSamplerB) + cluster.
eSample(CaloSampling::PreSamplerE));
156 tauIntermediateAxisEM += vertexedClusterEM.
p4();
165 mean_center_lambda /= Etot;
166 mean_first_eng_dens /= Etot;
167 mean_em_probability /= Etot;
168 mean_second_lambda /= Etot;
169 mean_presampler_frac /= Etot;
170 lead_cluster_frac /= Etot;
171 second_cluster_frac /= Etot;
172 third_cluster_frac /= Etot;
174 if (mean_first_eng_dens>0.) mean_first_eng_dens = TMath::Log10(mean_first_eng_dens/Etot);
178 double upsilon_cluster = -2.;
179 if (clusters_had_P4.E()+clusters_EM_P4.E()!=0.)
180 upsilon_cluster = (clusters_had_P4.E()-clusters_EM_P4.E())/(clusters_had_P4.E()+clusters_EM_P4.E());
189 acc_ClusterTotalEnergy(xTau) =
static_cast<float>(Etot);
192 acc_ptIntermediateAxisEM(xTau) =
static_cast<float>(tauIntermediateAxisEM.Pt());
197 acc_LeadClusterFrac(xTau) =
static_cast<float>(lead_cluster_frac);
198 acc_UpsilonCluster(xTau) =
static_cast<float>(upsilon_cluster);
204 acc_SecondClusterFrac(xTau) =
static_cast<float>(second_cluster_frac);
205 acc_ThirdClusterFrac(xTau) =
static_cast<float>(third_cluster_frac);
207 return StatusCode::SUCCESS;
211 TLorentzVector Pi0_totalP4;
212 Pi0_totalP4.SetPtEtaPhiM(0,0,0,0);
214 for (
size_t i=0; i<xTau.
nPi0PFOs(); i++){
215 Pi0_totalP4 += xTau.
pi0PFO(i)->
p4();
218 double Pi0_totalE = Pi0_totalP4.E();
221 TLorentzVector charged_totalP4;
222 charged_totalP4.SetPtEtaPhiM(0,0,0,0);
225 charged_totalP4 += track->p4();
228 double charged_totalE = charged_totalP4.E();
232 if (Pi0_totalE+charged_totalE != 0.){
233 relDiff = (charged_totalE - Pi0_totalE) / (charged_totalE + Pi0_totalE) ;
237 return StatusCode::SUCCESS;