ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
TestBeam
TBRec
src
TBBeamQualityMC.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TBBeamQualityMC.h
"
6
7
#include "
TBEvent/TBEventInfo.h
"
8
#include "
TBEvent/TBTrack.h
"
9
#include "
LArG4TBSimEvent/LArG4H6FrontHitCollection.h
"
10
#include "CaloEvent/CaloClusterContainer.h"
11
#include "
PathResolver/PathResolver.h
"
12
#include <fstream>
13
#include <string>
14
#include <math.h>
15
16
17
TBBeamQualityMC::TBBeamQualityMC
(
const
std::string & name, ISvcLocator * pSvcLocator) :
18
AthAlgorithm
(name, pSvcLocator),
19
m_readFileforXcryo
(true),
20
m_nRun
(0)
21
{
22
declareProperty
(
"ReadFileforXcryo"
,
m_readFileforXcryo
);
23
declareProperty
(
"CheckTrackParams"
,
m_check_trackpar
=
false
);
24
declareProperty
(
"TrackCutX"
,
m_bm_cut_x
=35.);
25
declareProperty
(
"TrackCutY"
,
m_bm_cut_y
=35.);
26
declareProperty
(
"CheckPrimaryTrack"
,
m_check_primary
=
true
);
27
declareProperty
(
"ScintForPrimaryTrack"
,
m_scint_prim
);
28
declareProperty
(
"CheckVetoScint"
,
m_check_veto
=
true
);
29
declareProperty
(
"CheckClusters"
,
m_check_clus
=
false
);
30
declareProperty
(
"CheckTrackReco"
,
m_check_trackreco
=
false
);
31
declareProperty
(
"ClusterCollectionName"
,
m_clusterCollName
=
"CaloTopoClusters"
);
32
}
33
34
StatusCode
TBBeamQualityMC::initialize
() {
35
ATH_MSG_DEBUG
(
"in initialize()"
);
36
return
StatusCode::SUCCESS;
37
}
38
39
StatusCode
TBBeamQualityMC::execute
(
const
EventContext& ctx) {
41
ATH_MSG_DEBUG
(
"in execute()"
);
42
43
// Retrieve Event Info
44
const
TBEventInfo
* theEventInfo =
nullptr
;
45
ATH_CHECK
(
evtStore
()->retrieve(theEventInfo,
"TBEventInfo"
) );
46
47
// Fill run header
48
m_nRun
= theEventInfo->
getRunNum
();
49
float
beamMom = theEventInfo->
getBeamMomentum
();
50
float
xCryo = -9999;
51
float
yTable = -9999;
52
if
(
m_readFileforXcryo
) {
53
if
(!this->
getXcryoYtable
(xCryo, yTable, beamMom)) {
54
ATH_MSG_ERROR
(
"xCryo and yTable are not found"
);
55
return
StatusCode::FAILURE;
56
}
57
}
else
{
58
xCryo = theEventInfo->
getCryoX
();
59
yTable = theEventInfo->
getTableY
();
60
}
61
ATH_MSG_VERBOSE
(
"xCryo = "
<< xCryo );
62
ATH_MSG_VERBOSE
(
"yTable = "
<< yTable );
63
ATH_MSG_VERBOSE
(
"nRun = "
<<
m_nRun
);
64
ATH_MSG_VERBOSE
(
"beamMom = "
<< beamMom );
65
66
67
if
(
m_check_trackpar
) {
// check for track parameters
68
69
TBTrack
*track =
nullptr
;
70
ATH_CHECK
(
evtStore
()->retrieve(track,
"Track"
) );
71
72
const
float
zCalo = 30000.;
73
float
beam_coor_x = track->getUslope()*zCalo + track->getUintercept() + xCryo;
74
float
beam_coor_y = track->getVslope()*zCalo + track->getVintercept();
75
76
bool
sx1 = (beam_coor_x > xCryo -
m_bm_cut_x
) && (beam_coor_x < xCryo +
m_bm_cut_x
);
77
bool
sx2 = (std::log(track->getChi2_u())>-10 && track->getChi2_u()!=1000);
78
bool
sx3 = (beam_coor_x!=0 || track->getUintercept()!=0 || track->getUslope()!=0 );
79
80
bool
sy1 = (beam_coor_y > yTable -
m_bm_cut_y
) && (beam_coor_y < yTable +
m_bm_cut_y
);
81
bool
sy2 = (std::log(track->getChi2_v())>-10 && track->getChi2_v()!=1000);
82
bool
sy3 = (beam_coor_y!=0 || track->getVintercept()!=0 || track->getVslope()!=0 );
83
84
if
(! (sx1 && sx2 && sx3 && sy1 && sy2 && sy3)) {
85
ATH_MSG_DEBUG
(
"CheckTrackParams failed: "
<<sx1<<
" "
<<sx2<<
" "
<<sx3<<
" / "
<<sy1<<
" "
<<sy2<<
" "
<<sy3);
86
//return StatusCode::FAILURE;
87
//return StatusCode::RECOVERABLE;
88
setFilterPassed
(
false
, ctx);
89
return
StatusCode::SUCCESS;
90
}
91
}
92
93
if
(
m_check_primary
) {
// check for primary energy deposition in vector of scintilators
94
95
std::vector<bool> has_energy (
m_scint_prim
.size());
96
for
(
int
ll=0; ll<(int)
m_scint_prim
.size(); ++ll) has_energy[ll]=
false
;
97
98
const
LArG4H6FrontHitCollection
*frontcoll =
nullptr
;
99
ATH_CHECK
(
evtStore
()->retrieve(frontcoll,
"Front::Hits"
) );
100
101
int
scnum;
102
unsigned
i;
103
for
(
const
LArG4H6FrontHit
*
hit
: *frontcoll) {
104
scnum =
hit
->GetSC();
105
if
(scnum <= 0)
continue
;
// not a scintilator hit
106
for
(i=0; i<
m_scint_prim
.size(); ++i) {
107
ATH_MSG_DEBUG
(
"Scint: "
<<scnum<<
", track: "
<<
hit
->GetTrackID()<<
", energy: "
<<
hit
->GetEdep());
108
if
( (scnum==
m_scint_prim
[i]) && (
hit
->GetTrackID() == 1) && (
hit
->GetEdep() > 0.)) {
109
has_energy[i] =
true
;
110
}
111
}
112
}
113
114
const
LArG4H6FrontHitCollection
*movecoll =
nullptr
;
115
ATH_CHECK
(
evtStore
()->retrieve(movecoll,
"Movable::Hits"
) );
116
for
(
const
LArG4H6FrontHit
*
hit
: *movecoll) {
117
scnum =
hit
->GetSC();
118
if
(scnum <= 0)
continue
;
// not a scintilator hit
119
for
(i=0; i<
m_scint_prim
.size(); ++i) {
120
ATH_MSG_DEBUG
(
"Scint: "
<<scnum<<
", track: "
<<
hit
->GetTrackID()<<
", energy: "
<<
hit
->GetEdep());
121
if
( (scnum==
m_scint_prim
[i]) && (
hit
->GetTrackID() == 1) && (
hit
->GetEdep() > 0.)) {
122
has_energy[i] =
true
;
123
}
124
}
125
}
126
for
(
int
ll=0; ll<(int)
m_scint_prim
.size(); ++ll) has_energy[0] = has_energy[0] && has_energy[ll];
127
if
(!has_energy[0]) {
128
ATH_MSG_DEBUG
(
"CheckPrimaryTrack failed, no energy deposit in all asked scint."
);
129
//return StatusCode::FAILURE;
130
//return StatusCode::RECOVERABLE;
131
setFilterPassed
(
false
, ctx);
132
return
StatusCode::SUCCESS;
133
}
134
}
135
136
if
(
m_check_veto
) {
// check if there is a hit in veto scint.
137
int
scnum;
138
const
LArG4H6FrontHitCollection
*movecoll =
nullptr
;
139
ATH_CHECK
(
evtStore
()->retrieve(movecoll,
"Movable::Hits"
) );
140
for
(
const
LArG4H6FrontHit
*
hit
: *movecoll) {
141
scnum =
hit
->GetSC();
142
if
(scnum <= 0)
continue
;
143
if
(
hit
->GetSC() == 5 && (
hit
->GetTrackID() == 1)) {
144
ATH_MSG_DEBUG
(
"CheckVeto failed "
);
145
//return StatusCode::FAILURE;
146
//return StatusCode::RECOVERABLE;
147
setFilterPassed
(
false
, ctx);
148
return
StatusCode::SUCCESS;
149
}
150
}
151
}
152
153
if
(
m_check_clus
) {
// Rejected if no good cluster
154
const
CaloClusterContainer
* cc =
nullptr
;
155
ATH_CHECK
(
evtStore
()->retrieve(cc,
m_clusterCollName
) );
156
bool
haveit=
false
;
157
for
(
const
CaloCluster
* theCluster : *cc) {
158
double
cL = theCluster->getMomentValue(
CaloClusterMoment::CENTER_LAMBDA
);
159
double
eD = theCluster->getMomentValue(
CaloClusterMoment::FIRST_ENG_DENS
);
160
unsigned
int
cSize = theCluster->getClusterSize();
161
if
(cL != 0 && eD > 0. && cSize > 1) {
162
haveit =
true
;
163
break
;
164
}
165
}
166
if
(!haveit) {
167
ATH_MSG_DEBUG
(
"CheckClusters failed "
);
168
setFilterPassed
(
false
, ctx);
169
return
StatusCode::SUCCESS;
170
}
171
}
172
173
174
if
(
m_check_trackreco
) {
// Rejected if bad track reco
175
const
TBTrack
* mytrack =
nullptr
;
176
const
TBEventInfo
* mytbeinfo =
nullptr
;
177
ATH_CHECK
(
evtStore
()->retrieve(mytrack,
"Track"
) );
178
ATH_CHECK
(
evtStore
()->retrieve(mytbeinfo,
"TBEventInfo"
) );
179
double
chi2
= mytrack->
getChi2_u
();
180
if
(
chi2
<= 0 || std::log(
chi2
)<=-10 ||
chi2
== 1000 || mytrack->
getUslope
() == 0 || mytrack->
getUintercept
() == 0 || mytbeinfo->
getCryoX
() == mytrack->
getCryoHitu
()) {
181
ATH_MSG_DEBUG
(
"CheckTrackReco in X failed "
);
182
ATH_MSG_DEBUG
(
chi2
<<
" / "
<< std::log(
chi2
) <<
" :: "
<< mytrack->
getUslope
() <<
" / "
<< mytrack->
getUintercept
() <<
" / "
<< mytbeinfo->
getCryoX
() <<
" / "
<< mytrack->
getCryoHitu
() );
183
setFilterPassed
(
false
, ctx);
184
return
StatusCode::SUCCESS;
185
}
186
chi2
= mytrack->
getChi2_v
();
187
if
(
chi2
<= 0 || std::log(
chi2
)<=-10 ||
chi2
== 1000 || mytrack->
getVslope
() == 0 || mytrack->
getVintercept
() == 0 || mytbeinfo->
getTableY
() == mytrack->
getCryoHitv
()) {
188
ATH_MSG_DEBUG
(
"CheckTrackReco in Y failed "
);
189
ATH_MSG_DEBUG
(
chi2
<<
" / "
<< std::log(
chi2
) <<
" :: "
<< mytrack->
getVslope
() <<
" / "
<< mytrack->
getVintercept
() <<
" / "
<< mytbeinfo->
getTableY
() <<
" / "
<< mytrack->
getCryoHitv
() );
190
setFilterPassed
(
false
, ctx);
191
return
StatusCode::SUCCESS;
192
}
193
194
}
195
setFilterPassed
(
true
, ctx);
196
return
StatusCode::SUCCESS;
197
}
198
199
StatusCode
TBBeamQualityMC::finalize
() {
200
ATH_MSG_DEBUG
(
"in finalize()"
);
201
return
StatusCode::SUCCESS;
202
}
203
204
205
StatusCode
TBBeamQualityMC::getXcryoYtable
(
float
&
x
,
float
&
y
,
float
&e) {
206
207
// not good to put here (just a workaround) - joh
208
std::string m_txtFileWithXY =
"xcryo_ytable.txt"
;
209
210
ATH_MSG_DEBUG
(
"in getXcryoYtable(float x, float y)"
);
211
std::ifstream xyFile;
212
std::string line;
213
std::string filename =
PathResolver::find_file
(m_txtFileWithXY,
"DATAPATH"
);
214
xyFile.open(filename.c_str());
215
if
(!xyFile.is_open()) {
216
ATH_MSG_ERROR
(
"File "
<< m_txtFileWithXY <<
" fail to open in $DATAPATH"
);
217
return
StatusCode::FAILURE;
218
}
219
while
( getline(xyFile, line,
'\n'
) ) {
220
int
run
;
221
std::istringstream buf(line);
222
e = 0;
223
buf >>
run
>>
x
>>
y
>> e;
224
ATH_MSG_DEBUG
(
"m_nRun,run,x,y,e= "
<<
m_nRun
<<
" "
<<
run
<<
" "
<<
x
<<
" "
<<
y
<<
" "
<<e);
225
if
(
run
==
m_nRun
&& xyFile.good())
return
StatusCode::SUCCESS;
226
}
227
return
StatusCode::FAILURE;
228
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
hit
bool hit(const Container &ids, int pdgId)
Definition
JetIRCSafeLabelTool.cxx:64
LArG4H6FrontHitCollection.h
LArG4H6FrontHitCollection
AthenaHitsVector< LArG4H6FrontHit > LArG4H6FrontHitCollection
Definition
LArG4H6FrontHitCollection.h:12
PathResolver.h
TBBeamQualityMC.h
TBEventInfo.h
TBTrack.h
y
#define y
x
#define x
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Definition
AthCommonAlgorithm.h:99
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
CaloClusterContainer
Storable container for CaloCluster.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloClusterContainer.h:37
CaloClusterMoment::FIRST_ENG_DENS
@ FIRST_ENG_DENS
First Moment in E/V.
Definition
CaloClusterMoment.h:56
CaloClusterMoment::CENTER_LAMBDA
@ CENTER_LAMBDA
Shower depth at Cluster Centroid.
Definition
CaloClusterMoment.h:50
CaloCluster
Principal data class for CaloCell clusters.
Definition
Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:79
LArG4H6FrontHit
Definition
LArG4H6FrontHit.h:23
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)
Definition
PathResolver.cxx:220
TBBeamQualityMC::getXcryoYtable
StatusCode getXcryoYtable(float &x, float &y, float &eBeam)
Definition
TBBeamQualityMC.cxx:205
TBBeamQualityMC::m_bm_cut_x
float m_bm_cut_x
Definition
TBBeamQualityMC.h:28
TBBeamQualityMC::m_scint_prim
std::vector< int > m_scint_prim
Definition
TBBeamQualityMC.h:33
TBBeamQualityMC::m_bm_cut_y
float m_bm_cut_y
Definition
TBBeamQualityMC.h:29
TBBeamQualityMC::m_readFileforXcryo
bool m_readFileforXcryo
Get Xcryo and Ytable from a text file.
Definition
TBBeamQualityMC.h:24
TBBeamQualityMC::m_check_clus
bool m_check_clus
Definition
TBBeamQualityMC.h:37
TBBeamQualityMC::initialize
virtual StatusCode initialize() override
Definition
TBBeamQualityMC.cxx:34
TBBeamQualityMC::m_nRun
int m_nRun
Definition
TBBeamQualityMC.h:26
TBBeamQualityMC::finalize
virtual StatusCode finalize() override
Definition
TBBeamQualityMC.cxx:199
TBBeamQualityMC::TBBeamQualityMC
TBBeamQualityMC(const std::string &name, ISvcLocator *pSvcLocator)
Definition
TBBeamQualityMC.cxx:17
TBBeamQualityMC::m_check_veto
bool m_check_veto
Definition
TBBeamQualityMC.h:35
TBBeamQualityMC::m_check_primary
bool m_check_primary
Definition
TBBeamQualityMC.h:32
TBBeamQualityMC::m_check_trackpar
bool m_check_trackpar
Definition
TBBeamQualityMC.h:30
TBBeamQualityMC::m_check_trackreco
bool m_check_trackreco
Definition
TBBeamQualityMC.h:38
TBBeamQualityMC::m_clusterCollName
std::string m_clusterCollName
Definition
TBBeamQualityMC.h:40
TBBeamQualityMC::execute
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
Definition
TBBeamQualityMC.cxx:39
TBEventInfo
Definition
TBEventInfo.h:27
TBEventInfo::getBeamMomentum
float getBeamMomentum() const
Definition
TBEventInfo.h:73
TBEventInfo::getTableY
float getTableY() const
Definition
TBEventInfo.h:77
TBEventInfo::getCryoX
float getCryoX() const
Definition
TBEventInfo.h:75
TBEventInfo::getRunNum
unsigned int getRunNum() const
Definition
TBEventInfo.h:72
TBTrack
Definition
TBTrack.h:20
TBTrack::getVintercept
double getVintercept() const
Definition
TBTrack.h:60
TBTrack::getChi2_u
double getChi2_u() const
Definition
TBTrack.h:54
TBTrack::getChi2_v
double getChi2_v() const
Definition
TBTrack.h:55
TBTrack::getUintercept
double getUintercept() const
Definition
TBTrack.h:59
TBTrack::getVslope
double getVslope() const
Definition
TBTrack.h:58
TBTrack::getUslope
double getUslope() const
Definition
TBTrack.h:57
TBTrack::getCryoHitv
double getCryoHitv() const
Definition
TBTrack.h:72
TBTrack::getCryoHitu
double getCryoHitu() const
Definition
TBTrack.h:71
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition
comparitor.cxx:525
run
int run(int argc, char *argv[])
Definition
ttree2hdf5.cxx:28
Generated on
for ATLAS Offline Software by
1.17.0