Skip to content

Commit f1bf384

Browse files
DCA minimum, and rigorous extraction
1 parent bc2376a commit f1bf384

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

Common/TableProducer/trackextension.cxx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
#include "Common/Core/TrackSelection.h"
2020
#include "Common/DataModel/TrackSelectionTables.h"
2121
#include "Common/Core/trackUtilities.h"
22+
#include "ReconstructionDataFormats/DCA.h"
23+
#include "DetectorsBase/Propagator.h"
24+
#include "DetectorsBase/GeometryManager.h"
25+
#include "DetectorsCommonDataFormats/NameConf.h"
2226

2327
using namespace o2;
2428
using namespace o2::framework;
@@ -32,21 +36,44 @@ using namespace o2::framework::expressions;
3236
*/
3337
//****************************************************************************************
3438
struct TrackExtensionTask {
39+
Configurable<int> cfgDcaMethod{"dcamethod", 1, "Method to estimate the track DCA: 0 = crude, 1 = minimum, 2 = rigorous. Default minimum"};
3540

3641
Produces<aod::TracksExtended> extendedTrackQuantities;
3742

3843
void process(aod::FullTracks const& tracks, aod::Collisions const&)
3944
{
45+
o2::base::Propagator::MatCorrType matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
46+
if ((cfgDcaMethod == 1) or (cfgDcaMethod == 2)) {
47+
o2::base::GeometryManager::loadGeometry();
48+
o2::base::Propagator::initFieldFromGRP();
49+
if (cfgDcaMethod == 2) {
50+
auto matLUTFile = o2::base::NameConf::getMatLUTFileName();
51+
if (o2::utils::Str::pathExists(matLUTFile)) {
52+
auto* lut = o2::base::MatLayerCylSet::loadFromFile(matLUTFile);
53+
o2::base::Propagator::Instance()->setMatLUT(lut);
54+
}
55+
}
56+
}
4057
for (auto& track : tracks) {
4158

4259
std::array<float, 2> dca{1e10f, 1e10f};
4360
if (track.has_collision()) {
4461
if ((track.trackType() == o2::aod::track::TrackTypeEnum::Track) ||
4562
(track.trackType() == o2::aod::track::TrackTypeEnum::Run2Track && track.itsChi2NCl() != 0.f && track.tpcChi2NCl() != 0.f && std::abs(track.x()) < 10.f)) {
46-
float magField = 5.0; // in kG (FIXME: get this from CCDB)
4763
auto trackPar = getTrackPar(track);
4864
auto const& collision = track.collision();
49-
trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, magField, &dca);
65+
if (cfgDcaMethod == 1) {
66+
trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, o2::base::Propagator::Instance()->getNominalBz(), &dca);
67+
} else if (cfgDcaMethod == 2) {
68+
o2::dataformats::DCA dcaInfo;
69+
if (o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, trackPar, 2., matCorr, &dca)) {
70+
dca[0] = dcaInfo.getY();
71+
dca[1] = dcaInfo.getZ();
72+
}
73+
} else {
74+
float magField = 5.0; // in kG (FIXME: get this from CCDB)
75+
trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, magField, &dca);
76+
}
5077
}
5178
}
5279
extendedTrackQuantities(dca[0], dca[1]);

0 commit comments

Comments
 (0)