Retrieve all the data.
Retrieve trigger tower information.
33 {
34
35
36 const DataVector<LVL1::TriggerTower>* TTVector = nullptr;
37
39 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"No Level-1 Trigger Towers found in SG at "
41 return StatusCode::SUCCESS;
42 }
43
44
45 int numTrigTowers = TTVector->
size();
47 if (
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" Retrieving Level-1 Trigger Towers with size " << numTrigTowers <<
endmsg;
48
51 DataVect emEnergyVec; emEnergyVec.reserve(numTrigTowers);
52 DataVect hadEnergyVec; hadEnergyVec.reserve(numTrigTowers);
53 DataVect sumEnergyVec; sumEnergyVec.reserve(numTrigTowers);
54 DataVect numADCVec; numADCVec.reserve(numTrigTowers);
55 DataVect emBCIDVec; emBCIDVec.reserve(numTrigTowers);
56 DataVect hadBCIDVec; hadBCIDVec.reserve(numTrigTowers);
57 DataVect isEMSaturated; isEMSaturated.reserve(numTrigTowers);
58 DataVect isHadSaturated; isHadSaturated.reserve(numTrigTowers);
59 DataVect emADCVec; emADCVec.reserve(numTrigTowers);
60 DataVect hadADCVec; hadADCVec.reserve(numTrigTowers);
61
62
64 for ( trigTowerIter = TTVector->
begin(); trigTowerIter < TTVector->
end(); ++trigTowerIter ){
65
66
67 if ( (*trigTowerIter)->hadEnergy() == 0 && (*trigTowerIter)->emEnergy() == 0 ) continue;
68
69 if (
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
" Lvl1 TriggerTower No " <<
count++ <<
" with"
70 << " eta:"<<(*trigTowerIter)->eta() << ", phi:"<<(*trigTowerIter)->phi()
71 <<
", EM energy:"<<(*trigTowerIter)->emEnergy()<<
", Had Energy:"<<(*trigTowerIter)->hadEnergy() <<
endmsg;
72
73
74
75
76
77
78
79 int sumEnergy = 0;
80 int emEnergy = 0;
81 int hadEnergy = 0;
82
83 emEnergy = (*trigTowerIter)->emEnergy();
84 hadEnergy = (*trigTowerIter)->hadEnergy();
85
86 if ((emEnergy != 255) && (hadEnergy != 255)){
87 sumEnergy = (*trigTowerIter)->emEnergy()+(*trigTowerIter)->hadEnergy();
88 } else {
89 sumEnergy = 255;
90 }
91
92
94
95
96 emEnergyVec.push_back( emEnergy );
97 hadEnergyVec.push_back( hadEnergy );
98 sumEnergyVec.push_back( sumEnergy );
99
100
103
104
105 emBCIDVec.push_back(
DataType((*trigTowerIter)->emBCID()));
106 hadBCIDVec.push_back(
DataType((*trigTowerIter)->hadBCID()));
107
108
109 isEMSaturated.push_back(
DataType( ((*trigTowerIter)->isEMSaturated())? 1 : 0 ));
110 isHadSaturated.push_back(
DataType( ((*trigTowerIter)->isHadSaturated())? 1 : 0 ));
111
112
113
114 if ((*trigTowerIter)->emADC().size() != (*trigTowerIter)->hadADC().size()){
115 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Number of EmADC and HadADC values do not match"
116 << ",em:"<< (*trigTowerIter)->emADC().size()
117 <<
",had:" << (*trigTowerIter)->hadADC().size() <<
endmsg;
121 continue ;
122 }
123
124
125 numADCVec.push_back(
DataType( (*trigTowerIter)->emADC().size() ));
126
127
128 std::vector<int>::const_iterator emADCItr = ((*trigTowerIter)->emADC()).begin();
129 for (; emADCItr != ((*trigTowerIter)->emADC()).
end(); ++emADCItr)
130 emADCVec.emplace_back( *emADCItr );
131
132 std::vector<int>::const_iterator hadADCItr = ((*trigTowerIter)->hadADC()).begin();
133 for (; hadADCItr != ((*trigTowerIter)->hadADC()).
end(); ++hadADCItr)
134 hadADCVec.emplace_back( *hadADCItr );
135 }
136 }
137
138
139 std::string multiple = " multiple=\"0.\"";
140 if (emEnergyVec.size() != 0){
141 multiple =
" multiple=\""+
DataType(((
float)emADCVec.size())/((
float)emEnergyVec.size())).toString()+
"\"";
142 }
143
146 myDataMap[
"phi"] = std::move(
phi);
147 myDataMap[
"eta"] = std::move(
eta);
148 myDataMap["emEnergy"] = std::move(emEnergyVec);
149 myDataMap["hadEnergy"] = std::move(hadEnergyVec);
150 myDataMap["sumEnergy"] = std::move(sumEnergyVec);
151 myDataMap["emADC"+multiple] = std::move(emADCVec);
152 myDataMap["hadADC"+multiple] = std::move(hadADCVec);
153 myDataMap["numADC"] = std::move(numADCVec);
154 myDataMap["emBCID"] = std::move(emBCIDVec);
155 myDataMap["hadBCID"] = std::move(hadBCIDVec);
156 myDataMap["isEMSaturated"] = std::move(isEMSaturated);
157 myDataMap["isHadSaturated"] = std::move(isHadSaturated);
158
160
161
163 }
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
ServiceHandle< StoreGateSvc > & evtStore()
bool msgLvl(const MSG::Level lvl) const
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
virtual std::string dataTypeName() const
Return the name of the data type.
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
std::map< std::string, DataVect > DataMap
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.