29 std::vector<std::string>
split;
30 std::string sub_string;
31 std::istringstream tokenStream(
key);
33 while (std::getline(tokenStream, sub_string,
'.'))
35 split.push_back(sub_string);
39 return std::find(calculations.begin(), calculations.end(),
split[1]) != calculations.end();
46 ATH_MSG_ERROR(
"JetCaloEnergies needs to have its input jet container configured!");
47 return StatusCode::FAILURE;
103 return StatusCode::SUCCESS;
112 size_t numConstit =
jet->numConstituents();
114 std::vector<float>& ePerSampling = ePerSamplingHandle(*
jet);
115 for (
float&
e : ePerSampling )
e = 0.0;
117 if ( numConstit == 0 ) {
139 ATH_MSG_VERBOSE(
" Constituents are FlowElements - Additional calculation");
143 std::vector<float>& ePerSamplingCluster = ePerSamplingClusterHandle(*
jet);
144 for (
float&
e : ePerSamplingCluster )
e = 0.0;
150 ATH_MSG_VERBOSE(
"Constituents are not CaloClusters, PFOs, or FlowElements.");
154 return StatusCode::SUCCESS;
159 size_t numConstit =
jet.numConstituents();
160 for (
size_t i=0;
i<numConstit;
i++ ) {
162 ATH_MSG_WARNING(
"Tried to call fillEperSamplingCluster with a jet constituent that is not a cluster!");
171 double fracSamplingMax = -999999999.;
172 int fracSamplingMaxIndex = -1;
173 double sumE_samplings = 0.0;
176 for(
unsigned int i = 0;
i < ePerSampling.size(); ++
i){
177 double e = ePerSampling[
i];
179 if (
e>fracSamplingMax){
181 fracSamplingMaxIndex =
i;
196 fracSamplingMaxHandle(
jet) = sumE_samplings != 0. ? fracSamplingMax/sumE_samplings : 0.;
198 fracSamplingMaxIndexHandle(
jet) = fracSamplingMaxIndex;
202 #define FillESamplingPFO( LAYERNAME ) \
203 float E_##LAYERNAME = 0.0; \
204 if (constit->attribute(xAOD::PFODetails::eflowRec_LAYERENERGY_##LAYERNAME, E_##LAYERNAME)) { \
205 ePerSampling[CaloSampling::LAYERNAME] += E_##LAYERNAME; \
213 size_t numConstit =
jet.numConstituents();
215 for (
size_t i=0;
i<numConstit;
i++ ) {
218 if ( fabs(constit->
charge())>FLT_MIN ){
221 eTot += constit->
e();
258 emTot += ( E_PreSamplerB+E_EMB1+E_EMB2+E_EMB3+
259 E_PreSamplerE+E_EME1+E_EME2+E_EME3+
261 hecTot += ( E_HEC0+E_HEC1+E_HEC2+E_HEC3 );
265 ATH_MSG_WARNING(
"Tried to call fillEperSamplingPFlow with a jet constituent that is not a PFO!");
271 emFracHandle(
jet) = emTot/
eTot;
278 emFracHandle(
jet) = 0.;
283 hecFracHandle(
jet) = hecTot/
eTot;
286 hecFracHandle(
jet) = 0.;
301 size_t numConstit =
jet.numConstituents();
303 std::vector<int> indicesNeutralFE;
304 std::vector<int> indicesChargedFE;
306 for (
size_t i=0;
i<numConstit;
i++ ) {
308 ATH_MSG_WARNING(
"Tried to call fillEperSamplingFE with a jet constituent that is not a FlowElement!");
327 eTot += constit->
e();
328 e2Tot += constit->
e()*constit->
e();
332 ePerSampling[
s] += constitEPerSampling[
s];
370 e2Tot += nFE->
e()*nFE->
e();
374 ePerSampling[
s] += neutralEPerSampling[
s];
400 if(
std::find(indicesChargedFE.begin(), indicesChargedFE.end(), FE_from_combined->
index()) == indicesChargedFE.end()){
401 eTot += FE_from_combined->
e();
402 e2Tot += FE_from_combined->
e()*FE_from_combined->
e();
403 indicesChargedFE.push_back(FE_from_combined->
index());
410 if(
std::find(indicesNeutralFE.begin(), indicesNeutralFE.end(), FE_from_combined->
index()) == indicesNeutralFE.end()){
411 eTot += FE_from_combined->
e();
412 e2Tot += FE_from_combined->
e()*FE_from_combined->
e();
415 ePerSampling[
s] += neutralFromCombEPerSampling[
s];
432 indicesNeutralFE.push_back(FE_from_combined->
index());
439 double fracSamplingMax = -999999999.;
440 int fracSamplingMaxIndex = -1;
441 double sumE_samplings = 0.0;
444 for(
unsigned int i = 0;
i < ePerSampling.size(); ++
i){
445 double e = ePerSampling[
i];
447 if (
e>fracSamplingMax){
449 fracSamplingMaxIndex =
i;
455 if ( calcN ==
"EMFrac" ) {
458 }
else if ( calcN ==
"HECFrac" ) {
460 hecFracHandle(
jet) =
eTot != 0. ? hecTot/
eTot : 0.;
461 }
else if ( calcN ==
"PSFrac" ) {
464 }
else if ( calcN ==
"EM3Frac" ) {
466 em3FracHandle(
jet) =
eTot != 0. ? em3Tot/
eTot : 0.;
467 }
else if ( calcN ==
"Tile0Frac" ) {
469 tile0FracHandle(
jet) =
eTot != 0. ? tile0Tot/
eTot : 0.;
470 }
else if ( calcN ==
"EffNClusts" ) {
472 effNClustsFracHandle(
jet) =
eTot != 0. ? std::sqrt(
eTot*
eTot/e2Tot) : 0.;
473 }
else if ( calcN ==
"FracSamplingMax" ){
475 fracSamplingMaxHandle(
jet) = sumE_samplings != 0. ? fracSamplingMax/sumE_samplings : 0.;
477 fracSamplingMaxIndexHandle(
jet) = fracSamplingMaxIndex;
493 float sumRadialDistanceSquared = 0;
494 float sumLongitudinalDistanceSquared = 0;
495 size_t numConstit =
jet.numConstituents();
496 std::unique_ptr<std::vector<const xAOD::CaloCluster*> > constitV_tot = std::make_unique<std::vector<const xAOD::CaloCluster*>>();
499 for (
size_t i=0;
i<numConstit;
i++ ) {
501 ATH_MSG_WARNING(
"Tried to call fillEperSamplingFE with a jet constituent that is not a FlowElement!");
509 if(index_pfo<0)
continue;
525 if(!cluster)
continue;
527 if (!leadingCluster || (cluster->
rawE() > leadingCluster->rawE())){
528 leadingCluster = cluster;
532 if(
std::find(constitV_tot->begin(), constitV_tot->end(), cluster) == constitV_tot->end()){
537 e2Tot += cluster->
rawE()*cluster->
rawE();
557 constitV_tot->push_back(cluster);
562 float fracSamplingMax = -999999999.;
563 int fracSamplingMaxIndex = -1;
564 float sumE_samplings = 0.0;
567 for(
unsigned int i = 0;
i < ePerSampling.size(); ++
i){
568 float e = ePerSampling[
i];
570 if (
e>fracSamplingMax){
572 fracSamplingMaxIndex =
i;
578 if ( calcN ==
"EMFrac" ) {
580 emFracClusterHandle(
jet) =
eTot != 0. ? emTot/
eTot : 0.;
581 }
else if ( calcN ==
"HECFrac" ) {
583 hecFracClusterHandle(
jet) =
eTot != 0. ? hecTot/
eTot : 0.;
584 }
else if ( calcN ==
"PSFrac" ) {
586 psFracClusterHandle(
jet) =
eTot != 0. ? psTot/
eTot : 0.;
587 }
else if ( calcN ==
"EM3Frac" ) {
589 em3FracClusterHandle(
jet) =
eTot != 0. ? em3Tot/
eTot : 0.;
590 }
else if ( calcN ==
"Tile0Frac" ) {
592 tile0FracClusterHandle(
jet) =
eTot != 0. ? tile0Tot/
eTot : 0.;
593 }
else if ( calcN ==
"EffNClusts" ) {
595 effNClustsFracClusterHandle(
jet) =
eTot != 0. ? std::sqrt(
eTot*
eTot/e2Tot) : 0.;
596 }
else if ( calcN ==
"FracSamplingMax" ){
598 fracSamplingMaxClusterHandle(
jet) = sumE_samplings != 0. ? fracSamplingMax/sumE_samplings : 0.;
600 fracSamplingMaxIndexClusterHandle(
jet) = fracSamplingMaxIndex;
608 meanRadialDistanceSquaredHandle(
jet) =
eTot != 0. ? sumRadialDistanceSquared/
eTot : 0.;
611 meanLongitudinalDistanceSquaredHandle(
jet) =
eTot != 0. ? sumLongitudinalDistanceSquared/
eTot : 0.;
618 if (isRetrieved)
return (
float) moment;