00001 #ifndef TRIG_DECISIONUNPACKERATHENA_H
00002 #define TRIG_DECISIONUNPACKERATHENA_H
00003 
00004 #include "TrigConfHLTData/HLTChain.h"
00005 #include "TrigConfL1Data/CTPConfig.h"
00006 #include "TrigSteeringEvent/Chain.h"
00007 
00008 
00009 #include "TrigDecisionTool/IDecisionUnpacker.h"
00010 #include "TrigDecisionTool/Logger.h"
00011 #include "AsgTools/AsgMessaging.h"
00012 
00013 
00014 class StoreGateSvc;
00015 
00016 namespace HLT {
00017   class TrigNavStructure;
00018 }
00019 
00020 namespace LVL1CTP{
00021   class Lvl1Item;
00022   class Lvl1Result;
00023 }
00024 
00025 namespace Trig{  
00026 
00027 
00028   class DecisionObjectHandleAthena;  
00029 
00030   class DecisionUnpackerAthena : public IDecisionUnpacker, public Logger {
00031   public:
00032     DecisionUnpackerAthena(StoreGateSvc* sg, const std::string& key);
00033     virtual ~DecisionUnpackerAthena();
00034     virtual StatusCode unpackDecision(std::map<std::string, const LVL1CTP::Lvl1Item*>&,
00035                       std::map<CTPID, LVL1CTP::Lvl1Item*>&,
00036                       std::map<std::string, const HLT::Chain*>&,
00037                       std::map<CHAIN_COUNTER, HLT::Chain*>&,
00038                       std::map<std::string, const HLT::Chain*>&,
00039                       std::map<CHAIN_COUNTER, HLT::Chain*>&,
00040                       char&,
00041                       bool
00042                     );
00043     virtual StatusCode unpackNavigation(HLT::TrigNavStructure*);
00044     virtual bool assert_handle();
00045     virtual void validate_handle();
00046     virtual void invalidate_handle();
00047   private:
00048     DecisionObjectHandleAthena* m_handle;
00049     StatusCode unpackItems(const LVL1CTP::Lvl1Result& result,
00050                std::map<CTPID, LVL1CTP::Lvl1Item*>&,
00051                std::map<std::string, const LVL1CTP::Lvl1Item*>&);
00052     StatusCode unpackChains(const std::vector<uint32_t>& serialized_chains,
00053                 std::map<unsigned, HLT::Chain*>& cache,
00054                 std::map<std::string, const HLT::Chain*>& output);
00055 
00056   };
00057 
00058 
00059 } 
00060 
00061 #endif