Flexible pt range for the efficiency histogramming
[u/mrichter/AliRoot.git] / MUON / AliMUONPainterColorSlider.cxx
CommitLineData
0145e89a 1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
18#include "AliMUONPainterColorSlider.h"
19#include "AliMUONPainterHelper.h"
20#include "AliLog.h"
21#include <TGNumberEntry.h>
22#include <TGButton.h>
23#include <TMath.h>
24
25///\class AliMUONPainterColorSlider
26///
27/// A painter color palette
28///
29///\author Laurent Aphecetche, Subatech
30
31///\cond CLASSIMP
32ClassImp(AliMUONPainterColorSlider)
33///\endcond
34
35//_____________________________________________________________________________
36AliMUONPainterColorSlider::AliMUONPainterColorSlider(const TGWindow* p,
37 UInt_t w, UInt_t h)
38: TGCompositeFrame(p,w,h,kVerticalFrame),
39 fEntryMin(0x0),
40 fEntryMax(0x0),
41 fMin(FLT_MAX),
49419555 42 fMax(-FLT_MAX),
43 fAutoButton(new TGTextButton(this,"Auto")),
44 fLockButton(new TGTextButton(this,"Lock"))
0145e89a 45{
46 /// ctor
47 Int_t ndivisions(20);
48
9016a84e 49 Int_t hsize = (h-100)/(ndivisions+2);
0145e89a 50 Int_t topBorder(5);
51
52 Double_t min(0.0);
53 Double_t max(1.0);
54
55 Double_t step = (max-min)/ndivisions;
56
fcabdc0c 57 for ( Int_t i = -1; i < ndivisions+1; ++i )
0145e89a 58 {
59 Double_t value = max - (min + step*i);
60
61 Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,
62 min,max);
63 Pixel_t pixel = gVirtualX->GetPixel(color);
64 TGVerticalFrame* frame = new TGVerticalFrame(this,w,hsize,kFixedSize,pixel);
65
66 AddFrame(frame,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
67
68 topBorder = 0;
69 }
70
71 fEntryMax = new TGNumberEntry(this);
72
73 AddFrame(fEntryMax,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
74
75 fEntryMin = new TGNumberEntry(this);
76
77 AddFrame(fEntryMin,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
78
49419555 79 AddFrame(fAutoButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
0145e89a 80
49419555 81 fAutoButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"DataRangeAutoRequested()");
0145e89a 82
49419555 83 AddFrame(fLockButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
84
85 fLockButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"LockButtonWasClicked()");
0145e89a 86
87 fEntryMax->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
88 fEntryMin->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
89}
90
91//_____________________________________________________________________________
92AliMUONPainterColorSlider::~AliMUONPainterColorSlider()
93{
94 /// dtor
95}
96
97//_____________________________________________________________________________
98void
99AliMUONPainterColorSlider::DataRangeAutoRequested()
100{
101 /// Signal that the "Auto" button was clicked
102 AliDebug(1,"");
103 Emit("DataRangeAutoRequested()");
104}
105
106//_____________________________________________________________________________
107void
108AliMUONPainterColorSlider::DataRangeWasChanged(Double_t*)
109{
110 /// Data range was changed
111
112 Double_t values[] = { fEntryMin->GetNumber(), fEntryMax->GetNumber() };
113
114 Long_t param[] = { (Long_t)values };
115
116 AliDebug(1,Form("double min %e max %e",values[0],values[1]));
117
118 Emit("DataRangeWasChanged(Double_t*)",param);
119}
120
121//_____________________________________________________________________________
49419555 122Bool_t
123AliMUONPainterColorSlider::IsLocked() const
124{
125 /// Whether our range is locked or not
126
127 return (fLockButton->GetString() == "Unlock"); // if we can unlock it means we are locked...
128}
129
130//_____________________________________________________________________________
131void
132AliMUONPainterColorSlider::LockButtonWasClicked()
133{
134 /// Lock (toggle button) was clicked
135
136 if ( IsLocked() )
137 {
138 // unlock it
139 fLockButton->SetText("Lock");
140 fEntryMin->SetState(kTRUE);
141 fEntryMax->SetState(kTRUE);
142 fAutoButton->SetEnabled(kTRUE);
143 }
144 else
145 {
146 // lock it
147 fLockButton->SetText("Unlock");
148 fEntryMin->SetState(kFALSE);
149 fEntryMax->SetState(kFALSE);
150 fAutoButton->SetEnabled(kFALSE);
151 }
152}
153
154//_____________________________________________________________________________
0145e89a 155void
156AliMUONPainterColorSlider::SetRange(Double_t min, Double_t max, Bool_t emit)
157{
158 /// Set the data range
159
160 AliDebug(1,Form("min %e max %e emit %d",min,max,emit));
161
49419555 162 if ( !IsLocked() )
163 {
164 fMin = min;
165 fMax = max;
0145e89a 166
49419555 167 fEntryMin->SetNumber(fMin);
168 fEntryMax->SetNumber(fMax);
169 }
0145e89a 170
171 if ( emit )
172 {
173 DataRangeWasChanged(0x0);
174 }
175}
176