@@ -380,8 +380,19 @@ struct TreeWriterTpcV0 {
380380 return casc.cascradius ();
381381 }
382382
383- // / Apply a track quality selection with a filter!
384- void processStandard (Colls::iterator const & collision, soa::Filtered<Trks> const & tracks, V0sWithID const & v0s, CascsWithID const & cascs, aod::BCsWithTimestamps const &)
383+ // / Evaluate tpcSignal with or without correction
384+ template <bool IsCorrecteddEdx, typename TrkType>
385+ double tpcSignalGeneric (const TrkType& track)
386+ {
387+ if constexpr (IsCorrecteddEdx) {
388+ return track.tpcSignalCorrected ();
389+ } else {
390+ return track.tpcSignal ();
391+ }
392+ }
393+
394+ template <bool IsCorrecteddEdx, typename TrksType>
395+ void runStandard (Colls::iterator const & collision, soa::Filtered<TrksType> const & tracks, V0sWithID const & v0s, CascsWithID const & cascs)
385396 {
386397 // / Check event slection
387398 if (!isEventSelected (collision, tracks)) {
@@ -395,144 +406,78 @@ struct TreeWriterTpcV0 {
395406
396407 // / Loop over v0 candidates
397408 for (const auto & v0 : v0s) {
398- auto posTrack = v0.posTrack_as <soa::Filtered<Trks >>();
399- auto negTrack = v0.negTrack_as <soa::Filtered<Trks >>();
409+ auto posTrack = v0.posTrack_as <soa::Filtered<TrksType >>();
410+ auto negTrack = v0.negTrack_as <soa::Filtered<TrksType >>();
400411 if (v0.v0addid () == -1 ) {
401412 continue ;
402413 }
403414 // gamma
404415 if (static_cast <bool >(posTrack.pidbit () & (1 << 0 )) && static_cast <bool >(negTrack.pidbit () & (1 << 0 ))) {
405416 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
406- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (posTrack. tpcSignal ( )), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
417+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (tpcSignalGeneric<IsCorrecteddEdx>(posTrack )), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
407418 }
408419 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
409- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (negTrack. tpcSignal ( )), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
420+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (tpcSignalGeneric<IsCorrecteddEdx>(negTrack )), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
410421 }
411422 }
412423 // Ks0
413424 if (static_cast <bool >(posTrack.pidbit () & (1 << 1 )) && static_cast <bool >(negTrack.pidbit () & (1 << 1 ))) {
414425 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
415- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack. tpcSignal ( )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
426+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (tpcSignalGeneric<IsCorrecteddEdx>(posTrack )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
416427 }
417428 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
418- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack. tpcSignal ( )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
429+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (tpcSignalGeneric<IsCorrecteddEdx>(negTrack )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
419430 }
420431 }
421432 // Lambda
422433 if (static_cast <bool >(posTrack.pidbit () & (1 << 2 )) && static_cast <bool >(negTrack.pidbit () & (1 << 2 ))) {
423434 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
424435 if (std::abs (posTrack.tofNSigmaPr ()) <= nSigmaTOFdautrack) {
425- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (posTrack. tpcSignal ( )), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
436+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (tpcSignalGeneric<IsCorrecteddEdx>(posTrack )), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
426437 }
427438 }
428439 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
429- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack. tpcSignal ( )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
440+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (tpcSignalGeneric<IsCorrecteddEdx>(negTrack )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
430441 }
431442 }
432443 // Antilambda
433444 if (static_cast <bool >(posTrack.pidbit () & (1 << 3 )) && static_cast <bool >(negTrack.pidbit () & (1 << 3 ))) {
434445 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
435- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack. tpcSignal ( )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
446+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (tpcSignalGeneric<IsCorrecteddEdx>(posTrack )), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
436447 }
437448 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
438449 if (std::abs (negTrack.tofNSigmaPr ()) <= nSigmaTOFdautrack) {
439- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (negTrack. tpcSignal ( )), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
450+ fillSkimmedV0Table<IsCorrecteddEdx> (v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (tpcSignalGeneric<IsCorrecteddEdx>(negTrack )), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
440451 }
441452 }
442453 }
443454 }
444455
445456 // / Loop over cascade candidates
446457 for (const auto & casc : cascs) {
447- auto bachTrack = casc.bachelor_as <soa::Filtered<Trks >>();
458+ auto bachTrack = casc.bachelor_as <soa::Filtered<TrksType >>();
448459 if (casc.cascaddid () == kUndef ) {
449460 continue ;
450461 }
451462 // Omega and antiomega
452463 if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
453464 if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, MassKaon, maxPt4dwnsmplTsalisKaons)) {
454- fillSkimmedV0Table (casc, bachTrack, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack. tpcSignal ( )), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
465+ fillSkimmedV0Table<IsCorrecteddEdx> (casc, bachTrack, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (tpcSignalGeneric<IsCorrecteddEdx>(bachTrack )), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
455466 }
456467 }
457468 }
469+ }
458470
471+ // / Apply a track quality selection with a filter!
472+ void processStandard (Colls::iterator const & collision, soa::Filtered<Trks> const & tracks, V0sWithID const & v0s, CascsWithID const & cascs, aod::BCsWithTimestamps const &)
473+ {
474+ runStandard<false , Trks>(collision, tracks, v0s, cascs);
459475 } // / process Standard
460476 PROCESS_SWITCH (TreeWriterTpcV0, processStandard, " Standard V0 Samples for PID" , true );
461477
462478 void processStandardWithCorrecteddEdx (Colls::iterator const & collision, soa::Filtered<TrksWithDEdxCorrection> const & tracks, V0sWithID const & v0s, CascsWithID const & cascs, aod::BCsWithTimestamps const &)
463479 {
464- // / Check event slection
465- if (!isEventSelected (collision, tracks)) {
466- return ;
467- }
468- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
469- const int runnumber = bc.runNumber ();
470- float hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), runnumber, irSource) * 1 .e -3 ;
471-
472- rowTPCTree.reserve (tracks.size ());
473-
474- // / Loop over v0 candidates
475- for (const auto & v0 : v0s) {
476- auto posTrack = v0.posTrack_as <soa::Filtered<TrksWithDEdxCorrection>>();
477- auto negTrack = v0.negTrack_as <soa::Filtered<TrksWithDEdxCorrection>>();
478- if (v0.v0addid () == -1 ) {
479- continue ;
480- }
481- // gamma
482- if (static_cast <bool >(posTrack.pidbit () & (1 << 0 )) && static_cast <bool >(negTrack.pidbit () & (1 << 0 ))) {
483- if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
484- fillSkimmedV0Table<true >(v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (posTrack.tpcSignalCorrected ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
485- }
486- if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisElectrons, MassElectorn, maxPt4dwnsmplTsalisElectrons)) {
487- fillSkimmedV0Table<true >(v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (negTrack.tpcSignalCorrected ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate);
488- }
489- }
490- // Ks0
491- if (static_cast <bool >(posTrack.pidbit () & (1 << 1 )) && static_cast <bool >(negTrack.pidbit () & (1 << 1 ))) {
492- if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
493- fillSkimmedV0Table<true >(v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignalCorrected ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
494- }
495- if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
496- fillSkimmedV0Table<true >(v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignalCorrected ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
497- }
498- }
499- // Lambda
500- if (static_cast <bool >(posTrack.pidbit () & (1 << 2 )) && static_cast <bool >(negTrack.pidbit () & (1 << 2 ))) {
501- if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
502- if (std::abs (posTrack.tofNSigmaPr ()) <= nSigmaTOFdautrack) {
503- fillSkimmedV0Table<true >(v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (posTrack.tpcSignalCorrected ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
504- }
505- }
506- if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
507- fillSkimmedV0Table<true >(v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignalCorrected ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
508- }
509- }
510- // Antilambda
511- if (static_cast <bool >(posTrack.pidbit () & (1 << 3 )) && static_cast <bool >(negTrack.pidbit () & (1 << 3 ))) {
512- if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, MassPion, maxPt4dwnsmplTsalisPions)) {
513- fillSkimmedV0Table<true >(v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignalCorrected ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate);
514- }
515- if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisProtons, MassProton, maxPt4dwnsmplTsalisProtons)) {
516- if (std::abs (negTrack.tofNSigmaPr ()) <= nSigmaTOFdautrack) {
517- fillSkimmedV0Table<true >(v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (negTrack.tpcSignalCorrected ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate);
518- }
519- }
520- }
521- }
522-
523- // / Loop over cascade candidates
524- for (const auto & casc : cascs) {
525- auto bachTrack = casc.bachelor_as <soa::Filtered<TrksWithDEdxCorrection>>();
526- if (casc.cascaddid () == kUndef ) {
527- continue ;
528- }
529- // Omega and antiomega
530- if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
531- if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, MassKaon, maxPt4dwnsmplTsalisKaons)) {
532- fillSkimmedV0Table<true >(casc, bachTrack, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
533- }
534- }
535- }
480+ runStandard<true , TrksWithDEdxCorrection>(collision, tracks, v0s, cascs);
536481 } // / process StandardWithCorrecteddEdx
537482 PROCESS_SWITCH (TreeWriterTpcV0, processStandardWithCorrecteddEdx, " Standard V0 Samples for PID with corrected dEdx" , false );
538483
0 commit comments