00001 #ifndef TrackRecoDeDx_DeDxDiscriminatorProducer_H
00002 #define TrackRecoDeDx_DeDxDiscriminatorProducer_H
00003
00004 #include "FWCore/Framework/interface/Frameworkfwd.h"
00005 #include "FWCore/Framework/interface/EDProducer.h"
00006
00007 #include "FWCore/Framework/interface/Event.h"
00008 #include "FWCore/Framework/interface/MakerMacros.h"
00009
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011
00012 #include "RecoTracker/DeDx/interface/BaseDeDxEstimator.h"
00013
00014 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00015 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
00016 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00017
00018 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00019 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00020 #include "Geometry/CommonTopologies/interface/StripTopology.h"
00021
00022 #include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
00023 #include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
00024 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
00025 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
00026
00027 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00028 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
00029 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00030
00031
00032
00033 #include "TFile.h"
00034 #include "TH1F.h"
00035 #include "TH2F.h"
00036 #include "TROOT.h"
00037
00038 #include <ext/hash_map>
00039
00040
00041 using namespace edm;
00042 using namespace reco;
00043 using namespace std;
00044 using namespace __gnu_cxx;
00045
00046
00047
00048
00049
00050
00051
00052 class DeDxDiscriminatorProducer : public edm::EDProducer {
00053
00054 public:
00055
00056 explicit DeDxDiscriminatorProducer(const edm::ParameterSet&);
00057 ~DeDxDiscriminatorProducer();
00058
00059 private:
00060 virtual void beginJob(const edm::EventSetup&) ;
00061 virtual void produce(edm::Event&, const edm::EventSetup&);
00062 virtual void endJob() ;
00063
00064 bool IsFarFromBorder(TrajectoryStateOnSurface trajState, const uint32_t detid, const edm::EventSetup* iSetup);
00065 double ComputeChargeOverPath(const SiStripRecHit2D* sistripsimplehit,TrajectoryStateOnSurface trajState, const edm::EventSetup* iSetup, const Track* track, double trajChi2OverN);
00066
00067
00068 edm::InputTag m_trajTrackAssociationTag;
00069 edm::InputTag m_tracksTag;
00070
00071 bool usePixel;
00072 bool useStrip;
00073 double MeVperADCPixel;
00074 double MeVperADCStrip;
00075
00076 const edm::EventSetup* iSetup_;
00077 const edm::Event* iEvent_;
00078 const TrackerGeometry* m_tracker;
00079
00080 TFile* MapFile;
00081 std::string MapFileName;
00082
00083 double MinTrackMomentum;
00084 double MaxTrackMomentum;
00085 double MinTrackEta;
00086 double MaxTrackEta;
00087 unsigned int MaxNrStrips;
00088 unsigned int MinTrackHits;
00089 double MaxTrackChiOverNdf;
00090 bool AllowSaturation;
00091
00092 bool DiscriminatorMode;
00093 unsigned int Formula;
00094
00095 InputTag TrackProducer;
00096 InputTag TrajToTrackProducer;
00097
00098 TH2F* Charge_Vs_Path_Barrel;
00099 TH2F* Charge_Vs_Path_Endcap;
00100
00101 TH2F* PCharge_Vs_Path_Barrel;
00102 TH2F* PCharge_Vs_Path_Endcap;
00103
00104 vector<float> MeasurementProbabilities;
00105
00106 private :
00107 struct stModInfo{int DetId; int SubDet; float Eta; float R; float Thickness; int NAPV; };
00108
00109 class isEqual{
00110 public:
00111 template <class T> bool operator () (const T& PseudoDetId1, const T& PseudoDetId2) { return PseudoDetId1==PseudoDetId2; }
00112 };
00113
00114 hash_map<unsigned int, stModInfo*, hash<unsigned int>, isEqual > MODsColl;
00115 };
00116
00117 #endif
00118