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

Generated on Fri Jan 14 12:47:03 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5