ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DecayFinder.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DecayFinder.h
1 #ifndef DECAYFINDER_DECAYFINDER_H
2 #define DECAYFINDER_DECAYFINDER_H
3 
4 //sPHENIX stuff
5 #include <fun4all/SubsysReco.h>
6 
7 #include <cstddef> // for NULL
8 #include <string>
9 #include <vector>
10 #include <utility> // for pair
11 
13 class PHCompositeNode;
14 class PHHepMCGenEvent;
15 class PHHepMCGenEventMap;
16 namespace HepMC { class GenParticle; }
17 
18 class DecayFinder : public SubsysReco
19 {
20  public:
21  typedef std::vector<std::pair<int, int>> Decay;
22 
23  DecayFinder();
24 
25  explicit DecayFinder(const std::string &name);
26 
27  virtual ~DecayFinder() {}
28 
29  int Init(PHCompositeNode *topNode);
30 
31  int process_event(PHCompositeNode *topNode);
32 
33  int End(PHCompositeNode *topNode);
34 
36 
37  bool findDecay(PHCompositeNode *topNode);
38 
39  bool findParticle(std::string particle);
40 
41  int checkIfCorrectParticle(HepMC::GenParticle *particle, bool &trackFailedPT, bool &trackFailedETA);
42 
43  int deleteElement(int arr[], int n, int x);
44 
45  void multiplyVectorByScalarAndSort(std::vector<int> &v, int k);
46 
47  int get_pdgcode(std::string name);
48 
49  int get_charge(std::string name);
50 
51  int createDecayNode(PHCompositeNode *topNode);
52 
53  void fillDecayNode(PHCompositeNode* topNode, Decay decay);
54 
55  void printInfo();
56 
57  void printNode(PHCompositeNode *topNode);
58 
59  //User configuration
81  void setDecayDescriptor(const std::string &decayDescriptor) { m_decayDescriptor = decayDescriptor; }
87  void triggerOnDecay(bool trigger) { m_triggerOnDecay = trigger; }
91  void allowPhotons(bool allow) { m_allowPhotons = allow; }
95  void allowPi0(bool allow) { m_allowPi0 = allow; }
100  void saveDST(bool save) { m_save_dst = save; }
105  void setNodeName(const std::string &name) { m_container_name = name; }
106 
107  private:
110 
111  int m_counter = 0;
112  int m_nCandFail_pT = 0;
116 
117  bool m_getChargeConjugate = false;
118 
119  std::string m_decayDescriptor;
120  bool m_triggerOnDecay = false;
121  bool m_allowPi0 = false;
122  bool m_allowPhotons = false;
123 
124  int m_mother_ID = 0;
125  std::vector<int> m_intermediates_ID;
126  std::vector<int> m_daughters_ID;
127 
129  std::vector<int> m_nTracksFromIntermediates;
130 
131  std::vector<int> m_motherDecayProducts;
132 
136  std::string m_nodeName;
137  std::string m_container_name;
138 };
139 
140 #endif //DECAYFINDER_DECAYFINDER_H