ATLAS Offline Software
Loading...
Searching...
No Matches
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
66namespace Muon {
67 class CscPrepData;
68 class CscStripPrepData;
69} // namespace Muon
71class CscDigit;
72
74public: // 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.
86 StatusCode initialize();
87
88 // Event processing.
89 StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect,
91
92 // Finalization.
93 StatusCode finalize();
94
95private: // 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
104private: // 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
Muon::CscPrepData MyCscDigit
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
int make_clusters(bool measphi, const std::vector< const Muon::CscStripPrepData * > &strips, Muon::CscPrepDataCollection *&collection)
CscPeakThresholdClusterBuilderTool(const std::string &type, const std::string &aname, const IInterface *)
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
retrieve MuonDetectorManager from the conditions store
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadHandleKey< Muon::CscStripPrepDataContainer > m_digit_key
StatusCode getClusters(std::vector< IdentifierHash > &idVect, std::vector< IdentifierHash > &selectedIdVect, Muon::CscPrepDataContainer *object)
SG::WriteHandle< Muon::CscPrepDataContainer > m_cluster_handle
This is a "hash" representation of an Identifier.
Class representing clusters from the CSC.
Definition CscPrepData.h:39
Class representing the raw data of one CSC strip (for clusters look at Muon::CscPrepData).
Property holding a SG store/key/clid from which a ReadHandle is made.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
MuonPrepDataCollection< CscPrepData > CscPrepDataCollection
MuonPrepDataContainerT< CscPrepData > CscPrepDataContainer