File indexing completed on 2023-03-17 11:19:04
0001 #ifndef RecoLocalMuon_CSCEfficiency_H
0002 #define RecoLocalMuon_CSCEfficiency_H
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "FWCore/Framework/interface/ConsumesCollector.h"
0012 #include "FWCore/Framework/interface/Frameworkfwd.h"
0013 #include "FWCore/Framework/interface/one/EDFilter.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016 #include "DataFormats/Common/interface/Handle.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/Utilities/interface/InputTag.h"
0019 #include "FWCore/Framework/interface/EventSetup.h"
0020
0021 #include "DataFormats/CSCDigi/interface/CSCALCTDigiCollection.h"
0022 #include "DataFormats/CSCDigi/interface/CSCCLCTDigiCollection.h"
0023 #include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigiCollection.h"
0024 #include "DataFormats/CSCDigi/interface/CSCWireDigiCollection.h"
0025 #include "DataFormats/CSCDigi/interface/CSCStripDigiCollection.h"
0026 #include "DataFormats/CSCDigi/interface/CSCComparatorDigiCollection.h"
0027
0028 #include "DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h"
0029 #include "DataFormats/CSCRecHit/interface/CSCSegmentCollection.h"
0030 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0031
0032 #include "Geometry/CSCGeometry/interface/CSCGeometry.h"
0033 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0034
0035 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0036 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0037 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0038 #include "DataFormats/GeometryVector/interface/LocalVector.h"
0039
0040 #include "DataFormats/TrackReco/interface/Track.h"
0041 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0042 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
0043 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
0044
0045 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0046 #include "TrackingTools/DetLayers/interface/DetLayer.h"
0047 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0048 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
0049 #include "TrackingTools/DetLayers/interface/NavigationDirection.h"
0050 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
0051
0052 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
0053 #include "RecoMuon/TrackingTools/interface/MuonPatternRecoDumper.h"
0054
0055 #include "DataFormats/Common/interface/TriggerResults.h"
0056
0057 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
0058 #include "CLHEP/Matrix/Vector.h"
0059 #include "CLHEP/Vector/ThreeVector.h"
0060
0061 #include "TFile.h"
0062 #include "TVector3.h"
0063 #include "TProfile.h"
0064 #include "TMath.h"
0065 #include "TH1F.h"
0066 #include "TH2F.h"
0067 #include "TString.h"
0068
0069 #include <iostream>
0070 #include <iomanip>
0071 #include <fstream>
0072
0073
0074 #include <vector>
0075 #include <map>
0076 #include <string>
0077
0078 #define SQR(x) ((x) * (x))
0079
0080 #define LastCh 36
0081 #define FirstCh 1
0082 #define NumCh (LastCh - FirstCh + 1)
0083
0084 namespace edm {
0085 class ParameterSet;
0086 class Event;
0087 class EventSetup;
0088 class TriggerNames;
0089 }
0090
0091 class TFile;
0092 class CSCLayer;
0093 class CSCDetId;
0094
0095 class CSCEfficiency : public edm::one::EDFilter<> {
0096 public:
0097
0098 CSCEfficiency(const edm::ParameterSet &pset);
0099
0100
0101 ~CSCEfficiency() override;
0102
0103 private:
0104
0105 bool filter(edm::Event &event, const edm::EventSetup &eventSetup) override;
0106
0107
0108
0109 std::string rootFileName;
0110
0111
0112
0113 edm::EDGetTokenT<CSCWireDigiCollection> wd_token;
0114 edm::EDGetTokenT<CSCStripDigiCollection> sd_token;
0115 edm::EDGetTokenT<CSCALCTDigiCollection> al_token;
0116 edm::EDGetTokenT<CSCCLCTDigiCollection> cl_token;
0117 edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> co_token;
0118 edm::EDGetTokenT<CSCRecHit2DCollection> rh_token;
0119 edm::EDGetTokenT<CSCSegmentCollection> se_token;
0120
0121 edm::EDGetTokenT<edm::View<reco::Track> > tk_token;
0122 edm::EDGetTokenT<edm::PSimHitContainer> sh_token;
0123
0124 edm::EDGetTokenT<edm::TriggerResults> ht_token;
0125
0126 edm::ESGetToken<CSCGeometry, MuonGeometryRecord> geomToken_;
0127
0128
0129 unsigned int printout_NEvents;
0130 bool isData;
0131 bool isIPdata;
0132 bool isBeamdata;
0133 bool getAbsoluteEfficiency;
0134 bool useDigis;
0135 double distanceFromDeadZone;
0136 double minP;
0137 double maxP;
0138 double maxNormChi2;
0139 unsigned int minTrackHits;
0140
0141 bool applyIPangleCuts;
0142 double local_DY_DZ_Max;
0143 double local_DY_DZ_Min;
0144 double local_DX_DZ_Max;
0145
0146
0147 bool useTrigger;
0148 std::vector<std::string> myTriggers;
0149 std::vector<int> pointToTriggers;
0150 bool andOr;
0151
0152
0153 MuonServiceProxy *theService;
0154
0155 TFile *theFile;
0156
0157 bool printalot;
0158
0159 int nEventsAnalyzed;
0160
0161 bool magField;
0162
0163 bool alongZ;
0164
0165 bool passTheEvent;
0166
0167
0168
0169 bool allCLCT[2][4][4][NumCh];
0170 bool allALCT[2][4][4][NumCh];
0171 bool allCorrLCT[2][4][4][NumCh];
0172
0173
0174 std::vector<std::pair<int, float> > allStrips[2][4][4][NumCh][6];
0175
0176
0177 std::vector<std::pair<std::pair<int, float>, int> > allWG[2][4][4][NumCh][6];
0178
0179
0180
0181 std::vector<std::pair<LocalPoint, int> > allSimhits[2][4][4][NumCh][6];
0182
0183
0184
0185 std::vector<std::pair<LocalPoint, bool> > allRechits[2][4][4][NumCh][6];
0186
0187
0188 std::vector<std::pair<LocalPoint, LocalVector> > allSegments[2][4][4][NumCh];
0189
0190
0191 bool emptyChambers[2][4][4][NumCh];
0192
0193
0194 void fillDigiInfo(edm::Handle<CSCALCTDigiCollection> &alcts,
0195 edm::Handle<CSCCLCTDigiCollection> &clcts,
0196 edm::Handle<CSCCorrelatedLCTDigiCollection> &correlatedlcts,
0197 edm::Handle<CSCWireDigiCollection> &wires,
0198 edm::Handle<CSCStripDigiCollection> &strips,
0199 edm::Handle<edm::PSimHitContainer> &simhits,
0200 edm::Handle<CSCRecHit2DCollection> &rechits,
0201 edm::Handle<CSCSegmentCollection> &segments,
0202 edm::ESHandle<CSCGeometry> &cscGeom);
0203 void fillLCT_info(edm::Handle<CSCALCTDigiCollection> &alcts,
0204 edm::Handle<CSCCLCTDigiCollection> &clcts,
0205 edm::Handle<CSCCorrelatedLCTDigiCollection> &correlatedlcts);
0206 void fillWG_info(edm::Handle<CSCWireDigiCollection> &wires, edm::ESHandle<CSCGeometry> &cscGeom);
0207 void fillStrips_info(edm::Handle<CSCStripDigiCollection> &strips);
0208 void fillRechitsSegments_info(edm::Handle<CSCRecHit2DCollection> &rechits,
0209 edm::Handle<CSCSegmentCollection> &segments,
0210 edm::ESHandle<CSCGeometry> &cscGeom);
0211 void fillSimhit_info(edm::Handle<edm::PSimHitContainer> &simHits);
0212
0213 void ringCandidates(int station, float absEta, std::map<std::string, bool> &chamberTypes);
0214 void chamberCandidates(int station, int ring, float phi, std::vector<int> &coupleOfChambers);
0215
0216 bool efficienciesPerChamber(CSCDetId &id, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber);
0217 bool stripWire_Efficiencies(CSCDetId &cscDetId, FreeTrajectoryState &ftsChamber);
0218 bool recHitSegment_Efficiencies(CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber);
0219 bool recSimHitEfficiency(CSCDetId &id, FreeTrajectoryState &ftsChamber);
0220
0221 void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing);
0222
0223 void getFromFTS(const FreeTrajectoryState &fts,
0224 CLHEP::Hep3Vector &p3,
0225 CLHEP::Hep3Vector &r3,
0226 int &charge,
0227 AlgebraicSymMatrix66 &cov);
0228
0229 FreeTrajectoryState getFromCLHEP(const CLHEP::Hep3Vector &p3,
0230 const CLHEP::Hep3Vector &r3,
0231 int charge,
0232 const AlgebraicSymMatrix66 &cov,
0233 const MagneticField *field);
0234
0235 void linearExtrapolation(GlobalPoint initialPosition,
0236 GlobalVector initialDirection,
0237 float zSurface,
0238 std::vector<float> &posZY);
0239 double extrapolate1D(double initPosition, double initDirection, double parameterOfTheLine);
0240 double lineParameter(double initZPosition, double destZPosition, double initZDirection);
0241 bool inSensitiveLocalRegion(double xLocal, double yLocal, int station, int ring);
0242 bool checkLocal(double yLocal, double yBoundary, int station, int ring);
0243 void chooseDirection(CLHEP::Hep3Vector &innerPosition, CLHEP::Hep3Vector &outerPosition);
0244 const Propagator *propagator(std::string propagatorName) const;
0245 TrajectoryStateOnSurface propagate(FreeTrajectoryState &ftsStart, const BoundPlane &bp);
0246 bool applyTrigger(edm::Handle<edm::TriggerResults> &hltR, const edm::TriggerNames &triggerNames);
0247
0248
0249
0250 TH1F *DataFlow;
0251 TH1F *TriggersFired;
0252
0253 TH1F *ALCTPerEvent;
0254 TH1F *CLCTPerEvent;
0255 TH1F *recHitsPerEvent;
0256 TH1F *segmentsPerEvent;
0257
0258 struct StationHistos {
0259 TH1F *segmentChi2_ndf;
0260 TH1F *hitsInSegment;
0261 TH1F *AllSegments_eta;
0262 TH1F *EfficientSegments_eta;
0263 TH1F *ResidualSegments;
0264 TH2F *EfficientSegments_XY;
0265 TH2F *InefficientSegments_XY;
0266 TH1F *EfficientALCT_momTheta;
0267 TH1F *InefficientALCT_momTheta;
0268 TH1F *EfficientCLCT_momPhi;
0269 TH1F *InefficientCLCT_momPhi;
0270 } StHist[2][4];
0271
0272 struct ChamberHistos {
0273 TH1F *EfficientRechits_inSegment;
0274 TH1F *InefficientSingleHits;
0275 TH1F *digiAppearanceCount;
0276 TH1F *AllSingleHits;
0277 TH1F *EfficientRechits_good;
0278 TH1F *EfficientALCT_dydz;
0279 TH1F *InefficientALCT_dydz;
0280 TH1F *EfficientCLCT_dxdz;
0281 TH1F *InefficientCLCT_dxdz;
0282 TH1F *EfficientStrips;
0283 TH1F *StripWiresCorrelations;
0284 TH1F *NoWires_momTheta;
0285 TH1F *NoStrips_momPhi;
0286 TH1F *EfficientWireGroups;
0287 std::vector<TH1F *> Y_InefficientRecHits_inSegment;
0288 std::vector<TH1F *> Y_EfficientRecHits_inSegment;
0289 std::vector<TH1F *> Phi_InefficientRecHits_inSegment;
0290 std::vector<TH1F *> Phi_EfficientRecHits_inSegment;
0291
0292 TH1F *SimRechits;
0293 TH1F *SimSimhits;
0294
0295
0296
0297
0298 } ChHist[2][4][3][LastCh - FirstCh + 1];
0299 };
0300
0301 #endif