/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/TrkReco/TrkReco-00-08-59-patch4-slc6tag/TrkReco/TCurlFinder.h

Go to the documentation of this file.
00001 #ifndef TCURLFINDER_FLAG_
00002 #define TCURLFINDER_FLAG_
00003 
00004 #ifdef TRKRECO_DEBUG_DETAIL
00005 #ifndef TRKRECO_DEBUG
00006 #define TRKRECO_DEBUG
00007 #endif
00008 #endif
00009 #define HEP_SHORT_NAMES
00010 #include "CLHEP/Matrix/DiagMatrix.h"
00011 
00012 #include "TrkReco/TFinderBase.h"
00013 #include "TrkReco/TBuilderCurl.h"
00014 #include "TrkReco/TMSelector.h"
00015 #include "TrkReco/TCurlFinderParameters.h"
00016 
00017 using CLHEP::HepDiagMatrix;
00018 
00019 class TMDCWire;
00020 class TMLink;
00021 class TTrack;
00022 class TMDCWireHit;
00023 class TCircle;
00024 class TSegmentCurl;
00025 
00026 class TCurlFinder : public TFinderBase {
00027 
00028 public:
00029   TCurlFinder(void);
00030   ~TCurlFinder(void);
00031   std::string name(void) const;
00032   std::string version(void) const;
00033 
00034   TCurlFinder(const unsigned min_segment,
00035               const unsigned min_salvage,
00036               const double bad_distance_for_salvage,
00037               const double good_distance_for_salvage,
00038               const unsigned min_sequence,
00039               const unsigned min_fullwire,
00040               const double range_for_axial_search,
00041               const double range_for_stereo_search,
00042               const unsigned superlayer_for_stereo_search,
00043               const double range_for_axial_last2d_search,
00044               const double range_for_stereo_last2d_search,
00045               const double trace2d_distance,
00046               const double trace2d_first_distance,
00047               const double trace3d_distance,
00048               const unsigned determine_one_track,
00049               const double selector_max_impact,
00050               const double selector_max_sigma,
00051               const double selector_strange_pz,
00052               const double selector_replace_dz,
00053               const unsigned stereo_2dfind,
00054               const unsigned merge_exe,
00055               const double merge_ratio,
00056               const double merge_z_diff,
00057               const double mask_distance,
00058               const double ratio_used_wire,
00059               const double range_for_stereo1,
00060               const double range_for_stereo2,
00061               const double range_for_stereo3,
00062               const double range_for_stereo4,
00063               const double range_for_stereo5,
00064               const double range_for_stereo6,
00065               const double z_cut,
00066               const double z_diff_for_last_attend,
00067               const unsigned svd_reconstruction,
00068               const double min_svd_electrons,
00069               const unsigned on_correction,
00070               const unsigned output_2dtracks,
00071               const unsigned curl_version,
00072                   //jialk
00073               const  double minimum_seedLength,
00074               const  double minimum_2DTrackLength,
00075                   const  double minimum_3DTrackLength,
00076               const  double minimum_closeHitsLength,
00077               const  double MIN_RADIUS_OF_STRANGE_TRACK,
00078           const  double ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK);
00079                                                           
00080 
00082   int doit(const AList<TMDCWireHit> & axialHits,
00083            const AList<TMDCWireHit> & stereoHits,
00084            AList<TTrack> & tracks,
00085            AList<TTrack> & tracks2D);
00086 
00088   void clear(void);
00089 
00090 private:
00091   IMagneticFieldSvc* m_pmgnIMF;
00093   double   distance(const double, const double) const;
00094   unsigned offset(const unsigned) const;
00095   unsigned layerId(const double &) const;
00096   unsigned maxLocalLayerId(const unsigned) const;
00097   int      nextSuperAxialLayerId(const unsigned, const int) const;
00098   int      nextSuperStereoLayerId(const unsigned, const int) const;
00099   void makeList(AList<TMLink>&, const AList<TSegmentCurl>&, const AList<TMLink>&);
00100   void makeList(AList<TMLink>&, const AList<TMLink>&, const AList<TMLink>&);
00101   unsigned nAxialHits(const double&) const;
00102 
00104   void makeWireHitsListsSegments(const AList<TMDCWireHit>&, const AList<TMDCWireHit>&);
00105   
00107   int checkSortSegments(void);
00108   
00110   void makeCurlTracks(AList<TTrack> &tracks,
00111                       AList<TTrack> &tracks2D);
00112 
00114   void linkNeighboringWires(AList<TMLink>*, const unsigned);
00115   void setNeighboringWires(TMLink*, const TMLink*);
00116   void createSuperLayer(void);
00117   void createSegments(AList<TMLink>&);
00118   void searchSegment(TMLink*, AList<TMLink>&, AList<TMLink>&, TSegmentCurl*);
00119   TMLink * findLink(const TMLink*, const AList<TMLink>&);
00120 
00122   void checkExceptionalSegmentsType01(void);
00123   void checkExceptionalSegmentsType02(void);
00124   void checkExceptionalSegmentsType03(void);
00125 
00128   TTrack * make3DTrack(const TCircle*);
00129   TTrack * make3DTrack(const TCircle*, AList<TSegmentCurl>&);
00130   void findCloseHits(AList<TMLink>&, TTrack&, AList<TMLink>&);
00131   void salvage3DTrack(TTrack*, bool = true);
00132   TTrack* merge3DTrack(TTrack*, AList<TTrack>&);
00133   bool check3DTrack(TTrack*);
00134   int  trace3DTrack(TTrack*);
00135   void mask3DTrack(TTrack*, AList<TMLink>&);
00136   void assignTracks(void);
00137   void checkRelation(AList<TTrack>&);
00138   void check2DTracks(void);
00139 
00141   TCircle * make2DTrack(const AList<TMLink>&, const AList<TSegmentCurl>&, const unsigned);
00142   void searchAxialCand(AList<TMLink>&, const AList<TMLink>&, const TCircle*, 
00143                        const int, const unsigned, const double);
00144   void searchStereoCand(AList<TMLink>&, const AList<TMLink>&, const TCircle*, 
00145                         const int, const unsigned, const double);
00146   unsigned searchHits(const TMLink*, const TCircle*, const double) const;
00147   unsigned searchHits(AList<TMLink>&, const AList<TMLink>&, const TCircle*, const double) const;
00148   unsigned checkAppendHits(const AList<TMLink>&, AList<TMLink>&) const;
00149   double distance(const TTrack&, const TMLink&) const;
00150   int  trace2DTrack(TCircle*);
00151   bool check2DCircle(TCircle*);
00152   TCircle * dividing2DTrack(TCircle*);
00153   bool fitWDD(TCircle&,double&,int&) const;
00154   void removeStereo(TCircle&) const;
00155 
00157   int makeWithMC(const AList<TMDCWireHit>&, const AList<TMDCWireHit>&,AList<TTrack>&);
00158 
00160   void makeCdcFrame(void);
00161   void plotSegment(const AList<TMLink>&, const int flag = 1);
00162   void plotCircle(const TCircle&, const int flag = 1);
00163   void plotTrack(const TTrack&, const int flag = 1);
00164   void writeSegment(const AList<TMLink>&, const int type = 0);
00165 
00167   void dumpType1(TTrack*);
00168   void dumpType2(TTrack*);
00169 
00170   AList<TMLink>   m_unusedAxialHitsOriginal;
00171   AList<TMLink>   m_unusedAxialHits;
00172   AList<TMLink>   m_allAxialHitsOriginal;
00173 
00174   AList<TMLink>   m_unusedStereoHitsOriginal;
00175   AList<TMLink>   m_unusedStereoHits;
00176   AList<TMLink>   m_allStereoHitsOriginal;
00177 
00178   AList<TMLink>   m_removedHits;
00179 
00180   AList<TCircle> m_circles;
00181   AList<TCircle> m_allCircles;
00182   AList<TTrack>  m_tracks;
00183   AList<TTrack>  m_allTracks;
00184   AList<TTrack>  m_svdTracks;
00185   AList<TTrack>  m_2dTracks;
00186 
00187   AList<TMDCWireHit>   m_hitsOnInnerSuperLayer;
00188 
00189 //Liuqg
00190   AList<TMLink> m_unusedAxialHitsOnEachLayer[19];  //origin is 32
00191   AList<TMLink> m_unusedStereoHitsOnEachLayer[24];  //origin is 18
00192   AList<TMLink> m_unusedAxialHitsOnEachSuperLayer[5];  //origin is 6
00193   AList<TMLink> m_unusedStereoHitsOnEachSuperLayer[6];  //origin is 5
00194   AList<TSegmentCurl> m_segmentList;
00195 
00196   TCurlFinderParameter m_param;
00197 
00198   TBuilderCurl m_builder;
00199   TMSelector m_trackSelector;
00200 
00201   THelixFitter m_fitter;
00202 
00203   //for debug
00204   void debugCheckSegments0(void);
00205   void debugCheckSegments1(void);
00206   void debugCheckSegments2(void);
00207   void debugCheckSegments(const double localId, const double layerId,
00208                           const double localId2,const double layerId2);
00209 
00210   bool m_debugCdcFrame;
00211   int  m_debugPlotFlag;
00212   int  m_debugFileNumber;
00213 };
00214 
00215 #endif /* TCURLFINDER_FLAG_ */

Generated on Tue Nov 29 23:14:17 2016 for BOSS_7.0.2 by  doxygen 1.4.7