Skip to content

Commit ecca7a1

Browse files
authored
Merge branch 'AliceO2Group:dev' into cholmcc_aod_producers_refactor
2 parents ca39857 + b15719d commit ecca7a1

File tree

18 files changed

+1662
-57
lines changed

18 files changed

+1662
-57
lines changed

Common/DCAFitter/test/testDCAFitterN.cxx

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ float checkResults(o2::utils::TreeStreamRedirector& outs, std::string& treeName,
6161
<< "genPart=" << genPar << "recPart=" << moth
6262
<< "genX=" << vgen[0] << "genY=" << vgen[1] << "genZ=" << vgen[2]
6363
<< "dx=" << df[0] << "dy=" << df[1] << "dz=" << df[2] << "dst=" << dst
64-
<< "useAbsDCA=" << absDCA << "useWghDCA=" << useWghDCA << "parent=" << parentTrack << "\n";
64+
<< "useAbsDCA=" << absDCA << "useWghDCA=" << useWghDCA << "parent=" << parentTrack;
65+
for (int i = 0; i < fitter.getNProngs(); i++) {
66+
outs << treeName.c_str() << fmt::format("prong{}=", i).c_str() << fitter.getTrack(i, ic);
67+
}
68+
outs << treeName.c_str() << "\n";
6569
}
6670
return distMin;
6771
}
@@ -145,10 +149,13 @@ BOOST_AUTO_TEST_CASE(DCAFitterNProngs)
145149
o2::utils::TreeStreamRedirector outStream("dcafitterNTest.root");
146150

147151
TGenPhaseSpace genPHS;
152+
constexpr double ele = 0.00051;
153+
constexpr double gamma = 2 * ele + 1e-6;
148154
constexpr double pion = 0.13957;
149155
constexpr double k0 = 0.49761;
150156
constexpr double kch = 0.49368;
151157
constexpr double dch = 1.86965;
158+
std::vector<double> gammadec = {ele, ele};
152159
std::vector<double> k0dec = {pion, pion};
153160
std::vector<double> dchdec = {pion, kch, pion};
154161
std::vector<o2::track::TrackParCov> vctracks;
@@ -233,6 +240,84 @@ BOOST_AUTO_TEST_CASE(DCAFitterNProngs)
233240
BOOST_CHECK(meanDW < 0.1);
234241
}
235242

243+
// 2 prongs vertices with collinear tracks (gamma conversion)
244+
{
245+
LOG(info) << "Processing 2-prong Helix - Helix case gamma conversion";
246+
std::vector<int> forceQ{1, 1};
247+
248+
o2::vertexing::DCAFitterN<2> ft; // 2 prong fitter
249+
ft.setBz(bz);
250+
ft.setPropagateToPCA(true); // After finding the vertex, propagate tracks to the DCA. This is default anyway
251+
ft.setMaxR(200); // do not consider V0 seeds with 2D circles crossing above this R. This is default anyway
252+
ft.setMaxDZIni(4); // do not consider V0 seeds with tracks Z-distance exceeding this. This is default anyway
253+
ft.setMaxDXYIni(4); // do not consider V0 seeds with tracks XY-distance exceeding this. This is default anyway
254+
ft.setMinParamChange(1e-3); // stop iterations if max correction is below this value. This is default anyway
255+
ft.setMinRelChi2Change(0.9); // stop iterations if chi2 improves by less that this factor
256+
257+
std::string treeName2A = "gpr2a", treeName2AW = "gpr2aw", treeName2W = "gpr2w";
258+
TStopwatch swA, swAW, swW;
259+
int nfoundA = 0, nfoundAW = 0, nfoundW = 0;
260+
double meanDA = 0, meanDAW = 0, meanDW = 0;
261+
swA.Stop();
262+
swAW.Stop();
263+
swW.Stop();
264+
for (int iev = 0; iev < NTest; iev++) {
265+
auto genParent = generate(vtxGen, vctracks, bz, genPHS, gamma, gammadec, forceQ);
266+
267+
ft.setUseAbsDCA(true);
268+
swA.Start(false);
269+
int ncA = ft.process(vctracks[0], vctracks[1]); // HERE WE FIT THE VERTICES
270+
swA.Stop();
271+
LOG(debug) << "fit abs.dist " << iev << " NC: " << ncA << " Chi2: " << (ncA ? ft.getChi2AtPCACandidate(0) : -1);
272+
if (ncA) {
273+
auto minD = checkResults(outStream, treeName2A, ft, vtxGen, genParent, gammadec);
274+
meanDA += minD;
275+
nfoundA++;
276+
}
277+
278+
ft.setUseAbsDCA(true);
279+
ft.setWeightedFinalPCA(true);
280+
swAW.Start(false);
281+
int ncAW = ft.process(vctracks[0], vctracks[1]); // HERE WE FIT THE VERTICES
282+
swAW.Stop();
283+
LOG(debug) << "fit abs.dist with final weighted DCA " << iev << " NC: " << ncAW << " Chi2: " << (ncAW ? ft.getChi2AtPCACandidate(0) : -1);
284+
if (ncAW) {
285+
auto minD = checkResults(outStream, treeName2AW, ft, vtxGen, genParent, gammadec);
286+
meanDAW += minD;
287+
nfoundAW++;
288+
}
289+
290+
ft.setUseAbsDCA(false);
291+
ft.setWeightedFinalPCA(false);
292+
swW.Start(false);
293+
int ncW = ft.process(vctracks[0], vctracks[1]); // HERE WE FIT THE VERTICES
294+
swW.Stop();
295+
LOG(debug) << "fit wgh.dist " << iev << " NC: " << ncW << " Chi2: " << (ncW ? ft.getChi2AtPCACandidate(0) : -1);
296+
if (ncW) {
297+
auto minD = checkResults(outStream, treeName2W, ft, vtxGen, genParent, gammadec);
298+
meanDW += minD;
299+
nfoundW++;
300+
}
301+
}
302+
ft.print();
303+
meanDA /= nfoundA ? nfoundA : 1;
304+
meanDAW /= nfoundA ? nfoundA : 1;
305+
meanDW /= nfoundW ? nfoundW : 1;
306+
LOG(info) << "Processed " << NTest << " 2-prong vertices Helix : Helix from gamma conversion";
307+
LOG(info) << "2-prongs with abs.dist minization: eff= " << float(nfoundA) / NTest
308+
<< " mean.dist to truth: " << meanDA << " CPU time: " << swA.CpuTime();
309+
LOG(info) << "2-prongs with abs.dist but wghPCA: eff= " << float(nfoundAW) / NTest
310+
<< " mean.dist to truth: " << meanDAW << " CPU time: " << swAW.CpuTime();
311+
LOG(info) << "2-prongs with wgh.dist minization: eff= " << float(nfoundW) / NTest
312+
<< " mean.dist to truth: " << meanDW << " CPU time: " << swW.CpuTime();
313+
BOOST_CHECK(nfoundA > 0.99 * NTest);
314+
BOOST_CHECK(nfoundAW > 0.99 * NTest);
315+
BOOST_CHECK(nfoundW > 0.99 * NTest);
316+
BOOST_CHECK(meanDA < 2.1);
317+
BOOST_CHECK(meanDAW < 2.1);
318+
BOOST_CHECK(meanDW < 2.1);
319+
}
320+
236321
// 2 prongs vertices with one of charges set to 0: Helix : Line
237322
{
238323
std::vector<int> forceQ{1, 1};

Detectors/GlobalTrackingWorkflow/src/SecondaryVertexingSpec.cxx

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ namespace o2d = o2::dataformats;
5656
class SecondaryVertexingSpec : public Task
5757
{
5858
public:
59-
SecondaryVertexingSpec(std::shared_ptr<DataRequest> dr, std::shared_ptr<o2::base::GRPGeomRequest> gr, bool enabCasc, bool enable3body, bool enableStrangenessTracking, bool useMC) : mDataRequest(dr), mGGCCDBRequest(gr), mEnableCascades(enabCasc), mEnable3BodyVertices(enable3body), mEnableStrangenessTracking(enableStrangenessTracking), mUseMC(useMC) {}
59+
SecondaryVertexingSpec(std::shared_ptr<DataRequest> dr, std::shared_ptr<o2::base::GRPGeomRequest> gr, GTrackID::mask_t src, bool enabCasc, bool enable3body, bool enableStrangenessTracking, bool useMC) : mDataRequest(dr), mGGCCDBRequest(gr), mSrc(src), mEnableCascades(enabCasc), mEnable3BodyVertices(enable3body), mEnableStrangenessTracking(enableStrangenessTracking), mUseMC(useMC) {}
6060
~SecondaryVertexingSpec() override = default;
6161
void init(InitContext& ic) final;
6262
void run(ProcessingContext& pc) final;
@@ -69,6 +69,7 @@ class SecondaryVertexingSpec : public Task
6969
std::shared_ptr<o2::base::GRPGeomRequest> mGGCCDBRequest;
7070
o2::tpc::VDriftHelper mTPCVDriftHelper{};
7171
o2::tpc::CorrectionMapsLoader mTPCCorrMapsLoader{};
72+
GTrackID::mask_t mSrc{};
7273
bool mEnableCascades = false;
7374
bool mEnable3BodyVertices = false;
7475
bool mEnableStrangenessTracking = false;
@@ -96,7 +97,9 @@ void SecondaryVertexingSpec::init(InitContext& ic)
9697
mStrTracker.setMCTruthOn(mUseMC);
9798
mVertexer.setStrangenessTracker(&mStrTracker);
9899
}
99-
mTPCCorrMapsLoader.init(ic);
100+
if (mSrc[GTrackID::TPC]) {
101+
mTPCCorrMapsLoader.init(ic);
102+
}
100103
}
101104

102105
void SecondaryVertexingSpec::run(ProcessingContext& pc)
@@ -151,8 +154,10 @@ void SecondaryVertexingSpec::finaliseCCDB(ConcreteDataMatcher& matcher, void* ob
151154
void SecondaryVertexingSpec::updateTimeDependentParams(ProcessingContext& pc)
152155
{
153156
o2::base::GRPGeomHelper::instance().checkUpdates(pc);
154-
mTPCVDriftHelper.extractCCDBInputs(pc);
155-
mTPCCorrMapsLoader.extractCCDBInputs(pc);
157+
if (mSrc[GTrackID::TPC]) {
158+
mTPCVDriftHelper.extractCCDBInputs(pc);
159+
mTPCCorrMapsLoader.extractCCDBInputs(pc);
160+
}
156161
static bool initOnceDone = false;
157162
if (!initOnceDone) { // this params need to be queried only once
158163
initOnceDone = true;
@@ -166,23 +171,25 @@ void SecondaryVertexingSpec::updateTimeDependentParams(ProcessingContext& pc)
166171
}
167172
}
168173
// we may have other params which need to be queried regularly
169-
bool updateMaps = false;
170-
if (mTPCCorrMapsLoader.isUpdated()) {
171-
mVertexer.setTPCCorrMaps(&mTPCCorrMapsLoader);
172-
mTPCCorrMapsLoader.acknowledgeUpdate();
173-
updateMaps = true;
174-
}
175-
if (mTPCVDriftHelper.isUpdated()) {
176-
LOGP(info, "Updating TPC fast transform map with new VDrift factor of {} wrt reference {} and DriftTimeOffset correction {} wrt {} from source {}",
177-
mTPCVDriftHelper.getVDriftObject().corrFact, mTPCVDriftHelper.getVDriftObject().refVDrift,
178-
mTPCVDriftHelper.getVDriftObject().timeOffsetCorr, mTPCVDriftHelper.getVDriftObject().refTimeOffset,
179-
mTPCVDriftHelper.getSourceName());
180-
mVertexer.setTPCVDrift(mTPCVDriftHelper.getVDriftObject());
181-
mTPCVDriftHelper.acknowledgeUpdate();
182-
updateMaps = true;
183-
}
184-
if (updateMaps) {
185-
mTPCCorrMapsLoader.updateVDrift(mTPCVDriftHelper.getVDriftObject().corrFact, mTPCVDriftHelper.getVDriftObject().refVDrift, mTPCVDriftHelper.getVDriftObject().getTimeOffset());
174+
if (mSrc[GTrackID::TPC]) {
175+
bool updateMaps = false;
176+
if (mTPCCorrMapsLoader.isUpdated()) {
177+
mVertexer.setTPCCorrMaps(&mTPCCorrMapsLoader);
178+
mTPCCorrMapsLoader.acknowledgeUpdate();
179+
updateMaps = true;
180+
}
181+
if (mTPCVDriftHelper.isUpdated()) {
182+
LOGP(info, "Updating TPC fast transform map with new VDrift factor of {} wrt reference {} and DriftTimeOffset correction {} wrt {} from source {}",
183+
mTPCVDriftHelper.getVDriftObject().corrFact, mTPCVDriftHelper.getVDriftObject().refVDrift,
184+
mTPCVDriftHelper.getVDriftObject().timeOffsetCorr, mTPCVDriftHelper.getVDriftObject().refTimeOffset,
185+
mTPCVDriftHelper.getSourceName());
186+
mVertexer.setTPCVDrift(mTPCVDriftHelper.getVDriftObject());
187+
mTPCVDriftHelper.acknowledgeUpdate();
188+
updateMaps = true;
189+
}
190+
if (updateMaps) {
191+
mTPCCorrMapsLoader.updateVDrift(mTPCVDriftHelper.getVDriftObject().corrFact, mTPCVDriftHelper.getVDriftObject().refVDrift, mTPCVDriftHelper.getVDriftObject().getTimeOffset());
192+
}
186193
}
187194
if (mEnableStrangenessTracking) {
188195
if (o2::base::Propagator::Instance()->getNominalBz() != mStrTracker.getBz()) {
@@ -203,7 +210,12 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
203210
auto dataRequest = std::make_shared<DataRequest>();
204211
GTrackID::mask_t srcClus{};
205212
if (enableStrangenesTracking) {
206-
src |= (srcClus = GTrackID::getSourceMask(GTrackID::Source::ITS));
213+
src |= (srcClus = GTrackID::getSourceMask(GTrackID::ITS));
214+
}
215+
if (src[GTrackID::TPC]) {
216+
srcClus |= GTrackID::getSourceMask(GTrackID::TPC);
217+
}
218+
if (srcClus.any()) {
207219
dataRequest->requestClusters(srcClus, useMC);
208220
}
209221
dataRequest->requestTracks(src, useMC);
@@ -217,9 +229,10 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
217229
enableStrangenesTracking ? o2::base::GRPGeomRequest::Aligned : o2::base::GRPGeomRequest::None, // geometry
218230
dataRequest->inputs,
219231
true);
220-
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
221-
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, lumiType);
222-
232+
if (src[GTrackID::TPC]) {
233+
o2::tpc::VDriftHelper::requestCCDBInputs(dataRequest->inputs);
234+
o2::tpc::CorrectionMapsLoader::requestCCDBInputs(dataRequest->inputs, opts, lumiType);
235+
}
223236
outputs.emplace_back("GLO", "V0S_IDX", 0, Lifetime::Timeframe); // found V0s indices
224237
outputs.emplace_back("GLO", "V0S", 0, Lifetime::Timeframe); // found V0s
225238
outputs.emplace_back("GLO", "PVTX_V0REFS", 0, Lifetime::Timeframe); // prim.vertex -> V0s refs
@@ -245,7 +258,7 @@ DataProcessorSpec getSecondaryVertexingSpec(GTrackID::mask_t src, bool enableCas
245258
"secondary-vertexing",
246259
dataRequest->inputs,
247260
outputs,
248-
AlgorithmSpec{adaptFromTask<SecondaryVertexingSpec>(dataRequest, ggRequest, enableCasc, enable3body, enableStrangenesTracking, useMC)},
261+
AlgorithmSpec{adaptFromTask<SecondaryVertexingSpec>(dataRequest, ggRequest, src, enableCasc, enable3body, enableStrangenesTracking, useMC)},
249262
opts};
250263
}
251264

Detectors/GlobalTrackingWorkflow/src/secondary-vertexing-workflow.cxx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,23 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
8080
auto disableRootOut = configcontext.options().get<bool>("disable-root-output");
8181
auto enableCasc = !configcontext.options().get<bool>("disable-cascade-finder");
8282
auto enable3body = !configcontext.options().get<bool>("disable-3body-finder");
83-
auto enagleStrTr = !configcontext.options().get<bool>("disable-strangeness-tracker");
83+
auto enableStrTr = !configcontext.options().get<bool>("disable-strangeness-tracker");
8484
auto lumiType = configcontext.options().get<int>("lumi-type");
8585

8686
GID::mask_t src = allowedSources & GID::getSourcesMask(configcontext.options().get<std::string>("vertexing-sources"));
8787
GID::mask_t dummy, srcClus = GID::includesDet(DetID::TOF, src) ? GID::getSourceMask(GID::TOF) : dummy; // eventually, TPC clusters will be needed for refit
88-
if (enagleStrTr) {
88+
if (enableStrTr) {
8989
srcClus |= GID::getSourceMask(GID::ITS);
9090
}
91+
if (src[GID::TPC]) {
92+
srcClus |= GID::getSourceMask(GID::TPC);
93+
}
9194
if (lumiType == 1) {
9295
src = src | GID::getSourcesMask("CTP");
9396
}
9497
WorkflowSpec specs;
9598

96-
specs.emplace_back(o2::vertexing::getSecondaryVertexingSpec(src, enableCasc, enable3body, enagleStrTr, useMC, lumiType));
99+
specs.emplace_back(o2::vertexing::getSecondaryVertexingSpec(src, enableCasc, enable3body, enableStrTr, useMC, lumiType));
97100

98101
// only TOF clusters are needed if TOF is involved, no clusters MC needed
99102
WorkflowSpec inputspecs;
@@ -118,7 +121,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext)
118121

119122
if (!disableRootOut) {
120123
specs.emplace_back(o2::vertexing::getSecondaryVertexWriterSpec());
121-
if (enagleStrTr) {
124+
if (enableStrTr) {
122125
specs.emplace_back(o2::strangeness_tracking::getStrangenessTrackingWriterSpec(useMC));
123126
}
124127
}

Detectors/TRD/qc/CMakeLists.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@
99
# granted to it by virtue of its status as an Intergovernmental Organization
1010
# or submit itself to any jurisdiction.
1111

12+
add_subdirectory(macros)
13+
1214
o2_add_library(TRDQC
1315
SOURCES src/Tracking.cxx
1416
src/StatusHelper.cxx
17+
src/CoordinateTransformer.cxx
18+
src/RawDataManager.cxx
19+
src/RawDisplay.cxx
1520
PUBLIC_LINK_LIBRARIES O2::TRDBase
1621
O2::DataFormatsTRD
1722
O2::DataFormatsGlobalTracking
@@ -21,4 +26,7 @@ o2_add_library(TRDQC
2126

2227
o2_target_root_dictionary(TRDQC
2328
HEADERS include/TRDQC/Tracking.h
24-
include/TRDQC/StatusHelper.h)
29+
include/TRDQC/StatusHelper.h
30+
include/TRDQC/CoordinateTransformer.h
31+
include/TRDQC/RawDataManager.h
32+
include/TRDQC/RawDisplay.h)

0 commit comments

Comments
 (0)