10#ifndef CbmBbaAlignTask_H
11#define CbmBbaAlignTask_H
13#if __has_include(<omp.h>)
20#include "TClonesArray.h"
22#include "TGeoPhysicalNode.h"
25#include "bba/Parameter.h"
40 TString histoFileName =
"./CbmBbaAlignmentHisto.root",
size_t nMaxTracks = 1000);
43 void Exec(Option_t* opt);
59 static int GetSensorId(
const Node& node) {
return node.userReferences[3]; }
60 static void SetSensorId(Node& node,
int sensorId) { node.userReferences[3] = sensorId; }
118 unsigned SelectTracks(TClonesArray* inputTracks, std::vector<TrackContainer>&
tracks);
121 std::vector<Sensor>& sensors)
const;
122 void SetReferences(
const std::vector<Sensor>& sensors, std::vector<TrackContainer>&
tracks)
const;
126 std::vector<double>
DiffParameters(
const std::vector<double>& par1,
const std::vector<double>& par2)
const;
128 std::string
PrintRMSE(
const std::vector<bba::Parameter>& par,
const std::vector<double>& parMC,
129 const std::vector<double>& parValues)
const;
132 std::vector<cbm::bba::AlignmentBody>& AlignmentBodies)
const;
138 void SetAlignment(
const std::vector<double>& par, std::vector<cbm::bba::AlignmentBody>& AlignmentBodies)
const;
140 std::vector<cbm::bba::AlignmentBody>& AlignmentBodies,
bool invert)
const;
142 double CostFunction(
const std::vector<double>& par, std::vector<TrackContainer>&
tracks);
146 std::pair<std::string, TGeoHMatrix>
CreateAlignmentNode(std::string path,
double shiftX,
double shiftY,
double shiftZ,
147 double rotX,
double rotY,
double rotZ)
const;
Alignment body class for the BBA alignment.
ECbmModuleId
Enumerator for module Identifiers.
static int GetAlignmentBodyId(const Node &node)
void SetAlignmentBodyId(size_t inode, int bodyId)
void SetSensorId(size_t inode, int sensorId)
static void SetAlignmentBodyId(Node &node, int bodyId)
static int GetSensorId(const Node &node)
static void SetSensorId(Node &node, int sensorId)
std::vector< double > fParStart
std::vector< cbm::bba::AlignmentBody > CreateAndSetAlignmentBodies(AlignmentMode mode, std::vector< Sensor > &sensors) const
TClonesArray * fInputStsTracks
void ApplyAlignment(const std::vector< double > &par, std::vector< TrackContainer > &tracks, std::vector< cbm::bba::AlignmentBody > &AlignmentBodies, bool invert) const
double CostFunction(const std::vector< double > &par, std::vector< TrackContainer > &tracks)
std::vector< bba::Parameter > CreateAlignmentParameters() const
std::vector< double > fParMC
std::vector< Sensor > fSensors
double GetSimulatedMisalignmentRange() const
int GetRandomSeed() const
TString fMatrixOutFileName
unsigned SelectTracks(TClonesArray *inputTracks, std::vector< TrackContainer > &tracks)
void SetAlignment(const std::vector< double > &par, std::vector< cbm::bba::AlignmentBody > &AlignmentBodies) const
std::vector< double > InvertParameters(std::vector< double > par) const
AlignmentMode fAlignmentMode
std::vector< double > DiffParameters(const std::vector< double > &par1, const std::vector< double > &par2) const
Histograms fHistoBeforeAlignment
std::string PrintParameters(const std::vector< double > &par) const
void SetReferences(const std::vector< Sensor > &sensors, std::vector< TrackContainer > &tracks) const
ClassDef(CbmBbaAlignTask, 0)
std::vector< double > SimulateMisalignment(const std::vector< bba::Parameter > &par, std::vector< TrackContainer > &tracks, std::vector< cbm::bba::AlignmentBody > &AlignmentBodies) const
void SetRandomSeed(int seed)
std::vector< TrackContainer > fTracks
void SetSimulatedMisalignmentRange(double range)
std::vector< cbm::bba::AlignmentBody > fAlignmentBodies
void InitializeHistograms()
std::pair< std::string, TGeoHMatrix > CreateAlignmentNode(std::string path, double shiftX, double shiftY, double shiftZ, double rotX, double rotY, double rotZ) const
CbmKfTrackFitter< cbm::algo::kf::DoFitTime::N > fFitter
double fSimulatedMisalignmentRange
size_t GetMaxTracks() const
CbmBbaAlignTask(const char *name="CbmBbaAlignTask", Int_t iVerbose=0, TString histoFileName="./CbmBbaAlignmentHisto.root", size_t nMaxTracks=1000)
void WriteObjectsCurFile(TObject *obj)
void SetMaxTracks(size_t nMaxTracks)
void FillHistograms(const std::vector< TrackContainer > &tracks, Histograms &histo)
std::map< std::string, TGeoHMatrix > CreateAlignmentMatrices(const std::vector< double > &par) const
Histograms fHistoAfterAlignment
std::string PrintRMSE(const std::vector< bba::Parameter > &par, const std::vector< double > &parMC, const std::vector< double > &parValues) const
std::vector< Sensor > SensorsFromTracks(const std::vector< TrackContainer > &tracks) const
std::vector< Node > fNodes
friend class ::CbmKfTrackFitter
static constexpr int NofParameters
number of alignment parameters
TrackParam< double > TrackParamD
@ N
Do not fit the time component.
std::vector< std::unique_ptr< TH1F > > fResidualsY
std::vector< std::unique_ptr< TH1F > > fPullsY
std::vector< std::unique_ptr< TH1F > > fResidualsX
std::vector< std::unique_ptr< TH1F > > fPullsX
bool operator<(const Sensor &other) const
bool operator==(const Sensor &other) const
cbm::algo::kf::TrackParamD fFittedTrackParam
std::vector< std::array< double, 3 > > fOriginalHitPositions
void StoreOriginalHitPositions()