00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "AIDA_Profile2DIterator.h"
00032 #include "AIDA_Function_FML/AIDA_RangeSet.h"
00033
00034 # include "AIDA/IAxis.h"
00035 # include "AIDA/IProfile2D.h"
00036
00037 # include "FML/debug.h"
00038
00039
00040 namespace Anaphe {
00041 namespace AIDA_Fitter_FML {
00042
00043
00044 AIDA_Profile2DIterator::AIDA_Profile2DIterator(const AIDA::IProfile2D& h, int ix, int iy) : m_hist(&h), m_dim(h.dimension()), xIndex(ix), yIndex(iy)
00045 {
00046 }
00047
00048 AIDA_Profile2DIterator::~AIDA_Profile2DIterator()
00049 {
00050 }
00051
00052 AIDA_Profile2DIterator::AIDA_Profile2DIterator(const AIDA_Profile2DIterator &)
00053 {
00054 }
00055
00056 AIDA_Profile2DIterator & AIDA_Profile2DIterator::operator = (const AIDA_Profile2DIterator &rhs)
00057 {
00058 if (this == &rhs) return *this;
00059
00060 return *this;
00061 }
00062
00063
00064
00065 void AIDA_Profile2DIterator::fillData(const std::vector<Anaphe::AIDA_Function_FML::AIDA_RangeSet * > & ranges )
00066 {
00067 int n = ranges.size();
00068 if (n != m_dim) {
00069 INFO_MSG(" AIDA_Profile2DIterator::fillData invalid dimension for rangeset - cannot feed data in FNL");
00070 return;
00071 }
00072 if (!ranges[0]) {
00073 INFO_MSG(" AIDA_Profile2DIterator::fillData invalid rangeset - cannot feed data in FNL");
00074 return;
00075 }
00076 if (xIndex >= m_dim || yIndex >= m_dim) {
00077 INFO_MSG(" AIDA_Profile2DIterator::fillData invalid indices - cannot feed data in FNL");
00078 return;
00079 }
00080
00081
00082 std::auto_ptr<FML::DataVector> vptr (new FML::DataVector());
00083
00084 std::vector<double> x(m_dim);
00085
00086 int nPoints = 0;
00087 for(int i = 0; i<m_hist->xAxis().bins(); ++i)
00088 {
00089 for(int j = 0; j<m_hist->yAxis().bins(); ++j)
00090 {
00091 x[xIndex] = m_hist->binMeanX(i,j);
00092 x[yIndex] = m_hist->binMeanY(i,j);
00093 if (ranges[0]->isInRange(x[0]) && ranges[1]->isInRange(x[1]))
00094 {
00095 vptr->push_back(x, m_hist->binHeight(i,j), m_hist->binError(i,j), m_hist->binError(i,j));
00096 nPoints++;
00097 }
00098
00099 }
00100 }
00101
00102
00103 vptr->setRange(FML::DataRange( nPoints ));
00104
00105 setVector(vptr);
00106
00107 }
00108 }
00109 }