16#include "GaudiKernel/MsgStream.h"
21#include "TDirectory.h"
61 for (
int i = 0; i < 2; i++) {
71 if (
this != &MLRTDH) {
72 for (
int i = 0; i < 2; i++) {
84 typename T::iterator it =
container.begin();
92 for (
unsigned int i = 0; i < 2; i++) {
101 for (
int i = 0; i < 2; i++) {
102 TDirectory *prevdir = gDirectory;
104 std::ostringstream nm;
105 nm <<
"temporal_residual_ml" << i <<
"_iteration" <<
m_residuals[i].size();
118 TDirectory *prev = gDirectory;
122 for (
unsigned int i = 0; i < 2; i++) {
138 std::ostringstream nm;
140 TProfile *prov_diff =
new TProfile(nm.str().c_str(),
"", 15, 0., 15.);
141 prov_diff->Add(prof[0], prof[1], 1., -1);
160 if (
this != &MLRTD) {
187 log << MSG::WARNING <<
"MultilayerRtDifference::DoFit: Not enough hits!" <<
endmsg;
190 if (prov_diff->Fit(
"polfun",
"Q",
"", 4., 15.) != 0) {
192 log << MSG::WARNING <<
"MultilayerRtDifference: Fit of polinomial failed! Not updating scale!" <<
endmsg;
197 log << MSG::WARNING <<
"MultilayerRtDifference: No Scale update needed! Scale correction: " <<
m_polfun->GetParameter(0)
201 if (!rt_relation)
return true;
202 float scale =
m_polfun->GetParameter(0);
203 if (std::abs(scale) > 2) scale *= 4;
206 if (seg.empty())
return true;
208 for (
const auto &segment : seg) {
210 float old_corr = hit->TemperatureTime();
211 float corr =
RtScaleFunction(hit->driftTime(), hit->identify().mdtMultilayer() == 2, *rt_relation);
212 hit->setTemperatureTime(corr);
213 hit->setDriftTime(hit->driftTime() - corr + old_corr);
214 hit->setDriftRadius(rt_relation->
radius(hit->driftTime()), hit->sigmaDriftRadius());
std::pair< std::vector< unsigned int >, bool > res
TGraphErrors * GetEntries(TH2F *histo)
std::vector< std::shared_ptr< MuonCalibSegment > > MuonSegVec
generic interface for a rt-relation
virtual double radius(double t) const =0
returns drift radius for a given time
double GetTmaxDiff() const
return the difference in total dirft time between the two multilayers (ML1 - ML2)
void SetTmaxDiff(const double d)
set the difference in total drift time betwene the two multilayers (ML1 - ML2)
virtual double driftVelocity(double t) const =0
Returns the drift velocity for a given time.
Athena-independent part of the MdtCalibHit.
float driftRadius() const
retrieve the radius of the drift circle
float driftTime() const
retrieve the drift time
const MuonFixedId & identify() const
retrieve the MuonFixedId of the hit
float signedDistanceToTrack() const
retrieve the distance of the track to the wire
TH2F * GetResHist(const int &ml)
~MultilayerRtDifference_Histograms()
TProfile * GetProfileDiff(const int &min_number_of_entries)
std::list< TProfile * > m_res_prov_diff
std::list< TProfile * > m_res_prov[2]
MultilayerRtDifference_Histograms & operator=(const MultilayerRtDifference_Histograms &MLRTDH)
TH2F * m_current_residuals[2]
std::list< TH2F * > m_residuals[2]
TDirectory * m_control_histogram_dir
MultilayerRtDifference_Histograms(TDirectory *control_histogram_dir)
MultilayerRtDifference_Histograms * m_histograms
void Fill(const MdtCalibHitBase &hit, const IRtRelation &rt_relation)
MultilayerRtDifference(int min_hits, TDirectory *control_histogram_dir=NULL)
virtual ~MultilayerRtDifference()
bool DoFit(IRtRelation *rt_relation, const IMdtCalibration::MuonSegVec &seg)
MultilayerRtDifference & operator=(const MultilayerRtDifference &MLRTD)
std::shared_ptr< MdtCalibHitBase > MdtHitPtr
typedef for a collection of MdtCalibHitBase s
int mdtMultilayer() const
Mdt specific:
singleton-like access to IMessageSvc via open function and helper
IMessageSvc * getMessageSvc(bool quiet=false)
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Double_t MultilayerRtDifference_ScaleFunction(Double_t *x, Double_t *par)
void clearall(T &container)
float RtScalePolynomial(const float r)
float RtScaleFunction(const float t, const bool ml2, const IRtRelation &rtrelation)