Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 09:20:16

0001 #ifndef KFPARTICLESPHENIX_KFPARTICLENTUPLE_H
0002 #define KFPARTICLESPHENIX_KFPARTICLENTUPLE_H
0003 
0004 #include "KFParticle_truthAndDetTools.h"
0005 #include "KFParticle_triggerInfo.h"
0006 
0007 #include <KFParticle.h>
0008 
0009 #include <string>  // for string
0010 #include <vector>
0011 
0012 class PHCompositeNode;
0013 class TTree;
0014 
0015 class KFParticle_nTuple : public KFParticle_truthAndDetTools, public KFParticle_triggerInfo
0016 {
0017  public:
0018   /// Constructor
0019   KFParticle_nTuple() = default;
0020 
0021   /// Destructor
0022   ~KFParticle_nTuple() override = default;
0023 
0024   /// Unused for now, variables are initialised in the header
0025   void initializeVariables();
0026 
0027   /// Initialises required branches based off the user selection (number of tracks, PV constraints etc ) and sets branch names if specified
0028   void initializeBranches(PHCompositeNode* topNode);
0029 
0030   /// Fills required information for your selection, also requests truth and detector information if needed
0031   void fillBranch(PHCompositeNode *topNode,
0032                   KFParticle motherParticle,
0033                   const KFParticle &vertex,
0034                   std::vector<KFParticle> daughters,
0035                   std::vector<KFParticle> intermediates);
0036 
0037   float calc_secondary_vertex_mass_noPID(std::vector<KFParticle> kfp_daughters);
0038   
0039   bool fillConditionMet();
0040 
0041   /// Functions to get detailed subsystem information
0042   void GetDetailedTracking(bool set_variable = true) { 
0043     m_get_detailed_tracking = set_variable; 
0044     if(m_get_detailed_tracking){m_detector_info = true;}
0045   }
0046   void GetDetailedCalorimetry(bool set_variable = true) { 
0047     m_get_detailed_calorimetry = set_variable; 
0048     if(m_get_detailed_calorimetry){m_calo_info = true;}
0049   }
0050   
0051  protected:
0052   bool m_has_intermediates_nTuple {false};
0053   bool m_extrapolateTracksToSV_nTuple{true};
0054   bool m_constrain_to_vertex_nTuple {false};
0055   bool m_get_all_PVs {false};
0056   // int m_num_intermediate_states_nTuple;
0057   // int m_num_tracks_from_intermediate_nTuple[99];
0058   std::vector<int> m_num_tracks_from_intermediate_nTuple;
0059   bool m_truth_matching {false};
0060   bool m_get_trigger_info {false};
0061   bool m_detector_info {false};
0062   bool m_calo_info {false};
0063   bool m_require_track_emcal_match {false};
0064   bool isTrackEMCalmatch {true};
0065   std::string m_mother_name;
0066   // std::string m_vtx_map_node_name_nTuple;
0067   bool m_use_intermediate_name {false};
0068   bool m_get_charge_conjugate_nTuple {false};
0069   bool m_use_fake_pv_nTuple {false};
0070   std::vector<std::string> m_intermediate_name_ntuple;
0071 
0072  private:
0073   TTree *m_tree {nullptr};
0074 
0075   float m_calculated_mother_mass = -1;
0076   float m_calculated_mother_mass_err = -1;
0077   float m_calculated_mother_decaytime = -1;
0078   float m_calculated_mother_decaytime_err = -1;
0079   float m_calculated_mother_decaylength = -1;
0080   float m_calculated_mother_decaylength_err = -1;
0081   float m_calculated_mother_decaylength_xy = -1;
0082   float m_calculated_mother_decaylength_xy_err = -1;
0083   float m_calculated_mother_dira = -1;
0084   float m_calculated_mother_dira_xy = -1;
0085   float m_calculated_mother_fdchi2 = -1;
0086   float m_calculated_mother_ip = -1;
0087   float m_calculated_mother_ip_xy = -1;
0088   float m_calculated_mother_ipchi2 = -1;
0089   float m_calculated_mother_ip_err = -1;
0090   float m_calculated_mother_x = -1;
0091   float m_calculated_mother_y = -1;
0092   float m_calculated_mother_z = -1;
0093   float m_calculated_mother_px = -1;
0094   float m_calculated_mother_py = -1;
0095   float m_calculated_mother_pz = -1;
0096   float m_calculated_mother_pe = -1;
0097   float m_calculated_mother_p = -1;
0098   float m_calculated_mother_p_err = -1;
0099   float m_calculated_mother_pt = -1;
0100   float m_calculated_mother_pt_err = -1;
0101   char m_calculated_mother_q = -1;
0102   float m_calculated_mother_eta = -1;
0103   float m_calculated_mother_rapidity = -1;
0104   float m_calculated_mother_theta = -1;
0105   float m_calculated_mother_phi = -1;
0106   float m_calculated_mother_v = -1;
0107   float m_calculated_mother_chi2 = -1;
0108   int m_calculated_mother_ndof = -1;
0109   int m_calculated_mother_pdgID = -1;
0110   // float *m_calculated_mother_cov;
0111   float m_calculated_mother_cov[21] = {0};
0112 
0113   static const int max_intermediates = 8;
0114   float m_calculated_intermediate_mass[max_intermediates] = {0};
0115   float m_calculated_intermediate_mass_err[max_intermediates] = {0};
0116   float m_calculated_intermediate_decaytime[max_intermediates] = {0};
0117   float m_calculated_intermediate_decaytime_err[max_intermediates] = {0};
0118   float m_calculated_intermediate_decaylength[max_intermediates] = {0};
0119   float m_calculated_intermediate_decaylength_err[max_intermediates] = {0};
0120   float m_calculated_intermediate_decaylength_xy[max_intermediates] = {0};
0121   float m_calculated_intermediate_decaylength_xy_err[max_intermediates] = {0};
0122   float m_calculated_intermediate_dira[max_intermediates] = {0};
0123   float m_calculated_intermediate_fdchi2[max_intermediates] = {0};
0124   float m_calculated_intermediate_ip[max_intermediates] = {0};
0125   float m_calculated_intermediate_ip_xy[max_intermediates] = {0};
0126   float m_calculated_intermediate_ipchi2[max_intermediates] = {0};
0127   float m_calculated_intermediate_ip_err[max_intermediates] = {0};
0128   float m_calculated_intermediate_x[max_intermediates] = {0};
0129   float m_calculated_intermediate_y[max_intermediates] = {0};
0130   float m_calculated_intermediate_z[max_intermediates] = {0};
0131   float m_calculated_intermediate_px[max_intermediates] = {0};
0132   float m_calculated_intermediate_py[max_intermediates] = {0};
0133   float m_calculated_intermediate_pz[max_intermediates] = {0};
0134   float m_calculated_intermediate_pe[max_intermediates] = {0};
0135   float m_calculated_intermediate_p[max_intermediates] = {0};
0136   float m_calculated_intermediate_p_err[max_intermediates] = {0};
0137   float m_calculated_intermediate_pt[max_intermediates] = {0};
0138   float m_calculated_intermediate_pt_err[max_intermediates] = {0};
0139   char m_calculated_intermediate_q[max_intermediates] = {0};
0140   float m_calculated_intermediate_eta[max_intermediates] = {0};
0141   float m_calculated_intermediate_rapidity[max_intermediates] = {0};
0142   float m_calculated_intermediate_theta[max_intermediates] = {0};
0143   float m_calculated_intermediate_phi[max_intermediates] = {0};
0144   float m_calculated_intermediate_v[max_intermediates] = {0};
0145   float m_calculated_intermediate_chi2[max_intermediates] = {0};
0146   int m_calculated_intermediate_ndof[max_intermediates] = {0};
0147   int m_calculated_intermediate_pdgID[max_intermediates] = {0};
0148   // float *m_calculated_intermediate_cov[max_intermediates];
0149   float m_calculated_intermediate_cov[max_intermediates][21] = {{0}, {0}};
0150 
0151   // static const int max_tracks = 20;
0152   float m_calculated_daughter_mass[max_tracks] = {0};
0153   float m_calculated_daughter_ip[max_tracks] = {0};
0154   float m_calculated_daughter_ip_xy[max_tracks] = {0};
0155   float m_calculated_daughter_ipchi2[max_tracks] = {0};
0156   float m_calculated_daughter_ip_err[max_tracks] = {0};
0157   float m_calculated_daughter_x[max_tracks] = {0};
0158   float m_calculated_daughter_y[max_tracks] = {0};
0159   float m_calculated_daughter_z[max_tracks] = {0};
0160   float m_calculated_daughter_px[max_tracks] = {0};
0161   float m_calculated_daughter_py[max_tracks] = {0};
0162   float m_calculated_daughter_pz[max_tracks] = {0};
0163   float m_calculated_daughter_pe[max_tracks] = {0};
0164   float m_calculated_daughter_p[max_tracks] = {0};
0165   float m_calculated_daughter_p_err[max_tracks] = {0};
0166   float m_calculated_daughter_pt[max_tracks] = {0};
0167   float m_calculated_daughter_pt_err[max_tracks] = {0};
0168   float m_calculated_daughter_jt[max_tracks] = {0};
0169   char m_calculated_daughter_q[max_tracks] = {0};
0170   int m_calculated_daughter_bunch_crossing[max_tracks] = {0};
0171   float m_calculated_daughter_eta[max_tracks] = {0};
0172   float m_calculated_daughter_rapidity[max_tracks] = {0};
0173   float m_calculated_daughter_theta[max_tracks] = {0};
0174   float m_calculated_daughter_phi[max_tracks] = {0};
0175   float m_calculated_daughter_chi2[max_tracks] = {0};
0176   int m_calculated_daughter_ndof[max_tracks] = {0};
0177   int m_calculated_daughter_trid[max_tracks] = {0};
0178   int m_calculated_daughter_pdgID[max_tracks] = {0};
0179   // float *m_calculated_daughter_cov[max_tracks];
0180   float m_calculated_daughter_cov[max_tracks][21] = {{0}, {0}};
0181   float m_calculated_daughter_dedx[max_tracks] = {0};
0182   //float m_calculated_daughter_expected_dedx_pion[max_tracks] = {0};
0183   //float m_calculated_daughter_expected_dedx_kaon[max_tracks] = {0};
0184   //float m_calculated_daughter_expected_dedx_proton[max_tracks] = {0};
0185 
0186   float m_daughter_dca[99] = {0};
0187   float m_daughter_dca_xy[99] = {0};
0188 
0189   float m_calculated_vertex_x = -1;
0190   float m_calculated_vertex_y = -1;
0191   float m_calculated_vertex_z = -1;
0192   float m_calculated_vertex_v = -1;
0193   float m_calculated_vertex_chi2 = -1;
0194   unsigned int m_calculated_vertex_ndof = -1;
0195   int m_calculated_vertex_ID = -1;
0196   // float *m_calculated_vertex_cov;
0197   float m_calculated_vertex_cov[6] = {0};
0198 
0199   float m_sv_mass = -1;
0200 
0201   int m_nPVs = -1;
0202   int m_multiplicity = -1;
0203   int m_nTracksOfVertex = -1;
0204 
0205   int m_runNumber = -1;
0206   int m_evtNumber = -1;
0207   int64_t m_bco = -1;
0208 
0209   bool m_trigger_info_available {false};
0210 };
0211 
0212 #endif