22 m_l1CaloTTIdTools(
"LVL1::L1CaloTTIdTools/L1CaloTTIdTools"),
23 m_rxMapTool(
"LVL1::L1CaloFcal23Cells2RxMappingTool/L1CaloFcal23Cells2RxMappingTool"),
25 m_lvl1Helper(nullptr),
27 m_dbPpmChanCalib(nullptr)
34 ATH_MSG_INFO(
"initialize LVL1::L1CaloxAODOfflineTriggerTowerTools");
49 ISvcLocator* svcLoc = Gaudi::svcLocator( );
52 CHECK( svcLoc->service(
"ToolSvc",toolSvc ) );
53 CHECK( toolSvc->retrieveTool(
"CaloTriggerTowerService",
m_ttSvc) );
58 return StatusCode::SUCCESS;
64 ATH_MSG_INFO(
"finalize LVL1::L1CaloxAODOfflineTriggerTowerTools");
66 return StatusCode::SUCCESS;
77 return StatusCode::SUCCESS;
80 std::vector<L1CaloRxCoolChannelId>
84 std::vector<L1CaloRxCoolChannelId>
output;
87 if (
tt.sampling() == 0) {
97 std::vector<L1CaloRxCoolChannelId> rx2;
98 for (
const auto&
i : rx) {
99 if (
i.crate() == 2 ||
i.crate() == 3) {
104 if (rx2.size() == 2) {
106 unsigned int inputA = rx2.at(0).inputConn();
107 unsigned int inputB = rx2.at(1).inputConn();
110 if (inputA == 2 && inputB == 0) {
111 output.push_back(rx2.at(1));
112 output.push_back(rx2.at(0));
114 if (inputA == 0 && inputB == 2) {
115 output.push_back(rx2.at(0));
116 output.push_back(rx2.at(1));
121 if (rx.size() == 1) {
122 output.push_back( rx.at(0) );
128 if (
tt.sampling() == 1) {
130 if (rx.size() == 2) {
132 unsigned int inputPairA = rx.at(0).inputPair();
133 unsigned int inputPairB = rx.at(1).inputPair();
135 bool oddA(
false),oddB(
false);
136 if(inputPairA % 2 != 0){oddA =
true;}
137 if(inputPairB % 2 != 0){oddB =
true;}
140 output.push_back(rx.at(0));
141 output.push_back(rx.at(1));
144 output.push_back(rx.at(1));
145 output.push_back(rx.at(0));
148 if (rx.size() == 1) {
149 output.push_back( rx.at(0) );
156 std::vector<unsigned int>
159 std::vector<L1CaloRxCoolChannelId> rx =
receivers(
tt );
160 std::vector<unsigned int>
output;
161 output.reserve(rx.size());
162 for (
const auto&
i : rx) {
180 std::vector<const CaloCell*>
193 std::vector<unsigned int>
196 std::vector<unsigned int>
output;
198 std::vector<std::vector<const CaloCell*>>
cells =
m_cells2tt->caloCellsByLayer(
id );
200 for (
const auto&
i :
cells) {
238 std::vector<float>
output;
240 std::vector<std::vector<const CaloCell*>>
cells =
m_cells2tt->caloCellsByLayer(
id );
242 for (
const auto&
i :
cells) {
251 std::vector<float>
output;
253 std::vector<std::vector<const CaloCell*>>
cells =
m_cells2tt->caloCellsByLayer(
id );
255 for (
const auto&
i :
cells) {
261 std::vector<std::vector<const CaloCell*>>
264 std::vector<std::vector<const CaloCell*>>
output;
266 if (rx.size() == 1) {
268 }
else if(rx.size() == 2) {
282 using std::back_inserter;
284 std::vector<float> energyByReceiver;
287 back_inserter(energyByReceiver),
288 [
this](
const std::vector<const CaloCell*>&
c) ->
float {
292 return energyByReceiver;
300 using std::back_inserter;
302 std::vector<float> etByReceiver;
305 back_inserter(etByReceiver),
306 [
this](
const std::vector<const CaloCell*>&
c) ->
float {
313 std::vector<std::vector<std::vector<const CaloCell*>>>
318 using std::back_inserter;
328 return {std::move(C)};
330 }
else if(rx.size() == 2) {
332 const auto& cellsByLayer =
m_cells2tt->caloCellsByLayer(
id );
333 for(
const auto&
cells : cellsByLayer) {
335 output.push_back(cellsByReceiver);
344 std::vector<std::vector<float>>
349 using std::back_inserter;
351 std::vector<std::vector<float>>
output;
353 std::vector<float> cellsEnergyByReceiver;
354 cellsEnergyByReceiver.reserve(cellsByReceiver.size());
355 for(
const auto&
cells : cellsByReceiver) {
358 output.push_back(std::move(cellsEnergyByReceiver));
365 std::vector<std::vector<float>>
370 using std::back_inserter;
372 std::vector<std::vector<float>>
output;
374 std::vector<float> cellsEnergyByReceiver;
375 cellsEnergyByReceiver.reserve(cellsByReceiver.size());
376 for(
const std::vector<const CaloCell*>&
cells : cellsByReceiver) {
379 output.push_back(std::move(cellsEnergyByReceiver));
414 if ((
i)->provenance() & 0x2000) {
415 nom += ((
i)->
e() * (
i)->quality());
436 if (tileCell && tileCell->
provenance() & 0x8080) {
501 std::vector<std::vector<const CaloCell*>>
504 std::vector<std::vector<const CaloCell*>>
output;
505 std::vector<const CaloCell*> emb;
506 std::vector<const CaloCell*> emec;
514 emb.push_back( (
i) );
517 emec.push_back( (
i) );
526 std::vector<std::vector<const CaloCell*>>
530 std::vector<const CaloCell*> cellsA;
531 std::vector<const CaloCell*> cellsB;
533 std::vector<std::vector<const CaloCell*>>
output;
536 unsigned int rxidA = rx.at(0).id();
537 unsigned int rxidB = rx.at(1).id();
541 unsigned int someRxId =
m_rxMapTool->offlineCell2RxId( (
i)->
ID().get_identifier32().get_compact() );
542 if(someRxId == rxidA){cellsA.push_back(
i);}
543 if(someRxId == rxidB){cellsB.push_back(
i);}
557 for(Itr_db
i=dbAttrList->
begin();
i!=dbAttrList->
end();++
i){
558 if(
i->first ==
tt.coolId() ){
559 attrList = &(
i->second);
566 std::vector<const coral::AttributeList*>
570 std::vector<const coral::AttributeList*> v_attr;
572 for(
auto r : rxID ){
573 for(Itr_db
i=dbAttrList->
begin();
i!=dbAttrList->
end();++
i){
575 v_attr.push_back( &(
i->second) );
589 unsigned int value = 0;
590 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
591 if((*attrList)[attrNum].specification().
name() ==
"ModuleId"){
592 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
603 unsigned int value = 0;
604 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
605 if((*attrList)[attrNum].specification().
name() ==
"ErrorCode"){
606 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
617 unsigned long long value = 0;
618 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
619 if((*attrList)[attrNum].specification().
name() ==
"PprDacScanResultsTimeStamp"){
620 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
631 unsigned long long value = 0;
632 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
633 if((*attrList)[attrNum].specification().
name() ==
"PprPedestalRunResultsTimeStamp"){
634 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
645 unsigned long long value = 0;
646 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
647 if((*attrList)[attrNum].specification().
name() ==
"PprNoiseRunResultsTimeStamp"){
648 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
659 unsigned long long value = 0;
660 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
661 if((*attrList)[attrNum].specification().
name() ==
"PprTimingResultsTimeStamp"){
662 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
673 unsigned long long value = 0;
674 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
675 if((*attrList)[attrNum].specification().
name() ==
"PprSatBcidResultsTimeStamp"){
676 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
687 unsigned long long value = 0;
688 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
689 if((*attrList)[attrNum].specification().
name() ==
"PprFirFilterResultsTimeStamp"){
690 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
701 unsigned long long value = 0;
702 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
703 if((*attrList)[attrNum].specification().
name() ==
"PprLutValuesResultsTimeStamp"){
704 value = (
unsigned long long) (*attrList)[attrNum].data<
unsigned long long>();
716 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
717 if((*attrList)[attrNum].specification().
name() ==
"DacOffset"){
718 value = (
double) (*attrList)[attrNum].data<
double>();
730 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
731 if((*attrList)[attrNum].specification().
name() ==
"DacSlope"){
732 value = (
double) (*attrList)[attrNum].data<
double>();
744 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
745 if((*attrList)[attrNum].specification().
name() ==
"PedMean"){
746 value = (
double) (*attrList)[attrNum].data<
double>();
757 unsigned int value = 0;
758 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
759 if((*attrList)[attrNum].specification().
name() ==
"PedValue"){
760 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
771 unsigned int value = 0;
772 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
773 if((*attrList)[attrNum].specification().
name() ==
"FullDelayData"){
774 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
785 unsigned short int value = 0;
786 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
787 if((*attrList)[attrNum].specification().
name() ==
"SyncDelayBcid"){
788 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
799 unsigned short int value = 0;
800 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
801 if((*attrList)[attrNum].specification().
name() ==
"InBcidNegedge"){
802 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
813 unsigned short int value = 0;
814 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
815 if((*attrList)[attrNum].specification().
name() ==
"ExtBcidThreshold"){
816 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
827 unsigned short int value = 0;
828 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
829 if((*attrList)[attrNum].specification().
name() ==
"SatBcidThreshLow"){
830 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
841 unsigned short int value = 0;
842 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
843 if((*attrList)[attrNum].specification().
name() ==
"SatBcidThreshHigh"){
844 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
855 unsigned short int value = 0;
856 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
857 if((*attrList)[attrNum].specification().
name() ==
"SatBcidLevel"){
858 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
869 unsigned short int value = 0;
870 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
871 if((*attrList)[attrNum].specification().
name() ==
"BcidEnergyRangeLow"){
872 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
883 unsigned short int value = 0;
884 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
885 if((*attrList)[attrNum].specification().
name() ==
"BcidEnergyRangeHigh"){
886 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
897 unsigned short int value = 0;
898 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
899 if((*attrList)[attrNum].specification().
name() ==
"FirStartBit"){
900 value = (
unsigned short int) (*attrList)[attrNum].data<
unsigned short int>();
912 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
913 if((*attrList)[attrNum].specification().
name() ==
"FirCoeff1"){
914 value = (
short) (*attrList)[attrNum].data<
short>();
926 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
927 if((*attrList)[attrNum].specification().
name() ==
"FirCoeff2"){
928 value = (
short) (*attrList)[attrNum].data<
short>();
940 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
941 if((*attrList)[attrNum].specification().
name() ==
"FirCoeff3"){
942 value = (
short) (*attrList)[attrNum].data<
short>();
954 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
955 if((*attrList)[attrNum].specification().
name() ==
"FirCoeff4"){
956 value = (
short) (*attrList)[attrNum].data<
short>();
968 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
969 if((*attrList)[attrNum].specification().
name() ==
"FirCoeff5"){
970 value = (
short) (*attrList)[attrNum].data<
short>();
981 unsigned short value = 0;
982 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
983 if((*attrList)[attrNum].specification().
name() ==
"LutStrategy"){
984 value = (
unsigned short) (*attrList)[attrNum].data<
unsigned short>();
995 unsigned short value = 0;
996 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
997 if((*attrList)[attrNum].specification().
name() ==
"LutOffset"){
998 value = (
unsigned short) (*attrList)[attrNum].data<
unsigned short>();
1009 unsigned short value = 0;
1010 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
1011 if((*attrList)[attrNum].specification().
name() ==
"LutNoiseCut"){
1012 value = (
unsigned short) (*attrList)[attrNum].data<
unsigned short>();
1023 unsigned short value = 0;
1024 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
1025 if((*attrList)[attrNum].specification().
name() ==
"LutSlope"){
1026 value = (
unsigned short) (*attrList)[attrNum].data<
unsigned short >();
1038 unsigned int value = 0;
1039 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
1040 if((*attrList)[attrNum].specification().
name() ==
"disabledBits"){
1041 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
1052 unsigned int value = 0;
1053 for(
unsigned int attrNum=0;attrNum<attrList->size();++attrNum){
1054 if((*attrList)[attrNum].specification().
name() ==
"ErrorCode"){
1055 value = (
unsigned int) (*attrList)[attrNum].data<
unsigned int>();
1079 unsigned int value = 0;