2424#include " Common/DataModel/FT0Corrected.h"
2525#include " Common/DataModel/PIDResponseTOF.h"
2626
27- #include < DataFormatsFIT/Triggers.h>
2827#include < CCDB/BasicCCDBManager.h>
28+ #include < DataFormatsFIT/Triggers.h>
2929#include < DataFormatsParameters/GRPLHCIFData.h>
3030#include < DataFormatsTOF/ParameterContainers.h>
3131#include < Framework/ASoA.h>
5656#include < map>
5757#include < memory>
5858#include < string>
59+ #include < utility>
5960#include < vector>
6061
6162using namespace o2 ;
@@ -73,7 +74,12 @@ using Run3TrksWtof = soa::Join<Run3Trks, aod::TOFSignal>;
7374using Run3TrksWtofWevTime = soa::Join<Run3TrksWtof, aod::TOFEvTime, aod::pidEvTimeFlags>;
7475
7576using EvTimeCollisions = soa::Join<Run3Cols, aod::EvSels>;
77+ // #define MERGEWITHFT0
78+ #ifndef MERGEWITHFT0
7679using EvTimeCollisionsFT0 = soa::Join<EvTimeCollisions, aod::FT0sCorrected>;
80+ #else
81+ using EvTimeCollisionsFT0 = EvTimeCollisions;
82+ #endif
7783
7884using Run2Trks = o2::soa::Join<aod::Tracks, aod::TracksExtra>;
7985using Run2TrksWtofWevTime = soa::Join<Run2Trks, aod::TOFSignal, aod::TOFEvTime, aod::pidEvTimeFlags>;
@@ -537,7 +543,9 @@ struct tofEventTime {
537543 Produces<o2::aod::TOFEvTime> tableEvTime;
538544 Produces<o2::aod::EvTimeTOFOnly> tableEvTimeTOFOnly;
539545 Produces<o2::aod::pidEvTimeFlags> tableFlags;
546+ #ifdef MERGEWITHFT0
540547 Produces<o2::aod::FT0sCorrected> tableFt0;
548+ #endif
541549 static constexpr bool kRemoveTOFEvTimeBias = true ; // Flag to subtract the Ev. Time bias for low multiplicity events with TOF
542550 static constexpr float kDiamond = 6.0 ; // Collision diamond used in the estimation of the TOF event time
543551 static constexpr float kErrDiamond = kDiamond * 33 .356409f ;
@@ -660,13 +668,18 @@ struct tofEventTime {
660668 using ResponseImplementationEvTime = o2::pid::tof::ExpTimes<Run3TrksWtof::iterator, pid>;
661669 void processRun3 (Run3TrksWtof const & tracks,
662670 aod::FT0s const &,
671+ #ifdef MERGEWITHFT0
663672 EvTimeCollisions const & collisions,
673+ #else
674+ EvTimeCollisionsFT0 const &,
675+ #endif
664676 aod::BCsWithTimestamps const & bcs)
665677 {
666678 if (!enableTableTOFEvTime) {
667679 return ;
668680 }
669681 LOG (debug) << " Processing Run3 data for TOF event time" ;
682+ #ifdef MERGEWITHFT0
670683
671684 std::map<uint64_t , std::pair<float , float >> collisionFt0Map;
672685 tableFt0.reserve (collisions.size ());
@@ -696,6 +709,7 @@ struct tofEventTime {
696709 tableFt0 (t0A, t0C);
697710 collisionFt0Map[collision.globalIndex ()] = std::make_pair (t0A, t0C); // Store the T0A and T0C for the collision
698711 }
712+ #endif
699713 tableEvTime.reserve (tracks.size ());
700714 tableFlags.reserve (tracks.size ());
701715 if (enableTableEvTimeTOFOnly) {
@@ -741,8 +755,9 @@ struct tofEventTime {
741755 lastCollisionId = t.collisionId (); // / Cache last collision ID
742756
743757 const auto & tracksInCollision = tracks.sliceBy (perCollision, lastCollisionId);
744- // const auto& collision = t.collision_as<EvTimeCollisions>();
745-
758+ #ifndef MERGEWITHFT0
759+ const auto & collision = t.collision_as <EvTimeCollisionsFT0>();
760+ #endif
746761 // Compute the TOF event time
747762 const auto evTimeMakerTOF = evTimeMakerForTracks<Run3TrksWtof::iterator, filterForTOFEventTime, o2::pid::tof::ExpTimes>(tracksInCollision, mRespParamsV3 , kDiamond );
748763
@@ -774,6 +789,7 @@ struct tofEventTime {
774789 sumOfWeights += weight;
775790 }
776791
792+ #ifdef MERGEWITHFT0
777793 float t0A = collisionFt0Map[t.collisionId ()].first ; // T0A for the collision
778794 float t0C = collisionFt0Map[t.collisionId ()].second ; // T0C for the collision
779795
@@ -783,6 +799,15 @@ struct tofEventTime {
783799 t0AC[1 ] = 0.5 * std::abs (t0A - t0C) * 1000 .f ;
784800 flags |= o2::aod::pidflags::enums::PIDFlags::EvTimeT0AC;
785801
802+ #else
803+ if (collision.has_foundFT0 ()) { // T0 measurement is available
804+ // const auto& ft0 = collision.foundFT0();
805+ if (collision.t0ACValid ()) {
806+ t0AC[0 ] = collision.t0AC () * 1000 .f ;
807+ t0AC[1 ] = collision.t0resolution () * 1000 .f ;
808+ flags |= o2::aod::pidflags::enums::PIDFlags::EvTimeT0AC;
809+ }
810+ #endif
786811 weight = 1 .f / (t0AC[1 ] * t0AC[1 ]);
787812 eventTime += t0AC[0 ] * weight;
788813 sumOfWeights += weight;
@@ -856,6 +881,7 @@ struct tofEventTime {
856881 tableEvTime (0 .f , 999 .f );
857882 continue ;
858883 }
884+ #ifdef MERGEWITHFT0
859885
860886 float t0A = collisionFt0Map[t.collisionId ()].first ; // T0A for the collision
861887 float t0C = collisionFt0Map[t.collisionId ()].second ; // T0C for the collision
@@ -870,6 +896,20 @@ struct tofEventTime {
870896 }
871897 tableFlags (flags);
872898 tableEvTime (t0AC[0 ], t0AC[1 ]);
899+ #else
900+ const auto & collision = t.collision_as <EvTimeCollisionsFT0>();
901+
902+ if (collision.has_foundFT0 ()) { // T0 measurement is available
903+ // const auto& ft0 = collision.foundFT0();
904+ if (collision.t0ACValid ()) {
905+ tableFlags (o2::aod::pidflags::enums::PIDFlags::EvTimeT0AC);
906+ tableEvTime (collision.t0AC () * 1000 .f , collision.t0resolution () * 1000 .f );
907+ continue ;
908+ }
909+ }
910+ tableFlags (0 );
911+ tableEvTime (0 .f , 999 .f );
912+ #endif
873913 }
874914 } else { // Error
875915 LOG (fatal) << " Invalid configuration for TOF event time computation" ;
0 commit comments