.. _program_listing_file_Root_L1JetContainer.cxx:

Program Listing for File L1JetContainer.cxx
===========================================

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

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

.. code-block:: cpp

   #include "xAODAnaHelpers/L1JetContainer.h"
   #include <iostream>
   
   using namespace xAH;
   
   L1JetContainer::L1JetContainer(const std::string& name, float units, bool mc)
     : ParticleContainer(name,"",units,mc)
   {
     m_l1Jet_et                =new std::vector<float>();
     m_l1Jet_eta               =new std::vector<float>();
     m_l1Jet_phi               =new std::vector<float>();
   }
   
   L1JetContainer::~L1JetContainer()
   {
     if(m_debug) std::cout << " Deleting L1JetContainer "  << std::endl;
     delete m_l1Jet_et;
     delete m_l1Jet_eta;
     delete m_l1Jet_phi;
   }
   
   void L1JetContainer::setTree(TTree *tree)
   {
     ParticleContainer::setTree(tree);
     connectBranch<float>(tree,"et",&m_l1Jet_et);
     connectBranch<float>(tree,"eta",  &m_l1Jet_eta);
     connectBranch<float>(tree,"phi",  &m_l1Jet_phi);
   }
   
   void L1JetContainer::updateParticle(uint idx, Jet& jet)
   {
     ParticleContainer::updateParticle(idx,jet);
   }
   
   void L1JetContainer::setBranches(TTree *tree)
   {
     ParticleContainer::setBranches(tree);
     setBranch<float>(tree,"et",m_l1Jet_et); // et8x8 for the case of Legacy L1 jet RoIs
     setBranch<float>(tree,"eta",  m_l1Jet_eta);
     setBranch<float>(tree,"phi",  m_l1Jet_phi);
     return;
   }
   
   void L1JetContainer::clear()
   {
     ParticleContainer::clear();
     m_l1Jet_et->clear();
     m_l1Jet_eta  ->clear();
     m_l1Jet_phi  ->clear();
     return;
   }
   
   void L1JetContainer::FillLegacyL1Jets( const xAOD::JetRoIContainer* jets, bool sort){
     if(!sort) {
       for( auto jet_itr : *jets ) {
         m_l1Jet_et->push_back ( jet_itr->et8x8() / m_units );
         m_l1Jet_eta->push_back( jet_itr->eta() );
         m_l1Jet_phi->push_back( jet_itr->phi() );
       }
     } else {
       std::vector< std::vector<float> > vec;
       for( auto jet_itr : *jets ) {
         std::vector<float> row;
         row.clear();
         row.push_back(jet_itr->et8x8());
         row.push_back(jet_itr->eta());
         row.push_back(jet_itr->phi());
         vec.push_back(row);
       }
       
       std::sort(vec.begin(), vec.end(), [&](const std::vector<float> a, const std::vector<float> b) { return a.at(0) < b.at(0);});
       for (int i = int(vec.size())-1; i >= 0; i--) {
         m_l1Jet_et->push_back((vec.at(i)).at(0) / m_units);
         m_l1Jet_eta->push_back((vec.at(i)).at(1));
         m_l1Jet_phi->push_back((vec.at(i)).at(2));
       }
       vec.clear();
     }
   }