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

FitterWorkerGroup.cpp

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/StdExceptionWrapper.h"
00013 #include "ScanResultWriter/dataTypes.h"
00014 #include <boost/timer.hpp>
00015 
00016 using namespace std;
00017 using namespace SctService;
00018 using boost::shared_ptr;
00019 using boost::timer;
00020 using namespace SctData;
00021 using namespace Sct;
00022 using namespace Sct::IS;
00023 
00024 namespace SctFitter {
00025 
00026 
00027 void FitterWorkerGroup::work(string name) throw() {
00028     using namespace SctData;
00029     timer t;
00030     
00031     try {
00032         shared_ptr<const Serializable> ob ( IOManagerIS::instance().read(name) );
00033         shared_ptr<const RawScanResult> raw = dynamic_pointer_cast<const RawScanResult>(ob);
00034         if (!raw)
00035             throw InvalidArgumentError("Fitter::work(): Not a RawScanResult", __FILE__, __LINE__);
00036     Fitter::instance().addIOTime(t.elapsed());
00037     t.restart();
00038     
00039         // make a cache of the name of this scan:
00040         Fitter::instance().setLastScanName(raw->getUniqueID().c_str() );
00041         Fitter::instance().incrementFitsDone();
00042         m_calls++;
00043 
00044         std::cout << "This is call number  " << m_calls << " to this worker. Working on " << raw->getUniqueID().c_str() << " Q = "<< queueSize()<< std::endl;
00045 
00046     // dont fit RawRawData ("direct from BOC")
00047     if (raw->getDataType()==SR_DT_RAWHIST) return;
00048 
00049         const FitAlgorithm& alg = FitAlgorithmMap::instance().getAlgorithm((*raw).getHeader().getVariable());
00050         std::auto_ptr<SctData::FitScanResult> fitted = alg.doFit(*raw);
00051 
00052     Fitter::instance().scanDone(t.elapsed());
00053     t.restart();
00054     
00055         //Publish object
00056         Sct::IS::IOParamsIS params(Sct::SctNames::getFittedDataName());
00057         Sct::ISProxy::IOManagerISProxy::instance().write(*fitted, &params); 
00058     Fitter::instance().addIOTime(t.elapsed());
00059     } catch (Sct::InvalidArgumentError& e) {
00060         e.sendToMrs();
00061         Fitter::instance().incrementFitErrors();
00062     } catch(Sct::Throwable& e) {
00063         e.sendToMrs(MRS_ERROR);
00064         Fitter::instance().incrementFitErrors();
00065     } catch(std::exception& e) {
00066     StdExceptionWrapper sew(e);
00067         sew.sendToMrs(MRS_ERROR);
00068         Fitter::instance().incrementFitErrors();    
00069     } catch(...) {
00070     Error e("uncaught unknown exception", __FILE__, __LINE__);
00071     e.sendToMrs(MRS_ERROR);
00072     Fitter::instance().incrementFitErrors();    
00073     }    
00074 }
00075 
00076 }// end of namespace SctFitter

Generated on Thu Jul 15 09:50:46 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5