ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
TrigL2MuonSA::SagittaRadiusEstimate Class Reference

#include <SagittaRadiusEstimate.h>

Inheritance diagram for TrigL2MuonSA::SagittaRadiusEstimate:
Collaboration diagram for TrigL2MuonSA::SagittaRadiusEstimate:

Public Member Functions

 SagittaRadiusEstimate (const std::string &type, const std::string &name, const IInterface *parent)
 
void setMCFlag (bool use_mcLUT, const AlignmentBarrelLUTSvc *alignmentBarrelLUTSvc)
 
void setUseEndcapInner (bool use_endcapInner)
 
StatusCode setSagittaRadius (const TrigRoiDescriptor *p_roids, TrigL2MuonSA::RpcFitResult &rpcFitResult, TrigL2MuonSA::TrackPattern &trackPattern) const
 
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, V, H > &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
 

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

float f (float x, float c0, float c1, float c2, float c3) const
 
float fp (float x, float c33, float c22, float c1) const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

bool m_use_mcLUT {false}
 
bool m_use_endcapInner {false}
 
const ToolHandle< AlignmentBarrelLUT > * m_alignmentBarrelLUT = nullptr
 
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 22 of file SagittaRadiusEstimate.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

◆ SagittaRadiusEstimate()

TrigL2MuonSA::SagittaRadiusEstimate::SagittaRadiusEstimate ( const std::string &  type,
const std::string &  name,
const IInterface *  parent 
)

Definition at line 17 of file SagittaRadiusEstimate.cxx.

19  :
21 {
22 }

Member Function Documentation

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  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, V, H > &  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, V, H > &  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, V, H > &  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, V, H > &  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

◆ f()

float TrigL2MuonSA::SagittaRadiusEstimate::f ( float  x,
float  c0,
float  c1,
float  c2,
float  c3 
) const
inlineprivate

Definition at line 54 of file SagittaRadiusEstimate.h.

55  {
56  return c0 + x * (c1 + x * (c2 + x * c3));
57  }

◆ fp()

float TrigL2MuonSA::SagittaRadiusEstimate::fp ( float  x,
float  c33,
float  c22,
float  c1 
) const
inlineprivate

Definition at line 59 of file SagittaRadiusEstimate.h.

60  {
61  return c1 + x * (c22 + x * c33);
62  }

◆ 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.

◆ 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  }

◆ setMCFlag()

void TrigL2MuonSA::SagittaRadiusEstimate::setMCFlag ( bool  use_mcLUT,
const AlignmentBarrelLUTSvc alignmentBarrelLUTSvc 
)

Definition at line 27 of file SagittaRadiusEstimate.cxx.

29 {
30  m_use_mcLUT = use_mcLUT;
31  if ( alignmentBarrelLUTSvc ) m_alignmentBarrelLUT = alignmentBarrelLUTSvc->alignmentBarrelLUT();
32 }

◆ setSagittaRadius()

StatusCode TrigL2MuonSA::SagittaRadiusEstimate::setSagittaRadius ( const TrigRoiDescriptor p_roids,
TrigL2MuonSA::RpcFitResult rpcFitResult,
TrigL2MuonSA::TrackPattern trackPattern 
) const

Definition at line 37 of file SagittaRadiusEstimate.cxx.

40 {
41  const int MAX_STATION = 4;
42  const float ZERO_LIMIT = 1e-5;
43 
44  int nit;
45  const int nitmx=10;
46  int count=0;
47  double theta,rad,phi,one,phim=0,signZ;
48 
49  double c0,c1,c2,c3,c22,c33,e2,e3,c2q,c3q,d,da,db,a,b,dx,dy;
50  double m = 0.;
51  double cost = 0.;
52  double x0 = 0., y0 = 0., x1 = 0., y1 = 0., x2 = 0., y2 = 0., x3 = 0., y3 = 0.;
53  double tm = 0.;
54  double xn = 0.;
55  const double eps = 0.005;
56 
57  TrigL2MuonSA::SuperPoint* superPoints[4];
58 
59  for (int i_station=0; i_station<MAX_STATION; i_station++) {
60 
61  int chamberID = -1;
62  if ( i_station == 0 ) chamberID = xAOD::L2MuonParameters::Chamber::BarrelInner;
63  else if ( i_station == 1 ) chamberID = xAOD::L2MuonParameters::Chamber::BarrelMiddle;
64  else if ( i_station == 2 ) chamberID = xAOD::L2MuonParameters::Chamber::BarrelOuter;
65  else if ( i_station == 3 ) chamberID = xAOD::L2MuonParameters::Chamber::EndcapInner;
66  superPoints[i_station] = &(trackPattern.superPoints[chamberID]);
67 
68  if (superPoints[i_station]->R > ZERO_LIMIT) {
69  count++;
70  if ( i_station != 3 ){
71  phim = superPoints[i_station]->Phim;
72  }
73  }
74  }
75 
76  if ( superPoints[3] -> R >ZERO_LIMIT ) count--; // Not use Endcap Inner
77 
78  if ( count==2 ) {
79  y0 = 4230.; // radius of calorimeter.
80 
81  if (superPoints[0]->R < ZERO_LIMIT) {
82  x2 = superPoints[1]->Z;
83  y2 = superPoints[1]->R;
84  x3 = superPoints[2]->Z;
85  y3 = superPoints[2]->R;
86  } else if (superPoints[1]->R < ZERO_LIMIT) {
87  x2 = superPoints[0]->Z;
88  y2 = superPoints[0]->R;
89  x3 = superPoints[2]->Z;
90  y3 = superPoints[2]->R;
91  } else if (superPoints[2]->R < ZERO_LIMIT) {
92  x2 = superPoints[0]->Z;
93  y2 = superPoints[0]->R;
94  x3 = superPoints[1]->Z;
95  y3 = superPoints[1]->R;
96  }
97 
98  dx = x3 - x2;
99  dy = y3 - y2;
100 
101  x0 = y0*x2/y2;
102 
103  c3 = dy;
104  c2 = -y0*dx + 2.*(y2*x3-y3*x2);
105  c1 = -dy*(y2*y3-y0*y0)+ y3*x2*x2 - y2*x3*x3;
106  c0 = y0*x2*x3*dx + y0*x2*(y3-y0)*(y3-y0) - y0*x3*(y2-y0)*(y2-y0);
107  c22 = 2.*c2;
108  c33 = 3.*c3;
109 
110  nit = 1;
111  while((nit++)<=nitmx&&std::abs(x0-xn)>=eps) {
112  xn = x0 - f(x0,c0,c1,c2,c3)/fp(x0,c33,c22,c1);
113  x0 = xn;
114  }
115  if (std::abs(xn)<ZERO_LIMIT) xn = ZERO_LIMIT;//To avoid divergence
116 
117  x1 = xn;
118  y1 = y0;
119 
120  if (superPoints[0]->R > ZERO_LIMIT ) {
121  theta = std::atan2(superPoints[0]->R,std::abs(superPoints[0]->Z));
122  signZ = (std::abs(superPoints[0]->Z) > ZERO_LIMIT)? superPoints[0]->Z/std::abs(superPoints[0]->Z): 1.;
123  } else {
124  theta = std::atan2(y1,std::abs(x1));
125  signZ = (std::abs(x1) > ZERO_LIMIT)? x1/std::abs(x1): 1.;
126  }
127 
128  trackPattern.etaMap = (-std::log(std::tan(theta/2.)))*signZ;
129  if (rpcFitResult.isSuccess ) {
130  one = (std::cos(rpcFitResult.phi)>0)? 1: -1;
131  } else {
132  one = (std::cos(p_roids->phi())>0)? 1: -1;
133  }
134  phi = std::atan2(trackPattern.phiMSDir*one,one);
135 
136  if(phim>=M_PI+0.1) phim = phim - 2*M_PI;
137 
138  if(phim>=0) trackPattern.phiMap = (phi>=0.)? phi - phim : phim -std::abs(phi);
139  else trackPattern.phiMap = phi - phim;
140 
141  trackPattern.phiMS = phi;
142 
143  c2 = x2 - x1;
144  c3 = x3 - x1;
145  e2 = y2 - y1;
146  e3 = y3 - y1;
147  c2q = c2*c2 + e2*e2;
148  c3q = c3*c3 + e3*e3;
149  d = c2*e3 - c3*e2;
150  da = -c2q*e3 + c3q*e2;
151  db = -c2*c3q + c3*c2q;
152  a = da/d;
153  b = db/d;
154 
155  x0 = a/2.;
156  y0 = b/2.;
157  trackPattern.barrelRadius = std::sqrt(x0*x0 + y0*y0);
158  trackPattern.charge = -1;
159  if(a<=0.) trackPattern.charge = 1;
160 
161  } else if (count==3) {
162 
163  theta = std::atan2(superPoints[0]->R,std::abs(superPoints[0]->Z));
164  signZ = (std::abs(superPoints[0]->Z) > ZERO_LIMIT)? superPoints[0]->Z/std::abs(superPoints[0]->Z): 1.;
165 
166  trackPattern.etaMap = (-std::log(std::tan(theta/2.)))*signZ;
167 
168  if (rpcFitResult.isSuccess ) {
169  one = (std::cos(rpcFitResult.phi)>0)? 1: -1;
170  } else {
171  one = (std::cos(p_roids->phi())>0)? 1: -1;
172  }
173  phi = std::atan2(trackPattern.phiMSDir*one,one);
174  if(phim>=M_PI+0.1) phim = phim - 2*M_PI;
175 
176  if(phim>=0) trackPattern.phiMap = (phi>=0.)? phi - phim : phim -std::abs(phi);
177  else trackPattern.phiMap = phi - phim;
178 
179  trackPattern.phiMS = phi;
180 
181  // Alignment correation to LargeSpecial
182  if ( trackPattern.s_address==1) {
183 
184  if ( !m_alignmentBarrelLUT ) {
185  ATH_MSG_ERROR("Alignment correction service is not prepared");
186  return StatusCode::FAILURE;
187  }
188 
189  double dZ = (*m_alignmentBarrelLUT)->GetDeltaZ(trackPattern.s_address,
190  trackPattern.etaMap,
191  trackPattern.phiMap,
192  trackPattern.phiMS,
193  superPoints[0]->R);
194  superPoints[1]->Z += 10*dZ;
195  }
196 
197  m = ( superPoints[2]->Z - superPoints[0]->Z ) / ( superPoints[2]->R - superPoints[0]->R );
198 
199  trackPattern.barrelSagitta = superPoints[1]->Z - superPoints[1]->R*m - superPoints[0]->Z + superPoints[0]->R*m;
200 
201  cost = std::cos(std::atan(m));
202  x2 = superPoints[1]->R - superPoints[0]->R;
203  y2 = superPoints[1]->Z - superPoints[0]->Z;
204  x3 = superPoints[2]->R - superPoints[0]->R;
205  y3 = superPoints[2]->Z - superPoints[0]->Z;
206 
207  tm = x2;
208  x2 = ( x2 + y2*m)*cost;
209  y2 = (-tm*m + y2 )*cost;
210 
211  tm = x3;
212  x3 = ( x3 + y3*m)*cost;
213  y3 = (-tm*m + y3 )*cost;
214 
215  x0 = x3/2.;
216  y0 = (y2*y2 + x2*x2 -x2*x3)/(2*y2);
217 
218  trackPattern.barrelRadius = std::sqrt(x0*x0 + y0*y0);
219  trackPattern.charge = (trackPattern.barrelSagitta!=0)? -1.*trackPattern.barrelSagitta/std::abs(trackPattern.barrelSagitta): 0;
220 
221  }
222  else if ( m_use_endcapInner == true && count == 1 && superPoints[3]->R > ZERO_LIMIT ) {
223  y0 = 4230.; // radius of calorimeter.
224 
225  if (superPoints[0]->R > ZERO_LIMIT) {
226  x2 = superPoints[0]->Z; //BI
227  y2 = superPoints[0]->R;
228  x3 = superPoints[3]->Z; //EI
229  y3 = superPoints[3]->R;
230  } else if (superPoints[1]->R > ZERO_LIMIT) {
231  x2 = superPoints[3]->Z; //EI
232  y2 = superPoints[3]->R;
233  x3 = superPoints[1]->Z; //BM
234  y3 = superPoints[1]->R;
235  } else if (superPoints[2]->R > ZERO_LIMIT) {
236  x2 = superPoints[3]->Z; //EI
237  y2 = superPoints[3]->R;
238  x3 = superPoints[2]->Z; //BO
239  y3 = superPoints[2]->R;
240  }
241 
242  dx = x3 - x2;
243  dy = y3 - y2;
244 
245  x0 = y0*x2/y2;
246 
247  c3 = dy;
248  c2 = -y0*dx + 2.*(y2*x3-y3*x2);
249  c1 = -dy*(y2*y3-y0*y0)+ y3*x2*x2 - y2*x3*x3;
250  c0 = y0*x2*x3*dx + y0*x2*(y3-y0)*(y3-y0) - y0*x3*(y2-y0)*(y2-y0);
251  c22 = 2.*c2;
252  c33 = 3.*c3;
253 
254  nit = 1;
255  while((nit++)<=nitmx&&std::abs(x0-xn)>=eps) {
256  xn = x0 - f(x0,c0,c1,c2,c3)/fp(x0,c33,c22,c1);
257  x0 = xn;
258  }
259  if (std::abs(xn)<ZERO_LIMIT) xn = ZERO_LIMIT;//To avoid divergence
260 
261  x1 = xn;
262  y1 = y0;
263 
264  if (superPoints[0]->R > ZERO_LIMIT ) {
265  rad = superPoints[0]->R;
266  theta = std::atan2(rad,std::abs(superPoints[0]->Z));
267  signZ = (std::abs(superPoints[0]->Z) > ZERO_LIMIT)? superPoints[0]->Z/std::abs(superPoints[0]->Z): 1.;
268  } else {
269  rad = y1;
270  theta = std::atan2(rad,std::abs(x1));
271  signZ = (std::abs(x1) > ZERO_LIMIT)? x1/std::abs(x1): 1.;
272  }
273 
274  trackPattern.etaMap = (-std::log(std::tan(theta/2.)))*signZ;
275  if (rpcFitResult.isSuccess ) {
276  // one = (std::abs(rpcFitResult.rpc1[0]) > 0.)? 1. * rpcFitResult.rpc1[0] / std::abs(rpcFitResult.rpc1[0]): 1.;
277  one = (std::cos(rpcFitResult.phi)>0)? 1: -1;
278  } else {
279  one = (std::cos(p_roids->phi())>0)? 1: -1;
280  }
281  phi = std::atan2(trackPattern.phiMSDir*one,one);
282 
283  if(phim>=M_PI+0.1) phim = phim - 2*M_PI;
284 
285  if(phim>=0) trackPattern.phiMap = (phi>=0.)? phi - phim : phim -std::abs(phi);
286  else trackPattern.phiMap = phi - phim;
287 
288  trackPattern.phiMS = phi;
289 
290  c2 = x2 - x1;
291  c3 = x3 - x1;
292  e2 = y2 - y1;
293  e3 = y3 - y1;
294  c2q = c2*c2 + e2*e2;
295  c3q = c3*c3 + e3*e3;
296  d = c2*e3 - c3*e2;
297  da = -c2q*e3 + c3q*e2;
298  db = -c2*c3q + c3*c2q;
299  a = da/d;
300  b = db/d;
301 
302  x0 = -a/2. + x1;
303  y0 = -b/2. + y1;
304  double barrelRadius = std::sqrt(x0*x0 + y0*y0);
305  trackPattern.barrelRadius = barrelRadius;
306  trackPattern.charge = -1;
307  if(a<=0.) trackPattern.charge = 1;
308  }
309 
310  ATH_MSG_DEBUG("... count/trackPattern.barrelSagitta/barrelRadius/charge/s_address/phi="
311  << count << " / " << trackPattern.barrelSagitta << "/" << trackPattern.barrelRadius << "/"
312  << trackPattern.charge << "/" << trackPattern.s_address << "/"
313  << trackPattern.phiMS);
314 
315  return StatusCode::SUCCESS;
316 }

◆ setUseEndcapInner()

void TrigL2MuonSA::SagittaRadiusEstimate::setUseEndcapInner ( bool  use_endcapInner)
inline

Definition at line 33 of file SagittaRadiusEstimate.h.

33 { m_use_endcapInner = use_endcapInner; };

◆ 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

◆ m_alignmentBarrelLUT

const ToolHandle<AlignmentBarrelLUT>* TrigL2MuonSA::SagittaRadiusEstimate::m_alignmentBarrelLUT = nullptr
private

Definition at line 47 of file SagittaRadiusEstimate.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_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_use_endcapInner

bool TrigL2MuonSA::SagittaRadiusEstimate::m_use_endcapInner {false}
private

Definition at line 45 of file SagittaRadiusEstimate.h.

◆ m_use_mcLUT

bool TrigL2MuonSA::SagittaRadiusEstimate::m_use_mcLUT {false}
private

Definition at line 43 of file SagittaRadiusEstimate.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:
TrigL2MuonSA::TrackPattern::phiMap
double phiMap
Definition: TrackData.h:78
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
cost
int cost(std::vector< std::string > &files, node &n, const std::string &directory="", bool deleteref=false, bool relocate=false)
Definition: hcg.cxx:921
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:215
TrigL2MuonSA::SagittaRadiusEstimate::m_alignmentBarrelLUT
const ToolHandle< AlignmentBarrelLUT > * m_alignmentBarrelLUT
Definition: SagittaRadiusEstimate.h:47
TrigL2MuonSA::TrackPattern::superPoints
TrigL2MuonSA::SuperPoint superPoints[s_NCHAMBER]
Definition: TrackData.h:60
TrigL2MuonSA::RpcFitResult::phi
double phi
Definition: RpcFitResult.h:44
TrigL2MuonSA::TrackPattern::barrelRadius
double barrelRadius
Definition: TrackData.h:84
hist_file_dump.d
d
Definition: hist_file_dump.py:142
CaloCondBlobAlgs_fillNoiseFromASCII.db
db
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:42
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:217
extractSporadic.c1
c1
Definition: extractSporadic.py:133
TrigL2MuonSA::TrackPattern::s_address
int s_address
Definition: TrackData.h:72
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
xAOD::L2MuonParameters::BarrelInner
@ BarrelInner
Inner station in the barrel spectrometer.
Definition: TrigMuonDefs.h:16
Trk::one
@ one
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:22
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
xAOD::barrelRadius
setSAddress setEtaMS setDirPhiMS setDirZMS barrelRadius
Definition: L2StandAloneMuon_v1.cxx:129
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
x
#define x
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
XMLtoHeader.count
count
Definition: XMLtoHeader.py:84
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
TrigL2MuonSA::SuperPoint::R
float R
Definition: SuperPointData.h:55
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
xAOD::phi
setEt phi
Definition: TrigEMCluster_v1.cxx:29
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:191
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
TrigL2MuonSA::SuperPoint::Phim
float Phim
Definition: SuperPointData.h:57
python.DataFormatRates.c3
c3
Definition: DataFormatRates.py:127
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
TrigL2MuonSA::TrackPattern::phiMS
double phiMS
Definition: TrackData.h:74
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CheckAppliedSFs.e3
e3
Definition: CheckAppliedSFs.py:264
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrigL2MuonSA::TrackPattern::barrelSagitta
double barrelSagitta
Definition: TrackData.h:85
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TrigL2MuonSA::SagittaRadiusEstimate::m_use_mcLUT
bool m_use_mcLUT
Definition: SagittaRadiusEstimate.h:43
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
python.SystemOfUnits.rad
float rad
Definition: SystemOfUnits.py:126
TrigL2MuonSA::SagittaRadiusEstimate::f
float f(float x, float c0, float c1, float c2, float c3) const
Definition: SagittaRadiusEstimate.h:54
MuonR4::SegmentFit::ParamDefs::x0
@ x0
jobOption.theta
theta
Definition: jobOption.ParticleGun_fwd_sequence.py:13
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
ZERO_LIMIT
const float ZERO_LIMIT
Definition: VP1TriggerHandleL2.cxx:37
TrigL2MuonSA::TrackPattern::charge
double charge
Definition: TrackData.h:63
TrigL2MuonSA::SagittaRadiusEstimate::m_use_endcapInner
bool m_use_endcapInner
Definition: SagittaRadiusEstimate.h:45
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
MuonR4::SegmentFit::ParamDefs::y0
@ y0
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
TrigL2MuonSA::RpcFitResult::isSuccess
bool isSuccess
Definition: RpcFitResult.h:38
python.DataFormatRates.c2
c2
Definition: DataFormatRates.py:123
a
TList * a
Definition: liststreamerinfos.cxx:10
h
egammaEnergyPositionAllSamples::e2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
RoiDescriptor::phi
virtual double phi() const override final
Methods to retrieve data members.
Definition: RoiDescriptor.h:100
TrigL2MuonSA::TrackPattern::phiMSDir
double phiMSDir
Definition: TrackData.h:75
xAOD::L2MuonParameters::EndcapInner
@ EndcapInner
Inner station in the endcap spectrometer.
Definition: TrigMuonDefs.h:19
TrigL2MuonSA::TrackPattern::etaMap
double etaMap
Definition: TrackData.h:77
xAOD::L2MuonParameters::BarrelOuter
@ BarrelOuter
Outer station in the barrel spectrometer.
Definition: TrigMuonDefs.h:18
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
TrigL2MuonSA::SuperPoint::Z
float Z
Definition: SuperPointData.h:56
TrigL2MuonSA::SuperPoint
Definition: SuperPointData.h:38
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
TrigL2MuonSA::SagittaRadiusEstimate::fp
float fp(float x, float c33, float c22, float c1) const
Definition: SagittaRadiusEstimate.h:59
xAOD::L2MuonParameters::BarrelMiddle
@ BarrelMiddle
Middle station in the barrel spectrometer.
Definition: TrigMuonDefs.h:17
fitman.k
k
Definition: fitman.py:528
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106