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
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
00039 Sct::IS::IOParamsIS params(Sct::SctNames::getFittedDataName());
00040 Sct::ISProxy::IOManagerISProxy::instance().write(*fitted, ¶ms);
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 }