2323#include " PWGCF/DataModel/CorrelationsDerived.h"
2424#include " PWGCF/Core/CorrelationContainer.h"
2525#include " PWGCF/Core/PairCuts.h"
26+ #include " DataFormatsParameters/GRPObject.h"
2627
2728#include < TH1F.h>
2829#include < cmath>
@@ -148,14 +149,30 @@ struct CorrelationTask {
148149
149150 // o2-ccdb-upload -p Users/jgrosseo/correlations/LHC15o -f /tmp/correction_2011_global.root -k correction
150151
151- ccdb->setURL (" http://ccdb-test .cern.ch:8080 " );
152+ ccdb->setURL (" http://alice-ccdb .cern.ch" );
152153 ccdb->setCaching (true );
153154 ccdb->setLocalObjectValidityChecking ();
154155
155156 long now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now ().time_since_epoch ()).count ();
156157 ccdb->setCreatedNotAfter (now); // TODO must become global parameter from the train creation time
157158 }
158159
160+ float getMagneticField (uint64_t timestamp)
161+ {
162+ // TODO done only once (and not per run). Will be replaced by CCDBConfigurable
163+ static o2::parameters::GRPObject* grpo = nullptr ;
164+ if (grpo == nullptr ) {
165+ grpo = ccdb->getForTimeStamp <o2::parameters::GRPObject>(" GLO/GRP/GRP" , timestamp);
166+ if (grpo == nullptr ) {
167+ LOGF (fatal, " GRP object not found for timestamp %llu" , timestamp);
168+ return 0 ;
169+ }
170+ LOGF (info, " Retrieved GRP for timestamp %llu with L3 current of %f" , timestamp, grpo->getL3Current ());
171+ }
172+ float l3current = grpo->getL3Current ();
173+ return l3current / 30000 .0f * 5 .0f ;
174+ }
175+
159176 template <typename TCollision, typename TTracks>
160177 void fillQA (TCollision collision, float centrality, TTracks tracks)
161178 {
@@ -180,7 +197,7 @@ struct CorrelationTask {
180197 }
181198
182199 template <typename TTarget, typename TTracks>
183- void fillCorrelations (TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ, int bSign )
200+ void fillCorrelations (TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ, float magField )
184201 {
185202 // Cache efficiency for particles (too many FindBin lookups)
186203 float * efficiencyAssociated = nullptr ;
@@ -228,7 +245,7 @@ struct CorrelationTask {
228245 continue ;
229246 }
230247
231- if (cfgTwoTrackCut > 0 && mPairCuts .twoTrackCut (track1, track2, bSign )) {
248+ if (cfgTwoTrackCut > 0 && mPairCuts .twoTrackCut (track1, track2, magField )) {
232249 continue ;
233250 }
234251
@@ -277,38 +294,34 @@ struct CorrelationTask {
277294
278295 LOGF (info, " processSameAOD: Tracks for collision: %d | Vertex: %.1f | INT7: %d | V0M: %.1f" , tracks.size (), collision.posZ (), collision.sel7 (), collision.centV0M ());
279296
280- int bSign = 1 ; // TODO magnetic field from CCDB
281297 const auto centrality = collision.centV0M ();
282298
283299 if (fillCollisionAOD (same, collision, centrality) == false ) {
284300 return ;
285301 }
286302 registry.fill (HIST (" eventcount" ), -2 );
287303 fillQA (collision, centrality, tracks);
288- fillCorrelations (same, tracks, tracks, centrality, collision.posZ (), bSign );
304+ fillCorrelations (same, tracks, tracks, centrality, collision.posZ (), getMagneticField (bc. timestamp ()) );
289305 }
290306 PROCESS_SWITCH (CorrelationTask, processSameAOD, " Process same event on AOD" , true );
291307
292308 void processSameDerived (soa::Filtered<aod::CFCollisions>::iterator const & collision, soa::Filtered<aod::CFTracks> const & tracks)
293309 {
294310 LOGF (info, " processSameDerived: Tracks for collision: %d | Vertex: %.1f | V0M: %.1f" , tracks.size (), collision.posZ (), collision.centV0M ());
295311
296- int bSign = 1 ; // TODO magnetic field from CCDB
297312 const auto centrality = collision.centV0M ();
298313
299314 same->fillEvent (centrality, CorrelationContainer::kCFStepReconstructed );
300315 registry.fill (HIST (" eventcount" ), -2 );
301316 fillQA (collision, centrality, tracks);
302- fillCorrelations (same, tracks, tracks, centrality, collision.posZ (), bSign );
317+ fillCorrelations (same, tracks, tracks, centrality, collision.posZ (), getMagneticField (collision. timestamp ()) );
303318 }
304319 PROCESS_SWITCH (CorrelationTask, processSameDerived, " Process same event on derived data" , false );
305320
306- void processMixedAOD (soa::Filtered<soa::Join<aod::Collisions, aod::Hashes, aod::EvSels, aod::CentV0Ms>>& collisions, aodTracks const & tracks)
321+ void processMixedAOD (soa::Filtered<soa::Join<aod::Collisions, aod::Hashes, aod::EvSels, aod::CentV0Ms>>& collisions, aodTracks const & tracks, aod::BCsWithTimestamps const & )
307322 {
308323 // TODO loading of efficiency histogram missing here, because it will happen somehow in the CCDBConfigurable
309324
310- int bSign = 1 ; // TODO magnetic field from CCDB
311-
312325 collisions.bindExternalIndices (&tracks);
313326 auto tracksTuple = std::make_tuple (tracks);
314327 AnalysisDataProcessorBuilder::GroupSlicer slicer (collisions, tracksTuple);
@@ -345,10 +358,12 @@ struct CorrelationTask {
345358 auto tracks2 = std::get<aodTracks>(it2.associatedTables ());
346359 tracks2.bindExternalIndices (&collisions);
347360
361+ auto bc = collision1.bc_as <aod::BCsWithTimestamps>();
362+
348363 // LOGF(info, "Tracks: %d and %d entries", tracks1.size(), tracks2.size());
349364
350365 // TODO mixed event weight missing
351- fillCorrelations (mixed, tracks1, tracks2, collision1.centV0M (), collision1.posZ (), bSign );
366+ fillCorrelations (mixed, tracks1, tracks2, collision1.centV0M (), collision1.posZ (), getMagneticField (bc. timestamp ()) );
352367 }
353368 }
354369 PROCESS_SWITCH (CorrelationTask, processMixedAOD, " Process mixed events on AOD" , true );
@@ -357,8 +372,6 @@ struct CorrelationTask {
357372 {
358373 // TODO loading of efficiency histogram missing here, because it will happen somehow in the CCDBConfigurable
359374
360- int bSign = 1 ; // TODO magnetic field from CCDB
361-
362375 collisions.bindExternalIndices (&tracks);
363376 auto tracksTuple = std::make_tuple (tracks);
364377 AnalysisDataProcessorBuilder::GroupSlicer slicer (collisions, tracksTuple);
@@ -393,19 +406,20 @@ struct CorrelationTask {
393406
394407 // LOGF(info, "Tracks: %d and %d entries", tracks1.size(), tracks2.size());
395408
396- fillCorrelations (mixed, tracks1, tracks2, collision1.centV0M (), collision1.posZ (), bSign );
409+ fillCorrelations (mixed, tracks1, tracks2, collision1.centV0M (), collision1.posZ (), getMagneticField (collision1. timestamp ()) );
397410 }
398411 }
399412 PROCESS_SWITCH (CorrelationTask, processMixedDerived, " Process mixed events on derived data" , false );
400413
401414 // Version with combinations
402- void processWithCombinations (soa::Join<aod::Collisions, aod::CentV0Ms>::iterator const & collision, soa::Filtered<aod::Tracks> const & tracks)
415+ void processWithCombinations (soa::Join<aod::Collisions, aod::CentV0Ms>::iterator const & collision, aod::BCsWithTimestamps const &, soa::Filtered<aod::Tracks> const & tracks)
403416 {
404417 LOGF (info, " Tracks for collision (Combination run): %d" , tracks.size ());
405418
406- const auto centrality = collision.centV0M ();
419+ // TODO will go to CCDBConfigurable
420+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
407421
408- int bSign = 1 ; // TODO magnetic field from CCDB
422+ const auto centrality = collision. centV0M ();
409423
410424 for (auto track1 = tracks.begin (); track1 != tracks.end (); ++track1) {
411425
@@ -436,7 +450,7 @@ struct CorrelationTask {
436450 continue ;
437451 }
438452
439- if (cfgTwoTrackCut > 0 && mPairCuts .twoTrackCut (track1, track2, bSign )) {
453+ if (cfgTwoTrackCut > 0 && mPairCuts .twoTrackCut (track1, track2, getMagneticField (bc. timestamp ()) )) {
440454 continue ;
441455 }
442456
0 commit comments