ROOT logo
#ifndef __TMrbWdw_h__
#define __TMrbWdw_h__

//_________________________________________________[C++ CLASS DEFINITION FILE]
//////////////////////////////////////////////////////////////////////////////
// Name:           utils/inc/TMrbWdw.h
// Purpose:        Define named windows
// Classes:        TMrbWindowI              -- a one-dim window, integer
//                 TMrbWindowF              -- ... double
//                 TMrbWindow2D             -- 2-dim windows and cuts, double only
// Description:    Common class definitions to be used within MARaBOU
// Author:         R. Lutter
// Revision:       $Id: TMrbWdw.h,v 1.7 2005-09-09 06:59:14 Rudolf.Lutter Exp $       
// Date:           
// Keywords:
//////////////////////////////////////////////////////////////////////////////

#include "TObject.h"
#include "TNamed.h"
#include "TString.h"
#include "TLine.h"
#include "TAttText.h"
#include "TPad.h"
#include "TCutG.h"
#include "TH1.h"
#include "TSystem.h"

#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbVarWdwCommon.h"

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbWindow
// Purpose:        Base class for user-defined windows
// Description:    Defines a variable or window and its methods.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TMrbWindow: public TLine, public TAttText {

	public:
		TMrbWindow();			 						// default ctor

		TMrbWindow(Double_t Xlower, Double_t Xupper);	// ctor

		~TMrbWindow();	         						// dtor

		inline void SetParent(TObject * Parent) { fParent = Parent; };

		inline UInt_t GetType() const { return(GetUniqueID() & kVarOrWindow); };
		inline UInt_t GetStatus() const { return(GetUniqueID() & kStatus); };

		void Initialize();								// initialize values
		virtual void Print(Option_t * Option = "") const;
		void SetRange(Bool_t Flag = kTRUE) {
			UInt_t wdwType = this->GetUniqueID();
			if (Flag) wdwType |= kIsRangeChecked; else wdwType &= ~kIsRangeChecked;
			this->SetUniqueID(wdwType);
		};

		inline Bool_t HasInitValues() const { return((GetUniqueID() & kHasInitValues) != 0); };
		inline Bool_t IsRangeChecked() const { return((GetUniqueID() & kIsRangeChecked) != 0); };

		Bool_t AddToHist(TObject * Histogram);	// add window to histogram

// we have to imitate a TNamed object here ...
		virtual void SetName(const Char_t * WdwName);
		virtual const Text_t * GetName() const { return(fName.Data()); };
		virtual Bool_t IsSortable() const { return kTRUE; }
		virtual Int_t Compare(const TObject * Object) const {
			if (this == Object) return(0);
			return(fName.CompareTo(Object->GetName()));
		};
		virtual ULong_t Hash() const { return fName.Hash(); }

// some methods to visualize a window
		virtual void Draw(Option_t * Option = "");
		virtual void Paint(Option_t * Option = "");

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		void SetInitialType(UInt_t WdwType);

	protected:
		TString fName;				// name linke in TNamed
		TObject * fParent;			//! dont stream  addr of parent histogram

	ClassDef(TMrbWindow, 1) 	// [Utils] Base class for user-defined windows
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbWindowI
// Purpose:        Base class for a simple (1-dim) window (integer)
// Description:    Defines a 1-dim window and its methods.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TMrbWindowI: public TMrbWindow {

	public:
		TMrbWindowI() {};														// default ctor
		TMrbWindowI(const Char_t * Name, Int_t Xlower = 0, Int_t Xupper = 0);	// ctor

		~TMrbWindowI() {};														// dtor

		inline Int_t Clip(Int_t Value) const {						// clip value to range boundaries
			if (this->IsRangeChecked()) {
				if (Value < fLowerRange) return(fLowerRange);
				else if (Value > fUpperRange) return(fUpperRange);
				else return(Value);
			} else return(Value);
		};

		void SetLowerLimit(Int_t Xlow);   // *MENU* *ARGS={Xlow=>fX1}

		void SetUpperLimit(Int_t Xup);    // *MENU* *ARGS={Xup=>fX2}

		void Set(Int_t Xlow, Int_t Xup);  // *MENU* *ARGS={Xlow=>fX1,Xup=>fX2}

		inline Bool_t IsInside(Int_t X) const { return(X >= (Int_t) (fX1) && X <= (Int_t) (fX2)); }; // test limits

		Int_t GetLowerLimit() const { return((Int_t) (fX1)); };				// return current lower limit
		Int_t GetUpperLimit() const { return((Int_t) (fX2)); };				// return current upper limit

		void Initialize() {								// reset to initial limits
			fX1 = (Double_t) this->Clip(fLowerInit);
			fX2 = (Double_t) this->Clip(fUpperInit);
			if (gPad) {
				this->Paint();
				gPad->Modified();
			}
		};

		void SetRange(Int_t Xlower, Int_t Xupper) {		// define range
			this->SetUniqueID(this->GetUniqueID() | kIsRangeChecked);
			fLowerRange = Xlower;
			fUpperRange = Xupper;
		};

		virtual void PaintLine(Double_t, Double_t, Double_t, Double_t);

		virtual void Print(Option_t * Option = "") const;

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		Int_t fXlower;							// current limits
		Int_t fXupper;
		Int_t fLowerInit; 						// initial limits
		Int_t fUpperInit;
		Int_t fLowerRange;						// range
		Int_t fUpperRange;

	ClassDef(TMrbWindowI, 1)		// [Utils] A 1-dim window with integer limits
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbWindowF
// Purpose:        Base class for a simple (1-dim) window (double)
// Description:    Defines a 1-dim window and its methods.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TMrbWindowF: public TMrbWindow {

	public:
		TMrbWindowF() {};																// default ctor

		TMrbWindowF(const Char_t * Name, Double_t Xlower = 0., Double_t Xupper = 0.);	// ctor

		~TMrbWindowF() {};									    						// dtor

		inline Double_t Clip(Double_t Value) const {						// clip value to range boundaries
			if (this->IsRangeChecked()) {
				if (Value < fLowerRange) return(fLowerRange);
				else if (Value > fUpperRange) return(fUpperRange);
				else return(Value);
			} else return(Value);
		};

		void SetLowerLimit(Double_t Xlow);		// *MENU* *ARGS={Xlow=>fX1}
		void SetUpperLimit(Double_t Xup);		// *MENU* *ARGS={Xup=>fX2}
		void Set(Double_t Xlow, Double_t Xup);	// *MENU* *ARGS={Xlow=>fX1,Xup=>fX2}

		Double_t GetLowerLimit() const { return(fX1); };		// return current lower limit

		Double_t GetUpperLimit() const { return(fX2); };		// return current upper limit

		inline Bool_t IsInside(Double_t X) const { return(X >= fX1 && X <= fX2); }; // test limits

		void Initialize() {								// reset to initial limits
			fX1 = this->Clip(fLowerInit);
			fX2 = this->Clip(fUpperInit);
			if (gPad) {
				this->Paint();
				gPad->Modified();
			}
		};

		void SetRange(Double_t Xlower, Double_t Xupper) {		// define range
			this->SetUniqueID(this->GetUniqueID() | kIsRangeChecked);
			fLowerRange = Xlower;
			fUpperRange = Xupper;
		};

		virtual void PaintLine(Double_t, Double_t, Double_t, Double_t);

		virtual void Print(Option_t * Option = "") const;

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

 	protected:
		Double_t fXlower;							// current limits
		Double_t fXupper;
		Double_t fLowerInit; 						// initial limits
		Double_t fUpperInit;
		Double_t fLowerRange;						// range
		Double_t fUpperRange;

	ClassDef(TMrbWindowF, 1)		// [Utils] A 1-dim window with float limits
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMrbWindow2D
// Purpose:        Base class for a 2-dim windows and cuts
// Description:    Defines a 2-dim window/cut and its methods.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TMrbWindow2D : public TCutG, public TAttText {

	public:
		TMrbWindow2D(); 				// default ctor

		TMrbWindow2D(const Char_t * WdwName, Int_t N, Double_t * X = NULL, Double_t * Y = NULL);

		TMrbWindow2D(TCutG Cut);

		~TMrbWindow2D();					// dtor         

		inline void SetParent(TObject * Parent) { fParent = Parent; };

		virtual void Draw(Option_t * Option = "");
		virtual void Print(Option_t * Option = "") const;
		Double_t GetXtext() const { return(fXtext); }
		Double_t GetYtext() const { return(fYtext); }
		void SetXtext(Double_t Xt){ fXtext = Xt; }
		void SetYtext(Double_t Yt){ fYtext = Yt; }

		Bool_t AddToHist(TObject * Histogram);			// add window to histogram

		inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };

	protected:
		void SetInitialType(UInt_t WdwType);

	protected:
		Double_t fXtext;
		Double_t fYtext;
		TObject *fParent;				//! don't stream

	ClassDef(TMrbWindow2D, 2)			// [Utils] A 2-dim window
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsWindowI, TMbsWIndowF, TMbsWindow2d
// Purpose:        Obsolete defs, for compatibility only
//////////////////////////////////////////////////////////////////////////////

class TMbsWindowI : public TMrbWindow {
	public:
		TMbsWindowI() {};
		~TMbsWindowI() {};
	protected:
		Int_t fXlower;							// current limits
		Int_t fXupper;
		Int_t fLowerInit; 						// initial limits
		Int_t fUpperInit;
		Int_t fLowerRange;						// range
		Int_t fUpperRange;

	ClassDef(TMbsWindowI, 1)
};

class TMbsWindowF : public TMrbWindow {
	public:
		TMbsWindowF() {};
		~TMbsWindowF() {};
	protected:
		Float_t fXlower;							// current limits
		Float_t fXupper;
		Float_t fLowerInit; 						// initial limits
		Float_t fUpperInit;
		Float_t fLowerRange;						// range
		Float_t fUpperRange;

	ClassDef(TMbsWindowF, 1)
};

//______________________________________________________[C++ CLASS DEFINITION]
//////////////////////////////////////////////////////////////////////////////
// Name:           TMbsWindow2d
// Purpose:        Base class for a 2-dim windows and cuts
//                 this is only for backward compatibility, 
//                 for new windows use: TMrbWindow2D
// Methods:        GetXtext        -- get text position X
//                 GetYtext        -- ... Y
// Description:    Defines a 2-dim window/cut and its methods.
// Keywords:       
//////////////////////////////////////////////////////////////////////////////

class TMbsWindow2d : public TCutG, public TAttText {

	public:
		TMbsWindow2d(){}; 				// default ctor

		~TMbsWindow2d();					// dtor         


		virtual void Draw(Option_t * Option = "");
		Float_t GetXtext() { return(fXtext); }
		Float_t GetYtext() { return(fYtext); }

	protected:
		Float_t fXtext;
		Float_t fYtext;
		TObject *fParent;			//! don't stream it

	ClassDef(TMbsWindow2d, 1)
};

#endif
 TMrbWdw.h:1
 TMrbWdw.h:2
 TMrbWdw.h:3
 TMrbWdw.h:4
 TMrbWdw.h:5
 TMrbWdw.h:6
 TMrbWdw.h:7
 TMrbWdw.h:8
 TMrbWdw.h:9
 TMrbWdw.h:10
 TMrbWdw.h:11
 TMrbWdw.h:12
 TMrbWdw.h:13
 TMrbWdw.h:14
 TMrbWdw.h:15
 TMrbWdw.h:16
 TMrbWdw.h:17
 TMrbWdw.h:18
 TMrbWdw.h:19
 TMrbWdw.h:20
 TMrbWdw.h:21
 TMrbWdw.h:22
 TMrbWdw.h:23
 TMrbWdw.h:24
 TMrbWdw.h:25
 TMrbWdw.h:26
 TMrbWdw.h:27
 TMrbWdw.h:28
 TMrbWdw.h:29
 TMrbWdw.h:30
 TMrbWdw.h:31
 TMrbWdw.h:32
 TMrbWdw.h:33
 TMrbWdw.h:34
 TMrbWdw.h:35
 TMrbWdw.h:36
 TMrbWdw.h:37
 TMrbWdw.h:38
 TMrbWdw.h:39
 TMrbWdw.h:40
 TMrbWdw.h:41
 TMrbWdw.h:42
 TMrbWdw.h:43
 TMrbWdw.h:44
 TMrbWdw.h:45
 TMrbWdw.h:46
 TMrbWdw.h:47
 TMrbWdw.h:48
 TMrbWdw.h:49
 TMrbWdw.h:50
 TMrbWdw.h:51
 TMrbWdw.h:52
 TMrbWdw.h:53
 TMrbWdw.h:54
 TMrbWdw.h:55
 TMrbWdw.h:56
 TMrbWdw.h:57
 TMrbWdw.h:58
 TMrbWdw.h:59
 TMrbWdw.h:60
 TMrbWdw.h:61
 TMrbWdw.h:62
 TMrbWdw.h:63
 TMrbWdw.h:64
 TMrbWdw.h:65
 TMrbWdw.h:66
 TMrbWdw.h:67
 TMrbWdw.h:68
 TMrbWdw.h:69
 TMrbWdw.h:70
 TMrbWdw.h:71
 TMrbWdw.h:72
 TMrbWdw.h:73
 TMrbWdw.h:74
 TMrbWdw.h:75
 TMrbWdw.h:76
 TMrbWdw.h:77
 TMrbWdw.h:78
 TMrbWdw.h:79
 TMrbWdw.h:80
 TMrbWdw.h:81
 TMrbWdw.h:82
 TMrbWdw.h:83
 TMrbWdw.h:84
 TMrbWdw.h:85
 TMrbWdw.h:86
 TMrbWdw.h:87
 TMrbWdw.h:88
 TMrbWdw.h:89
 TMrbWdw.h:90
 TMrbWdw.h:91
 TMrbWdw.h:92
 TMrbWdw.h:93
 TMrbWdw.h:94
 TMrbWdw.h:95
 TMrbWdw.h:96
 TMrbWdw.h:97
 TMrbWdw.h:98
 TMrbWdw.h:99
 TMrbWdw.h:100
 TMrbWdw.h:101
 TMrbWdw.h:102
 TMrbWdw.h:103
 TMrbWdw.h:104
 TMrbWdw.h:105
 TMrbWdw.h:106
 TMrbWdw.h:107
 TMrbWdw.h:108
 TMrbWdw.h:109
 TMrbWdw.h:110
 TMrbWdw.h:111
 TMrbWdw.h:112
 TMrbWdw.h:113
 TMrbWdw.h:114
 TMrbWdw.h:115
 TMrbWdw.h:116
 TMrbWdw.h:117
 TMrbWdw.h:118
 TMrbWdw.h:119
 TMrbWdw.h:120
 TMrbWdw.h:121
 TMrbWdw.h:122
 TMrbWdw.h:123
 TMrbWdw.h:124
 TMrbWdw.h:125
 TMrbWdw.h:126
 TMrbWdw.h:127
 TMrbWdw.h:128
 TMrbWdw.h:129
 TMrbWdw.h:130
 TMrbWdw.h:131
 TMrbWdw.h:132
 TMrbWdw.h:133
 TMrbWdw.h:134
 TMrbWdw.h:135
 TMrbWdw.h:136
 TMrbWdw.h:137
 TMrbWdw.h:138
 TMrbWdw.h:139
 TMrbWdw.h:140
 TMrbWdw.h:141
 TMrbWdw.h:142
 TMrbWdw.h:143
 TMrbWdw.h:144
 TMrbWdw.h:145
 TMrbWdw.h:146
 TMrbWdw.h:147
 TMrbWdw.h:148
 TMrbWdw.h:149
 TMrbWdw.h:150
 TMrbWdw.h:151
 TMrbWdw.h:152
 TMrbWdw.h:153
 TMrbWdw.h:154
 TMrbWdw.h:155
 TMrbWdw.h:156
 TMrbWdw.h:157
 TMrbWdw.h:158
 TMrbWdw.h:159
 TMrbWdw.h:160
 TMrbWdw.h:161
 TMrbWdw.h:162
 TMrbWdw.h:163
 TMrbWdw.h:164
 TMrbWdw.h:165
 TMrbWdw.h:166
 TMrbWdw.h:167
 TMrbWdw.h:168
 TMrbWdw.h:169
 TMrbWdw.h:170
 TMrbWdw.h:171
 TMrbWdw.h:172
 TMrbWdw.h:173
 TMrbWdw.h:174
 TMrbWdw.h:175
 TMrbWdw.h:176
 TMrbWdw.h:177
 TMrbWdw.h:178
 TMrbWdw.h:179
 TMrbWdw.h:180
 TMrbWdw.h:181
 TMrbWdw.h:182
 TMrbWdw.h:183
 TMrbWdw.h:184
 TMrbWdw.h:185
 TMrbWdw.h:186
 TMrbWdw.h:187
 TMrbWdw.h:188
 TMrbWdw.h:189
 TMrbWdw.h:190
 TMrbWdw.h:191
 TMrbWdw.h:192
 TMrbWdw.h:193
 TMrbWdw.h:194
 TMrbWdw.h:195
 TMrbWdw.h:196
 TMrbWdw.h:197
 TMrbWdw.h:198
 TMrbWdw.h:199
 TMrbWdw.h:200
 TMrbWdw.h:201
 TMrbWdw.h:202
 TMrbWdw.h:203
 TMrbWdw.h:204
 TMrbWdw.h:205
 TMrbWdw.h:206
 TMrbWdw.h:207
 TMrbWdw.h:208
 TMrbWdw.h:209
 TMrbWdw.h:210
 TMrbWdw.h:211
 TMrbWdw.h:212
 TMrbWdw.h:213
 TMrbWdw.h:214
 TMrbWdw.h:215
 TMrbWdw.h:216
 TMrbWdw.h:217
 TMrbWdw.h:218
 TMrbWdw.h:219
 TMrbWdw.h:220
 TMrbWdw.h:221
 TMrbWdw.h:222
 TMrbWdw.h:223
 TMrbWdw.h:224
 TMrbWdw.h:225
 TMrbWdw.h:226
 TMrbWdw.h:227
 TMrbWdw.h:228
 TMrbWdw.h:229
 TMrbWdw.h:230
 TMrbWdw.h:231
 TMrbWdw.h:232
 TMrbWdw.h:233
 TMrbWdw.h:234
 TMrbWdw.h:235
 TMrbWdw.h:236
 TMrbWdw.h:237
 TMrbWdw.h:238
 TMrbWdw.h:239
 TMrbWdw.h:240
 TMrbWdw.h:241
 TMrbWdw.h:242
 TMrbWdw.h:243
 TMrbWdw.h:244
 TMrbWdw.h:245
 TMrbWdw.h:246
 TMrbWdw.h:247
 TMrbWdw.h:248
 TMrbWdw.h:249
 TMrbWdw.h:250
 TMrbWdw.h:251
 TMrbWdw.h:252
 TMrbWdw.h:253
 TMrbWdw.h:254
 TMrbWdw.h:255
 TMrbWdw.h:256
 TMrbWdw.h:257
 TMrbWdw.h:258
 TMrbWdw.h:259
 TMrbWdw.h:260
 TMrbWdw.h:261
 TMrbWdw.h:262
 TMrbWdw.h:263
 TMrbWdw.h:264
 TMrbWdw.h:265
 TMrbWdw.h:266
 TMrbWdw.h:267
 TMrbWdw.h:268
 TMrbWdw.h:269
 TMrbWdw.h:270
 TMrbWdw.h:271
 TMrbWdw.h:272
 TMrbWdw.h:273
 TMrbWdw.h:274
 TMrbWdw.h:275
 TMrbWdw.h:276
 TMrbWdw.h:277
 TMrbWdw.h:278
 TMrbWdw.h:279
 TMrbWdw.h:280
 TMrbWdw.h:281
 TMrbWdw.h:282
 TMrbWdw.h:283
 TMrbWdw.h:284
 TMrbWdw.h:285
 TMrbWdw.h:286
 TMrbWdw.h:287
 TMrbWdw.h:288
 TMrbWdw.h:289
 TMrbWdw.h:290
 TMrbWdw.h:291
 TMrbWdw.h:292
 TMrbWdw.h:293
 TMrbWdw.h:294
 TMrbWdw.h:295
 TMrbWdw.h:296
 TMrbWdw.h:297
 TMrbWdw.h:298
 TMrbWdw.h:299
 TMrbWdw.h:300
 TMrbWdw.h:301
 TMrbWdw.h:302
 TMrbWdw.h:303
 TMrbWdw.h:304
 TMrbWdw.h:305
 TMrbWdw.h:306
 TMrbWdw.h:307
 TMrbWdw.h:308
 TMrbWdw.h:309
 TMrbWdw.h:310
 TMrbWdw.h:311
 TMrbWdw.h:312
 TMrbWdw.h:313
 TMrbWdw.h:314
 TMrbWdw.h:315
 TMrbWdw.h:316
 TMrbWdw.h:317
 TMrbWdw.h:318
 TMrbWdw.h:319
 TMrbWdw.h:320
 TMrbWdw.h:321
 TMrbWdw.h:322
 TMrbWdw.h:323
 TMrbWdw.h:324
 TMrbWdw.h:325
 TMrbWdw.h:326
 TMrbWdw.h:327
 TMrbWdw.h:328
 TMrbWdw.h:329
 TMrbWdw.h:330
 TMrbWdw.h:331
 TMrbWdw.h:332
 TMrbWdw.h:333
 TMrbWdw.h:334
 TMrbWdw.h:335
 TMrbWdw.h:336
 TMrbWdw.h:337
 TMrbWdw.h:338