CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/src/DataFormats/TauReco/interface/PFTauDecayMode.h

Go to the documentation of this file.
00001 #ifndef DataFormats_TauReco_PFTauDecayMode_h
00002 #define DataFormats_TauReco_PFTauDecayMode_h
00003 
00004 /* class PFTauDecayMode
00005  * 
00006  * Stores information for determing the type of hadronic decay of a tau lepton
00007  *
00008  * Associated to a reco::PFTau object
00009  * Provides functionality for:
00010  *      - merging gamma candidates into candidate PiZeroes
00011  *      - indexing reconstructed hadronic decay mode
00012  *      - computing vertex information for multi-prong
00013  *      - filtering suspected underlying event
00014  *                          
00015  * author: Evan K. Friis, UC Davis (evan.klose.friis@cern.ch)
00016  * created: Mon Jun 30 13:53:59 PDT 2008
00017  */
00018 
00019 #include "DataFormats/Candidate/interface/CompositeCandidate.h"
00020 #include "DataFormats/Candidate/interface/VertexCompositeCandidate.h"
00021 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h"
00022 #include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
00023 #include "DataFormats/TauReco/interface/PFTau.h"
00024 #include "DataFormats/TauReco/interface/PFTauDecayModeFwd.h"
00025 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00026 
00027 namespace reco {
00028    class PFTauDecayMode : public CompositeCandidate {
00029       public:
00030 
00031       const static unsigned char maxNumberOfPiZeroCandidatesAllowed = 4;  //to help with indexing.  changing this value necissitates changing the enum below
00032 
00033       enum hadronicTauDecayModes 
00034       {
00035          tauDecay1ChargedPion0PiZero,
00036          tauDecay1ChargedPion1PiZero,  // rho (770 MeV) mediated)
00037          tauDecay1ChargedPion2PiZero,  // a1  (1.2 GeV) mediated
00038          tauDecay1ChargedPion3PiZero,  // contaminated or unmerged photo
00039          tauDecay1ChargedPion4PiZero,  // contaminated or unmerged photo
00040          tauDecay2ChargedPion0PiZero,  // extra track or un-recod track
00041          tauDecay2ChargedPion1PiZero,  // extra track or un-recod track
00042          tauDecay2ChargedPion2PiZero,  // extra track or un-recod track
00043          tauDecay2ChargedPion3PiZero,  // extra track or un-recod track
00044          tauDecay2ChargedPion4PiZero,  // extra track or un-recod track
00045          tauDecay3ChargedPion0PiZero,  // a1  (1.2 GeV) mediated
00046          tauDecay3ChargedPion1PiZero,  // a1  (1.2 GeV) mediated
00047          tauDecay3ChargedPion2PiZero,  // a1  (1.2 GeV) mediated
00048          tauDecay3ChargedPion3PiZero,  // a1  (1.2 GeV) mediated
00049          tauDecay3ChargedPion4PiZero,  // a1  (1.2 GeV) mediated
00050          tauDecaysElectron,
00051          tauDecayMuon,
00052          tauDecayOther                 // catch-all
00053       };
00054 
00055       PFTauDecayMode(){}
00057       PFTauDecayMode( Charge q,const LorentzVector& p4,const Point & vtx = Point( 0, 0, 0 ), 
00058                       int pdgId = 12, int status = 2, bool integerCharge = true):CompositeCandidate(q, p4, vtx, pdgId, status, integerCharge){}
00059 
00061       PFTauDecayMode(const VertexCompositeCandidate&                 chargedPions, 
00062                      const CompositeCandidate&                       piZeroes,
00063                      const CompositeCandidate&                       filteredObjects);
00064 
00065       virtual ~PFTauDecayMode(){}
00066       PFTauDecayMode* clone() const;
00067 
00069       const PFTauRef& pfTauRef() const          { return pfTauRef_;  }
00070       void  setPFTauRef(const PFTauRef& theTau) { pfTauRef_ = theTau;}
00071 
00072       hadronicTauDecayModes getDecayMode() const                             { return theDecayMode_;         }
00073       void                  setDecayMode(hadronicTauDecayModes theDecayMode) { theDecayMode_ = theDecayMode; }
00074 
00076       const VertexCompositeCandidate&                   chargedPions() const;
00078       const CompositeCandidate&                         neutralPions() const;
00080       const CompositeCandidate&                         filteredObjects() const;
00081 
00083       std::vector<const Candidate*>                     chargedPionCandidates() const;
00085       std::vector<const Candidate*>                     neutralPionCandidates() const;
00087       std::vector<const Candidate*>                     decayProductCandidates() const;
00089       std::vector<const Candidate*>                     filteredObjectCandidates(int absCharge = -2) const;
00091       std::vector<const Candidate*>                     neutralFilteredObjectCandidates() const;
00093       std::vector<const Candidate*>                     chargedFilteredObjectCandidates() const;
00094 
00096       void                                              pfMasterClones(const Candidate* input, PFCandidateRefVector& toFill) const;
00097 
00099       PFCandidateRefVector                              associatedChargedPFCandidates() const;
00101       PFCandidateRefVector                              associatedNeutralPFCandidates() const;
00103       PFCandidateRefVector                              filteredPFCandidates() const;         
00104 
00105       protected:
00106       PFTauRef                                  pfTauRef_;
00107       VertexCompositeCandidate                  chargedPions_;
00108       CompositeCandidate                        piZeroes_;
00109       CompositeCandidate                        filteredObjects_;  // stores objects considered UE
00110       hadronicTauDecayModes                     theDecayMode_;
00111    };
00112 }
00113 
00114 #endif