00001 #include "FitScanResult.h"
00002 #include "RawScanResult.h"
00003 #include "ModuleConfiguration.h"
00004 #include "ScanPoints.h"
00005 #include <iostream>
00006 #include "FitObject.h"
00007 #include "GausFitObject.h"
00008 #include "ErfFitObject.h"
00009 #include "ErfcFitObject.h"
00010 #include "TopHatFitObject.h"
00011 #include "ScanHeader.h"
00012 #include <TH1.h>
00013 #include <Sct/SctParameters.h>
00014
00015 using namespace Sct;
00016
00017 namespace SctData {
00018
00019 FitScanResult::FitScanResult() throw() : m_channelFits("ChannelFits"), m_chipFits("ChipFits"), m_linkFits("LinkFits"),
00020 m_summaryHist("summaryHist") {}
00021
00022 FitScanResult::FitScanResult(const ScanHeader& header, const ModuleConfiguration& config, const ScanPoints& points) throw()
00023 : ScanResult(header, config, points), m_channelFits("ChannelFits"), m_chipFits("ChipFits"), m_linkFits("LinkFits"),
00024 m_summaryHist("summaryHist") {}
00025
00026 FitScanResult::FitScanResult(const RawScanResult& raw) throw () : ScanResult(raw), m_channelFits("ChannelFits"), m_chipFits("ChipFits"),
00027 m_linkFits("LinkFits"), m_summaryHist("summaryHist") {}
00028
00029 FitScanResult::~FitScanResult() throw() {
00030 for (vector<TH1D*>::iterator ih = m_summaryHist.begin(); ih != m_summaryHist.end(); ++ih ) {
00031 delete *ih;
00032 }
00033 }
00034
00035 string FitScanResult::getClassName() const throw() {
00036 return "SctData::FitScanResult";
00037 }
00038
00039 string FitScanResult::getUniqueID() const throw() {
00040 return getHeader().getUniqueID();
00041 }
00042
00043 string FitScanResult::getUniqueID(const ScanHeader& header) throw() {
00044 return header.getUniqueID();
00045 }
00046
00047 void FitScanResult::initializeChannelFits(const FitObject& prototype) throw() {
00048 resizeAndFill(m_channelFits, Sct::nChannelModule, prototype);
00049 }
00050
00051 void FitScanResult::initializeChipFits(const FitObject& prototype) throw() {
00052 resizeAndFill(m_chipFits, Sct::nChipModule, prototype);
00053 }
00054 void FitScanResult::initializeLinkFits(const FitObject& prototype) throw() {
00055 resizeAndFill(m_linkFits, Sct::nLinkModule, prototype);
00056 }
00057
00058 FitObject& FitScanResult::getLinkFit( const unsigned ilink ) const throw(LogicError) {
00059 return *m_linkFits[ilink] ;
00060 }
00061
00062 FitObject& FitScanResult::getChipFit( const unsigned ilink, const unsigned ichip ) const throw (LogicError) {
00063 return this->getChipFit( ilink*6+ichip );
00064 }
00065
00066 FitObject& FitScanResult::getChipFit( const unsigned ichip ) const throw (LogicError) {
00067 return *m_chipFits[ichip] ;
00068 }
00069
00070 FitObject& FitScanResult::getChannelFit( const unsigned ilink, const unsigned ichannel ) const throw (LogicError ) {
00071 return this->getChannelFit(ilink*nChannelLink+ichannel);
00072 }
00073
00074 FitObject& FitScanResult::getChannelFit( const unsigned ichannel ) const throw(LogicError) {
00075 return *m_channelFits[ichannel] ;
00076 }
00077
00078 void FitScanResult::setChannelFit(unsigned int channel, shared_ptr<FitObject> fit) throw(LogicError) {
00079 m_channelFits[channel] = fit;
00080 }
00081
00082 void FitScanResult::setChipFit(unsigned int chip, shared_ptr<FitObject> fit) throw(LogicError) {
00083 m_chipFits[chip] = fit;
00084 }
00085
00086 void FitScanResult::setLinkFit(unsigned int link, shared_ptr<FitObject> fit) throw(LogicError) {
00087 m_linkFits[link] = fit;
00088 }
00089
00090 unsigned FitScanResult::getNLinkFits() const throw() {
00091 return m_linkFits.size();
00092 }
00093
00094 unsigned FitScanResult::getNChipFits() const throw() {
00095 return m_chipFits.size();
00096 }
00097
00098 unsigned FitScanResult::getNChannelFits() const throw() {
00099 return m_channelFits.size();
00100 }
00101
00102 void FitScanResult::setNChannelFits(unsigned int n) throw() {
00103 m_channelFits.resize(n);
00104 }
00105
00106 void FitScanResult::setNChipFits(unsigned int n) throw() {
00107 m_chipFits.resize(n);
00108 }
00109
00110 void FitScanResult::setNLinkFits(unsigned int n) throw() {
00111 m_linkFits.resize(n);
00112 }
00113
00114
00115 const TH1D& FitScanResult::getHist(unsigned i) const throw(LogicError) {
00116 return *(m_summaryHist[i]);
00117 }
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 }
00128
00129 ostream& operator<<(ostream& os, const SctData::FitScanResult& r) throw() {
00130 os << r.getClassName() << " " << r.getUniqueID();
00131 return os;
00132 }