1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
#ifndef CalibTracker_SiStripHitResolution_HitResol_H
#define CalibTracker_SiStripHitResolution_HitResol_H
// system includes
#include <vector>
// user includes
#include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
#include "CalibTracker/Records/interface/SiStripQualityRcd.h"
#include "DataFormats/Common/interface/Handle.h"
#include "DataFormats/Scalers/interface/LumiScalers.h"
#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "MagneticField/Engine/interface/MagneticField.h"
#include "RecoLocalTracker/ClusterParameterEstimator/interface/StripClusterParameterEstimator.h"
#include "RecoTracker/Record/interface/CkfComponentsRecord.h"
#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
#include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"
// ROOT includes
#include "TTree.h"
#include "TROOT.h"
#include "TH1F.h"
#include "TH2F.h"
class TrackerTopology;
class HitResol : public edm::one::EDAnalyzer<edm::one::SharedResources> {
public:
explicit HitResol(const edm::ParameterSet& conf);
~HitResol() override = default;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
double checkConsistency(const StripClusterParameterEstimator::LocalValues& parameters, double xx, double xerr);
void getSimHitRes(const GeomDetUnit* det,
const LocalVector& trackdirection,
const TrackingRecHit& recHit,
float& trackWidth,
float* pitch,
LocalVector& drift);
double getSimpleRes(const TrajectoryMeasurement* traj1);
bool getPairParameters(const MagneticField* magField_,
AnalyticalPropagator& propagator,
const TrajectoryMeasurement* traj1,
const TrajectoryMeasurement* traj2,
float& pairPath,
float& hitDX,
float& trackDX,
float& trackDXE,
float& trackParamX,
float& trackParamY,
float& trackParamDXDZ,
float& trackParamDYDZ,
float& trackParamXE,
float& trackParamYE,
float& trackParamDXDZE,
float& trackParamDYDZE);
typedef std::vector<Trajectory> TrajectoryCollection;
private:
void beginJob() override;
void endJob() override;
void analyze(const edm::Event& e, const edm::EventSetup& c) override;
// ----------member data ---------------------------
// ED tokens
const edm::EDGetTokenT<LumiScalersCollection> scalerToken_;
const edm::EDGetTokenT<reco::TrackCollection> combinatorialTracks_token_;
const edm::EDGetTokenT<std::vector<Trajectory> > tjToken_;
const edm::EDGetTokenT<reco::TrackCollection> tkToken_;
// ES tokens
const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
const edm::ESGetToken<StripClusterParameterEstimator, TkStripCPERecord> cpeToken_;
const edm::ESGetToken<SiStripQuality, SiStripQualityRcd> siStripQualityToken_;
const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magFieldToken_;
// configuration parameters
const bool addLumi_;
const bool DEBUG_;
const bool cutOnTracks_;
const double momentumCut_;
const int compSettings_;
const unsigned int usePairsOnly_;
const unsigned int layers_;
const unsigned int trackMultiplicityCut_;
// output file
TTree* reso;
TTree* treso;
std::map<TString, TH2F*> histos2d_;
// conversion
static constexpr float cmToUm = 10000.f;
// counters
int events, EventTrackCKF;
// Tree declarations
// Hit Resolution Ntuple Content
float mymom;
int numHits;
int NumberOf_tracks;
float ProbTrackChi2;
float StripCPE1_smp_pos_error;
float StripCPE2_smp_pos_error;
float StripErrorSquared1;
float StripErrorSquared2;
float uerr2;
float uerr2_2;
unsigned int clusterWidth;
unsigned int clusterWidth_2;
unsigned int clusterCharge;
unsigned int clusterCharge_2;
unsigned int iidd1;
unsigned int iidd2;
unsigned int pairsOnly;
float pairPath;
float mypitch1;
float mypitch2;
float expWidth;
float expWidth_2;
float driftAlpha;
float driftAlpha_2;
float thickness;
float thickness_2;
float trackWidth;
float trackWidth_2;
float atEdge;
float atEdge_2;
float simpleRes;
float hitDX;
float trackDX;
float trackDXE;
float trackParamX;
float trackParamY;
float trackParamXE;
float trackParamYE;
float trackParamDXDZ;
float trackParamDYDZ;
float trackParamDXDZE;
float trackParamDYDZE;
float track_momentum;
float track_pt;
float track_eta;
float track_width;
float track_phi;
float track_trackChi2;
float N1;
float N2;
float N1uProj;
float N2uProj;
int Nstrips;
int Nstrips_2;
};
#endif
|