CMS 3D CMS Logo

SprData.cc

Go to the documentation of this file.
00001 //$Id: SprData.cc,v 1.2 2007/09/21 22:32:09 narsky Exp $
00002 
00003 #include "PhysicsTools/StatPatternRecognition/interface/SprExperiment.hh"
00004 #include "PhysicsTools/StatPatternRecognition/interface/SprData.hh"
00005 #include "PhysicsTools/StatPatternRecognition/interface/SprPoint.hh"
00006 #include "PhysicsTools/StatPatternRecognition/interface/SprClass.hh"
00007 
00008 #include <cassert>
00009 #include <utility>
00010 #include <functional>
00011 #include <algorithm>
00012 
00013 using namespace std;
00014 
00015 
00016 SprData::~SprData()
00017 {
00018   this->clear();
00019 }
00020 
00021 
00022 void SprData::clear()
00023 {
00024   if( ownPoints_ ) {
00025     for( int i=0;i<data_.size();i++ )
00026       delete data_[i];
00027   }
00028   data_.clear();
00029 }
00030 
00031 
00032 SprPoint* SprData::insert(unsigned index, int cls, 
00033                           const std::vector<double>& v)
00034 {
00035   // check dimensionality
00036   assert( !v.empty() );
00037   if( data_.empty() && dim_==0 ) 
00038     dim_ = v.size();
00039   else {
00040     if( dim_ != v.size() ) {
00041       cerr << "Dimensionality of input vector does not match dimensionality " 
00042            << "of space: " << v.size() << " " << dim_ << endl;
00043       return 0;
00044     }
00045   }
00046    
00047   // insert 
00048   SprPoint* p = new SprPoint(index,cls,v);
00049   data_.push_back(p);
00050 
00051   // exit
00052   return p;
00053 }
00054 
00055 SprPoint* SprData::insert(SprPoint* p)
00056 {
00057    // check dimensionality
00058   assert( !p->empty() );
00059   if( data_.empty() && dim_==0 ) 
00060     dim_ = p->dim();
00061   else {
00062     if( dim_ != p->dim() ) {
00063       cerr << "Dimensionality of input vector does not match dimensionality " 
00064            << "of space: " << p->dim() << " " << dim_ << endl;
00065       return 0;
00066     }
00067   }
00068    
00069   // insert 
00070   data_.push_back(p);
00071 
00072   // exit
00073   return p;
00074 }
00075 
00076 
00077 SprPoint* SprData::insert(int cls, const std::vector<double>& v)
00078 {
00079   return this->insert(data_.size(),cls,v);
00080 }
00081 
00082 
00083 bool SprData::setVars(const std::vector<std::string>& vars)
00084 {
00085   assert( !vars.empty() );
00086   if( dim_ == 0 ) 
00087     dim_ = vars.size();
00088   else {
00089     if( dim_ != vars.size() ) {
00090       cerr << "Number of variables does not match dimensionality " 
00091            << "of space: " << vars.size() << " " << dim_ << endl;
00092       return false;
00093     }
00094   }
00095   vars_ = vars;
00096   return true;
00097 }
00098 
00099 
00100 unsigned SprData::ptsInClass(const SprClass& cls) const
00101 {
00102   return count_if(data_.begin(),data_.end(),
00103                   bind2nd(mem_fun(&SprPoint::class_eq),cls));
00104 }
00105 
00106 
00107 SprPoint* SprData::find(unsigned index) const
00108 {
00109   vector<SprPoint*>::const_iterator iter 
00110     = find_if(data_.begin(),data_.end(),
00111               bind2nd(mem_fun(&SprPoint::index_eq),index));
00112   if( iter == data_.end() )
00113     return 0;
00114   return *iter;
00115 }
00116 
00117 
00118 int SprData::dimIndex(const char* var) const
00119 {
00120   vector<string>::const_iterator iter = ::find(vars_.begin(),vars_.end(),var);
00121   if( iter == vars_.end() )
00122     return -1;
00123   return (iter-vars_.begin());
00124 }
00125 
00126 
00127 SprData* SprData::emptyCopy() const
00128 {
00129   SprData* copy = new SprData(false);// do not own points
00130   copy->setDim(dim_);
00131   copy->setVars(vars_);
00132   copy->setLabel(label_.c_str());
00133   return copy;
00134 }
00135 
00136 
00137 SprData* SprData::copy() const
00138 {
00139   SprData* copy = this->emptyCopy();
00140   copy->data_ = data_;
00141   return copy;
00142 }
00143 

Generated on Tue Jun 9 17:42:02 2009 for CMSSW by  doxygen 1.5.4