CMS 3D CMS Logo

MuonSeedsAnalyzer.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * $Date: 2008/03/25
5  18:37:05 $
6  * \author G. Mila - INFN Torino
7  */
8 
10 
19 
21 
24 
29 
30 #include <string>
31 
32 using namespace std;
33 using namespace edm;
34 
36  parameters = pSet;
37 
38  theService = new MuonServiceProxy(parameters.getParameter<ParameterSet>("ServiceParameters"));
39 
40  theSeedsCollectionLabel_ = consumes<TrajectorySeedCollection>(parameters.getParameter<InputTag>("SeedCollection"));
41 
42  seedHitBin = parameters.getParameter<int>("RecHitBin");
43  seedHitMin = parameters.getParameter<double>("RecHitMin");
44  seedHitMax = parameters.getParameter<double>("RecHitMax");
45  PhiBin = parameters.getParameter<int>("PhiBin");
46  PhiMin = parameters.getParameter<double>("PhiMin");
47  PhiMax = parameters.getParameter<double>("PhiMax");
48  EtaBin = parameters.getParameter<int>("EtaBin");
49  EtaMin = parameters.getParameter<double>("EtaMin");
50  EtaMax = parameters.getParameter<double>("EtaMax");
51  ThetaBin = parameters.getParameter<int>("ThetaBin");
52  ThetaMin = parameters.getParameter<double>("ThetaMin");
53  ThetaMax = parameters.getParameter<double>("ThetaMax");
54  seedPtBin = parameters.getParameter<int>("seedPtBin");
55  seedPtMin = parameters.getParameter<double>("seedPtMin");
56  seedPtMax = parameters.getParameter<double>("seedPtMax");
57  seedPxyzBin = parameters.getParameter<int>("seedPxyzBin");
58  seedPxyzMin = parameters.getParameter<double>("seedPxyzMin");
59  seedPxyzMax = parameters.getParameter<double>("seedPxyzMax");
60  pErrBin = parameters.getParameter<int>("pErrBin");
61  pErrMin = parameters.getParameter<double>("pErrMin");
62  pErrMax = parameters.getParameter<double>("pErrMax");
63  pxyzErrBin = parameters.getParameter<int>("pxyzErrBin");
64  pxyzErrMin = parameters.getParameter<double>("pxyzErrMin");
65  pxyzErrMax = parameters.getParameter<double>("pxyzErrMax");
66  phiErrBin = parameters.getParameter<int>("phiErrBin");
67  phiErrMin = parameters.getParameter<double>("phiErrMin");
68  phiErrMax = parameters.getParameter<double>("phiErrMax");
69  etaErrBin = parameters.getParameter<int>("etaErrBin");
70  etaErrMin = parameters.getParameter<double>("etaErrMin");
71  etaErrMax = parameters.getParameter<double>("etaErrMax");
72 }
73 MuonSeedsAnalyzer::~MuonSeedsAnalyzer() { delete theService; }
75  ibooker.cd();
76  ibooker.setCurrentFolder("Muons/MuonSeedsAnalyzer");
77 
78  string histname = "NumberOfRecHitsPerSeed_";
79  NumberOfRecHitsPerSeed = ibooker.book1D(histname, "Number of seed recHits", seedHitBin, seedHitMin, seedHitMax);
80 
81  histname = "seedPhi_";
82  seedPhi = ibooker.book1D(histname, "Seed #phi", PhiBin, PhiMin, PhiMax);
83  seedPhi->setAxisTitle("rad");
84 
85  histname = "seedEta_";
86  seedEta = ibooker.book1D(histname, "Seed #eta", EtaBin, EtaMin, EtaMax);
87 
88  histname = "seedTheta_";
89  seedTheta = ibooker.book1D(histname, "Seed #theta", ThetaBin, ThetaMin, ThetaMax);
90  seedTheta->setAxisTitle("rad");
91 
92  histname = "seedPt_";
93  seedPt = ibooker.book1D(histname, "Seed p_{t}", seedPtBin, seedPtMin, seedPtMax);
94  seedPt->setAxisTitle("GeV");
95 
96  histname = "seedPx_";
97  seedPx = ibooker.book1D(histname, "Seed p_{x}", seedPxyzBin, seedPxyzMin, seedPxyzMax);
98  seedPx->setAxisTitle("GeV");
99  histname = "seedPy_";
100  seedPy = ibooker.book1D(histname, "Seed p_{y}", seedPxyzBin, seedPxyzMin, seedPxyzMax);
101  seedPy->setAxisTitle("GeV");
102  histname = "seedPz_";
103  seedPz = ibooker.book1D(histname, "Seed p_{z}", seedPxyzBin, seedPxyzMin, seedPxyzMax);
104  seedPz->setAxisTitle("GeV");
105 
106  histname = "seedPtErrOverPt_";
107  seedPtErr = ibooker.book1D(histname, "Seed p_{t}Err/p_{t}", pErrBin, pErrMin, pErrMax);
108  histname = "seedPtErrOverPtVsPhi_";
109  seedPtErrVsPhi =
110  ibooker.book2D(histname, "Seed p_{t}Err/p_{t} vs #phi", PhiBin, PhiMin, PhiMax, pErrBin, pErrMin, pErrMax);
111  seedPtErrVsPhi->setAxisTitle("rad", 2);
112  histname = "seedPtErrOverPtVsEta_";
113  seedPtErrVsEta =
114  ibooker.book2D(histname, "Seed p_{t}Err/p_{t} vs #eta", EtaBin, EtaMin, EtaMax, pErrBin, pErrMin, pErrMax);
115  histname = "seedPtErrOverPtVsPt_";
116  seedPtErrVsPt = ibooker.book2D(
117  histname, "Seed p_{t}Err/p_{t} vs p_{t}", seedPtBin / 5, seedPtMin, seedPtMax, pErrBin, pErrMin, pErrMax);
118  seedPtErrVsPt->setAxisTitle("GeV", 2);
119  histname = "seedPErrOverP_";
120  seedPErr = ibooker.book1D(histname, "Seed pErr/p", pErrBin, pErrMin, pErrMax);
121  histname = "seedPErrOverPVsPhi_";
122  seedPErrVsPhi = ibooker.book2D(histname, "Seed pErr/p vs #phi", PhiBin, PhiMin, PhiMax, pErrBin, pErrMin, pErrMax);
123  seedPErrVsPhi->setAxisTitle("rad", 2);
124  histname = "seedPErrOverPVsEta_";
125  seedPErrVsEta = ibooker.book2D(histname, "Seed pErr/p vs #eta", EtaBin, EtaMin, EtaMax, pErrBin, pErrMin, pErrMax);
126  histname = "seedPErrOverPVsPt_";
127  seedPErrVsPt =
128  ibooker.book2D(histname, "Seed pErr/p vs p_{t}", seedPtBin / 5, seedPtMin, seedPtMax, pErrBin, pErrMin, pErrMax);
129  seedPErrVsPt->setAxisTitle("GeV", 2);
130 
131  histname = "seedPxErrOverPx_";
132  seedPxErr = ibooker.book1D(histname, "Seed p_{x}Err/p_{x}", pxyzErrBin, pxyzErrMin, pxyzErrMax);
133  histname = "seedPyErrOverPy_";
134  seedPyErr = ibooker.book1D(histname, "Seed p_{y}Err/p_{y}", pxyzErrBin, pxyzErrMin, pxyzErrMax);
135  histname = "seedPzErrOverPz_";
136  seedPzErr = ibooker.book1D(histname, "Seed p_{z}Err/p_{z}", pxyzErrBin, pxyzErrMin, pxyzErrMax);
137 
138  histname = "seedPhiErr_";
139  seedPhiErr = ibooker.book1D(histname, "Seed #phi error", phiErrBin, phiErrMin, phiErrMax);
140 
141  histname = "seedEtaErr_";
142  seedEtaErr = ibooker.book1D(histname, "Seed #eta error", etaErrBin, etaErrMin, etaErrMax);
143 }
144 
146  theService->update(iSetup);
147 
148  // Take the seeds container
150  iEvent.getByToken(theSeedsCollectionLabel_, seeds);
151 
152  // if not valid, skip
153  if (!seeds.isValid())
154  return;
155 
156  for (TrajectorySeedCollection::const_iterator seed = seeds->begin(); seed != seeds->end(); ++seed) {
157  // const TrajectorySeed sd = *seed;
158 
159  // Get the Trajectory State on Det (persistent version of a TSOS) from the seed
160  PTrajectoryStateOnDet pTSOD = seed->startingState();
161 
162  // Transform it in a TrajectoryStateOnSurface
163  DetId seedDetId(pTSOD.detId());
164  const GeomDet* gdet = theService->trackingGeometry()->idToDet(seedDetId);
165  TrajectoryStateOnSurface seedTSOS =
166  trajectoryStateTransform::transientState(pTSOD, &(gdet->surface()), &*(theService)->magneticField());
168  double partialPterror =
169  errors(3, 3) * pow(seedTSOS.globalMomentum().x(), 2) + errors(4, 4) * pow(seedTSOS.globalMomentum().y(), 2);
170 
171  LogTrace(metname) << "[MuonSeedAnalyzer] Filling the histos";
172 
173  // nhits
174  LogTrace(metname) << "Number od recHits per seed: " << seed->nHits();
175  NumberOfRecHitsPerSeed->Fill(seed->nHits());
176 
177  // pt
178  LogTrace(metname) << "seed momentum: " << seedTSOS.globalMomentum().perp();
179  seedPt->Fill(seedTSOS.globalMomentum().perp());
180 
181  // px
182  LogTrace(metname) << "seed px: " << seedTSOS.globalMomentum().x();
183  seedPx->Fill(seedTSOS.globalMomentum().x());
184 
185  // py
186  LogTrace(metname) << "seed py: " << seedTSOS.globalMomentum().y();
187  seedPy->Fill(seedTSOS.globalMomentum().y());
188 
189  // pz
190  LogTrace(metname) << "seed pz: " << seedTSOS.globalMomentum().z();
191  seedPz->Fill(seedTSOS.globalMomentum().z());
192 
193  // phi
194  LogTrace(metname) << "seed phi: " << seedTSOS.globalMomentum().phi();
195  seedPhi->Fill(seedTSOS.globalMomentum().phi());
196 
197  // theta
198  LogTrace(metname) << "seed theta: " << seedTSOS.globalMomentum().theta();
199  seedTheta->Fill(seedTSOS.globalMomentum().theta());
200 
201  // eta
202  LogTrace(metname) << "seed eta: " << seedTSOS.globalMomentum().eta();
203  seedEta->Fill(seedTSOS.globalMomentum().eta());
204 
205  // pt err
206  LogTrace(metname) << "seed pt error: " << sqrt(partialPterror) / seedTSOS.globalMomentum().perp();
207  seedPtErr->Fill(sqrt(partialPterror) / seedTSOS.globalMomentum().perp());
208 
209  // ptErr/pt Vs phi
210  seedPtErrVsPhi->Fill(seedTSOS.globalMomentum().phi(), sqrt(partialPterror) / seedTSOS.globalMomentum().perp());
211  // ptErr/pt Vs eta
212  seedPtErrVsEta->Fill(seedTSOS.globalMomentum().eta(), sqrt(partialPterror) / seedTSOS.globalMomentum().perp());
213  // ptErr/pt Vs pt
214  seedPtErrVsPt->Fill(seedTSOS.globalMomentum().perp(), sqrt(partialPterror) / seedTSOS.globalMomentum().perp());
215 
216  // px err
217  LogTrace(metname) << "seed px error: " << sqrt(errors(3, 3)) / seedTSOS.globalMomentum().x();
218  seedPxErr->Fill(sqrt(errors(3, 3)) / seedTSOS.globalMomentum().x());
219 
220  // py err
221  LogTrace(metname) << "seed py error: " << sqrt(errors(4, 4)) / seedTSOS.globalMomentum().y();
222  seedPyErr->Fill(sqrt(errors(4, 4)) / seedTSOS.globalMomentum().y());
223 
224  // pz err
225  LogTrace(metname) << "seed pz error: " << sqrt(errors(5, 5)) / seedTSOS.globalMomentum().z();
226  seedPzErr->Fill(sqrt(errors(5, 5)) / seedTSOS.globalMomentum().z());
227 
228  // p err
229  LogTrace(metname) << "seed p error: "
230  << sqrt(partialPterror + errors(5, 5) * pow(seedTSOS.globalMomentum().z(), 2)) /
231  seedTSOS.globalMomentum().mag();
232  seedPErr->Fill(sqrt(partialPterror + errors(5, 5) * pow(seedTSOS.globalMomentum().z(), 2)) /
233  seedTSOS.globalMomentum().mag());
234 
235  // pErr/p Vs phi
236  seedPErrVsPhi->Fill(
237  seedTSOS.globalMomentum().phi(),
238  sqrt(partialPterror + errors(5, 5) * pow(seedTSOS.globalMomentum().z(), 2)) / seedTSOS.globalMomentum().mag());
239  // pErr/p Vs eta
240  seedPErrVsEta->Fill(
241  seedTSOS.globalMomentum().eta(),
242  sqrt(partialPterror + errors(5, 5) * pow(seedTSOS.globalMomentum().z(), 2)) / seedTSOS.globalMomentum().mag());
243  // pErr/p Vs pt
244  seedPErrVsPt->Fill(
245  seedTSOS.globalMomentum().perp(),
246  sqrt(partialPterror + errors(5, 5) * pow(seedTSOS.globalMomentum().z(), 2)) / seedTSOS.globalMomentum().mag());
247 
248  // phi err
249  LogTrace(metname) << "seed phi error: " << sqrt(seedTSOS.curvilinearError().matrix()(2, 2));
250  seedPhiErr->Fill(sqrt(seedTSOS.curvilinearError().matrix()(2, 2)));
251 
252  // eta err
253  LogTrace(metname) << "seed eta error: "
254  << sqrt(seedTSOS.curvilinearError().matrix()(1, 1)) * abs(sin(seedTSOS.globalMomentum().theta()));
255  seedEtaErr->Fill(sqrt(seedTSOS.curvilinearError().matrix()(1, 1)) * abs(sin(seedTSOS.globalMomentum().theta())));
256  }
257 }
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
~MuonSeedsAnalyzer() override
Destructor.
T perp() const
Definition: PV3DBase.h:69
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const std::string metname
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
const CurvilinearTrajectoryError & curvilinearError() const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
const CartesianTrajectoryError cartesianError() const
T y() const
Definition: PV3DBase.h:60
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72
int iEvent
Definition: GenABIO.cc:224
T mag() const
Definition: PV3DBase.h:64
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int detId() const
bool isValid() const
Definition: HandleBase.h:70
#define LogTrace(id)
const AlgebraicSymMatrix66 & matrix() const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
Definition: DetId.h:17
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
T eta() const
Definition: PV3DBase.h:73
void analyze(const edm::Event &, const edm::EventSetup &) override
HLT enums.
const AlgebraicSymMatrix55 & matrix() const
GlobalVector globalMomentum() const
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
Definition: errors.py:1
T x() const
Definition: PV3DBase.h:59
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
Definition: Run.h:45
MuonSeedsAnalyzer(const edm::ParameterSet &)
Constructor.
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)