MarlinTrkProcessors  2.4.1
FPCCDFullLDCTracking_MarlinTrk.h
1 #ifndef FPCCDFULLLDCTRACKING_H
2 #define FPCCDFULLLDCTRACKING_H 1
3 
4 #include "marlin/Processor.h"
5 #include <marlin/Global.h>
6 #include "lcio.h"
7 #include <string>
8 #include "ClusterExtended.h"
9 #include "TrackExtended.h"
10 #include "TrackerHitExtended.h"
11 #include "TrackHitPair.h"
12 #include "HelixClass.h"
13 #include "HelixClass_double.h"
14 #include "ClusterShapes.h"
15 #include "GroupTracks.h"
16 //#include "../../BrahmsTracking/include/MarlinTrackFit.h"
17 #include <map>
18 #include <set>
19 
20 #include "MarlinTrk/IMarlinTrack.h"
21 
22 #include <UTIL/BitField64.h>
23 #include <UTIL/ILDConf.h>
24 
25 
26 
27 #include "TTree.h"
28 #include "TNtuple.h"
29 #include "TFile.h"
30 #include "TStopwatch.h"
31 #include <EVENT/SimTrackerHit.h>
32 #include <EVENT/LCRelation.h>
33 #include <UTIL/LCRelationNavigator.h>
34 #include "../src/GetPurity.h"
35 #include "./MCPMap.h"
36 
37 
38 
39 using namespace lcio ;
40 using namespace marlin ;
41 
42 //class gear::GearMgr ;
43 
44 namespace MarlinTrk {
45  class HelixFit;
46  class IMarlinTrkSystem ;
47 }
48 
49 
297 class FPCCDFullLDCTracking_MarlinTrk : public Processor {
298 
299 public:
300 
301  virtual Processor* newProcessor() { return new FPCCDFullLDCTracking_MarlinTrk ; }
303  virtual void init() ;
304  virtual void processRunHeader( LCRunHeader* run ) ;
305  virtual void processEvent( LCEvent * evt ) ;
306  virtual void check( LCEvent * evt ) ;
307  virtual void end() ;
308 
309 protected:
310 
311  void prepareVectors( LCEvent * evt );
312  void CleanUp();
313  void MergeTPCandSiTracks();
314  void MergeTPCandSiTracksII();
315 
316  TrackExtended * CombineTracks(TrackExtended * tpcTrk, TrackExtended * siTrk, float maxAllowedOutliers ,bool testCombinationOnly );
317 
318 // TrackExtended * TrialCombineTracks(TrackExtended * tpcTrk, TrackExtended * siTrk);
319 
320  void Sorting(TrackExtendedVec & trackVec);
321  void SelectCombinedTracks();
322  void AddNotCombinedTracks();
323  void CheckTracks();
324  void AddNotAssignedHits();
325  void RemoveSplitTracks();
326  void AddTrackColToEvt(LCEvent * evt, TrackExtendedVec & trkVec,
327  std::string TrkColName);
328  float CompareTrk(TrackExtended * first, TrackExtended * second,
329  float d0Cut, float z0Cut, int iopt);
330 
331  float CompareTrkII(TrackExtended * first, TrackExtended * second,
332  float d0Cut, float z0Cut, int iopt, float &Angle);
333  float CompareTrkIII(TrackExtended * first, TrackExtended * second,
334  float d0Cut, float z0Cut, int iopt, float &Angle);
335 
336  void SortingTrackHitPairs(TrackHitPairVec & trackHitPairVec);
337 
338  void AssignSiHitsToTracks(TrackerHitExtendedVec hitVec,
339  float dcut);
340 
341  void AssignTPCHitsToTracks(TrackerHitExtendedVec hitVec,
342  float dcut);
343 
344  void AssignOuterHitsToTracks(TrackerHitExtendedVec hitVec, float dcut, int refit);
345 
346  void CreateExtrapolations();
347 
348  void CleanUpExtrapolations();
349 
350  HelixClass * GetExtrapolationHelix(TrackExtended * track);
351 
352  void PrintOutMerging(TrackExtended * firstTrackExt, TrackExtended * secondTrackExt,
353  int iopt);
354 
355  void GeneralSorting(int * index, float * val, int direct, int nVal);
356 
357  int SegmentRadialOverlap(TrackExtended* pTracki, TrackExtended* pTrackj);
358  bool VetoMerge(TrackExtended* firstTrackExt, TrackExtended* secondTrackExt);
359 
360 
361  int _nRun ;
362  int _nEvt ;
363 
364  MarlinTrk::HelixFit* _fastfitter;
365 
368  MarlinTrk::IMarlinTrkSystem* _trksystem ;
369 
370  bool _MSOn, _ElossOn, _SmoothOn ;
371 
372  std::string _TPCTrackCollection;
373  std::string _SiTrackCollection;
374  std::string _TPCTrackMCPCollName;
375  std::string _SiTrackMCPCollName;
376 
377  std::string _VTXTrackerHitCollection;
378  std::string _SITTrackerHitCollection;
379  std::string _SETTrackerHitCollection;
380  std::string _FTDPixelHitCollection;
381  std::string _FTDSpacePointCollection;
382  std::string _TPCTrackerHitCollection;
383  std::string _ETDTrackerHitCollection;
384 
385  std::string _LDCTrackCollection;
386 
387 
388  TrackExtendedVec _allSiTracks;
389  TrackExtendedVec _allTPCTracks;
390  TrackExtendedVec _allCombinedTracks;
391  TrackExtendedVec _allNonCombinedTPCTracks;
392  TrackExtendedVec _allNonCombinedSiTracks;
393  TrackExtendedVec _trkImplVec;
394  TrackerHitExtendedVec _allTPCHits;
395  TrackerHitExtendedVec _allVTXHits;
396  TrackerHitExtendedVec _allFTDHits;
397  TrackerHitExtendedVec _allSITHits;
398  TrackerHitExtendedVec _allSETHits;
399  TrackerHitExtendedVec _allETDHits;
400 
401  float PI, PIOVER2, TWOPI;
402 
403  float _bField;
404  float _chi2PrefitCut;
405  float _chi2FitCut;
406 
407  int _debug;
408 
409  float _dPCutForMerging;
410  float _d0CutForMerging;
411  float _z0CutForMerging;
412  float _dOmegaForMerging;
413  float _angleForMerging;
414 
415 
416  int _forceMerging;
417  float _dPCutForForcedMerging;
418  float _d0CutForForcedMerging;
419  float _z0CutForForcedMerging;
420  float _dOmegaForForcedMerging;
421  float _angleForForcedMerging;
422 
423 
424  int _mergeTPCSegments;
425  float _dPCutToMergeTPC;
426  float _PtCutToMergeTPC;
427  float _d0CutToMergeTPC;
428  float _z0CutToMergeTPC;
429 
430  float _cosThetaCutHighPtMerge;
431  float _cosThetaCutSoftHighPtMerge;
432  float _momDiffCutHighPtMerge;
433  float _momDiffCutSoftHighPtMerge;
434  float _hitDistanceCutHighPtMerge;
435  float _maxHitDistanceCutHighPtMerge;
436  float _maxFractionOfOutliersCutHighPtMerge;
437 
438  float _vetoMergeMomentumCut;
439 
440  float _initialTrackError_d0;
441  float _initialTrackError_phi0;
442  float _initialTrackError_omega;
443  float _initialTrackError_z0;
444  float _initialTrackError_tanL;
445 
446  double _maxChi2PerHit;
447  double _minChi2ProbForSiliconTracks;
448  double _maxChi2ForSiliconTracks;
449  bool _useMaxChi2ReqForSiTrk;
450  float _maxAllowedPercentageOfOutliersForTrackCombination;
451  int _maxAllowedSiHitRejectionsForTrackCombination;
452 
453  bool _runMarlinTrkDiagnostics;
454  std::string _MarlinTrkDiagnosticsName;
455 
456  int _nHitsExtrapolation;
457 
458  int _cutOnTPCHits;
459  int _cutOnSiHits;
460 
461 
462  int _assignVTXHits,_assignFTDHits,_assignSITHits,_assignTPCHits;
463 
464  int _assignSETHits, _assignETDHits;
465 
466  float _distCutForVTXHits,_distCutForFTDHits,_distCutForSITHits,_distCutForTPCHits;
467 
468  float _distCutForSETHits, _distCutForETDHits;
469 
470 
471  float _d0TrkCut,_z0TrkCut;
472 
473  int _forbidOverlapInZTPC,_forbidOverlapInZComb;
474 
475  LCEvent * _evt;
476 
477  std::map<TrackExtended*,HelixClass*> _trackExtrapolatedHelix;
478  std::set<TrackExtended*> _candidateCombinedTracks;
479 
480  UTIL::BitField64* _encoder;
481  int getDetectorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::subdet]; }
482  int getSideID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::side]; };
483  int getLayerID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::layer]; };
484  int getModuleID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::module]; };
485  int getSensorID(TrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::sensor]; };
486 
487  int getDetectorID(SimTrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::subdet]; }
488  int getSideID(SimTrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::side]; };
489  int getLayerID(SimTrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::layer]; };
490  int getModuleID(SimTrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::module]; };
491  int getSensorID(SimTrackerHit* hit) { _encoder->setValue(hit->getCellID0()); return (*_encoder)[lcio::ILDCellID0::sensor]; };
492 
493 
494  void setupGearGeom( const gear::GearMgr* gearMgr ) ;
495 
496  double _tpc_inner_r;
497  double _tpc_outer_r;
498  double _tpc_pad_height;
499  int _tpc_nrows;
500 
501 // struct VXD_Layer {
502 // int nLadders;
503 // double phi0;
504 // double dphi;
505 // double senRMin;
506 // double supRMin;
507 // double length;
508 // double width;
509 // double offset;
510 // double senThickness;
511 // double supThickness;
512 // };
513 // std::vector<VXD_Layer> _VXDgeo;
514 
515  unsigned int _nLayersVTX;
516 
517 // struct SIT_Layer {
518 // int nLadders;
519 // double phi0;
520 // double dphi;
521 // double senRMin;
522 // double supRMin;
523 // double length;
524 // double width;
525 // double offset;
526 // double senThickness;
527 // double supThickness;
528 // };
529 // std::vector<SIT_Layer> _SITgeo;
530 
531  unsigned int _nLayersSIT;
532 
533  unsigned int _nLayersSET;
534 
535 
536 // struct FTD_Disk {
537 // int nPetals;
538 // double phi0;
539 // double dphi;
540 //
541 // double alpha;
542 // double rInner;
543 // double height;
544 // double innerBaseLength;
545 // double outerBaseLength;
546 // double senThickness;
547 // double supThickness;
548 //
549 // double senZPos_even_petal1;
550 // double senZPos_even_petal2;
551 // double senZPos_even_petal3;
552 // double senZPos_even_petal4;
553 //
554 // double supZPos_even_petal1;
555 // double supZPos_even_petal2;
556 // double supZPos_even_petal3;
557 // double supZPos_even_petal4;
558 //
559 // double senZPos_odd_petal1;
560 // double senZPos_odd_petal2;
561 // double senZPos_odd_petal3;
562 // double senZPos_odd_petal4;
563 //
564 // double supZPos_odd_petal1;
565 // double supZPos_odd_petal2;
566 // double supZPos_odd_petal3;
567 // double supZPos_odd_petal4;
568 //
569 //
570 //
571 // };
572 //
573 // std::vector<FTD_Disk> _FTDgeo;
574  std::vector<float> _zLayerFTD;
575 
576  unsigned int _nLayersFTD;
577  int _nPhiFTD;
578  bool _petalBasedFTDWithOverlaps;
579 
580 
581 
582 
583 
584 
585 
586 
588 
589  GetPurityUtil* _purityUtil;
590  moriUTIL* _moriUtil;
591  MCPMap _mcpMapSi;
592  MCPMap _mcpMapFull;
593  IntVec getNHitsInSubDet(SimTrackerHitVec simvec);
594  std::vector<LCRelationNavigator*> _naviVecSi;
595  std::vector<LCRelationNavigator*> _naviVecFull;
596  std::string _colNameVXDTrackerHitRelations;
597  std::string _colNameSITSpacePointRelations;
598  std::string _colNameFTDSpacePointRelations;
599  std::string _colNameFTDPixelTrackerHitRelations;
600  std::string _colNameTPCTrackerHitRelations;
601  std::string _colNameSETSpacePointRelations;
602  LCRelationNavigator* _navVXD;
603  LCRelationNavigator* _navSIT;
604  LCRelationNavigator* _navFTDsp;
605  LCRelationNavigator* _navFTDpix;
606  LCRelationNavigator* _navTPC;
607  LCRelationNavigator* _navSET;
608  std::string _colNameVXDSimHit;
609  std::string _colNameSITSimHit;
610  std::string _colNameFTDspSimHit;
611  std::string _colNameFTDpixSimHit;
612  std::string _colNameTPCSimHit;
613  std::string _colNameSETSimHit;
614  LCCollection* _simVXD;
615  LCCollection* _simSIT;
616  LCCollection* _simFTDsp;
617  LCCollection* _simFTDpix;
618  LCCollection* _simTPC;
619  LCCollection* _simSET;
620 
621  bool _mydebug;
622  bool _mydebugPrintMCP;
623 
624  bool _FinalTrackCut_strategyA;
625 
627  LCCollection* GetCollection( LCEvent * evt, std::string colName ) ;
628 
630  LCRelationNavigator* GetRelations( LCEvent * evt, std::string RelName ) ;
631 
632  MCPMap LoadMCPMap(int mode);
633  std::map< MCParticle*, SimTrackerHitVec > _mcpVXD;
634  std::map< MCParticle*, SimTrackerHitVec > _mcpVXDFTD;
635  std::map< MCParticle*, SimTrackerHitVec > _mcpVXDSIT;
636  std::map< MCParticle*, SimTrackerHitVec > _mcpVXDFTDSIT;
637  std::map< MCParticle*, SimTrackerHitVec > _mcpFTD;
638  std::map< MCParticle*, SimTrackerHitVec > _mcpFTDSIT;
639  std::map< MCParticle*, SimTrackerHitVec > _mcpSIT;
640 
641  enum MCPContributions{
642  contVXD,
643  contFTD,
644  contSIT,
645  contVXDFTD,
646  contVXDSIT,
647  contFTDSIT,
648  contVXDFTDSIT,
649  contBG,
650  contSize
651  };
652 
653 } ;
654 
655 #endif
656 
657 
658 
=== FPCCDFullLDCTracking_MarlinTrk Processor ===
Definition: FPCCDFullLDCTracking_MarlinTrk.h:297
Definition: GetPurity.h:37
Definition: MCPMap.h:20
MarlinTrk::IMarlinTrkSystem * _trksystem
pointer to the IMarlinTrkSystem instance
Definition: FPCCDFullLDCTracking_MarlinTrk.h:368