50 const double kDelta[
kNDOFGeom] = {0.1, 0.1, 0.1, 0.5 * DegToRad(), 0.5 * DegToRad(), 0.5 * DegToRad()};
51 double delta[
kNDOFGeom], pos0[3], pos1[3], pos2[3], pos3[3];
54 memset(delta, 0,
kNDOFGeom *
sizeof(
double));
55 memset(deriv, 0,
kNDOFGeom * 3 *
sizeof(
double));
64 double var = kDelta[ip];
68 matMod.LocalToMaster(tra, pos0);
70 delta[ip] += 0.5 * var;
72 matMod.LocalToMaster(tra, pos1);
76 matMod.LocalToMaster(tra, pos2);
78 delta[ip] += 0.5 * var;
80 matMod.LocalToMaster(tra, pos3);
83 double* curd = deriv + ip * 3;
84 for (
int i = 3;
i--;) {
85 curd[
i] = (8. * (pos2[
i] - pos1[
i]) - (pos3[
i] - pos0[
i])) / 6. / var;
97 const double kDelta[
kNDOFGeom] = {0.1, 0.1, 0.1, 0.5 * DegToRad(), 0.5 * DegToRad(), 0.5 * DegToRad()};
98 double delta[
kNDOFGeom], pos0[3], pos1[3], pos2[3], pos3[3];
104 memset(delta, 0,
kNDOFGeom *
sizeof(
double));
105 memset(deriv, 0,
kNDOFGeom * 3 *
sizeof(
double));
114 double var = kDelta[ip];
117 matMod.LocalToMaster(tra, pos0);
119 delta[ip] += 0.5 * var;
121 matMod.LocalToMaster(tra, pos1);
125 matMod.LocalToMaster(tra, pos2);
127 delta[ip] += 0.5 * var;
129 matMod.LocalToMaster(tra, pos3);
132 double* curd = deriv + ip * 3;
133 for (
int i = 3;
i--;) {
134 curd[
i] = (8. * (pos2[
i] - pos1[
i]) - (pos3[
i] - pos0[
i])) / 6. / var;
148 const double kDelta[
kNDOFGeom] = {0.1, 0.1, 0.1, 0.5 * DegToRad(), 0.5 * DegToRad(), 0.5 * DegToRad()};
149 double delta[
kNDOFGeom], pos0[3], pos1[3], pos2[3], pos3[3];
152 memset(delta, 0,
kNDOFGeom *
sizeof(
double));
153 memset(deriv, 0,
kNDOFGeom * 3 *
sizeof(
double));
162 double var = kDelta[ip];
165 matMod.LocalToMaster(tra, pos0);
167 delta[ip] += 0.5 * var;
169 matMod.LocalToMaster(tra, pos1);
173 matMod.LocalToMaster(tra, pos2);
175 delta[ip] += 0.5 * var;
177 matMod.LocalToMaster(tra, pos3);
180 double* curd = deriv + ip * 3;
181 for (
int i = 3;
i--;) {
182 curd[
i] = (8. * (pos2[
i] - pos1[
i]) - (pos3[
i] - pos0[
i])) / 6. / var;
196 const double kDelta[
kNDOFGeom] = {0.1, 0.1, 0.1, 0.5 * DegToRad(), 0.5 * DegToRad(), 0.5 * DegToRad()};
197 double delta[
kNDOFGeom], pos0[3], pos1[3], pos2[3], pos3[3];
209 TGeoHMatrix matRel, t2gP;
212 const TGeoHMatrix& t2gpi = t2gP.Inverse();
213 matRel.MultiplyLeft(&t2gpi);
215 memset(delta, 0,
kNDOFGeom *
sizeof(
double));
216 memset(deriv, 0,
kNDOFGeom * 3 *
sizeof(
double));
225 double var = kDelta[ip];
228 matMod.LocalToMaster(tra, pos0);
230 delta[ip] += 0.5 * var;
232 matMod.LocalToMaster(tra, pos1);
236 matMod.LocalToMaster(tra, pos2);
238 delta[ip] += 0.5 * var;
240 matMod.LocalToMaster(tra, pos3);
243 double* curd = deriv + ip * 3;
244 for (
int i = 3;
i--;) {
245 curd[
i] = (8. * (pos2[
i] - pos1[
i]) - (pos3[
i] - pos0[
i])) / 6. / var;
265 LOG(error) <<
"Alignment frame " << parent->
getVarFrame() <<
" is not implemented";
293 LOG(fatal) <<
"Sensor volume cannot have children: id=" <<
getVolID() <<
" " << GetName();
300 return GetUniqueID() <
b->GetUniqueID() ? -1 : 1;
325 printf(
"Lev:%2d IntID:%7d %s VId:%6d X:%8.4f Alp:%+.4f | Err: %.4e %.4e | Used Points: %d\n",
354 if (opts.Contains(
"mat")) {
355 printf(
"L2G ideal : ");
357 printf(
"L2G misalign: ");
359 printf(
"L2G RecoTime: ");
365 printf(
"ClAlgReco: ");
404 deriv[0] = deriv[1] = deriv[2] = 0;
439 deltaG.MultiplyLeft(&deltaGJ);
Base class for detector: wrapper for set of volumes.
ClassImp(o2::align::AlignableSensor)
End-chain alignment volume in detector branch, where the actual measurement is done.
Meausered point in the sensor.
Definition of the GeometryManager class.
virtual void updatePointByTrackInfo(AlignmentPoint *pnt, const trackParam_t *t) const
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
int Compare(const TObject *a) const override
virtual void dPosTraDParCalib(const AlignmentPoint *pnt, double *deriv, int calibID, const AlignableVolume *parent=nullptr) const
AlignableSensor()=default
virtual void dPosTraDParGeomTRA(const AlignmentPoint *pnt, double *deriv) const
virtual void prepareMatrixClAlg()
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)
virtual void prepareMatrixClAlgReco()
virtual void dPosTraDParGeomLOC(const AlignmentPoint *pnt, double *deriv) const
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
int finalizeStat() override
virtual void applyAlignmentFromMPSol()
virtual void updateL2GRecoMatrices(const std::vector< o2::detectors::AlignParam > &algArr, const TGeoHMatrix *cumulDelta)
static const char * sFrameName[kNVarFrames]
const TGeoHMatrix & getMatrixT2L() const
void getDeltaT2LmodLOC(TGeoHMatrix &matMod, const double *delta) const
void delta2Matrix(TGeoHMatrix &deltaM, const double *delta) const
void getDeltaT2LmodTRA(TGeoHMatrix &matMod, const double *delta) const
Frame_t getVarFrame() const
const TGeoHMatrix & getMatrixL2G() const
const TGeoHMatrix & getMatrixL2GReco() const
bool isFreeDOF(int dof) const
void createAlignmenMatrix(TGeoHMatrix &alg, const TGeoHMatrix *envelopeDelta=nullptr) const
void getMatrixT2G(TGeoHMatrix &m) const
void setMatrixL2G(const TGeoHMatrix &m)
const TGeoHMatrix & getMatrixL2GIdeal() const
int getInternalID() const
AlignableVolume * getParent() const
const char * getSymName() const
const double * getXYZTracking() const
float getParVal(int par) const
float getParErr(int par) const
int getParLab(int par) const
GLuint const GLchar * name
GLboolean GLboolean GLboolean b
typename track::TrackParametrizationWithError< double > trackParam_t
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"