File indexing completed on 2025-08-03 08:15:04
0001 #ifndef __SVReco_H__
0002 #define __SVReco_H__
0003
0004 #include <fun4all/SubsysReco.h>
0005 #include <GenFit/GFRaveVertex.h>
0006 #include <GenFit/Track.h>
0007 #include <string>
0008 #include <vector>
0009 #include <map>
0010
0011 namespace genfit {
0012 class GFRaveVertexFactory;
0013 }
0014
0015 namespace PHGenFit {
0016 class Track;
0017 class Fitter;
0018 }
0019
0020 class SvtxTrack;
0021 class SvtxTrackMap;
0022 class SvtxVertexMap;
0023 class SvtxVertex;
0024 class PHCompositeNode;
0025 class PHG4TruthInfoContainer;
0026 class PHG4CylinderGeomContainer;
0027
0028 class TrkrClusterContainer;
0029 class SvtxEvalStack;
0030 class JetMap;
0031 class TFile;
0032 class TTree;
0033
0034
0035 class SVReco {
0036 public:
0037
0038
0039 SVReco(const std::string &name = "SVReco");
0040
0041
0042 ~SVReco();
0043
0044
0045 int InitEvent(PHCompositeNode *);
0046
0047
0048 int InitRun(PHCompositeNode *);
0049
0050
0051 genfit::GFRaveVertex* findSecondaryVertex(SvtxTrack* track1, SvtxTrack* track2);
0052
0053 SvtxVertex* GFRVVtxToSvtxVertex(genfit::GFRaveVertex* rave_vtx)const;
0054
0055
0056 PHGenFit::Track* refitTrack(SvtxVertex* vtx, SvtxTrack* svtxtrk);
0057
0058 PHGenFit::Track* refitTrack(genfit::GFRaveVertex* vtx, SvtxTrack* svtxtrk);
0059
0060 PHGenFit::Track* getPHGFTrack(SvtxTrack* svtxtrk);
0061 void reset_eval_variables();
0062
0063 void set_do_eval(bool doEval){
0064 _do_eval = doEval;
0065 }
0066
0067 void set_use_ladder_geom(bool useLadderGeom){
0068 _use_ladder_geom = useLadderGeom;
0069 }
0070
0071 void set_do_evt_display(bool doEvtDisplay){
0072 _do_evt_display = doEvtDisplay;
0073 }
0074
0075 void set_reverse_mag_field(bool reverseMagField){
0076 _reverse_mag_field = reverseMagField;
0077 }
0078
0079 void set_mag_field_re_scaling_factor(float magFieldReScalingFactor){
0080 _mag_field_re_scaling_factor = magFieldReScalingFactor;
0081 }
0082
0083 void set_vertexing_method(const std::string& vertexingMethod){
0084 _vertexing_method = vertexingMethod;
0085 }
0086
0087 void set_mag_field_file_name(const std::string& magFieldFileName){
0088 _mag_field_file_name = magFieldFileName;
0089 }
0090
0091 const std::string& get_track_fitting_alg_name() const{
0092 return _track_fitting_alg_name;
0093 }
0094
0095 void set_track_fitting_alg_name(const std::string& trackFittingAlgName){
0096 _track_fitting_alg_name = trackFittingAlgName;
0097 }
0098
0099 void set_primary_pid_guess(int primaryPidGuess){
0100 _primary_pid_guess = primaryPidGuess;
0101 }
0102
0103 void set_cut_min_pT(double cutMinPT){
0104 _cut_min_pT = cutMinPT;
0105 }
0106
0107 void set_cut_dca(double cutDCA){
0108 _cut_dca = cutDCA;
0109 }
0110
0111 void set_cut_chi2ndf(double cutChi2Ndf){
0112 _cut_chi2_ndf = cutChi2Ndf;
0113 }
0114
0115 void set_cut_ncluster(bool cutNcluster){
0116 _cut_Ncluster = cutNcluster;
0117 }
0118
0119 void set_n_maps_layer(unsigned int n){
0120 _n_maps_layer = n;
0121 }
0122
0123 void set_n_intt_layer(unsigned int n){
0124 _n_intt_layer = n;
0125 }
0126
0127 private:
0128
0129
0130 int GetNodes(PHCompositeNode *);
0131
0132
0133 int CreateNodes(PHCompositeNode *);
0134
0135
0136 PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack);
0137
0138 PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack, const SvtxVertex* invertex);
0139
0140 PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack, const genfit::GFRaveVertex* invertex);
0141
0142
0143
0144 std::shared_ptr<SvtxTrack> MakeSvtxTrack(const SvtxTrack* svtx_track,
0145 const PHGenFit::Track* phgf_track, const SvtxVertex* vertex);
0146
0147 void FillVertexMap(
0148 const std::vector<genfit::GFRaveVertex*> & rave_vertices,
0149 const std::vector<genfit::Track*> & gf_tracks);
0150 void printGenFitTrackKinematics(PHGenFit::Track* track);
0151
0152 void FillSVMap(
0153 const std::vector<genfit::GFRaveVertex*> & rave_vertices,
0154 const std::vector<genfit::Track*> & gf_tracks);
0155
0156 int GetSVMass_mom(
0157 const genfit::GFRaveVertex* rave_vtx,
0158 float & vtx_mass,
0159 float & vtx_px,
0160 float & vtx_py,
0161 float & vtx_pz,
0162 int & ntrk_good_pv
0163 );
0164
0165
0166 std::string _mag_field_file_name;
0167
0168
0169 std::vector<PHGenFit::Track*> _main_rf_phgf_tracks;
0170
0171
0172 float _mag_field_re_scaling_factor;
0173
0174
0175 bool _reverse_mag_field;
0176
0177 PHGenFit::Fitter* _fitter;
0178 std::string _track_fitting_alg_name;
0179
0180 unsigned int _n_maps_layer;
0181 unsigned int _n_intt_layer;
0182
0183 int _primary_pid_guess;
0184 bool _cut_Ncluster;
0185 double _cut_min_pT;
0186 double _cut_dca;
0187 double _cut_chi2_ndf;
0188
0189 bool _use_ladder_geom;
0190
0191
0192 genfit::GFRaveVertexFactory* _vertex_finder;
0193 std::string _vertexing_method;
0194
0195
0196 TrkrClusterContainer* _clustermap;
0197 SvtxTrackMap* _trackmap;
0198 SvtxVertexMap* _vertexmap;
0199 PHG4CylinderGeomContainer* _geom_container_intt;
0200 PHG4CylinderGeomContainer* _geom_container_maps;
0201
0202
0203 bool _do_eval;
0204
0205 int _verbosity;
0206
0207
0208 float gf_prim_vtx[3];
0209 float gf_prim_vtx_err[3];
0210 int gf_prim_vtx_ntrk;
0211 float rv_prim_vtx[3];
0212 float rv_prim_vtx_err[3];
0213 int rv_prim_vtx_ntrk;
0214
0215 int rv_sv_njets;
0216 int rv_sv_jet_id[10];
0217 int rv_sv_jet_prop[10][2];
0218 float rv_sv_jet_pT[10];
0219 float rv_sv_jet_px[10];
0220 float rv_sv_jet_py[10];
0221 float rv_sv_jet_pz[10];
0222
0223 int rv_sv_pT00_nvtx[10];
0224 float rv_sv_pT00_vtx_x[10][30];
0225 float rv_sv_pT00_vtx_y[10][30];
0226 float rv_sv_pT00_vtx_z[10][30];
0227 float rv_sv_pT00_vtx_ex[10][30];
0228 float rv_sv_pT00_vtx_ey[10][30];
0229 float rv_sv_pT00_vtx_ez[10][30];
0230 int rv_sv_pT00_vtx_ntrk[10][30];
0231 int rv_sv_pT00_vtx_ntrk_good[10][30];
0232 int rv_sv_pT00_vtx_ntrk_good_pv[10][30];
0233 float rv_sv_pT00_vtx_mass[10][30];
0234 float rv_sv_pT00_vtx_mass_corr[10][30];
0235 float rv_sv_pT00_vtx_pT[10][30];
0236 float rv_sv_pT00_vtx_jet_theta[10][30];
0237 float rv_sv_pT00_vtx_chi2[10][30];
0238 float rv_sv_pT00_vtx_ndf[10][30];
0239
0240 int rv_sv_pT05_nvtx[10];
0241 float rv_sv_pT05_vtx_x[10][30];
0242 float rv_sv_pT05_vtx_y[10][30];
0243 float rv_sv_pT05_vtx_z[10][30];
0244 float rv_sv_pT05_vtx_ex[10][30];
0245 float rv_sv_pT05_vtx_ey[10][30];
0246 float rv_sv_pT05_vtx_ez[10][30];
0247 int rv_sv_pT05_vtx_ntrk[10][30];
0248 int rv_sv_pT05_vtx_ntrk_good[10][30];
0249 int rv_sv_pT05_vtx_ntrk_good_pv[10][30];
0250 float rv_sv_pT05_vtx_mass[10][30];
0251 float rv_sv_pT05_vtx_mass_corr[10][30];
0252 float rv_sv_pT05_vtx_pT[10][30];
0253 float rv_sv_pT05_vtx_jet_theta[10][30];
0254 float rv_sv_pT05_vtx_chi2[10][30];
0255 float rv_sv_pT05_vtx_ndf[10][30];
0256
0257 int rv_sv_pT10_nvtx[10];
0258 float rv_sv_pT10_vtx_x[10][30];
0259 float rv_sv_pT10_vtx_y[10][30];
0260 float rv_sv_pT10_vtx_z[10][30];
0261 float rv_sv_pT10_vtx_ex[10][30];
0262 float rv_sv_pT10_vtx_ey[10][30];
0263 float rv_sv_pT10_vtx_ez[10][30];
0264 int rv_sv_pT10_vtx_ntrk[10][30];
0265 int rv_sv_pT10_vtx_ntrk_good[10][30];
0266 int rv_sv_pT10_vtx_ntrk_good_pv[10][30];
0267 float rv_sv_pT10_vtx_mass[10][30];
0268 float rv_sv_pT10_vtx_mass_corr[10][30];
0269 float rv_sv_pT10_vtx_pT[10][30];
0270 float rv_sv_pT10_vtx_jet_theta[10][30];
0271 float rv_sv_pT10_vtx_chi2[10][30];
0272 float rv_sv_pT10_vtx_ndf[10][30];
0273
0274 int rv_sv_pT15_nvtx[10];
0275 float rv_sv_pT15_vtx_x[10][30];
0276 float rv_sv_pT15_vtx_y[10][30];
0277 float rv_sv_pT15_vtx_z[10][30];
0278 float rv_sv_pT15_vtx_ex[10][30];
0279 float rv_sv_pT15_vtx_ey[10][30];
0280 float rv_sv_pT15_vtx_ez[10][30];
0281 int rv_sv_pT15_vtx_ntrk[10][30];
0282 int rv_sv_pT15_vtx_ntrk_good[10][30];
0283 int rv_sv_pT15_vtx_ntrk_good_pv[10][30];
0284 float rv_sv_pT15_vtx_mass[10][30];
0285 float rv_sv_pT15_vtx_mass_corr[10][30];
0286 float rv_sv_pT15_vtx_pT[10][30];
0287 float rv_sv_pT15_vtx_jet_theta[10][30];
0288 float rv_sv_pT15_vtx_chi2[10][30];
0289 float rv_sv_pT15_vtx_ndf[10][30];
0290
0291
0292 bool _do_evt_display;
0293
0294 std::map<unsigned int, unsigned int> _svtxtrk_gftrk_map;
0295 std::map<unsigned int, float> _svtxtrk_wt_map;
0296 std::map<unsigned int, float> _svtxtrk_pt_map;
0297 std::vector<unsigned int> _svtxtrk_id;
0298
0299 };
0300
0301 #endif