/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitModels                                                     *
 *    File: $Id: RooBlindTools.h,v 1.10 2007/05/11 10:15:52 verkerke Exp $
 * Authors:                                                                  *
 *   AR, Aaron Roodman, Stanford University, roodman@slac.stanford.edu       *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.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)             *
 *****************************************************************************/
#ifndef ROO_BLIND_TOOLS
#define ROO_BLIND_TOOLS

//		---------------------
// 		-- Class Interface --
//		---------------------

#include "Rtypes.h" 
#include "TString.h"

class RooBlindTools {

//--------------------
// Instance Members --
//--------------------

public:

  enum blindMode {
    full=0,	// blind both parameters and data
    dataonly	// blind data only
    
  };

public:

  // Constructors
  RooBlindTools() {} ;

  RooBlindTools
  (const char *stSeed,	// blinding seed string
   blindMode Mode=full,	// blinding mode
   Double_t centralValue=0.0,     // Central value for Precision measurements
   Double_t sigmaOffset=1.0,      // range for Offset
   Bool_t s2bMode=kFALSE          // Use sin2beta modifications?
   );

  // Copy
  RooBlindTools(const RooBlindTools& );
  
  // Destructor
  virtual ~RooBlindTools( );

  // Operators

  Double_t Randomizer(const char *StringAlphabet) const;

  Double_t PseudoRandom(Int_t Seed) const;

  Double_t MakeOffset(const char *StringAlphabet) const;

  Double_t MakeGaussianOffset(const char *StringAlphabet) const;

  Double_t MakeSignFlip(const char *StringAlphabet) const;

  Int_t SignOfTag(Double_t STag) const;
  
  Double_t HideDeltaZ(Double_t DeltaZ, Double_t STag) const;

  Double_t HiDelZPdG(Double_t DeltaZ, Double_t STag, Double_t PdG) const;

  Double_t UnHideDeltaZ(Double_t DeltaZPrime, Double_t STag) const;

  Double_t UnHiDelZPdG(Double_t DeltaZPrime, Double_t STag, Double_t PdG) const;

  Double_t HideAsym(Double_t Asym) const;

  Double_t HiAsPdG(Double_t Asym, Double_t PdG) const;

  Double_t UnHideAsym(Double_t AsymPrime) const;

  Double_t UnHiAsPdG(Double_t AsymPrime, Double_t PdG) const;

  Double_t HideDeltaM(Double_t DeltaM) const;

  Double_t UnHideDeltaM(Double_t DeltaMPrime) const;

  Double_t MysteryPhase() const;

  Double_t RandomizeTag(Double_t STag, Int_t EventNumber) const;

  Double_t HidePrecision(Double_t Precision) const;

  Double_t UnHidePrecision(Double_t PrecisionPrime) const;

  Double_t HideOffset( Double_t Precision ) const;
  
  Double_t UnHideOffset( Double_t PrecisionBlind ) const;

  Double_t HideUniform( Double_t Precision ) const;
  
  Double_t UnHideUniform( Double_t PrecisionBlind ) const;


  const char *stSeed()const {return _stSeed;}

  const blindMode& mode()const {return _mode;}

  void setMode(blindMode bmode) {_mode=bmode;}

  Double_t getPrecisionCentralValue() const {return _PrecisionCentralValue;}

  Double_t getPrecisionOffsetScale() const {return _PrecisionOffsetScale;}

private:

  // Friends
  // Data members

  TString _stSeed ; 
  Double_t _DeltaZOffset;
  Double_t _DeltaZSignFlip;
  Double_t _DeltaZScale;
  Double_t _AsymOffset;
  Double_t _AsymSignFlip;
  Double_t _DeltaMScale;
  Double_t _DeltaMOffset;
  Double_t _MysteryPhase;
  Double_t _STagConstant;
  Double_t _PrecisionSignFlip;
  Double_t _PrecisionOffsetScale;
  Double_t _PrecisionOffset;
  Double_t _PrecisionUniform;
  Double_t _PrecisionCentralValue;
  blindMode _mode;
  Bool_t   _s2bMode ;
  
  // setup data members from string seed  
  void setup(const char *stSeed);

protected:

    // Helper functions
  ClassDef(RooBlindTools,1) // Root implementation of BlindTools
};

#endif 


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