2424// / \since May 22, 2024
2525// /
2626
27- #include < utility>
28- #include < map>
29- #include < string>
30- #include < vector>
27+ #include " TableHelper.h"
3128
32- #include < TPDGCode.h>
29+ #include " ALICE3/Core/DelphesO2TrackSmearer.h"
30+ #include " ALICE3/Core/TrackUtilities.h"
31+ #include " ALICE3/DataModel/OTFTOF.h"
32+ #include " Common/Core/trackUtilities.h"
33+ #include " Common/DataModel/TrackSelectionTables.h"
3334
35+ #include " CCDB/BasicCCDBManager.h"
36+ #include " CCDB/CcdbApi.h"
37+ #include " CommonConstants/GeomConstants.h"
38+ #include " CommonConstants/PhysicsConstants.h"
39+ #include " CommonUtils/NameConf.h"
40+ #include " DataFormatsCalibration/MeanVertexObject.h"
41+ #include " DataFormatsParameters/GRPMagField.h"
42+ #include " DetectorsBase/GeometryManager.h"
43+ #include " DetectorsBase/Propagator.h"
44+ #include " DetectorsVertexing/HelixHelper.h"
45+ #include " Framework/ASoAHelpers.h"
3446#include " Framework/AnalysisDataModel.h"
3547#include " Framework/AnalysisTask.h"
36- #include " Framework/runDataProcessing.h"
37- #include " Framework/RunningWorkflowInfo.h"
3848#include " Framework/HistogramRegistry.h"
3949#include " Framework/O2DatabasePDGPlugin.h"
40- #include " Framework/ASoAHelpers.h"
41- #include " Common/DataModel/TrackSelectionTables.h"
42- #include " Common/Core/trackUtilities.h"
43- #include " ALICE3/Core/TrackUtilities.h"
50+ #include " Framework/RunningWorkflowInfo.h"
51+ #include " Framework/runDataProcessing.h"
4452#include " ReconstructionDataFormats/DCA.h"
45- #include " DetectorsBase/Propagator.h"
46- #include " DetectorsBase/GeometryManager.h"
47- #include " CommonUtils/NameConf.h"
48- #include " CCDB/CcdbApi.h"
49- #include " CCDB/BasicCCDBManager.h"
50- #include " DataFormatsParameters/GRPMagField.h"
51- #include " DataFormatsCalibration/MeanVertexObject.h"
52- #include " CommonConstants/GeomConstants.h"
53- #include " CommonConstants/PhysicsConstants.h"
54- #include " TRandom3.h"
55- #include " ALICE3/DataModel/OTFTOF.h"
56- #include " DetectorsVertexing/HelixHelper.h"
57- #include " TableHelper.h"
58- #include " ALICE3/Core/DelphesO2TrackSmearer.h"
53+
5954#include " TEfficiency.h"
6055#include " THashList.h"
56+ #include " TRandom3.h"
57+ #include < TPDGCode.h>
58+
59+ #include < map>
60+ #include < string>
61+ #include < utility>
62+ #include < vector>
6163
6264using namespace o2 ;
6365using namespace o2 ::framework;
@@ -84,7 +86,7 @@ struct OnTheFlyTofPid {
8486 // more could be added (especially a disk TOF at a certain z?)
8587 // in the evolution of this effort
8688 struct : ConfigurableGroup {
87- Configurable<float > dBz{ " dBz " , 20 , " magnetic field (kilogauss)" };
89+ Configurable<float > magneticField{ " magneticField " , 0 , " magnetic field (kilogauss) if 0, taken from the tracker task " };
8890 Configurable<bool > considerEventTime{" considerEventTime" , true , " flag to consider event time" };
8991 Configurable<float > innerTOFRadius{" innerTOFRadius" , 20 , " barrel inner TOF radius (cm)" };
9092 Configurable<float > outerTOFRadius{" outerTOFRadius" , 80 , " barrel outer TOF radius (cm)" };
@@ -140,6 +142,13 @@ struct OnTheFlyTofPid {
140142 void init (o2::framework::InitContext& initContext)
141143 {
142144 pRandomNumberGenerator.SetSeed (0 ); // fully randomize
145+ if (simConfig.magneticField .value < 0 .0001f ) {
146+ LOG (info) << " Getting the magnetic field from the on-the-fly tracker task" ;
147+ if (!getTaskOptionValue (initContext, " on-the-fly-tracker" , simConfig.magneticField , false )) {
148+ LOG (fatal) << " Could not get Bz from on-the-fly-tracker task" ;
149+ }
150+ LOG (info) << " Bz = " << simConfig.magneticField .value << " T" ;
151+ }
143152
144153 // Check if inheriting the LUT configuration
145154 auto configLutPath = [&](Configurable<std::string>& lut) {
@@ -397,7 +406,7 @@ struct OnTheFlyTofPid {
397406
398407 static constexpr float kMaxEventTimeResolution = 200 .f ;
399408 if (sumw <= 0 . || tracks.size () <= 1 || std::sqrt (1 . / sumw) > kMaxEventTimeResolution ) {
400- tzero[0 ] = 0 .; // [ps]
409+ tzero[0 ] = 0 .; // [ps]
401410 tzero[1 ] = kMaxEventTimeResolution ; // [ps]
402411 return false ;
403412 }
@@ -496,13 +505,13 @@ struct OnTheFlyTofPid {
496505
497506 float xPv = -100 .f ;
498507 static constexpr float kTrkXThreshold = -99 .f ; // Threshold to consider a good propagation of the track
499- if (o2track.propagateToDCA (mcPvVtx, simConfig.dBz )) {
508+ if (o2track.propagateToDCA (mcPvVtx, simConfig.magneticField )) {
500509 xPv = o2track.getX ();
501510 }
502511 float trackLengthInnerTOF = -1 , trackLengthOuterTOF = -1 ;
503512 if (xPv > kTrkXThreshold ) {
504- trackLengthInnerTOF = computeTrackLength (o2track, simConfig.innerTOFRadius , simConfig.dBz );
505- trackLengthOuterTOF = computeTrackLength (o2track, simConfig.outerTOFRadius , simConfig.dBz );
513+ trackLengthInnerTOF = computeTrackLength (o2track, simConfig.innerTOFRadius , simConfig.magneticField );
514+ trackLengthOuterTOF = computeTrackLength (o2track, simConfig.outerTOFRadius , simConfig.magneticField );
506515 }
507516
508517 // get mass to calculate velocity
@@ -526,12 +535,12 @@ struct OnTheFlyTofPid {
526535 float trackLengthRecoInnerTOF = -1 , trackLengthRecoOuterTOF = -1 ;
527536 auto recoTrack = getTrackParCov (track);
528537 xPv = -100 .f ;
529- if (recoTrack.propagateToDCA (pvVtx, simConfig.dBz )) {
538+ if (recoTrack.propagateToDCA (pvVtx, simConfig.magneticField )) {
530539 xPv = recoTrack.getX ();
531540 }
532541 if (xPv > kTrkXThreshold ) {
533- trackLengthRecoInnerTOF = computeTrackLength (recoTrack, simConfig.innerTOFRadius , simConfig.dBz );
534- trackLengthRecoOuterTOF = computeTrackLength (recoTrack, simConfig.outerTOFRadius , simConfig.dBz );
542+ trackLengthRecoInnerTOF = computeTrackLength (recoTrack, simConfig.innerTOFRadius , simConfig.magneticField );
543+ trackLengthRecoOuterTOF = computeTrackLength (recoTrack, simConfig.outerTOFRadius , simConfig.magneticField );
535544 }
536545
537546 // cache the track info needed for the event time calculation
@@ -639,8 +648,8 @@ struct OnTheFlyTofPid {
639648 ptResolution = mSmearer .getAbsPtRes (pdgInfoThis->PdgCode (), dNdEta, pseudorapidity, momentum / std::cosh (pseudorapidity));
640649 etaResolution = mSmearer .getAbsEtaRes (pdgInfoThis->PdgCode (), dNdEta, pseudorapidity, momentum / std::cosh (pseudorapidity));
641650 }
642- float innerTrackTimeReso = calculateTrackTimeResolutionAdvanced (momentum / std::cosh (pseudorapidity), pseudorapidity, ptResolution, etaResolution, masses[ii], simConfig.innerTOFRadius , simConfig.dBz );
643- float outerTrackTimeReso = calculateTrackTimeResolutionAdvanced (momentum / std::cosh (pseudorapidity), pseudorapidity, ptResolution, etaResolution, masses[ii], simConfig.outerTOFRadius , simConfig.dBz );
651+ float innerTrackTimeReso = calculateTrackTimeResolutionAdvanced (momentum / std::cosh (pseudorapidity), pseudorapidity, ptResolution, etaResolution, masses[ii], simConfig.innerTOFRadius , simConfig.magneticField );
652+ float outerTrackTimeReso = calculateTrackTimeResolutionAdvanced (momentum / std::cosh (pseudorapidity), pseudorapidity, ptResolution, etaResolution, masses[ii], simConfig.outerTOFRadius , simConfig.magneticField );
644653 innerTotalTimeReso = std::hypot (simConfig.innerTOFTimeReso , innerTrackTimeReso);
645654 outerTotalTimeReso = std::hypot (simConfig.outerTOFTimeReso , outerTrackTimeReso);
646655
0 commit comments