Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

AIDA_Cloud3DIterator.cpp

Go to the documentation of this file.
00001  /**********************************************************************
00002   *                                                                    *
00003   * Copyright (c) 2002 Lorenzo Moneta, CERN/IT                       *
00004   *                   <Lorenzo.Moneta.cern.ch>                       *
00005   *                                                                    *
00006   * This library is free software; you can redistribute it and/or      *
00007   * modify it under the terms of the GNU Lesser General Public         *
00008   * License as published by the Free Software Foundation; either       *
00009   * version 2.1 of the License, or (at your option) any later version. *
00010   *                                                                    *
00011   * This library is distributed in the hope that it will be useful,    *
00012   * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
00013   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   *
00014   * Lesser General Public License for more details.                    *
00015   *                                                                    *
00016   * You should have received a copy of the GNU Lesser General Public   *
00017   * License along with this library (see file COPYING); if not, write  *
00018   * to the Free Software Foundation, Inc., 59 Temple Place, Suite      *
00019   * 330, Boston, MA 02111-1307 USA, or contact the author.             *
00020   *                                                                    *
00021   **********************************************************************/
00022 
00023 // Implementation file for class AIDA_Cloud3DIterator
00024 // 
00025 // Authors  : Lorenzo Moneta , Jakub Moscicki
00026 // Created  : Fri Oct  4 16:30:41 2002
00027 // 
00028 // Last update: Fri Oct  4 16:30:41 2002
00029 // 
00030 
00031 #include "AIDA_Cloud3DIterator.h"
00032 #include "AIDA_Function_FML/AIDA_RangeSet.h"
00033 
00034 # include "AIDA/IAxis.h"
00035 # include "AIDA/ICloud3D.h"
00036 
00037 # include "FML/debug.h"
00038 
00039 
00040 namespace Anaphe  { 
00041   namespace AIDA_Fitter_FML { 
00042 
00043 
00044     AIDA_Cloud3DIterator::AIDA_Cloud3DIterator(const AIDA::ICloud3D& h,int ix, int iy, int iz ) : 
00045       m_hist(&h), 
00046       m_dim(h.dimension()), 
00047       xIndex(ix), yIndex(iy), zIndex(iz)
00048     { 
00049     }
00050 
00051     AIDA_Cloud3DIterator::~AIDA_Cloud3DIterator() 
00052     {
00053     }
00054 
00055     AIDA_Cloud3DIterator::AIDA_Cloud3DIterator(const AIDA_Cloud3DIterator &) 
00056     {
00057     }
00058 
00059     AIDA_Cloud3DIterator & AIDA_Cloud3DIterator::operator = (const AIDA_Cloud3DIterator &rhs) 
00060     {
00061       if (this == &rhs) return *this;  // time saving self-test
00062       
00063       return *this;
00064     }
00065 
00066     // fill the data in the vector
00067 
00068     void AIDA_Cloud3DIterator::fillData(const std::vector<Anaphe::AIDA_Function_FML::AIDA_RangeSet * > & ranges ) 
00069     { 
00070       int n = ranges.size();
00071       if (n != m_dim) {
00072         INFO_MSG(" AIDA_Cloud3DIterator::fillData  invalid dimension for rangeset - cannot feed data in FNL"); 
00073         return; 
00074       }
00075       if (!ranges[0]) { 
00076         INFO_MSG(" AIDA_Cloud3DIterator::fillData  invalid rangeset - cannot feed data in FNL"); 
00077         return; 
00078       }
00079       if (xIndex >= m_dim || yIndex >= m_dim || zIndex >= m_dim) { 
00080         INFO_MSG(" AIDA_Cloud3DIterator::fillData  invalid indices - cannot feed data in FNL"); 
00081         return; 
00082       }
00083                 
00084         
00085       std::auto_ptr<FML::DataVector> vptr (new FML::DataVector());
00086 
00087       std::vector<double> x(m_dim);
00088 
00089       int nPoints = 0; 
00090       for(int i = 0; i<m_hist->entries(); ++i)
00091         {
00092           x[xIndex] = m_hist->valueX(i);
00093           x[yIndex] = m_hist->valueY(i);
00094           x[zIndex] = m_hist->valueZ(i);
00095           if (ranges[0]->isInRange(x[0]) && 
00096               ranges[1]->isInRange(x[1]) && 
00097               ranges[2]->isInRange(x[2]) ) 
00098             { 
00099               vptr->push_back(x, m_hist->weight(i), 0, 0);
00100               nPoints++;
00101             }
00102         }
00103       // set the range (size is number of points !) - needed by FML
00104       vptr->setRange(FML::DataRange(nPoints ) );
00105 
00106       setVector(vptr);
00107 
00108     }
00109   }     // end of namespace Anaphe::AIDA_Fitter_FML
00110 } 

Generated on Tue May 20 14:49:01 2003 for AIDA_Fitter_FML by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002