Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Globals   Related Pages  

FitterWorkerGroup.cpp

Go to the documentation of this file.
00001 #include "FitterWorkerGroup.h"
00002 #include "Fitter.h"
00003 #include "FitAlgorithm.h"
00004 #include "FitAlgorithmMap.h"
00005 
00006 #include "Sct/SctNames.h"
00007 #include "Sct/IS/IOManagerIS.h"
00008 #include "Sct/ISProxy/IOManagerISProxy.h"
00009 #include "Sct/IS/IONameIS.h"
00010 #include "SctData/FitScanResult.h"
00011 #include "SctData/RawScanResult.h"
00012 #include "Sct/Timer.h"
00013 #include "Sct/StdExceptionWrapper.h"
00014 
00015 using namespace std;
00016 using namespace SctService;
00017 using boost::shared_ptr;
00018 using SctData::RawScanResult;
00019 
00020 namespace SctFitter {
00021 
00022 
00023 void FitterWorkerGroup::work(shared_ptr<const RawScanResult> raw) throw() {
00024     using namespace SctData;
00025     double start = timer();
00026     
00027     try {
00028         // make a cache of the name of this scan:
00029         Fitter::instance().setLastScanName(raw->getUniqueID().c_str() );
00030         Fitter::instance().incrementFitsDone();
00031         m_calls++;
00032 
00033         std::cout << "This is call number  " << m_calls << " to this worker. Working on " << raw->getUniqueID().c_str() << " Q = "<< queueSize()<< std::endl;
00034 
00035         const FitAlgorithm& alg = FitAlgorithmMap::instance().getAlgorithm((*raw).getHeader().getVariable());
00036         std::auto_ptr<SctData::FitScanResult> fitted = alg.doFit(*raw);
00037 
00038         //Publish object
00039         Sct::IS::IOParamsIS params(Sct::SctNames::getFittedDataName());
00040         Sct::ISProxy::IOManagerISProxy::instance().write(*fitted, &params); 
00041     
00042     } catch (Sct::InvalidArgumentError& e) {
00043         e.sendToMrs();
00044         Fitter::instance().incrementFitErrors();
00045     } catch(Sct::Throwable& e) {
00046         e.sendToMrs(MRS_ERROR);
00047         Fitter::instance().incrementFitErrors();
00048     } catch(std::exception& e) {
00049     StdExceptionWrapper sew(e);
00050         sew.sendToMrs(MRS_ERROR);
00051         Fitter::instance().incrementFitErrors();    
00052     } catch(...) {
00053     Error e("uncaught unknown exception", __FILE__, __LINE__);
00054     e.sendToMrs(MRS_ERROR);
00055     Fitter::instance().incrementFitErrors();    
00056     }
00057     Fitter::instance().scanDone(timer()-start);
00058 }
00059 
00060 }// end of namespace SctFitter

Generated on Mon Dec 15 19:36:02 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3