10 #include <analysis/dataobjects/ParticleList.h>
12 #include <mdst/dataobjects/ECLCluster.h>
13 #include <tracking/dataobjects/RecoTrack.h>
15 #include <analysis/utility/PCmsLabTransform.h>
16 #include <analysis/ClusterUtility/ClusterUtils.h>
17 #include <TLorentzVector.h>
24 namespace SoftwareTrigger {
27 inline TLorentzVector getFourVector(
const T& item);
31 inline TLorentzVector getFourVector(
const std::reference_wrapper<const ECLCluster>& cluster)
35 return TLorentzVector(v.Px(), v.Py(), v.Pz(), v.E());
40 inline TLorentzVector getFourVector(
const RecoTrack& track)
42 const TVector3& positionSeed = track.getPositionSeed();
43 return TLorentzVector(positionSeed.X(), positionSeed.Y(), positionSeed.Z(),
48 template<
class AnEntityType>
49 inline const AnEntityType* getElementFromParticle(
const Particle& particle);
53 inline const Particle* getElementFromParticle(
const Particle& particle)
60 inline const ECLCluster* getElementFromParticle(
const Particle& particle)
62 return particle.getECLCluster();
66 inline double BeamEnergyCMS()
69 return T.getCMSEnergy() / 2.0;
73 template<
class AnEntity>
74 inline double getRho(
const AnEntity* entity)
80 const TLorentzVector& fourVector = entity->get4Vector();
86 inline double getRho(
const ECLCluster* entity)
100 template<
class AReturnType>
101 static const AReturnType* getElementWithMaximumRhoBelow(
const StoreObjPtr<ParticleList>& particles,
102 const double belowLimit)
104 const AReturnType* elementMaximumRho =
nullptr;
105 double maximumRho = -1.;
106 for (
const Particle& currentParticle : *particles) {
107 const auto currentElement = getElementFromParticle<AReturnType>(currentParticle);
108 const double& currentRho = getRho(currentElement);
109 if (currentRho >= belowLimit) {
112 if (currentRho > maximumRho) {
113 maximumRho = currentRho;
114 elementMaximumRho = currentElement;
117 return elementMaximumRho;
121 template<
class AReturnType>
122 inline const AReturnType* getElementWithMaximumRho(
const StoreObjPtr<ParticleList>& particles)
124 return getElementWithMaximumRhoBelow<AReturnType>(particles, std::nan(
""));
127 extern double getRhoOfECLClusterWithMaximumRhoBelow(
const StoreObjPtr<ParticleList>& pions,
128 const StoreObjPtr<ParticleList>& gammas,
129 const double belowLimit);
132 inline double getRhoOfECLClusterWithMaximumRho(
const StoreObjPtr<ParticleList>& pionshlt,
133 const StoreObjPtr<ParticleList>& gammahlt)
135 return getRhoOfECLClusterWithMaximumRhoBelow(pionshlt, gammahlt, std::nan(
""));
static const double pionMass
charged pion mass
@ c_nPhotons
CR is split into n photons (N1)
Abstract base class for different kinds of events.