13#include <dqm/modules/PhysicsObjectsDQM/PhysicsObjectsDQMModule.h>
14#include <analysis/dataobjects/ParticleList.h>
15#include <analysis/variables/EventShapeVariables.h>
16#include <analysis/variables/BelleVariables.h>
17#include <analysis/ContinuumSuppression/FoxWolfram.h>
18#include <analysis/utility/PCmsLabTransform.h>
19#include <mdst/dataobjects/Track.h>
20#include <framework/datastore/StoreArray.h>
21#include <analysis/ClusterUtility/ClusterUtils.h>
22#include <framework/datastore/StoreObjPtr.h>
23#include <framework/gearbox/Const.h>
24#include <mdst/dataobjects/SoftwareTriggerResult.h>
25#include <mdst/dataobjects/TRGSummary.h>
26#include <hlt/softwaretrigger/calculations/utilities.h>
27#include <TDirectory.h>
49 "Trigger identifier string used to select events for the histograms", std::string(
"software_trigger_cut&skim&accept_hadron"));
51 "Trigger identifier string used to select events for the mumu histograms",
52 std::string(
"software_trigger_cut&skim&accept_mumutight"));
54 "Trigger identifier string used to select events for the bhabha histograms",
55 std::string(
"software_trigger_cut&skim&accept_bhabha_trk_ecl"));
57 "Trigger identifier string used to select events for the hadronb2 histograms",
58 std::string(
"software_trigger_cut&skim&accept_hadronb2"));
60 "Trigger identifier string used to select events for the HLTprefilter histograms",
61 std::string(
"software_trigger_cut&filter&total_result"));
67 addParam(
"UpsHadPListName",
m_hadbphysDQM,
"Name of the pi hadron particle list", std::string(
"pi+:hadbphysDQM"));
72 TDirectory* oldDir = gDirectory;
73 oldDir->mkdir(
"PhysicsObjects");
74 oldDir->cd(
"PhysicsObjects");
76 m_h_mKS0 =
new TH1F(
"mKS0",
"KS0 Invariant Mass", 20, 0.48, 0.52);
77 m_h_mKS0->SetXTitle(
"M(K_{S}^{0}) [GeV]");
79 m_h_mPI0 =
new TH1F(
"mPI0",
"pi0 Invariant Mass", 25, 0.10, 0.15);
80 m_h_mPI0->SetXTitle(
"M(#pi^{0}) [GeV]");
82 m_h_mUPS =
new TH1F(
"mUPS",
"Ups Invariant Mass", 500, 9, 12);
83 m_h_mUPS->SetXTitle(
"M(#mu#mu) [GeV]");
85 m_h_R2 =
new TH1F(
"R2",
"Event Level R2", 36, 0, 1.2);
88 m_h_mUPSe =
new TH1F(
"mUPSe",
"Ups ee Invariant Mass", 500, 9, 12);
100 m_h_nKshortAllH =
new TH1F(
"hist_nKshortAllH",
"hist_nKshortAllH", 50, 0.45, 0.55);
101 m_h_nKshortActiveH =
new TH1F(
"hist_nKshortActiveH",
"hist_nKshortActiveH", 50, 0.45, 0.55);
146 if (!result.isValid()) {
147 B2WARNING(
"SoftwareTriggerResult object not available but needed to select events for the histograms.");
151 const std::map<std::string, int>& results = result->getResults();
155 bool HLTAccepted =
false;
161 if (HLTAccepted !=
false) {
164 bool inActiveInjectionVeto =
false;
167 inActiveInjectionVeto =
true;
168 }
catch (
const std::exception&) {}
181 for (
unsigned int i = 0; i < ks0Particles->getListSize(); i++) {
182 Particle* mergeKsCand = ks0Particles->getParticle(i);
183 const double isKsCandGood = Variable::goodBelleKshort(mergeKsCand);
187 if (inActiveInjectionVeto) {
205 if (accepted !=
false) {
214 double R2 = Belle2::Variable::foxWolframR2(
nullptr);
217 if (pi0Particles.
isValid() && abs(pi0Particles->getPDGCode()) ==
Const::pi0.getPDGCode()) {
218 for (
unsigned int i = 0; i < pi0Particles->getListSize(); i++) {
219 Particle* pi0 = pi0Particles->getParticle(i);
224 for (
unsigned int i = 0; i < ks0Particles->getListSize(); i++) {
225 Particle* ks0 = ks0Particles->getParticle(i);
237 if (accepted !=
false) {
241 for (
unsigned int i = 0; i < UpsParticles->getListSize(); i++) {
242 Particle* Ups = UpsParticles->getParticle(i);
255 if (accepted !=
false) {
262 if (UpsbhabhaParticles.
isValid()) {
263 for (
unsigned int i = 0; i < UpsbhabhaParticles->getListSize(); i++) {
264 Particle* Upse = UpsbhabhaParticles->getParticle(i);
278 if (accepted !=
false && HLTAccepted !=
false) {
284 std::vector<ROOT::Math::PxPyPzEVector> m_pionHad;
285 double EsumPiHad = 0.;
286 for (
unsigned int i = 0; i < hadpiParticles->getListSize(); i++) {
287 const Particle* parPiHad = hadpiParticles->getParticle(i);
289 m_pionHad.push_back(V4PiHad);
290 EsumPiHad += V4PiHad.E();
293 double eneclClusters = 0.;
296 double EsumGamma = 0.;
298 for (
int ncl = 0; ncl < eclClusters.
getEntries(); ncl++) {
302 if (!eclClusters[ncl]->getRelatedFrom<Track>()) {
305 EsumGamma += V4Gamma_CMS.E();
310 double visibleEnergyCMSnorm = (EsumPiHad + EsumGamma) / (Belle2::SoftwareTrigger::BeamEnergyCMS() * 2.0);
311 double EsumCMSnorm = eneclClusters / (Belle2::SoftwareTrigger::BeamEnergyCMS() * 2.0);
314 double R2 = fw.
getR(2);
315 bool hadronb_tag = visibleEnergyCMSnorm > 0.4 && EsumCMSnorm > 0.2 && R2 < 0.2;
Class to provide momentum-related information from ECLClusters.
const ROOT::Math::PxPyPzEVector Get4MomentumFromCluster(const ECLCluster *cluster, ECLCluster::EHypothesisBit hypo)
Returns four momentum vector.
static const ParticleType pi0
neutral pion particle
static const ParticleType Kshort
K^0_S particle.
@ c_nPhotons
CR is split into n photons (N1)
Class to calculate the Fox-Wolfram moments up to order 8.
double getR(int i) const
Returns the i-th moment normalized to the 0th-order moment.
void calculateBasicMoments()
Method to perform the calculation of the moments up to order 4, which are the most relevant ones.
HistoModule()
Constructor.
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Class to store reconstructed particles.
ROOT::Math::PxPyPzEVector get4Vector() const
Returns Lorentz vector.
double getMass() const
Returns invariant mass (= nominal for FS particles)
TH1F * m_h_nKshortAllH
Histograms for Ks.
TH1F * m_h_mUPS
Ups invariant mass.
std::string m_ks0PListName
Name of the KS0 particle list.
void initialize() override
Initializer.
StoreObjPtr< TRGSummary > m_l1Trigger
Objects relevant to HLTprefilter monitoring.
void event() override
This method is called for each event.
void endRun() override
This method is called if the current run ends.
std::string m_prefilter_Injection_Strip
HLTPrefilter lines.
void terminate() override
This method is called at the end of the event processing.
std::string m_triggerIdentifier
Trigger identifier string used to select events for the histograms.
bool m_CDCECLCut
Flag for timing cut on injection strip.
TH1F * m_h_mPI0
PI0 invariant mass.
TH1F * m_h_nKshortActiveNotCDCECLH
Histogram for Ks events : && active veto && !timing cut.
TH1F * m_h_mUPSe
Ups ee invariant mass.
void beginRun() override
Called when entering a new run.
TH1F * m_h_physicsresults
event physics results
TH1F * m_h_mKS0
KS0 invariant mass.
PhysicsObjectsDQMModule()
Constructor.
std::string m_upsPListName
Name of the Ups particle list.
std::string m_hadbphysDQM
Name of the pi hadron particle list.
std::string m_upsBhabhaPListName
Name of the Ups bhabha particle list.
std::string m_triggerIdentifierHadronb2
Trigger identifier string used to select events for the hadronb2 histograms.
bool m_TimingCut
CDC-ECL occupancy cut for prefilter.
std::string m_prefilter_CDCECL_Cut
Timing cut for prefilter.
std::string m_triggerIdentifierHLT
Trigger identifier string used to select events for HLTprefilter histograms.
std::string m_triggerIdentifierMuMu
Trigger identifier string used to select events for the mumu histograms.
TH1F * m_h_nKshortActiveH
Histogram for Ks events.
std::string m_pi0PListName
Name of the pi0 particle list.
TH1F * m_h_nKshortActiveNotTimeH
Histogram for Ks events : active veto.
void defineHisto() override
Definition of the histograms.
std::string m_triggerIdentifierBhabha
Trigger identifier string used to select events for the ee histograms.
Accessor to arrays stored in the data store.
bool isValid() const
Check whether the array was registered.
int getEntries() const
Get the number of objects in the array.
Type-safe access to single objects in the data store.
bool isValid() const
Check whether the object was created.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
@ c_accept
Accept this event.
Abstract base class for different kinds of events.