00001 #ifndef TrackingAnalysis_TrackingTruthProducer_h
00002 #define TrackingAnalysis_TrackingTruthProducer_h
00003
00004 #include <map>
00005
00006 #include "FWCore/Framework/interface/EDProducer.h"
00007 #include "FWCore/Framework/interface/Event.h"
00008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00009
00010 #include "DataFormats/Common/interface/Handle.h"
00011 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
00012 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
00013 #include "SimDataFormats/HepMCProduct/interface/HepMCProduct.h"
00014 #include "SimDataFormats/Track/interface/SimTrack.h"
00015 #include "SimDataFormats/Vertex/interface/SimVertex.h"
00016 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
00017 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h"
00018 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
00019
00020 #include "SimGeneral/TrackingAnalysis/interface/EncodedTruthId.h"
00021
00022 #include "Utilities/Timing/interface/TimingReport.h"
00023 #include "Utilities/Timing/interface/TimerStack.h"
00024
00025 using namespace edm;
00026 using namespace std;
00027
00028 class TrackingTruthProducer : public edm::EDProducer {
00029
00030 public:
00031 explicit TrackingTruthProducer( const edm::ParameterSet & );
00032
00033
00034 private:
00035
00036 void produce( edm::Event &, const edm::EventSetup & );
00037
00038 int LayerFromDetid(const unsigned int&);
00039
00040 edm::ParameterSet conf_;
00041
00042 double distanceCut_;
00043 std::vector<std::string> dataLabels_;
00044 std::vector<std::string> hitLabelsVector_;
00045 double volumeRadius_;
00046 double volumeZ_;
00047 bool discardOutVolume_;
00048 bool mergedBremsstrahlung_;
00049 bool discardHitsFromDeltas_;
00050 std::string simHitLabel_;
00051
00052 std::string MessageCategory_;
00053
00054
00055
00056
00057 map<EncodedTruthId,EncodedTruthId> simTrack_sourceV;
00058
00059
00060 multimap<EncodedTruthId,PSimHit> simTrack_hit;
00061
00062
00063 map<EncodedTruthId,int> simTrack_tP;
00064
00066 void simTrackHitsAssociator(
00067 std::auto_ptr<MixCollection<PSimHit> > &
00068 );
00069
00071 void trackingParticleAssembler(
00072 auto_ptr<TrackingParticleCollection> &,
00073 auto_ptr<MixCollection<SimTrack> > &,
00074 Handle<edm::HepMCProduct> const &
00075 );
00076
00078 void trackingVertexAssembler(
00079 auto_ptr<TrackingParticleCollection> &,
00080 auto_ptr<TrackingVertexCollection> &,
00081 auto_ptr<MixCollection<SimTrack> > &,
00082 auto_ptr<MixCollection<SimVertex> > &,
00083 TrackingParticleRefProd &,
00084 TrackingVertexRefProd &,
00085 Handle<edm::HepMCProduct> const &
00086 );
00087
00089 void mergeBremsstrahlung(
00090 auto_ptr<TrackingParticleCollection> &,
00091 auto_ptr<TrackingVertexCollection> &,
00092 auto_ptr<TrackingParticleCollection> &,
00093 auto_ptr<TrackingVertexCollection> &,
00094 TrackingParticleRefProd &,
00095 TrackingVertexRefProd &
00096 );
00097
00098
00099
00101 bool isBremsstrahlungVertex(
00102 TrackingVertex const &,
00103 auto_ptr<TrackingParticleCollection> &
00104 );
00105
00106 };
00107
00108 #endif