Project
Loading...
Searching...
No Matches
AlignableSensor.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
17#ifndef ALIGNABLESENSOR_H
18#define ALIGNABLESENSOR_H
19
20#include <TMath.h>
21#include <TObjArray.h>
24#include "Align/utils.h"
25#include <vector>
26
27namespace o2
28{
29namespace align
30{
31
32class AlignableDetector;
33class AlignmentPoint;
34
36{
37 public:
38 //
40
41 AlignableSensor() = default;
42 AlignableSensor(const char* name, int vid, int iid, Controller* ctr);
43 ~AlignableSensor() override = default;
44 //
45 void addChild(AlignableVolume*) override;
46 //
47 void setDetector(AlignableDetector* det) { mDet = det; }
48 AlignableDetector* getDetector() const { return mDet; }
49 //
50 int getSID() const { return mSID; }
51 void setSID(int s) { mSID = s; }
52 //
54 //
55 // derivatives calculation
56 virtual void dPosTraDParCalib(const AlignmentPoint* pnt, double* deriv, int calibID, const AlignableVolume* parent = nullptr) const;
57 virtual void dPosTraDParGeom(const AlignmentPoint* pnt, double* deriv, const AlignableVolume* parent = nullptr) const;
58 //
59 virtual void dPosTraDParGeomLOC(const AlignmentPoint* pnt, double* deriv) const;
60 virtual void dPosTraDParGeomTRA(const AlignmentPoint* pnt, double* deriv) const;
61 virtual void dPosTraDParGeomLOC(const AlignmentPoint* pnt, double* deriv, const AlignableVolume* parent) const;
62 virtual void dPosTraDParGeomTRA(const AlignmentPoint* pnt, double* deriv, const AlignableVolume* parent) const;
63 //
64 void getModifiedMatrixT2LmodLOC(TGeoHMatrix& matMod, const double* delta) const;
65 void getModifiedMatrixT2LmodTRA(TGeoHMatrix& matMod, const double* delta) const;
66 //
67 virtual void applyAlignmentFromMPSol();
68 //
69 void setAddError(double y, double z)
70 {
71 mAddError[0] = y;
72 mAddError[1] = z;
73 }
74 const double* getAddError() const { return mAddError; }
75 //
76 bool isSensor() const override { return true; }
77 void Print(const Option_t* opt = "") const override;
78 //
79 virtual void updatePointByTrackInfo(AlignmentPoint* pnt, const trackParam_t* t) const;
80 void updateL2GRecoMatrices(const std::vector<o2::detectors::AlignParam>& algArr, const TGeoHMatrix* cumulDelta) override;
81 //
82 int finalizeStat() override;
83 //
84 virtual void prepareMatrixClAlg();
85 virtual void prepareMatrixClAlgReco();
86 const TGeoHMatrix& getMatrixClAlg() const { return mMatClAlg; }
87 const TGeoHMatrix& getMatrixClAlgReco() const { return mMatClAlgReco; }
88 void setMatrixClAlg(const TGeoHMatrix& m) { mMatClAlg = m; }
89 void setMatrixClAlgReco(const TGeoHMatrix& m) { mMatClAlgReco = m; }
90 //
91 protected:
92 //
93 bool IsSortable() const override { return true; }
94 int Compare(const TObject* a) const override;
95 //
96 // --------- dummies -----------
99 //
100 protected:
101 //
102 int mSID = -1; // sensor id in detector
103 double mAddError[2] = {0, 0}; // additional error increment for measurement
104 AlignableDetector* mDet = nullptr; // pointer on detector
105 TGeoHMatrix mMatClAlg; // reference cluster alignment matrix in tracking frame, i.e. the matrix we want to correct
106 TGeoHMatrix mMatClAlgReco; // reco-time cluster alignment matrix in tracking frame
107
108 //
110};
111} // namespace align
112} // namespace o2
113
114#endif
Base class of alignable volume.
Collection of auxillary methods.
void addChild(AlignableVolume *) override
const TGeoHMatrix & getMatrixClAlg() const
virtual void updatePointByTrackInfo(AlignmentPoint *pnt, const trackParam_t *t) const
void setMatrixClAlgReco(const TGeoHMatrix &m)
void getModifiedMatrixT2LmodLOC(TGeoHMatrix &matMod, const double *delta) const
const double * getAddError() const
int Compare(const TObject *a) const override
virtual void dPosTraDParCalib(const AlignmentPoint *pnt, double *deriv, int calibID, const AlignableVolume *parent=nullptr) const
virtual void dPosTraDParGeomTRA(const AlignmentPoint *pnt, double *deriv) const
bool IsSortable() const override
AlignableDetector * getDetector() const
~AlignableSensor() override=default
void updateL2GRecoMatrices(const std::vector< o2::detectors::AlignParam > &algArr, const TGeoHMatrix *cumulDelta) override
void Print(const Option_t *opt="") const override
void setMatrixClAlg(const TGeoHMatrix &m)
bool isSensor() const override
virtual void dPosTraDParGeomLOC(const AlignmentPoint *pnt, double *deriv) const
AlignableSensor(const AlignableSensor &)
void setAddError(double y, double z)
void setDetector(AlignableDetector *det)
virtual void dPosTraDParGeom(const AlignmentPoint *pnt, double *deriv, const AlignableVolume *parent=nullptr) const
void getModifiedMatrixT2LmodTRA(TGeoHMatrix &matMod, const double *delta) const
const TGeoHMatrix & getMatrixClAlgReco() const
AlignableSensor & operator=(const AlignableSensor &)
ClassDefOverride(AlignableVolume, 2)
const GLfloat * m
Definition glcorearb.h:4066
GLuint const GLchar * name
Definition glcorearb.h:781
GLint y
Definition glcorearb.h:270
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
typename track::TrackParametrizationWithError< double > trackParam_t
Definition utils.h:29
void align(gsl::span< ElinkEncoder< BareFormat, CHARGESUM > > elinks)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...