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

ScanResultWriter.cpp

Go to the documentation of this file.
00001 #include "ScanResultWriter.h"
00002 #include "ScanWriterFactory.h"
00003 #include "ScanDataWriter.h"
00004 #include "SctApi/scan.h"
00005 #include "Sct/SctNames.h"
00006 #include "Sct/Serializable.h"
00007 #include "Sct/ISProxy/IOManagerISProxy.h"
00008 #include <CommonWithDsp/processor.h>
00009 
00010 #include <sstream>
00011 
00012 using namespace std;
00013 using namespace Sct;
00014 using namespace Sct::IS;
00015 using namespace Sct::ISProxy;
00016 
00017 namespace SctData {
00018 
00019 class SerializableWrapper : public virtual Serializable {    
00020 public:
00021     SerializableWrapper(const string& className, const scan_result_ptrs& data) 
00022     : className(className) {
00023     ostringstream oss;
00024     oss << data.header.runNumber << "." << data.header.scanNumber << "." << data.header.moduleName;
00025     uniqueID = oss.str();
00026     }
00027 
00028     ~SerializableWrapper() throw() {}
00029     
00030     virtual string getClassName() const throw() {
00031     return className;
00032     }
00033     
00034     virtual string getUniqueID() const throw() {
00035     return uniqueID;
00036     }
00037     
00038 private:
00039     string className;
00040     string uniqueID;
00041 };
00042 
00043     
00044 //No need to do anything
00045 ScanResultWriter::ScanResultWriter(const string& className) 
00046     : scanResult(0), className(className) {}
00047 
00048 ScanResultWriter& ScanResultWriter::getRawWriter() {
00049     static ScanResultWriter* rawWriter = new ScanResultWriter("SctData::RawScanResult");
00050     return *rawWriter;
00051 }
00052 
00053 bool ScanResultWriter::rawInMap = IOManager::addToMap("SctData::RawScanResult", auto_ptr<Streamer>(&getRawWriter()));
00054 
00055 /*ScanResultWriter& ScanResultWriter::getFitWriter() {
00056     static ScanResultWriter* fitWriter = new ScanResultWriter("FitScanResult");
00057     return *fitWriter;
00058 }*/
00059 
00060 
00061 bool ScanResultWriter::publish(scan_result_ptrs& scanResult) {
00062     //Now we can get hold of the ScanResultWriter we need
00063     ScanResultWriter& writer = ScanWriterFactory::getResultWriter(scanResult.header.dataType);
00064     writer.setData(scanResult);
00065 
00066     SerializableWrapper w(writer.className, scanResult);
00067     IOParamsIS params(SctNames::getEventDataName());
00068     IOManagerISProxy::instance().write(w, &params);
00069 
00070     return true;
00071 }
00072 
00073 void ScanResultWriter::write(OStream& out, const Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00074     writeHeader(out);
00075     writeScanPoints(out);
00076     writeConfiguration(out);
00077     writeData(out);
00078 }
00079     
00080 shared_ptr<Streamable> ScanResultWriter::read(IStream& in, const IOManager& manager) const throw(LogicError, IoError) {
00081     return shared_ptr<Streamable>();
00082 }
00083 
00084 void ScanResultWriter::read(IStream& in, Streamable& ob, const IOManager& manager) const throw(LogicError, IoError) {
00085 }
00086 
00087 
00088 
00089 void ScanResultWriter::setData(scan_result_ptrs& scanResult) {
00090     this->scanResult = &scanResult;
00091 }
00092 
00093 void ScanResultWriter::writeHeader(OStream& out) const {
00094     writeClass("SctData::ScanHeader", out);
00095     out << scanResult->header.version << scanResult->header.runNumber << scanResult->header.scanNumber << scanResult->header.moduleName << scanResult->header.scanType;
00096 }
00097 
00098 void ScanResultWriter::writeScanPoints(OStream& out) const {
00099     writeClass("SctData::ScanPoints", out);
00100     //First the points header
00101     out << scanResult->header.npoints;
00102     //Now the points data
00103     out.put(scanResult->points, scanResult->header.npoints);
00104     out.put(scanResult->nEvents, scanResult->header.npoints);
00105     out.put(scanResult->nErrorEvents, scanResult->header.npoints);
00106 }
00107 
00108 void ScanResultWriter::writeConfiguration(OStream& out) const {
00109     writeClass("SctData::ModuleConfiguration", out);
00110     const ABCDModule& data = scanResult->header.config;
00111 
00112     for (unsigned int i=0; i<N_SCT_CHIPS; ++i) {
00113         writeChipConfig(out, data.chip[i]);
00114     }
00115     out << data.present << data.active << data.select << data.groupId << data.pTTC << data.rTTC;
00116     out.put(data.rx, 4);
00117     //cout << "data.groupId: " << (int)data.groupId  << endl;
00118 }
00119 
00120 void ScanResultWriter::writeChipConfig(OStream& out, const ABCDChip& data) const{
00121     out << data.active << data.address << data.target;
00122       
00123     //ABCDBasic stuff:
00124     
00125     //Config values
00126     out << data.basic.config.readoutMode << data.basic.config.calibMode << data.basic.config.trimRange;
00127     out << data.basic.config.edgeDetect << data.basic.config.mask << data.basic.config.accumulate;
00128     out << data.basic.config.inputBypass << data.basic.config.outputBypass << data.basic.config.master;
00129     out << data.basic.config.end << data.basic.config.feedThrough;
00130     
00131     out << data.basic.vthr << data.basic.vcal << data.basic.delay << data.basic.preamp << data.basic.shaper;
00132     out.put(data.basic.mask, 4);
00133     
00134     //ABCDCalData
00135     out << data.caldata.rc_function;
00136     //cout << "rc_function: " << (int)data.caldata.rc_function << endl;
00137     out.put(data.caldata.rc_params, 3);
00138     out << data.caldata.c_factor;
00139     
00140     out.put(data.trim, N_SCT_CHANS);
00141     //cout << "data.trim[35]" << (int)data.trim[35] << endl;
00142 }
00143 
00144 
00145 void ScanResultWriter::writeData(OStream& out) const {
00146     ScanDataWriter& writer = ScanWriterFactory::getDataWriter(scanResult->header.dataType);
00147     writer.writeData(*scanResult, out);
00148 }
00149 
00150 
00151 //Writes any stuff necessary for a class - ie nothing atm
00152 void ScanResultWriter::writeClass(const string& name, OStream& out) {}
00153 }

Generated on Mon Dec 15 19:36:15 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3