/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcHoughFinder/MdcHoughFinder-00-00-02/MdcHoughFinder/HoughValidUpdate.h

Go to the documentation of this file.
00001 #ifndef HOUGHVALIDUPDATE_H 
00002 #define HOUGHVALIDUPDATE_H
00003 #include "GaudiKernel/Algorithm.h"
00004 #include "GaudiKernel/NTuple.h"                                      
00005 #include "GaudiKernel/INTupleSvc.h"
00006 #include "MdcGeomSvc/IMdcGeomSvc.h"
00007 #include "MdcGeomSvc/MdcGeoWire.h"
00008 #include "MdcGeomSvc/MdcGeoLayer.h"
00009 #include "MdcPrintSvc/MdcPrintSvc.h"
00010 #include "RawDataProviderSvc/RawDataProviderSvc.h"
00011 #include <string>
00012 #include <vector>
00013 #include <iostream>
00014 #include <math.h>
00015 #include <map>
00016 #include <set>
00017 #include "TH2D.h" 
00018 
00019 #include "CLHEP/Alist/AList.h"
00020 #include "MdcGeom/MdcDetector.h"
00021 #include "BField/BField.h"
00022 #include "TrkBase/TrkRecoTrk.h"
00023 #include "TrkFitter/TrkContextEv.h"
00024 #include "MdcCalibFunSvc/MdcCalibFunSvc.h"
00025 #include "MdcUtilitySvc/MdcUtilitySvc.h"
00026 #include "MdcPrintSvc/MdcPrintSvc.h"
00027 #include "HepPDT/ParticleDataTable.hh"
00028 #include "MdcData/MdcHit.h"
00029 class HoughValidUpdate:public Algorithm {
00030   public:
00031         HoughValidUpdate(const std::string& name, ISvcLocator* pSvcLocator);
00032         StatusCode initialize();
00033         StatusCode execute();
00034         StatusCode finalize();
00035         StatusCode beginRun();  
00036         typedef std::map<int, int> M2;
00037         typedef std::map<int, M2> M1;
00038         struct Mytrack{
00039           double pt;
00040           int charge;
00041           double phi;
00042           double x_cir;
00043           double y_cir;
00044           double r;
00045           bool   use_in_tds;
00046           TrkRecoTrk* newTrack;
00047           vector<int> vec_hit_on_trk;
00048         };
00049   private:
00050         int GetMcInfo();
00051         int digiToHots(MdcDigiVec mdcDigiVec,TrkRecoTrk* newTrack,vector<bool> vec_truthHit,uint32_t getDigiFlag,vector<double> vec_flt_truth,map<int,double> hit_to_circle1,vector<MdcHit*>&);
00052         int digiToHots2(MdcDigiVec mdcDigiVec,TrkRecoTrk* newTrack,vector<bool> vec_truthHit,vector<double> vec_flt_truth,uint32_t getDigiFlag, vector<int> vec_slant,vector<double> vec_l_Calcu,vector<double> vec_l_axial,vector<double> vec_theta_ontrack,vector<int>& vec_hitbeforefit,map<int,double> hit_to_circle2,vector<MdcHit*>&,double );
00053         double CFtrans(double x,double y);
00054         int SlantId(int layer);
00055         int LeastSquare(int n,vector<double> n_x,vector<double> n_y, vector<int> n_slant,vector<int> n_layer,vector<bool> vec_truthHit,double &d0,double &phi0, double &omega,double& circleX, double& circleY,double& circleR);
00056         int Zposition(int n,vector<int> n_slant,double x_cirtemp,double y_cirtemp,double r_temp,vector<double> n_x_east,vector<double> n_x_west,vector<double> n_y_east,vector<double> n_y_west,vector<double> n_z_east,vector<double> n_z_west,vector<int> n_layer,vector<int> n_wire,vector<double> n_z,vector<double>& z_stereo_aver,vector<double>& l,vector<bool> vec_truthHit);
00057 
00058         void Linefit(int z_stereoNum,vector<double> z_stereo_aver,vector<double> l, double& tanl,double& z0);
00059         void Multi_array(int binX,int binY);
00060         //void FillCells(int n,int binX,int binY,vector<double> vec_u,vector<double> vec_v,vector<int> vec_layer,vector<int> vec_wire);
00061         void FillCells(TH2D *h1,int n,int binX,int binY,vector<double> vec_u,vector<double> vec_v,vector<int> vec_layer,vector<int> vec_wire,vector< vector <int> >& countij,vector< vector < vector<int> > >& vec_selectNum,vector< vector < vector<int> > >& vec_selectHit);
00062         void RhoTheta(int m_nHit,vector<double> vec_u,vector<double> vec_v,vector<double>& vec_rho,vector<double>& vec_theta,vector< vector<int> >& vec_hitNum, vector<int> vec_digitruth);
00063         void RhoThetaAxial(vector<int> vec_slant,int nHit,vector<double> vec_u,vector<double> vec_v,vector<double>& vec_rho,vector<double>& vec_theta,vector< vector<int> >& vec_hitNum,vector<int> vec_digitruth);
00064         void FillHist(TH2D *h1,vector<double> vec_u,vector<double> vec_v,int m_nHit,vector< vector < vector<int> > > &vec_selectNum);
00065         void FillRhoTheta(TH2D *h1 ,vector<double> vec_theta,vector<double> vec_rho);
00066         int zPosition(MdcHit& h, double t0, double x_cirtemp,double y_cirtemp, double r_temp,int digiId,double& delta_z,double& delta_l,double& l_Calcu_Left,double& l_Calcu_Right,double& z_Calcu_Left,double& z_Calcu_Right,double& z_Calcu,double& l_Calcu,int& i_q); 
00067         void AmbigChoose(vector< vector< vector<double> > > point,int n_use,vector<int>& ambigList,double& tanl,double& z0);
00068         void Combine(TH2D *h1,int widthX,int widthY,vector< vector < vector<int> > > vec_selectNum,M1 &hit_combine,M2 &peak_combine_num,int &ntrack,vector<int> peakList1[]);
00069         void Combine_two_cell(TH2D *h1,int xPeakCell,int yPeakCell,int xAround,int yaround,vector< vector < vector<int> > > vec_selectNum,int m,M1 &hit_combine,M2 &peak_combine_num);
00070         int LeastLine(int ,double x[] ,double y[] ,double& ,double& ,double&);
00072 
00073         int    m_drawTuple;
00074         int    m_useMcInfo;
00075         int    m_par_use;
00076         int    m_method;
00077         int    m_debug;
00078         int    m_data;
00079         int    m_binx;
00080         int    m_biny;
00081         int    m_peakCellNumX;
00082         int    m_peakCellNumY;
00083         int    m_ndev1;
00084         int    m_ndev2;
00085         double m_fpro;
00086         double m_hit_pro;
00087         std::string        m_pdtFile;
00088         bool               m_pickHits;
00089         double             m_fltcut;
00090         double             m_nHitcut_low;
00091         double             m_nHitcut_high;
00092         int                m_eventcut;
00093         double             m_rhocut;
00094         int                        m_setpeak_fit;
00095         int                        m_mcpar;
00096         int                    m_fillTruth;
00097 
00098         //        vector<int> peakList1[3];
00099         double          m_bunchT0;
00100         int t_eventNum;
00101         int t_runNum;
00102         double m_maxrho;
00103         //double m_minrho;
00104         int binX;
00105         int binY;
00106 
00107         double d0_mc;
00108         double phi0_mc;
00109         double omega_mc;
00110         double dz_mc;
00111         double tanl_mc;
00112         int track_fit;
00113 
00114         uint32_t            m_getDigiFlag;
00115         int                 m_maxMdcDigi;
00116         bool                m_keepBadTdc;
00117         bool                m_dropHot;
00118         bool                m_keepUnmatch;
00119         int                 m_minMdcDigi;
00120         int                 m_q;
00121         double              m_dropTrkDrCut;
00122         double              m_dropTrkDzCut;
00123         double              m_dropTrkPtCut;
00124         double              m_dropTrkChi2Cut;
00125 
00126         std::string m_configFile;
00127         const MdcDetector*      m_gm;
00128         HepPDT::ParticleDataTable* m_particleTable;
00129         TrkContextEv*   m_context;
00130         BField*         m_bfield;
00131         const MdcCalibFunSvc* m_mdcCalibFunSvc; 
00132 
00133         RawDataProviderSvc* m_rawDataProviderSvc;  
00134         MdcGeomSvc*  m_mdcGeomSvc;
00135         MdcPrintSvc*  m_mdcPrintSvc;
00136         int                     t_eventNo;
00137         IMagneticFieldSvc*      m_pIMF;
00138         int m_pid;
00139         int nfailure;
00140         bool m_combineTracking;
00141         std::vector<float> m_helixHitsSigma;
00142         double m_qualityFactor;
00143         bool m_removeBadTrack;
00144         int m_dropTrkNhitCut;
00145         double m_dropTrkChi2NdfCut;
00146 
00147 
00148 
00149         NTuple::Tuple*         ntuplehit;
00150         NTuple::Item<int>      m_eventNum;
00151         NTuple::Item<int>      m_eventTime;
00152         NTuple::Item<int>      m_runNum;
00153         NTuple::Item<int>      m_nHit_Mc;
00154         NTuple::Item<int>      m_nHitAxial_Mc;
00155         NTuple::Array<int>     m_layer_Mc;
00156         NTuple::Array<int>     m_cell_Mc;
00157 
00158 
00159         NTuple::Item<int> m_nTrkMC;
00160         NTuple::Array<double> m_pidTruth;
00161         NTuple::Array<double> m_costaTruth;                                
00162         NTuple::Array<double> m_ptTruth;                                   
00163         NTuple::Array<double> m_pzTruth;                                   
00164         NTuple::Array<double> m_pTruth;                                    
00165         NTuple::Array<double> m_qTruth;    
00166         NTuple::Array<double> m_drTruth;                                   
00167         NTuple::Array<double> m_phi0Truth;                                 
00168         NTuple::Array<double> m_omegaTruth;                                 
00169         NTuple::Array<double> m_dzTruth;                                   
00170         NTuple::Array<double> m_tanl_mc;    
00171 
00172         NTuple::Item<int>      m_nHit;
00173         NTuple::Item<int>      m_nHitDigi;
00174         NTuple::Item<int>      m_nHitAxial;
00175         NTuple::Item<int>      m_nHitStereo;
00176         NTuple::Array<int>     m_layer;
00177         NTuple::Array<int>     m_cell;
00178         NTuple::Array<double>  m_x_east;
00179         NTuple::Array<double>  m_y_east;
00180         NTuple::Array<double>  m_x_west;
00181         NTuple::Array<double>  m_y_west;
00182         NTuple::Array<double>  m_z_east;
00183         NTuple::Array<double>  m_z_west;
00184         NTuple::Array<double>  m_x;
00185         NTuple::Array<double>  m_y;
00186         NTuple::Array<double>  m_z;
00187         NTuple::Array<double>  m_u;
00188         NTuple::Array<double>  m_v;
00189         NTuple::Array<double>  m_p;
00190         NTuple::Array<int>     m_slant;
00191         NTuple::Item<int>      m_layer_max;
00192         NTuple::Array<int>     m_layerNhit;
00193         NTuple::Array<double>  m_ltruth;    
00194         NTuple::Array<double>  m_ztruth;    
00195         NTuple::Array<double>  m_postruth;    
00196         NTuple::Array<int>     m_digi_truth;    
00197         NTuple::Item<int>      m_e_delta;
00198 
00199         NTuple::Item<int>      m_nCross;
00200         NTuple::Array<double>  m_rho;
00201         NTuple::Array<double>  m_theta;
00202         NTuple::Item<int>      m_xybinNum;    
00203         NTuple::Array<int>     m_xybin;    
00204         NTuple::Item<double>   m_xsigma;
00205         NTuple::Item<double>   m_ysigma;
00206         //      NTuple::Item<int>     m_stereohit;
00207         //      NTuple::Item<int>     m_failure;
00208         //NTuple::Item<int>     m_3d_nFitFailure;
00209         //NTuple::Item<int>     m_maxCount;
00210 
00211         NTuple::Item<int>     m_npeak_1;
00212         NTuple::Item<int>     m_npeak_2;
00213         NTuple::Item<int>     m_trackFailure;
00214         NTuple::Item<int>     m_npeak_after_tracking;
00215         NTuple::Array<int>     m_nHitSelect;
00216         NTuple::Array<int>     m_nHitAxialSelect;
00217         NTuple::Array<int>     m_nHitStereoSelect;
00218         NTuple::Array<int>     m_axiallose;
00219         NTuple::Array<int>     m_stereolose;
00220 
00221         NTuple::Item<int>     m_trackNum_Mc;
00222         NTuple::Item<int>     m_trackNum;
00223         NTuple::Item<int>     m_trackNum_fit;
00224         NTuple::Item<int>     m_trackNum_tds;
00225         NTuple::Array<double>     m_x_circle;
00226         NTuple::Array<double>     m_y_circle;
00227         NTuple::Array<double>     m_r;
00228         NTuple::Array<double>     m_chis_pt;
00229         NTuple::Array<double>     m_d0;
00230         NTuple::Array<double>     m_phi0;
00231         NTuple::Array<double>     m_omega;
00232         NTuple::Array<double>     m_z0;
00233         NTuple::Array<double>     m_tanl;
00234         NTuple::Array<double>     m_pt;
00235         NTuple::Array<double>     m_pt2;
00236         NTuple::Array<double>     m_pz;
00237         NTuple::Array<double>     m_pxyz;
00238 
00239         NTuple::Array<int>     m_nFitFailure;
00240         NTuple::Array<int>     m_2d_nFit;
00241         NTuple::Array<int>     m_2dFit;
00242         NTuple::Array<int>     m_3d_nFit;
00243         NTuple::Array<int>     m_3dFit;
00244         NTuple::Array<double>     m_pt2_rec_final;
00245         NTuple::Array<double>     m_p_rec_final;
00246         NTuple::Array<double>     m_d0_final;
00247         NTuple::Array<double>     m_phi0_final;
00248         NTuple::Array<double>     m_omega_final;
00249         NTuple::Array<double>     m_z0_final;
00250         NTuple::Array<double>     m_tanl_final;
00251         NTuple::Array<double>     m_chis_3d_final;
00252         NTuple::Array<int>        m_Q;
00253 
00254         NTuple::Array<double>     m_pt2_rec_tds;
00255         NTuple::Array<double>     m_p_rec_tds;
00256         NTuple::Array<double>     m_d0_tds;
00257         NTuple::Array<double>     m_phi0_tds;
00258         NTuple::Array<double>     m_omega_tds;
00259         NTuple::Array<double>     m_z0_tds;
00260         NTuple::Array<double>     m_tanl_tds;
00261         NTuple::Array<double>     m_chis_3d_tds;
00262         NTuple::Array<int>        m_Q_tds;
00263 
00264 
00265         double m_truthPos[43][288][3];
00266 
00267         NTuple::Array<double> m_dist_to_circle;    
00268         //        NTuple::Item<int> m_3dFitFailure;    
00269 
00270         NTuple::Item<int>  m_nHitStereo_use;    
00271         NTuple::Array<double> m_lCalcuLeft;    
00272         NTuple::Array<double> m_lCalcuRight;    
00273         NTuple::Array<double> m_zCalcuLeft;    
00274         NTuple::Array<double> m_zCalcuRight;    
00275         NTuple::Array<double> m_zCalcu;    
00276         NTuple::Array<double> m_lCalcu;    
00277         NTuple::Array<double> m_delta_z;    
00278         NTuple::Array<double> m_delta_l;    
00279         NTuple::Array<int> m_amb;    
00280         NTuple::Item<int> m_ambig_no_match;    
00281         NTuple::Item<double> m_tanl_Cal;    
00282         NTuple::Item<double> m_z0_Cal;    
00283         NTuple::Item<double> m_ambig_no_match_propotion;    
00284 
00285         NTuple::Item<int> m_nhitdis0;    
00286         NTuple::Item<int> m_nhitdis1;    
00287         NTuple::Item<int> m_nhitdis2;    
00288         NTuple::Array<double> m_hit_dis0;    
00289         NTuple::Array<double> m_hit_dis1;    
00290         NTuple::Array<double> m_hit_dis2;    
00291         NTuple::Array<double> m_hit_dis1_3d;    
00292         NTuple::Array<double> m_hit_dis2_3d;    
00293 
00294         //        NTuple::Item<int> m_xbin;    
00295         //        NTuple::Item<int> m_ybin;    
00296         //        NTuple::Array<int> m_xbinsum;    
00297         //        NTuple::Array<int> m_ybinsum;    
00298         //        NTuple::Array<int> m_xsum;    
00299         //        NTuple::Array<int> m_ysum;    
00300         //        NTuple::Item<int> m_nTrack;
00301         NTuple::Item<bool> m_decay;
00302         NTuple::Item<int> m_outputTrk;
00303         NTuple::Array<int> m_hitOnTrk;
00304 
00305         NTuple::Item<int> m_track_use_intrk1;
00306         NTuple::Item<int> m_noise_intrk1;
00307         //TH2D *h1;
00308         //TH2D *h2;
00309         //TH2D *h3;
00310 };
00311 bool compare(const HoughValidUpdate::Mytrack& a,const HoughValidUpdate::Mytrack& b);
00312 #endif

Generated on Tue Nov 29 23:13:28 2016 for BOSS_7.0.2 by  doxygen 1.4.7