//////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2012-2016 Eric Conte, Benjamin Fuks // The MadAnalysis development team, email: // // This file is part of MadAnalysis 5. // Official website: // // MadAnalysis 5 is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // MadAnalysis 5 is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with MadAnalysis 5. If not, see // //////////////////////////////////////////////////////////////////////////////// #ifndef ISOLATIONCOMBINED_SERVICE_h #define ISOLATIONCOMBINED_SERVICE_h // STL headers #include // SampleAnalyzer headers #include "SampleAnalyzer/Commons/Service/IsolationBase.h" namespace MA5 { class IsolationCombined : public IsolationBase { // ------------------------------------------------------------- // data members // ------------------------------------------------------------- private: public: /// Constructor IsolationCombined() {} /// Destructor virtual ~IsolationCombined() {} virtual MAfloat64 relIsolation(const RecLeptonFormat& part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { return relIsolation(&part, event, DR, PTmin); } virtual MAfloat64 relIsolation(const RecLeptonFormat* part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { if (part==0) return 0; if (event==0) return 0; if (part->pt()<1e-9) return 999.; return sumIsolation(part,event,DR,PTmin)/part->pt(); } virtual MAfloat64 sumIsolation(const RecLeptonFormat& part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { return sumIsolation(&part, event, DR, PTmin); } virtual MAfloat64 sumIsolation(const RecLeptonFormat* part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { if (part==0) return 0; if (event==0) return 0; MAfloat64 sum=0.; sum += sumPT(part,event->tracks(),DR,PTmin); sum += sumPT(part,event->towers(),DR,PTmin); sum -= part->pt(); if (part->isElectron()) sum -= part->pt(); return sum; } virtual MAfloat64 relIsolation(const RecPhotonFormat& part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { return relIsolation(&part, event, DR, PTmin); } virtual MAfloat64 relIsolation(const RecPhotonFormat* part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { if (part==0) return 0; if (event==0) return 0; if (part->pt()<1e-9) return 999.; return sumIsolation(part,event,DR,PTmin)/part->pt(); } virtual MAfloat64 sumIsolation(const RecPhotonFormat& part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { return sumIsolation(&part, event, DR, PTmin); } virtual MAfloat64 sumIsolation(const RecPhotonFormat* part, const RecEventFormat* event, const double& DR, double PTmin=0.5) const { if (part==0) return 0; if (event==0) return 0; MAfloat64 sum=0.; sum += sumPT(part,event->tracks(),DR,PTmin); sum += sumPT(part,event->towers(),DR,PTmin); sum -= part->pt(); return sum; } // ------------------------------------------------------------- // Isolation of one collection // ------------------------------------------------------------- virtual std::vector getRelIsolated(const std::vector& leptons, const RecEventFormat* event, const double& threshold, const double& DR, double PTmin=0.5) const { std::vector isolated(leptons.size()); for (unsigned int i=0;i getRelIsolated(const std::vector& leptons, const RecEventFormat* event, const double& threshold, const double& DR, double PTmin=0.5) const { std::vector isolated; for (unsigned int i=0;ithreshold) continue; isolated.push_back(leptons[i]); } return isolated; } virtual std::vector getRelIsolated(const std::vector& photons, const RecEventFormat* event, const double& threshold, const double& DR, double PTmin=0.5) const { std::vector isolated(photons.size()); for (unsigned int i=0;i getRelIsolated(const std::vector& photons, const RecEventFormat* event, const double& threshold, const double& DR, double PTmin=0.5) const { std::vector isolated; for (unsigned int i=0;ithreshold) continue; isolated.push_back(photons[i]); } return isolated; } }; } #endif