BOSS
7.1.1
BESIII Offline Software System
Loading...
Searching...
No Matches
prepare_data.cxx
Go to the documentation of this file.
1
/* 1) This program is to collect all types of particles in an uniform style (dE/dx, angle, beta-gamma)
2
Output the data to a preliminary.root file
3
2) Also do a coarse region devision, the results should be output to a preliminary.txt file
4
with other additional information
5
*/
6
#include "TCanvas.h"
7
#include "TFile.h"
8
//#include "TKey.h"
9
#include "TTree.h"
10
#include "TH1F.h"
11
//#include <TROOT.h>
12
#include <sstream>
13
#include <iostream>
14
#include <string>
15
#include <cstring>
16
#include <vector>
17
#include <cmath>
18
#include "TCut.h"
19
20
using namespace
std
;
21
22
#define mass_e 0.511e-3
23
#define mass_mu 105.658e-3
24
#define mass_pi 139.570e-3
25
#define mass_k 493.677e-3
26
#define mass_p 938.272e-3
27
28
float
ptrk
,
dEdx_meas
,
costheta
,
charge
,
bg
,
mass
;
// bg means beta-gamma
29
int
nhits
;
30
float
dEdx_hit
[100];
31
void
collect
(TString filename,
int
type, TTree *tree);
32
void
setregion
();
33
34
int
main
(){
35
TFile *
f
=
new
TFile(
"pre_data.root"
,
"recreate"
);
36
TTree *
t
=
new
TTree(
"n103"
,
"predata"
);
37
t
->Branch(
"dEdx_meas"
, &
dEdx_meas
,
"dEdx_meas/f"
);
38
t
->Branch(
"costheta"
, &
costheta
,
"costheta/f"
);
39
t
->Branch(
"charge"
, &
charge
,
"charge/f"
);
40
t
->Branch(
"bg"
, &
bg
,
"bg/f"
);
41
t
->Branch(
"nhits"
, &
nhits
,
"nhits/I"
);
42
t
->Branch(
"dEdx_hit"
,
dEdx_hit
,
"dEdx_hit[nhits]/f"
);
43
44
// collect all data here
45
cout <<
"begin to collect data"
<< endl;
46
collect
(
"../hadron_track/proton/proton.root"
, 0,
t
);
47
cout <<
"proton collected"
<< endl;
48
collect
(
"../hadron_track/kaon/kaon.root"
, 1,
t
);
49
cout <<
"kaon collected"
<< endl;
50
collect
(
"../hadron_track/pion/pion.root"
, 2,
t
);
51
cout <<
"pion collected"
<< endl;
52
collect
(
"../hadron_track/muon/muon.root"
, 3,
t
);
53
cout <<
"muon collected"
<< endl;
54
collect
(
"../hadron_track/electron/electron.root"
, 4,
t
);
55
cout <<
"electron collected"
<< endl;
56
57
f
->cd();
58
t
->Write();
59
f
->Close();
60
61
// setregion();
62
63
return
0;
64
}
65
66
void
collect
(TString filename,
int
type, TTree *
t
){
67
TFile *ff =
new
TFile(filename);
68
TTree* trk = (TTree*)ff->Get(
"n103"
);
69
trk->SetBranchAddress(
"dEdx_meas"
, &
dEdx_meas
);
70
trk->SetBranchAddress(
"ptrk"
, &
ptrk
);
71
trk->SetBranchAddress(
"costheta"
, &
costheta
);
72
trk->SetBranchAddress(
"charge"
, &
charge
);
73
trk->SetBranchAddress(
"ndedxhit"
, &
nhits
);
74
trk->SetBranchAddress(
"dEdx_hit"
,
dEdx_hit
);
75
76
//initialize variables
77
switch
(type) {
78
case
0:
79
mass
=
mass_p
;
80
break
;
81
case
1:
82
mass
=
mass_k
;
83
break
;
84
case
2:
85
mass
=
mass_pi
;
86
break
;
87
case
3:
88
mass
=
mass_mu
;
89
break
;
90
case
4:
91
mass
=
mass_e
;
92
break
;
93
default
:
94
cout <<
"Error: no such sample type!"
<< endl;
95
}
96
97
int
m_ntot
= trk->GetEntries();
98
// if(m_ntot>500000) m_ntot = 500000;
99
for
(
int
i = 0; i <
m_ntot
; i++){
100
trk->GetEntry(i);
101
if
(type == 0 &&
dEdx_meas
< 500)
continue
;
// type 0 is proton!
102
if
(type == 4 &&
dEdx_meas
> 1200)
continue
;
// type 4 is electron!
103
if
(
ptrk <= 0 || ptrk >
2.3)
continue
;
104
if
(fabs(
costheta
) >= 0.93)
continue
;
105
bg
=
ptrk
/
mass
;
106
t
->Fill();
107
}
108
ff->Close();
109
}
// end of collect()
110
111
void
setregion
(){
// use greedy algorithm, step by step to check
112
TFile *
f
=
new
TFile(
"pre_data.root"
);
113
TTree *
t
= (TTree*)
f
->Get(
"n103"
);
114
bool
small_flag(
true
);
115
double
step(0.1);
// for beta-gamma
116
double
current(0.0);
// current position in beta-gamma
117
int
accu(0);
// accumulated events
118
double
stop(4600);
119
int
threshold(1000);
120
while
(current<stop){
121
cout <<
"now: "
<< current << endl;
122
if
(small_flag){
123
accu =
t
->GetEntries(Form(
"bg>=%f && bg<%f"
, current, current+step));
124
current += step;
125
if
(accu > threshold){
126
cout <<
"point: "
<< current <<
" events: "
<< accu << endl;
127
small_flag =
false
;
128
}
129
}
// end of if(small_flag)
130
else
{
131
accu =
t
->GetEntries(Form(
"bg>=%f && bg<%f"
, current, current+step));
132
current += step;
133
if
(accu < threshold){
134
cout <<
"point: "
<< current <<
" events: "
<< accu << endl;
135
small_flag =
true
;
136
}
137
}
// end of else(small_flag)
138
}
// end of while
139
f
->Close();
140
}
f
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
m_ntot
********INTEGER modcns REAL m_twom24 INTEGER m_ntot
Definition
PseuMar.h:14
t
TTree * t
Definition
binning.cxx:23
std
Definition
RootEventData/RootEventData_rootcint.cxx:38
nhits
int nhits
Definition
prepare_data.cxx:29
costheta
float costheta
Definition
prepare_data.cxx:28
charge
float charge
Definition
prepare_data.cxx:28
mass_mu
#define mass_mu
Definition
prepare_data.cxx:23
mass_e
#define mass_e
Definition
prepare_data.cxx:22
mass
float mass
Definition
prepare_data.cxx:28
setregion
void setregion()
Definition
prepare_data.cxx:111
mass_p
#define mass_p
Definition
prepare_data.cxx:26
dEdx_meas
float dEdx_meas
Definition
prepare_data.cxx:28
mass_k
#define mass_k
Definition
prepare_data.cxx:25
bg
float bg
Definition
prepare_data.cxx:28
collect
void collect(TString filename, int type, TTree *tree)
Definition
prepare_data.cxx:66
mass_pi
#define mass_pi
Definition
prepare_data.cxx:24
main
int main()
Definition
prepare_data.cxx:34
ptrk
float ptrk
Definition
prepare_data.cxx:28
dEdx_hit
float dEdx_hit[100]
Definition
prepare_data.cxx:30
7.1.1
Mdc
DedxCalibAlg
DedxCalibAlg-00-02-01
share
template
Simulation
histgen
prepare_data.cxx
Generated by
1.12.0