ATLAS Offline Software
CscPeakThresholdClusterBuilderTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // CscPeakThresholdClusterBuilderTool.h
6 
7 #ifndef CscPeakThresholdClusterBuilderTool_H
8 #define CscPeakThresholdClusterBuilderTool_H
9 
10 // David Adams
11 // June 2006
12 //
13 // ATLAS algorithm to build CSC clusters from CSC digits.
14 // A simple threshold cluster algorithm is applied: any adjacent
15 // channels with charge above a user-specified threshold are
16 // merged into a cluster.
17 //
18 // Clusters are tagged as spoiled if any of the following apply:
19 // 1. Too narrow: only one strip.
20 // 2. Too wide: pitch*(nstrip-1) above a user-specified cutoff.
21 // 3. Multiple peaks.
22 // 4. Skewed: peak not in in the central channel for an odd cluster
23 // (odd # strips) or central two for an even cluster.
24 // 5. Edge: cluster includes the first or last strip in the plane.
25 // 6. RMS: charge centroid RMS is too large
26 // The different algorithms used to evaluate the unspoiled position
27 // may transfer clusters into the spoiled state. E.g. the adjacent
28 // charge ratios method requires left and right to be consistent.
29 //
30 // Spoiled clusters are assigned position at the center of the cluster
31 // and a large error: width/sqrt(12) with possible correction for the
32 // intrinsic signal width.
33 //
34 // The positions for unspoiled clusters may evaluated in a number of
35 // ways selected through job options.
36 //
37 // The corrected charge centroid method starts with the charge
38 // centroid and then applies a strip position correction
39 // which is a function of the plane type (CSS or CSL, r or phi), the
40 // number of strips in the cluster, and the deviation of the charge
41 // centroid from the center of the cluster. Thes corrections are 4th
42 // order odd polynomials in that deviation, i.e.
43 // A d + B d**3 + C D**5 + D d**7
44 // and the coefficients were determined by comparison with Monte Carlo
45 // track positions. For now these coefficients are hardwired into the
46 // code.
47 //
48 // The adjacent charge ratios method uses the ratios of the left and
49 // right charges to that of the central strip to estimate the position
50 // again using a polynomial calibration.
51 //
52 // Unspoiled clusters are assigned a position error of
53 // m_unspoiled_error.
54 
55 // Algorithm to construct CSC clusters from digits.
56 
61 #include "GaudiKernel/ToolHandle.h"
65 
66 namespace Muon {
67  class CscPrepData;
68  class CscStripPrepData;
69 } // namespace Muon
71 class CscDigit;
72 
74 public: // methods
75  // Constructor.
76  CscPeakThresholdClusterBuilderTool(const std::string& type, const std::string& aname, const IInterface*);
77 
78  // Destructor.
80 
83  // static const InterfaceID& interfaceID( ) ;
84 
85  // Initialization.
87 
88  // Event processing.
89  StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect,
91 
92  // Finalization.
94 
95 private: // Private methods.
96  // Cluster a cathode plane.
97  // int make_clusters(bool dump, int maxstrip, double pitch,
98  // const std::vector<MyCscDigit*>& idstrip, const std::vector<double>& qstrip);
99  // int make_clusters(bool dump, int maxstrip, double pitch, const std::vector<Muon::CscStripPrepData*>& strips);
100  int make_clusters(bool measphi, const std::vector<const Muon::CscStripPrepData*>& strips, Muon::CscPrepDataCollection*& collection);
101  StatusCode getClusters(IdentifierHash idVect, std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer* pclusters);
102  StatusCode getClusters(std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer* pclusters);
103 
104 private: // data
105  // Properties.
106  double m_qpeak_threshold_eta; // Charge qpeak threshold to include strip in cluster
107  double m_qpeak_threshold_phi; // Charge qpeak threshold to include strip in cluster
108  double m_q3sum_threshold_eta; // Charge qleft+qpeak+qright threshold to include strip in cluster
109  double m_q3sum_threshold_phi; // Charge qleft+qpeak+qright threshold to include strip in cluster
112 
113  // Strip fitter.
114  ToolHandle<ICscStripFitter> m_pstrip_fitter{
115  this,
116  "strip_fitter",
117  "CalibCscStripFitter/CalibCscStripFitter",
118  };
119 
120  // Cluster fitters.
121  ToolHandle<ICscClusterFitter> m_pfitter_def{
122  this,
123  "default_fitter",
124  "SimpleCscClusterFitter/SimpleCscClusterFitter",
125  };
126  ToolHandle<ICscClusterFitter> m_pfitter_prec{
127  this,
128  "precision_fitter",
129  "QratCscClusterFitter/QratCscClusterFitter",
130  };
131  ToolHandle<ICscClusterFitter> m_pfitter_split{
132  this,
133  "split_fitter",
134  "CscSplitClusterFitter/CscSplitClusterFitter",
135  };
136 
138  this,
139  "MuonIdHelperSvc",
140  "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
141  };
142 
145  this,
146  "DetectorManagerKey",
147  "MuonDetectorManager",
148  "Key of input MuonDetectorManager condition data",
149  };
150 };
151 
152 #endif
CscPeakThresholdClusterBuilderTool::m_qpeak_threshold_eta
double m_qpeak_threshold_eta
Definition: CscPeakThresholdClusterBuilderTool.h:106
Muon::MuonPrepDataContainer
Template for Muon PRD containers (which are basically collections of MuonPrepDataCollections).
Definition: MuonPrepDataContainer.h:42
ICscClusterBuilder.h
Trk::PrepRawDataType::CscStripPrepData
@ CscStripPrepData
CscPeakThresholdClusterBuilderTool::m_cluster_handle
SG::WriteHandle< Muon::CscPrepDataContainer > m_cluster_handle
Definition: CscPeakThresholdClusterBuilderTool.h:111
CscPeakThresholdClusterBuilderTool::m_q3sum_threshold_eta
double m_q3sum_threshold_eta
Definition: CscPeakThresholdClusterBuilderTool.h:108
ICscClusterBuilder
Definition: ICscClusterBuilder.h:27
CscPeakThresholdClusterBuilderTool::m_qpeak_threshold_phi
double m_qpeak_threshold_phi
Definition: CscPeakThresholdClusterBuilderTool.h:107
CscPeakThresholdClusterBuilderTool::getClusters
StatusCode getClusters(std::vector< IdentifierHash > &idVect, std::vector< IdentifierHash > &selectedIdVect, Muon::CscPrepDataContainer *object)
Definition: CscPeakThresholdClusterBuilderTool.cxx:124
MuonPrepDataContainer.h
SG::ReadHandleKey
Property holding a SG store/key/clid from which a ReadHandle is made.
Definition: StoreGate/StoreGate/ReadHandleKey.h:39
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
CscPeakThresholdClusterBuilderTool
Definition: CscPeakThresholdClusterBuilderTool.h:73
python.Dumpers.aname
string aname
Definition: Dumpers.py:5541
Trk::PrepRawDataType::CscPrepData
@ CscPrepData
ICscClusterFitter.h
Muon::CscPrepData
Class representing clusters from the CSC.
Definition: CscPrepData.h:39
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CscDigit
Definition: CscDigit.h:17
AthAlgTool.h
CscPeakThresholdClusterBuilderTool::m_pfitter_split
ToolHandle< ICscClusterFitter > m_pfitter_split
Definition: CscPeakThresholdClusterBuilderTool.h:131
CscPeakThresholdClusterBuilderTool::make_clusters
int make_clusters(bool measphi, const std::vector< const Muon::CscStripPrepData * > &strips, Muon::CscPrepDataCollection *&collection)
Definition: CscPeakThresholdClusterBuilderTool.cxx:338
CscPeakThresholdClusterBuilderTool::initialize
StatusCode initialize()
AlgTool InterfaceID.
Definition: CscPeakThresholdClusterBuilderTool.cxx:86
Muon::MuonPrepDataCollection
Template to hold collections of MuonPrepRawData objects.
Definition: MuonPrepDataCollection.h:46
CscPeakThresholdClusterBuilderTool::m_pfitter_prec
ToolHandle< ICscClusterFitter > m_pfitter_prec
Definition: CscPeakThresholdClusterBuilderTool.h:126
CscPeakThresholdClusterBuilderTool::m_pstrip_fitter
ToolHandle< ICscStripFitter > m_pstrip_fitter
Definition: CscPeakThresholdClusterBuilderTool.h:114
CscPeakThresholdClusterBuilderTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: CscPeakThresholdClusterBuilderTool.h:137
CscPeakThresholdClusterBuilderTool::m_q3sum_threshold_phi
double m_q3sum_threshold_phi
Definition: CscPeakThresholdClusterBuilderTool.h:109
CscPeakThresholdClusterBuilderTool::m_pfitter_def
ToolHandle< ICscClusterFitter > m_pfitter_def
Definition: CscPeakThresholdClusterBuilderTool.h:121
MuonDetectorManager.h
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager >
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
CscPeakThresholdClusterBuilderTool::finalize
StatusCode finalize()
Definition: CscPeakThresholdClusterBuilderTool.cxx:324
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
CscPeakThresholdClusterBuilderTool::~CscPeakThresholdClusterBuilderTool
~CscPeakThresholdClusterBuilderTool()
ICscStripFitter.h
MyCscDigit
Muon::CscPrepData MyCscDigit
Definition: CscPeakThresholdClusterBuilderTool.h:70
CscPeakThresholdClusterBuilderTool::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
retrieve MuonDetectorManager from the conditions store
Definition: CscPeakThresholdClusterBuilderTool.h:144
AthAlgTool
Definition: AthAlgTool.h:26
IdentifierHash
Definition: IdentifierHash.h:38
CscPeakThresholdClusterBuilderTool::m_digit_key
SG::ReadHandleKey< Muon::CscStripPrepDataContainer > m_digit_key
Definition: CscPeakThresholdClusterBuilderTool.h:110
IMuonIdHelperSvc.h
CscPeakThresholdClusterBuilderTool::CscPeakThresholdClusterBuilderTool
CscPeakThresholdClusterBuilderTool(const std::string &type, const std::string &aname, const IInterface *)
Definition: CscPeakThresholdClusterBuilderTool.cxx:66
ServiceHandle< Muon::IMuonIdHelperSvc >