CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/DataFormats/ParticleFlowReco/interface/PFBlockElement.h

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" // Glowinski & Gouzevitch
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     // Glowinski & Gouzevitch
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     // ! Glowinski & Gouzevitch
00133 
00134   protected:  
00135 
00138     Type     type_;
00139 
00143     bool       locked_;
00144     
00146     unsigned   index_;
00147 
00148     // Glowinski & Gouzevitch
00149     PFMultiLinksTC multilinks_;
00150     // ! Glowinski & Gouzevitch
00151   
00152   };
00153 }
00154 #endif