Skip to content

Commit 8774a58

Browse files
authored
Fetching magnetic field from ccdb for propagation of tracks (#1932)
* Fetching magnetic field from ccdb for propagation of tracks in secondary vertexing * Clang format * Fix header * Fix typo
1 parent 07a915f commit 8774a58

3 files changed

Lines changed: 58 additions & 23 deletions

File tree

PWGDQ/TableProducer/tableMakerMC.cxx

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ struct TableMakerMC {
276276

277277
// Templated function instantianed for all of the process functions
278278
template <uint32_t TEventFillMap, uint32_t TTrackFillMap, uint32_t TMuonFillMap, typename TEvent, typename TTracks, typename TMuons, typename TAmbiTracks, typename TAmbiMuons>
279-
void fullSkimming(TEvent const& collisions, aod::BCs const& bcs, TTracks const& tracksBarrel, TMuons const& tracksMuon,
279+
void fullSkimming(TEvent const& collisions, aod::BCsWithTimestamps const& bcs, TTracks const& tracksBarrel, TMuons const& tracksMuon,
280280
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks, TAmbiTracks const& ambiTracksMid, TAmbiMuons const& ambiTracksFwd)
281281
{
282282
// Loop over collisions and produce skimmed data tables for:
@@ -324,7 +324,11 @@ struct TableMakerMC {
324324
}
325325

326326
auto mcCollision = collision.mcCollision();
327+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
327328
VarManager::ResetValues(0, VarManager::kNEventWiseVariables);
329+
VarManager::fgValues[VarManager::kRunNo] = bc.runNumber();
330+
VarManager::fgValues[VarManager::kBC] = bc.globalBC();
331+
VarManager::fgValues[VarManager::kTimestamp] = bc.timestamp();
328332
VarManager::FillEvent<TEventFillMap>(collision); // extract event information and place it in the fValues array
329333
VarManager::FillEvent<gkEventMCFillMap>(mcCollision);
330334

@@ -355,14 +359,14 @@ struct TableMakerMC {
355359
}
356360
(reinterpret_cast<TH2I*>(fStatsList->At(0)))->Fill(3.0, static_cast<float>(kNaliases));
357361

358-
event(tag, collision.bc().runNumber(), collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
362+
event(tag, bc.runNumber(), collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
359363
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0 && (TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0) {
360364
eventExtended(collision.bc().globalBC(), collision.bc().triggerMask(), 0, triggerAliases, VarManager::fgValues[VarManager::kCentVZERO],
361365
collision.multTPC(), collision.multFV0A(), collision.multFV0C(), collision.multFT0A(), collision.multFT0C(),
362366
collision.multFDDA(), collision.multFDDC(), collision.multZNA(), collision.multZNC(), collision.multTracklets(),
363367
collision.centFT0C());
364368
} else {
365-
eventExtended(collision.bc().globalBC(), collision.bc().triggerMask(), 0, triggerAliases, VarManager::fgValues[VarManager::kCentVZERO], -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
369+
eventExtended(bc.globalBC(), bc.triggerMask(), bc.timestamp(), triggerAliases, VarManager::fgValues[VarManager::kCentVZERO], -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);
366370
}
367371
eventVtxCov(collision.covXX(), collision.covXY(), collision.covXZ(), collision.covYY(), collision.covYZ(), collision.covZZ(), collision.chi2());
368372
// make an entry for this MC event only if it was not already added to the table
@@ -856,106 +860,106 @@ struct TableMakerMC {
856860
}
857861

858862
// Produce barrel + muon tables ------------------------------------------------------------------------------------
859-
void processFull(MyEvents const& collisions, aod::BCs const& bcs,
863+
void processFull(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
860864
soa::Filtered<MyBarrelTracks> const& tracksBarrel, soa::Filtered<MyMuons> const& tracksMuon,
861865
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
862866
{
863867
fullSkimming<gkEventFillMap, gkTrackFillMap, gkMuonFillMap>(collisions, bcs, tracksBarrel, tracksMuon, mcEvents, mcTracks, nullptr, nullptr);
864868
}
865869

866-
void processFullWithCov(MyEvents const& collisions, aod::BCs const& bcs,
870+
void processFullWithCov(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
867871
soa::Filtered<MyBarrelTracksWithCov> const& tracksBarrel, soa::Filtered<MyMuonsWithCov> const& tracksMuon,
868872
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
869873
{
870874
fullSkimming<gkEventFillMap, gkTrackFillMapWithCov, gkMuonFillMapWithCov>(collisions, bcs, tracksBarrel, tracksMuon, mcEvents, mcTracks, nullptr, nullptr);
871875
}
872876

873877
// Produce barrel only tables ------------------------------------------------------------------------------------
874-
void processBarrelOnly(MyEvents const& collisions, aod::BCs const& bcs,
878+
void processBarrelOnly(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
875879
soa::Filtered<MyBarrelTracks> const& tracksBarrel,
876880
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
877881
{
878882
fullSkimming<gkEventFillMap, gkTrackFillMap, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
879883
}
880884

881885
// Produce barrel only tables, with multiplicity ------------------------------------------------------------------------------------
882-
void processBarrelOnlyWithMults(MyEventsWithMults const& collisions, aod::BCs const& bcs,
886+
void processBarrelOnlyWithMults(MyEventsWithMults const& collisions, aod::BCsWithTimestamps const& bcs,
883887
soa::Filtered<MyBarrelTracks> const& tracksBarrel,
884888
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
885889
{
886890
fullSkimming<gkEventFillMapWithMults, gkTrackFillMap, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
887891
}
888892

889893
// Produce barrel only tables, with centrality ------------------------------------------------------------------------------------
890-
void processBarrelOnlyWithCent(MyEventsWithCent const& collisions, aod::BCs const& bcs,
894+
void processBarrelOnlyWithCent(MyEventsWithCent const& collisions, aod::BCsWithTimestamps const& bcs,
891895
soa::Filtered<MyBarrelTracks> const& tracksBarrel,
892896
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
893897
{
894898
fullSkimming<gkEventFillMapWithCent, gkTrackFillMap, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
895899
}
896900

897901
// Produce barrel only tables, with centrality and multiplicity -------------------------------------------------------------------
898-
void processBarrelOnlyWithCentAndMults(MyEventsWithCentAndMults const& collisions, aod::BCs const& bcs,
902+
void processBarrelOnlyWithCentAndMults(MyEventsWithCentAndMults const& collisions, aod::BCsWithTimestamps const& bcs,
899903
soa::Filtered<MyBarrelTracks> const& tracksBarrel,
900904
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
901905
{
902906
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMap, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
903907
}
904908

905909
// Produce barrel only tables, with cov matrix-----------------------------------------------------------------------
906-
void processBarrelOnlyWithCov(MyEvents const& collisions, aod::BCs const& bcs,
910+
void processBarrelOnlyWithCov(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
907911
soa::Filtered<MyBarrelTracksWithCov> const& tracksBarrel,
908912
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
909913
{
910914
fullSkimming<gkEventFillMap, gkTrackFillMapWithCov, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
911915
}
912916

913917
// Produce barrel only tables, with cov matrix and dalitz bits-----------------------------------------------------------------------
914-
void processBarrelOnlyWithDalitzBits(MyEvents const& collisions, aod::BCs const& bcs,
918+
void processBarrelOnlyWithDalitzBits(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
915919
soa::Filtered<MyBarrelTracksWithDalitzBits> const& tracksBarrel,
916920
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
917921
{
918922
fullSkimming<gkEventFillMap, gkTrackFillMapWithDalitzBits, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
919923
}
920924

921925
// Produce muon only tables ------------------------------------------------------------------------------------
922-
void processMuonOnly(MyEvents const& collisions, aod::BCs const& bcs,
926+
void processMuonOnly(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
923927
soa::Filtered<MyMuons> const& tracksMuon,
924928
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
925929
{
926930
fullSkimming<gkEventFillMap, 0u, gkMuonFillMap>(collisions, bcs, nullptr, tracksMuon, mcEvents, mcTracks, nullptr, nullptr);
927931
}
928932
// Produce muon only tables, with centrality-------------------------------------------------------------------------------
929-
void processMuonOnlyWithCent(MyEventsWithCent const& collisions, aod::BCs const& bcs,
933+
void processMuonOnlyWithCent(MyEventsWithCent const& collisions, aod::BCsWithTimestamps const& bcs,
930934
soa::Filtered<MyMuons> const& tracksMuon,
931935
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
932936
{
933937
fullSkimming<gkEventFillMapWithCent, 0u, gkMuonFillMap>(collisions, bcs, nullptr, tracksMuon, mcEvents, mcTracks, nullptr, nullptr);
934938
}
935939
// Produce muon only tables, with cov matrix ------------------------------------------------------------------------------------
936-
void processMuonOnlyWithCov(MyEvents const& collisions, aod::BCs const& bcs,
940+
void processMuonOnlyWithCov(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
937941
soa::Filtered<MyMuonsWithCov> const& tracksMuon,
938942
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
939943
{
940944
fullSkimming<gkEventFillMap, 0u, gkMuonFillMapWithCov>(collisions, bcs, nullptr, tracksMuon, mcEvents, mcTracks, nullptr, nullptr);
941945
}
942946
// Produce muon tables only for ambiguous tracks studies --------------------------------------------------------------------------------------
943-
void processAmbiguousMuonOnly(MyEvents const& collisions, aod::BCs const& bcs,
947+
void processAmbiguousMuonOnly(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
944948
soa::Filtered<MyMuons> const& tracksMuon,
945949
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks, aod::AmbiguousTracksFwd const& ambiTracksFwd)
946950
{
947951
fullSkimming<gkEventFillMap, 0u, gkMuonFillMapWithAmbi>(collisions, bcs, nullptr, tracksMuon, mcEvents, mcTracks, nullptr, ambiTracksFwd);
948952
}
949953

950-
void processAmbiguousMuonOnlyWithCov(MyEvents const& collisions, aod::BCs const& bcs,
954+
void processAmbiguousMuonOnlyWithCov(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
951955
soa::Filtered<MyMuonsWithCov> const& tracksMuon,
952956
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks, aod::AmbiguousTracksFwd const& ambiTracksFwd)
953957
{
954958
fullSkimming<gkEventFillMap, 0u, gkMuonFillMapWithCovAmbi>(collisions, bcs, nullptr, tracksMuon, mcEvents, mcTracks, nullptr, ambiTracksFwd);
955959
}
956960

957961
// Produce track tables only for ambiguous tracks studies -------------------------------------------------------------------------------------
958-
void processAmbiguousBarrelOnly(MyEvents const& collisions, aod::BCs const& bcs,
962+
void processAmbiguousBarrelOnly(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
959963
soa::Filtered<MyBarrelTracks> const& tracksBarrel,
960964
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks, aod::AmbiguousTracksMid const& ambiTracksMid)
961965
{

PWGDQ/Tasks/dqEfficiency.cxx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include "PWGDQ/Core/CutsLibrary.h"
3333
#include "PWGDQ/Core/MCSignal.h"
3434
#include "PWGDQ/Core/MCSignalLibrary.h"
35+
#include "DataFormatsParameters/GRPObject.h"
36+
#include "CCDB/BasicCCDBManager.h"
3537

3638
using std::cout;
3739
using std::endl;
@@ -84,6 +86,9 @@ constexpr static uint32_t gkMuonFillMap = VarManager::ObjTypes::ReducedMuon | Va
8486
constexpr static uint32_t gkMuonFillMapWithCov = VarManager::ObjTypes::ReducedMuon | VarManager::ObjTypes::ReducedMuonExtra | VarManager::ObjTypes::ReducedMuonCov;
8587
constexpr static uint32_t gkParticleMCFillMap = VarManager::ObjTypes::ParticleMC;
8688

89+
const char* ccdbpath_grp = "GLO/GRP/GRP";
90+
const char* ccdburl = "http://alice-ccdb.cern.ch";
91+
8792
void DefineHistograms(HistogramManager* histMan, TString histClasses);
8893

8994
struct AnalysisEventSelection {
@@ -480,6 +485,8 @@ struct AnalysisSameEventPairing {
480485
Produces<aod::Dileptons> dileptonList;
481486
Produces<aod::DileptonsExtra> dileptonExtraList;
482487
Produces<aod::DimuonsAll> dimuonAllList;
488+
Service<o2::ccdb::BasicCCDBManager> ccdb;
489+
float mMagField = 0.0;
483490
OutputObj<THashList> fOutputList{"output"};
484491
Filter filterEventSelected = aod::dqanalysisflags::isEventSelected == 1;
485492
Filter filterBarrelTrackSelected = aod::dqanalysisflags::isBarrelSelected > 0;
@@ -506,6 +513,9 @@ struct AnalysisSameEventPairing {
506513

507514
void init(o2::framework::InitContext& context)
508515
{
516+
ccdb->setURL(ccdburl);
517+
ccdb->setCaching(true);
518+
ccdb->setLocalObjectValidityChecking();
509519
bool enableBarrelHistos = context.mOptions.get<bool>("processDecayToEESkimmed") || context.mOptions.get<bool>("processDecayToEEVertexingSkimmed");
510520
bool enableMuonHistos = context.mOptions.get<bool>("processDecayToMuMuSkimmed") || context.mOptions.get<bool>("processDecayToMuMuVertexingSkimmed");
511521
// bool enableBarrelMuonHistos = context.mOptions.get<bool>("processElectronMuonSkimmed");
@@ -643,14 +653,20 @@ struct AnalysisSameEventPairing {
643653
DefineHistograms(fHistMan, histNames.Data()); // define all histograms
644654
VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill
645655
fOutputList.setObject(fHistMan->GetMainHistogramList());
646-
647-
VarManager::SetupTwoProngDCAFitter(5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables
648-
VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true);
649656
}
650657

651658
template <int TPairType, uint32_t TEventFillMap, uint32_t TEventMCFillMap, uint32_t TTrackFillMap, typename TEvent, typename TTracks1, typename TTracks2, typename TEventsMC, typename TTracksMC>
652659
void runPairing(TEvent const& event, TTracks1 const& tracks1, TTracks2 const& tracks2, TEventsMC const& eventsMC, TTracksMC const& tracksMC)
653660
{
661+
o2::parameters::GRPObject* grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(ccdbpath_grp, event.timestamp());
662+
if (grpo != nullptr) {
663+
mMagField = grpo->getNominalL3Field();
664+
} else {
665+
LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", event.timestamp());
666+
}
667+
VarManager::SetupTwoProngDCAFitter(mMagField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables
668+
VarManager::SetupTwoProngFwdDCAFitter(mMagField, true, 200.0f, 1.0e-3f, 0.9f, true);
669+
654670
// establish the right histogram classes to be filled depending on TPairType (ee,mumu,emu)
655671
unsigned int ncuts = fBarrelHistNames.size();
656672
std::vector<std::vector<TString>> histNames = fBarrelHistNames;

PWGDQ/Tasks/tableReader.cxx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <TList.h>
2121
#include <TString.h>
2222
#include "CCDB/BasicCCDBManager.h"
23+
#include "DataFormatsParameters/GRPObject.h"
2324
#include "Framework/runDataProcessing.h"
2425
#include "Framework/AnalysisTask.h"
2526
#include "Framework/AnalysisDataModel.h"
@@ -102,6 +103,9 @@ constexpr static int pairTypeEE = VarManager::kDecayToEE;
102103
constexpr static int pairTypeMuMu = VarManager::kDecayToMuMu;
103104
constexpr static int pairTypeEMu = VarManager::kElectronMuon;
104105

106+
const char* ccdbpath_grp = "GLO/GRP/GRP";
107+
const char* ccdburl = "http://alice-ccdb.cern.ch";
108+
105109
// Global function used to define needed histogram classes
106110
void DefineHistograms(HistogramManager* histMan, TString histClasses, Configurable<std::string> configVar); // defines histograms for all tasks
107111

@@ -729,6 +733,7 @@ struct AnalysisSameEventPairing {
729733
Produces<aod::DileptonsExtra> dileptonExtraList;
730734
Produces<aod::DimuonsAll> dimuonAllList;
731735
Produces<aod::DileptonFlow> dileptonFlowList;
736+
float mMagField = 0.0;
732737

733738
OutputObj<THashList> fOutputList{"output"};
734739
Configurable<string> fConfigTrackCuts{"cfgTrackCuts", "", "Comma separated list of barrel track cuts"};
@@ -759,6 +764,10 @@ struct AnalysisSameEventPairing {
759764

760765
void init(o2::framework::InitContext& context)
761766
{
767+
ccdb->setURL(ccdburl);
768+
ccdb->setCaching(true);
769+
ccdb->setLocalObjectValidityChecking();
770+
762771
VarManager::SetDefaultVarNames();
763772
fHistMan = new HistogramManager("analysisHistos", "aa", VarManager::kNVars);
764773
fHistMan->SetUseDefaultVariableNames(kTRUE);
@@ -827,15 +836,21 @@ struct AnalysisSameEventPairing {
827836
DefineHistograms(fHistMan, histNames.Data(), fConfigAddSEPHistogram); // define all histograms
828837
VarManager::SetUseVars(fHistMan->GetUsedVars()); // provide the list of required variables so that VarManager knows what to fill
829838
fOutputList.setObject(fHistMan->GetMainHistogramList());
830-
831-
VarManager::SetupTwoProngDCAFitter(5.0f, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables
832-
VarManager::SetupTwoProngFwdDCAFitter(5.0f, true, 200.0f, 1.0e-3f, 0.9f, true);
833839
}
834840

835841
// Template function to run same event pairing (barrel-barrel, muon-muon, barrel-muon)
836842
template <int TPairType, uint32_t TEventFillMap, uint32_t TTrackFillMap, typename TEvent, typename TTracks1, typename TTracks2>
837843
void runSameEventPairing(TEvent const& event, TTracks1 const& tracks1, TTracks2 const& tracks2)
838844
{
845+
o2::parameters::GRPObject* grpo = ccdb->getForTimeStamp<o2::parameters::GRPObject>(ccdbpath_grp, event.timestamp());
846+
if (grpo != nullptr) {
847+
mMagField = grpo->getNominalL3Field();
848+
} else {
849+
LOGF(fatal, "GRP object is not available in CCDB at timestamp=%llu", event.timestamp());
850+
}
851+
VarManager::SetupTwoProngDCAFitter(mMagField, true, 200.0f, 4.0f, 1.0e-3f, 0.9f, true); // TODO: get these parameters from Configurables
852+
VarManager::SetupTwoProngFwdDCAFitter(mMagField, true, 200.0f, 1.0e-3f, 0.9f, true);
853+
839854
unsigned int ncuts = fTrackHistNames.size();
840855
std::vector<std::vector<TString>> histNames = fTrackHistNames;
841856
if constexpr (TPairType == pairTypeMuMu) {

0 commit comments

Comments
 (0)