Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:27:12

0001 #ifndef RecoMuon_MuonSeedValidator_H
0002 #define RecoMuon_MuonSeedValidator_H
0003 
0004 /** \class SeedValidator
0005  *
0006  *  Author: S.C. Kao  - UC Riverside
0007  */
0008 
0009 //#include "RecoMuon/SeedGenerator/test/MuonSeedPTAnalysis/SegSelector.h"
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 //#include <Geometry/Records/interface/GlobalTrackingGeometryRecord.h>
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 }  // namespace edm
0064 
0065 //class PSimHit;
0066 class TFile;
0067 class CSCLayer;
0068 class CSCDetId;
0069 class DTLayerId;
0070 class DTSuperLayerId;
0071 class DTChamberId;
0072 class SegSelector;
0073 //class MuonSeedBuilder;
0074 
0075 class MuonSeedValidator : public edm::one::EDAnalyzer<> {
0076 public:
0077   /// Constructor
0078   MuonSeedValidator(const edm::ParameterSet &pset);
0079 
0080   /// Destructor
0081   virtual ~MuonSeedValidator();
0082 
0083   // Operations
0084   /// Perform the real analysis
0085   void analyze(const edm::Event &event, const edm::EventSetup &eventSetup);
0086 
0087 protected:
0088 private:
0089   SegSelector *recsegSelector;
0090   MuonServiceProxy *theService;
0091 
0092   // Utility functions
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   // Histograms
0147   H2DRecHit1 *h_all;
0148   H2DRecHit2 *h_NoSeed;
0149   H2DRecHit3 *h_NoSta;
0150   H2DRecHit4 *h_Scope;
0151   H2DRecHit5 *h_UnRel;
0152 
0153   // The file which will store the histos
0154   TFile *theFile;
0155 
0156   //cscsegment_stat output
0157   int cscseg_stat[6];
0158   int cscseg_stat1[6];
0159 
0160   //dtsegment_stat output
0161   int dtseg_stat[6];
0162   int dtseg_stat1[6];
0163 
0164   //sim segment_stat output
0165   int simcscseg[6];
0166   int simdtseg[6];
0167   int simseg_sum;
0168   double simseg_eta;
0169 
0170   // RecHit_stat
0171   int cscrh_sum[6];
0172   int dtrh_sum[6];
0173 
0174   // reco-seeding reader
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   // seg info from seed
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   //  track reader
0202   int nu_sta;
0203   // inner position of sta
0204   std::vector<double> sta_phiP;
0205   std::vector<double> sta_thetaP;
0206   // sta vector information
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   // Reco Segment Reader
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   // Sim info
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   // showering info
0247   std::vector<double> muCone;
0248 
0249   // Switch for debug output
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