Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef RecoMuon_SegSelector_H
0002 #define RecoMuon_SegSelector_H
0003 
0004 /** \class SegSelector
0005  *
0006  *  Author: S.C. Kao  - UC Riverside
0007  */
0008 
0009 #include "FWCore/Framework/interface/FrameworkfwdMostUsed.h"
0010 #include "FWCore/Framework/interface/ESHandle.h"
0011 #include <DataFormats/Common/interface/Handle.h>
0012 
0013 #include <DataFormats/MuonDetId/interface/CSCDetId.h>
0014 #include <DataFormats/MuonDetId/interface/DTChamberId.h>
0015 #include <DataFormats/CSCRecHit/interface/CSCRecHit2D.h>
0016 #include <DataFormats/CSCRecHit/interface/CSCRecHit2DCollection.h>
0017 #include <DataFormats/CSCRecHit/interface/CSCSegment.h>
0018 #include <DataFormats/CSCRecHit/interface/CSCSegmentCollection.h>
0019 #include <DataFormats/DTRecHit/interface/DTRecSegment4DCollection.h>
0020 #include <DataFormats/DTRecHit/interface/DTRecSegment4D.h>
0021 #include <DataFormats/DTRecHit/interface/DTRecSegment2DCollection.h>
0022 #include <DataFormats/DTRecHit/interface/DTRecSegment2D.h>
0023 #include <DataFormats/DTRecHit/interface/DTRecHitCollection.h>
0024 #include <DataFormats/DTRecHit/interface/DTRecHit1D.h>
0025 
0026 #include <SimDataFormats/Track/interface/SimTrackContainer.h>
0027 #include <SimDataFormats/TrackingHit/interface/PSimHitContainer.h>
0028 
0029 #include <Geometry/CSCGeometry/interface/CSCGeometry.h>
0030 #include <Geometry/CSCGeometry/interface/CSCChamber.h>
0031 #include <Geometry/CSCGeometry/interface/CSCLayer.h>
0032 #include <Geometry/CSCGeometry/interface/CSCLayerGeometry.h>
0033 #include <Geometry/DTGeometry/interface/DTGeometry.h>
0034 #include <Geometry/DTGeometry/interface/DTChamber.h>
0035 #include <Geometry/DTGeometry/interface/DTLayer.h>
0036 #include <Geometry/Records/interface/MuonGeometryRecord.h>
0037 
0038 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0039 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0040 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0041 #include "DataFormats/GeometryVector/interface/LocalVector.h"
0042 
0043 #include <vector>
0044 #include <map>
0045 #include <string>
0046 #include <utility>
0047 
0048 //class PSimHit;
0049 class CSCLayer;
0050 class CSCDetId;
0051 class DTLayerId;
0052 class DTSuperLayerId;
0053 class DTChamberId;
0054 
0055 // Sim_CSCSegments products
0056 struct SimSegment {
0057   int chamber_type;  // DT =2 , CSC = 1
0058   CSCDetId csc_DetId;
0059   DTChamberId dt_DetId;
0060   LocalPoint sLocalOrg;
0061   GlobalVector sGlobalVec;
0062   GlobalPoint sGlobalOrg;
0063   std::vector<PSimHit> simhit_v;
0064 };
0065 
0066 class SegSelector {
0067 public:
0068   /// Constructor
0069   explicit SegSelector(const edm::ParameterSet& pset);
0070   //SegSelector();
0071 
0072   /// Destructor
0073   virtual ~SegSelector();
0074   //~SegSelector();
0075 
0076   // Operations
0077 
0078   /// for EDAnalyzer
0079   //void analyze(const edm::Event & event, const edm::EventSetup& eventSetup);
0080 
0081   // Functions
0082   /// return the sim segments sCSC_v and sDT_v
0083   std::vector<SimSegment> Sim_CSCSegments(int trkId,
0084                                           const edm::Handle<edm::PSimHitContainer> simHits,
0085                                           edm::ESHandle<CSCGeometry> cscGeom);
0086   std::vector<SimSegment> Sim_DTSegments(int trkId,
0087                                          const edm::Handle<edm::PSimHitContainer> simHits,
0088                                          edm::ESHandle<DTGeometry> dtGeom);
0089   /// return the reco segments cscseg_V and dtseg_V which map to the sim segment
0090   std::vector<CSCSegment> Select_CSCSeg(edm::Handle<CSCSegmentCollection> cscSeg,
0091                                         edm::ESHandle<CSCGeometry> cscGeom,
0092                                         std::vector<SimSegment> simseg);
0093   std::vector<DTRecSegment4D> Select_DTSeg(edm::Handle<DTRecSegment4DCollection> dtSeg,
0094                                            edm::ESHandle<DTGeometry> dtGeom,
0095                                            std::vector<SimSegment> simseg);
0096 
0097 protected:
0098 private:
0099   // Utility functions
0100   void CSCSimHitFit(edm::ESHandle<CSCGeometry> cscGeom);
0101   void DTSimHitFit(edm::ESHandle<DTGeometry> dtGeom);
0102 
0103   void LongCSCSegment(std::vector<CSCSegment> cscsegs);
0104   void LongDTSegment(std::vector<DTRecSegment4D> dtsegs);
0105 
0106   // sim segment output
0107   std::vector<SimSegment> sDT_v;
0108   std::vector<SimSegment> sCSC_v;
0109 
0110   // LongSegment
0111   std::vector<CSCSegment> longsegV;
0112   std::vector<DTRecSegment4D> longsegV1;
0113 
0114   // Select_DTSeg ouput
0115   std::vector<DTRecSegment4D> dtseg_V;
0116   // Select_CSCSeg output
0117   std::vector<CSCSegment> cscseg_V;
0118 
0119   // SimHitFit DT
0120   LocalVector LSimVec1;
0121   LocalPoint LSimOrg1;
0122   GlobalVector GSimVec1;
0123   GlobalPoint GSimOrg1;
0124 
0125   // SimHitFit variables
0126   std::vector<PSimHit> hit_V1;
0127   std::vector<PSimHit> hit_V;
0128   double par1[2];
0129   double par2[2];
0130   LocalVector LSimVec;
0131   LocalPoint LSimOrg;
0132   GlobalVector GSimVec;
0133   GlobalPoint GSimOrg;
0134 
0135   // Switch for debug output
0136   bool debug;
0137 
0138   std::string cscSegmentLabel;
0139   std::string recHitLabel;
0140   std::string dtSegmentLabel;
0141   std::string dtrecHitLabel;
0142   std::string simHitLabel;
0143   std::string simTrackLabel;
0144 };
0145 
0146 #endif