File indexing completed on 2024-04-06 12:04:58
0001
0002
0003
0004 #include "DataFormats/PatCandidates/interface/Photon.h"
0005 #include "DataFormats/Common/interface/RefToPtr.h"
0006
0007 using pat::Photon;
0008
0009
0010 Photon::Photon()
0011 : PATObject<reco::Photon>(reco::Photon()),
0012 embeddedSuperCluster_(false),
0013 embeddedSeedCluster_(false),
0014 embeddedRecHits_(false),
0015 passElectronVeto_(false),
0016 hasPixelSeed_(false),
0017 seedEnergy_(0.0),
0018 eMax_(0.0),
0019 e2nd_(0.0),
0020 e3x3_(0.0),
0021 eTop_(0.0),
0022 eBottom_(0.0),
0023 eLeft_(0.0),
0024 eRight_(0.0),
0025 see_(-999.),
0026 spp_(-999.),
0027 sep_(-999.),
0028 maxDR_(-999.),
0029 maxDRDPhi_(-999.),
0030 maxDRDEta_(-999.),
0031 maxDRRawEnergy_(-999.),
0032 subClusRawE1_(-999.),
0033 subClusRawE2_(-999.),
0034 subClusRawE3_(-999.),
0035 subClusDPhi1_(-999.),
0036 subClusDPhi2_(-999.),
0037 subClusDPhi3_(-999.),
0038 subClusDEta1_(-999.),
0039 subClusDEta2_(-999.),
0040 subClusDEta3_(-999.),
0041 cryEta_(-999.),
0042 cryPhi_(-999),
0043 iEta_(-999),
0044 iPhi_(-999) {}
0045
0046
0047 Photon::Photon(const reco::Photon& aPhoton)
0048 : PATObject<reco::Photon>(aPhoton),
0049 embeddedSuperCluster_(false),
0050 embeddedSeedCluster_(false),
0051 embeddedRecHits_(false),
0052 passElectronVeto_(false),
0053 hasPixelSeed_(false),
0054 seedEnergy_(0.0),
0055 eMax_(0.0),
0056 e2nd_(0.0),
0057 e3x3_(0.0),
0058 eTop_(0.0),
0059 eBottom_(0.0),
0060 eLeft_(0.0),
0061 eRight_(0.0),
0062 see_(-999.),
0063 spp_(-999.),
0064 sep_(-999.),
0065 maxDR_(-999.),
0066 maxDRDPhi_(-999.),
0067 maxDRDEta_(-999.),
0068 maxDRRawEnergy_(-999.),
0069 subClusRawE1_(-999.),
0070 subClusRawE2_(-999.),
0071 subClusRawE3_(-999.),
0072 subClusDPhi1_(-999.),
0073 subClusDPhi2_(-999.),
0074 subClusDPhi3_(-999.),
0075 subClusDEta1_(-999.),
0076 subClusDEta2_(-999.),
0077 subClusDEta3_(-999.),
0078 cryEta_(-999.),
0079 cryPhi_(-999),
0080 iEta_(-999),
0081 iPhi_(-999) {}
0082
0083
0084 Photon::Photon(const edm::RefToBase<reco::Photon>& aPhotonRef)
0085 : PATObject<reco::Photon>(aPhotonRef),
0086 embeddedSuperCluster_(false),
0087 embeddedSeedCluster_(false),
0088 embeddedRecHits_(false),
0089 passElectronVeto_(false),
0090 hasPixelSeed_(false),
0091 seedEnergy_(0.0),
0092 eMax_(0.0),
0093 e2nd_(0.0),
0094 e3x3_(0.0),
0095 eTop_(0.0),
0096 eBottom_(0.0),
0097 eLeft_(0.0),
0098 eRight_(0.0),
0099 see_(-999.),
0100 spp_(-999.),
0101 sep_(-999.),
0102 maxDR_(-999.),
0103 maxDRDPhi_(-999.),
0104 maxDRDEta_(-999.),
0105 maxDRRawEnergy_(-999.),
0106 subClusRawE1_(-999.),
0107 subClusRawE2_(-999.),
0108 subClusRawE3_(-999.),
0109 subClusDPhi1_(-999.),
0110 subClusDPhi2_(-999.),
0111 subClusDPhi3_(-999.),
0112 subClusDEta1_(-999.),
0113 subClusDEta2_(-999.),
0114 subClusDEta3_(-999.),
0115 cryEta_(-999.),
0116 cryPhi_(-999),
0117 iEta_(-999),
0118 iPhi_(-999) {}
0119
0120
0121 Photon::Photon(const edm::Ptr<reco::Photon>& aPhotonRef)
0122 : PATObject<reco::Photon>(aPhotonRef),
0123 embeddedSuperCluster_(false),
0124 embeddedSeedCluster_(false),
0125 embeddedRecHits_(false),
0126 passElectronVeto_(false),
0127 hasPixelSeed_(false),
0128 seedEnergy_(0.0),
0129 eMax_(0.0),
0130 e2nd_(0.0),
0131 e3x3_(0.0),
0132 eTop_(0.0),
0133 eBottom_(0.0),
0134 eLeft_(0.0),
0135 eRight_(0.0),
0136 see_(-999.),
0137 spp_(-999.),
0138 sep_(-999.),
0139 maxDR_(-999.),
0140 maxDRDPhi_(-999.),
0141 maxDRDEta_(-999.),
0142 maxDRRawEnergy_(-999.),
0143 subClusRawE1_(-999.),
0144 subClusRawE2_(-999.),
0145 subClusRawE3_(-999.),
0146 subClusDPhi1_(-999.),
0147 subClusDPhi2_(-999.),
0148 subClusDPhi3_(-999.),
0149 subClusDEta1_(-999.),
0150 subClusDEta2_(-999.),
0151 subClusDEta3_(-999.),
0152 cryEta_(-999.),
0153 cryPhi_(-999),
0154 iEta_(-999),
0155 iPhi_(-999) {}
0156
0157
0158 Photon::~Photon() {}
0159
0160 std::ostream& reco::operator<<(std::ostream& out, const pat::Photon& obj) {
0161 if (!out)
0162 return out;
0163
0164 out << "\tpat::Photon: ";
0165 out << std::setiosflags(std::ios::right);
0166 out << std::setiosflags(std::ios::fixed);
0167 out << std::setprecision(3);
0168 out << " E/pT/eta/phi " << obj.energy() << "/" << obj.pt() << "/" << obj.eta() << "/" << obj.phi();
0169 return out;
0170 }
0171
0172
0173
0174 reco::SuperClusterRef Photon::superCluster() const {
0175 if (embeddedSuperCluster_) {
0176 if (embeddedSeedCluster_ || !basicClusters_.empty() || !preshowerClusters_.empty()) {
0177 if (!superClusterRelinked_.isSet()) {
0178 std::unique_ptr<std::vector<reco::SuperCluster> > sc(new std::vector<reco::SuperCluster>(superCluster_));
0179 if (embeddedSeedCluster_ && !(*sc)[0].seed().isAvailable()) {
0180 (*sc)[0].setSeed(seed());
0181 }
0182 if (!basicClusters_.empty() && !(*sc)[0].clusters().isAvailable()) {
0183 reco::CaloClusterPtrVector clusters;
0184 for (unsigned int iclus = 0; iclus < basicClusters_.size(); ++iclus) {
0185 clusters.push_back(reco::CaloClusterPtr(&basicClusters_, iclus));
0186 }
0187 (*sc)[0].setClusters(clusters);
0188 }
0189 if (!preshowerClusters_.empty() && !(*sc)[0].preshowerClusters().isAvailable()) {
0190 reco::CaloClusterPtrVector clusters;
0191 for (unsigned int iclus = 0; iclus < preshowerClusters_.size(); ++iclus) {
0192 clusters.push_back(reco::CaloClusterPtr(&preshowerClusters_, iclus));
0193 }
0194 (*sc)[0].setPreshowerClusters(clusters);
0195 }
0196 superClusterRelinked_.set(std::move(sc));
0197 }
0198 return reco::SuperClusterRef(&*superClusterRelinked_, 0);
0199 } else {
0200 return reco::SuperClusterRef(&superCluster_, 0);
0201 }
0202 } else {
0203 return reco::Photon::superCluster();
0204 }
0205 }
0206
0207
0208 reco::CaloClusterPtr Photon::seed() const {
0209 if (embeddedSeedCluster_) {
0210 return reco::CaloClusterPtr(&seedCluster_, 0);
0211 } else {
0212 return reco::Photon::superCluster()->seed();
0213 }
0214 }
0215
0216
0217 void Photon::embedSuperCluster() {
0218 superCluster_.clear();
0219 if (reco::Photon::superCluster().isNonnull()) {
0220 superCluster_.push_back(*reco::Photon::superCluster());
0221 embeddedSuperCluster_ = true;
0222 }
0223 }
0224
0225
0226 void Photon::embedSeedCluster() {
0227 seedCluster_.clear();
0228 if (reco::Photon::superCluster().isNonnull() && reco::Photon::superCluster()->seed().isNonnull()) {
0229 seedCluster_.push_back(*reco::Photon::superCluster()->seed());
0230 embeddedSeedCluster_ = true;
0231 }
0232 }
0233
0234
0235 void Photon::embedBasicClusters() {
0236 basicClusters_.clear();
0237 if (reco::Photon::superCluster().isNonnull()) {
0238 reco::CaloCluster_iterator itscl = reco::Photon::superCluster()->clustersBegin();
0239 reco::CaloCluster_iterator itsclE = reco::Photon::superCluster()->clustersEnd();
0240 for (; itscl != itsclE; ++itscl) {
0241 basicClusters_.push_back(**itscl);
0242 }
0243 }
0244 }
0245
0246
0247 void Photon::embedPreshowerClusters() {
0248 preshowerClusters_.clear();
0249 if (reco::Photon::superCluster().isNonnull()) {
0250 reco::CaloCluster_iterator itscl = reco::Photon::superCluster()->preshowerClustersBegin();
0251 reco::CaloCluster_iterator itsclE = reco::Photon::superCluster()->preshowerClustersEnd();
0252 for (; itscl != itsclE; ++itscl) {
0253 preshowerClusters_.push_back(**itscl);
0254 }
0255 }
0256 }
0257
0258
0259 void Photon::embedRecHits(const EcalRecHitCollection* rechits) {
0260 if (rechits != nullptr) {
0261 recHits_ = *rechits;
0262 embeddedRecHits_ = true;
0263 }
0264 }
0265
0266
0267 Bool_t Photon::photonID(const std::string& name) const {
0268 for (std::vector<IdPair>::const_iterator it = photonIDs_.begin(), ed = photonIDs_.end(); it != ed; ++it) {
0269 if (it->first == name)
0270 return it->second;
0271 }
0272 cms::Exception ex("Key not found");
0273 ex << "pat::Photon: the ID " << name << " can't be found in this pat::Photon.\n";
0274 ex << "The available IDs are: ";
0275 for (std::vector<IdPair>::const_iterator it = photonIDs_.begin(), ed = photonIDs_.end(); it != ed; ++it) {
0276 ex << "'" << it->first << "' ";
0277 }
0278 ex << ".\n";
0279 throw ex;
0280 }
0281
0282 bool Photon::isPhotonIDAvailable(const std::string& name) const {
0283 for (std::vector<IdPair>::const_iterator it = photonIDs_.begin(), ed = photonIDs_.end(); it != ed; ++it) {
0284 if (it->first == name)
0285 return true;
0286 }
0287 return false;
0288 }
0289
0290 edm::RefVector<pat::PackedCandidateCollection> Photon::associatedPackedPFCandidates() const {
0291 edm::RefVector<pat::PackedCandidateCollection> ret(packedPFCandidates_.id());
0292 for (uint16_t idx : associatedPackedFCandidateIndices_) {
0293 ret.push_back(edm::Ref<pat::PackedCandidateCollection>(packedPFCandidates_, idx));
0294 }
0295 return ret;
0296 }
0297
0298
0299
0300 reco::CandidatePtr Photon::sourceCandidatePtr(size_type i) const {
0301 if (i >= associatedPackedFCandidateIndices_.size()) {
0302 return reco::CandidatePtr();
0303 } else {
0304 return reco::CandidatePtr(edm::refToPtr(
0305 edm::Ref<pat::PackedCandidateCollection>(packedPFCandidates_, associatedPackedFCandidateIndices_[i])));
0306 }
0307 }