Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
NSWL1::PadTriggerLogicOfflineTool Class Reference

#include <PadTriggerLogicOfflineTool.h>

Inheritance diagram for NSWL1::PadTriggerLogicOfflineTool:
Collaboration diagram for NSWL1::PadTriggerLogicOfflineTool:

Public Member Functions

 PadTriggerLogicOfflineTool (const std::string &type, const std::string &name, const IInterface *parent)
 
virtual ~PadTriggerLogicOfflineTool ()=default
 
virtual StatusCode initialize () override
 
virtual StatusCode compute_pad_triggers (const std::vector< std::shared_ptr< PadData >> &pads, std::vector< std::unique_ptr< PadTrigger >> &triggers) const override
 Log a message using the Athena controlled logging system. More...
 
int ROI2BandId (const float EtaTrigAtCenter, const int SectorType) const
 
PadTrigger convert (const SectorTriggerCandidate &t) const
 from TDR-style SectorTriggerCandidate to PadTrigger More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Static Public Member Functions

static std::vector< std::unique_ptr< PadTrigger > > build4of4SingleWedgeTriggers (const std::vector< std::shared_ptr< PadData >> &pads)
 
static const InterfaceID & interfaceID ()
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

void fillGeometricInformation (PadOfflineData &) const
 
void fillPhiTable () const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

const std::vector< float > m_etaBandsLargeSector
 get the output tree from the athena histogram service More...
 
const std::vector< float > m_etaBandsSmallSector
 
std::map< IdentifierHash, std::pair< double, double > > m_phiTable ATLAS_THREAD_SAFE {}
 
std::pair< double, double > m_Zratio ATLAS_THREAD_SAFE {}
 
std::atomic< bool > m_isInitialized ATLAS_THREAD_SAFE {false}
 
std::mutex m_mutex ATLAS_THREAD_SAFE {}
 
SG::ReadCondHandleKey< MuonGM::MuonDetectorManagerm_detManagerKey {this, "MuonManagerKey", "MuonDetectorManager"}
 
Gaudi::Property< float > m_PadEfficiency {this, "PadEfficiency", 1.0, "Pad trigger efficiency"}
 
Gaudi::Property< int > m_phiIdBits {this, "PhiIdBits", 6, "Number of bit to compute Phi-Id of pad triggers"}
 
Gaudi::Property< bool > m_useSimple4of4 {this, "UseSimple4of4", false, "Use simplified logic requiring 4 hits on 4 gas gaps"}
 
L1TdrStgcTriggerLogic m_tdrLogic
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

Definition at line 66 of file PadTriggerLogicOfflineTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ PadTriggerLogicOfflineTool()

NSWL1::PadTriggerLogicOfflineTool::PadTriggerLogicOfflineTool ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 13 of file PadTriggerLogicOfflineTool.cxx.

13  :
17  m_tdrLogic()
18  {
19  declareInterface<NSWL1::IPadTriggerLogicTool>(this);
20  }

◆ ~PadTriggerLogicOfflineTool()

virtual NSWL1::PadTriggerLogicOfflineTool::~PadTriggerLogicOfflineTool ( )
virtualdefault

Member Function Documentation

◆ build4of4SingleWedgeTriggers()

std::vector< std::unique_ptr< PadTrigger > > NSWL1::PadTriggerLogicOfflineTool::build4of4SingleWedgeTriggers ( const std::vector< std::shared_ptr< PadData >> &  pads)
static

Definition at line 67 of file PadTriggerLogicOfflineTool.cxx.

67  {
68  std::vector<std::unique_ptr<PadTrigger>> triggers;
69  for(const auto& p0 : filterByGasGap(pads, 1)){
70  int p0ieta = p0->padEtaId();
71  int p0iphi = p0->padPhiId();
72  for(const auto& p1 : filterByGasGap(pads, 2)){
73  int p1ieta = p1->padEtaId();
74  int p1iphi = p1->padPhiId();
75  bool p0_p1_match = ((p1ieta == p0ieta || p1ieta == p0ieta+1 ) &&
76  (p1iphi == p0iphi || p1iphi == p0iphi+1 ) );
77  if(not p0_p1_match) continue;
78  for(const auto& p2 :filterByGasGap(pads, 3) ){
79  int p2ieta = p2->padEtaId();
80  int p2iphi = p2->padPhiId();
81  bool p1_p2_match = ((p2ieta == p1ieta || p2ieta == p1ieta+1 ) &&
82  (p2iphi == p1iphi || p2iphi == p1iphi+1 ) );
83  if(not p1_p2_match) continue;
84  for(const auto& p3 : filterByGasGap(pads, 4)){
85  int p3ieta = p3->padEtaId();
86  int p3iphi = p3->padPhiId();
87  bool p2_p3_match = ((p3ieta == p2ieta || p3ieta == p2ieta+1 ) &&
88  (p3iphi == p2iphi || p3iphi == p2iphi+1 ) );
89  if(p2_p3_match){
90  auto trg=std::make_unique<PadTrigger>();
91  trg->m_pads.push_back(p0);
92  trg->m_pads.push_back(p1);
93  trg->m_pads.push_back(p2);
94  trg->m_pads.push_back(p3);
95  triggers.push_back(std::move(trg));
96  }
97  } // for(p3)
98  } // for(p2)
99  } // for(p1)
100  } // for(p0)
101  return triggers;
102 }

◆ compute_pad_triggers()

StatusCode NSWL1::PadTriggerLogicOfflineTool::compute_pad_triggers ( const std::vector< std::shared_ptr< PadData >> &  pads,
std::vector< std::unique_ptr< PadTrigger >> &  triggers 
) const
overridevirtual

Log a message using the Athena controlled logging system.

Implements NSWL1::IPadTriggerLogicTool.

Definition at line 105 of file PadTriggerLogicOfflineTool.cxx.

107 {
108  if(!m_isInitialized) {fillPhiTable();}
109  ATH_MSG_DEBUG(" <N> receiving "<<pads.size()<<" pad data");
110  ATH_MSG_DEBUG("calling compute_pad_triggers() (pads.size() "<<pads.size()<<")");
111  for(const auto& pad : pads){
112  ATH_MSG_DEBUG(" <N> building trig from pad "
113  <<" side "<<pad->sideId()<<""
114  <<", sector "<<pad->sectorId()
115  <<", sector type "<<pad->sectorType()
116  <<", module "<<pad->moduleId()
117  <<", multiplet "<<pad->multipletId()
118  <<", gas gap "<<pad->gasGapId()
119  <<", pad eta "<<pad->padEtaId()
120  <<", pad phi "<<pad->padPhiId());
121  }
122  for(const size_t side : SIDES){
123  for(const size_t sector : SECTORS){
124  std::vector<std::shared_ptr<PadData>> sector_pads;
125  std::copy_if(pads.begin(), pads.end(),
126  back_inserter(sector_pads),
127  [&](const std::shared_ptr<PadData>& p) { return (p->sideId()==static_cast<int>(side) &&
128  (2*p->sectorId()-1-p->sectorType())==static_cast<int>(sector));});
129 
130  if(!sector_pads.empty()){
131  const std::shared_ptr<PadData> firstPad = sector_pads[0];
132  ATH_MSG_DEBUG("<N> side "
133  <<(firstPad->sideId()==0?"A":"C")
134  <<" trigger sector "<< (2*firstPad->sectorId()-1-firstPad->sectorType())
135  <<" : "<<sector_pads.size()<<" pads");
136  if(m_useSimple4of4) {
137  const int innerMultiplet(1), outerMultiplet(2); // DG-2015-10-07 move to enum?
138  std::vector<std::shared_ptr<PadData>> padsInner(filterByMultiplet(sector_pads, innerMultiplet));
139  std::vector<std::shared_ptr<PadData>> padsOuter(filterByMultiplet(sector_pads, outerMultiplet));
140  std::vector<std::unique_ptr<PadTrigger>> triggersInner = build4of4SingleWedgeTriggers(padsInner);
141  std::vector<std::unique_ptr<PadTrigger>> triggersOuter = build4of4SingleWedgeTriggers(padsOuter);
142  ATH_MSG_DEBUG("found "
143  <<triggersInner.size()<<" inner triggers"
144  <<" and "
145  <<triggersOuter.size()<<" outer triggers");
146  triggers.reserve(triggers.size() + triggersInner.size()+triggersOuter.size());
147 
148  triggers.insert(triggers.end(),std::make_move_iterator(triggersInner.begin()),std::make_move_iterator(triggersInner.end()));
149  triggers.insert(triggers.end(),std::make_move_iterator(triggersOuter.begin()),std::make_move_iterator(triggersOuter.end()));
150  }
151  else {
152  std::vector<std::shared_ptr<PadOfflineData>> trgpads;
153  for(const auto& p : sector_pads){
154  auto pod=std::dynamic_pointer_cast<PadOfflineData> (p);
156  trgpads.emplace_back(std::move(pod));
157  }
158  const std::vector<SectorTriggerCandidate> candidates = m_tdrLogic.buildSectorTriggers(trgpads,m_Zratio);
159  int index=0;
160  for( const auto& st : candidates){
161  auto p=std::make_unique<PadTrigger>(convert(st));
162  p->m_triggerindex=index;
163  if (p->m_pads.empty()) continue;//don't record null triggers (rejected or empty)
164  triggers.push_back(std::move(p));
165  index++;
166  }
167  ATH_MSG_DEBUG("found " << candidates.size() << " triggers using the tdr logic");
168  }
169  } // if(sector_pads)
170  } // for(sector)
171  } // for(side)
172  return StatusCode::SUCCESS;
173 }

◆ convert()

NSWL1::PadTrigger NSWL1::PadTriggerLogicOfflineTool::convert ( const SectorTriggerCandidate t) const

from TDR-style SectorTriggerCandidate to PadTrigger

Definition at line 201 of file PadTriggerLogicOfflineTool.cxx.

201  {
202 
203  PadTrigger pt;
204  const Polygon roi=stc.triggerRegion3();
205  Vertex trgCntr=centroid(roi);
206  SingleWedgePadTrigger innertrg = stc.wedgeTrigs().at(0);
207 
208  //*********** assign central etaphi cordinates of the triggering region *****************
209  const float xcntr=coordinate<0>(trgCntr);
210  const float ycntr=coordinate<1>(trgCntr);
211  const float zcntr=innertrg.pads().at(0)->m_cornerXyz[1][2];
212  ROOT::Math::XYZVector trigVector(xcntr,ycntr,zcntr);
213  const float etaTrig=trigVector.Eta();
214  const float phiTrig=trigVector.Phi();
215  pt.m_eta = etaTrig;
216  pt.m_phi = phiTrig;
217 
218  /*
219  ===== Recipe for projecting eta of the trigger centroid to the axis of symmetry on a sector =======
220  */
221  //**************************************************************************************
222  auto pad0=innertrg.pads().at(0);
223  Identifier idt(pad0->id());
224  SG::ReadCondHandle<MuonGM::MuonDetectorManager> detManager{m_detManagerKey, Gaudi::Hive::currentContext()};
225  const Trk::PlaneSurface &surf = detManager->getsTgcReadoutElement(idt)->surface(idt);
226  Amg::Vector3D global_trgCoordinates(xcntr,ycntr,zcntr);
227  Amg::Vector2D local_trgCoordinates;
228  surf.globalToLocal(global_trgCoordinates,Amg::Vector3D(),local_trgCoordinates);
229 
230  float yloc_trg=local_trgCoordinates.y();
231  Amg::Vector2D local_trgCoordinateOnAxis(0,yloc_trg);
232  Amg::Vector3D global_trgCoordinateProjectedOnAxis;
233  surf.localToGlobal(local_trgCoordinateOnAxis, Amg::Vector3D(),global_trgCoordinateProjectedOnAxis);
234  ROOT::Math::XYZVector trgVectorProjectedOnAxis(global_trgCoordinateProjectedOnAxis.x(),global_trgCoordinateProjectedOnAxis.y(),global_trgCoordinateProjectedOnAxis.z());
235  float etaProjected=trgVectorProjectedOnAxis.Eta();
236  int secType=pad0->sectorType();
237  int matchedBandId=ROI2BandId(std::abs(etaProjected),secType);
238  pt.m_bandid = (matchedBandId < 0) ? 0 : matchedBandId+2;// Y.R Bands start from 2
239  if(pt.m_bandid == 0) ATH_MSG_WARNING("PadTrigger out of current eta bands");
240 
241  /* ======== End of band Id matching and assignment ======================= */
242 
243  pt.m_multiplet_id = pad0->multipletId();
244  pt.m_eta_id = innertrg.halfPadCoordinates().ieta;//this is meaningless and shoiuld be removed
245  pt.m_isSmall= int(innertrg.isSmallSector());
246 
247  //************** assign extrema of the trigger region coordinates in eta-phi and some other variables for offline analysis **************
248  std::vector<std::pair<float,float>> trg_etaphis;
249  for(const auto& v : boost::geometry::exterior_ring(roi)){
250  const float xcurr=coordinate<0>(v);
251  const float ycurr=coordinate<1>(v);
252  const float zcurr=zcntr;
253  const float etacurr=eta(xcurr,ycurr,zcurr);
254  const float phicurr=phi(xcurr,ycurr,zcurr);
255  trg_etaphis.emplace_back(etacurr,phicurr);
256  }
257  const auto trg_phiminmax=std::minmax_element(trg_etaphis.begin(),trg_etaphis.end(),[](
258  const std::pair<float,float>& l,const std::pair<float,float>& r){return l.second<r.second;}
259  );
260  float trgEtaMin=0;
261  float trgEtaMax=0;
262 
263  if(pt.m_isSmall && matchedBandId > 0){
264  trgEtaMin=m_etaBandsSmallSector.at(matchedBandId+1);
265  trgEtaMax=m_etaBandsSmallSector.at(matchedBandId);
266  } else if(!pt.m_isSmall && matchedBandId > 0) {
267  trgEtaMin=m_etaBandsLargeSector.at(matchedBandId+1);
268  trgEtaMax=m_etaBandsLargeSector.at(matchedBandId);
269  }
270 
271  pt.m_etamin=trgEtaMin;
272  pt.m_etamax=trgEtaMax;
273  pt.m_phimin=(trg_phiminmax.first)->second;
274  pt.m_phimax=(trg_phiminmax.second)->second;
275  pt.m_moduleIdInner=-1;
276  pt.m_moduleIdOuter=-1;
277 
278  if(stc.wedgeTrigs().size()==2){//double wedge trigger
279  pt.m_moduleIdInner=stc.wedgeTrigs().at(0).pads().at(0)->moduleId();
280  pt.m_moduleIdOuter=stc.wedgeTrigs().at(1).pads().at(1)->moduleId();
281  }
282  else{
283  int multId0=stc.wedgeTrigs().at(0).pads().at(0)->multipletId();
284  if( multId0==1){
285  pt.m_moduleIdInner=stc.wedgeTrigs().at(0).pads().at(0)->moduleId();
286  }
287  else{
288  pt.m_moduleIdOuter=stc.wedgeTrigs().at(0).pads().at(0)->moduleId();
289  }
290  //one of the module Ids remain as -1 /single wedge trigger
291  }
292 
293  //****************************************************************************************
294 
295  for(const SingleWedgePadTrigger& swt : stc.wedgeTrigs()){
296  int currwedge=swt.pads().at(0)->multipletId();
297  std::vector<float> trglocalminY;
298  std::vector<float> trglocalmaxY;
299  std::vector<int> trgSelectedLayers;
300  std::vector<int> trgSelectedBands;
301  std::vector<int> trgPadPhiIndices;
302  std::vector<int> trgPadEtaIndices;
303  std::vector< std::shared_ptr<PadData>> trgPads;
304  for(const auto &p : swt.pads()){
305  const float padZ=p->m_cornerXyz[0][2];
306  Identifier Id( p->id());
307  const Trk::PlaneSurface &padsurface = detManager->getsTgcReadoutElement(Id)->surface(Id);
308  float Phi=p->stationPhiAngle();
309 
310  //Find the radial boundaries of the band within the sector axis
311  float Rmin=std::abs(padZ*std::tan(2*std::atan(-1*std::exp(pt.m_etamax))) );
312  float Rmax=std::abs(padZ*std::tan(2*std::atan(-1*std::exp(pt.m_etamin))) );
313  float xmin=Rmin*std::cos(Phi);
314  float ymin=Rmin*std::sin(Phi);
315  float xmax=Rmax*std::cos(Phi);
316  float ymax=Rmax*std::sin(Phi);
317 
318  Amg::Vector3D global_trgMinOnAxis(xmin,ymin,padZ);
319  Amg::Vector3D global_trgMaxOnAxis(xmax,ymax,padZ);
320 
321  Amg::Vector2D local_trgMinOnAxis;
322  Amg::Vector2D local_trgMaxOnAxis;
323  padsurface.globalToLocal(global_trgMinOnAxis,Amg::Vector3D(),local_trgMinOnAxis);
324  padsurface.globalToLocal(global_trgMaxOnAxis,Amg::Vector3D(),local_trgMaxOnAxis);
325 
326  float bandLocalMaxY=local_trgMaxOnAxis.y();
327  float bandLocalMinY=local_trgMinOnAxis.y();
328 
329  trglocalminY.push_back(bandLocalMinY);
330  trglocalmaxY.push_back(bandLocalMaxY);
331  trgSelectedLayers.push_back(p->gasGapId());
332  trgSelectedBands.push_back(matchedBandId+2);
333  trgPadPhiIndices.push_back(p->padPhiId());
334  trgPadEtaIndices.push_back(p->padEtaId());
335  trgPads.push_back(p);
336  pt.m_pads.push_back(p);
337  } // eof for(p) pads
338  //assign variables / wedgewise
339  if(currwedge==1){
340  pt.m_trglocalminYInner=trglocalminY;
341  pt.m_trglocalmaxYInner=trglocalmaxY;
342  pt.m_trgSelectedLayersInner=trgSelectedLayers;
343  pt.m_trgSelectedBandsInner=trgSelectedBands;
344  pt.m_trgPadPhiIndicesInner=trgPadPhiIndices;
345  pt.m_trgPadEtaIndicesInner=trgPadEtaIndices;
346  pt.m_padsInner=trgPads;
347  }
348  if(currwedge==2){
349  pt.m_trglocalminYOuter=trglocalminY;
350  pt.m_trglocalmaxYOuter=trglocalmaxY;
351  pt.m_trgSelectedLayersOuter=trgSelectedLayers;
352  pt.m_trgSelectedBandsOuter=trgSelectedBands;
353  pt.m_trgPadPhiIndicesOuter=trgPadPhiIndices;
354  pt.m_trgPadEtaIndicesOuter=trgPadEtaIndices;
355  pt.m_padsOuter=trgPads;
356  }
357 
358  trglocalminY.clear();
359  trglocalmaxY.clear();
360  trgSelectedLayers.clear();
361  trgSelectedBands.clear();
362  trgPadPhiIndices.clear();
363  trgPadEtaIndices.clear();
364  trgPads.clear();
365  } // eof for (swt) single wedge trigger
366 
367  //Assignment of Phi Id using 6 bits slicing
368  Identifier padIdentifier(pt.m_pads.at(0)->id() );
369  IdentifierHash moduleHashId;
370  const IdContext ModuleContext = detManager->stgcIdHelper()->module_context();
371 
372  //get the module Identifier using the pad's
373  detManager->stgcIdHelper()->get_hash( padIdentifier, moduleHashId, &ModuleContext );
374  float stationPhiMin=0.0;
375  float stationPhiMax=0.0;
376  if (!m_isInitialized){fillPhiTable();}
377  std::map<IdentifierHash,std::pair<double,double>>::const_iterator itPhi = m_phiTable.find(moduleHashId);
378  if (itPhi != m_phiTable.end()) {
379  stationPhiMin=(*itPhi).second.first;
380  stationPhiMax=(*itPhi).second.second;
381  }
382  else {
383  ATH_MSG_WARNING("Could not find the hash Id: " << moduleHashId << " in the map");
384  }
385 
386  float trgPhiCntr=pt.m_phi;
387  int nPhiSlices=1<<m_phiIdBits;//6 bits for Phi Id; i.e interval of [0,....63]
388 
389  // special treatment for the last phi region
390  if ( stationPhiMax > M_PI && trgPhiCntr<0 ) {
391  trgPhiCntr=2*M_PI-fabs(trgPhiCntr);
392  }
393 
394  if ( trgPhiCntr<stationPhiMin || trgPhiCntr>stationPhiMax ) {
395  ATH_MSG_WARNING("Trigger phi: " << trgPhiCntr << " outside the station. Min, max: " << stationPhiMin << " " << stationPhiMax );
396  }
397 
398  float step=(stationPhiMax-stationPhiMin)/nPhiSlices;
399  for( int i=0;i<nPhiSlices;i++){
400  if(stationPhiMin+i*step>=trgPhiCntr){
401  pt.m_phi_id=i;
402  break;
403  }
404  }
405  return pt;
406 }

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ fillGeometricInformation()

void NSWL1::PadTriggerLogicOfflineTool::fillGeometricInformation ( PadOfflineData pod) const
private

Definition at line 32 of file PadTriggerLogicOfflineTool.cxx.

32  {
33  SG::ReadCondHandle<MuonGM::MuonDetectorManager> detManager{m_detManagerKey, Gaudi::Hive::currentContext()};
34  const MuonGM::sTgcReadoutElement* rdoEl = detManager->getsTgcReadoutElement(pod.Identity());
35  const Trk::PlaneSurface &surface = rdoEl->surface(pod.Identity());
36  std::array<Amg::Vector2D, 4> local_pad_corners{make_array<Amg::Vector2D, 4>(Amg::Vector2D::Zero())};
37  //From MuonPadDesign... read pad local corners
38  rdoEl->padCorners(pod.Identity(),local_pad_corners);
39  Amg::Vector3D pad_corner_global;
40  for(unsigned int i=0; i<4; i++) {
41  surface.localToGlobal(local_pad_corners.at(i), pad_corner_global, pad_corner_global);
42  pod.m_cornerXyz[i][0] = pad_corner_global.x();
43  pod.m_cornerXyz[i][1] = pad_corner_global.y();
44  pod.m_cornerXyz[i][2] = pad_corner_global.z();
45  }
46 }

◆ fillPhiTable()

void NSWL1::PadTriggerLogicOfflineTool::fillPhiTable ( ) const
private

Definition at line 409 of file PadTriggerLogicOfflineTool.cxx.

409  {
410 
411  std::lock_guard guard{m_mutex};
412  if (m_isInitialized) {
413  return;
414  }
415  SG::ReadCondHandle<MuonGM::MuonDetectorManager> detManager{m_detManagerKey, Gaudi::Hive::currentContext()};
416  const sTgcIdHelper* helper = detManager->stgcIdHelper();
417 
418  std::vector<Identifier>::const_iterator idfirst = helper->module_begin();
419  std::vector<Identifier>::const_iterator idlast = helper->module_end();
420 
421  const IdContext ModuleContext = helper->module_context();
422 
423  for ( std::vector<Identifier>::const_iterator i=idfirst ; i!=idlast ; ++i ) {
424 
425  Identifier Id = *i;
426  IdentifierHash hashId;
427 
428  helper->get_hash( Id, hashId, &ModuleContext );
429 
430  const MuonGM::sTgcReadoutElement* module = detManager->getsTgcReadoutElement(Id);
431  if (!module) continue;
432  char sector_l = module->getStationName().substr(2,1)=="L" ? 'L' : 'S';
433 
434  Amg::Vector3D pos = module->center();
435  double swidth = module->getSsize();
436  double lwidth = module->getLongSsize();
437 
438  double ycutout = module->getDesign(1, sTgcIdHelper::sTgcChannelTypes::Strip)->yCutout();
439  double length = module->getRsize();
440  double moduleR = pos.perp();
441  double dphi1 = std::atan( (0.5*lwidth)/(moduleR+0.5*length) );
442  double dphi2 = std::atan( (0.5*swidth)/(moduleR-0.5*length) );
443 
444  double dphi = ( dphi1 > dphi2 ? dphi1 : dphi2 );
445  if ( ycutout > 0 ) {
446  double rcutout = moduleR+0.5*length - ycutout;
447  double dphicutout = std::atan( (0.5*lwidth)/rcutout );
448  if ( dphi < dphicutout ) dphi = dphicutout;
449  }
450  double phimin = pos.phi()-dphi;
451  double phimax = pos.phi()+dphi;
452 
453  if ( phimin > M_PI ) phimin -= 2*M_PI;
454  if ( phimin < -M_PI ) phimin += 2*M_PI;
455 
456  std::pair<double,double> phiRange(phimin,phimax);
457  m_phiTable[hashId]=phiRange;
458 
459  if((sector_l=='L' && m_Zratio.first==0) || (sector_l=='S' && m_Zratio.second==0)) {
460  double ratio=1/pos.z();
461  Id=helper->multilayerID(Id,2);
462  const MuonGM::sTgcReadoutElement* module2 = detManager->getsTgcReadoutElement(Id);
463  Amg::Vector3D pos2 = module2->center();
464  ratio*=pos2.z();
465  if(sector_l=='L') m_Zratio.first=ratio;
466  else if(sector_l=='S') m_Zratio.second=ratio;
467  }
468  }
469  m_isInitialized = true;
470  }

◆ initialize()

StatusCode NSWL1::PadTriggerLogicOfflineTool::initialize ( )
overridevirtual

Definition at line 22 of file PadTriggerLogicOfflineTool.cxx.

22  {
23  ATH_MSG_DEBUG( "initializing " << name() );
24  ATH_MSG_DEBUG( name() << " configuration:");
25 
26  // retrieve the MuonDetectormanager
28 
29  return StatusCode::SUCCESS;
30 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

static const InterfaceID& NSWL1::IPadTriggerLogicTool::interfaceID ( )
inlinestaticinherited

Definition at line 39 of file IPadTriggerLogicTool.h.

39  {
40  static const InterfaceID IID_IPadTriggerLogicTool("NSWL1::IPadTriggerLogicTool", 1 ,0);
41  return IID_IPadTriggerLogicTool;
42  }

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ ROI2BandId()

int NSWL1::PadTriggerLogicOfflineTool::ROI2BandId ( const float  EtaTrigAtCenter,
const int  SectorType 
) const

Definition at line 176 of file PadTriggerLogicOfflineTool.cxx.

176  {
177 
178  switch(SectorType){
179  case(1): //L
180  if(EtaTrigAtCenter < m_etaBandsLargeSector.back() || EtaTrigAtCenter > m_etaBandsLargeSector.front()) return -999;
181  for(unsigned int i=0;i<m_etaBandsLargeSector.size();i++){
182  if(EtaTrigAtCenter < m_etaBandsLargeSector.at(i) && EtaTrigAtCenter > m_etaBandsLargeSector.at(i+1) ) return i;
183  }
184  break;
185 
186  case(0): //S
187  if(EtaTrigAtCenter < m_etaBandsSmallSector.back() || EtaTrigAtCenter > m_etaBandsSmallSector.front()) return -999;
188  for(unsigned int i=0;i<m_etaBandsSmallSector.size();i++){
189  if(EtaTrigAtCenter < m_etaBandsSmallSector.at(i) && EtaTrigAtCenter > m_etaBandsSmallSector.at(i+1) ) return i;
190  }
191  break;
192 
193  default:
194  ATH_MSG_FATAL(" Unexpected SectorType="<<SectorType);
195  break;
196  }
197  return -999;
198 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/4]

std::map<IdentifierHash, std::pair<double,double> > m_phiTable NSWL1::PadTriggerLogicOfflineTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 90 of file PadTriggerLogicOfflineTool.h.

◆ ATLAS_THREAD_SAFE [2/4]

std::pair<double,double> m_Zratio NSWL1::PadTriggerLogicOfflineTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 91 of file PadTriggerLogicOfflineTool.h.

◆ ATLAS_THREAD_SAFE [3/4]

std::atomic<bool> m_isInitialized NSWL1::PadTriggerLogicOfflineTool::ATLAS_THREAD_SAFE {false}
mutableprivate

Definition at line 92 of file PadTriggerLogicOfflineTool.h.

◆ ATLAS_THREAD_SAFE [4/4]

std::mutex m_mutex NSWL1::PadTriggerLogicOfflineTool::ATLAS_THREAD_SAFE {}
mutableprivate

Definition at line 93 of file PadTriggerLogicOfflineTool.h.

◆ m_detManagerKey

SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> NSWL1::PadTriggerLogicOfflineTool::m_detManagerKey {this, "MuonManagerKey", "MuonDetectorManager"}
private

Definition at line 95 of file PadTriggerLogicOfflineTool.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_etaBandsLargeSector

const std::vector<float> NSWL1::PadTriggerLogicOfflineTool::m_etaBandsLargeSector
private

get the output tree from the athena histogram service

Definition at line 87 of file PadTriggerLogicOfflineTool.h.

◆ m_etaBandsSmallSector

const std::vector<float> NSWL1::PadTriggerLogicOfflineTool::m_etaBandsSmallSector
private

Definition at line 88 of file PadTriggerLogicOfflineTool.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_PadEfficiency

Gaudi::Property<float> NSWL1::PadTriggerLogicOfflineTool::m_PadEfficiency {this, "PadEfficiency", 1.0, "Pad trigger efficiency"}
private

Definition at line 97 of file PadTriggerLogicOfflineTool.h.

◆ m_phiIdBits

Gaudi::Property<int> NSWL1::PadTriggerLogicOfflineTool::m_phiIdBits {this, "PhiIdBits", 6, "Number of bit to compute Phi-Id of pad triggers"}
private

Definition at line 98 of file PadTriggerLogicOfflineTool.h.

◆ m_tdrLogic

L1TdrStgcTriggerLogic NSWL1::PadTriggerLogicOfflineTool::m_tdrLogic
private

Definition at line 103 of file PadTriggerLogicOfflineTool.h.

◆ m_useSimple4of4

Gaudi::Property<bool> NSWL1::PadTriggerLogicOfflineTool::m_useSimple4of4 {this, "UseSimple4of4", false, "Use simplified logic requiring 4 hits on 4 gas gaps"}
private

Definition at line 99 of file PadTriggerLogicOfflineTool.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
MuonGM::sTgcReadoutElement::padCorners
bool padCorners(const Identifier &id, std::array< Amg::Vector2D, 4 > &corners) const
pad corners
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:358
NSWL1::PadTriggerLogicOfflineTool::m_tdrLogic
L1TdrStgcTriggerLogic m_tdrLogic
Definition: PadTriggerLogicOfflineTool.h:103
beamspotman.r
def r
Definition: beamspotman.py:676
Trk::PlaneSurface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for PlaneSurface: GlobalToLocal method without dynamic memory allocation - boolean checks i...
Definition: PlaneSurface.cxx:215
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
NSWL1::eta
float eta(float x, float y, float z)
Definition: GeoUtils.cxx:9
ymin
double ymin
Definition: listroot.cxx:63
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
NSWL1::PadTriggerLogicOfflineTool::ROI2BandId
int ROI2BandId(const float EtaTrigAtCenter, const int SectorType) const
Definition: PadTriggerLogicOfflineTool.cxx:176
NSWL1::SIDES
const std::vector< size_t > SIDES
Definition: tdr_compat_enum.h:20
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
NSWL1::filterByGasGap
std::vector< std::shared_ptr< PadData > > filterByGasGap(const std::vector< std::shared_ptr< PadData >> &pads_in, const int gasgap)
! helper function: copy pads with a given gas gap
Definition: PadTriggerLogicOfflineTool.cxx:58
NSWL1::filterByMultiplet
std::vector< std::shared_ptr< PadData > > filterByMultiplet(const std::vector< std::shared_ptr< PadData >> &pads_in, const int multiplet)
! helper function: copy pads with a given multiplet
Definition: PadTriggerLogicOfflineTool.cxx:49
MuonGM::MuonClusterReadoutElement::center
virtual const Amg::Vector3D & center() const override
Return the center of the element.
Definition: MuonClusterReadoutElement.h:125
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
index
Definition: index.py:1
drawFromPickle.candidates
candidates
Definition: drawFromPickle.py:271
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
NSWL1::Vertex
boost::geometry::model::d2::point_xy< double > Vertex
Definition: GeoUtils.h:17
NSWL1::BandsInEtaLargeSector
const std::vector< float > BandsInEtaLargeSector
Definition: sTGCTriggerBandsInEta.h:16
NSWL1::BandsInEtaSmallSector
const std::vector< float > BandsInEtaSmallSector
Definition: sTGCTriggerBandsInEta.h:111
NSWL1::Polygon
boost::geometry::model::polygon< Vertex > Polygon
Definition: GeoUtils.h:18
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
Phi
@ Phi
Definition: RPCdef.h:8
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
python.TrigTLAMonitorAlgorithm.triggers
triggers
Definition: TrigTLAMonitorAlgorithm.py:196
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
MuonGM::MuonClusterReadoutElement::surface
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Definition: MuonClusterReadoutElement.h:123
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
TRT::Hit::side
@ side
Definition: HitInfo.h:83
runBeamSpotCalibration.helper
helper
Definition: runBeamSpotCalibration.py:112
python.PyAthena.module
module
Definition: PyAthena.py:131
TRTCalib_cfilter.p2
p2
Definition: TRTCalib_cfilter.py:131
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
xmin
double xmin
Definition: listroot.cxx:60
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
NSWL1::PadTriggerLogicOfflineTool::fillPhiTable
void fillPhiTable() const
Definition: PadTriggerLogicOfflineTool.cxx:409
MuonGM::sTgcReadoutElement
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:30
NSWL1::SECTORS
const std::vector< size_t > SECTORS
Definition: tdr_compat_enum.h:19
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
NSWL1::PadTriggerLogicOfflineTool::convert
PadTrigger convert(const SectorTriggerCandidate &t) const
from TDR-style SectorTriggerCandidate to PadTrigger
Definition: PadTriggerLogicOfflineTool.cxx:201
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
NSWL1::PadTriggerLogicOfflineTool::build4of4SingleWedgeTriggers
static std::vector< std::unique_ptr< PadTrigger > > build4of4SingleWedgeTriggers(const std::vector< std::shared_ptr< PadData >> &pads)
Definition: PadTriggerLogicOfflineTool.cxx:67
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
sTgcIdHelper
Definition: sTgcIdHelper.h:55
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
NSWL1::PadTriggerLogicOfflineTool::m_etaBandsLargeSector
const std::vector< float > m_etaBandsLargeSector
get the output tree from the athena histogram service
Definition: PadTriggerLogicOfflineTool.h:87
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
NSWL1::PadTriggerLogicOfflineTool::m_etaBandsSmallSector
const std::vector< float > m_etaBandsSmallSector
Definition: PadTriggerLogicOfflineTool.h:88
SectorType
SectorType
Definition: sTGCenumeration.h:39
python.PyAthena.v
v
Definition: PyAthena.py:154
DeMoScan.index
string index
Definition: DeMoScan.py:364
a
TList * a
Definition: liststreamerinfos.cxx:10
h
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.compareTCTs.ratio
ratio
Definition: compareTCTs.py:295
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
NSWL1::L1TdrStgcTriggerLogic::buildSectorTriggers
std::vector< SectorTriggerCandidate > buildSectorTriggers(const std::vector< std::shared_ptr< PadOfflineData >> &pads, const std::pair< double, double > &Zratio) const
main function to compute trigger candidates
Definition: L1TdrStgcTriggerLogic.cxx:342
Trk::PlaneSurface
Definition: PlaneSurface.h:64
xmax
double xmax
Definition: listroot.cxx:61
NSWL1::PadTriggerLogicOfflineTool::fillGeometricInformation
void fillGeometricInformation(PadOfflineData &) const
Definition: PadTriggerLogicOfflineTool.cxx:32
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
NSWL1::PadTriggerLogicOfflineTool::m_phiIdBits
Gaudi::Property< int > m_phiIdBits
Definition: PadTriggerLogicOfflineTool.h:98
Rmin
double Rmin
Definition: LArDetectorConstructionTBEC.cxx:56
LArCellBinning.step
step
Definition: LArCellBinning.py:158
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
LArCellBinning.phiRange
phiRange
Filling Phi ranges.
Definition: LArCellBinning.py:107
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
IdentifierHash
This is a "hash" representation of an Identifier. This encodes a 32 bit index which can be used to lo...
Definition: IdentifierHash.h:25
Trk::PlaneSurface::localToGlobal
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for PlaneSurface: LocalToGlobal method without dynamic memory allocation.
Definition: PlaneSurface.cxx:204
TRTCalib_cfilter.p3
p3
Definition: TRTCalib_cfilter.py:132
NSWL1::phi
float phi(float x, float y, float z)
Definition: GeoUtils.cxx:14
NSWL1::PadTriggerLogicOfflineTool::m_useSimple4of4
Gaudi::Property< bool > m_useSimple4of4
Definition: PadTriggerLogicOfflineTool.h:99
IdContext
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition: IdContext.h:26
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
NSWL1::centroid
Vertex centroid(const Polygon &p)
Definition: GeoUtils.cxx:59
TRTCalib_cfilter.p0
p0
Definition: TRTCalib_cfilter.py:129
fitman.k
k
Definition: fitman.py:528
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
ymax
double ymax
Definition: listroot.cxx:64
NSWL1::PadTriggerLogicOfflineTool::m_detManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_detManagerKey
Definition: PadTriggerLogicOfflineTool.h:95
Identifier
Definition: IdentifierFieldParser.cxx:14