Project
Loading...
Searching...
No Matches
RecordsToAlignParams.cxx
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
13
14#include <iostream>
15#include <sstream>
16#include <string>
17
18#include "Framework/Logger.h"
21
22using namespace o2::mft;
23
25
26//__________________________________________________________________________
28 : Aligner(),
29 mWithControl(false),
30 mNEntriesAutoSave(10000),
31 mRecordReader(new o2::fwdalign::MilleRecordReader()),
32 mWithConstraintsRecReader(false),
33 mConstraintsRecReader(nullptr),
34 mMillepede(new o2::fwdalign::MillePede2())
35{
38 }
39
40 // allocate memory in vectors to store the results of the global fit
41
42 double default_value = 0;
43 mPedeOutParams = std::vector<double>(mNumberOfGlobalParam, default_value);
44 mPedeOutParamsErrors = std::vector<double>(mNumberOfGlobalParam, default_value);
45 mPedeOutParamsPulls = std::vector<double>(mNumberOfGlobalParam, default_value);
46
47 LOGF(debug, "RecordsToAlignParams instantiated");
48}
49
50//__________________________________________________________________________
52{
55 }
56 if (mMillepede) {
57 delete mMillepede;
58 }
59 if (mRecordReader) {
60 delete mRecordReader;
61 }
62 LOGF(debug, "RecordsToAlignParams destroyed");
63}
64
65//__________________________________________________________________________
67{
68 if (mIsInitDone) {
69 return;
70 }
71
73
76 }
77
81 mResCut,
83
84 LOG(info) << "-------------- RecordsToAlignParams configured with -----------------";
85 LOGF(info, "Chi2CutNStdDev = %d", mChi2CutNStdDev);
86 LOGF(info, "ResidualCutInitial = %.3f", mResCutInitial);
87 LOGF(info, "ResidualCut = %.3f", mResCut);
88 LOGF(info, "mStartFac = %.3f", mStartFac);
89 LOGF(info,
90 "Allowed variation: dx = %.3f, dy = %.3f, dz = %.3f, dRz = %.4f",
91 mAllowVar[0], mAllowVar[1], mAllowVar[3], mAllowVar[2]);
92 LOG(info) << "-----------------------------------------------------------";
93
94 // set allowed variations for all parameters
95 for (int chipId = 0; chipId < mNumberOfSensors; ++chipId) {
96 for (Int_t iPar = 0; iPar < mNDofPerSensor; ++iPar) {
97 mMillepede->SetParSigma(chipId * mNDofPerSensor + iPar, mAllowVar[iPar]);
98 }
99 }
100
101 // set iterations
102 if (mStartFac > 1) {
104 }
105
106 LOGF(info, "RecordsToAlignParams init done");
107 mIsInitDone = true;
108}
109
110//__________________________________________________________________________
112{
113 if (!mIsInitDone) {
114 LOGF(fatal, "RecordsToAlignParams::globalFit() aborted because init was not done !");
115 return;
116 }
118 LOGF(fatal, "RecordsToAlignParams::globalFit() aborted because no data record can be read !");
119 return;
120 }
121
122 // initialize the file and tree to store chi2 from Millepede LocalFit()
123
124 if (mWithControl) {
126 }
127
128 // perform the simultaneous fit of track and alignement parameters
129
131
132 if (mWithControl) {
134 }
135
136 // post-treatment:
137 // debug output + save Millepede global fit result in AlignParam vector
138
139 LOGF(info, "RecordsToAlignParams::globalFit() - done, results below");
140 LOGF(info, "sensor info, dx (cm), dy (cm), dz (cm), dRz (rad)");
141
142 AlignSensorHelper chipHelper;
143 double dRx = 0., dRy = 0., dRz = 0.; // delta rotations
144 double dx = 0., dy = 0., dz = 0.; // delta translations
145 bool global = true; // delta in global ref. system
146 bool withSymName = false;
147
148 for (int chipId = 0; chipId < mNumberOfSensors; chipId++) {
149 chipHelper.setSensorOnlyInfo(chipId);
150 std::stringstream name = chipHelper.getSensorFullName(withSymName);
151 dx = mPedeOutParams[chipId * mNDofPerSensor + 0];
152 dy = mPedeOutParams[chipId * mNDofPerSensor + 1];
153 dz = mPedeOutParams[chipId * mNDofPerSensor + 3];
154 dRz = mPedeOutParams[chipId * mNDofPerSensor + 2];
155 LOGF(info,
156 "%s, %.3e, %.3e, %.3e, %.3e",
157 name.str().c_str(), dx, dy, dz, dRz);
158 mAlignParams.emplace_back(
159 chipHelper.geoSymbolicName(),
160 chipHelper.sensorUid(),
161 dx, dy, dz,
162 dRx, dRy, dRz,
163 global);
164 }
165}
166
167//__________________________________________________________________________
174
175//__________________________________________________________________________
Helper class to access to the global coordinates of the center each MFT sensor.
ClassImp(o2::mft::RecordsToAlignParams)
Class using records to run MillePede global fit and extract align params.
std::ostringstream debug
bool InitChi2Storage(const int nEntriesAutoSave=10000)
initialize the file and tree to store chi2 from LocalFit()
int InitMille(int nGlo, const int nLoc, const int lNStdDev=-1, const double lResCut=-1., const double lResCutInit=-1., const std::vector< int > &regroup={})
init all
void SetParSigma(int i, double par)
Definition MillePede2.h:278
void SetConstraintsRecReader(o2::fwdalign::MilleRecordReader *myP)
Definition MillePede2.h:270
void EndChi2Storage()
write tree and close file where are stored chi2 from LocalFit()
int SetIterations(const double lChi2CutFac)
Number of iterations is calculated from lChi2CutFac.
int GlobalFit(std::vector< double > &par, std::vector< double > &error, std::vector< double > &pull)
performs a requested number of global iterations
void SetRecordReader(o2::fwdalign::MilleRecordReader *myP)
Definition MillePede2.h:269
void changeDataBranchName(const bool isConstraintsRec=true)
choose data records filename
Long64_t getNEntries() const
return the number of entries
void connectToChain(TChain *ch)
connect to input TChain
bool isReaderOk() const
check if connect to input TChain went well
TString geoSymbolicName()
return the geo symbolic name for this sensor
void setSensorOnlyInfo(const int chipIndex)
set the studied sensor
Int_t sensorUid() const
return the ALICE global unique id of the sensor
std::stringstream getSensorFullName(bool wSymName=true)
return a stringstream filled with the sensor info
double mResCutInitial
Cut on residual on first iteration.
Definition Aligner.h:69
static constexpr int mNumberOfSensors
Total number of sensors (detection elements) in the MFT.
Definition Aligner.h:64
static constexpr int mNDofPerSensor
translation in global x, y, z, and rotation Rz around global z-axis
Definition Aligner.h:62
double mResCut
Cut on residual for other iterations.
Definition Aligner.h:70
bool mIsInitDone
boolean to follow the initialisation status
Definition Aligner.h:73
double mStartFac
Initial value for chi2 cut, used to reject outliers i.e. bad tracks with sum(chi2) > Chi2DoFLim(fNStd...
Definition Aligner.h:67
static constexpr int mNumberOfGlobalParam
Number of alignment (= global) parameters.
Definition Aligner.h:65
std::array< double, mNDofPerSensor > mAllowVar
"Encouraged" variation for degrees of freedom {dx, dy, dRz, dz}
Definition Aligner.h:66
static constexpr int mNumberOfTrackParam
Number of track (= local) parameters (X0, Tx, Y0, Ty)
Definition Aligner.h:61
int mChi2CutNStdDev
Number of standard deviations for chi2 cut.
Definition Aligner.h:68
void connectConstraintsRecReaderToChain(TChain *ch)
conect constraints record reader to input TChain of constraints record
o2::fwdalign::MilleRecordReader * mRecordReader
utility that handles the reading of the data records used to feed MillePede solver
~RecordsToAlignParams() override
destructor
void connectRecordReaderToChain(TChain *ch)
connect data record reader to input TChain of records
void globalFit()
perform the simultaneous fit of track (local) and alignement (global) parameters
long mNEntriesAutoSave
number of entries needed to cyclically call AutoSave for the output control tree
o2::fwdalign::MilleRecordReader * mConstraintsRecReader
utility that handles the reading of the constraints records
std::vector< double > mPedeOutParamsErrors
Vector to store the outputs (errors on the alignement corrections) of the MillePede simulatenous fit.
void init() override
init MilliPede
bool mWithControl
boolean to set the use of the control tree = chi2 per track filled by MillePede LocalFit()
std::vector< double > mPedeOutParams
Vector to store the outputs (alignment corrections) of the MillePede simulatenous fit.
bool mWithConstraintsRecReader
boolean to set to true if one wants to also read constraints records
o2::fwdalign::MillePede2 * mMillepede
Millepede2 implementation copied from AliROOT.
std::vector< o2::detectors::AlignParam > mAlignParams
vector of alignment parameters computed by MillePede simultaneous fit
std::vector< double > mPedeOutParamsPulls
Vector to store the outputs (pulls on the alignement corrections) of the MillePede simulatenous fit.
GLuint const GLchar * name
Definition glcorearb.h:781
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"