Project
Loading...
Searching...
No Matches
Controller.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
16
22#ifndef CONTROLLER_H
23#define CONTROLLER_H
24
29#include "Align/AlgTrcDbg.h"
34
38
39#include <TMatrixDSym.h>
40#include <TVectorD.h>
41#include <TObjArray.h>
42#include <string>
43#include <TArrayF.h>
44#include <TArrayI.h>
45#include <TH1F.h>
46#include "Align/utils.h"
49
50// can be fwd declared if we don't require root dict.
51//class TTree;
52//class TFile;
53
54#include <TTree.h>
55#include <TFile.h>
56#include "Align/Mille.h"
57// #include "GPUO2Interface.h"
58// #include "DataFormatsTPC/WorkflowHelper.h"
59
60namespace o2
61{
62namespace globaltracking
63{
64class RecoContainer;
65}
66namespace trd
67{
68class TrackletTransformer;
69}
70namespace utils
71{
72class TreeStreamRedirector;
73}
74
75namespace gpu
76{
77class GPUParam;
78}
79
80namespace align
81{
82
83//class Mille;
84
85class EventVertex;
86class AlignableVolume;
87class AlignmentPoint;
88class ResidualsControllerFast;
89
90class Controller final : public TObject
91{
92 public:
93 struct ProcStat {
94 enum {
98 };
99 enum {
105 };
106 std::array<std::array<size_t, kMaxStat>, kNStatCl> data{};
107 void print() const;
108 };
109
112
113 enum { kNLrSkip = 4 };
114 enum { kITS,
121 enum { kCosmLow,
124 enum { kInitGeomDone = BIT(14),
125 kInitDOFsDone = BIT(15),
126 kMPAlignDone = BIT(16) };
127
128 Controller() = default;
129 Controller(DetID::mask_t detmask, GTrackID::mask_t trcmask, bool cosmic = false, bool useMC = false, int instID = 0);
130 ~Controller() final;
131
132 void expandGlobalsBy(int n);
133 void process();
134 void processCosmic();
135
136 bool getUseRecoOCDB() const { return mUseRecoOCDB; }
137 void setUseRecoOCDB(bool v = true) { mUseRecoOCDB = v; }
138
139 void initDetectors();
140 void initDOFs();
141 void terminate();
142 //
143 void setInitGeomDone() { SetBit(kInitGeomDone); }
144 bool getInitGeomDone() const { return TestBit(kInitGeomDone); }
145 //
146 void setInitDOFsDone() { SetBit(kInitDOFsDone); }
147 bool getInitDOFsDone() const { return TestBit(kInitDOFsDone); }
148 //
149 void setMPAlignDone() { SetBit(kMPAlignDone); }
150 bool getMPAlignDone() const { return TestBit(kMPAlignDone); }
151
152 void assignDOFs();
153 //
155 //
156 int getNConstraints() const { return mConstraints.size(); }
157 const std::vector<GeometricalConstraint>& getConstraints() const { return mConstraints; }
158 std::vector<GeometricalConstraint>& getConstraints() { return mConstraints; }
159 const GeometricalConstraint& getConstraint(int i) const { return mConstraints[i]; }
160
161 void addAutoConstraints();
162 //
164 bool getFieldOn() const { return mFieldOn; }
165 void setFieldOn(bool v = true) { mFieldOn = v; }
166 int getTracksType() const { return mTracksType; }
167 void setTracksType(int t = utils::Coll) { mTracksType = t; }
168 bool isCosmic() const { return mTracksType == utils::Cosm; }
169 bool isCollision() const { return mTracksType == utils::Coll; }
170 void setCosmic(bool v = true) { mTracksType = v ? utils::Cosm : utils::Coll; }
171 auto getStat(int cls, int tp) const { return mStat.data[cls][tp]; }
172 auto& getStat() const { return mStat; }
173 //
174 bool checkDetectorPattern(DetID::mask_t patt) const;
175 bool checkDetectorPoints(const int* npsel) const;
176 void setObligatoryDetector(DetID id, int tp, bool v = true);
177 //
178 // void SetVertex(const AliESDVertex* v) { fVertex = v; } FIXME(milettri): needs AliESDVertex
179 // const AliESDVertex* GetVertex() const { return fVertex; } FIXME(milettri): needs AliESDVertex
180 //
181 //----------------------------------------
182 bool readParameters(const std::string& parfile = "millepede.res", bool useErrors = true);
183 auto& getGloParVal() { return mGloParVal; }
184 auto& getGloParErr() { return mGloParErr; }
185 auto& getGloParLab() { return mGloParLab; }
186 int getGloParLab(int i) const { return mGloParLab[i]; }
187 int parID2Label(int i) const { return getGloParLab(i); }
188 int label2ParID(int lab) const;
189 AlignableVolume* getVolOfDOFID(int id) const;
191 AlignableDetector* getDetOfDOFID(int id) const;
192 //
193 AlignmentPoint* getRefPoint() const { return mRefPoint.get(); }
194 //
195 const ResidualsController& getContResid() const { return mCResid; }
196 const Millepede2Record& getMPRecord() const { return mMPRecord; }
197 TTree* getMPRecTree() const { return mMPRecTree.get(); }
198 AlignmentTrack* getAlgTrack() const { return mAlgTrack.get(); }
199
202
204 int getNDetectors() const { return mNDet; }
205 AlignableDetector* getDetector(DetID id) const { return mDetectors[id].get(); }
206
207 EventVertex* getVertexSensor() const { return mVtxSens.get(); }
208 //
209 void resetForNextTrack();
210 int getNDOFs() const { return mGloParVal.size(); }
211 //----------------------------------------
212 float getControlFrac() const { return mControlFrac; }
213 void setControlFrac(float v = 1.) { mControlFrac = v; }
214 void writeCalibrationResults() const;
216 //
219 bool fillMilleData();
220
221 void closeMPRecOutput();
222 void closeMilleOutput();
223 void closeResidOutput();
224 void initMPRecOutput();
226 void initResidOutput();
229 void printStatistics() const;
230 //
231 void genPedeSteerFile(const Option_t* opt = "") const;
232 void writeLabeledPedeResults() const;
233 void writePedeConstraints() const;
234 void checkConstraints(const char* params = nullptr);
235 //
236 //----------------------------------------
237 //
238 int getRefRunNumber() const { return mRefRunNumber; }
239 void setRefRunNumber(int r = -1) { mRefRunNumber = r; }
240 //
241 int getRefOCDBLoaded() const { return mRefOCDBLoaded; }
242 //
243 void Print(const Option_t* opt = "") const final;
244 void printLabels() const;
245 Char_t* getDOFLabelTxt(int idf) const;
246 //
247 static Char_t* getDetNameByDetID(int id) { return (Char_t*)sDetectorName[id]; } //RSREM
248 static void MPRec2Mille(const std::string& mprecfile, const std::string& millefile = "mpData.mille", bool bindata = true);
249 static void MPRec2Mille(TTree* mprTree, const std::string& millefile = "mpData.mille", bool bindata = true);
250 //
251 bool testLocalSolution();
252 //
253 // fast check of solution using derivatives
254 void checkSol(TTree* mpRecTree, bool store = true, bool verbose = false, bool loc = true, const char* outName = "resFast");
255 bool checkSol(Millepede2Record* rec, ResidualsControllerFast* rLG = nullptr, ResidualsControllerFast* rL = nullptr, bool verbose = true, bool loc = true);
256 //
257 // RSTMP new code
258 void init();
259
262
265
269
273
278
279 int getInstanceID() const { return mInstanceID; }
280 void setInstanceID(int i) { mInstanceID = i; }
281
286
287 void setTPCParam(const o2::gpu::GPUParam* par) { mTPCParam = par; }
288 const o2::gpu::GPUParam* getTPCParam() const { return mTPCParam; }
289
290 protected:
291 //
292 // --------- dummies -----------
295 //
296 protected:
297 //
300 std::vector<int> mTrackSources;
302 int mInstanceID = 0; // instance in case of pipelining
303 int mRunNumber = 0;
304 int mNDet = 0; // number of deectors participating in the alignment
305 int mNDOFs = 0; // number of degrees of freedom
306 bool mUseMC = false;
307 bool mFieldOn = false; // field on flag
308 int mTracksType = utils::Coll; // collision/cosmic event type
311 std::unique_ptr<AlignmentTrack> mAlgTrack; // current alignment track
312 AlgTrcDbg mAlgTrackDbg; // current alignment track debug version
313 const o2::globaltracking::RecoContainer* mRecoData = nullptr; // externally set RecoContainer
314 const o2::trd::TrackletTransformer* mTRDTransformer = nullptr; // TRD tracket transformer
315 bool mTRDTrigRecFilterActive = false; // select TRD triggers processed with ITS
316 bool mAllowAfterburnerTracks = false; // allow using ITS-TPC afterburner tracks
317
318 const o2::gpu::GPUParam* mTPCParam = nullptr;
319
320 std::array<std::unique_ptr<AlignableDetector>, DetID::nDetectors> mDetectors{}; // detectors participating in the alignment
321
322 std::unique_ptr<EventVertex> mVtxSens; // fake sensor for the vertex
323 std::vector<GeometricalConstraint> mConstraints{}; // array of constraints
324 //
325 // Track selection
326 std::array<DetID::mask_t, utils::NTrackTypes> mObligatoryDetPattern{}; // pattern of obligatory detectors
327 //
328 std::vector<float> mGloParVal; // parameters for DOFs
329 std::vector<float> mGloParErr; // errors for DOFs
330 std::vector<int> mGloParLab; // labels for DOFs
331 std::unordered_map<int, int> mLbl2ID; // Labels mapping to parameter ID
332 //
333 std::unique_ptr<AlignmentPoint> mRefPoint;
334 //
337
338 // statistics
339 ProcStat mStat{}; // processing statistics
340 int mNTF = 0;
341 //
342 // output related
343 float mControlFrac = 1.0; // fraction of tracks to process control residuals
344 std::unique_ptr<Mille> mMille;
349
350 std::unique_ptr<TTree> mMPRecTree;
351 std::unique_ptr<TTree> mResidTree;
352 std::unique_ptr<TFile> mMPRecFile;
353 std::unique_ptr<TFile> mResidFile;
354 std::string mMilleFileName{};
355 //
356 // input related
357 int mRefRunNumber = 0; // optional run number used for reference
358 int mRefOCDBLoaded = 0; // flag/counter for ref.OCDB loading
359 bool mUseRecoOCDB = true; // flag to preload reco-time calib objects
360
363
364 //
365 static const int sSkipLayers[kNLrSkip]; // detector layers for which we don't need module matrices
366 static const Char_t* sDetectorName[kNDetectors]; // names of detectors //RSREM
367 static const Char_t* sMPDataExt; // extension for MP2 binary data
368 static const Char_t* sMPDataTxtExt; // extension for MP2 txt data
369 //
370 ClassDefOverride(Controller, 1)
371};
372
373} // namespace align
374} // namespace o2
375#endif
Base class for detector: wrapper for set of volumes.
Track model for the alignment.
Helper class to access correction maps.
Collection of auxillary methods.
Definition of the GeometryManager class.
int32_t i
Descriptor of geometrical constraint.
Class to write C binary file.
Millepede record in root format (can be converted to proper pede binary format.
Container for control residuals.
Result of top-bottom cosmic tracks leg matching.
calibration data from laser track calibration
void setDebugStream(o2::utils::TreeStreamRedirector *d)
Definition Controller.h:284
static const int sSkipLayers[kNLrSkip]
Definition Controller.h:365
const ResidualsController & getContResid() const
Definition Controller.h:195
const GeometricalConstraint & getConstraint(int i) const
Definition Controller.h:159
o2::tpc::VDriftCorrFact mTPCDrift
Definition Controller.h:361
o2::gpu::CorrectionMapsHelper * mTPCCorrMapsHelper
Definition Controller.h:362
const o2::globaltracking::RecoContainer * getRecoContainer() const
Definition Controller.h:200
void writeCalibrationResults() const
bool getUseRecoOCDB() const
Definition Controller.h:136
std::unique_ptr< TTree > mMPRecTree
control residuals
Definition Controller.h:350
bool readParameters(const std::string &parfile="millepede.res", bool useErrors=true)
ResidualsController mCResid
MP record.
Definition Controller.h:347
AlignableDetector * getDetector(DetID id) const
Definition Controller.h:205
bool fillControlData(o2::dataformats::GlobalTrackID tid)
void setObligatoryDetector(DetID id, int tp, bool v=true)
std::vector< GeometricalConstraint > mConstraints
Definition Controller.h:323
AlignableDetector * getDetOfDOFID(int id) const
void setControlFrac(float v=1.)
Definition Controller.h:213
void setTimingInfo(const o2::framework::TimingInfo &ti)
std::string mMilleFileName
file to store control residuals tree
Definition Controller.h:354
int getRefOCDBLoaded() const
Definition Controller.h:241
bool getTRDTrigRecFilterActive() const
Definition Controller.h:271
void setUseRecoOCDB(bool v=true)
Definition Controller.h:137
void setInstanceID(int i)
Definition Controller.h:280
int getDebugOutputLevel() const
Definition Controller.h:282
AlignmentTrack * getAlgTrack() const
Definition Controller.h:198
const o2::gpu::GPUParam * mTPCParam
Definition Controller.h:318
bool checkDetectorPattern(DetID::mask_t patt) const
Char_t * getDOFLabelTxt(int idf) const
const Millepede2Record & getMPRecord() const
Definition Controller.h:196
void expandGlobalsBy(int n)
std::unique_ptr< Mille > mMille
Definition Controller.h:344
int getTracksType() const
Definition Controller.h:166
void checkSol(TTree *mpRecTree, bool store=true, bool verbose=false, bool loc=true, const char *outName="resFast")
void addDetector(AlignableDetector *det)
bool storeProcessedTrack(o2::dataformats::GlobalTrackID tid={})
const std::vector< GeometricalConstraint > & getConstraints() const
Definition Controller.h:157
static const Char_t * sDetectorName[kNDetectors]
Definition Controller.h:366
bool getFieldOn() const
Definition Controller.h:164
std::array< DetID::mask_t, utils::NTrackTypes > mObligatoryDetPattern
Definition Controller.h:326
TTree * getMPRecTree() const
Definition Controller.h:197
float getControlFrac() const
Definition Controller.h:212
int getGloParLab(int i) const
Definition Controller.h:186
void checkConstraints(const char *params=nullptr)
AlignmentPoint * getRefPoint() const
Definition Controller.h:193
int parID2Label(int i) const
Definition Controller.h:187
int getInstanceID() const
Definition Controller.h:279
o2::utils::TreeStreamRedirector * mDBGOut
Definition Controller.h:336
void setRecoContainer(const o2::globaltracking::RecoContainer *cont)
Definition Controller.h:201
std::vector< float > mGloParErr
Definition Controller.h:329
void setDebugOutputLevel(int i)
Definition Controller.h:283
void setTrackSourceMask(GTrackID::mask_t m)
Definition Controller.h:263
bool getInitDOFsDone() const
Definition Controller.h:147
void writeLabeledPedeResults() const
void setFieldOn(bool v=true)
Definition Controller.h:165
o2::utils::TreeStreamRedirector * getDebugStream()
Definition Controller.h:285
const o2::gpu::GPUParam * getTPCParam() const
Definition Controller.h:288
std::unique_ptr< AlignmentPoint > mRefPoint
Definition Controller.h:333
std::vector< int > mTrackSources
Definition Controller.h:300
void setTRDTransformer(const o2::trd::TrackletTransformer *trans)
Definition Controller.h:266
bool isCollision() const
Definition Controller.h:169
int label2ParID(int lab) const
bool getMPAlignDone() const
Definition Controller.h:150
void genPedeSteerFile(const Option_t *opt="") const
void setAllowAfterburnerTracks(bool v)
Definition Controller.h:268
int getNDetectors() const
Definition Controller.h:204
Millepede2Record * mMPRecordPtr
MP record.
Definition Controller.h:346
bool getAllowAfterburnerTracks() const
Definition Controller.h:272
static Char_t * getDetNameByDetID(int id)
Definition Controller.h:247
bool getInitGeomDone() const
Definition Controller.h:144
GTrackID::mask_t mMPsrc
Definition Controller.h:299
GTrackID::mask_t getTrackSourceMask() const
Definition Controller.h:264
void writePedeConstraints() const
const o2::globaltracking::RecoContainer * mRecoData
Definition Controller.h:313
Controller(const Controller &)
std::unique_ptr< AlignmentTrack > mAlgTrack
Definition Controller.h:311
auto getStat(int cls, int tp) const
Definition Controller.h:171
static const Char_t * sMPDataTxtExt
Definition Controller.h:368
const o2::trd::TrackletTransformer * getTRDTransformer() const
Definition Controller.h:270
bool isCosmic() const
Definition Controller.h:168
bool fillMPRecData(o2::dataformats::GlobalTrackID tid)
std::vector< float > mGloParVal
Definition Controller.h:328
ResidualsController * mCResidPtr
control residuals
Definition Controller.h:348
void setTRDTrigRecFilterActive(bool v)
Definition Controller.h:267
static const Char_t * sMPDataExt
Definition Controller.h:367
const o2::trd::TrackletTransformer * mTRDTransformer
Definition Controller.h:314
int mDebugOutputLevel
reference point for track definition
Definition Controller.h:335
void Print(const Option_t *opt="") const final
Controller & operator=(const Controller &)
std::unique_ptr< EventVertex > mVtxSens
Definition Controller.h:322
void setDetectorsMask(DetID::mask_t m)
Definition Controller.h:260
void setCosmic(bool v=true)
Definition Controller.h:170
int getNConstraints() const
Definition Controller.h:156
void setTPCParam(const o2::gpu::GPUParam *par)
Definition Controller.h:287
DetID::mask_t getDetectorsMask() const
Definition Controller.h:261
std::unique_ptr< TFile > mMPRecFile
tree to store control residuals
Definition Controller.h:352
int getRefRunNumber() const
Definition Controller.h:238
AlignableVolume * getVolOfLabel(int label) const
std::unique_ptr< TFile > mResidFile
file to store MP record tree
Definition Controller.h:353
std::array< std::unique_ptr< AlignableDetector >, DetID::nDetectors > mDetectors
Definition Controller.h:320
void setRefRunNumber(int r=-1)
Definition Controller.h:239
const o2::tpc::VDriftCorrFact & getTPCVDrift() const
Definition Controller.h:277
DetID::mask_t mDetMask
Definition Controller.h:298
std::vector< GeometricalConstraint > & getConstraints()
Definition Controller.h:158
void setTracksType(int t=utils::Coll)
Definition Controller.h:167
void printStatistics() const
bool addVertexConstraint(const o2::dataformats::PrimaryVertex &vtx)
static void MPRec2Mille(const std::string &mprecfile, const std::string &millefile="mpData.mille", bool bindata=true)
auto & getStat() const
Definition Controller.h:172
std::unique_ptr< TTree > mResidTree
tree to store MP record
Definition Controller.h:351
std::unordered_map< int, int > mLbl2ID
Definition Controller.h:331
AlignableVolume * getVolOfDOFID(int id) const
Millepede2Record mMPRecord
Mille interface.
Definition Controller.h:345
o2::gpu::CorrectionMapsHelper * getTPCCorrMaps()
Definition Controller.h:276
o2::framework::TimingInfo mTimingInfo
Definition Controller.h:301
void setTPCCorrMaps(o2::gpu::CorrectionMapsHelper *maph)
void setTPCVDrift(const o2::tpc::VDriftCorrFact &v)
EventVertex * getVertexSensor() const
Definition Controller.h:207
bool checkDetectorPoints(const int *npsel) const
std::vector< int > mGloParLab
Definition Controller.h:330
Static class with identifiers, bitmasks and names for ALICE detectors.
Definition DetID.h:58
static constexpr int nDetectors
number of defined detectors
Definition DetID.h:96
GLdouble n
Definition glcorearb.h:1982
const GLfloat * m
Definition glcorearb.h:4066
const GLdouble * v
Definition glcorearb.h:832
GLenum const GLfloat * params
Definition glcorearb.h:272
GLboolean * data
Definition glcorearb.h:298
GLuint GLsizei const GLchar * label
Definition glcorearb.h:2519
GLboolean r
Definition glcorearb.h:1233
GLuint id
Definition glcorearb.h:650
void align(gsl::span< ElinkEncoder< BareFormat, CHARGESUM > > elinks)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Common utility functions.
GPUReconstruction * rec
std::array< std::array< size_t, kMaxStat >, kNStatCl > data
Definition Controller.h:106