MarlinUtil  1.12.1
TrackwiseClusters.h
1 #ifndef TRACKWISECLUSTERS_H
2 #define TRACKWISECLUSTERS_H 1
3 
4 #include <iostream>
5 
6 #include <string>
7 #include <vector>
8 #include <math.h>
9 
10 #include "EVENT/LCIO.h"
11 #include "EVENT/LCCollection.h"
12 #include "EVENT/SimCalorimeterHit.h"
13 #include "EVENT/CalorimeterHit.h"
14 #include "EVENT/Track.h"
15 #include "IMPL/CalorimeterHitImpl.h"
16 #include "IMPL/ClusterImpl.h"
17 #include "IMPL/LCCollectionVec.h"
18 #include "CaloHitExtended.h"
19 #include "ClusterExtended.h"
20 #include "TrackExtended.h"
21 
22 #include "ClusterShapes.h"
23 #include "CalorimeterHitWithAttributes.h"
24 
25 // GEAR include files
26 #include <marlin/Global.h>
27 #include <gear/GEAR.h>
28 #include <gear/CalorimeterParameters.h>
29 #include "random.h"
30 
31 // for debugging only
32 #include <MarlinCED.h>
33 
34 
36 
37  std::vector<float> distanceTrackBack;
38  std::vector<float> stepTrackBack;
39  std::vector<float> resolutionParameter;
40  std::vector<float> distanceMergeForward;
41  float distanceToTrackSeed;
42  float distanceToDefineDirection;
43  float resolutionToMerge;
44  int nhit_merge_forward;
45  int nhit_minimal;
46  int typeOfGenericDistance;
47 
48  int doMerging;
49  int doMergingForward;
50  int displayClusters;
51  int NDefineSP;
52  int nScanToMergeForward;
53 
54 };
55 
56 
58 
59  // z position of ECAL Endcap front face
60  float zofendcap;
61  // radius of ECAL Barrel
62  float rofbarrel;
63  // offset in Phi angle of Barrel
64  // (Phi = 0 for canonical LC detector)
65  float phiofbarrel;
66  // Factor defining N_fold symmetry
67  // N = 8 for canonical LC detector
68  int nsymmetry;
69  // Theta of ENDCAP = atan(rofbarrel/zofendcap)
70  float thetaofendcap;
71 
72  float weightForReso;
73  float weightForDist;
74 
75  float bField;
76 
77 };
78 
79 
80 using namespace lcio;
81 
82 
84 
85  public:
86 
87  TrackwiseClusters(const std::vector<CalorimeterHitWithAttributes*> calorimeterHitsWithAttributes,const std::vector<float> startPoint,
88  const float pathLengthOnHelixOfStartPoint, const float distanceToHelixOfStartPoint, const std::vector<float> startDirection,
89  const TrackwiseClustersParameters* trackwiseClustersParameters, const TrackwiseClustersGeometryParameters* trackwiseClustersGeometryParameters);
90  TrackwiseClusters(const std::vector<CalorimeterHitWithAttributes*> calorimeterHitsWithAttributes,const float* startPoint,
91  const float pathLengthOnHelixOfStartPoint, const float distanceToHelixOfStartPoint, const float* startDirection,
92  const TrackwiseClustersParameters* trackwiseClustersParameters, const TrackwiseClustersGeometryParameters* trackwiseClustersGeometryParameters);
93 
95 
96 
97  std::vector<ClusterImpl*> doClustering();
98 
99 
100 
101 
102 
103 
104 
105  private:
106 
107  std::vector<float> _distanceTrackBack;
108  std::vector<float> _stepTrackBack;
109  std::vector<float> _resolutionParameter;
110  std::vector<float> _distanceMergeForward;
111  float _distanceToTrackSeed;
112  float _distanceToDefineDirection;
113  float _resolutionToMerge;
114  int _nhit_merge_forward;
115  int _use_tracks;
116  int _nhit_minimal;
117  int _typeOfGenericDistance;
118 
119  int _doMerging;
120  int _doMergingForward;
121  int _displayClusters;
122  int _NDefineSP;
123  int _nScanToMergeForward;
124 
125  ClusterExtendedVec _allSuperClusters;
126  ClusterExtendedVec _allClusters;
127  CaloHitExtendedVec _allHits;
128 
133  // z position of ECAL Endcap front face
134  float _zofendcap;
135  // radius of ECAL Barrel
136  float _rofbarrel;
137  // offset in Phi angle of Barrel
138  // (Phi = 0 for canonical LC detector)
139  float _phiofbarrel;
140  // Factor defining N_fold symmetry
141  // N = 8 for canonical LC detector
142  int _nsymmetry;
143  // Theta of ENDCAP = atan(_rofbarrel/_zofendcap)
144  float _thetaofendcap;
145 
146  float _weightForReso;
147  float _weightForDist;
148 
149  float _const_pi ;
150  float _const_2pi ;
151  float _const_pi_n ;
152  float _const_2pi_n ;
153 
154  float _xmax_in_distance;
155  float _xmin_in_distance;
156 
157  float _bField;
158 
159  int _debugLevel;
160 
161 
162  std::vector<CalorimeterHitWithAttributes*> _calorimeterHitsWithAttributes;
163  std::vector<float> _startPoint;
164  float _pathLengthOnHelixOfStartPoint;
165  float _distanceToHelixOfStartPoint;
166  std::vector<float> _startDirection;
167 
168  void initialiseCollections();
169  float findResolutionParameter(CaloHitExtended* fromHit, CaloHitExtended* toHit);
170  void CalculateGenericDistance(CaloHitExtended* calohit, float* dist);
171  void BubbleSort(CaloHitExtendedVec& input);
172  float DistanceBetweenPoints(float* x1, float* x2);
173  void DisplayClusters(ClusterExtendedVec clusterVec);
174  void GlobalSorting();
175  void GlobalClustering();
176  std::vector<ClusterImpl*> CreateClusterCollection(ClusterExtendedVec clusterVec);
177  void mergeForward();
178  void mergeLowMultiplicity();
179  void calculateProperties(ClusterExtended* Cl);
180  void propertiesForAll();
181  void CleanUp();
182  CalorimeterHitWithAttributes* getCalorimeterHitWithAttributes(CaloHitExtended* calorimeterHitExtended);
183 
184 } ;
185 
186 
187 #endif
188 
Class extending native LCIO class Cluster.
Definition: ClusterExtended.h:28
Definition: CalorimeterHitWithAttributes.h:11
Definition: TrackwiseClusters.h:57
Class extending native LCIO class CalorimeterHit.
Definition: CaloHitExtended.h:20
Definition: TrackwiseClusters.h:83
Definition: TrackwiseClusters.h:35