.. _program_listing_file_Root_PhotonHists.cxx:

Program Listing for File PhotonHists.cxx
========================================

|exhale_lsh| :ref:`Return to documentation for file <file_Root_PhotonHists.cxx>` (``Root/PhotonHists.cxx``)

.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS

.. code-block:: cpp

   #include <xAODAnaHelpers/PhotonHists.h>
   #include <sstream>
   
   #include "xAODAnaHelpers/HelperFunctions.h"
   ANA_MSG_SOURCE(msgPhotonHists, "PhotonHists")
   
   PhotonHists :: PhotonHists (std::string name, std::string detailStr) :
     IParticleHists(name, detailStr, "photon", "photon"),
     m_infoSwitch(new HelperClasses::PhotonInfoSwitch(m_detailStr))
   { }
   
   PhotonHists :: ~PhotonHists () {
     if(m_infoSwitch) delete m_infoSwitch;
   }
   
   StatusCode PhotonHists::initialize() {
     using namespace msgPhotonHists;
     ANA_CHECK( IParticleHists::initialize());
   
     // isolation
     if( m_infoSwitch->m_isolation ) {
       if(m_debug) Info("PhotonHists::initialize()", "adding isolation plots");
       m_ptcone20    = book(m_name, "ptcone20" ,     "ptcone20",      120, -10, 100);
       m_ptcone30    = book(m_name, "ptcone30" ,     "ptcone30",      120, -10, 100);
       m_ptcone40    = book(m_name, "ptcone40" ,     "ptcone40",      120, -10, 100);
       m_ptvarcone20 = book(m_name, "ptvarcone20" ,  "ptvarcone20",   120, -10, 100);
       m_ptvarcone30 = book(m_name, "ptvarcone30" ,  "ptvarcone30",   120, -10, 100);
       m_ptvarcone40 = book(m_name, "ptvarcone40" ,  "ptvarcone40",   120, -10, 100);
       m_topoetcone20= book(m_name, "topoetcone20" , "topoetcone20",  120, -10, 100);
       m_topoetcone30= book(m_name, "topoetcone30" , "topoetcone30",  120, -10, 100);
       m_topoetcone40= book(m_name, "topoetcone40" , "topoetcone40",  120, -10, 100);
     }
   
     return StatusCode::SUCCESS;
   }
   
   StatusCode PhotonHists::execute( const xAOD::Photon* photon, float eventWeight, const xAOD::EventInfo* eventInfo ) {
     return execute(static_cast<const xAOD::IParticle*>(photon), eventWeight, eventInfo);
   }
   
   StatusCode PhotonHists::execute( const xAOD::IParticle* particle, float eventWeight, const xAOD::EventInfo* eventInfo ) {
     using namespace msgPhotonHists;
     ANA_CHECK( IParticleHists::execute(particle, eventWeight, eventInfo));
   
     if(m_debug) std::cout << "PhotonHists: in execute " <<std::endl;
   
     const xAOD::Photon* photon=dynamic_cast<const xAOD::Photon*>(particle);
     if(photon==0)
       {
         ANA_MSG_ERROR( "Cannot convert IParticle to Photon" );
         return StatusCode::FAILURE;
       }
   
     // isolation
     if ( m_infoSwitch->m_isolation ) {
       m_ptcone20    ->Fill( photon->isolation( xAOD::Iso::ptcone20    ) / 1e3, eventWeight );
       m_ptcone30    ->Fill( photon->isolation( xAOD::Iso::ptcone30    ) / 1e3, eventWeight );
       m_ptcone40    ->Fill( photon->isolation( xAOD::Iso::ptcone40    ) / 1e3, eventWeight );
       m_ptvarcone20 ->Fill( photon->isolation( xAOD::Iso::ptvarcone20 ) / 1e3, eventWeight );
       m_ptvarcone30 ->Fill( photon->isolation( xAOD::Iso::ptvarcone30 ) / 1e3, eventWeight );
       m_ptvarcone40 ->Fill( photon->isolation( xAOD::Iso::ptvarcone40 ) / 1e3, eventWeight );
       m_topoetcone20->Fill( photon->isolation( xAOD::Iso::topoetcone20) / 1e3, eventWeight );
       m_topoetcone30->Fill( photon->isolation( xAOD::Iso::topoetcone30) / 1e3, eventWeight );
       m_topoetcone40->Fill( photon->isolation( xAOD::Iso::topoetcone40) / 1e3, eventWeight );
     }
   
     return StatusCode::SUCCESS;
   }