@@ -93,6 +93,15 @@ struct eventQC {
9393 Configurable<float > cfg_max_chi2its{" cfg_max_chi2its" , 5.0 , " max chi2/NclsITS" };
9494 Configurable<float > cfg_max_dcaxy{" cfg_max_dcaxy" , 0.2 , " max dca XY for single track in cm" };
9595 Configurable<float > cfg_max_dcaz{" cfg_max_dcaz" , 0.2 , " max dca Z for single track in cm" };
96+ Configurable<float > cfg_min_TPCNsigmaEl{" cfg_min_TPCNsigmaEl" , -1e+10 , " min n sigma e in TPC" };
97+ Configurable<float > cfg_max_TPCNsigmaEl{" cfg_max_TPCNsigmaEl" , +1e+10 , " max n sigma e in TPC" };
98+ Configurable<float > cfg_min_TPCNsigmaPi{" cfg_min_TPCNsigmaPi" , 0.0 , " min n sigma pi in TPC for exclusion" };
99+ Configurable<float > cfg_max_TPCNsigmaPi{" cfg_max_TPCNsigmaPi" , 0.0 , " max n sigma pi in TPC for exclusion" };
100+ Configurable<float > cfg_min_TOFNsigmaEl{" cfg_min_TOFNsigmaEl" , -1e+10 , " min n sigma e in TOF" };
101+ Configurable<float > cfg_max_TOFNsigmaEl{" cfg_max_TOFNsigmaEl" , +1e+10 , " max n sigma e in TOF" };
102+ Configurable<float > cfg_max_mean_its_cluster_size{" cfg_max_mean_its_cluster_size" , 16 .f , " max. <ITS cluster size> x cos(lambda)" };
103+ Configurable<float > cfg_max_p_for_its_cluster_size{" cfg_max_p_for_its_cluster_size" , 0.0 , " ITS cluster size cut is applied below this p" };
104+ Configurable<bool > cfg_requireTOF{" cfg_requireTOF" , false , " require TOF hit" };
96105 } trackcuts;
97106
98107 Service<o2::ccdb::BasicCCDBManager> ccdb;
@@ -503,6 +512,40 @@ struct eventQC {
503512 return true ;
504513 }
505514
515+ template <typename TTrack>
516+ bool isElectron (TTrack const & track)
517+ {
518+ if (track.tpcNSigmaEl () < trackcuts.cfg_min_TPCNsigmaEl || trackcuts.cfg_max_TPCNsigmaEl < track.tpcNSigmaEl ()) {
519+ return false ;
520+ }
521+
522+ if (trackcuts.cfg_min_TPCNsigmaPi < track.tpcNSigmaPi () && track.tpcNSigmaPi () < trackcuts.cfg_max_TPCNsigmaPi ) {
523+ return false ;
524+ }
525+
526+ if (trackcuts.cfg_requireTOF && !track.hasTOF ()) {
527+ return false ;
528+ }
529+
530+ if (track.hasTOF () && (track.tofNSigmaEl () < trackcuts.cfg_min_TOFNsigmaEl || trackcuts.cfg_max_TOFNsigmaEl < track.tofNSigmaEl ())) {
531+ return false ;
532+ }
533+
534+ uint32_t itsClusterSizes = track.itsClusterSizes ();
535+ int total_cluster_size = 0 , nl = 0 ;
536+ for (unsigned int layer = 0 ; layer < 7 ; layer++) {
537+ int cluster_size_per_layer = (itsClusterSizes >> (layer * 4 )) & 0xf ;
538+ if (cluster_size_per_layer > 0 ) {
539+ nl++;
540+ }
541+ total_cluster_size += cluster_size_per_layer;
542+ }
543+ if (static_cast <float >(total_cluster_size) / static_cast <float >(nl) * std::cos (std::atan (track.tgl ())) > trackcuts.cfg_max_mean_its_cluster_size && track.p () < trackcuts.cfg_max_p_for_its_cluster_size ) {
544+ return false ;
545+ }
546+ return true ;
547+ }
548+
506549 template <typename TCollision>
507550 bool isSelectedEvent (TCollision const & collision)
508551 {
@@ -586,8 +629,9 @@ struct eventQC {
586629 if (!isSelectedTrack (track)) {
587630 continue ;
588631 }
589- fillTrackInfo (track);
590-
632+ if (isElectron (track)) {
633+ fillTrackInfo (track);
634+ }
591635 if (fabs (track.eta ()) < 0.8 ) {
592636 nGlobalTracks++;
593637 if (track.isPVContributor ()) {
0 commit comments