ATLAS Offline Software
Loading...
Searching...
No Matches
QratCscClusterFitter Class Reference

#include <QratCscClusterFitter.h>

Inheritance diagram for QratCscClusterFitter:
Collaboration diagram for QratCscClusterFitter:

Public Types

typedef std::vector< Muon::CscStripPrepData * > StripList
typedef ICscStripFitter::Result StripFit
typedef std::vector< StripFitStripFitList
typedef std::vector< double > ChargeList
typedef std::vector< std::string > DataNames
typedef std::map< std::string, double > DataMap
typedef std::vector< ResultResults

Public Member Functions

 QratCscClusterFitter (const std::string &, const std::string &, const IInterface *)
 ~QratCscClusterFitter ()=default
StatusCode initialize ()
const DataNamesdataNames () const
Results fit (const StripFitList &sfits) const
Results fit (const StripFitList &sfits, double dposdz) const
double getCorrectedError (const Muon::CscPrepData *pclu, double slope) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
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.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::vector< unsigned int > m_max_width
std::string m_posopt_eta
std::string m_posopt_phi
std::string m_erropt_eta
std::string m_erropt_phi
double m_error_eta
double m_error_phi
double m_precisionErrorScaler
double m_qrat_maxdiff
double m_qrat_maxsig
double m_error_tantheta
double m_xtan_css_eta_offset
double m_xtan_css_eta_slope
double m_xtan_csl_eta_offset
double m_xtan_csl_eta_slope
double m_qratmin_css_eta
double m_qratmin_csl_eta
std::vector< double > m_qratcor_css_eta
std::vector< double > m_qratcor_csl_eta
double m_atanh_a_css_eta
double m_atanh_b_css_eta
double m_atanh_c_css_eta
double m_atanh_x0_css_eta
double m_atanh_a_csl_eta
double m_atanh_b_csl_eta
double m_atanh_c_csl_eta
double m_atanh_x0_csl_eta
double m_dposmin
SG::ReadCondHandleKey< MuonGM::MuonDetectorManagerm_DetectorManagerKey
 retrieve MuonDetectorManager from the conditions store
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc
ToolHandle< ICscAlignmentToolm_alignmentTool
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 26 of file QratCscClusterFitter.h.

Member Typedef Documentation

◆ ChargeList

typedef std::vector<double> ICscClusterFitter::ChargeList
inherited

Definition at line 43 of file ICscClusterFitter.h.

◆ DataMap

typedef std::map<std::string, double> ICscClusterFitter::DataMap
inherited

Definition at line 47 of file ICscClusterFitter.h.

◆ DataNames

typedef std::vector<std::string> ICscClusterFitter::DataNames
inherited

Definition at line 46 of file ICscClusterFitter.h.

◆ Results

typedef std::vector<Result> ICscClusterFitter::Results
inherited

Definition at line 101 of file ICscClusterFitter.h.

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

◆ StripFit

Definition at line 39 of file ICscClusterFitter.h.

◆ StripFitList

typedef std::vector<StripFit> ICscClusterFitter::StripFitList
inherited

Definition at line 40 of file ICscClusterFitter.h.

◆ StripList

typedef std::vector<Muon::CscStripPrepData*> ICscClusterFitter::StripList
inherited

Definition at line 36 of file ICscClusterFitter.h.

Constructor & Destructor Documentation

◆ QratCscClusterFitter()

QratCscClusterFitter::QratCscClusterFitter ( const std::string & type,
const std::string & aname,
const IInterface * parent )

Definition at line 210 of file QratCscClusterFitter.cxx.

210 :
211 AthAlgTool(type, aname, parent) {
212 declareInterface<ICscClusterFitter>(this);
213 m_max_width.push_back(5); // CSS eta
214 m_max_width.push_back(5); // CSL eta
215 m_max_width.push_back(3); // CSS phi
216 m_max_width.push_back(2); // CSL phi
217 declareProperty("max_width", m_max_width); // Maximum width (strips) for unspoiled clusters
218 declareProperty("position_option_eta", m_posopt_eta = "ATANH");
219 declareProperty("position_option_phi", m_posopt_phi = "NONE");
220 declareProperty("error_option_eta", m_erropt_eta = "CHARGE");
221 declareProperty("error_option_phi", m_erropt_phi = "NONE");
222 declareProperty("error_eta", m_error_eta = 0.050); // in mm this is for fixed error
223 declareProperty("error_phi", m_error_phi = 0.140); // in mm this is for fixed error
224
225 declareProperty("precisionErrorScaler", m_precisionErrorScaler = 1.0); // in mm this is for fixed error
226
227 declareProperty("qrat_maxdiff", m_qrat_maxdiff = 0.15); // in strips
228 declareProperty("qrat_maxsig", m_qrat_maxsig = 6.0); // in strips
229 declareProperty("error_tantheta", m_error_tantheta = 0.57); // in mm
230 declareProperty("xtan_css_eta_offset", m_xtan_css_eta_offset = 0.0015); // in mm
231 declareProperty("xtan_css_eta_slope", m_xtan_css_eta_slope = 0.000137); // in mm
232 declareProperty("xtan_csl_eta_offset", m_xtan_csl_eta_offset = -0.0045); // in mm
233 declareProperty("xtan_csl_eta_slope", m_xtan_csl_eta_slope = 0.000131); // in mm
234 declareProperty("qratmin_css_eta", m_qratmin_css_eta = 0.0940459);
235 declareProperty("qratmin_csl_eta", m_qratmin_csl_eta = 0.108975);
236 declareProperty("qratcor_css_eta", m_qratcor_css_eta); // in strips
237 declareProperty("qratcor_csl_eta", m_qratcor_csl_eta); // in strips
238
239 declareProperty("atanh_a_css_eta", m_atanh_a_css_eta = 1.5);
240 declareProperty("atanh_b_css_eta", m_atanh_b_css_eta = 1.411);
241 declareProperty("atanh_c_css_eta", m_atanh_c_css_eta = 2.329);
242 declareProperty("atanh_x0_css_eta", m_atanh_x0_css_eta = 0.6601);
243 declareProperty("atanh_a_csl_eta", m_atanh_a_csl_eta = 1.516);
244 declareProperty("atanh_b_csl_eta", m_atanh_b_csl_eta = 1.427);
245 declareProperty("atanh_c_csl_eta", m_atanh_c_csl_eta = 2.35);
246 declareProperty("atanh_x0_csl_eta", m_atanh_x0_csl_eta = 0.6615);
247
248 declareProperty("dposmin", m_dposmin = 0.082);
249}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::vector< unsigned int > m_max_width
std::vector< double > m_qratcor_css_eta
std::vector< double > m_qratcor_csl_eta

◆ ~QratCscClusterFitter()

QratCscClusterFitter::~QratCscClusterFitter ( )
default

Member Function Documentation

◆ dataNames()

const DataNames & QratCscClusterFitter::dataNames ( ) const
virtual

Reimplemented from ICscClusterFitter.

Definition at line 302 of file QratCscClusterFitter.cxx.

302 {
303 auto init = [&]() {
304 DataNames dnames;
305 bool dofixed = false;
306 bool docharge = false;
307 if (m_posopt_phi == "POLYNOMIAL" || m_posopt_phi == "TABLE" || m_posopt_phi == "ATANH") {
308 if (m_erropt_phi == "FIXED") dofixed = true;
309 if (m_erropt_phi == "CHARGE") docharge = true;
310 }
311 if (m_posopt_eta == "POLYNOMIAL" || m_posopt_eta == "TABLE" || m_posopt_eta == "ATANH") {
312 if (m_erropt_eta == "FIXED") dofixed = true;
313 if (m_erropt_eta == "CHARGE") docharge = true;
314 }
315 if (dofixed || docharge) {
316 dnames.emplace_back("scor1");
317 dnames.emplace_back("scor2");
318 dnames.emplace_back("scor");
319 }
320 if (docharge) {
321 dnames.emplace_back("dscor1");
322 dnames.emplace_back("dscor2");
323 dnames.emplace_back("dscor");
324 dnames.emplace_back("scordiff");
325 dnames.emplace_back("dscordiff");
326 }
327 return dnames;
328 };
329 static const DataNames dnames = init();
330 return dnames;
331}
std::vector< std::string > DataNames
init(v_theApp, v_rootStream=None)
Definition PyKernel.py:45

◆ declareGaudiProperty()

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 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

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 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

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

◆ evtStore()

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.

◆ 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

◆ fit() [1/2]

Results QratCscClusterFitter::fit ( const StripFitList & sfits) const
virtual

Implements ICscClusterFitter.

Definition at line 738 of file QratCscClusterFitter.cxx.

738 {
739 Results results = fit(sfits, 0.0);
740 Results new_results;
741 for (unsigned int iresult = 0; iresult < results.size(); ++iresult) {
742 Result res = results[iresult];
743 if (res.fitStatus) {
744 new_results.push_back(res);
745 continue;
746 }
747 // Fetch the chamber type.
748 const CscStripPrepData* pstrip = sfits[0].strip;
749 Identifier idStrip0 = pstrip->identify();
750 int station = m_idHelperSvc->cscIdHelper().stationName(idStrip0) - 49; // 1=CSS, 2=CSL
751 // Calculate the angle of incidence.
752 double tantht = 0.0;
753 double pos = res.position;
754 if (station == 1) {
756 } else {
758 }
759 // Correct the error using this angle.
760 double dpostht = m_error_tantheta * std::abs(tantht);
761 double dpos = res.dposition;
762
763 res.dposition = sqrt(dpos * dpos + dpostht * dpostht);
764
765 // Return the updated result.
766 new_results.push_back(res);
767 }
768
769 return new_results;
770}
std::pair< std::vector< unsigned int >, bool > res
std::vector< Result > Results
Results fit(const StripFitList &sfits) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Identifier identify() const
return the identifier

◆ fit() [2/2]

Results QratCscClusterFitter::fit ( const StripFitList & sfits,
double dposdz ) const
virtual

Implements ICscClusterFitter.

Definition at line 335 of file QratCscClusterFitter.cxx.

335 {
336 ATH_MSG_VERBOSE("QRAT fit with tool " << name());
337
339
340 // Check input has at least three strips.
341 unsigned int nstrip = sfits.size();
342 if (nstrip < 3) {
343 ATH_MSG_VERBOSE(" Input has fewer than three strips.");
344 if (nstrip == 2) {
345 Muon::CscTimeStatus tstatus = (sfits[0].charge > sfits[1].charge) ? sfits[0].timeStatus : sfits[1].timeStatus;
346 results.emplace_back(1, Muon::CscStatusNarrow, tstatus);
347 } else if (nstrip == 1) {
348 Muon::CscTimeStatus tstatus = sfits[0].timeStatus;
349 results.emplace_back(1, Muon::CscStatusNarrow, tstatus);
350 }
351 return results;
352 }
353
354 // Fetch the number of strips and check the input arrays.
355 for (unsigned int istrip = 0; istrip < nstrip; ++istrip) {
356 if (sfits[istrip].strip == nullptr) {
357 ATH_MSG_WARNING("Strip pointer is null.");
358 results.emplace_back(2);
359 return results;
360 }
361 }
362
363 // Use the first strip to extract the layer parameters.
364 const CscStripPrepData* pstrip = sfits[0].strip;
365 Identifier idStrip0 = pstrip->identify();
366
367 // retrieve MuonDetectorManager from the conditions store
368 SG::ReadCondHandle<MuonGM::MuonDetectorManager> DetectorManagerHandle{m_DetectorManagerKey};
369 const MuonGM::MuonDetectorManager* MuonDetMgr = DetectorManagerHandle.cptr();
370 if (MuonDetMgr == nullptr) {
371 ATH_MSG_ERROR("Null pointer to the MuonDetectorManager conditions object");
372 return results;
373 }
374 const CscReadoutElement* pro = MuonDetMgr->getCscReadoutElement(idStrip0);
375
376 bool measphi = m_idHelperSvc->cscIdHelper().CscIdHelper::measuresPhi(idStrip0);
377 double pitch = pro->cathodeReadoutPitch(0, measphi);
378 unsigned int maxstrip = pro->maxNumberOfStrips(measphi);
379 unsigned int strip0 = m_idHelperSvc->cscIdHelper().strip(idStrip0) - 1;
380 int station = m_idHelperSvc->cscIdHelper().stationName(idStrip0) - 49; // 1=CSS, 2=CSL
381
382 CscPlane plane = findPlane(station, measphi);
383 if (plane == UNKNOWN_PLANE) {
384 ATH_MSG_WARNING("Invalid CSC plane: station=" << station << "; measphi=" << measphi);
385 results.emplace_back(3);
386 return results;
387 }
388
389 // Display input strips.
390 ATH_MSG_VERBOSE("QRAT fittter input has " << nstrip << " strips");
391 for (unsigned int istrip = 0; istrip < nstrip; ++istrip) {
392 Identifier id = sfits[istrip].strip->identify();
393 ATH_MSG_VERBOSE(" " << station << " : " << measphi << " " << m_idHelperSvc->cscIdHelper().wireLayer(id) << " " << istrip << " "
394 << m_idHelperSvc->cscIdHelper().strip(id) << " " << sfits[istrip].charge);
395 }
396
397 // Find the peak strip and check the shape.
398 unsigned int istrip_peak = 0; // strip number within cluster
399 // Loop over strips excluding the edges.
400 for (unsigned int istrip = 1; istrip < nstrip - 1; ++istrip) {
401 // Tell clang to optimize assuming that FP operations may trap.
403 StripFit sfit = sfits[istrip];
404 float qthis = sfit.charge;
405 float qlast = sfits[istrip - 1].charge;
406 float qnext = sfits[istrip + 1].charge;
407 // Peak if the adjacent strips have less charge.
408 bool ispeak = qthis > qlast && qthis > qnext;
409 // Special case: next strip has the same charge.
410 // Require the previous strip has less charge and the next following
411 // strip be absent or have less charge.
412 if (!ispeak) {
413 if (qthis == qnext) { ispeak = (qthis > qlast) && (istrip + 2 == nstrip || sfits[istrip + 2].charge < qthis); }
414 }
415 // Special case: first and second strips have the same charge.
416 // Require the third strip has less charge.
417 if (!ispeak) {
418 if (istrip == 1) {
419 if (qthis == qlast) {
420 ispeak = qthis > qnext; // bug found 10/13/07
421 }
422 }
423 }
424 // Record if peak.
425 if (ispeak) {
426 if (istrip_peak) { // Error if multiple peaks are found.
427 results.emplace_back(6, Muon::CscStatusMultiPeak); // Time status should be defined in SimpleClusterFit...
428 return results;
429 }
430 istrip_peak = istrip;
431 }
432 }
433 ATH_MSG_VERBOSE(" Peak is at " << istrip_peak << "th strip in cluster");
434
435 // Check we are not on the edge.
436 if (strip0 <= 0 || strip0 + nstrip > maxstrip) {
437 results.emplace_back(4, Muon::CscStatusEdge, sfits[istrip_peak].timeStatus);
438 return results;
439 }
440
441 // MS: remove this check since width is amplitude dependent.
442 // use saturation check instead
443 /**************************************
444 if ( nstrip > m_max_width[plane] ) {
445 // if ( nstrip_threshold > m_max_width[plane] ) {
446 results.push_back(Result(5, Muon::CscStatusWide, sfits[istrip_peak].timeStatus));
447 return results;
448 }
449 ***************************************/
450
451 // Cluster is spoiled if peak is not at the center.
452 bool is_even = 2 * (nstrip / 2) == nstrip;
453 bool atcenter = istrip_peak == nstrip / 2 || (is_even && istrip_peak + 1 == nstrip / 2);
454 if (!atcenter) {
455 results.emplace_back(7, Muon::CscStatusSkewed, sfits[istrip_peak].timeStatus);
456 return results;
457 }
458
459 if (sfits[istrip_peak].stripStatus == Muon::CscStrStatSaturated || sfits[istrip_peak - 1].stripStatus == Muon::CscStrStatSaturated ||
460 sfits[istrip_peak + 1].stripStatus == Muon::CscStrStatSaturated) {
461 results.emplace_back(15, Muon::CscStatusSaturated, sfits[istrip_peak].timeStatus);
462 return results;
463 }
464
465 // left/peak/right strip should have good time information....
466 if (sfits[istrip_peak].stripStatus != Muon::CscStrStatSuccess
467 // || sfits[istrip_peak-1].stripStatus != Muon::CscStrStatSuccess
468 // || sfits[istrip_peak+1].stripStatus != Muon::CscStrStatSuccess ) {
469 ) {
470 results.emplace_back(14, Muon::CscStatusStripFitFailed, sfits[istrip_peak].timeStatus);
471 return results;
472 } else if (sfits[istrip_peak - 1].stripStatus == Muon::CscStrStatHot || sfits[istrip_peak - 1].stripStatus == Muon::CscStrStatDead ||
473 sfits[istrip_peak + 1].stripStatus == Muon::CscStrStatHot || sfits[istrip_peak + 1].stripStatus == Muon::CscStrStatDead) {
474 results.emplace_back(14, Muon::CscStatusStripFitFailed, sfits[istrip_peak].timeStatus);
475 return results;
476 }
477
479 // Set initial strip position.
480 double savg = istrip_peak;
481
482 // Calculate QRAT correction to strip position.
483 std::string posopt = m_posopt_eta;
484 std::string erropt = m_erropt_eta;
485 double dpos = 0.0;
486 if (measphi) {
487 posopt = m_posopt_phi;
488 erropt = m_erropt_phi;
489 }
490 double q1 = sfits[istrip_peak - 1].charge;
491 double q0 = sfits[istrip_peak].charge;
492 double q2 = sfits[istrip_peak + 1].charge;
493 double qrat1 = q1 / q0;
494 double qrat2 = q2 / q0;
495 double dq1 = sfits[istrip_peak - 1].dcharge;
496 double dq0 = sfits[istrip_peak].dcharge;
497 double dq2 = sfits[istrip_peak + 1].dcharge;
498
499 ATH_MSG_VERBOSE(" QRAT charge ratios: " << qrat1 << " " << qrat2);
500 double scor1 = 0.; // left side correction.
501 double dscordqrat1 = 0.;
502 double scor2 = 0; // right side correction.
503 double dscordqrat2 = 0.;
504 int stat1 = 0;
505 int stat2 = 0;
506 if (posopt == "POLYNOMIAL") {
507 stat1 = qrat_correction(plane, qrat1, scor1, dscordqrat1);
508 stat2 = qrat_correction(plane, qrat2, scor2, dscordqrat2);
509 } else if (posopt == "TABLE") {
510 double qrmin = 0.0;
511 const std::vector<double>* pcor = nullptr;
512 if (plane == CSS_ETA) {
513 qrmin = m_qratmin_css_eta;
514 pcor = &m_qratcor_css_eta;
515 } else if (plane == CSL_ETA) {
516 qrmin = m_qratmin_csl_eta;
517 pcor = &m_qratcor_csl_eta;
518 } else {
519 ATH_MSG_WARNING(" Invalid QRAT plane: " << splane(plane));
520 results.emplace_back(8);
521 return results;
522 }
523 if (pcor) {
524 stat1 = qrat_interpolation(qrmin, *pcor, qrat1, scor1, dscordqrat1);
525 stat2 = qrat_interpolation(qrmin, *pcor, qrat2, scor2, dscordqrat2);
526 } else {
527 stat1 = 99;
528 }
529 } else if (posopt == "ATANH") { // MS: atanh parametrization
530 double a, b, c, x0; // parameters
531 if (plane == CSS_ETA) {
536 } else if (plane == CSL_ETA) {
541 } else {
542 ATH_MSG_WARNING(" Invalid QRAT plane: " << splane(plane));
543 results.emplace_back(8);
544 return results;
545 }
546 stat1 = qrat_atanh(a, b, c, x0, qrat1, scor1, dscordqrat1);
547 stat2 = qrat_atanh(a, b, c, x0, qrat2, scor2, dscordqrat2);
548
549 } else {
550 ATH_MSG_WARNING(" Invalid position option: " << posopt);
551 results.emplace_back(9);
552 return results;
553 }
554 if (stat1 || stat2) {
555 ATH_MSG_VERBOSE(" QRAT correction failed: SPOILED");
556 results.emplace_back(10);
557 return results;
558 }
559 ATH_MSG_VERBOSE(" QRAT strip corrs: " << scor1 << " " << scor2);
560 ATH_MSG_VERBOSE(" QRAT derivatives: " << dscordqrat1 << " " << dscordqrat2);
561
562 // Compare left and right.
563 // Flip sign of the left side correction.
564 scor1 = -scor1;
565 dscordqrat1 = -dscordqrat1;
566 double scor = 0.0;
567 DataMap dmap;
568 // Calculation weighting corrections by their derivatives, i.e. assuming the
569 // two charge ratios have the same error.
570 if (erropt == "FIXED") {
571 double w1 = 1 / (dscordqrat1 * dscordqrat1);
572 double w2 = 1 / (dscordqrat2 * dscordqrat2);
573 scor = (w1 * scor1 + w2 * scor2) / (w1 + w2);
574 double scor_diff = std::abs(scor2 - scor1);
575 ATH_MSG_VERBOSE(" Combined corr: " << scor);
576 dpos = measphi ? m_error_phi : m_error_eta;
577 // Fill data map.
578 dmap["scor1"] = scor1;
579 dmap["scor2"] = scor2;
580 dmap["scor"] = scor;
581 // Exit if measurements are inconsistent.
582 if (scor_diff > m_qrat_maxdiff) {
583 ATH_MSG_VERBOSE(" SPOILED (scor_diff=" << scor_diff << ")");
585 return results;
586 }
587 // Calculation using the (independent) errors in the three charges.
588 } else if (erropt == "CHARGE") {
589 // Calculate intermediate variables.
590 double x1 = dscordqrat1 * qrat1;
591 double x2 = dscordqrat2 * qrat2;
592 double dqq0 = dq0 / q0;
593 double dqq1 = dq1 / q1;
594 double dqq2 = dq2 / q2;
595 double rnum = (-x1 * x1 * dqq1 * dqq1 + x2 * x2 * dqq2 * dqq2 + (x2 * x2 - x1 * x1) * dqq0 * dqq0);
596 double rden = (x1 * x1 * dqq1 * dqq1 + x2 * x2 * dqq2 * dqq2 + (x2 - x1) * (x2 - x1) * dqq0 * dqq0);
597 double rfac = rnum / rden;
598 // Calculate the significance of the difference between the measurements.
599 double dscor_diff = sqrt(rden);
600 double scor_diff = scor2 - scor1;
601 double scor_sig = std::abs(scor_diff) / dscor_diff;
602 // Calculate the weighted average of the corrections.
603 double w1 = 0.5 * (1.0 + rfac);
604 double w2 = 0.5 * (1.0 - rfac);
605 scor = w1 * scor1 + w2 * scor2;
606 // Calculate the error in this average.
607 double ddscor1 = w1 * x1 * dqq1;
608 double ddscor2 = w2 * x2 * dqq2;
609 double ddscor0 = (w1 * x1 + w2 * x2) * dqq0;
610 double dscor = sqrt(ddscor1 * ddscor1 + ddscor2 * ddscor2 + ddscor0 * ddscor0);
611 dpos = pitch * dscor;
612 // add minimum error (in mm) in quadrature:
613 dpos = sqrt(dpos * dpos + m_dposmin * m_dposmin);
614 // Fill data map.
615 double dscor1 = std::abs(x1) * sqrt(dqq1 * dqq1 + dqq0 * dqq0);
616 double dscor2 = std::abs(x2) * sqrt(dqq2 * dqq2 + dqq0 * dqq0);
617 dmap["scor1"] = scor1;
618 dmap["dscor1"] = dscor1;
619 dmap["scor2"] = scor2;
620 dmap["dscor2"] = dscor2;
621 dmap["scordiff"] = scor_diff;
622 dmap["dscordiff"] = dscor_diff;
623 dmap["scor"] = scor;
624 dmap["dscor"] = dscor;
625 // Debugging.
626 ATH_MSG_VERBOSE("QRAT CHARGE calculation");
627 ATH_MSG_VERBOSE(" q1, q0, q2: " << q1 << " " << q0 << " " << q2);
628 ATH_MSG_VERBOSE(" dq1, dq0, dq2: " << dq1 << " " << dq0 << " " << dq2);
629 ATH_MSG_VERBOSE(" dscordqrat1, x1: " << dscordqrat1 << " " << x1);
630 ATH_MSG_VERBOSE(" dscordqrat2, x2: " << dscordqrat2 << " " << x2);
631 ATH_MSG_VERBOSE(" scor1 = " << scor1 << " +/- " << dscor1);
632 ATH_MSG_VERBOSE(" scor2 = " << scor2 << " +/- " << dscor2);
633 ATH_MSG_VERBOSE(" scor = " << scor << " +/- " << dscor);
634 ATH_MSG_VERBOSE(" scordiff = " << scor_diff << " +/- " << dscor_diff);
635 ATH_MSG_VERBOSE(" scor_sig = " << scor_sig);
636
637 // Exit if measurements are inconsistent.
638 if (scor_sig > m_qrat_maxsig) {
639 ATH_MSG_VERBOSE(" SPOILED (scor_sig=" << scor_sig << ")");
640 results.emplace_back(12, Muon::CscStatusQratInconsistent, sfits[istrip_peak].timeStatus);
641 return results;
642 }
643 } else {
644 ATH_MSG_WARNING(" Invalid error option: " << erropt);
645 results.emplace_back(13, Muon::CscStatusUndefined, sfits[istrip_peak].timeStatus);
646 return results;
647 }
648
649 // Correct strip position.
650 savg += scor + strip0;
651 ATH_MSG_VERBOSE(" QRAT corr " << splane(plane) << " nstrip=" << nstrip << " savg=" << savg << " qrat1=" << qrat1
652 << " qrat2=" << qrat2 << " scor1=" << scor1 << " scor2=" << scor2);
653
654 // Error due to incident angle.
655 double dpostht = m_error_tantheta * std::abs(tantheta);
656
657 // Scale error on dpos
658 dpos = dpos * m_precisionErrorScaler;
659
660 // Set return values.
662 res.strip = istrip_peak;
663 res.position = pitch * (savg + 0.5 - 0.5 * maxstrip);
664
665 // internal alignment ...
666 Identifier id = sfits[res.strip].strip->identify();
667 double offset = m_alignmentTool->getAlignmentOffset(id);
668 res.position -= offset;
669
670 res.dposition = sqrt(dpos * dpos + dpostht * dpostht);
671
672 res.fstrip = 0;
673 res.lstrip = nstrip - 1;
674 res.time = sfits[istrip_peak].time;
675 res.time_beforeT0Corr = sfits[istrip_peak].time_beforeT0Corr;
676 res.time_beforeBPCorr = sfits[istrip_peak].time_beforeBPCorr;
677 res.timeStatus = sfits[istrip_peak].timeStatus;
678
679 res.qleft = q1;
680 res.qpeak = q0;
681 res.qright = q2;
682
683 // res.diff = dmap["scordiff"];
684 // res.sig = dmap["scordiff"]/dmap["dscordiff"];
685
686 // cluster charge should be qsum over three strip... 3/21/2011
687 res.charge = res.qleft + res.qpeak + res.qright;
688 res.charge_beforeBPCorr =
689 sfits[istrip_peak].charge_beforeBPCorr + sfits[istrip_peak - 1].charge_beforeBPCorr + sfits[istrip_peak + 1].charge_beforeBPCorr;
690
691 res.dataMap = dmap;
692
693 ATH_MSG_VERBOSE(" Position :: pos=" << res.position << " dpos:dtht=" << dpos << ":" << dpostht << " ==>" << res.dposition
694 << " at tanth=" << tantheta);
695
696 results.push_back(res);
697 return results;
698}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
double charge(const T &p)
Definition AtlasPID.h:997
static Double_t a
int qrat_correction(CscPlane plane, double qrat, double &cor, double &dcordqrat)
int qrat_atanh(const double a, const double b, double c, const double x0, double qrat, double &cor, double &dcordqrat)
Calculate QRAT correction from inverse hyperbolic tangent based on a fit to the plot of pos x vs char...
int qrat_interpolation(double qrmin, const std::vector< double > &corvals, double qrat, double &cor, double &dcordqrat)
ICscStripFitter::Result StripFit
std::map< std::string, double > DataMap
double cathodeReadoutPitch(int chLayer, int measuresPhi) const
int maxNumberOfStrips(int measuresPhi) const
const CscReadoutElement * getCscReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
retrieve MuonDetectorManager from the conditions store
ToolHandle< ICscAlignmentTool > m_alignmentTool
const_pointer_type cptr()
rfac(flags, cells_name, *args, **kw)
@ CscStrStatDead
@ CscStrStatHot
@ CscStrStatSaturated
@ CscStrStatSuccess
@ CscStatusUnspoiled
Clean cluster with precision fit.
@ CscStatusStripFitFailed
@ CscStatusUndefined
Undefined, should not happen, most likely indicates a problem.
@ CscStatusSkewed
Skewed, e.g.
@ CscStatusEdge
Cluster reaches the edge of plane.
@ CscStatusMultiPeak
More than one peak in cluster.
@ CscStatusSaturated
@ CscStatusQratInconsistent
Positions from Qrat_left and Qrat_right is not consistent.
@ CscStatusNarrow
Too narrow.
CscTimeStatus
Enum to represent the cluster time measurement status - see the specific enum values for more details...
#define CXXUTILS_TRAPPING_FP
Definition trapping_fp.h:24

◆ getCorrectedError()

double QratCscClusterFitter::getCorrectedError ( const Muon::CscPrepData * pclu,
double slope ) const
virtual

Implements ICscClusterFitter.

Definition at line 705 of file QratCscClusterFitter.cxx.

705 {
706 // Cluster position.
709 double pos = pclu->localPosition()[icor];
710 double dpos = Amg::error(pclu->localCovariance(), ierr);
711
712 Identifier idStrip0 = pclu->identify();
713 int station = m_idHelperSvc->cscIdHelper().stationName(idStrip0) - 49; // 1=CSS, 2=CSL
714 // Calculate the angle of incidence.
715 double tantht = 0.0;
716 if (station == 1) {
718 } else {
720 }
721 // Correct the error using this angle.
722 double old_dpostht = m_error_tantheta * std::abs(tantht);
723
724 double new_dpostht = m_error_tantheta * std::abs(slope);
725
726 double newError = sqrt(dpos * dpos - old_dpostht * old_dpostht + new_dpostht * new_dpostht);
727
728 ATH_MSG_VERBOSE(" Position :: pos=" << pos << " dpos:newdpos=" << dpos << " : " << newError << " " << old_dpostht << " "
729 << new_dpostht);
730
731 if (slope < -990) { newError = sqrt(dpos * dpos + old_dpostht * old_dpostht); }
732
733 return newError;
734}
const Amg::Vector2D & localPosition() const
return the local position reference
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
ParamDefs
This file defines the parameter enums in the Trk namespace.
Definition ParamDefs.h:32
@ loc1
Definition ParamDefs.h:34

◆ initialize()

StatusCode QratCscClusterFitter::initialize ( )

Definition at line 253 of file QratCscClusterFitter.cxx.

253 {
254 ATH_MSG_VERBOSE("Initalizing " << name());
255
256 // retrieve MuonDetectorManager from the conditions store
257 ATH_CHECK(m_DetectorManagerKey.initialize());
258
259 ATH_CHECK(m_idHelperSvc.retrieve());
260
261 if (m_alignmentTool.retrieve().isFailure()) {
262 ATH_MSG_WARNING(name() << ": unable to retrieve cluster fitter " << m_alignmentTool);
263 } else {
264 ATH_MSG_DEBUG(name() << ": retrieved " << m_alignmentTool);
265 }
266
267 ATH_MSG_DEBUG("Properties for " << name() << ":");
268 ATH_MSG_DEBUG(" Eta position option: " << m_posopt_eta);
269 ATH_MSG_DEBUG(" Phi position option: " << m_posopt_phi);
270 ATH_MSG_DEBUG(" Eta error option: " << m_erropt_eta);
271 ATH_MSG_DEBUG(" Phi error option: " << m_erropt_phi);
272 ATH_MSG_DEBUG(" Eta assigned error: " << m_error_eta);
273 ATH_MSG_DEBUG(" Phi assigned error: " << m_error_phi);
274 ATH_MSG_DEBUG(" Max strip pos diff: " << m_qrat_maxdiff);
275 ATH_MSG_DEBUG(" Max strip pos sig: " << m_qrat_maxsig);
276 ATH_MSG_DEBUG(" Non-normal error coeff: " << m_error_tantheta);
277 ATH_MSG_DEBUG(" CSS eta pos-slope offset: " << m_xtan_css_eta_offset);
278 ATH_MSG_DEBUG(" CSS eta pos-slope slope: " << m_xtan_css_eta_slope);
279 ATH_MSG_DEBUG(" CSL eta pos-slope offset: " << m_xtan_csl_eta_offset);
280 ATH_MSG_DEBUG(" CSL eta pos-slope slope: " << m_xtan_csl_eta_slope);
281 ATH_MSG_DEBUG(" CSS eta table offset: " << m_qratmin_css_eta);
282 ATH_MSG_DEBUG(" CSL eta table offset: " << m_qratmin_csl_eta);
283 ATH_MSG_DEBUG(" CSS eta table size: " << m_qratcor_css_eta.size());
284 ATH_MSG_DEBUG(" CSL eta table size: " << m_qratcor_csl_eta.size());
285
286 ATH_MSG_DEBUG("atanh_a_css_eta: " << m_atanh_a_css_eta);
287 ATH_MSG_DEBUG("atanh_b_css_eta: " << m_atanh_b_css_eta);
288 ATH_MSG_DEBUG("atanh_c_css_eta: " << m_atanh_c_css_eta);
289 ATH_MSG_DEBUG("atanh_x0_css_eta: " << m_atanh_x0_css_eta);
290 ATH_MSG_DEBUG("atanh_a_csl_eta: " << m_atanh_a_csl_eta);
291 ATH_MSG_DEBUG("atanh_b_csl_eta: " << m_atanh_b_csl_eta);
292 ATH_MSG_DEBUG("atanh_c_csl_eta: " << m_atanh_c_csl_eta);
293 ATH_MSG_DEBUG("atanh_x0_csl_eta: " << m_atanh_x0_csl_eta);
294
295 ATH_MSG_DEBUG("Minimum pos error: " << m_dposmin);
296
297 return StatusCode::SUCCESS;
298}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)

◆ 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()

const InterfaceID & ICscClusterFitter::interfaceID ( )
inlinestaticinherited

Must declare this, with name of interface

Definition at line 89 of file ICscClusterFitter.h.

89 {
90 static const InterfaceID IID_ICscClusterFitter("ICscClusterFitter", 1, 0);
91 return IID_ICscClusterFitter;
92 }

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ 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();
384 }
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)

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

◆ 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 asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ 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) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_alignmentTool

ToolHandle<ICscAlignmentTool> QratCscClusterFitter::m_alignmentTool
private
Initial value:
{
this,
"CscAlignmentTool",
"CscAlignmentTool/CscAlignmentTool",
}

Definition at line 88 of file QratCscClusterFitter.h.

88 {
89 this,
90 "CscAlignmentTool",
91 "CscAlignmentTool/CscAlignmentTool",
92 };

◆ m_atanh_a_csl_eta

double QratCscClusterFitter::m_atanh_a_csl_eta
private

Definition at line 67 of file QratCscClusterFitter.h.

◆ m_atanh_a_css_eta

double QratCscClusterFitter::m_atanh_a_css_eta
private

Definition at line 63 of file QratCscClusterFitter.h.

◆ m_atanh_b_csl_eta

double QratCscClusterFitter::m_atanh_b_csl_eta
private

Definition at line 68 of file QratCscClusterFitter.h.

◆ m_atanh_b_css_eta

double QratCscClusterFitter::m_atanh_b_css_eta
private

Definition at line 64 of file QratCscClusterFitter.h.

◆ m_atanh_c_csl_eta

double QratCscClusterFitter::m_atanh_c_csl_eta
private

Definition at line 69 of file QratCscClusterFitter.h.

◆ m_atanh_c_css_eta

double QratCscClusterFitter::m_atanh_c_css_eta
private

Definition at line 65 of file QratCscClusterFitter.h.

◆ m_atanh_x0_csl_eta

double QratCscClusterFitter::m_atanh_x0_csl_eta
private

Definition at line 70 of file QratCscClusterFitter.h.

◆ m_atanh_x0_css_eta

double QratCscClusterFitter::m_atanh_x0_css_eta
private

Definition at line 66 of file QratCscClusterFitter.h.

◆ m_DetectorManagerKey

SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> QratCscClusterFitter::m_DetectorManagerKey
private
Initial value:
{
this,
"DetectorManagerKey",
"MuonDetectorManager",
"Key of input MuonDetectorManager condition data",
}

retrieve MuonDetectorManager from the conditions store

Definition at line 75 of file QratCscClusterFitter.h.

75 {
76 this,
77 "DetectorManagerKey",
78 "MuonDetectorManager",
79 "Key of input MuonDetectorManager condition data",
80 };

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

double QratCscClusterFitter::m_dposmin
private

Definition at line 72 of file QratCscClusterFitter.h.

◆ m_erropt_eta

std::string QratCscClusterFitter::m_erropt_eta
private

Definition at line 46 of file QratCscClusterFitter.h.

◆ m_erropt_phi

std::string QratCscClusterFitter::m_erropt_phi
private

Definition at line 47 of file QratCscClusterFitter.h.

◆ m_error_eta

double QratCscClusterFitter::m_error_eta
private

Definition at line 48 of file QratCscClusterFitter.h.

◆ m_error_phi

double QratCscClusterFitter::m_error_phi
private

Definition at line 49 of file QratCscClusterFitter.h.

◆ m_error_tantheta

double QratCscClusterFitter::m_error_tantheta
private

Definition at line 53 of file QratCscClusterFitter.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_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> QratCscClusterFitter::m_idHelperSvc
private
Initial value:
{
this,
"MuonIdHelperSvc",
"Muon::MuonIdHelperSvc/MuonIdHelperSvc",
}

Definition at line 82 of file QratCscClusterFitter.h.

82 {
83 this,
84 "MuonIdHelperSvc",
85 "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
86 };

◆ m_max_width

std::vector<unsigned int> QratCscClusterFitter::m_max_width
private

Definition at line 43 of file QratCscClusterFitter.h.

◆ m_posopt_eta

std::string QratCscClusterFitter::m_posopt_eta
private

Definition at line 44 of file QratCscClusterFitter.h.

◆ m_posopt_phi

std::string QratCscClusterFitter::m_posopt_phi
private

Definition at line 45 of file QratCscClusterFitter.h.

◆ m_precisionErrorScaler

double QratCscClusterFitter::m_precisionErrorScaler
private

Definition at line 50 of file QratCscClusterFitter.h.

◆ m_qrat_maxdiff

double QratCscClusterFitter::m_qrat_maxdiff
private

Definition at line 51 of file QratCscClusterFitter.h.

◆ m_qrat_maxsig

double QratCscClusterFitter::m_qrat_maxsig
private

Definition at line 52 of file QratCscClusterFitter.h.

◆ m_qratcor_csl_eta

std::vector<double> QratCscClusterFitter::m_qratcor_csl_eta
private

Definition at line 61 of file QratCscClusterFitter.h.

◆ m_qratcor_css_eta

std::vector<double> QratCscClusterFitter::m_qratcor_css_eta
private

Definition at line 60 of file QratCscClusterFitter.h.

◆ m_qratmin_csl_eta

double QratCscClusterFitter::m_qratmin_csl_eta
private

Definition at line 59 of file QratCscClusterFitter.h.

◆ m_qratmin_css_eta

double QratCscClusterFitter::m_qratmin_css_eta
private

Definition at line 58 of file QratCscClusterFitter.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.

◆ m_xtan_csl_eta_offset

double QratCscClusterFitter::m_xtan_csl_eta_offset
private

Definition at line 56 of file QratCscClusterFitter.h.

◆ m_xtan_csl_eta_slope

double QratCscClusterFitter::m_xtan_csl_eta_slope
private

Definition at line 57 of file QratCscClusterFitter.h.

◆ m_xtan_css_eta_offset

double QratCscClusterFitter::m_xtan_css_eta_offset
private

Definition at line 54 of file QratCscClusterFitter.h.

◆ m_xtan_css_eta_slope

double QratCscClusterFitter::m_xtan_css_eta_slope
private

Definition at line 55 of file QratCscClusterFitter.h.


The documentation for this class was generated from the following files: