4747#include < TRandom3.h>
4848
4949#include < cmath>
50+ #include < concepts>
5051#include < string>
52+ #include < type_traits>
5153#include < utility>
5254#include < vector>
5355
@@ -59,6 +61,12 @@ using namespace o2::track;
5961using namespace o2 ::dataformats;
6062using namespace o2 ::dpg_tpcskimstablecreator;
6163
64+ using V0sWithID = soa::Join<aod::V0Datas, aod::V0MapID, aod::V0TOFNSigmas>;
65+ using CascsWithID = soa::Join<aod::CascDatas, aod::CascMapID, aod::CascTOFNSigmas>;
66+
67+ template <typename T>
68+ concept V0OrCasc = std::same_as<T, V0sWithID::iterator> || std::same_as<T, CascsWithID::iterator>;
69+
6270struct TreeWriterTpcV0 {
6371
6472 Produces<o2::aod::SkimmedTPCV0Tree> rowTPCTree;
@@ -144,8 +152,6 @@ struct TreeWriterTpcV0 {
144152 using TrksWithDEdxCorrection = soa::Join<Trks, aod::DEdxsCorrected>;
145153 using Colls = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
146154 using MyBCTable = soa::Join<aod::BCsWithTimestamps, aod::BCTFinfoTable>;
147- using V0sWithID = soa::Join<aod::V0Datas, aod::V0MapID, aod::V0TOFNSigmas>;
148- using CascsWithID = soa::Join<aod::CascDatas, aod::CascMapID, aod::CascTOFNSigmas>;
149155 using TrksTmo = soa::Join<Trks, aod::TrackToTmo>;
150156 using TrksTmoWithDEdxCorrection = soa::Join<Trks, aod::DEdxsCorrected, aod::TrackToTmo>;
151157
@@ -379,35 +385,29 @@ struct TreeWriterTpcV0 {
379385 } // / fillSkimmedV0Table
380386
381387 // / Evaluate cosPA of v0 or casc
382- template <typename V0Casc, typename CollisionType>
388+ template <V0OrCasc V0Casc, typename CollisionType>
383389 double getCosPA (V0Casc const & v0casc, CollisionType const & collision)
384390 {
385- static_assert (std::is_same_v<V0Casc, V0sWithID::iterator> || std::is_same_v<V0Casc, CascsWithID::iterator>,
386- " getCosPA() v0casc's type must be either V0sWithID::iterator or CascsWithID::iterator" );
387391 if constexpr (std::is_same_v<V0Casc, V0sWithID::iterator>)
388392 return v0casc.v0cosPA ();
389393 else
390394 return v0casc.casccosPA (collision.posX (), collision.posY (), collision.posZ ());
391395 }
392396
393397 // / Evaluate radius of v0 or casc
394- template <typename V0Casc>
398+ template <V0OrCasc V0Casc>
395399 double getRadius (V0Casc const & v0casc)
396400 {
397- static_assert (std::is_same_v<V0Casc, V0sWithID::iterator> || std::is_same_v<V0Casc, CascsWithID::iterator>,
398- " getRadius() v0casc's type must be either V0sWithID::iterator or CascsWithID::iterator" );
399401 if constexpr (std::is_same_v<V0Casc, V0sWithID::iterator>)
400402 return v0casc.v0radius ();
401403 else
402404 return v0casc.cascradius ();
403405 }
404406
405407 // / Evaluate add id of v0 or casc
406- template <typename V0Casc>
408+ template <V0OrCasc V0Casc>
407409 int getAddId (V0Casc const & v0casc)
408410 {
409- static_assert (std::is_same_v<V0Casc, V0sWithID::iterator> || std::is_same_v<V0Casc, CascsWithID::iterator>,
410- " getAddId() v0casc's type must be either V0sWithID::iterator or CascsWithID::iterator" );
411411 if constexpr (std::is_same_v<V0Casc, V0sWithID::iterator>)
412412 return v0casc.v0addid ();
413413 else
0 commit comments