File indexing completed on 2023-03-17 11:20:48
0001 #ifndef RecoMuon_MuonSeedValidator_H
0002 #define RecoMuon_MuonSeedValidator_H
0003
0004
0005
0006
0007
0008
0009
0010 #include "MuonSeedValidatorHisto.h"
0011 #include "SegSelector.h"
0012
0013 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0014 #include "FWCore/Framework/interface/ESHandle.h"
0015 #include <DataFormats/Common/interface/Handle.h>
0016 #include "FWCore/Utilities/interface/InputTag.h"
0017
0018 #include <DataFormats/MuonDetId/interface/CSCDetId.h>
0019 #include <DataFormats/MuonDetId/interface/DTChamberId.h>
0020 #include <DataFormats/CSCRecHit/interface/CSCRecHit2D.h>
0021 #include <DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h>
0022 #include <DataFormats/CSCRecHit/interface/CSCSegment.h>
0023 #include <DataFormats/CSCRecHit/interface/CSCSegmentCollection.h>
0024 #include <DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h>
0025 #include <DataFormats/DTRecHit/interface/DTRecSegment4D.h>
0026 #include <DataFormats/DTRecHit/interface/DTRecSegment2DCollection.h>
0027 #include <DataFormats/DTRecHit/interface/DTRecSegment2D.h>
0028 #include <DataFormats/DTRecHit/interface/DTRecHitCollection.h>
0029 #include <DataFormats/DTRecHit/interface/DTRecHit1D.h>
0030 #include <DataFormats/TrackReco/interface/Track.h>
0031 #include <DataFormats/TrackReco/interface/TrackFwd.h>
0032 #include <DataFormats/TrackReco/interface/TrackExtra.h>
0033 #include <SimDataFormats/Track/interface/SimTrackContainer.h>
0034 #include <SimDataFormats/TrackingHit/interface/PSimHitContainer.h>
0035 #include <DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h>
0036 #include <DataFormats/TrajectorySeed/interface/TrajectorySeed.h>
0037 #include <DataFormats/TrackingRecHit/interface/TrackingRecHit.h>
0038
0039 #include <Geometry/CSCGeometry/interface/CSCGeometry.h>
0040 #include <Geometry/CSCGeometry/interface/CSCChamber.h>
0041 #include <Geometry/CSCGeometry/interface/CSCLayer.h>
0042 #include <Geometry/CSCGeometry/interface/CSCLayerGeometry.h>
0043 #include <Geometry/DTGeometry/interface/DTGeometry.h>
0044 #include <Geometry/DTGeometry/interface/DTChamber.h>
0045 #include <Geometry/DTGeometry/interface/DTLayer.h>
0046 #include <Geometry/Records/interface/MuonGeometryRecord.h>
0047
0048 #include <RecoMuon/TrackingTools/interface/MuonServiceProxy.h>
0049 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0050 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0051 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0052 #include "DataFormats/GeometryVector/interface/LocalVector.h"
0053
0054 #include <vector>
0055 #include <map>
0056 #include <string>
0057 #include <utility>
0058
0059 namespace edm {
0060 class ParameterSet;
0061 class Event;
0062 class EventSetup;
0063 }
0064
0065
0066 class TFile;
0067 class CSCLayer;
0068 class CSCDetId;
0069 class DTLayerId;
0070 class DTSuperLayerId;
0071 class DTChamberId;
0072 class SegSelector;
0073
0074
0075 class MuonSeedValidator : public edm::one::EDAnalyzer<> {
0076 public:
0077
0078 MuonSeedValidator(const edm::ParameterSet &pset);
0079
0080
0081 virtual ~MuonSeedValidator();
0082
0083
0084
0085 void analyze(const edm::Event &event, const edm::EventSetup &eventSetup);
0086
0087 protected:
0088 private:
0089 SegSelector *recsegSelector;
0090 MuonServiceProxy *theService;
0091
0092
0093
0094 void CSCsegment_stat(edm::Handle<CSCSegmentCollection> cscSeg,
0095 edm::ESHandle<CSCGeometry> cscGeom,
0096 double trkEta,
0097 double trkPhi);
0098 void DTsegment_stat(edm::Handle<DTRecSegment4DCollection> dtSeg,
0099 edm::ESHandle<DTGeometry> dtGeom,
0100 double trkEta,
0101 double trkPhi);
0102 void Simsegment_stat(std::vector<SimSegment> sCSC_v, std::vector<SimSegment> sDT_v);
0103
0104 void CSCRecHit_Stat(edm::Handle<CSCRecHit2DCollection> cscrechit,
0105 edm::ESHandle<CSCGeometry> cscGeom,
0106 double trkEta,
0107 double trkPhi);
0108 void DTRecHit_Stat(edm::Handle<DTRecHitCollection> dtrechit,
0109 edm::ESHandle<DTGeometry> dtGeom,
0110 double trkEta,
0111 double trkPhi);
0112
0113 int ChargeAssignment(GlobalVector Va, GlobalVector Vb);
0114
0115 void RecSeedReader(edm::Handle<TrajectorySeedCollection> rec_seeds);
0116 void SegOfRecSeed(edm::Handle<TrajectorySeedCollection> rec_seeds,
0117 int seed_idx,
0118 std::vector<SimSegment> sCSC_v,
0119 std::vector<SimSegment> sDT_v);
0120 void SegOfRecSeed(edm::Handle<TrajectorySeedCollection> rec_seeds, int seed_idx);
0121
0122 void StaTrackReader(edm::Handle<reco::TrackCollection> sta_trk, int sta_glb);
0123 void SimInfo(const edm::Handle<edm::SimTrackContainer> simTracks,
0124 const edm::Handle<edm::PSimHitContainer> dsimHits,
0125 const edm::Handle<edm::PSimHitContainer> csimHits,
0126 edm::ESHandle<DTGeometry> dtGeom,
0127 edm::ESHandle<CSCGeometry> cscGeom);
0128 int RecSegReader(edm::Handle<CSCSegmentCollection> cscSeg,
0129 edm::Handle<DTRecSegment4DCollection> dtSeg,
0130 edm::ESHandle<CSCGeometry> cscGeom,
0131 edm::ESHandle<DTGeometry> dtGeom,
0132 double trkEta,
0133 double trkPhi);
0134
0135 double getEta(double vx, double vy, double vz);
0136 double getEta(double theta);
0137
0138 std::vector<int> IdentifyShowering(edm::Handle<CSCSegmentCollection> cscSeg,
0139 edm::ESHandle<CSCGeometry> cscGeom,
0140 edm::Handle<DTRecSegment4DCollection> dtSeg,
0141 edm::ESHandle<DTGeometry> dtGeom,
0142 double trkTheta,
0143 double trkPhi);
0144 double getdR(std::vector<double> etav, std::vector<double> phiv);
0145
0146
0147 H2DRecHit1 *h_all;
0148 H2DRecHit2 *h_NoSeed;
0149 H2DRecHit3 *h_NoSta;
0150 H2DRecHit4 *h_Scope;
0151 H2DRecHit5 *h_UnRel;
0152
0153
0154 TFile *theFile;
0155
0156
0157 int cscseg_stat[6];
0158 int cscseg_stat1[6];
0159
0160
0161 int dtseg_stat[6];
0162 int dtseg_stat1[6];
0163
0164
0165 int simcscseg[6];
0166 int simdtseg[6];
0167 int simseg_sum;
0168 double simseg_eta;
0169
0170
0171 int cscrh_sum[6];
0172 int dtrh_sum[6];
0173
0174
0175 int nu_seed;
0176 std::vector<int> nSegInSeed;
0177 std::vector<GlobalPoint> seed_gp;
0178 std::vector<GlobalVector> seed_gm;
0179 std::vector<LocalVector> seed_lv;
0180 std::vector<LocalPoint> seed_lp;
0181
0182 std::vector<double> qbp;
0183 std::vector<double> qbpt;
0184 std::vector<double> err_qbp;
0185 std::vector<double> err_qbpt;
0186 std::vector<double> seed_mT;
0187 std::vector<double> seed_mA;
0188 std::vector<int> seed_layer;
0189 std::vector<double> err_dx;
0190 std::vector<double> err_dy;
0191 std::vector<double> err_x;
0192 std::vector<double> err_y;
0193
0194
0195 std::vector<double> d_h;
0196 std::vector<double> d_f;
0197 std::vector<double> d_x;
0198 std::vector<double> d_y;
0199 std::vector<DetId> geoID;
0200
0201
0202 int nu_sta;
0203
0204 std::vector<double> sta_phiP;
0205 std::vector<double> sta_thetaP;
0206
0207 std::vector<GlobalVector> sta_gm;
0208 std::vector<double> sta_qbp;
0209 std::vector<double> sta_qbpt;
0210 std::vector<double> sta_thetaV;
0211 std::vector<double> sta_phiV;
0212 std::vector<double> sta_mT;
0213 std::vector<double> sta_mA;
0214 std::vector<double> sta_chi2;
0215 std::vector<int> sta_nHits;
0216
0217
0218 double ave_phi;
0219 double ave_eta;
0220 std::vector<double> phi_resid;
0221 std::vector<double> eta_resid;
0222 std::vector<double> dx_error;
0223 std::vector<double> dy_error;
0224 std::vector<double> x_error;
0225 std::vector<double> y_error;
0226
0227
0228 typedef std::vector<double> layer_pt;
0229 typedef std::vector<double> layer_pa;
0230
0231 std::vector<double> theta_v;
0232 std::vector<double> theta_p;
0233 std::vector<double> phi_v;
0234 std::vector<double> phi_p;
0235
0236 std::vector<double> eta_trk;
0237 std::vector<double> theta_trk;
0238 std::vector<double> phi_trk;
0239
0240 std::vector<double> theQ;
0241 std::vector<double> pt_trk;
0242 std::vector<layer_pt> ptlayer;
0243 std::vector<layer_pa> palayer;
0244 std::vector<int> trackID;
0245
0246
0247 std::vector<double> muCone;
0248
0249
0250 std::string rootFileName;
0251 std::string cscSegmentLabel;
0252 std::string recHitLabel;
0253 std::string dtSegmentLabel;
0254 std::string dtrecHitLabel;
0255 std::string simHitLabel;
0256 std::string simTrackLabel;
0257 std::string muonseedLabel;
0258 edm::InputTag staTrackLabel;
0259 edm::InputTag glbTrackLabel;
0260
0261 bool debug;
0262 double dtMax;
0263 double dfMax;
0264
0265 bool scope;
0266 double pTCutMax;
0267 double pTCutMin;
0268 double eta_Low;
0269 double eta_High;
0270
0271 const edm::ESGetToken<CSCGeometry, MuonGeometryRecord> cscGeomToken;
0272 const edm::ESGetToken<DTGeometry, MuonGeometryRecord> dtGeomToken;
0273 };
0274
0275 #endif