00001 #include "StrobeDelayDisplayer.h"
00002 #include "DisplayManager.h"
00003 #include "DisplayInfo.h"
00004
00005 #include "Sct/IS/IOManagerIS.h"
00006 #include "Sct/Archive/IONameArchiveFile.h"
00007 #include "Sct/Archive/IOManagerArchiveFile.h"
00008 #include "SctData/StrobeDelayTestResult.h"
00009 #include "SctData/FitScanResult.h"
00010 #include "SctData/ConfigurationVariable.h"
00011 #include "FitDisplayer.h"
00012 #include <TCanvas.h>
00013 #include <string>
00014 #include <iomanip>
00015 #include <boost/scoped_ptr.hpp>
00016
00017 using namespace Sct;
00018 using namespace SctData;
00019 using namespace std;
00020 using namespace boost;
00021
00022 namespace SctDataDisplay {
00023
00024 bool StrobeDelayDisplayer::inMap = DisplayManager::addToMap("SctData::StrobeDelayTestResult", shared_ptr<Displayer>(new StrobeDelayDisplayer()));
00025
00026 shared_ptr<DisplayData> StrobeDelayDisplayer::display(shared_ptr<const Sct::Serializable> data, const DisplayInfo& info, std::ostream& os) {
00027 shared_ptr<const StrobeDelayTestResult> result = dynamic_pointer_cast<const StrobeDelayTestResult>(data);
00028
00029 os << "Module: " << result->getModuleName() << endl;
00030
00031
00032 os << "Defects: " << endl;
00033 printDefectList(result->getDefects(), os);
00034
00035 for (unsigned int ichip=0; ichip<result->getNOptima(); ++ichip) {
00036 os << "StrobeDelay for chip: " << ichip << " " << setprecision(2) << (int) (result->getOptimum(ichip)+0.5) << endl;
00037 }
00038 shared_ptr<const SctData::FitScanResult> fit;
00039 try {
00040 string fitName = result->getHeader().getUniqueID();
00041 shared_ptr<Serializable> ob = Sct::IS::IOManagerIS::instance().read("FittedData.SctData::FitScanResult."+ fitName);
00042 fit = dynamic_pointer_cast<const FitScanResult>(ob);
00043 } catch (Sct::IoException& e){
00044 }
00045 if (fit.get()==0) try {
00046 Sct::Archive::IONameArchiveFile name(result->getHeader().getUniqueID(),"SctData::FitScanResult");
00047 shared_ptr<Serializable> ob = Sct::Archive::IOManagerArchiveFile::instance().read(name.getIOName());
00048 fit = dynamic_pointer_cast<const FitScanResult>(ob);
00049 } catch (Sct::IoException& e) {
00050 }
00051 if (fit.get()==0) {
00052 return shared_ptr<DisplayData>();
00053 }else{
00054 return DisplayManager::instance().display(fit, info, os);
00055 }
00056 }
00057 }