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

Generated on Fri Sep 16 18:01:51 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5