1 #ifndef DDCellsAutomatonMV_h
2 #define DDCellsAutomatonMV_h 1
5 #include "Math/ProbFunc.h"
7 #include <marlin/Processor.h>
8 #include <marlin/Global.h>
9 #include "marlin/VerbosityLevels.h"
11 #include <EVENT/LCCollection.h>
12 #include <EVENT/TrackerHit.h>
13 #include <EVENT/TrackerHitPlane.h>
14 #include <EVENT/TrackerHitZCylinder.h>
15 #include <IMPL/LCCollectionVec.h>
16 #include <IMPL/TrackImpl.h>
17 #include <IMPL/TrackerHitPlaneImpl.h>
18 #include <UTIL/BitField64.h>
22 #include "KiTrack/SubsetHopfieldNN.h"
23 #include "KiTrack/SubsetSimple.h"
24 #include "KiTrack/SegmentBuilder.h"
25 #include "KiTrack/Automaton.h"
26 #include "KiTrack/Segment.h"
29 #include "ILDImpl/VXDTrack.h"
30 #include "ILDImpl/VXDHit01.h"
31 #include "ILDImpl/VXDSectorConnector.h"
32 #include "Tools/KiTrackMarlinTools.h"
33 #include "Tools/KiTrackMarlinCEDTools.h"
34 #include "KiTrack/ITrack.h"
35 #include "Criteria/Criteria.h"
36 #include "ILDImpl/SectorSystemVXD.h"
37 #include "Tools/VXDHelixFitter.h"
38 #include "ILDImpl/MiniVectorHit01.h"
45 #include "MarlinTrk/IMarlinTrkSystem.h"
46 #include "MarlinTrk/IMarlinTrack.h"
48 #include "MarlinTrk/MarlinTrkUtils.h"
61 #include "EVENT/Track.h"
62 #include "EVENT/TrackerHit.h"
69 using namespace lcio ;
70 using namespace marlin ;
72 using namespace KiTrack;
73 using namespace KiTrackMarlin;
75 class IMarlinTrkSystem ;
80 typedef std::vector< IHit* > RawTrack;
98 virtual void processRunHeader( LCRunHeader* run ) ;
102 virtual void processEvent( LCEvent * evt ) ;
105 virtual void check( LCEvent * evt ) ;
119 int _nDivisionsInPhi;
120 int _nDivisionsInTheta;
121 int _nDivisionsInPhiMV;
122 int _nDivisionsInThetaMV;
128 static const double TWOPI;
132 UTIL::BitField64* _encoder;
133 int getDetectorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::subdet]; }
134 int getSideID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::side]; };
135 int getLayerID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::layer]; };
136 int getModuleID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::module]; };
137 int getSensorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::sensor]; };
140 void InitialiseVTX(LCEvent * evt, EVENT::TrackerHitVec HitsTemp);
142 bool setCriteria(
unsigned round );
143 void RawTrackFit( std::vector < MarlinTrk::IMarlinTrack* > candMarlinTracks, std::vector< IMPL::TrackImpl* > &finalTracks ) ;
144 void FitFunc2( std::vector < RawTrack > rawTracks, std::vector < MarlinTrk::IMarlinTrack* > &candMarlinTracks ) ;
145 void finaliseTrack( TrackImpl* trackImpl ) ;
146 void CreateMiniVectors(
int sector ) ;
147 bool thetaAgreement( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit ) ;
148 bool thetaAgreementImproved( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit,
int layer ) ;
149 double Dist( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit ) ;
151 unsigned int _nLayersVTX;
152 unsigned int _nLayersSIT;
156 std::map< int , std::vector< IHit* > > _map_sector_hits;
179 std::vector< IHit* > MiniVectorsTemp;
180 std::vector< IHit* > TestMiniVectorsTemp;
185 double _helixFitMax ;
187 double _chi2OverNdfCut ;
189 const SectorSystemVXD * _sectorSystemVXD;
195 MarlinTrk::IMarlinTrkSystem* _trkSystem;
197 bool _MSOn, _ElossOn, _SmoothOn, _middleLayer ;
207 int MiniVectors_sectors ;
208 int MiniVectors_CutSelection ;
213 double _hitPairThDiff ;
214 double _hitPairThDiffInner ;
221 float _initialTrackError_d0;
222 float _initialTrackError_phi0;
223 float _initialTrackError_omega;
224 float _initialTrackError_z0;
225 float _initialTrackError_tanL;
226 float _maxChi2PerHit;
228 int _maxHitsPerSector ;
233 std::string _SITHitCollection;
234 std::string _CATrackCollection;
236 std::string _detElVXDName;
237 std::string _detElITName;
238 std::string _detElOTName;
241 std::map< LCCollection*, std::string > _colNamesTrackerHits;
243 std::string _bestSubsetFinder;
248 static const int _output_track_col_quality_GOOD;
249 static const int _output_track_col_quality_FAIR;
250 static const int _output_track_col_quality_POOR;
266 inline bool operator()( ITrack* trackA, ITrack* trackB ){
269 std::vector< IHit* > hitsA = trackA->getHits();
270 std::vector< IHit* > hitsB = trackB->getHits();
272 for(
unsigned i=0; i < hitsA.size(); i++){
274 for(
unsigned j=0; j < hitsB.size(); j++){
276 if ( hitsA[i] == hitsB[j] )
return false;
294 inline double operator()( ITrack* track ){
return track->getChi2Prob(); }
306 inline double operator()( ITrack* track ){
308 float NoOfHits = 4.0*( track->getHits().size());
310 return (1.0*NoOfHits)/(track->getChi2()/track->getNdf()); }
326 inline double operator()( ITrack* track ){
328 return track->getHits().size();
341 inline double operator()( ITrack* track ){
345 if( track->getHits().size() > 2 ){
349 return track->getChi2Prob()/2. +0.5;
356 return 1/( log( 7.3890561 + track->getChi2() ) );
377 inline double operator()( ITrack* track ){
379 if( track->getHits().size() > 3 ){
381 return track->getChi2Prob()/2. +0.5;
386 return 1/( log( 7.3890561 + track->getChi2() ) );
int _maxConnectionsAutomaton
the maximum number of connections that are allowed in the automaton, if this value is surpassed...
Definition: DDCellsAutomatonMV.h:193
std::map< int, EVENT::TrackerHitVec > _map_sector_spacepoints
A map to store the hits according to their sectors.
Definition: DDCellsAutomatonMV.h:155
std::map< std::string, std::vector< float > > _critMinima
Map containing the name of a criterion and a vector of the minimum cut offs for it.
Definition: DDCellsAutomatonMV.h:162
A functor to return the ....
Definition: DDCellsAutomatonMV.h:337
A functor to return the quality of a track, which is the number of associated hits.
Definition: CellsAutomatonMV.h:351
std::vector< ICriterion * > _crit3Vec
A vector of criteria for 3 hits (2 2-hit segments)
Definition: DDCellsAutomatonMV.h:174
std::map< std::string, std::vector< float > > _critMaxima
Map containing the name of a criterion and a vector of the maximum cut offs for it.
Definition: DDCellsAutomatonMV.h:165
double _chi2ProbCut
Cut for the Kalman Fit (the chi squared probability)
Definition: DDCellsAutomatonMV.h:183
std::string _VTXHitCollection
Input collection name.
Definition: DDCellsAutomatonMV.h:232
A functor to return the quality of a track, which is the ratio chi2 over degrees of freedom...
Definition: CellsAutomatonMV.h:335
A functor to return the quality of a track.
Definition: CellsAutomatonMV.h:370
std::vector< ICriterion * > _crit2Vec
A vector of criteria for 2 hits (2 1-hit segments)
Definition: DDCellsAutomatonMV.h:171
Definition: DDCellsAutomatonMV.h:82
A functor to return the quality of a track, which is currently the chi2 probability.
Definition: CellsAutomatonMV.h:323
std::vector< ICriterion * > _crit4Vec
A vector of criteria for 4 hits (2 3-hit segments)
Definition: DDCellsAutomatonMV.h:177
int _hitsPerTrackMin
Minimum number of hits a track has to have in order to be stored.
Definition: DDCellsAutomatonMV.h:168
std::vector< std::string > _criteriaNames
Names of the used criteria.
Definition: DDCellsAutomatonMV.h:159
A functor to return whether two tracks are compatible: The criterion is if they share a MiniVector or...
Definition: CellsAutomatonMV.h:295
int _output_track_col_quality
The quality of the output track collection.
Definition: DDCellsAutomatonMV.h:246