1 #ifndef CellsAutomatonMV_h
2 #define CellsAutomatonMV_h 1
5 #include "Math/ProbFunc.h"
7 #include <marlin/Processor.h>
8 #include <marlin/Global.h>
9 #include "marlin/VerbosityLevels.h"
10 #include <marlin/Exceptions.h>
12 #include <EVENT/LCCollection.h>
13 #include <EVENT/TrackerHit.h>
14 #include <EVENT/TrackerHitPlane.h>
15 #include <IMPL/TrackerHitImpl.h>
16 #include <EVENT/TrackerHitZCylinder.h>
17 #include <IMPL/LCCollectionVec.h>
18 #include <IMPL/TrackImpl.h>
19 #include <IMPL/TrackerHitPlaneImpl.h>
20 #include <UTIL/BitField64.h>
21 #include <UTIL/ILDConf.h>
24 #include "KiTrack/SubsetHopfieldNN.h"
25 #include "KiTrack/SubsetSimple.h"
26 #include "KiTrack/SegmentBuilder.h"
27 #include "KiTrack/Automaton.h"
28 #include "KiTrack/Segment.h"
31 #include "ILDImpl/VXDTrack.h"
32 #include "ILDImpl/VXDHit01.h"
33 #include "ILDImpl/VXDSectorConnector.h"
34 #include "Tools/KiTrackMarlinTools.h"
35 #include "Tools/KiTrackMarlinCEDTools.h"
36 #include "KiTrack/ITrack.h"
37 #include "Criteria/Criteria.h"
38 #include "ILDImpl/SectorSystemVXD.h"
39 #include "Tools/VXDHelixFitter.h"
40 #include "ILDImpl/MiniVectorHit01.h"
43 #include "MarlinTrk/IMarlinTrkSystem.h"
44 #include "MarlinTrk/IMarlinTrack.h"
45 #include "MarlinTrk/Factory.h"
46 #include "MarlinTrk/MarlinTrkUtils.h"
49 #include <gear/GEAR.h>
50 #include <gear/GearParameters.h>
51 #include <gear/VXDLayerLayout.h>
52 #include <gear/VXDParameters.h>
53 #include <gear/BField.h>
54 #include "gear/gearsurf/MeasurementSurfaceStore.h"
55 #include "gear/gearsurf/MeasurementSurface.h"
56 #include "gear/gearsurf/ICoordinateSystem.h"
57 #include "gear/gearsurf/CartesianCoordinateSystem.h"
61 #include "CLHEP/Vector/ThreeVector.h"
62 #include "CLHEP/Matrix/SymMatrix.h"
63 #include "CLHEP/Matrix/Matrix.h"
66 using namespace lcio ;
67 using namespace marlin ;
69 using namespace gear ;
70 using namespace KiTrack;
71 using namespace KiTrackMarlin;
73 class IMarlinTrkSystem ;
81 typedef std::vector< IHit* > RawTrack;
99 virtual void processRunHeader( LCRunHeader* run ) ;
103 virtual void processEvent( LCEvent * evt ) ;
106 virtual void check( LCEvent * evt ) ;
138 int _nDivisionsInPhi;
139 int _nDivisionsInTheta;
140 int _nDivisionsInPhiMV;
141 int _nDivisionsInThetaMV;
147 static const double TWOPI;
151 UTIL::BitField64* _encoder;
152 int getDetectorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::subdet]; }
153 int getSideID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::side]; };
154 int getLayerID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::layer]; };
155 int getModuleID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::module]; };
156 int getSensorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0());
return (*_encoder)[lcio::ILDCellID0::sensor]; };
159 void InitialiseVTX(LCEvent * evt, EVENT::TrackerHitVec HitsTemp);
160 void setupGearGeom(
const gear::GearMgr* gearMgr ) ;
161 bool setCriteria(
unsigned round );
162 void RawTrackFit( std::vector < MarlinTrk::IMarlinTrack* > candMarlinTracks, std::vector< IMPL::TrackImpl* > &finalTracks ) ;
163 void FitFunc2( std::vector < RawTrack > rawTracks, std::vector < MarlinTrk::IMarlinTrack* > &candMarlinTracks ) ;
164 void finaliseTrack( TrackImpl* newTrackImpl, LCCollectionVec* trackVec ) ;
166 void CreateMiniVectors(
int sector ) ;
167 bool thetaAgreement( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit ) ;
168 bool thetaAgreementImproved( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit,
int layer ) ;
169 double Dist( EVENT::TrackerHit *toHit, EVENT::TrackerHit *fromHit ) ;
173 unsigned int _nLayersVTX;
174 unsigned int _nLayersSIT;
178 std::map< int , std::vector< IHit* > > _map_sector_hits;
179 std::map< int , EVENT::TrackerHit* > _map_1dhits_spacepoints ;
205 std::vector< IHit* > MiniVectorsTemp;
206 std::vector< IHit* > TestMiniVectorsTemp;
211 double _helixFitMax ;
213 double _chi2OverNdfCut ;
215 const SectorSystemVXD * _sectorSystemVXD;
224 std::string _trkSystemName ;
226 bool _MSOn, _ElossOn, _SmoothOn, _middleLayer ;
241 int MiniVectors_sectors ;
242 int MiniVectors_CutSelection ;
247 double _hitPairThDiff ;
248 double _hitPairThDiffInner ;
249 double _hitPairThDiffSIT ;
256 float _initialTrackError_d0;
257 float _initialTrackError_phi0;
258 float _initialTrackError_omega;
259 float _initialTrackError_z0;
260 float _initialTrackError_tanL;
261 float _maxChi2PerHit;
263 int _initialTrackState;
266 int _maxHitsPerSector ;
271 std::string _SITHitCollection;
272 std::string _CATrackCollection;
274 std::map< LCCollection*, std::string > _colNamesTrackerHits;
276 std::string _bestSubsetFinder;
281 static const int _output_track_col_quality_GOOD;
282 static const int _output_track_col_quality_FAIR;
283 static const int _output_track_col_quality_POOR;
299 inline bool operator()( ITrack* trackA, ITrack* trackB ){
302 std::vector< IHit* > hitsA = trackA->getHits();
303 std::vector< IHit* > hitsB = trackB->getHits();
305 for(
unsigned i=0; i < hitsA.size(); i++){
307 for(
unsigned j=0; j < hitsB.size(); j++){
309 if ( hitsA[i] == hitsB[j] )
return false;
327 inline double operator()( ITrack* track ){
return track->getChi2Prob(); }
339 inline double operator()( ITrack* track ){
341 float NoOfHits = 4.0*( track->getHits().size());
343 return (1.0*NoOfHits)/(track->getChi2()/track->getNdf()); }
355 inline double operator()( ITrack* track ){
357 return track->getHits().size();
374 inline double operator()( ITrack* track ){
376 if( track->getHits().size() > 2 ){
378 return track->getChi2Prob()/2. +0.5;
383 return 1/( log( 7.3890561 + track->getChi2() ) );
std::vector< ICriterion * > _crit4Vec
A vector of criteria for 4 hits (2 3-hit segments)
Definition: CellsAutomatonMV.h:203
std::vector< ICriterion * > _crit2Vec
A vector of criteria for 2 hits (2 1-hit segments)
Definition: CellsAutomatonMV.h:197
Definition: CellsAutomatonMV.h:83
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: CellsAutomatonMV.h:188
std::pair< EVENT::TrackerHit *, EVENT::TrackerHit * > _pairs_1dhits_spacepoints
A pair to keep information for composite spacepoints.
Definition: CellsAutomatonMV.h:182
int _hitsPerTrackMin
Minimum number of hits a track has to have in order to be stored.
Definition: CellsAutomatonMV.h:194
std::vector< ICriterion * > _crit3Vec
A vector of criteria for 3 hits (2 2-hit segments)
Definition: CellsAutomatonMV.h:200
A functor to return the quality of a track, which is the number of associated hits.
Definition: CellsAutomatonMV.h:351
std::vector< std::string > _criteriaNames
Names of the used criteria.
Definition: CellsAutomatonMV.h:185
A functor to return the quality of a track, which is the ratio chi2 over degrees of freedom...
Definition: CellsAutomatonMV.h:335
std::string _VTXHitCollection
Input collection name.
Definition: CellsAutomatonMV.h:270
A functor to return the quality of a track.
Definition: CellsAutomatonMV.h:370
A functor to return the quality of a track, which is currently the chi2 probability.
Definition: CellsAutomatonMV.h:323
std::map< int, EVENT::TrackerHitVec > _map_sector_spacepoints
A map to store the hits according to their sectors.
Definition: CellsAutomatonMV.h:177
int _output_track_col_quality
The quality of the output track collection.
Definition: CellsAutomatonMV.h:279
MarlinTrk::IMarlinTrkSystem * _trkSystem
pointer to the IMarlinTrkSystem instance
Definition: CellsAutomatonMV.h:223
int _maxConnectionsAutomaton
the maximum number of connections that are allowed in the automaton, if this value is surpassed...
Definition: CellsAutomatonMV.h:219
double _chi2ProbCut
Cut for the Kalman Fit (the chi squared probability)
Definition: CellsAutomatonMV.h:209
A functor to return whether two tracks are compatible: The criterion is if they share a MiniVector or...
Definition: CellsAutomatonMV.h:295
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: CellsAutomatonMV.h:191