| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

MainAlgorithm.cc

Go to the documentation of this file.
00001 #include "MainAlgorithm.h"
00002 
00003 #include "GaudiKernel/IDataManagerSvc.h"
00004 
00005 #include "ROBufferSvc/ROBufferSvc.h"
00006 
00007 using namespace std;
00008 using namespace DayaBay;
00009 
00010 MainAlgorithm::MainAlgorithm(const string& name, ISvcLocator* pSvcLocator) 
00011               :GaudiAlgorithm(name, pSvcLocator)
00012 {
00013   info()<< "Construct:MainAlgorithm()!"<< endreq;
00014 
00015   m_roBSvc  = 0;
00016   m_execNum = 0;
00017 }
00018 
00019 StatusCode MainAlgorithm::initialize()
00020 {
00021   StatusCode sc = this->GaudiAlgorithm::initialize();
00022   if(sc.isFailure()) 
00023   { 
00024     error()<< "Error when initializing  GaudiAlgorithm"<< endreq;
00025     return sc;
00026   }
00027 
00028   //Prepare the sub algorithm--DigitalizeAlg
00029   Algorithm* subAlg = 0; 
00030   sc = createSubAlgorithm("DigitalizeAlg", "DigitalizeAlg", subAlg);
00031   if(sc.isFailure()) 
00032   {
00033     error()<< "Error creating Sub-Algorithm: DigitalizeAlg!" << endreq;
00034     return sc;
00035   }
00036   //m_digitAlg = dynamic_cast< DigitalizeAlg* >(subAlg);
00037   m_digitAlg = (DigitalizeAlg*)subAlg;
00038   if(!m_digitAlg)
00039   {
00040     error()<< "Can not converte Algorithm* to DigitalizeAlg* !"<< endreq;
00041     return StatusCode::SUCCESS;
00042   }
00043 
00044   //Initialize the ROBufferSvc
00045   IService* isvc = 0;
00046   sc = serviceLocator()->service("ROBufferSvc", isvc, true);
00047   if(sc.isFailure()) 
00048   {
00049     error()<< "Service:ROBufferSvc could not be retrieved"<< endreq;
00050     return sc;
00051   }
00052   isvc->addRef();
00053   sc = isvc->queryInterface(IROBufferSvc::interfaceID(), (void**)&m_roBSvc);
00054   if(sc.isFailure()) 
00055   {
00056     error()<< "ROBufferSvc does not implement IROBufferSvc."<< endreq;
00057     return sc;
00058   }
00059 
00060   info()<< "MainAlgorithm initialize()!"<< endreq;
00061 
00062   return StatusCode::SUCCESS;
00063 }
00064 
00065 StatusCode MainAlgorithm::execute() 
00066 {
00067   //In one execute(), output one ReadoutHeader!
00068   info()<< "Now into MainAlgorithm "<< m_execNum<< " executation!"<< endreq;
00069 
00070   for( ; ; )
00071   {
00072     //If the MixHeader buffer is empty, notice the DigitalizeAlg
00073     if(0 == m_roBSvc->getMBufferSize())
00074     {
00075       info()<< "The MixHeader buffer is empty!"<< endreq;
00076       //Fill the MixHeader buffer
00077       StatusCode sc = m_digitAlg->execute();
00078       if(sc.isFailure())
00079       {
00080         error()<< "Error in DigitalizeAlg::execute()!"<< endreq;
00081         return StatusCode::FAILURE;
00082       }
00083       continue;
00084     }
00085     //If the MixHeader buffer is not empty, get one ReadoutHeader directly
00086     else
00087     {
00088       ReadoutHeader* roh = 0;
00089       roh = m_roBSvc->getROHeader();
00090       if(!roh)
00091       {
00092         error()<< "Failed to get one ReadoutHeader!"<< endreq;
00093         return StatusCode::FAILURE;
00094       }
00095 
00096       info()<< "Put the ReadoutHeader: "<< roh<< " into TES!"<< endreq;
00097       this->put(evtSvc(), roh, ReadoutHeaderLocation::Default);
00098       break;
00099     }
00100   }
00101 
00102   m_execNum++;
00103   info()<< "MainAlgorithm execute() finalized!" << endreq;
00104 
00105   return StatusCode::SUCCESS;
00106 }
00107 
00108 StatusCode MainAlgorithm::finalize() 
00109 {
00110   info()<< "MainAlgorithm finalize()!"<< endreq;
00111   return StatusCode::SUCCESS;
00112 }
00113 
00114 MainAlgorithm::~MainAlgorithm()
00115 {
00116   info()<< "Destructor:~MainAlgorithm()!"<< endreq;
00117 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:52:35 2011 for MainAlgorithm by doxygen 1.4.7