Go to the documentation of this file.00001 #ifndef __PFBlockElement__
00002 #define __PFBlockElement__
00003
00004 #include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h"
00005 #include "DataFormats/ParticleFlowReco/interface/PFDisplacedTrackerVertex.h"
00006 #include "DataFormats/ParticleFlowReco/interface/PFClusterFwd.h"
00007 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00008 #include "DataFormats/MuonReco/interface/MuonFwd.h"
00009 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
00010 #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
00011 #include "DataFormats/Candidate/interface/VertexCompositeCandidate.h"
00012 #include "DataFormats/Candidate/interface/VertexCompositeCandidateFwd.h"
00013
00014 #include "DataFormats/ParticleFlowReco/interface/PFMultilinksTC.h"
00015
00016 #include <iostream>
00017
00018
00019 namespace reco {
00020 class PFBlockElementCluster;
00021 class PFBlockElementTrack;
00022
00023
00028 class PFBlockElement {
00029 public:
00030
00033 enum Type {
00034 NONE=0,
00035 TRACK=1,
00036 PS1=2,
00037 PS2=3,
00038 ECAL=4,
00039 HCAL=5,
00040 GSF=6,
00041 BREM=7,
00042 HFEM=8,
00043 HFHAD=9,
00044 SC=10
00045 };
00046
00047 enum TrackType {
00048 DEFAULT=0,
00049 T_FROM_DISP,
00050 T_TO_DISP,
00051 T_FROM_GAMMACONV,
00052 MUON,
00053 T_FROM_V0
00054 };
00055
00057 PFBlockElement(Type type=NONE) :
00058 type_(type),
00059 locked_(false),
00060 index_( static_cast<unsigned>(-1) ) {
00061 }
00062
00063
00065 virtual ~PFBlockElement() {}
00066
00068 virtual void Dump(std::ostream& out=std::cout,
00069 const char* tab=" " ) const;
00070
00072 virtual PFBlockElement* clone() const = 0;
00073
00075 void lock() {locked_ = true;}
00076
00078 void unLock() {locked_ = false;}
00079
00081 Type type() const { return type_; }
00082
00084 virtual bool trackType(TrackType trType) const { return false; }
00085
00087 virtual void setTrackType(TrackType trType, bool value) {
00088 std::cout << "Error in PFBlockElement::setTrackType : this base class method is not implemented" << std::endl;}
00089
00091 bool locked() const {return locked_;}
00092
00094 void setIndex(unsigned index) { index_ = index; }
00095
00097 unsigned index() const {return index_;}
00098
00099 virtual reco::TrackRef trackRef() const {return reco::TrackRef(); }
00100 virtual PFRecTrackRef trackRefPF() const {return PFRecTrackRef(); }
00101 virtual PFClusterRef clusterRef() const {return PFClusterRef(); }
00102 virtual PFDisplacedTrackerVertexRef displacedVertexRef(TrackType trType) const { return PFDisplacedTrackerVertexRef(); }
00103 virtual ConversionRef convRef() const { return ConversionRef();}
00104 virtual MuonRef muonRef() const { return MuonRef(); }
00105 virtual VertexCompositeCandidateRef V0Ref() const { return VertexCompositeCandidateRef(); }
00106 virtual void setDisplacedVertexRef(const PFDisplacedTrackerVertexRef& niref, TrackType trType) {
00107 std::cout << "Error in PFBlockElement::setDisplacedVertexRef : this base class method is not implemented" << std::endl;}
00108 virtual void setConversionRef(const ConversionRef& convRef, TrackType trType) {
00109 std::cout << "Error in PFBlockElement::setConversionRef : this base class method is not implemented" << std::endl;}
00110 virtual void setMuonRef(const MuonRef& muref) {
00111 std::cout << "Error in PFBlockElement::setMuonRef : this base class method is not implemented" << std::endl;}
00112 virtual void setV0Ref(const VertexCompositeCandidateRef& v0ref,TrackType trType) {
00113
00114 std::cout << "Error in PFBlockElement::setV0Ref : this base class method is not implemented" << std::endl;
00115 }
00116
00117
00118 virtual bool isSecondary() const { return false; }
00119 virtual bool isPrimary() const { return false; }
00120 virtual bool isLinkedToDisplacedVertex() const {return false;}
00121
00122 friend std::ostream& operator<<( std::ostream& out,
00123 const PFBlockElement& element );
00124
00125
00126 void setMultilinks(const PFMultiLinksTC& ml) {multilinks_ = ml;}
00127 void setIsValidMultilinks(bool isVal) {multilinks_.isValid = isVal;}
00128 void setMultilinksList(const PFMultilinksType& links) {multilinks_.linkedClusters = links;}
00129
00130 bool isMultilinksValide() const {return multilinks_.isValid;}
00131 const PFMultilinksType& getMultilinks() const {return multilinks_.linkedClusters;}
00132
00133
00134 protected:
00135
00138 Type type_;
00139
00143 bool locked_;
00144
00146 unsigned index_;
00147
00148
00149 PFMultiLinksTC multilinks_;
00150
00151
00152 };
00153 }
00154 #endif