BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Hough.h
Go to the documentation of this file.
1#ifndef HOUGHSPACE_H
2#define HOUGHSPACE_H
3
4#include "BesTimerSvc/BesTimer.h"
5#include "BesTimerSvc/IBesTimerSvc.h"
6#include "CLHEP/Alist/AList.h"
7#include "GaudiKernel/Algorithm.h"
8#include "GaudiKernel/INTupleSvc.h"
9#include "GaudiKernel/NTuple.h"
10#include "HepPDT/ParticleDataTable.hh"
11#include "HoughGlobal.h"
12#include "HoughHit.h"
13#include "HoughHitList.h"
14#include "HoughMap.h"
15#include "MagneticFieldSvc/IBesMagFieldSvc.h"
16#include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
17#include "MdcGeom/MdcDetector.h"
18#include "MdcGeomSvc/IMdcGeomSvc.h"
19#include "MdcGeomSvc/MdcGeoLayer.h"
20#include "MdcGeomSvc/MdcGeoWire.h"
21#include "MdcPrintSvc/IMdcPrintSvc.h"
22#include "MdcRecEvent/RecMdcHit.h"
23#include "MdcRecEvent/RecMdcTrack.h"
24#include "MdcTrkRecon/MdcTrack.h"
25#include "MdcTrkRecon/MdcTrackList.h"
26#include "MdcTrkRecon/MdcTrackParams.h"
27#include "MdcUtilitySvc/IMdcUtilitySvc.h"
28#include "PatBField/BField.h"
29#include "RawDataProviderSvc/IRawDataProviderSvc.h"
30#include "TF1.h"
31#include "TGraph.h"
32#include "TH2D.h"
33#include "TrkBase/TrkRecoTrk.h"
34#include "TrkFitter/TrkContextEv.h"
35#include <fstream>
36#include <map>
37#include <string>
38#include <vector>
39
40class MdcHoughFinder : public Algorithm {
41public:
42 MdcHoughFinder( const std::string& name, ISvcLocator* pSvcLocator );
43 StatusCode initialize();
44 StatusCode execute();
45 StatusCode finalize();
46 StatusCode beginRun();
47 StatusCode bookTuple();
48
49private:
50 int GetMcInfo();
51 MdcDigiVec prepareDigi();
52 void dumpHoughHitList( const HoughHitList& );
53 void dumpHoughMap( const HoughMap& );
54 void diffMap( const HoughMap&, const HoughMap& );
55 void Leastfit( vector<double>, vector<double>, double&, double& );
56 int storeTracks( RecMdcTrackCol*& a, RecMdcHitCol*& b,
57 vector<RecMdcTrack*>& vec_trackPatTds );
58 void clearMem( MdcTrackList& list1, MdcTrackList& list2 );
59 void compareHough( MdcTrackList& mdcTrackList );
60 int comparePatTsf( MdcTrackList& tracklist, RecMdcTrackCol* trackList_tds );
61 int arbitrateHits( vector<MdcTrack*>&, MdcTrackParams );
62 // int judgeHit(MdcTrackList& list ,const vector<HoughTrack>& tracklist);
63 int judgeHit( MdcTrackList& list, vector<MdcTrack*>& tracklist );
64 void judgeChargeTrack( MdcTrackList& list1, MdcTrackList& list2 );
65
66 bool m_beginRun{ false };
67
68 // declare property
69 std::string m_pdtFile;
70 HepPDT::ParticleDataTable* m_particleTable;
71 std::map<int, const HepVector> g_tkParTruth;
72 HepPoint3D g_firstHit;
73 double t_d0;
74 double t_z0;
75 double t_tanl;
76 double t_p;
77 double t_pt;
78 double t_cos;
79
80 int m_filter;
81 std::string m_evtFile;
82 int m_debug;
83 int m_debugMap;
84 int m_debug2D;
85 int m_debug3D;
86 int m_debugTrack;
87 int m_debugStereo;
88 int m_debugZs;
89 int m_debugArbHit;
90
91 bool m_hist;
92 bool m_keepBadTdc;
93 bool m_dropHot;
94 bool m_keepUnmatch;
95 bool m_combineTracking;
96 int m_removeBadTrack;
97 double m_dropTrkDrCut;
98 double m_dropTrkDzCut;
99 double m_dropTrkPtCut;
100 double m_dropTrkChi2Cut;
101
102 int m_inputType;
103 double m_mapCharge;
104 int m_useHalf;
105 int m_mapHit;
106 int m_nBinTheta;
107 int m_nBinRho;
108 double m_rhoRange;
109 int m_npart;
110 int m_n2;
111 double m_peakWidth;
112 double m_peakHigh;
113 double m_hitPro;
114
115 int m_recpos;
116 int m_recneg;
117 int m_combine;
118 double m_z0Cut_compareHough;
119
120 // data member
121 int t_eventNum;
122 int t_runNum;
123 MdcPatRec::BField* m_bfield;
124 double m_bunchT0;
125 TrkContextEv* m_context;
126 const IMdcCalibFunSvc* m_mdcCalibFunSvc;
127 IRawDataProviderSvc* m_rawDataProviderSvc;
128 IMdcGeomSvc* m_mdcGeomSvc;
129 IBesMagFieldSvc* m_pIMF;
130 const IMdcPrintSvc* m_mdcPrintSvc;
131 IBesTimerSvc* m_timersvc;
132 BesTimer* m_timer_all;
133
134 // Ntuple
135 NTuple::Tuple* ntuple_evt;
136 NTuple::Item<int> m_eventNum;
137 NTuple::Item<int> m_runNum;
138 NTuple::Item<int> m_nHit;
139 NTuple::Item<int> m_nSig_Axial;
140 NTuple::Array<int> m_layer;
141 NTuple::Array<int> m_cell;
142 NTuple::Array<double> m_x;
143 NTuple::Array<double> m_y;
144 NTuple::Array<double> m_z;
145 NTuple::Array<double> m_u;
146 NTuple::Array<double> m_v;
147 NTuple::Array<double> m_r;
148 NTuple::Array<double> m_uTruth;
149 NTuple::Array<double> m_vTruth;
150 NTuple::Array<double> m_rTruth;
151 NTuple::Array<double> m_xTruth;
152 NTuple::Array<double> m_yTruth;
153 NTuple::Array<double> m_type;
154
155 NTuple::Array<double> m_deltaD;
156 NTuple::Array<double> m_flt;
157 NTuple::Array<double> m_drift;
158 NTuple::Array<double> m_driftTruth;
159 NTuple::Array<int> m_slant;
160
161 NTuple::Item<int> m_xybinNum;
162 NTuple::Item<double> m_xybinMax;
163 NTuple::Array<double> m_xybinNL;
164 NTuple::Array<double> m_xybinRL;
165 NTuple::Array<double> m_xybinS;
166
167 NTuple::Item<double> m_theta_left;
168 NTuple::Item<double> m_theta_right;
169 NTuple::Item<double> m_rho_down;
170 NTuple::Item<double> m_rho_up;
171 NTuple::Item<double> m_rho;
172 NTuple::Item<double> m_theta;
173 NTuple::Item<double> m_rho_line;
174 NTuple::Item<double> m_theta_line;
175 NTuple::Item<double> m_height;
176 NTuple::Item<double> m_aver;
177 NTuple::Item<double> m_sigma;
178
179 NTuple::Item<int> m_exit_multiturn;
180
181 NTuple::Item<int> m_nMap1Pk;
182 NTuple::Item<int> m_nMap1Tk;
183 NTuple::Item<int> m_nMap2Pk;
184 NTuple::Item<int> m_nMap2Tk;
185 NTuple::Array<double> m_PkRho1;
186 NTuple::Array<double> m_PkRho2;
187 NTuple::Array<double> m_PkTheta1;
188 NTuple::Array<double> m_PkTheta2;
189 NTuple::Array<double> m_TkRho1;
190 NTuple::Array<double> m_TkRho2;
191 NTuple::Array<double> m_TkTheta1;
192 NTuple::Array<double> m_TkTheta2;
193
194 NTuple::Item<int> m_nMaxLayerSlant;
195 NTuple::Array<double> m_MaxLayerSlant;
196 NTuple::Array<double> m_MaxLayer;
197 NTuple::Item<int> m_nNoMaxLayerSlant;
198 NTuple::Array<double> m_NoMaxLayerSlant;
199 NTuple::Array<int> m_NoMaxLayerid;
200
201 NTuple::Item<int> m_MapMax;
202 NTuple::Item<int> m_nMapPk;
203 NTuple::Array<int> m_PeakOrder;
204 NTuple::Array<double> m_PeakRho;
205 NTuple::Array<double> m_PeakTheta;
206 NTuple::Array<double> m_PeakHeight;
207 NTuple::Array<double> m_PeakHit;
208 NTuple::Array<double> m_PeakHitA;
209 NTuple::Item<int> m_nMapTrk;
210 NTuple::Array<double> m_TrackRho;
211 NTuple::Array<double> m_TrackTheta;
212 NTuple::Array<double> m_TrackHitA;
213 // rec - charge
214 // global 2D
215 NTuple::Item<int> m_nTrk2D_neg;
216 NTuple::Array<double> m_pt2D_neg;
217 NTuple::Array<double> m_nHit2D_neg;
218 NTuple::Array<double> m_chi2_2D_neg;
219 // global 3D
220 NTuple::Item<int> m_nTrk3D_neg;
221 NTuple::Array<double> m_tanl_neg;
222 NTuple::Array<double> m_tanl3D_neg;
223 NTuple::Array<double> m_z0_neg;
224 NTuple::Array<double> m_z0_3D_neg;
225 NTuple::Array<double> m_pro_neg;
226 NTuple::Array<double> m_pt3D_neg;
227 NTuple::Array<double> m_nHit3D_neg;
228 NTuple::Array<double> m_chi2_3D_neg;
229
230 // mc
231 // NTuple::Item<int> m_nTrkMC;
232 NTuple::Item<double> m_pidTruth;
233 NTuple::Item<double> m_costaTruth;
234 NTuple::Item<double> m_ptTruth;
235 NTuple::Item<double> m_pzTruth;
236 NTuple::Item<double> m_pTruth;
237 NTuple::Item<double> m_qTruth;
238 NTuple::Item<double> m_drTruth;
239 NTuple::Item<double> m_phi0Truth;
240 NTuple::Item<double> m_omegaTruth;
241 NTuple::Item<double> m_dzTruth;
242 NTuple::Item<double> m_tanl_mc;
243 NTuple::Item<double> m_rho_mc;
244 NTuple::Item<double> m_theta_mc;
245
246 NTuple::Item<double> m_time;
247
248 NTuple::Tuple* ntuplehit;
249 NTuple::Item<int> m_evt_stereo;
250 NTuple::Item<int> m_run_stereo;
251 NTuple::Item<double> m_cos_stereo;
252 NTuple::Item<double> m_tanlTruth_stereo;
253 NTuple::Item<double> m_ncir_stereo;
254 NTuple::Item<double> m_npair_stereo;
255 NTuple::Item<double> m_tanl_stereo;
256 NTuple::Item<double> m_tanl3D_stereo;
257 NTuple::Item<double> m_z0_stereo;
258 NTuple::Item<double> m_z03D_stereo;
259 NTuple::Item<int> m_nHit_axial;
260 NTuple::Array<int> m_axial_layer;
261 NTuple::Array<int> m_axial_wire;
262 NTuple::Array<double> m_axial_deltaD;
263 NTuple::Array<double> m_axial_flt;
264 NTuple::Item<int> m_nHit_stereo;
265 NTuple::Array<int> m_stereo_layer;
266 NTuple::Array<int> m_stereo_wire;
267 NTuple::Array<int> m_stereo_style;
268 NTuple::Array<double> m_stereo_z0;
269 NTuple::Array<double> m_stereo_z1;
270 NTuple::Array<double> m_stereo_s0;
271 NTuple::Array<double> m_stereo_s1;
272 NTuple::Array<double> m_stereo_z;
273 NTuple::Array<double> m_stereo_s;
274 NTuple::Array<double> m_stereo_sTruth;
275 NTuple::Array<double> m_stereo_zTruth;
276 NTuple::Array<double> m_stereo_deltaZ;
277 NTuple::Array<int> m_stereo_nsol;
278 NTuple::Array<double> m_stereo_disToCir;
279 NTuple::Array<int> m_stereo_cirlist;
280 NTuple::Array<int> m_stereo_ambig;
281 NTuple::Array<int> m_stereo_ambig_truth;
282};
283bool more_pt( const HoughTrack* tracka, const HoughTrack* trackb );
284#endif
bool more_pt(const HoughTrack *tracka, const HoughTrack *trackb)
Definition Hough.cxx:1018
StatusCode execute()
Definition Hough.cxx:219
StatusCode initialize()
Definition Hough.cxx:108
StatusCode beginRun()
Definition Hough.cxx:99
MdcHoughFinder(const std::string &name, ISvcLocator *pSvcLocator)
Definition Hough.cxx:49
StatusCode finalize()
Definition Hough.cxx:643
StatusCode bookTuple()
Definition Hough.cxx:1486