10 #include <ecl/calibration/eclAutocovarianceCalibrationC3Algorithm.h>
13 #include <ecl/dataobjects/ECLElementNumbers.h>
14 #include <ecl/dbobjects/ECLCrystalCalib.h>
16 #include <framework/database/DBImportObjPtr.h>
17 #include <ecl/dbobjects/ECLAutoCovariance.h>
23 #include"TMatrixDSym.h"
24 #include"TDecompChol.h"
34 "Computes the covariance matrix for each crystal"
46 std::vector<double> cryIDs;
47 std::vector<double> invertStatusVector;
48 std::vector<double> noiseMatrix00Vector;
49 std::vector<double> totalCountsVector;
53 auto CovarianceMatrixInfoVsCrysID = getObjectPtr<TH2F>(
"CovarianceMatrixInfoVsCrysID");
59 float totalCounts = CovarianceMatrixInfoVsCrysID->GetBinContent(CovarianceMatrixInfoVsCrysID->GetBin(ID + 1,
63 B2INFO(
"eclAutocovarianceCalibrationC3Algorithm: warning total entries for cell ID " << ID + 1 <<
" is only: " << totalCounts <<
69 TMatrixDSym NoiseMatrix;
73 int index = abs(i - j);
74 NoiseMatrix(i, j) = float(CovarianceMatrixInfoVsCrysID->GetBinContent(CovarianceMatrixInfoVsCrysID->GetBin(ID + 1,
82 TDecompChol dc(NoiseMatrix);
83 bool InvertStatus = dc.Invert(NoiseMatrix);
84 if (InvertStatus ==
false && ID > 0) {
85 B2INFO(
"eclAutocovarianceCalibrationC3Algorithm iD InvertStatus [0][0] totalCounts: " << ID <<
" " << InvertStatus <<
" " <<
86 NoiseMatrix(0, 0) <<
" " << totalCounts);
87 B2INFO(
"eclAutocovarianceCalibrationC3Algorithm Setting ID " << ID <<
" Autocovariance to Autocovariance from ID " << ID - 1);
88 B2INFO(
"eclAutocovarianceCalibrationC3Algorithm B: " << tempAutoCov[0]);
90 B2INFO(
"eclAutocovarianceCalibrationC3Algorithm A: " << tempAutoCov[0]);
95 cryIDs.push_back(ID + 1);
96 invertStatusVector.push_back(InvertStatus);
97 noiseMatrix00Vector.push_back(NoiseMatrix(0, 0));
98 totalCountsVector.push_back(totalCounts);
106 auto ginvertStatusVector =
new TGraph(cryIDs.size(), cryIDs.data(), invertStatusVector.data());
107 ginvertStatusVector->SetName(
"ginvertStatusVector");
108 ginvertStatusVector->SetMarkerStyle(20);
109 auto gnoiseMatrix00Vector =
new TGraph(cryIDs.size(), cryIDs.data(), noiseMatrix00Vector.data());
110 gnoiseMatrix00Vector->SetName(
"gnoiseMatrix00Vector");
111 gnoiseMatrix00Vector->SetMarkerStyle(20);
112 auto gtotalCountsVector =
new TGraph(cryIDs.size(), cryIDs.data(), totalCountsVector.data());
113 gtotalCountsVector->SetName(
"gtotalCountsVector");
114 gtotalCountsVector->SetMarkerStyle(20);
118 TDirectory::TContext context;
119 TFile* histfile =
new TFile(fName,
"recreate");
121 ginvertStatusVector->Write();
122 gnoiseMatrix00Vector->Write();
123 gtotalCountsVector->Write();
Base class for calibration algorithms.
void saveCalibration(TClonesArray *data, const std::string &name)
Store DBArray payload with given name with default IOV.
void setDescription(const std::string &description)
Set algorithm description (in constructor)
EResult
The result of calibration.
@ c_OK
Finished successfuly =0 in Python.
@ c_NotEnoughData
Needs more data =2 in Python.
Covariance matrices for offline ECL waveform fit.
void getAutoCovariance(const int cellID, double acov[31]) const
Get auto covariance for a channel.
void setAutoCovariance(const int cellID, const double acov[31])
Set auto covariance for a channel.
eclAutocovarianceCalibrationC3Algorithm()
..Constructor
std::string m_outputName
file name for histogram output
const int m_numberofADCPoints
length of ECLDsp waveform
int m_TotalCountsThreshold
min number of counts needed to compute calibration
virtual EResult calibrate() override
..Run algorithm on events
const int c_NCrystals
Number of crystals.
Abstract base class for different kinds of events.