Project
Loading...
Searching...
No Matches
CalibLaserTracks.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
21
22#ifndef TPC_CalibLaserTracks_H_
23#define TPC_CalibLaserTracks_H_
24
25#include <gsl/span>
26#include <string_view>
27
33
34namespace o2::tpc
35{
36
39
40struct TimePair {
41 float x1{0.f};
42 float x2{0.f};
43 uint64_t time{0};
44};
45
47{
48 public:
49 static constexpr size_t MinTrackPerSidePerTF = 50;
50
52 {
53 mLaserTracks.loadTracksFromFile();
54 updateParameters();
55 }
56
57 CalibLaserTracks(const CalibLaserTracks& other) : mTriggerPos{other.mTriggerPos},
58 mBz{other.mBz},
59 mDriftV{other.mDriftV},
60 mZbinWidth{other.mZbinWidth},
61 mTFstart{other.mTFstart},
62 mTFend{other.mTFend},
63 mCalibDataTF{other.mCalibDataTF},
64 mCalibData{other.mCalibData},
65 mZmatchPairsTFA{other.mZmatchPairsTFA},
66 mZmatchPairsTFC{other.mZmatchPairsTFC},
67 mZmatchPairsA{other.mZmatchPairsA},
68 mZmatchPairsC{other.mZmatchPairsC},
69 mWriteDebugTree{other.mWriteDebugTree},
70 mFinalized{other.mFinalized}
71 {
72 }
73
74 ~CalibLaserTracks() = default;
75
77 void fill(const gsl::span<const TrackTPC> tracks);
78
80 void fill(std::vector<TrackTPC> const& tracks);
81
83 void processTrack(const TrackTPC& track);
84
87 int findLaserTrackID(TrackPar track, int side = -1);
88
90 static float getPhiNearbyLaserRod(const TrackPar& param, int side);
91
93 static bool hasNearbyLaserRod(const TrackPar& param, int side);
94
96 void setTriggerPos(int triggerPos) { mTriggerPos = triggerPos; }
97
99 void merge(const CalibLaserTracks* other);
100
102 void endTF();
103
105 void finalize();
106
108 void print() const;
109
112 bool hasEnoughData(size_t numTFs = 1) const { return mCalibData.processedTFs >= numTFs && mZmatchPairsA.size() > MinTrackPerSidePerTF * numTFs && mZmatchPairsC.size() > MinTrackPerSidePerTF * numTFs; }
113
115 size_t getMatchedPairs() const { return getMatchedPairsA() + getMatchedPairsC(); }
116
118 size_t getMatchedPairsA() const { return mZmatchPairsA.size(); }
119
121 size_t getMatchedPairsC() const { return mZmatchPairsC.size(); }
122
124 size_t getMatchedPairsTFA() const { return mZmatchPairsTFA.size(); }
125
127 size_t getMatchedPairsTFC() const { return mZmatchPairsTFC.size(); }
128
131 void setTFtimes(uint64_t tfStart, uint64_t tfEnd = 0)
132 {
133 mTFstart = tfStart;
134 mTFend = tfEnd;
135 }
136
137 uint64_t getTFstart() const { return mTFstart; }
138 uint64_t getTFend() const { return mTFend; }
139
140 void setWriteDebugTree(bool write) { mWriteDebugTree = write; }
141 bool getWriteDebugTree() const { return mWriteDebugTree; }
142
144 TimePair fit(const std::vector<TimePair>& trackMatches, std::string_view info) const;
145
147 void sort(std::vector<TimePair>& trackMatches);
148
150 const LtrCalibData& getCalibDataTF() { return mCalibDataTF; }
151
153 const LtrCalibData& getCalibData() { return mCalibData; }
154
156 void setDebugOutputName(std::string_view name) { mDebugOutputName = name; }
157
158 void setVDriftRef(float v) { mDriftV = v; }
159
160 private:
161 int mTriggerPos{0};
162 float mBz{0.5};
163 float mDriftV{0};
164 float mTOffsetMUS{0};
165 float mZbinWidth{0};
166 uint64_t mTFstart{0};
167 uint64_t mTFend{0};
168 LtrCalibData mCalibDataTF{};
169 LtrCalibData mCalibData{};
170 std::vector<TimePair> mZmatchPairsTFA;
171 std::vector<TimePair> mZmatchPairsTFC;
172 std::vector<TimePair> mZmatchPairsA;
173 std::vector<TimePair> mZmatchPairsC;
174 bool mWriteDebugTree{false};
175 bool mFinalized{false};
176 std::string mDebugOutputName{"CalibLaserTracks_debug.root"};
177
178 LaserTrackContainer mLaserTracks;
179 std::unique_ptr<o2::utils::TreeStreamRedirector> mDebugStream;
180
182 void updateParameters();
183
185 void fillCalibData(LtrCalibData& calibData, const std::vector<TimePair>& pairsA, const std::vector<TimePair>& pairsC);
186
187 ClassDefNV(CalibLaserTracks, 1);
188};
189
190} // namespace o2::tpc
191#endif
calibration data from laser track calibration
useful math constants
uint32_t side
Definition RawData.h:0
void finalize()
Finalize full processing.
const LtrCalibData & getCalibDataTF()
drift velocity fit information for presently processed time frame
static float getPhiNearbyLaserRod(const TrackPar &param, int side)
calculate phi of nearest laser rod
void endTF()
End processing of this TF.
size_t getMatchedPairs() const
number of associated laser tracks on both sides for all processed TFs
size_t getMatchedPairsC() const
number of associated laser tracks for all processed TFs on the C-Side
bool hasEnoughData(size_t numTFs=1) const
static constexpr size_t MinTrackPerSidePerTF
void fill(const gsl::span< const TrackTPC > tracks)
process all tracks of one TF
CalibLaserTracks(const CalibLaserTracks &other)
static bool hasNearbyLaserRod(const TrackPar &param, int side)
check if param is closer to a laser rod than 1/4 of a sector width
void setTriggerPos(int triggerPos)
trigger position for track z position correction
void processTrack(const TrackTPC &track)
process single track
void setWriteDebugTree(bool write)
size_t getMatchedPairsTFC() const
number of associated laser tracks presently processed TFs on the C-Side
void setDebugOutputName(std::string_view name)
name of the debug output tree
void print() const
print information
void merge(const CalibLaserTracks *other)
merge data with other calibration object
size_t getMatchedPairsA() const
number of associated laser tracks for all processed TFs on the A-Side
void setTFtimes(uint64_t tfStart, uint64_t tfEnd=0)
const LtrCalibData & getCalibData()
drift velocity fit information for full data set
void sort(std::vector< TimePair > &trackMatches)
sort TimePoint vectors
int findLaserTrackID(TrackPar track, int side=-1)
size_t getMatchedPairsTFA() const
number of associated laser tracks presently processed TFs on the A-Side
void loadTracksFromFile()
load laser tracks from file
const GLdouble * v
Definition glcorearb.h:832
GLuint GLfloat GLfloat GLfloat x1
Definition glcorearb.h:5034
GLuint const GLchar * name
Definition glcorearb.h:781
GLenum GLfloat param
Definition glcorearb.h:271
Global TPC definitions and constants.
Definition SimTraits.h:167
TrackParCovF TrackParCov
Definition Track.h:33
size_t processedTFs
number of processed TFs with laser track candidates
VectorOfTObjectPtrs other