Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
go4egor
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vratislav Chudoba
go4egor
Commits
f328bdca
Commit
f328bdca
authored
Jul 01, 2018
by
Vratislav Chudoba
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some progress with Be data analysis.
parent
1c8bbfcf
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
971 additions
and
210 deletions
+971
-210
fillChain.cxx
analysis/fillChain.cxx
+224
-24
showBananas2.cxx
analysis/showBananas2.cxx
+446
-126
showTritium.cxx
analysis/showTritium.cxx
+3
-60
showTritiumReport.cxx
analysis/showTritiumReport.cxx
+298
-0
No files found.
analysis/fillChain.cxx
View file @
f328bdca
#include "TSystem.h"
#include "TFile.h"
#include "TTree.h"
#include "TVector3.h"
//#include "../src/TNeEvent.h"
//#include "../../AculUtils/TELoss/TELoss.h"
...
...
@@ -10,15 +11,15 @@ using std::endl;
void
fillTree
(
Int_t
nofile
=
0
,
const
Int_t
noevents
=
0
)
{
TString
inFile
;
inFile
.
Form
(
"~/data/exp1804/h5_14_%02d.root"
,
nofile
);
// inFile.Form("~/data/exp1804/be10_03_%d0.root", nofile);
// inFile.Form("~/data/exp1804/be10_%02d_00.root", nofile);
//
inFile.Form("~/data/exp1804/h5_14_%02d.root", nofile);
inFile
.
Form
(
"~/data/exp1804/be10_03_%d0.root"
,
nofile
);
//files 00,10,...,60
// inFile.Form("~/data/exp1804/be10_%02d_00.root", nofile);
//files 01,02, 03, 05
// inFile.Form("~/data/exp1804/calib/si_20_03.root");
TString
outFile
;
outFile
.
Form
(
"~/data/exp1804/h5_14_%02d_calib.root"
,
nofile
);
// outFile.Form("~/data/exp1804/be10_03_%d0_calib.root", nofile);
// outFile.Form("~/data/exp1804/be10_%02d_00_calib.root", nofile);
//
outFile.Form("~/data/exp1804/h5_14_%02d_calib.root", nofile);
outFile
.
Form
(
"~/data/exp1804/be10_03_%d0_calib.root"
,
nofile
);
//files 00,10,...,60
// outFile.Form("~/data/exp1804/be10_%02d_00_calib.root", nofile);
//files 01,02, 03, 05
// outFile.Form("~/data/exp1804/calib/si_20_03_calib.root");
cout
<<
"Input file: "
<<
inFile
<<
endl
;
...
...
@@ -36,15 +37,33 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
Float_t
SQ20E
[
16
];
Float_t
SQ20Ecorr
[
16
];
Float_t
SQ20EcorrHit
[
16
];
Float_t
SQ20Esum
;
Float_t
SQ20time
[
16
];
Int_t
SQ20timeMult
;
Float_t
SQLXtime
[
32
];
Int_t
SQLXtimeMult
;
// Float_t SQLXtimeSum;
Float_t
SQLXE
[
32
];
Float_t
SQLXEsum
;
Float_t
SQLXEtimeFiltered
[
32
];
Float_t
SQLXEtimeFilteredSum
;
Float_t
SQLYE
[
16
];
Float_t
SQLYEsum
;
Float_t
SQLYtime
[
16
];
Int_t
SQLYtimeMult
;
Float_t
SQLYEtimeFiltered
[
16
];
Float_t
SQLYEtimeFilteredSum
;
Int_t
SQLXmult
;
Int_t
SQLYmult
;
Int_t
SQ20EcorrMult
;
Int_t
SQ20EcorrHitMult
;
Float_t
SQRXE
[
32
];
Float_t
SQRXEsum
;
...
...
@@ -52,11 +71,55 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
Float_t
TOF
,
dEbeam
;
Float_t
x1p
,
y1p
,
x2p
,
y2p
,
xt
,
yt
;
//left 1 mm position
Float_t
x1mm
,
y1mm
;
const
Float_t
z1mm
=
230.
;
Float_t
xThin
,
yThin
;
const
Float_t
zThin
=
230.
-
53.6
;
const
Float_t
xThinOffset
=
-
3.
,
yThinOffset
=
-
1.8
;
Int_t
mapXbin
,
mapYbin
;
TVector3
vHit1mm
;
TVector3
vNorm
(
0.
,
0.
,
1.
);
Double_t
angleLeft
;
tw
->
Branch
(
"angleLeft"
,
&
angleLeft
,
"angleLeft/D"
);
tw
->
Branch
(
"x1mm"
,
&
x1mm
,
"x1mm/F"
);
tw
->
Branch
(
"y1mm"
,
&
y1mm
,
"y1mm/F"
);
tw
->
Branch
(
"xThin"
,
&
xThin
,
"xThin/F"
);
tw
->
Branch
(
"yThin"
,
&
yThin
,
"yThin/F"
);
tw
->
Branch
(
"mapXbin"
,
&
mapXbin
,
"mapXbin/I"
);
tw
->
Branch
(
"mapYbin"
,
&
mapYbin
,
"mapYbin/I"
);
tw
->
Branch
(
"SQ20E"
,
SQ20E
,
"SQ20E[16]/F"
);
tw
->
Branch
(
"SQ20Ecorr"
,
SQ20Ecorr
,
"SQ20Ecorr[16]/F"
);
tw
->
Branch
(
"SQ20EcorrHit"
,
SQ20EcorrHit
,
"SQ20EcorrHit[16]/F"
);
tw
->
Branch
(
"SQ20Esum"
,
&
SQ20Esum
,
"SQ20Esum/F"
);
tw
->
Branch
(
"SQ20time"
,
SQ20time
,
"SQ20time[16]/F"
);
tw
->
Branch
(
"SQ20timeMult"
,
&
SQ20timeMult
,
"SQ20timeMult/I"
);
// tw->Branch("SQLXtimeSum",&SQLXtimeSum,"SQLXtimeSum/F");
tw
->
Branch
(
"SQLXtime"
,
SQLXtime
,
"SQLXtime[32]/F"
);
tw
->
Branch
(
"SQLXtimeMult"
,
&
SQLXtimeMult
,
"SQLXtimeMult/I"
);
tw
->
Branch
(
"SQLYtime"
,
SQLYtime
,
"SQLYtime[16]/F"
);
tw
->
Branch
(
"SQLYtimeMult"
,
&
SQLYtimeMult
,
"SQLYtimeMult/I"
);
tw
->
Branch
(
"SQLXE"
,
SQLXE
,
"SQLXE[32]/F"
);
tw
->
Branch
(
"SQLXEsum"
,
&
SQLXEsum
,
"SQLXE/F"
);
tw
->
Branch
(
"SQLXEtimeFiltered"
,
SQLXEtimeFiltered
,
"SQLXEtimeFiltered[32]/F"
);
tw
->
Branch
(
"SQLXEsumtimeFilteredSum"
,
&
SQLXEtimeFilteredSum
,
"SQLXEtimeFilteredSum/F"
);
tw
->
Branch
(
"SQLYEtimeFiltered"
,
SQLYEtimeFiltered
,
"SQLYEtimeFiltered[16]/F"
);
tw
->
Branch
(
"SQLYEsumtimeFilteredSum"
,
&
SQLYEtimeFilteredSum
,
"SQLYEtimeFilteredSum/F"
);
tw
->
Branch
(
"SQLYE"
,
SQLYE
,
"SQLYE[16]/F"
);
tw
->
Branch
(
"SQLYEsum"
,
&
SQLYEsum
,
"SQLYEsum/F"
);
...
...
@@ -114,7 +177,7 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
TFile
fThickness
(
"thicknessFinal.root"
,
"OPEN"
);
fr
->
cd
();
TH2F
*
hThickness
=
new
TH2F
(
*
(
TH2F
*
)
fThickness
.
Get
(
"hTh"
));
hThickness
->
Draw
(
"col"
);
//
hThickness->Draw("col");
// std::cout << std::setprecision(1) << std::fixed;
...
...
@@ -137,24 +200,25 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
// }
// }
Float_t
timeCorr
[
16
]
=
{
0
,
-
2
,
0
,
2
,
-
2.5
,
5
,
-
6
,
4
,
7
,
3
,
3
,
4
,
6
,
4
,
-
4
,
13
};
fw
->
cd
();
// TELoss fAlphaSi;
// fAlphaSi.SetEL(1, 2.321); // density in g/cm3
// fAlphaSi.AddEL(14., 28.086, 1); //Z, mass
// // mSi.SetZP(1., 1.); //protons
// fAlphaSi.SetZP(2., 3.); //3He, Z, A
// fAlphaSi.SetEtab(100000, 100.); // ?, MeV calculate ranges
// fAlphaSi.SetDeltaEtab(300);
//////////////////////////////////
//event processing
//////////////////////////////////
for
(
Int_t
eventNo
=
0
;
eventNo
<
nevents
;
eventNo
++
)
{
// cout << eventNo << endl;
tr
->
GetEvent
(
eventNo
);
// cout << eventNo << endl;
// cout << revent->SQX_L[0] << endl;
// SQLXE[0] = revent->SQX_L[0];
...
...
@@ -164,21 +228,32 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
SQRXEsum
=
0.
;
SQRXmult
=
0
;
SQLXEtimeFilteredSum
=
0.
;
SQLYEtimeFilteredSum
=
0.
;
SQLXmult
=
0
;
SQLYmult
=
0
;
SQ20EcorrMult
=
0
;
SQ20EcorrHitMult
=
0
;
SQ20timeMult
=
0
;
SQLXtimeMult
=
0
;
// SQLXtimeSum = 0;
SQLYtimeMult
=
0
;
//cout << endl;
for
(
Int_t
i
=
0
;
i
<
32
;
i
++
)
{
// cout << pSQX_L_EC.Energy(1, i) << endl;
SQLXE
[
i
]
=
0
;
SQRXE
[
i
]
=
0
;
SQLXtime
[
i
]
=
0
;
SQLXEtimeFiltered
[
i
]
=
0.
;
energy
=
pSQX_L_EC
.
Energy
(
revent
->
SQX_L
[
i
],
i
);
// cout << energy << "\t" << pSQX_L_EC.a[i][0] << "\t" << pSQX_L_EC.a[i][1] << "\t" << pSQX_L_EC.a[i][2] << endl;
// cout << energy << endl;
// if (i == 5 && i == 6) continue;
if
(
energy
>
kSQLX_energy_thr
)
{
...
...
@@ -187,6 +262,28 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
SQLXmult
++
;
}
if
(
i
<
16
&&
i
!=
5
&&
i
!=
6
&&
i
!=
0
&&
i
!=
1
&&
SQLXE
[
i
]
>
kSQLX_energy_thr
&&
revent
->
tSQX_L
[
i
]
*
0.3
>
320
&&
revent
->
tSQX_L
[
i
]
*
0.3
<
380
)
{
SQLXtime
[
i
]
=
revent
->
tSQX_L
[
i
]
*
0.3
;
SQLXtimeMult
++
;
// SQLXtimeSum = SQLXtimeSum + SQLXtime[i];
SQLXEtimeFiltered
[
i
]
=
energy
;
SQLXEtimeFilteredSum
=
SQLXEtimeFilteredSum
+
SQLXEtimeFiltered
[
i
];
// cout << SQLXtime[i] << endl;
// cout << i << endl;
}
if
(
i
>
15
&&
SQLXE
[
i
]
>
kSQLX_energy_thr
&&
revent
->
tSQX_L
[
i
]
*
0.3
>
410
&&
revent
->
tSQX_L
[
i
]
*
0.3
<
470
)
{
SQLXtime
[
i
]
=
revent
->
tSQX_L
[
i
]
*
0.3
;
SQLXtimeMult
++
;
// SQLXtimeSum = SQLXtimeSum + SQLXtime[i];
SQLXEtimeFiltered
[
i
]
=
energy
;
SQLXEtimeFilteredSum
=
SQLXEtimeFilteredSum
+
SQLXEtimeFiltered
[
i
];
//// cout << SQLXtime[i] << endl;
}
energy
=
pSQX_R_EC
.
Energy
(
revent
->
SQX_R
[
i
],
i
);
if
(
energy
>
1.0
)
{
...
...
@@ -201,9 +298,14 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
SQLYE
[
i
]
=
0.
;
SQ20E
[
i
]
=
0.
;
SQ20time
[
i
]
=
0.
;
SQ20Ecorr
[
i
]
=
0.
;
SQ20EcorrHit
[
i
]
=
0.
;
// SQRXE[i] = 0;
SQLYtime
[
i
]
=
0.
;
SQLYEtimeFiltered
[
i
]
=
0.
;
energy
=
pSQ20_EC
.
Energy
(
revent
->
SQ20
[
i
],
i
);
// if (energy > 1.) {
...
...
@@ -213,6 +315,9 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
// cout << i << "\t" << energy << "\t" << pSQ20_EC.a[i][0] << "\t" << pSQ20_EC.a[i][1] << "\t" << pSQ20_EC.a[i][2] << endl;
// }
SQ20time
[
i
]
=
revent
->
tSQ20
[
i
]
*
0.3
;
if
(
SQ20E
[
i
]
>
kSQL20_energy_thr
&&
SQ20time
[
i
]
>
400
&&
SQ20time
[
i
]
<
500
)
SQ20timeMult
++
;
if
(
i
==
0
)
continue
;
...
...
@@ -227,6 +332,18 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
SQLYmult
++
;
}
Double_t
time
=
revent
->
tSQY_L
[
i
]
*
0.3
+
timeCorr
[
i
];
if
(
SQLYE
[
i
]
>
kSQLY_energy_thr
&&
time
>
325
&&
time
<
333
)
{
// cout << "!!!!!!!!!!!!" << endl;
SQLYtime
[
i
]
=
time
;
SQLYtimeMult
++
;
SQLYEtimeFiltered
[
i
]
=
energy
;
SQLYEtimeFilteredSum
=
SQLYEtimeFilteredSum
+
SQLYEtimeFiltered
[
i
];
}
// energy = pSQX_R_EC.Energy(revent->SQX_R[i], i);
//
// if (energy > 1.0) {
...
...
@@ -236,6 +353,8 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
// }
}
//for 16
// cout << SQLXtimeMult << endl;
// cout << endl;
///////////////////////////////////////////////
...
...
@@ -260,7 +379,7 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
// }
for
(
Int_t
x20
=
0
;
x20
<
kSQL_20_strips
;
x20
++
)
{
if
(
SQ20E
[
x20
]
>
kSQL20_energy_thr
&&
currThickness
<
30.
)
{
if
(
SQ20E
[
x20
]
>
kSQL20_energy_thr
/*SQ20timeMult==1*/
&&
currThickness
<
30.
)
{
// SQ20Ecorr[x20] = SQ20E[x20] + 1.;
// currThickness = kSQ20_norm_thickness + (currThickness - kSQ20_norm_thickness)*0.5;
...
...
@@ -283,7 +402,7 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
}
}
}
}
//if for correction according energy multiplicity
///////////////////////////////////////////////
...
...
@@ -329,15 +448,96 @@ void fillTree(Int_t nofile = 0, const Int_t noevents = 0) {
}
// cout << endl;
///////////////////////////////////////////////
//position of hit in left telescope
///////////////////////////////////////////////
//reset
mapXbin
=
-
1
;
mapYbin
=
-
1
;
x1mm
=
-
100.
;
y1mm
=
-
100.
;
xThin
=
-
100.
;
yThin
=
-
100.
;
vHit1mm
.
SetXYZ
(
x1mm
,
y1mm
,
-
1.
);
angleLeft
=
TMath
::
Pi
();
if
(
SQLXtimeMult
==
1
)
{
for
(
Int_t
i
=
0
;
i
<
32
;
i
++
)
{
if
(
SQLXEtimeFiltered
[
i
]
>
0
)
x1mm
=
-
30.
+
(
i
+
1
/
2
)
*
60.
/
32.
;
}
}
// cout << SQLYtimeMult << endl;
if
(
SQLYtimeMult
==
1
)
{
for
(
Int_t
i
=
0
;
i
<
16
;
i
++
)
{
if
(
SQLYEtimeFiltered
[
i
]
>
0
)
y1mm
=
-
30.
+
(
i
+
1
/
2
)
*
60.
/
16.
;
}
}
if
(
SQLXtimeMult
==
1
&&
SQLYtimeMult
==
1
&&
xt
>-
50.
&&
yt
>-
50.
)
{
vHit1mm
.
SetXYZ
(
x1mm
-
xt
,
y1mm
-
yt
,
z1mm
);
// cout << vHit1mm.X() << "\t" << vHit1mm.Y() << endl;
// cout << "\t" << zThin/z1mm*vHit1mm.X() << "\t" << zThin/z1mm*vHit1mm.Y() << endl;
vHit1mm
*=
zThin
/
z1mm
;
// cout << "\t" << vHit1mm.X() << "\t" << vHit1mm.Y() << "\t" << vHit1mm.Z() << endl;
// cout << "\t" << xt << "\t" << yt << "\t" << 0 << endl;
// cout << zThin/z1mm << endl;
angleLeft
=
vHit1mm
.
Angle
(
vNorm
);
// xThin = vHit1mm.X()+xt;
// yThin = vHit1mm.Y()+yt;
// cout << angleLeft << endl;
}
// cout << angleLeft << endl;
// cout << x1mm << "\t" << y1mm << endl;
// cout << vHit1mm.X() << "\t" << vHit1mm.Y() << endl;
if
(
SQLXtimeMult
==
1
&&
SQLYtimeMult
==
1
&&
vHit1mm
.
X
()
+
xt
>-
30.
&&
vHit1mm
.
X
()
+
xt
<
30.
&&
vHit1mm
.
Y
()
+
yt
>-
30.
&&
vHit1mm
.
Y
()
+
yt
<
30.
)
{
mapYbin
=
(
vHit1mm
.
Y
()
+
yt
+
30.
-
0.5
*
60.
/
16.
)
*
16.
/
60.
;
mapXbin
=
(
vHit1mm
.
X
()
+
xt
+
30.
-
0.5
*
60.
/
32.
)
*
32.
/
60.
;
xThin
=
vHit1mm
.
X
()
+
xt
;
yThin
=
vHit1mm
.
Y
()
+
yt
;
// cout << "\t\t" << xThin << "\t" << yThin << endl;
// cout << mapYbin << "\t" << "\t" << y1mm << "\t" << xt << endl;
//calculation of corrected energy
currThickness
=
hThickness
->
GetBinContent
(
mapXbin
+
1
,
mapYbin
+
1
);
for
(
Int_t
x20
=
0
;
x20
<
kSQL_20_strips
;
x20
++
)
{
if
(
SQ20E
[
x20
]
>
kSQL20_energy_thr
/*SQ20timeMult==1*/
&&
currThickness
<
30.
)
{
SQ20EcorrHit
[
x20
]
=
(
kSQ20_norm_thickness
/
currThickness
)
*
SQ20E
[
x20
];
SQ20EcorrHitMult
++
;
// cout << mapXbin << "\t" << mapYbin << "\t" << x20
// << "\t" << currThickness
// << "\t" << SQ20E[x20] << "\t" << SQ20EcorrHit[x20] << "\t" << endl;
}
}
//for*/
}
//if inside the map
// cout << mapYbin << "\t" << "\t" << y1mm << endl;
// cout << mapXbin << "\t" << xThin << "\t" << x1mm << endl;
// cout << mapXbin << "\t" << mapYbin << endl;
tw
->
Fill
();
// cout << eventNo << "\t" << eventNo%100 << endl;
if
(
eventNo
%
100000
==
0
&&
eventNo
!=
0
)
{
cout
<<
eventNo
<<
" events processed."
<<
endl
;
}
}
}
//for events
cout
<<
nevents
<<
" entries processed."
<<
endl
;
...
...
analysis/showBananas2.cxx
View file @
f328bdca
...
...
@@ -6,21 +6,24 @@
#include "TBox.h"
#include "TCut.h"
#include "TCutG.h"
#include "TStopwatch.h"
using
std
::
cout
;
using
std
::
endl
;
void
showBananas2
(
const
Long64_t
drawEntries
=
100000
)
{
void
showBananas2
()
{
Long64_t
drawEntries
=
10000000
;
// TFile *fr = new TFile("~/data/exp1804/h5_11_00.root");
TChain
*
tr
=
new
TChain
(
"AnalysisxTree"
);
tr
->
Add
(
"~/data/exp1804/h5_14_0?.root"
);
//
tr->Add("~/data/exp1804/h5_14_0?.root");
tr
->
Add
(
"~/data/exp1804/be10_0?_?0.root"
);
TChain
*
trCal
=
new
TChain
(
"cal"
);
// trCal->Add("~/data/exp1804/h5_11_0?_calib.root");
trCal
->
Add
(
"~/data/exp1804/h5_14_0?_calib.root"
);
//
trCal->Add("~/data/exp1804/h5_14_0?_calib.root");
trCal
->
Add
(
"~/data/exp1804/be10_0?_?0_calib.root"
);
tr
->
AddFriend
(
trCal
);
...
...
@@ -53,56 +56,91 @@ void showBananas2(const Long64_t drawEntries = 100000) {
TString
varName
;
TString
condition
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
// cout << drawEntries << " entries in input chain will be processed." << endl;
TString
timeSiLeftCondition
;
timeSiLeftCondition
.
Form
(
"(SQLXtime[0]>0"
);
for
(
Int_t
j
=
1
;
j
<
32
;
j
++
)
{
condition
.
Form
(
"|| SQLXtime[%d]>0"
,
j
);
timeSiLeftCondition
.
Append
(
condition
);
}
timeSiLeftCondition
.
Append
(
")"
);
Int_t
firstThinStrip
=
5
;
const
Int_t
firstThinStrip
=
5
;
TStopwatch
stopwatch
;
stopwatch
.
Start
();
/////////////////////////////////////////////////////////////////////
// c1
/*TCanvas *c1 = new TCanvas("c1", "time i
ssues", 1600, 8
00);
c1->Divide(4,
2
);
/*TCanvas *c1 = new TCanvas("c1", "time i
n thin detector", 1600, 12
00);
c1->Divide(4,
4
);
for (Int_t i = 0; i < 8; i++) {
c1->cd(i+1);
// varName.Form("SQ20E[%d]:SQLYEsum", i+firstThinStrip);
varName.Form("SQ20E[%d]:SQ20E[%d]+SQLYEsum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20E[%d]>0 && SQ20E[%d]<14 && SQLYEsum>0. && SQLYEsum<120. && SQLYE[0]<1. && SQLYE[15]<1.", i+firstThinStrip, i+firstThinStrip);
firstThinStrip = 0;
varName.Form("SQX_L[%d]:tSQX_L[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("tSQX_L[%d]>0 && SQX_L[%d]>0", i+firstThinStrip, i+firstThinStrip);
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 10000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
for (Int_t i = 0; i < 16; i++) {
c1->cd(i+1);
varName.Form("SQ20E[%d]:tSQ20[%d]*0.3", i+firstThinStrip, i+firstThinStrip);
condition.Form("tSQ20[%d]>0 && SQ20E[%d]>1.2", i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kBlack);
tr->SetMarkerStyle(20);
tr->SetMarkerSize(0.1);
tr->Draw(varName, condition, "", drawEntries);
tr->Draw(varName, condition, "
col
", drawEntries);
c1->Update();
}
return;*/
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c2
/*TCanvas *c2 = new TCanvas("c2", "
1 mm Y: 8-15 zoomed", 1600, 8
00);
c2->Divide(4,
2
);
/*TCanvas *c2 = new TCanvas("c2", "
time issues in 32 X-strips: 0-15", 1600, 12
00);
c2->Divide(4,
4
);
for (Int_t i = 0; i < 8; i++) {
firstThinStrip = 0;
Int_t conTimeMult = 1;
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 1000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
for (Int_t i = 0; i < 16; i++) {
c2->cd(i+1);
varName.Form("SQ20E[%d]:SQLYEsum", i+firstThinStrip);
varName.Form("SQ20E[%d]:SQ20E[%d]+SQLYEsum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20E[%d]>1.2 && SQ20E[%d]<5 "
"&& SQLYEsum>1.1 && SQLYEsum<30 "
"&& SQLYE[0]<1. && SQLYE[15]<1."
"&& SQLYmult==1 && SQLXmult==1"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kBlack);
varName.Form("SQLXE[%d]:0.3*tSQX_L[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("0.3*tSQX_L[%d]>200 && 0.3*tSQX_L[%d]<500 && SQLXE[%d]>0", i+firstThinStrip, i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kRed);
tr->SetMarkerStyle(20);
tr->SetMarkerSize(.4);
tr->Draw(varName, condition, "col", drawEntries);
// tr->Draw(varName, condition, "", drawEntries);
tAlphaCal->Draw(varName, "", "same");
varName.Form("SQLXE[%d]:SQLXtime[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQLXtime[%d]>0 && SQLXE[%d]>0 && SQLXtimeMult==%d",
i+firstThinStrip, i+firstThinStrip, conTimeMult);
varName.Form("SQLXEtimeFiltered[%d]:0.3*tSQX_L[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("0.3*tSQX_L[%d]>200 && 0.3*tSQX_L[%d]<500 && SQLXEtimeFilteredSum>0 && SQLXtimeMult==%d",
i+firstThinStrip, i+firstThinStrip, conTimeMult);
// condition.Form("SQLXtimeSum>0 && SQLXtimeSum<470 && SQLXtimeMult==%d && %s",
// conTimeMult, timeSiLeftCondition.Data());
cout << condition << endl;
tr->Draw(varName, condition, "same", drawEntries);
// tAlphaCal->Draw(varName, "", "same");
c2->Update();
}//for */
...
...
@@ -111,173 +149,455 @@ void showBananas2(const Long64_t drawEntries = 100000) {
// return;
/////////////////////////////////////////////////////////////////////
// c3
TCanvas
*
c3
=
new
TCanvas
(
"c3"
,
"dE-E corrected"
,
1600
,
800
);
c3
->
Divide
(
4
,
2
);
/////////////////////////////////////////////////////////////////////
// c2_1
TF1
*
f3
=
new
TF1
(
"dEE"
,
"log(1/x)-log(0.1)+1.6"
,
1
,
30
);
f3
->
SetLineColor
(
kRed
);
f3
->
SetLineWidth
(
3
);
/*TCanvas *c2_1 = new TCanvas("c2_1", "time issues in 32 X-strips: 16-31", 1600, 1200);
c2_1->Divide(4,4);
TF1
*
f4
=
new
TF1
(
"dEE"
,
"log(1/x)-log(0.1)+1.98"
,
1
,
30
);
f4
->
SetLineColor
(
kGreen
);
f4
->
SetLineWidth
(
3
);
firstThinStrip = 16;
TF1
*
f6
=
new
TF1
(
"dEE"
,
"log(1/x)-log(0.1)+2.66"
,
1
,
30
);
f4
->
SetLineColor
(
kBlue
);
f4
->
SetLineWidth
(
3
);
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 1000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
for (Int_t i = 0; i < 16; i++) {
c2_1->cd(i+1);
varName.Form("SQLXE[%d]:0.3*tSQX_L[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("0.3*tSQX_L[%d]>300 && 0.3*tSQX_L[%d]<600 && SQLXE[%d]>0", i+firstThinStrip, i+firstThinStrip, i+firstThinStrip);
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c3
->
cd
(
i
+
1
);
// varName.Form("SQ20Ecorr[%d]:SQLYEsum", i+firstThinStrip);
varName
.
Form
(
"SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLYEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
varName
.
Form
(
"SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLXEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20Ecorr[%d]>1.2 && SQ20Ecorr[%d]<5 "
"&& SQLYEsum>1.1 && SQLYEsum<30 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& SQLYE[0]<1. && SQLYE[15]<1. "
"&& SQLYmult==1 && SQLXmult==1"
"&& trigger==3"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
SetMarkerColor
(
kBlack
);
// tr->SetMarkerColor(kBlack);
tr->Draw(varName, condition, "col", drawEntries);
// tr->Draw(varName, condition, "", drawEntries);
tAlphaCal
->
Draw
(
varName
,
""
,
"same"
);
varName.Form("SQLXE[%d]:SQLXtime[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQLXtime[%d]>0 && SQLXE[%d]>0 && SQLXtimeMult==%d", i+firstThinStrip, i+firstThinStrip, conTimeMult);
tr->Draw(varName, condition, "same", drawEntries);
c2_1->Update();
}//for */
// return;
/////////////////////////////////////////////////////////////////////
// c3
// f3->Draw("same");
// f4->Draw("same");
// f6->Draw("same");
/*TCanvas *c3 = new TCanvas("c3", "Multiplicity", 1600, 1200);
c3->Divide(2,2);
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 10000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
c3->cd(1);
varName.Form("SQ20timeMult");
condition.Form("trigger==3 && SQ20timeMult>0");
tr->Draw(varName, condition, "", drawEntries);
c3->Update();
}
//*/
return
;
c3->cd(2);
varName.Form("SQLXtimeMult");
condition.Form("trigger==3 && SQLXtimeMult>0 && SQLXtimeMult<8");
tr->Draw(varName, condition, "", drawEntries);
c3->Update();
/////////////////////////////////////////////////////////////////////
// c4
c3->cd(3);
varName.Form("SQ20EcorrMult");
condition.Form("trigger==3 && SQ20EcorrMult>0");
tr->Draw(varName, condition, "", drawEntries);
c3->Update();
c3->cd(4);
varName.Form("SQLXmult");
condition.Form("trigger==3 && SQLXmult>0");
tr->Draw(varName, condition, "", drawEntries);
c3->Update();
//*/
/////////////////////////////////////////////////////////////////////
// c2
// return;
/////////////////////////////////////////////////////////////////////
// c4
TCanvas
*
c4
=
new
TCanvas
(
"c4"
,
"1 mm Y all: 8-15 zoomed"
,
1000
,
9
00
);
/*TCanvas *c4 = new TCanvas("c4", "time issues in 16 Y-strips", 1600, 12
00);
c4->Divide(4,4);
firstThinStrip = 0;
Int_t conTimeMult = 1;
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 1000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
Float_t timeCorr[16] = {0, -2, 0, 2,
-2.5, 5, -6, 4,
7, 3, 3, 4,
6, 4, -4, 13
};
for (Int_t i = 0; i < 16; i++) {
c4->cd(i+1);
// varName.Form("SQ20E[%d]:SQLYEsum", i);
varName
.
Form
(
"SQ20E[%d]:SQ20E[%d]+SQLYEsum"
,
i
,
i
);
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5 "
"&& SQLYEsum>1.1 && SQLYEsum<30 "
"&& SQLYE[0]<1. && SQLYE[15]<1."
"&& SQLYmult==1 && SQLXmult==1"
"&& trigger==3"
,
i
,
i
);
tr
->
SetMarkerColor
(
kBlack
);
varName.Form("SQLYE[%d]:0.3*tSQY_L[%d]+%f", i+firstThinStrip, i+firstThinStrip, timeCorr[i]);
condition.Form("0.3*tSQY_L[%d]>300 && 0.3*tSQY_L[%d]<360 && SQLYE[%d]>0", i+firstThinStrip, i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kRed);
tr->SetMarkerStyle(20);
tr->SetMarkerSize(.4);
tr->Draw(varName, condition, "col", drawEntries);
// tr->Draw(varName, condition, "", drawEntries);
// tr->Draw(varName, condition, "", drawEntries);
tAlphaCal
->
Draw
(
varName
,
""
,
"same"
);
varName.Form("SQLYEtimeFiltered[%d]:SQLYtime[%d]", i+firstThinStrip, i+firstThinStrip);
// condition.Form("SQLYtime[%d]>0 && SQLYE[%d]>0 && SQLYtimeMult==%d",
// i+firstThinStrip, i+firstThinStrip, conTimeMult);
c4
->
Update
();
}
//for */
// varName.Form("SQLYEtimeFiltered[%d]:0.3*tSQY_L[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("0.3*tSQY_L[%d]>200 && 0.3*tSQY_L[%d]<500 && SQLYEtimeFilteredSum>0 && SQLYtimeMult==%d",
i+firstThinStrip, i+firstThinStrip, conTimeMult);
cout << condition << endl;
tr->Draw(varName, condition, "same", drawEntries);
return
;
// varName.Form("SQLXE[%d]:SQLXtime[%d]", i+firstThinStrip, i+firstThinStrip);
condition.Form("0.3*tSQY_L[%d]+%f>325 && 0.3*tSQY_L[%d]+%f<333 && SQLYE[%d]>0",
i+firstThinStrip, timeCorr[i], i+firstThinStrip, timeCorr[i], i+firstThinStrip);
//
// varName.Form("SQLXEtimeFiltered[%d]:0.3*tSQX_L[%d]", i+firstThinStrip, i+firstThinStrip);
// condition.Form("0.3*tSQX_L[%d]>200 && 0.3*tSQX_L[%d]<500 && SQLXEtimeFilteredSum>0 && SQLXtimeMult==%d",
// i+firstThinStrip, i+firstThinStrip, conTimeMult);
// // condition.Form("SQLXtimeSum>0 && SQLXtimeSum<470 && SQLXtimeMult==%d && %s",
// // conTimeMult, timeSiLeftCondition.Data());
//
// cout << condition << endl;
//
tr->SetMarkerColor(kRed);
// tr->Draw(varName, condition, "same", drawEntries);
// tAlphaCal->Draw(varName, "", "same");
c4->Update();
}//for */
return
;
//
return;
/////////////////////////////////////////////////////////////////////
// c5
TCanvas
*
c5
=
new
TCanvas
(
"c4"
,
"MWPC"
,
1000
,
1000
);
c5
->
Divide
(
2
,
2
);
TCanvas
*
c5
=
new
TCanvas
(
"c5"
,
"Multiplicity"
,
1400
,
900
);
c5
->
Divide
(
3
,
3
);
cout
<<
tr
->
GetEntries
()
<<
" events."
<<
endl
;
cout
<<
trCal
->
GetEntries
()
<<
" calibrated events."
<<
endl
;
drawEntries
=
10000000
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
c5
->
cd
(
4
);
condition
.
Form
(
"TOF<185 && TOF>165 && trigger==3 && yt>-50 && xt>-50"
);
varName
.
Form
(
"yt:xt>>hXYt(32, -40., 40., 32, -40., 40.)"
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
// targetBoarder->Draw();
c5
->
Update
();
c5
->
cd
(
1
);
tr
->
Draw
(
"y1p:x1p>>hXY1(32, -20., 20., 32, -20., 20.)"
,
"TOF<185 && TOF>165 && dEbeam>600 && dEbeam<1150 && trigger==3 && y1p>-50 && x1p>-50"
,
"col"
,
1000000
);
cBL
->
Draw
(
"same"
);
cBR
->
Draw
(
"same"
);
// varName.Form("SQ20timeMult");
// condition.Form("trigger==3 && SQ20timeMult>0");
tr
->
Draw
(
"angleLeft"
,
"angleLeft<3"
,
""
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
2
);
tr
->
Draw
(
"y2p:x2p>>hXY2(32, -20., 20., 32, -20., 20.)"
,
"TOF<185 && TOF>165 && dEbeam>600 && dEbeam<1150 && trigger==3 && y2p>-50 && x2p>-50"
,
"col"
,
1000000
);
varName
.
Form
(
"SQLYtimeMult"
);
condition
.
Form
(
"trigger==3 && SQLYtimeMult>0 && SQLYtimeMult<8"
);
tr
->
Draw
(
varName
,
condition
,
""
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
3
);
tr
->
Draw
(
"dEbeam:TOF>>IDplot(200,,,200,,)"
,
"TOF<200 && TOF>100 && dEbeam < 2500 && trigger==1"
,
"col"
,
1000000
);
TBox
*
beamBox
=
new
TBox
(
165
,
1150
,
185
,
600
);
varName
.
Form
(
"y1mm:x1mm>>h(32, -30., 30, 16, -30., 30)"
);
condition
.
Form
(
"trigger==3 && y1mm>-80. && x1mm>-80."
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
4
);
varName
.
Form
(
"mapXbin"
);
condition
.
Form
(
"trigger==3 && mapXbin>-1"
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
5
);
varName
.
Form
(
"mapYbin"
);
condition
.
Form
(
"trigger==3 && mapYbin>-1"
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
6
);
varName
.
Form
(
"yThin:xThin"
);
condition
.
Form
(
"trigger==3 && yThin>-80. && xThin>-80."
);
// condition.Form("yThin>-80. && xThin>-80.");
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
TBox
*
boxThinDet
=
new
TBox
(
25.
,
-
25.
,
-
25.
,
25.
);
boxThinDet
->
SetLineColor
(
kRed
);
boxThinDet
->
SetLineWidth
(
3
);
boxThinDet
->
SetFillStyle
(
0
);
boxThinDet
->
Draw
(
"same"
);
c5
->
Update
();
c5
->
cd
(
7
);
// varName.Form("nx1");
// condition.Form("nx1>0 && nx1<10");
//// condition.Form("yThin>-80. && xThin>-80.");
// tr->Draw(varName, condition, "col", drawEntries);
tr
->
Draw
(
"dEbeam:TOF>>IDplot(200,,,200,,)"
,
"TOF<400 && TOF>0 && dEbeam < 4000 && trigger==1"
,
"col"
,
1000000
);
// tr->Draw("dEbeam:TOF>>IDplot(200,,,200,,)", " trigger==1", "col", 1000000);
TBox
*
beamBox
=
new
TBox
(
156
,
2300
,
165
,
1800
);
beamBox
->
SetFillStyle
(
0
);
beamBox
->
SetLineWidth
(
3
);
beamBox
->
SetLineColor
(
kRed
);
beamBox
->
Draw
();
c5
->
Update
();
c5
->
cd
(
8
);
varName
.
Form
(
"ny1"
);
condition
.
Form
(
"ny1>0 && ny1<10"
);
tr
->
Draw
(
varName
,
condition
,
""
,
drawEntries
);
c5
->
Update
();
condition
.
Form
(
"ny1>0 && ny1<10 && TOF>156 && TOF<165 && dEbeam > 1800 && dEbeam<2300 && trigger==1"
);
// condition.Form("yThin>-80. && xThin>-80.");
tr
->
Draw
(
varName
,
condition
,
"same"
,
drawEntries
);
c5
->
Update
();
c5
->
cd
(
9
);
varName
.
Form
(
"yt:xt"
);
condition
.
Form
(
"trigger==3"
);
// condition.Form("yThin>-80. && xThin>-80.");
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
//*/
return
;
/////////////////////////////////////////////////////////////////////
// c6
// c9
/*TCanvas *c9 = new TCanvas("c9", "dE-E uncorrected", 1600, 800);
c9->Divide(4,2);
firstThinStrip = 5;
TCanvas
*
c6
=
new
TCanvas
(
"c6"
,
"1 mm Y: 8-15 - target locus"
,
1600
,
800
);
c6
->
Divide
(
4
,
2
);
TString
cTarget
(
"xt>-10. && xt<10. && yt>-15. && yt<15."
);
Int_t drawnEvents1[8];
c6
->
cd
(
1
);
tr
->
Draw
(
"SQ20E[0]:SQ20E[0]+SQLYEsum>>(200,0,5,200,0,5)"
,
""
,
""
,
100
);
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 10000000;
Long64_t drawEntriesCorrected = 20000000;
cout << drawEntries << " entries in input chain will be processed." << endl;
for (Int_t i = 0; i < 8; i++) {
c6
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20E[%d]:SQ20E[%d]+SQLYEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5.5 && SQLYEsum>1.1 && SQLYEsum<30 && SQLYE[0]<1. && SQLYE[15]<1."
,
c9->cd(i+1);
varName.Form("SQ20E[%d]:SQ20E[%d]+SQLXEsum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20E[%d]>1.2 && SQ20E[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
// "&& SQLXtimeMult==1"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kRed);
tr->SetMarkerStyle(20);
tr->SetMarkerSize(.4);
tr->Draw(varName, condition, "col", drawEntries);
c6
->
Update
();
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5.5 && SQLYEsum>1.1 && SQLYEsum<30 && SQLYE[0]<1. && SQLYE[15]<1. && %s"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
,
cTarget
.
Data
());
tr
->
SetMarkerColor
(
kRed
);
varName.Form("SQ20E[%d]:SQ20E[%d]+SQLXEtimeFilteredSum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20E[%d]>1.2 && SQ20E[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& SQLXtimeMult==1"
// "&& %s"
"&& SQLXEtimeFilteredSum>0"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
drawnEvents1[i] = tr->Draw(varName, condition, "same", drawEntriesCorrected);
// cout << "noevents in strip " << i << ": " << drawnEvents << endl;
c9->Update();
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c10
/*TCanvas *c10 = new TCanvas("c10", "dE-E corrected", 1600, 800);
c10->Divide(4,2);
Int_t drawnEvents2[8];
firstThinStrip = 5;
cout << tr->GetEntries() << " events." << endl;
cout << trCal->GetEntries() << " calibrated events." << endl;
drawEntries = 10000000;
// drawEntriesCorrected = 100000000;
drawEntriesCorrected = drawEntriesCorrected/0.4;
cout << drawEntries << " entries in input chain will be processed." << endl;
for (Int_t i = 0; i < 8; i++) {
c10->cd(i+1);
varName.Form("SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLXEsum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20Ecorr[%d]>1.2 && SQ20Ecorr[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
// "&& SQLXtimeMult==1"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
tr->Draw(varName, condition, "col", drawEntries);
c10->Update();
tr->SetMarkerStyle(20);
tr
->
SetMarkerSize
(
.5
);
tr->SetMarkerSize(.4);
tr->SetMarkerColor(kRed);
varName.Form("SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLXEsum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20Ecorr[%d]>1.2 && SQ20Ecorr[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
// "&& SQLXtimeMult==1"
// "&& SQLXEtimeFilteredSum>0"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
tr->Draw(varName, condition, "same", drawEntries);
c6
->
Update
();
c10->Update();
tr->SetMarkerColor(kGreen);
// tr->SetMarkerColor(kRed);
varName.Form("SQ20EcorrHit[%d]:SQ20EcorrHit[%d]+SQLXEtimeFilteredSum", i+firstThinStrip, i+firstThinStrip);
condition.Form("SQ20EcorrHit[%d]>1.2 && SQ20EcorrHit[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& SQLXtimeMult==1"
"&& SQLXEtimeFilteredSum>0.5"
"&& trigger==3",
i+firstThinStrip, i+firstThinStrip);
drawnEvents2[i] = tr->Draw(varName, condition, "same", drawEntriesCorrected);
// tAlphaCal->Draw(varName, "", "same");
c10->Update();
}
for (Int_t i = 0; i < 8; i++) {
cout << "noevents in strip " << i+firstThinStrip << ": " << drawnEvents1[i] << " (first choice)" << endl;
cout << "noevents in strip " << i+firstThinStrip << ": " << drawnEvents2[i] << " (second choice)" << endl;
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c
7
// c
11
TCanvas
*
c7
=
new
TCanvas
(
"c7"
,
"1 mm Y: 8-15"
,
1600
,
800
);
c7
->
Divide
(
4
,
2
);
TString
cStripsLow
(
"SQLXE[0]<1. && SQLXE[1]<1. && SQLXE[2]<1. && SQLXE[3]<1. && SQLXE[4]<1. && SQLXE[5]<1. && SQLXE[6]<1. && SQLXE[7]<1. && SQLXE[8]<1. && SQLXE[9]<1. && SQLXE[10]<1."
);
TString
cStripsHigh
(
"SQLXE[31]<1. && SQLXE[30]<1. && SQLXE[29]<1. && SQLXE[28]<1. && SQLXE[27]<1. && SQLXE[26]<1. && SQLXE[25]<1. && SQLXE[24]<1. && SQLXE[23]<1. && SQLXE[22]<1. && SQLXE[21]<1. && SQLXE[20]<1."
);
TCanvas
*
c11
=
new
TCanvas
(
"c11"
,
"dE-E uncorrected"
,
1600
,
800
);
c11
->
Divide
(
4
,
2
);
firstThinStrip
=
5
;
Int_t
drawnEvents1
[
8
];
cout
<<
tr
->
GetEntries
()
<<
" events."
<<
endl
;
cout
<<
trCal
->
GetEntries
()
<<
" calibrated events."
<<
endl
;
drawEntries
=
1000000000
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c
7
->
cd
(
i
+
1
);
c
11
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20E[%d]:SQ20E[%d]+SQLXEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5
.5
"
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& %s && %s"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
,
cStripsLow
.
Data
(),
cStripsHigh
.
Data
());
// "&& SQLXtimeMult==1"
"&& trigger==3"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
SetMarkerColor
(
kRed
);
tr
->
SetMarkerStyle
(
20
);
tr
->
SetMarkerSize
(
.4
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c7
->
Update
();
}
c11
->
Update
();
}
//*/
// return;
/////////////////////////////////////////////////////////////////////
// c12
TCanvas
*
c12
=
new
TCanvas
(
"c12"
,
"dE-E corrected (first approximation)"
,
1600
,
800
);
c12
->
Divide
(
4
,
2
);
Int_t
drawnEvents2
[
8
];
firstThinStrip
=
5
;
cout
<<
tr
->
GetEntries
()
<<
" events."
<<
endl
;
cout
<<
trCal
->
GetEntries
()
<<
" calibrated events."
<<
endl
;
drawEntries
=
1000000000
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c12
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLXEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20Ecorr[%d]>1.2 && SQ20Ecorr[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
// "&& SQLXtimeMult==1"
"&& trigger==3"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
}
//*/
// return;
/////////////////////////////////////////////////////////////////////
// c13
TCanvas
*
c13
=
new
TCanvas
(
"c13"
,
"dE-E corrected (second approximation)"
,
1600
,
800
);
c13
->
Divide
(
4
,
2
);
firstThinStrip
=
5
;
cout
<<
tr
->
GetEntries
()
<<
" events."
<<
endl
;
cout
<<
trCal
->
GetEntries
()
<<
" calibrated events."
<<
endl
;
drawEntries
=
1000000000
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c13
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20EcorrHit[%d]:SQ20EcorrHit[%d]+SQLXEtimeFilteredSum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20EcorrHit[%d]>1.2 && SQ20EcorrHit[%d]<5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& SQLXtimeMult==1"
"&& SQLXEtimeFilteredSum>0.5"
"&& trigger==3"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c13
->
Update
();
}
//*/
cout
<<
"Finished in "
<<
stopwatch
.
RealTime
()
<<
" seconds"
<<
endl
;
cout
<<
"Finished in "
<<
stopwatch
.
RealTime
()
/
60.
<<
" minutes"
<<
endl
;
return
;
...
...
analysis/showTritium.cxx
View file @
f328bdca
...
...
@@ -28,12 +28,6 @@ void showTritium(const Long64_t drawEntries = 100000)
tr
->
AddFriend
(
trCal
);
// TFile *fcal = new TFile("~/data/exp1804/calib/si_20_03_calib.root");
// TTree *tAlphaCal = (TTree*)fcal->Get("cal");
// tAlphaCal->SetMarkerColor(kRed);
// tAlphaCal->SetMarkerStyle(20);
// tAlphaCal->SetMarkerSize(.6);
TFile
*
fc
=
new
TFile
(
"cutsIdentification.root"
,
"READ"
);
TCutG
*
cUS
=
(
TCutG
*
)
fc
->
Get
(
"c7UpperShadow"
);
TCutG
*
cLS
=
(
TCutG
*
)
fc
->
Get
(
"c7LowerShadow"
);
...
...
@@ -44,9 +38,6 @@ void showTritium(const Long64_t drawEntries = 100000)
TCutG
*
cBR
=
(
TCutG
*
)
fc
->
Get
(
"cBeamRight"
);
// const Int_t drawEntries = 6000000;
// const Int_t drawEntries = tr->GetEntries();
tr
->
GetListOfFiles
()
->
Print
();
trCal
->
GetListOfFiles
()
->
Print
();
...
...
@@ -102,7 +93,7 @@ void showTritium(const Long64_t drawEntries = 100000)
/////////////////////////////////////////////////////////////////////
// c2
/*
TCanvas *c2 = new TCanvas("c2", "time from right Si", 1600, 800);
TCanvas
*
c2
=
new
TCanvas
(
"c2"
,
"time from right Si"
,
1600
,
800
);
c2
->
Divide
(
4
,
2
);
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
...
...
@@ -142,7 +133,7 @@ void showTritium(const Long64_t drawEntries = 100000)
/////////////////////////////////////////////////////////////////////
// c3
/*
TCanvas *c3 = new TCanvas("c3", "time from CsI", 1000, 900);
TCanvas
*
c3
=
new
TCanvas
(
"c3"
,
"time from CsI"
,
1000
,
900
);
c3
->
Divide
(
4
,
4
);
// gROOT->ProcessLine(".x cutPokus.cxx");
...
...
@@ -210,7 +201,7 @@ void showTritium(const Long64_t drawEntries = 100000)
c4
->
Update
();
}
//*/
return
;
//
return;
/////////////////////////////////////////////////////////////////////
// c5
...
...
@@ -288,54 +279,6 @@ void showTritium(const Long64_t drawEntries = 100000)
}
return
;
/////////////////////////////////////////////////////////////////////
// c6
TCanvas
*
c6
=
new
TCanvas
(
"c6"
,
"1 mm Y: 8-15 - target locus"
,
1600
,
800
);
c6
->
Divide
(
4
,
2
);
TString
cTarget
(
"xt>-10. && xt<10. && yt>-15. && yt<15."
);
c6
->
cd
(
1
);
tr
->
Draw
(
"SQ20E[0]:SQ20E[0]+SQLYEsum>>(200,0,5,200,0,5)"
,
""
,
""
,
100
);
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c6
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20E[%d]:SQ20E[%d]+SQLYEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5.5 && SQLYEsum>1.1 && SQLYEsum<30 && SQLYE[0]<1. && SQLYE[15]<1."
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c6
->
Update
();
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5.5 && SQLYEsum>1.1 && SQLYEsum<30 && SQLYE[0]<1. && SQLYE[15]<1. && %s"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
,
cTarget
.
Data
());
tr
->
SetMarkerColor
(
kRed
);
tr
->
SetMarkerStyle
(
20
);
tr
->
SetMarkerSize
(
.5
);
tr
->
Draw
(
varName
,
condition
,
"same"
,
drawEntries
);
c6
->
Update
();
}
/////////////////////////////////////////////////////////////////////
// c7
TCanvas
*
c7
=
new
TCanvas
(
"c7"
,
"1 mm Y: 8-15"
,
1600
,
800
);
c7
->
Divide
(
4
,
2
);
TString
cStripsLow
(
"SQLXE[0]<1. && SQLXE[1]<1. && SQLXE[2]<1. && SQLXE[3]<1. && SQLXE[4]<1. && SQLXE[5]<1. && SQLXE[6]<1. && SQLXE[7]<1. && SQLXE[8]<1. && SQLXE[9]<1. && SQLXE[10]<1."
);
TString
cStripsHigh
(
"SQLXE[31]<1. && SQLXE[30]<1. && SQLXE[29]<1. && SQLXE[28]<1. && SQLXE[27]<1. && SQLXE[26]<1. && SQLXE[25]<1. && SQLXE[24]<1. && SQLXE[23]<1. && SQLXE[22]<1. && SQLXE[21]<1. && SQLXE[20]<1."
);
for
(
Int_t
i
=
0
;
i
<
8
;
i
++
)
{
c7
->
cd
(
i
+
1
);
varName
.
Form
(
"SQ20E[%d]:SQ20E[%d]+SQLXEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20E[%d]>1.2 && SQ20E[%d]<5.5 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& %s && %s"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
,
cStripsLow
.
Data
(),
cStripsHigh
.
Data
());
tr
->
Draw
(
varName
,
condition
,
"col"
,
drawEntries
);
c7
->
Update
();
}
return
;
}
analysis/showTritiumReport.cxx
0 → 100644
View file @
f328bdca
#include "TSystem.h"
#include "TFile.h"
#include "TTree.h"
#include "TChain.h"
#include "TCanvas.h"
#include "TBox.h"
#include "TCut.h"
#include "TCutG.h"
#include "TROOT.h"
using
std
::
cout
;
using
std
::
endl
;
void
showTritiumReport
(
const
Long64_t
drawEntries
=
1000000
)
{
TChain
*
tr
=
new
TChain
(
"AnalysisxTree"
);
tr
->
Add
(
"~/data/exp1804/h5_14_0?.root"
);
tr
->
Add
(
"~/data/exp1804/be10_0?_?0.root"
);
TChain
*
trCal
=
new
TChain
(
"cal"
);
trCal
->
Add
(
"~/data/exp1804/h5_14_0?_calib.root"
);
trCal
->
Add
(
"~/data/exp1804/be10_0?_?0_calib.root"
);
tr
->
AddFriend
(
trCal
);
TFile
*
fc
=
new
TFile
(
"cutsIdentification.root"
,
"READ"
);
TCutG
*
cUS
=
(
TCutG
*
)
fc
->
Get
(
"c7UpperShadow"
);
TCutG
*
cLS
=
(
TCutG
*
)
fc
->
Get
(
"c7LowerShadow"
);
cLS
->
SetLineColor
(
kMagenta
);
TCutG
*
cMA
=
(
TCutG
*
)
fc
->
Get
(
"c7MainAlpha"
);
TCutG
*
cA
=
(
TCutG
*
)
fc
->
Get
(
"c7All"
);
TCutG
*
cBL
=
(
TCutG
*
)
fc
->
Get
(
"cBeamLeft"
);
TCutG
*
cBR
=
(
TCutG
*
)
fc
->
Get
(
"cBeamRight"
);
tr
->
GetListOfFiles
()
->
Print
();
trCal
->
GetListOfFiles
()
->
Print
();
cout
<<
tr
->
GetEntries
()
<<
" events."
<<
endl
;
cout
<<
trCal
->
GetEntries
()
<<
" calibrated events."
<<
endl
;
TString
varName
;
TString
condition
;
cout
<<
drawEntries
<<
" entries in input chain will be processed."
<<
endl
;
Int_t
firstThinStrip
=
4
;
TFile
*
fCutsTime
=
new
TFile
(
"cutsTimeCsI.root"
);
TFile
*
fCutsTritium
=
new
TFile
(
"cutsDeltaEtritium.root"
);
TFile
*
fCutsHelium
=
new
TFile
(
"cutsDeltaEhelium.root"
);
TCutG
*
currCut
;
TString
cutName
;
TString
timeSiCondition
;
timeSiCondition
.
Form
(
"0.3*tSQX_R[0]-0.125*tF5[0]<100"
);
// TString auxCon;
for
(
Int_t
j
=
1
;
j
<
32
;
j
++
)
{
condition
.
Form
(
" && 0.3*tSQX_R[%d]-0.125*tF5[0]<100"
,
j
);
timeSiCondition
.
Append
(
condition
);
}
cout
<<
timeSiCondition
<<
endl
;
/////////////////////////////////////////////////////////////////////
// c1
/*TCanvas *c1 = new TCanvas("c1", "tritium raw", 1600, 400);
c1->Divide(4,1);
for (Int_t i = 0; i < 4; i++) {
c1->cd(i+1);
varName.Form("SQRXE:NeEvent.CsI_R[%d]", i+firstThinStrip);
condition.Form("NeEvent.CsI_R[%d]<4000 "
"&& SQRXEsum<40 && SQRXmult==1 && SQRXE[0]<1 "
"&& trigger==3",
i+firstThinStrip);
tr->SetMarkerColor(kBlack);
tr->SetMarkerStyle(20);
tr->SetMarkerSize(0.1);
tr->Draw(varName, condition, "", 10000000);
c1->Update();
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c2
/*TCanvas *c2 = new TCanvas("c2", "time from right Si", 1600, 400);
c2->Divide(4,1);
firstThinStrip = 14;
for (Int_t i = 0; i < 4; i++) {
c2->cd(i+1);
varName.Form("SQRXE[%d]:0.3*tSQX_R[%d]-0.125*tF5[0]", i+firstThinStrip, i+firstThinStrip);
condition.Form("tSQX_R[%d]>1"
"&& trigger==3"
"&& (0.3*tSQX_R[%d]-0.125*tF5[0])<250",
i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kBlack);
tr->Draw(varName, condition, "", drawEntries);
condition.Form(
"trigger==3 && %s",
timeSiCondition.Data());
tr->SetMarkerColor(kRed);
tr->Draw(varName, condition, "same", 10000000);
c2->Update();
}//for */
// return;
/////////////////////////////////////////////////////////////////////
// c3
/*TCanvas *c3 = new TCanvas("c3", "time from CsI", 1600, 400);
c3->Divide(4,1);
firstThinStrip = 4;
for (Int_t i = 0; i < 4; i++) {
c3->cd(i+1);
cutName.Form("cTime%d", i);
currCut = (TCutG*)fCutsTime->Get(cutName);
varName.Form("CsI_R[%d]:0.125*tCsI_R[%d]-0.125*tF5[0]",
i+firstThinStrip, i+firstThinStrip);
condition.Form("CsI_R[%d]>3 && trigger==3"
"&& 0.125*tCsI_R[%d]-0.125*tF5[0] > -80"
"&& 0.125*tCsI_R[%d]-0.125*tF5[0] < 0"
"&& CsI_R[%d] < 8500",
i+firstThinStrip, i+firstThinStrip,
i+firstThinStrip, i+firstThinStrip);
tr->SetMarkerColor(kBlack);
tr->Draw(varName, condition, "", 10000000);
currCut->Draw("same");
c3->Update();
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c4
/*TCanvas *c4 = new TCanvas("c4", "PID plot from CsI filtered for time", 1600, 400);
c4->Divide(4,1);
firstThinStrip = 8;
for (Int_t i = 0; i < 4; i++) {
c4->cd(i+1);
cutName.Form("cTime%d", i+firstThinStrip);
currCut = (TCutG*)fCutsTime->Get(cutName);
varName.Form("SQRXE:NeEvent.CsI_R[%d]", i+firstThinStrip);
condition.Form("NeEvent.CsI_R[%d]<3500"
"&& SQRXEsum<25 && SQRXEsum>1 && SQRXmult==1"
"&& trigger==3 && %s && %s",
i+firstThinStrip, cutName.Data(), timeSiCondition.Data());
tr->SetMarkerColor(kBlack);
tr->Draw(varName, condition, "", 100000000);
cutName.Form("cutEnergy%d", i+firstThinStrip);
currCut = (TCutG*)fCutsTritium->Get(cutName);
currCut->Draw("same");
c4->Update();
}//*/
// return;
/////////////////////////////////////////////////////////////////////
// c5
TCanvas
*
c5
=
new
TCanvas
(
"c5"
,
"dE-E left telescope corrected"
,
1600
,
400
);
c5
->
Divide
(
4
,
1
);
firstThinStrip
=
4
;
for
(
Int_t
i
=
0
;
i
<
4
;
i
++
)
{
c5
->
cd
(
i
+
1
);
// varName.Form("SQ20Ecorr[%d]:SQLYEsum", i+firstThinStrip);
varName
.
Form
(
"SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLYEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
varName
.
Form
(
"SQ20Ecorr[%d]:SQ20Ecorr[%d]+SQLXEsum"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
condition
.
Form
(
"SQ20Ecorr[%d]>1.2 && SQ20Ecorr[%d]<5 "
"&& SQLYEsum>1.1 && SQLYEsum<30 "
"&& SQLXEsum>1.1 && SQLXEsum<30 "
"&& SQLYE[0]<1. && SQLYE[15]<1. "
"&& SQLYmult==1 && SQLXmult==1"
"&& trigger==3"
,
i
+
firstThinStrip
,
i
+
firstThinStrip
);
tr
->
SetMarkerColor
(
kBlack
);
tr
->
Draw
(
varName
,
condition
,
"col"
,
10000000000
);
cutName
.
Form
(
"cutHe%d"
,
i
+
firstThinStrip
);
currCut
=
(
TCutG
*
)
fCutsHelium
->
Get
(
cutName
);
currCut
->
Draw
(
"same"
);
c5
->
Update
();
}
//*/
return
;
/////////////////////////////////////////////////////////////////////
// c6
TCanvas
*
c6
=
new
TCanvas
(
"c6"
,
"3He-3H coincidences"
,
1600
,
400
);
c6
->
Divide
(
4
,
1
);
firstThinStrip
=
12
;
TCutG
*
currCutTritium
;
TString
cutNameTritium
;
TString
cutHe
(
"(cutHe0"
);
TString
cutNameHe
;
// TFile *fCutsHelium = new TFile("cutsDeltaEhelium.root");
TCutG
*
cutsHe
[
14
];
for
(
Int_t
i
=
0
;
i
<
14
;
i
++
)
{
cutNameHe
.
Form
(
"cutHe%d"
,
i
);
cutsHe
[
i
]
=
(
TCutG
*
)
fCutsHelium
->
Get
(
cutNameHe
);
cutName
.
Form
(
" || %s"
,
cutNameHe
.
Data
());
if
(
i
>
0
)
cutHe
.
Append
(
cutName
);
}
cutHe
.
Append
(
")"
);
cout
<<
endl
<<
endl
<<
cutHe
<<
endl
;
Int_t
numberOfHe
[
16
];
for
(
Int_t
i
=
0
;
i
<
16
;
i
++
)
numberOfHe
[
i
]
=
-
1
;
for
(
Int_t
i
=
0
;
i
<
4
;
i
++
)
{
c6
->
cd
(
i
+
1
);
cutName
.
Form
(
"cTime%d"
,
i
+
firstThinStrip
);
currCut
=
(
TCutG
*
)
fCutsTime
->
Get
(
cutName
);
cutNameTritium
.
Form
(
"cutEnergy%d"
,
i
+
firstThinStrip
);
currCutTritium
=
(
TCutG
*
)
fCutsTritium
->
Get
(
cutNameTritium
);
varName
.
Form
(
"SQRXE:NeEvent.CsI_R[%d]"
,
i
+
firstThinStrip
);
condition
.
Form
(
"NeEvent.CsI_R[%d]<3500"
"&& SQRXEsum<25 && SQRXEsum>1 && SQRXmult==1"
"&& trigger==3 && %s && %s"
,
i
+
firstThinStrip
,
cutName
.
Data
(),
timeSiCondition
.
Data
());
tr
->
SetMarkerColor
(
kBlack
);
tr
->
SetMarkerStyle
(
20
);
tr
->
SetMarkerSize
(
.2
);
tr
->
Draw
(
varName
,
condition
,
""
,
100000000
);
// tr->Draw(varName, "", "", drawEntries);
// tr->Draw(varName, condition, "", drawEntries);
// tAlphaCal->Draw(varName, "", "same");
// cutName.Form("cutEnergy%d", i);
// currCut = (TCutG*)fCutsTritium->Get(cutName);
currCutTritium
->
Draw
(
"same"
);
c6
->
Update
();
condition
.
Form
(
"NeEvent.CsI_R[%d]<3500"
"&& SQRXEsum<25 && SQRXEsum>1 && SQRXmult==1"
"&& trigger==3 && %s && %s && %s && %s"
,
i
+
firstThinStrip
,
cutName
.
Data
(),
timeSiCondition
.
Data
(),
cutNameTritium
.
Data
(),
cutHe
.
Data
());
tr
->
SetMarkerColor
(
kRed
);
tr
->
SetMarkerStyle
(
20
);
tr
->
SetMarkerSize
(
1
);
numberOfHe
[
i
+
firstThinStrip
]
=
tr
->
Draw
(
varName
,
condition
,
"same"
,
100000000
);
cout
<<
"CsI number "
<<
i
+
firstThinStrip
<<
": "
<<
numberOfHe
[
i
+
firstThinStrip
]
<<
" events"
<<
endl
;
c6
->
Update
();
}
cout
<<
endl
<<
endl
;
for
(
Int_t
i
=
0
;
i
<
16
;
i
++
)
{
cout
<<
"CsI number "
<<
i
<<
": "
<<
numberOfHe
[
i
]
<<
" events"
<<
endl
;
}
//*/
// return;
}
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