Back to home page

sPhenix code displayed by LXR

 
 

    


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 } /* namespace genfit */
0014 
0015 namespace PHGenFit {
0016     class Track;
0017     class Fitter;
0018 } /* namespace PHGenFit */
0019 
0020 class SvtxTrack;
0021 class SvtxTrackMap;
0022 class SvtxVertexMap;
0023 class SvtxVertex;
0024 class PHCompositeNode;
0025 class PHG4TruthInfoContainer;
0026 class PHG4CylinderGeomContainer;
0027 //class SvtxClusterMap;
0028 class TrkrClusterContainer;
0029 class SvtxEvalStack;
0030 class JetMap;
0031 class TFile;
0032 class TTree;
0033 
0034 //! \brief      Find secondary vertex from track pairs and refit SvtxTracks with PHGenFit.
0035 class SVReco {
0036     public:
0037 
0038         //! default ctor with hardcoded settings
0039         SVReco(const std::string &name = "SVReco");
0040 
0041         //! dtor
0042         ~SVReco();
0043 
0044         //!Initialization, called for initialization at each event
0045         int InitEvent(PHCompositeNode *);
0046 
0047         //!Initialization Run, called for initialization of a run
0048         int InitRun(PHCompositeNode *);
0049 
0050         //!@return a vertex for each track pair
0051         genfit::GFRaveVertex* findSecondaryVertex(SvtxTrack* track1, SvtxTrack* track2);
0052         ///@return a new SvtxVertex from the rave_vtx ownership is returned
0053         SvtxVertex* GFRVVtxToSvtxVertex(genfit::GFRaveVertex* rave_vtx)const;
0054 
0055         //Uses \param vtx to refit \param svtxtrk. @return the PHGenFit version of the track.
0056         PHGenFit::Track* refitTrack(SvtxVertex* vtx, SvtxTrack* svtxtrk);
0057         //Uses \param vtx to refit \param svtxtrk. @return the PHGenFit version of the track.
0058     PHGenFit::Track* refitTrack(genfit::GFRaveVertex* vtx, SvtxTrack* svtxtrk);
0059         //Looks up \param svtxtrk id in {@link _svtxtrk_gftrk_map}. If \param svtxtrk is NULL @return NULL.
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         //! changes how genfit tracks are calculated and vtx fit
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         //! string name for the rave hueristic
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         //! used for building the tracks
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         //! Get all the nodes
0130         int GetNodes(PHCompositeNode *);
0131 
0132         //!Create New nodes
0133         int CreateNodes(PHCompositeNode *);
0134 
0135         ///Uses the tracking clusters exclusively to make a GFTrack. @return ownership.
0136         PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack);
0137         ///Uses the tracking clusters and a vertex to fit/refit the track. @return ownership.
0138         PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack, const SvtxVertex* invertex);
0139         ///Uses the tracking clusters and a vertex to fit/refit the track. @return ownership.
0140     PHGenFit::Track* MakeGenFitTrack(const SvtxTrack* intrack, const genfit::GFRaveVertex* invertex);
0141     ///Uses the vertex to remake the track
0142 //    PHGenFit::Track* MakeGenFitTrack(const PHGenFit::Track* intrack, const genfit::GFRaveVertex* invertex);
0143         ///From {@link PHG4TrackKalmanFitter} 
0144         std::shared_ptr<SvtxTrack> MakeSvtxTrack(const SvtxTrack* svtx_track,
0145                 const PHGenFit::Track* phgf_track, const SvtxVertex* vertex);
0146         //! Fill SvtxVertexMap from GFRaveVertexes and Tracks
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         //! created by InitEvent to associate genfit to Svtx
0169         std::vector<PHGenFit::Track*> _main_rf_phgf_tracks;
0170 
0171         //! rescale mag field, modify the original mag field read in
0172         float _mag_field_re_scaling_factor;
0173 
0174         //! Switch to reverse Magnetic field
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         //! https://rave.hepforge.org/trac/wiki/RaveMethods
0192         genfit::GFRaveVertexFactory* _vertex_finder;
0193         std::string _vertexing_method;
0194 
0195         //! Input Node pointers
0196         TrkrClusterContainer* _clustermap;
0197         SvtxTrackMap* _trackmap;
0198         SvtxVertexMap* _vertexmap;
0199         PHG4CylinderGeomContainer* _geom_container_intt;
0200         PHG4CylinderGeomContainer* _geom_container_maps;
0201 
0202         //! switch eval out
0203         bool _do_eval;
0204 
0205         int _verbosity;
0206         /** \defgroup eval Variables
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 //* __SVReco_H__ *//