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();
331 for (
size_t s = CaloSampling::PreSamplerB; s < CaloSampling::Unknown; s++ ) {
332 ePerSampling[s] += constitEPerSampling[s];
334 emTot += (constitEPerSampling[CaloSampling::PreSamplerB] + constitEPerSampling[CaloSampling::EMB1]
335 + constitEPerSampling[CaloSampling::EMB2] + constitEPerSampling[CaloSampling::EMB3]
336 + constitEPerSampling[CaloSampling::PreSamplerE] + constitEPerSampling[CaloSampling::EME1]
337 + constitEPerSampling[CaloSampling::EME2] + constitEPerSampling[CaloSampling::EME3]
338 + constitEPerSampling[CaloSampling::FCAL0]);
340 hecTot += (constitEPerSampling[CaloSampling::HEC0] + constitEPerSampling[CaloSampling::HEC1]
341 + constitEPerSampling[CaloSampling::HEC2] + constitEPerSampling[CaloSampling::HEC3]);
343 psTot += (constitEPerSampling[CaloSampling::PreSamplerB] + constitEPerSampling[CaloSampling::PreSamplerE]);
345 em3Tot += (constitEPerSampling[CaloSampling::EMB3] + constitEPerSampling[CaloSampling::EME3]);
347 tile0Tot += (constitEPerSampling[CaloSampling::TileBar0] + constitEPerSampling[CaloSampling::TileExt0]);
370 e2Tot += nFE->
e()*nFE->
e();
373 for (
size_t s = CaloSampling::PreSamplerB; s < CaloSampling::Unknown; s++ ) {
374 ePerSampling[s] += neutralEPerSampling[s];
376 emTot += (neutralEPerSampling[CaloSampling::PreSamplerB] + neutralEPerSampling[CaloSampling::EMB1]
377 + neutralEPerSampling[CaloSampling::EMB2] + neutralEPerSampling[CaloSampling::EMB3]
378 + neutralEPerSampling[CaloSampling::PreSamplerE] + neutralEPerSampling[CaloSampling::EME1]
379 + neutralEPerSampling[CaloSampling::EME2] + neutralEPerSampling[CaloSampling::EME3]
380 + neutralEPerSampling[CaloSampling::FCAL0]);
382 hecTot += (neutralEPerSampling[CaloSampling::HEC0] + neutralEPerSampling[CaloSampling::HEC1]
383 + neutralEPerSampling[CaloSampling::HEC2] + neutralEPerSampling[CaloSampling::HEC3]);
385 psTot += (neutralEPerSampling[CaloSampling::PreSamplerB] + neutralEPerSampling[CaloSampling::PreSamplerE]);
387 em3Tot += (neutralEPerSampling[CaloSampling::EMB3] + neutralEPerSampling[CaloSampling::EME3]);
389 tile0Tot += (neutralEPerSampling[CaloSampling::TileBar0] + neutralEPerSampling[CaloSampling::TileExt0]);
394 for (
size_t n = 0; n < constit->
otherObjects().size(); ++n) {
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();
414 for (
size_t s = CaloSampling::PreSamplerB; s < CaloSampling::Unknown; s++ ) {
415 ePerSampling[s] += neutralFromCombEPerSampling[s];
417 emTot += (neutralFromCombEPerSampling[CaloSampling::PreSamplerB] + neutralFromCombEPerSampling[CaloSampling::EMB1]
418 + neutralFromCombEPerSampling[CaloSampling::EMB2] + neutralFromCombEPerSampling[CaloSampling::EMB3]
419 + neutralFromCombEPerSampling[CaloSampling::PreSamplerE] + neutralFromCombEPerSampling[CaloSampling::EME1]
420 + neutralFromCombEPerSampling[CaloSampling::EME2] + neutralFromCombEPerSampling[CaloSampling::EME3]
421 + neutralFromCombEPerSampling[CaloSampling::FCAL0]);
423 hecTot += (neutralFromCombEPerSampling[CaloSampling::HEC0] + neutralFromCombEPerSampling[CaloSampling::HEC1]
424 + neutralFromCombEPerSampling[CaloSampling::HEC2] + neutralFromCombEPerSampling[CaloSampling::HEC3]);
426 psTot += (neutralFromCombEPerSampling[CaloSampling::PreSamplerB] + neutralFromCombEPerSampling[CaloSampling::PreSamplerE]);
428 em3Tot += (neutralFromCombEPerSampling[CaloSampling::EMB3] + neutralFromCombEPerSampling[CaloSampling::EME3]);
430 tile0Tot += (neutralFromCombEPerSampling[CaloSampling::TileBar0] + neutralFromCombEPerSampling[CaloSampling::TileExt0]);
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" ) {
457 emFracHandle(
jet) = eTot != 0. ? emTot/eTot : 0.;
458 }
else if ( calcN ==
"HECFrac" ) {
460 hecFracHandle(
jet) = eTot != 0. ? hecTot/eTot : 0.;
461 }
else if ( calcN ==
"PSFrac" ) {
463 psFracHandle(
jet) = eTot != 0. ? psTot/eTot : 0.;
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!");
506 for (
size_t n = 0; n < constit->
otherObjects().size(); ++n) {
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()){
533 for (
size_t s= CaloSampling::PreSamplerB; s< CaloSampling::Unknown; s++ ) {
536 eTot += cluster->
rawE();
537 e2Tot += cluster->
rawE()*cluster->
rawE();
539 emTot += (cluster->
eSample( CaloSampling::PreSamplerB) + cluster->
eSample( CaloSampling::EMB1)
540 + cluster->
eSample( CaloSampling::EMB2) + cluster->
eSample( CaloSampling::EMB3)
541 + cluster->
eSample( CaloSampling::PreSamplerE) + cluster->
eSample( CaloSampling::EME1)
542 + cluster->
eSample( CaloSampling::EME2) + cluster->
eSample( CaloSampling::EME3)
543 + cluster->
eSample( CaloSampling::FCAL0));
545 hecTot += (cluster->
eSample( CaloSampling::HEC0) + cluster->
eSample( CaloSampling::HEC1)
546 + cluster->
eSample( CaloSampling::HEC2) + cluster->
eSample( CaloSampling::HEC3));
548 psTot += (cluster->
eSample( CaloSampling::PreSamplerB) + cluster->
eSample( CaloSampling::PreSamplerE));
550 em3Tot += (cluster->
eSample( CaloSampling::EMB3) + cluster->
eSample( CaloSampling::EME3));
552 tile0Tot += (cluster->
eSample( CaloSampling::TileBar0) + cluster->
eSample( CaloSampling::TileExt0));
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.;
virtual Type::ObjectType type() const =0
The type of the object as a simple enumeration.
virtual double e() const =0
The total energy of the particle.
virtual double e() const override final
The total energy of the particle.