#include "RooFit.h"
#include "Riostream.h"
#include "Riostream.h"
#include <stdlib.h>
#include <stdio.h>
#include "TString.h"
#include "RooMultiCategory.h"
#include "RooStreamParser.h"
#include "RooArgSet.h"
#include "RooMultiCatIter.h"
#include "RooAbsCategory.h"
ClassImp(RooMultiCategory)
;
RooMultiCategory::RooMultiCategory(const char *name, const char *title, const RooArgSet& inputCatList) :
  RooAbsCategory(name, title), _catSet("catSet","Input category set",this,kTRUE,kTRUE)
{  
  
  
  TIterator* iter = inputCatList.createIterator() ;
  RooAbsArg* arg ;
  while ((arg=(RooAbsArg*)iter->Next())) {
    if (!dynamic_cast<RooAbsCategory*>(arg)) {
      cout << "RooMultiCategory::RooMultiCategory(" << GetName() << "): input argument " << arg->GetName() 
	   << " is not a RooAbsCategory" << endl ;
    }
    _catSet.add(*arg) ;
  }
  delete iter ;
  
  updateIndexList() ;
}
RooMultiCategory::RooMultiCategory(const RooMultiCategory& other, const char *name) :
  RooAbsCategory(other,name), _catSet("catSet",this,other._catSet)
{
  
  updateIndexList() ;
}
RooMultiCategory::~RooMultiCategory() 
{
  
}
void RooMultiCategory::updateIndexList()
{
  
  clearTypes() ;
  RooMultiCatIter iter(_catSet) ;
  TObjString* obj ;
  while((obj=(TObjString*)iter.Next())) {
    
    defineType(obj->String()) ;
  }
  
  setValueDirty() ;
}
TString RooMultiCategory::currentLabel() const
{
  
  
  TIterator* lIter = _catSet.createIterator() ;
  
  TString label ;
  RooAbsCategory* cat ;
  Bool_t first(kTRUE) ;
  while((cat=(RooAbsCategory*) lIter->Next())) {
    label.Append(first?"{":";") ;
    label.Append(cat->getLabel()) ;      
    first=kFALSE ;
  }
  label.Append("}") ;  
  delete lIter ;
  return label ;
}
RooCatType
RooMultiCategory::evaluate() const
{
  
  if (isShapeDirty()) const_cast<RooMultiCategory*>(this)->updateIndexList() ;
  return *lookupType(currentLabel()) ;
}
void RooMultiCategory::printToStream(ostream& os, PrintOption opt, TString indent) const
{
  
  RooAbsCategory::printToStream(os,opt,indent) ;
  
  if (opt>=Verbose) {     
    os << indent << "--- RooMultiCategory ---" << endl;
    os << indent << "  Input category list:" << endl ;
    TString moreIndent(indent) ;
    moreIndent.Append("   ") ;
    _catSet.printToStream(os,Standard,moreIndent.Data()) ;
  }
}
Bool_t RooMultiCategory::readFromStream(istream& , Bool_t , Bool_t ) 
{
  
  return kTRUE ;
}
void RooMultiCategory::writeToStream(ostream& os, Bool_t compact) const
{
  
  RooAbsCategory::writeToStream(os,compact) ;
}
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.