Project
Loading...
Searching...
No Matches
CalibratorVdExB.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef O2_TRD_CALIBRATORVDEXB_H
17#define O2_TRD_CALIBRATORVDEXB_H
18
23#include "CCDB/CcdbObjectInfo.h"
26
27#include "Rtypes.h"
28#include "TProfile.h"
29#include "Fit/Fitter.h"
30#include "TFile.h"
31#include "TTree.h"
32
33#include <array>
34#include <cstdlib>
35#include <memory>
36
37namespace o2
38{
39namespace trd
40{
41
42struct FitFunctor {
43 double operator()(const double* par) const;
44 double calculateDeltaAlphaSim(double vdFit, double laFit, double impactAng) const;
45 std::array<std::unique_ptr<TProfile>, constants::MAXCHAMBER> profiles;
46 std::array<double, constants::MAXCHAMBER> vdPreCorr;
47 std::array<double, constants::MAXCHAMBER> laPreCorr;
48 int currDet;
51 double mAnodePlane;
52};
53
54class CalibratorVdExB final : public o2::calibration::TimeSlotCalibration<o2::trd::AngularResidHistos>
55{
57
58 public:
59 enum ParamIndex : int {
61 VD
62 };
63 CalibratorVdExB() = default;
64 ~CalibratorVdExB() final = default;
65
66 bool hasEnoughData(const Slot& slot) const final { return slot.getContainer()->getNEntries() >= mMinEntriesTotal; }
67 void initOutput() final;
68 void finalizeSlot(Slot& slot) final;
69 Slot& emplaceNewSlot(bool front, TFType tStart, TFType tEnd) final;
70
73 void createOutputFile();
74
77 void closeOutputFile();
78
79 const std::vector<o2::trd::CalVdriftExB>& getCcdbObjectVector() const { return mObjectVector; }
80 std::vector<o2::ccdb::CcdbObjectInfo>& getCcdbObjectInfoVector() { return mInfoVector; }
81
82 void initProcessing();
83
87
88 private:
89 bool mInitDone{false};
90 const TRDCalibParams& mParams{TRDCalibParams::Instance()};
91 size_t mMinEntriesTotal{mParams.minEntriesChamber};
92 size_t mMinEntriesChamber{mParams.minEntriesTotal};
93 bool mEnableOutput{false};
94 std::unique_ptr<TFile> mOutFile{nullptr};
95 std::unique_ptr<TTree> mOutTree{nullptr};
96 FitFunctor mFitFunctor;
97 std::vector<o2::ccdb::CcdbObjectInfo> mInfoVector;
98 std::vector<o2::trd::CalVdriftExB> mObjectVector;
99 ROOT::Fit::Fitter mFitter;
100 double mParamsStart[2];
101
102 ClassDefOverride(CalibratorVdExB, 5);
103};
104
105} // namespace trd
106} // namespace o2
107
108#endif // O2_TRD_CALIBRATORVDEXB_H
Class to store the angular residuals of TRD tracklets wrt TPC tracks for each TRD chamber.
Object with vDrift and ExB values per chamber to be written into the CCDB.
Global TRD definitions and constants.
uint64_t TFType
void retrievePrev(o2::framework::ProcessingContext &pc)
bool hasEnoughData(const Slot &slot) const final
void finalizeSlot(Slot &slot) final
std::vector< o2::ccdb::CcdbObjectInfo > & getCcdbObjectInfoVector()
const std::vector< o2::trd::CalVdriftExB > & getCcdbObjectVector() const
Slot & emplaceNewSlot(bool front, TFType tStart, TFType tEnd) final
~CalibratorVdExB() final=default
constexpr int MAXCHAMBER
the maximum number of installed chambers
Definition Constants.h:30
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
std::array< double, constants::MAXCHAMBER > laPreCorr
LorentzAngle from previous Run.
double mAnodePlane
distance of the TRD anode plane from the drift cathodes in m
int currDet
the current TRD chamber number
double operator()(const double *par) const
std::array< std::unique_ptr< TProfile >, constants::MAXCHAMBER > profiles
profile histograms for each TRD chamber
double calculateDeltaAlphaSim(double vdFit, double laFit, double impactAng) const
std::array< double, constants::MAXCHAMBER > vdPreCorr
vDrift from previous Run
float upperBoundAngleFit
upper bound for fit angle
float lowerBoundAngleFit
lower bound for fit angle
size_t minEntriesTotal
minimum total required for meaningful fits
size_t minEntriesChamber
minimum number of entries per chamber to fit single time slot