11 #include <ecl/modules/eclTriggerClusterMatcher/ECLTriggerClusterMatcherModule.h>
14 #include <framework/geometry/B2Vector3.h>
17 #include <mdst/dataobjects/ECLCluster.h>
20 #include <trg/ecl/dataobjects/TRGECLCluster.h>
38 setDescription(
"Match ECLTRGClusters to ECLClusters");
39 addParam(
"minClusterEnergy", m_minClusterEnergy,
"Minimum energy of the ECLCluster to be checked [GeV].", 0.1);
40 addParam(
"maxAngle", m_maxAngle,
"Maximum angle between an ECLCLuster and an ECLTRGCluster [rad]", 0.15);
41 addParam(
"minFracEnergy", m_minFracEnergy,
"Minimum energy fraction trg/cluster.", 0.);
42 addParam(
"maxFracEnergy", m_maxFracEnergy,
"Maximal energy fraction trg/cluster.", 2.);
43 setPropertyFlags(c_ParallelProcessingCertified);
48 m_eclClusters.isRequired();
49 m_eclTriggers.isRequired();
50 m_eclClusters.registerRelationTo(m_eclTriggers);
55 for (
auto& eclcluster : m_eclClusters) {
56 const double eclclusterTheta = eclcluster.getTheta();
57 const double eclclusterPhi = eclcluster.getPhi();
59 double eclclusterE = 0.0;
72 if (eclclusterE < m_minClusterEnergy)
continue;
76 cluster.SetTheta(eclclusterTheta);
77 cluster.SetPhi(eclclusterPhi);
79 for (
const auto& ecltrigger : m_eclTriggers) {
80 const double ecltriggerX = ecltrigger.getPositionX();
81 const double ecltriggerY = ecltrigger.getPositionY();
82 const double ecltriggerZ = ecltrigger.getPositionZ();
83 const double ecltriggerE = ecltrigger.getEnergyDep();
85 B2Vector3D trigger(ecltriggerX, ecltriggerY, ecltriggerZ);
87 const double angle = cluster.Angle(trigger);
89 double fracEnergy = -1.;
90 if (eclclusterE > 0.0) fracEnergy = ecltriggerE / eclclusterE;
93 if (angle < m_maxAngle and fracEnergy > m_minFracEnergy and fracEnergy < m_maxFracEnergy) {
95 eclcluster.addRelationTo(&ecltrigger);