![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
12 #include "GaudiKernel/MsgStream.h"
29 f->GetRange(rmin, rmax);
30 std::unique_ptr<TF1> slope_function =
33 slope_function->FixParameter(1,
b);
36 h->Fit(
"slope_function",
"R+",
"");
42 bool add_tmax_difference) {
70 if (seg.
mdtHOT()[
k]->driftTime() < -8e8)
continue;
71 m_t_drift.push_back(std::pair<double, bool>(seg.
mdtHOT()[
k]->driftTime(), seg.
mdtHOT()[
k]->identify().mdtMultilayer() == 2));
77 m_t_drift.push_back(std::pair<double, bool>(seg.
mdtHOT()[
k]->driftTime(), seg.
mdtHOT()[
k]->identify().mdtMultilayer() == 2));
98 std::array<T0MTHistos, 2> drift_time_spec_ml;
103 unsigned int nb_bins(100);
105 std::vector<SamplePoint> point(nb_bins + 1);
116 log << MSG::WARNING <<
"analyse() - Less than 2000 drift-time entries! No r-t relationship will be determined!" <<
endmsg;
130 float min_t =
m_t_drift[0].first - 100.0;
132 std::unique_ptr<TH1F> tspec = std::make_unique<TH1F>(
"tspec",
"DRIFT-TIME SPECTRUM", n_bins, min_t, max_t);
133 std::array<std::unique_ptr<TH1F>, 2> tspec_ml;
134 tspec_ml[0] = std::make_unique<TH1F>(
"tspec_ml0",
"DRIFT-TIME SPECTRUM ML 0", n_bins, min_t, max_t);
135 tspec_ml[1] = std::make_unique<TH1F>(
"tspec_ml1",
"DRIFT-TIME SPECTRUM ML 1", n_bins, min_t, max_t);
138 tspec->Fill(
k.first, 1.0);
139 tspec_ml[
static_cast<unsigned int>(
k.second)]->Fill(
k.first, 1.0);
141 drift_time_spec.
SetTSpec(1, tspec.get(), &t0_setting,
false);
142 drift_time_spec_ml[0].SetTSpec(2, tspec_ml[0].
get(), &t0_setting,
false);
143 drift_time_spec_ml[1].SetTSpec(3, tspec_ml[1].
get(), &t0_setting,
false);
147 if (!drift_time_spec.
FitT0() || !drift_time_spec.
T0Ok()) {
149 log << MSG::WARNING <<
"analyse() - t0 fit not successful, no r-t relationship will be calculated!" <<
endmsg;
154 if (!drift_time_spec.
FitTmax() || !drift_time_spec.
TmaxOk()) {
156 log << MSG::WARNING <<
"analyse() - tmax fit not successful, no r-t relationship will be calculated!" <<
endmsg;
170 bin_content =
static_cast<double>(
m_nb_hits_used) /
static_cast<double>(nb_bins);
175 point[0].set_x2(0.0);
176 point[0].set_error(0.1);
179 for (
unsigned int k = 1;
k < nb_bins;
k++) {
181 point[
k].set_x1(
m_t_drift[k_min +
static_cast<int>(bin_content) * (
k)].
first);
183 point[
k].set_error(1.0);
186 point[nb_bins].set_x1(tmax);
187 point[nb_bins].set_x2(
m_r_max);
188 point[nb_bins].set_error(1.);
196 std::vector<SamplePoint> add_fit_point;
201 std::shared_ptr<IRtRelation> rt_new = std::make_shared<RtRelationLookUp>(tmp_rt);
209 std::array<float, 2>
b{}, tmax{}, T{};
210 for (
unsigned int i = 0;
i < 2;
i++) {
211 if (!drift_time_spec_ml[
i].FitT0()) {
215 if (!drift_time_spec_ml[
i].FitTmax()) {
225 int refit =
static_cast<int>((
b[1] + 1.33717e-03) > (
b[0] + 1.33717
e-03));
226 int norefit =
static_cast<bool>(refit) ? 0 : 1;
227 TF1 *fixfun = drift_time_spec_ml[refit].GetTMaxFunctionNC();
230 TList *
l = drift_time_spec_ml[refit].GetTSpec()->GetListOfFunctions();
231 l->Remove(
l->FindObject(
"mt_tmax_fermi"));
232 fit_ok = drift_time_spec_ml[refit].FitTmax();
244 m_output = std::make_unique<RtCalibrationOutput>(
245 rt_new, std::make_shared<RtFullInfo>(
"RtCalibrationIntegration", 1,
m_nb_segments_used, 0.0, 0.0, 0.0, 0.0));
const T0MTSettingsTMax * TMaxSettings() const
get settings for the tmax-fit
std::shared_ptr< IMdtCalibrationOutput > MdtCalibOutputPtr
const double & WidthAB() const
Width of the region in which the parameters a and b are estimated.
const double & ScrambleThreshold() const
the chi2 threshold at which the scrambling method is used
unsigned int number_of_hits_used(void) const
get the number of hits used in the r-t determination
unsigned int m_nb_hits_used
bool handleSegment(MuonCalibSegment &seg)
analyse the segment "seg"
singleton-like access to IMessageSvc via open function and helper
bool m_add_tmax_difference
std::vector< ALFA_RawData_p1 > t0
bool analyse(void)
perform the integration method
const TF1 * GetT0Function() const
returns function fitted to the riding edge of the spectrum
unsigned int m_nb_segments_used
const T0MTSettingsT0 * T0Settings() const
get settings for the t0-fit
bool converged(void) const
returns true, if the integration method has been performed
const double & SlicingThreshold() const
the chi2 threshold at which the slicing method is used
Equidistant look up table for rt-relations with the time as key.
IMessageSvc * getMessageSvc(bool quiet=false)
std::shared_ptr< IRtRelation > m_rt
void setInput(const IMdtCalibrationOutput *rt_input) override
the method is empty as no initial r-t relationship is required by the algorithm
unsigned int mdtCloseHits() const
retrieve the number of nearby mdt hits.
double m_upper_extrapolation_radius
parabolic extrapolation.
bool FitTmax()
Performs tmax-fit Returns true if fit is successfull.
void SetTSpec(int id, TH1F *spec, const T0MTSettings *settings, bool copy_spec=true)
set the pointer of the drift-time spectrum to an existing spectrum.
Double_t slope_function_C(Double_t *x, Double_t *par)
MdtCalibOutputPtr getResults() const override
returns the final r-t relationship
std::shared_ptr< RtCalibrationOutput > m_output
static constexpr int TMAX_PAR_NR_A
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
static RtChebyshev getRtChebyshev(const std::vector< SamplePoint > &sample_points, const unsigned int &order)
< get an RtChebyshev resembling the r(t) function as described by the sample points in the vector "sa...
double m_lower_extrapolation_radius
sets the lower radius to perform the
static constexpr int TMAX_PAR_NR_B
static constexpr int TMAX_PAR_NR_T0
static constexpr int T0_PAR_NR_T0
parameter numbers in t0 fit
void SetTmaxDiff(const float &d)
set the difference in total drift time betwene the two multilayers (ML1 - ML2)
MdtCalibOutputPtr analyseSegments(const MuonSegVec &seg) override
determine r(t)
unsigned int mdtHitsOnTrack() const
retrieve the number of MdtCalibHitBase s assigned to this segment
const TF1 * GetTMaxFunction() const
returns function fitted to the riding edge of the spectrum
void init(bool close_hits, double r_max, double lower_extrapolation_radius, double higher_extrapolation_radius, bool add_tmax_difference)
bool FitT0()
Perform t0-fit Returns true if fit is successfull.
const bool & AddFitfun() const
If set to true the fitted functions are added to the histograms.
static constexpr int TMAX_PAR_NR_T
std::vector< std::pair< double, bool > > m_t_drift
double GetEntries(TH1D *h, int ilow, int ihi)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
static constexpr int TMAX_PAR_NR_TMAX
parameters numbers for tmax fit
const double & DistAB() const
Distance of the a/b region from the detected falling edge.
std::vector< std::shared_ptr< MuonCalibSegment > > MuonSegVec
static constexpr int TMAX_PAR_NR_BACK
const MdtHitVec & mdtHOT() const
retrieve the full set of MdtCalibHitBase s assigned to this segment
void update_parameter_on_mttmax(TH1 *h, TF1 *f, const float &b, const float &T, const T0MTSettingsTMax &tmax_settings)
bool T0Ok() const
returns true if t0-fit was successfull
bool TmaxOk() const
returns true if tmax-fir was successfull