Skip to content
Snippets Groups Projects
Commit c92d85e4 authored by Antonio Manuel Mendes Jacques Da Costa's avatar Antonio Manuel Mendes Jacques Da Costa Committed by Frank Winklmeier
Browse files

Adding setting of WPs for Reta, Rhad and Wstot

parent c2c02599
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "CaloIdentifier/CaloIdManager.h" #include "CaloIdentifier/CaloIdManager.h"
#include "CaloIdentifier/CaloCell_SuperCell_ID.h" #include "CaloIdentifier/CaloCell_SuperCell_ID.h"
#include "L1CaloFEXSim/eFEXOutputCollection.h" #include "L1CaloFEXSim/eFEXOutputCollection.h"
#include <vector>
namespace LVL1 { namespace LVL1 {
...@@ -55,6 +56,8 @@ namespace LVL1 { ...@@ -55,6 +56,8 @@ namespace LVL1 {
virtual void SetTowersAndCells_SG( int [][6] ) override ; virtual void SetTowersAndCells_SG( int [][6] ) override ;
virtual void SetIsoWP(std::vector<unsigned int> &, std::vector<unsigned int> &, unsigned int &) override ;
/** Internal data */ /** Internal data */
private: private:
......
...@@ -46,7 +46,7 @@ namespace LVL1 { ...@@ -46,7 +46,7 @@ namespace LVL1 {
virtual StatusCode safetyTest() override; virtual StatusCode safetyTest() override;
virtual void setup(int inputTable[3][3]) override; virtual void setup(int inputTable[3][3]) override;
virtual std::vector<unsigned int> getReta() override; virtual void getReta(std::vector<unsigned int> & ) override;
virtual void getRhad(std::vector<unsigned int> & ) override; virtual void getRhad(std::vector<unsigned int> & ) override;
virtual void getWstot(std::vector<unsigned int> & ) override; virtual void getWstot(std::vector<unsigned int> & ) override;
virtual void getRealPhi(float & phi) override; virtual void getRealPhi(float & phi) override;
...@@ -59,7 +59,7 @@ namespace LVL1 { ...@@ -59,7 +59,7 @@ namespace LVL1 {
virtual void getCoreEMTowerET(unsigned int & et) override; virtual void getCoreEMTowerET(unsigned int & et) override;
virtual void getCoreHADTowerET(unsigned int & et) override; virtual void getCoreHADTowerET(unsigned int & et) override;
private: private:
virtual void setSeed() override; void setSeed();
bool m_seed_UnD = false; bool m_seed_UnD = false;
unsigned int m_seedID = 999; unsigned int m_seedID = 999;
int m_eFEXegAlgoTowerID[3][3]; int m_eFEXegAlgoTowerID[3][3];
......
...@@ -114,9 +114,28 @@ StatusCode eFEXFPGA::execute(){ ...@@ -114,9 +114,28 @@ StatusCode eFEXFPGA::execute(){
// temporarily(?) removed for debugging // temporarily(?) removed for debugging
//if (eFEXFPGA_egAlgo->haveSeed() == false) continue; //if (eFEXFPGA_egAlgo->haveSeed() == false) continue;
std::vector<unsigned int> RetaND = m_eFEXegAlgoTool->getReta(); // Get Reta and Rhad outputs
std::vector<unsigned int> RhadND; m_eFEXegAlgoTool->getRhad(RhadND); std::vector<unsigned int> RetaCoreEnv;
m_eFEXegAlgoTool->getReta(RetaCoreEnv);
std::vector<unsigned int> RhadCoreEnv;
m_eFEXegAlgoTool->getRhad(RhadCoreEnv);
std::vector<unsigned int> WstotCoreEnv;
m_eFEXegAlgoTool->getWstot(WstotCoreEnv);
// temp thresholds that will come from Trigger menu
std::vector<unsigned int> tempThrs;
tempThrs.push_back(40);
tempThrs.push_back(30);
tempThrs.push_back(20);
// Set Reta, Rhad and Wstot WP
unsigned int RetaWP = 0;
unsigned int RhadWP = 0;
unsigned int WstotWP = 0;
SetIsoWP(RetaCoreEnv,tempThrs,RetaWP);
SetIsoWP(RhadCoreEnv,tempThrs,RhadWP);
SetIsoWP(WstotCoreEnv,tempThrs,WstotWP);
std::unique_ptr<eFEXegTOB> tmp_tob = m_eFEXegAlgoTool->geteFEXegTOB(); std::unique_ptr<eFEXegTOB> tmp_tob = m_eFEXegAlgoTool->geteFEXegTOB();
tmp_tob->setFPGAID(m_id); tmp_tob->setFPGAID(m_id);
...@@ -200,6 +219,45 @@ void eFEXFPGA::SetTowersAndCells_SG(int tmp_eTowersIDs_subset[][6]){ ...@@ -200,6 +219,45 @@ void eFEXFPGA::SetTowersAndCells_SG(int tmp_eTowersIDs_subset[][6]){
} }
} }
void eFEXFPGA::SetIsoWP(std::vector<unsigned int> & CoreEnv, std::vector<unsigned int> & thresholds, unsigned int & workingPoint) {
bool CoreOverflow = false;
bool EnvOverflow = false;
bool ThrEnvOverflowL = false;
bool ThrEnvOverflowM = false;
bool ThrEnvOverflowT = false;
if (CoreEnv[0] > 0xffff) CoreOverflow = true;
if (CoreEnv[1] > 0xffff) EnvOverflow = true;
if (CoreEnv[1]*thresholds[0] > 0xffff) ThrEnvOverflowL = true;
if (CoreEnv[1]*thresholds[1] > 0xffff) ThrEnvOverflowM = true;
if (CoreEnv[1]*thresholds[2] > 0xffff) ThrEnvOverflowT = true;
if (CoreOverflow == false) {
if (EnvOverflow == false) {
if ( (CoreEnv[0] > (thresholds[2]*CoreEnv[1])) && ThrEnvOverflowT == false ) {
workingPoint = 3;
}
else if ( (CoreEnv[0] > (thresholds[1]*CoreEnv[1])) && ThrEnvOverflowM == false ) {
workingPoint = 2;
}
else if ( (CoreEnv[0] > (thresholds[0]*CoreEnv[1])) && ThrEnvOverflowL == false ) {
workingPoint = 1;
}
else {
workingPoint = 0;
}
} else {
workingPoint = 0; //env overflow
}
}
else {
workingPoint = 3; // core overflow
}
}
} // end of namespace bracket } // end of namespace bracket
...@@ -100,9 +100,8 @@ void LVL1::eFEXegAlgo::getRealEta(float & eta) { ...@@ -100,9 +100,8 @@ void LVL1::eFEXegAlgo::getRealEta(float & eta) {
} }
std::vector<unsigned int> eFEXegAlgo::getReta() { void eFEXegAlgo::getReta(std::vector<unsigned int> & retavec) {
std::vector<unsigned int> retavec;
unsigned int coresum = 0; // 3x2 L2 sum : core unsigned int coresum = 0; // 3x2 L2 sum : core
unsigned int totalsum = 0; // 7x3 L2 sum : total unsigned int totalsum = 0; // 7x3 L2 sum : total
unsigned int envsum = 0; // total - core : env unsigned int envsum = 0; // total - core : env
...@@ -141,7 +140,6 @@ std::vector<unsigned int> eFEXegAlgo::getReta() { ...@@ -141,7 +140,6 @@ std::vector<unsigned int> eFEXegAlgo::getReta() {
retavec.push_back(coresum); retavec.push_back(coresum);
retavec.push_back(envsum); retavec.push_back(envsum);
return retavec;
} }
void eFEXegAlgo::getRhad(std::vector<unsigned int> & rhadvec) { void eFEXegAlgo::getRhad(std::vector<unsigned int> & rhadvec) {
...@@ -196,8 +194,9 @@ void LVL1::eFEXegAlgo::getWstot(std::vector<unsigned int> & output){ ...@@ -196,8 +194,9 @@ void LVL1::eFEXegAlgo::getWstot(std::vector<unsigned int> & output){
den += eT; den += eT;
} }
} }
output.push_back(numer);
output.push_back(den); output.push_back(den);
output.push_back(numer);
} }
...@@ -238,7 +237,7 @@ std::unique_ptr<eFEXegTOB> LVL1::eFEXegAlgo::geteFEXegTOB() { ...@@ -238,7 +237,7 @@ std::unique_ptr<eFEXegTOB> LVL1::eFEXegAlgo::geteFEXegTOB() {
getRhad(temvector); getRhad(temvector);
out->setRhadNum(temvector[1]); out->setRhadNum(temvector[1]);
out->setRhadDen(temvector[0] + temvector[1]); out->setRhadDen(temvector[0] + temvector[1]);
temvector = getReta(); getReta(temvector);
out->setRetaNum(temvector[0]); out->setRetaNum(temvector[0]);
out->setRetaDen(temvector[0] + temvector[1]); out->setRetaDen(temvector[0] + temvector[1]);
out->setSeedUnD(m_seed_UnD); out->setSeedUnD(m_seed_UnD);
......
...@@ -40,6 +40,8 @@ Interface definition for eFEXFPGA ...@@ -40,6 +40,8 @@ Interface definition for eFEXFPGA
virtual int ID() = 0; virtual int ID() = 0;
virtual void SetTowersAndCells_SG(int [][6]) = 0; virtual void SetTowersAndCells_SG(int [][6]) = 0;
virtual void SetIsoWP(std::vector<unsigned int> &, std::vector<unsigned int> &, unsigned int &) = 0;
private: private:
......
...@@ -31,7 +31,7 @@ Interface definition for eFEXegAlgo ...@@ -31,7 +31,7 @@ Interface definition for eFEXegAlgo
virtual StatusCode safetyTest() = 0; virtual StatusCode safetyTest() = 0;
virtual void setup(int inputTable[3][3]) = 0; virtual void setup(int inputTable[3][3]) = 0;
virtual std::vector<unsigned int> getReta() = 0; virtual void getReta(std::vector<unsigned int> & ) = 0;
virtual void getRhad(std::vector<unsigned int> & ) = 0; virtual void getRhad(std::vector<unsigned int> & ) = 0;
virtual void getWstot(std::vector<unsigned int> & ) = 0; virtual void getWstot(std::vector<unsigned int> & ) = 0;
virtual void getRealPhi(float & phi) = 0; virtual void getRealPhi(float & phi) = 0;
...@@ -43,9 +43,6 @@ Interface definition for eFEXegAlgo ...@@ -43,9 +43,6 @@ Interface definition for eFEXegAlgo
virtual void getCoreEMTowerET(unsigned int & et) = 0; virtual void getCoreEMTowerET(unsigned int & et) = 0;
virtual void getCoreHADTowerET(unsigned int & et) = 0; virtual void getCoreHADTowerET(unsigned int & et) = 0;
private:
virtual void setSeed() = 0;
}; };
inline const InterfaceID& LVL1::IeFEXegAlgo::interfaceID() inline const InterfaceID& LVL1::IeFEXegAlgo::interfaceID()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment