Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:57

0001 #ifndef PARTICLEFLOWRECO_H
0002 #define PARTICLEFLOWRECO_H
0003 
0004 //===========================================================
0005 /// \file ParticleFlowReco.h
0006 /// \brief Particle flow event reconstruction
0007 /// \author Dennis V. Perepelitsa
0008 //===========================================================
0009 
0010 #include <fun4all/SubsysReco.h>
0011 
0012 #include <gsl/gsl_rng.h>
0013 
0014 #include <string>
0015 #include <vector>
0016 
0017 class PHCompositeNode;
0018 class SvtxTrack;
0019 class RawCluster;
0020 
0021 class ParticleFlowReco : public SubsysReco
0022 {
0023  public:
0024   ParticleFlowReco(const std::string &name = "ParticleFlowReco");
0025 
0026   ~ParticleFlowReco() override = default;
0027 
0028   int InitRun(PHCompositeNode *topNode) override;
0029 
0030   int process_event(PHCompositeNode *topNode) override;
0031 
0032   void set_energy_match_Nsigma(float Nsigma)
0033   {
0034     _energy_match_Nsigma = Nsigma;
0035   }
0036   void set_track_map_name(std::string &name) { _track_map_name = name; }
0037 
0038   void set_only_crossing_zero(bool b) { _only_crossing_zero = b; }
0039 
0040  private:
0041   static int CreateNode(PHCompositeNode *topNode);
0042 
0043   static float calculate_dR(float, float, float, float);
0044   std::pair<float, float> get_expected_signature(int);
0045 
0046   bool _only_crossing_zero {true};
0047 
0048   float _energy_match_Nsigma {1.5};
0049 
0050   std::vector<float> _pflow_TRK_p;
0051   std::vector<float> _pflow_TRK_eta;
0052   std::vector<float> _pflow_TRK_phi;
0053   std::vector<float> _pflow_TRK_EMproj_phi;
0054   std::vector<float> _pflow_TRK_EMproj_eta;
0055   std::vector<float> _pflow_TRK_HADproj_phi;
0056   std::vector<float> _pflow_TRK_HADproj_eta;
0057   std::vector<SvtxTrack *> _pflow_TRK_trk;
0058   std::vector<std::vector<int> > _pflow_TRK_match_EM;
0059   std::vector<std::vector<int> > _pflow_TRK_match_HAD;
0060 
0061   // convention is ( EM index, dR value )
0062   std::vector<std::vector<std::pair<int, float> > > _pflow_TRK_addtl_match_EM;
0063 
0064   std::vector<float> _pflow_EM_E;
0065   std::vector<float> _pflow_EM_eta;
0066   std::vector<float> _pflow_EM_phi;
0067   std::vector<RawCluster *> _pflow_EM_cluster;
0068   std::vector<std::vector<float> > _pflow_EM_tower_eta;
0069   std::vector<std::vector<float> > _pflow_EM_tower_phi;
0070   std::vector<std::vector<int> > _pflow_EM_match_HAD;
0071   std::vector<std::vector<int> > _pflow_EM_match_TRK;
0072 
0073   std::vector<float> _pflow_HAD_E;
0074   std::vector<float> _pflow_HAD_eta;
0075   std::vector<float> _pflow_HAD_phi;
0076   std::vector<RawCluster *> _pflow_HAD_cluster;
0077   std::vector<std::vector<float> > _pflow_HAD_tower_eta;
0078   std::vector<std::vector<float> > _pflow_HAD_tower_phi;
0079   std::vector<std::vector<int> > _pflow_HAD_match_EM;
0080   std::vector<std::vector<int> > _pflow_HAD_match_TRK;
0081 
0082   std::string _track_map_name {"SvtxTrackMap"};
0083 };
0084 
0085 #endif  // PARTICLEFLOWRECO_H