Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
IPNL_GAMMA
gammaware
Commits
5f0f1794
Commit
5f0f1794
authored
Sep 03, 2019
by
Jérémie Dudouet
Browse files
Add X,Y projections in standard GG mode
parent
65ba8bb5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
84 additions
and
8 deletions
+84
-8
src/root/gui/cubix/src/CXHist2DPlayer.cpp
src/root/gui/cubix/src/CXHist2DPlayer.cpp
+33
-4
src/root/gui/cubix/src/CXHist2DPlayer.h
src/root/gui/cubix/src/CXHist2DPlayer.h
+6
-1
src/root/gui/cubix/src/CXTH1Proj.cpp
src/root/gui/cubix/src/CXTH1Proj.cpp
+42
-3
src/root/gui/cubix/src/CXTH1Proj.h
src/root/gui/cubix/src/CXTH1Proj.h
+3
-0
No files found.
src/root/gui/cubix/src/CXHist2DPlayer.cpp
View file @
5f0f1794
...
...
@@ -14,6 +14,7 @@
#include "TGListBox.h"
#include "TError.h"
#include "TObjArray.h"
#include "TGComboBox.h"
#include "CXMainWindow.h"
#include "CXTH1Proj.h"
...
...
@@ -38,6 +39,16 @@ CXHist2DPlayer::CXHist2DPlayer(const TGCompositeFrame *MotherFrame, UInt_t w, UI
fGroupFrame
->
AddFrame
(
fSubGroupFrame
,
new
TGLayoutHints
(
kLHintsTop
|
kLHintsLeft
|
kLHintsExpandX
,
-
10
,
-
10
,
0
,
0
));
TGCompositeFrame
*
fHorizontalFrame
=
new
TGCompositeFrame
(
fSubGroupFrame
,
60
,
20
,
kHorizontalFrame
);
fHorizontalFrame
->
AddFrame
(
new
TGLabel
(
fHorizontalFrame
,
"Projection axis: "
),
new
TGLayoutHints
(
kLHintsCenterY
|
kLHintsLeft
,
5
,
10
,
0
,
0
));
fProjectionAxis
=
new
TGComboBox
(
fHorizontalFrame
);
fHorizontalFrame
->
AddFrame
(
fProjectionAxis
,
new
TGLayoutHints
(
kLHintsCenterY
|
kLHintsLeft
|
kLHintsExpandX
|
kLHintsExpandY
,
1
,
3
,
0
,
0
));
fProjectionAxis
->
AddEntry
(
"X"
,
0
);
fProjectionAxis
->
AddEntry
(
"Y"
,
1
);
fProjectionAxis
->
Select
(
0
);
fProjectionAxis
->
Connect
(
"Selected(Int_t)"
,
"CXHist2DPlayer"
,
this
,
"UpdateProjection()"
);
fSubGroupFrame
->
AddFrame
(
fHorizontalFrame
,
new
TGLayoutHints
(
kLHintsTop
|
kLHintsLeft
|
kLHintsExpandX
,
-
10
,
-
10
,
5
,
5
));
fHorizontalFrame
=
new
TGCompositeFrame
(
fSubGroupFrame
,
60
,
20
,
kHorizontalFrame
);
TGTextButton
*
GateButton
=
new
TGTextButton
(
fHorizontalFrame
,
"Gate"
);
GateButton
->
SetTextColor
(
CXred
);
GateButton
->
Connect
(
"Clicked()"
,
"CXHist2DPlayer"
,
this
,
"AddGate()"
);
...
...
@@ -184,6 +195,21 @@ void CXHist2DPlayer::SetMainWindow(CXMainWindow *w)
fMainWindow
=
w
;
}
void
CXHist2DPlayer
::
UpdateProjection
()
{
if
(
fAxisProj
==
fProjectionAxis
->
GetSelected
())
return
;
if
(
fProjectionAxis
->
GetSelected
()
==
0
)
fAxisProj
=
0
;
else
fAxisProj
=
1
;
GetProj
()
->
UpdateProjection
(
fAxisProj
);
Project
();
}
void
CXHist2DPlayer
::
InitGG
(
TH2
*
hist_in
)
{
TH2
*
hist
;
...
...
@@ -195,22 +221,25 @@ void CXHist2DPlayer::InitGG(TH2 *hist_in)
else
hist
=
hist_in
;
if
(
hist
==
nullptr
)
{
if
(
hist
==
nullptr
)
{
cout
<<
"No 2D histogram found in the current pad, ignored"
<<
endl
;
return
;
}
if
(
f
TotProjX
)
{
if
(
f
AxisProj
==
0
)
{
TotalProj
=
hist
->
ProjectionX
(
Form
(
"%s_2DTotProjX"
,
hist
->
GetName
()));
TotalProj
->
SetName
(
Form
(
"%s_TotProjX"
,
hist
->
GetName
()));
TotalProj
->
SetTitle
(
Form
(
"%s TotProjX"
,
hist
->
GetTitle
()));
}
else
{
else
if
(
fAxisProj
==
1
)
{
TotalProj
=
hist
->
ProjectionY
(
Form
(
"%s_2DTotProjY"
,
hist
->
GetName
()));
TotalProj
->
SetName
(
Form
(
"%s_TotProjY"
,
hist
->
GetName
()));
TotalProj
->
SetTitle
(
Form
(
"%s TotProjY"
,
hist
->
GetTitle
()));
}
else
{
ERR_MESS
<<
"Unkown projection axis... "
<<
ENDL
;
return
;
}
CXTH1Proj
*
NewProj
=
new
CXTH1Proj
(
*
TotalProj
);
NewProj
->
SetMainWindow
(
fMainWindow
);
...
...
src/root/gui/cubix/src/CXHist2DPlayer.h
View file @
5f0f1794
...
...
@@ -13,6 +13,7 @@ class TGListBox;
class
TGLBEntry
;
class
TGCheckButton
;
class
TGTextEntry
;
class
TGComboBox
;
class
CXHist2DPlayer
:
public
TGVerticalFrame
{
...
...
@@ -22,7 +23,7 @@ private:
CXMainWindow
*
fMainWindow
=
nullptr
;
Bool_t
fTotProjX
=
true
;
Int_t
fAxisProj
=
0
;
// X => 0 ; Y => 1
CXTH1Proj
*
fCurrentProj
=
nullptr
;
...
...
@@ -31,6 +32,8 @@ private:
TGTextEntry
*
fDrawOpt
=
nullptr
;
TGCheckButton
*
fFixRange
=
nullptr
;
TGComboBox
*
fProjectionAxis
=
nullptr
;
public:
CXHist2DPlayer
(
const
TGCompositeFrame
*
MotherFrame
,
UInt_t
w
,
UInt_t
h
,
CXMainWindow
*
window
);
~
CXHist2DPlayer
();
...
...
@@ -38,6 +41,8 @@ public:
void
SetMainWindow
(
CXMainWindow
*
w
);
void
InitGG
(
TH2
*
hist_in
=
nullptr
);
void
UpdateProjection
();
void
Project
();
void
AddBackgd
();
void
AddGate
();
...
...
src/root/gui/cubix/src/CXTH1Proj.cpp
View file @
5f0f1794
...
...
@@ -22,7 +22,7 @@ using namespace std;
CXTH1Proj
::
CXTH1Proj
(
const
TH1D
&
hist
)
:
TH1D
::
TH1D
(
hist
)
{
GetXaxis
()
->
SetTitle
(
"Energy (kev)"
);
GetXaxis
()
->
SetTitle
(
"Energy (kev)
[X axis]
"
);
GetXaxis
()
->
SetTitleSize
(
0.05
);
GetXaxis
()
->
SetTitleOffset
(
0.8
);
GetXaxis
()
->
SetTitleFont
(
132
);
...
...
@@ -55,6 +55,34 @@ CXTH1Proj::~CXTH1Proj()
delete
fListOfGates
;
}
void
CXTH1Proj
::
UpdateProjection
(
Int_t
Axis
)
{
if
(
fGGHist
->
GetXaxis
()
->
GetNbins
()
!=
fGGHist
->
GetYaxis
()
->
GetNbins
())
{
WARN_MESS
<<
"X and Y axis needs to have the same number of bins for GG projections"
<<
ENDL
;
return
;
}
if
(
Axis
==
0
)
{
GetXaxis
()
->
SetTitle
(
"Energy (kev) [X axis]"
);
TH1
*
projtmp
=
fGGHist
->
ProjectionX
();
for
(
int
i
=
0
;
i
<
projtmp
->
GetNbinsX
()
+
2
;
i
++
)
SetBinContent
(
i
,
projtmp
->
GetBinContent
(
i
));
delete
projtmp
;
}
else
if
(
Axis
==
1
)
{
GetXaxis
()
->
SetTitle
(
"Energy (kev) [Y axis]"
);
TH1
*
projtmp
=
fGGHist
->
ProjectionY
();
for
(
int
i
=
0
;
i
<
projtmp
->
GetNbinsX
()
+
2
;
i
++
)
SetBinContent
(
i
,
projtmp
->
GetBinContent
(
i
));
delete
projtmp
;
}
fProjectionAxis
=
Axis
;
fCurrentPad
->
Modified
();
fCurrentPad
->
Update
();
}
void
CXTH1Proj
::
SetPlayer
(
CXHist2DPlayer
*
p
)
{
f2DPlayer
=
p
;
...
...
@@ -157,7 +185,13 @@ void CXTH1Proj::Project(Bool_t FixRange){
Float_t
WidthRef
=
FinalProj
->
GetBinWidth
(
1
);
FinalProj
->
GetXaxis
()
->
SetTitle
(
GetXaxis
()
->
GetTitle
());
TString
XAxis
=
GetXaxis
()
->
GetTitle
();
if
(
XAxis
.
Contains
(
"[X"
))
XAxis
.
ReplaceAll
(
"[X"
,
"[Y"
);
else
if
(
XAxis
.
Contains
(
"[Y"
))
XAxis
.
ReplaceAll
(
"[Y"
,
"[X"
);
FinalProj
->
GetXaxis
()
->
SetTitle
(
XAxis
);
FinalProj
->
GetXaxis
()
->
SetTitleSize
(
GetXaxis
()
->
GetTitleSize
());
FinalProj
->
GetXaxis
()
->
SetTitleOffset
(
GetXaxis
()
->
GetTitleOffset
());
FinalProj
->
GetXaxis
()
->
SetTitleFont
(
GetXaxis
()
->
GetTitleFont
());
...
...
@@ -188,7 +222,12 @@ void CXTH1Proj::Project(Bool_t FixRange){
continue
;
for
(
int
ibin
=
BinX1
;
ibin
<
BinX2
;
ibin
++
)
{
TH1D
*
temp
=
fGGHist
->
ProjectionX
(
"tmp"
,
ibin
,
ibin
);
TH1D
*
temp
=
nullptr
;
if
(
fProjectionAxis
==
0
)
temp
=
fGGHist
->
ProjectionY
(
"tmp"
,
ibin
,
ibin
);
else
if
(
fProjectionAxis
==
1
)
temp
=
fGGHist
->
ProjectionX
(
"tmp"
,
ibin
,
ibin
);
temp
->
Scale
(
FinalProj
->
GetBinWidth
(
ibin
)
/
WidthRef
);
FinalProj
->
Add
(
temp
,
Weight
);
delete
temp
;
...
...
src/root/gui/cubix/src/CXTH1Proj.h
View file @
5f0f1794
...
...
@@ -41,6 +41,8 @@ private:
CXHist2DPlayer
*
f2DPlayer
=
nullptr
;
Int_t
fProjectionAxis
=
0
;
public:
CXTH1Proj
(
const
TH1D
&
hist
);
CXTH1Proj
();
...
...
@@ -48,6 +50,7 @@ public:
void
SetMainWindow
(
CXMainWindow
*
w
);
void
UpdateProjection
(
Int_t
Axis
);
void
SetTH2
(
TH2
*
hist
);
void
SetProjPad
(
TPad
*
pad
);
void
SetCurrentPad
(
TPad
*
pad
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment