/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id$
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
// 
// BEGIN_HTML
// RooAbsHiddenReal is a base class for objects that want to hide
// their return value from interactive use, e.g. for implementations
// of parameter unblinding functions. This class overrides all
// printing methods with versions that do not reveal the objects value
// and it has a protected version of getVal()
// END_HTML
//
//

#include "RooFit.h"

#include "Riostream.h"

#include "RooArgSet.h"
#include "RooArgSet.h"
#include "RooAbsHiddenReal.h"
#include "RooCategory.h"
#include "RooMsgService.h"

using namespace std;

ClassImp(RooAbsHiddenReal)
;

RooCategory* RooAbsHiddenReal::_dummyBlindState = 0;


//_____________________________________________________________________________
RooAbsHiddenReal::RooAbsHiddenReal(const char *name, const char *title, const char* unit)
  : RooAbsReal(name,title,unit),
    _state("state","Blinding state",this,dummyBlindState())
{  
  // Constructor
}



//_____________________________________________________________________________
RooAbsHiddenReal::RooAbsHiddenReal(const char *name, const char *title, RooAbsCategory& blindState, const char* unit)
  : RooAbsReal(name,title,unit),
  _state("state","Blinding state",this,blindState)
{  
  // Constructor
}



//_____________________________________________________________________________
RooAbsHiddenReal::RooAbsHiddenReal(const RooAbsHiddenReal& other, const char* name) : 
  RooAbsReal(other, name),
  _state("state",this,other._state)
{
  // Copy constructor
}



//_____________________________________________________________________________
RooAbsHiddenReal::~RooAbsHiddenReal() 
{
  // Destructor 
}



//_____________________________________________________________________________
void RooAbsHiddenReal::printValue(ostream& os) const
{
  // Special version of printValue that doesn't reveal the objects value

  os << "(hidden)" ;
} 



//_____________________________________________________________________________
Bool_t RooAbsHiddenReal::readFromStream(istream& is, Bool_t compact, Bool_t verbose)
{
  // Special version of readFromStream that disallows reading from stream

  if (isHidden()) {
    // No-op version of readFromStream 
    coutE(InputArguments) << "RooAbsHiddenReal::readFromStream(" << GetName() << "): not allowed" << endl ;
    return kTRUE ;
  } else {
    return readFromStream(is,compact,verbose) ;
  }
}



//_____________________________________________________________________________
void RooAbsHiddenReal::writeToStream(ostream& os, Bool_t compact) const
{
  // Special version of writeToStream that disallows reading from stream

  if (isHidden()) {
    // No-op version of writeToStream 
    coutE(InputArguments) << "RooAbsHiddenReal::writeToStream(" << GetName() << "): not allowed" << endl ;
  } else {
    RooAbsReal::writeToStream(os,compact) ;
  }
}



//_____________________________________________________________________________
RooAbsCategory& RooAbsHiddenReal::dummyBlindState() const 
{
  // Return reference to internal dummy RooCategory implementation
  // blinding state switch

  if (!_dummyBlindState) {
    _dummyBlindState = new RooCategory("dummyBlindState","dummy blinding state") ;
    _dummyBlindState->defineType("Normal",0) ;
    _dummyBlindState->defineType("Blind",1) ;
    _dummyBlindState->setIndex(1) ;
  }
  return *_dummyBlindState ;
}


 RooAbsHiddenReal.cxx:1
 RooAbsHiddenReal.cxx:2
 RooAbsHiddenReal.cxx:3
 RooAbsHiddenReal.cxx:4
 RooAbsHiddenReal.cxx:5
 RooAbsHiddenReal.cxx:6
 RooAbsHiddenReal.cxx:7
 RooAbsHiddenReal.cxx:8
 RooAbsHiddenReal.cxx:9
 RooAbsHiddenReal.cxx:10
 RooAbsHiddenReal.cxx:11
 RooAbsHiddenReal.cxx:12
 RooAbsHiddenReal.cxx:13
 RooAbsHiddenReal.cxx:14
 RooAbsHiddenReal.cxx:15
 RooAbsHiddenReal.cxx:16
 RooAbsHiddenReal.cxx:17
 RooAbsHiddenReal.cxx:18
 RooAbsHiddenReal.cxx:19
 RooAbsHiddenReal.cxx:20
 RooAbsHiddenReal.cxx:21
 RooAbsHiddenReal.cxx:22
 RooAbsHiddenReal.cxx:23
 RooAbsHiddenReal.cxx:24
 RooAbsHiddenReal.cxx:25
 RooAbsHiddenReal.cxx:26
 RooAbsHiddenReal.cxx:27
 RooAbsHiddenReal.cxx:28
 RooAbsHiddenReal.cxx:29
 RooAbsHiddenReal.cxx:30
 RooAbsHiddenReal.cxx:31
 RooAbsHiddenReal.cxx:32
 RooAbsHiddenReal.cxx:33
 RooAbsHiddenReal.cxx:34
 RooAbsHiddenReal.cxx:35
 RooAbsHiddenReal.cxx:36
 RooAbsHiddenReal.cxx:37
 RooAbsHiddenReal.cxx:38
 RooAbsHiddenReal.cxx:39
 RooAbsHiddenReal.cxx:40
 RooAbsHiddenReal.cxx:41
 RooAbsHiddenReal.cxx:42
 RooAbsHiddenReal.cxx:43
 RooAbsHiddenReal.cxx:44
 RooAbsHiddenReal.cxx:45
 RooAbsHiddenReal.cxx:46
 RooAbsHiddenReal.cxx:47
 RooAbsHiddenReal.cxx:48
 RooAbsHiddenReal.cxx:49
 RooAbsHiddenReal.cxx:50
 RooAbsHiddenReal.cxx:51
 RooAbsHiddenReal.cxx:52
 RooAbsHiddenReal.cxx:53
 RooAbsHiddenReal.cxx:54
 RooAbsHiddenReal.cxx:55
 RooAbsHiddenReal.cxx:56
 RooAbsHiddenReal.cxx:57
 RooAbsHiddenReal.cxx:58
 RooAbsHiddenReal.cxx:59
 RooAbsHiddenReal.cxx:60
 RooAbsHiddenReal.cxx:61
 RooAbsHiddenReal.cxx:62
 RooAbsHiddenReal.cxx:63
 RooAbsHiddenReal.cxx:64
 RooAbsHiddenReal.cxx:65
 RooAbsHiddenReal.cxx:66
 RooAbsHiddenReal.cxx:67
 RooAbsHiddenReal.cxx:68
 RooAbsHiddenReal.cxx:69
 RooAbsHiddenReal.cxx:70
 RooAbsHiddenReal.cxx:71
 RooAbsHiddenReal.cxx:72
 RooAbsHiddenReal.cxx:73
 RooAbsHiddenReal.cxx:74
 RooAbsHiddenReal.cxx:75
 RooAbsHiddenReal.cxx:76
 RooAbsHiddenReal.cxx:77
 RooAbsHiddenReal.cxx:78
 RooAbsHiddenReal.cxx:79
 RooAbsHiddenReal.cxx:80
 RooAbsHiddenReal.cxx:81
 RooAbsHiddenReal.cxx:82
 RooAbsHiddenReal.cxx:83
 RooAbsHiddenReal.cxx:84
 RooAbsHiddenReal.cxx:85
 RooAbsHiddenReal.cxx:86
 RooAbsHiddenReal.cxx:87
 RooAbsHiddenReal.cxx:88
 RooAbsHiddenReal.cxx:89
 RooAbsHiddenReal.cxx:90
 RooAbsHiddenReal.cxx:91
 RooAbsHiddenReal.cxx:92
 RooAbsHiddenReal.cxx:93
 RooAbsHiddenReal.cxx:94
 RooAbsHiddenReal.cxx:95
 RooAbsHiddenReal.cxx:96
 RooAbsHiddenReal.cxx:97
 RooAbsHiddenReal.cxx:98
 RooAbsHiddenReal.cxx:99
 RooAbsHiddenReal.cxx:100
 RooAbsHiddenReal.cxx:101
 RooAbsHiddenReal.cxx:102
 RooAbsHiddenReal.cxx:103
 RooAbsHiddenReal.cxx:104
 RooAbsHiddenReal.cxx:105
 RooAbsHiddenReal.cxx:106
 RooAbsHiddenReal.cxx:107
 RooAbsHiddenReal.cxx:108
 RooAbsHiddenReal.cxx:109
 RooAbsHiddenReal.cxx:110
 RooAbsHiddenReal.cxx:111
 RooAbsHiddenReal.cxx:112
 RooAbsHiddenReal.cxx:113
 RooAbsHiddenReal.cxx:114
 RooAbsHiddenReal.cxx:115
 RooAbsHiddenReal.cxx:116
 RooAbsHiddenReal.cxx:117
 RooAbsHiddenReal.cxx:118
 RooAbsHiddenReal.cxx:119
 RooAbsHiddenReal.cxx:120
 RooAbsHiddenReal.cxx:121
 RooAbsHiddenReal.cxx:122
 RooAbsHiddenReal.cxx:123
 RooAbsHiddenReal.cxx:124
 RooAbsHiddenReal.cxx:125
 RooAbsHiddenReal.cxx:126
 RooAbsHiddenReal.cxx:127
 RooAbsHiddenReal.cxx:128
 RooAbsHiddenReal.cxx:129
 RooAbsHiddenReal.cxx:130
 RooAbsHiddenReal.cxx:131
 RooAbsHiddenReal.cxx:132
 RooAbsHiddenReal.cxx:133
 RooAbsHiddenReal.cxx:134
 RooAbsHiddenReal.cxx:135
 RooAbsHiddenReal.cxx:136
 RooAbsHiddenReal.cxx:137
 RooAbsHiddenReal.cxx:138
 RooAbsHiddenReal.cxx:139
 RooAbsHiddenReal.cxx:140
 RooAbsHiddenReal.cxx:141