Belle II Software  release-08-01-10
SkimFilterModule.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #include <analysis/modules/SkimFilter/SkimFilterModule.h>
10 #include <analysis/dataobjects/ParticleList.h>
11 #include <framework/core/Environment.h>
12 #include <framework/datastore/StoreObjPtr.h>
13 #include <boost/algorithm/string/split.hpp>
14 #include <boost/algorithm/string/replace.hpp>
15 #include <boost/algorithm/string/classification.hpp>
16 #include <TString.h>
17 
18 using namespace std;
19 using namespace Belle2;
20 using namespace boost::algorithm;
21 
22 // Register module in the framework
23 REG_MODULE(SkimFilter);
24 
25 SkimFilterModule::SkimFilterModule() : Module()
26 {
27  //Set module properties
28  setDescription("Filter based on ParticleLists, by setting return value to true if at least one of the given lists is not empty.");
30  //Parameter definition
31  addParam("particleLists", m_strParticleLists, "List of ParticleLists", vector<string>());
32 
33  // initializing the rest of private members
34  m_nPass = 0;
35 }
36 
38 {
39 
40  int nParticleLists = m_strParticleLists.size();
41  B2INFO("Number of ParticleLists studied " << nParticleLists << " ");
42 
43  m_nPass = 0;
44 }
45 
47 {
48 
49  setReturnValue(0);
50 
51  // number of ParticleLists
52  int nParticleLists = m_strParticleLists.size();
53  bool pass = false;
54  for (int iList = 0; iList < nParticleLists; ++iList) {
55 
56  StoreObjPtr<ParticleList> particlelist(m_strParticleLists[iList]);
57  if (!particlelist) {
58  B2INFO("ParticleList " << m_strParticleLists[iList] << " not found");
59  continue;
60  } else {
61  if (particlelist->getListSize() == 0)continue;
62  pass = true;
63  }
64 
65  }
66 
67  if (pass) m_nPass++;
68  //module condition
69  setReturnValue(pass);
70 
71 }
72 
74 {
75  B2INFO("SkimFilter Summary: \n");
76  std::ostringstream stream;
77  stream << "\n=======================================================\n";
78  stream << "Total Retention: " << Form("%6.4f\n", (float)m_nPass / (float)Environment::Instance().getNumberOfEvents());
79  stream << "\n=======================================================\n";
80  B2INFO(stream.str());
81 }
static Environment & Instance()
Static method to get a reference to the Environment instance.
Definition: Environment.cc:28
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
void setReturnValue(int value)
Sets the return value for this module as integer.
Definition: Module.cc:220
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
virtual void initialize() override
Initialises the module.
virtual void event() override
Method called for each event.
virtual void terminate() override
Write TTree to file, and close file if necessary.
std::vector< std::string > m_strParticleLists
Name of the lists.
int m_nPass
Number of events with Particle candidates.
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.