MarlinTrkProcessors  2.4.1
SiliconTracking_MarlinTrk.h
1 #ifndef SILICONTRACKING_MarlinTrk_H
2 #define SILICONTRACKING_MarlinTrk_H 1
3 
4 #include "marlin/Processor.h"
5 #include <marlin/Global.h>
6 #include "lcio.h"
7 #include <string>
8 #include <vector>
9 #include <cmath>
10 #include <IMPL/TrackImpl.h>
11 #include "ClusterExtended.h"
12 #include "TrackExtended.h"
13 #include "TrackerHitExtended.h"
14 #include "HelixClass.h"
15 
16 #include "MarlinTrk/IMarlinTrack.h"
17 
18 #include <UTIL/BitField64.h>
19 #include <UTIL/ILDConf.h>
20 
21 namespace DiagnosticsHistograms {
22  class Histograms ;
23 }
24 
25 namespace DiagnosticsHistograms2D {
26  class Histograms ;
27 }
28 
29 using namespace lcio ;
30 using namespace marlin ;
31 
32 namespace gear{
33  class GearMgr ;
34 }
35 
36 namespace MarlinTrk {
37  class HelixFit;
38  class IMarlinTrkSystem ;
39 }
40 
41 namespace UTIL{
42  class LCRelationNavigator ;
43 }
44 
45 
184 class SiliconTracking_MarlinTrk : public Processor {
185 
186 public:
187 
188  virtual Processor* newProcessor() { return new SiliconTracking_MarlinTrk ; }
189 
190 
192 
196  virtual void init() ;
197 
200  virtual void processRunHeader( LCRunHeader* run ) ;
201 
204  virtual void processEvent( LCEvent * evt ) ;
205 
206 
207  virtual void check( LCEvent * evt ) ;
208 
209 
212  virtual void end() ;
213 
214 
215 protected:
216 
217  int _nRun ;
218  int _nEvt ;
219  EVENT::LCEvent* _current_event;
220 
221  int _nDivisionsInPhi;
222  int _nDivisionsInTheta;
223  int _nLayers;
224 
225  MarlinTrk::HelixFit* _fastfitter;
226 
229  MarlinTrk::IMarlinTrkSystem* _trksystem ;
230  bool _runMarlinTrkDiagnostics;
231  std::string _MarlinTrkDiagnosticsName;
232 
233  bool _MSOn, _ElossOn, _SmoothOn ;
234 
235  float _initialTrackError_d0;
236  float _initialTrackError_phi0;
237  float _initialTrackError_omega;
238  float _initialTrackError_z0;
239  float _initialTrackError_tanL;
240 
241  double _maxChi2PerHit;
242 
243  bool _UseEventDisplay;
244  int _detector_model_for_drawing;
245  std::vector<int> _colours;
246  float _helix_max_r;
247 
248  void drawEvent();
249 
250 
251  // histogram member variables
252 
253  bool _createDiagnosticsHistograms;
255 
256 
257  int _ntriplets, _ntriplets_good, _ntriplets_2MCP, _ntriplets_3MCP, _ntriplets_1MCP_Bad, _ntriplets_bad;
258 
259 
261  LCCollection* GetCollection( LCEvent * evt, std::string colName ) ;
262 
264  LCRelationNavigator* GetRelations( LCEvent * evt, std::string RelName ) ;
265 
268  std::string _colNameMCParticles;
269  float _MCpThreshold ;
270 
271 
274  // n.b.: a and b should be TrackExtended const *, but the getters are not const :-(
275  bool operator()(TrackExtended *a, TrackExtended *b) const {
276  if ( a == b ) return false;
277  return (a->getChi2()/a->getNDF() < b->getChi2()/b->getNDF() );
278  }
279  };
280 
281 
282  std::string _VTXHitCollection;
283  std::string _FTDPixelHitCollection;
284  std::string _FTDSpacePointCollection;
285  std::string _SITHitCollection;
286  std::string _siTrkCollection;
287 
288  std::vector< LCCollection* > _colTrackerHits;
289  std::map< LCCollection*, std::string > _colNamesTrackerHits;
290 
291  std::vector<TrackerHitExtendedVec> _sectors;
292  std::vector<TrackerHitExtendedVec> _sectorsFTD;
293 
301  public:
303  void clear();
304 
306  inline void resize(size_t maxHits) {
307  _tracksNHits.resize(maxHits-2);
308  _maxIndex=(maxHits-3);
309  }
310 
311  // Sort all track vectors according to chi2/nDof
312  // void sort();
313 
318  inline TrackExtendedVec & getTracksWithNHitsVec( size_t nHits ) {
319  //return _tracksNHits[ std::min(nHits-3, _maxIndex) ];
320  // for debugging: with boundary check
321  return _tracksNHits.at(std::min(nHits-3, _maxIndex));
322  }
323 
324  protected:
325  std::vector< TrackExtendedVec > _tracksNHits;
326  size_t _maxIndex;
327  };
328 
329  TracksWithNHitsContainer _tracksWithNHitsContainer;
330 
331  int InitialiseVTX(LCEvent * evt);
332  int InitialiseFTD(LCEvent * evt);
333  void ProcessOneSector(int iSectorPhi, int iSectorTheta);
334  void CleanUp();
335  TrackExtended * TestTriplet(TrackerHitExtended * outerHit,
336  TrackerHitExtended * middleHit,
337  TrackerHitExtended * innerHit,
338  HelixClass & helix);
339 
340  int BuildTrack(TrackerHitExtended * outerHit,
341  TrackerHitExtended * middleHit,
342  TrackerHitExtended * innerHit,
343  HelixClass & helix,
344  int innerlayer,
345  int iPhiLow, int iPhiUp,
346  int iTheta, int iThetaUp,
347  TrackExtended * trackAR);
348 
349  void Sorting( TrackExtendedVec & trackVec);
350  void CreateTrack(TrackExtended * trackAR );
351  void AttachRemainingVTXHitsSlow();
352  void AttachRemainingFTDHitsSlow();
353  void AttachRemainingVTXHitsFast();
354  void AttachRemainingFTDHitsFast();
355  void TrackingInFTD();
356  int BuildTrackFTD(TrackExtended* trackAR, int* nLR, int iS);
357  int AttachHitToTrack(TrackExtended * trackAR, TrackerHitExtended * hit, int iopt);
358 
359  void FinalRefit(LCCollectionVec* trk_col, LCCollectionVec* rel_col);
360 
361  float _bField;
362  float _chi2WRPhiTriplet;
363  float _chi2WRPhiQuartet;
364  float _chi2WRPhiSeptet;
365  float _chi2WZTriplet;
366  float _chi2WZQuartet;
367  float _chi2WZSeptet;
368  float _minDistCutAttach;
369  int _minimalLayerToAttach;
370 
371  // two pi is not a constant in cmath. Calculate it, once!
372  static const double TWOPI;
373 
374  double _dPhi;
375  double _dTheta;
376  double _dPhiFTD;
377 
378 
379 
380  std::vector<int> _Combinations;
381  std::vector<int> _CombinationsFTD;
382 
383  float _resolutionRPhiVTX;
384  float _resolutionZVTX;
385 
386  float _resolutionRPhiFTD;
387  float _resolutionZFTD;
388 
389  float _resolutionRPhiSIT;
390  float _resolutionZSIT;
391 
392  float _phiCutForMerging;
393  float _tanlambdaCutForMerging;
394  float _angleCutForMerging;
395 
396  int _print;
397  int _checkForDelta;
398  float _minDistToDelta;
399 
400  float _distRPhi;
401  float _distZ;
402  float _chi2FitCut;
403 
404 
405  TrackExtendedVec _trackImplVec;
406 
407 
408  float _cutOnD0, _cutOnZ0, _cutOnOmega, _cutOnPt;
409 
410  int _minimalHits;
411  int _nHitsChi2;
412  int _attachFast;
413 
414  int _max_hits_per_sector;
415 
416  int _nTotalVTXHits,_nTotalFTDHits,_nTotalSITHits;
417  int _useSIT;
418 
419  std::string _trkSystemName ;
420 
421  // int _createMap;
422 
423  UTIL::BitField64* _encoder;
424  int getDetectorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::subdet]; }
425  int getSideID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::side]; };
426  int getLayerID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::layer]; };
427  int getModuleID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::module]; };
428  int getSensorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::sensor]; };
429 
430  void setupGearGeom( const gear::GearMgr* gearMgr ) ;
431 
432 
433  unsigned int _nLayersVTX;
434 
435  unsigned int _nLayersSIT;
436 
437 
438  std::vector<float> _zLayerFTD;
439 
440  unsigned int _nlayersFTD;
441  bool _petalBasedFTDWithOverlaps;
442  int _nPhiFTD;
443 
444  int _output_track_col_quality;
445  static const int _output_track_col_quality_GOOD;
446  static const int _output_track_col_quality_FAIR;
447  static const int _output_track_col_quality_POOR;
448 
449 
450 } ;
451 
452 #endif
453 
454 
455 
=== Silicon Tracking Processor === Processor performing stand-alone pattern recognition in the vert...
Definition: SiliconTracking_MarlinTrk.h:184
A helper class to allow good code readability by accessing tracks with N hits.
Definition: SiliconTracking_MarlinTrk.h:300
TrackExtendedVec & getTracksWithNHitsVec(size_t nHits)
Returns the TrackExtendedVec for track with n hits.
Definition: SiliconTracking_MarlinTrk.h:318
MarlinTrk::IMarlinTrkSystem * _trksystem
pointer to the IMarlinTrkSystem instance
Definition: SiliconTracking_MarlinTrk.h:229
Compare tracks according to their chi2/ndf.
Definition: SiliconTracking_MarlinTrk.h:273
Definition: SiliconTracking_MarlinTrk.cc:90
std::string _colNameMCParticles
input MCParticle collection and threshold used for Drawing
Definition: SiliconTracking_MarlinTrk.h:268
void resize(size_t maxHits)
Set the size to allow a maximum of maxHit hits.
Definition: SiliconTracking_MarlinTrk.h:306