diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.cxx
index 66508153186cb65a5d25a995ee677924b8ed8b69..3098ae5deed364324eb8abaefb10e24bb08db35e 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.cxx
@@ -290,7 +290,9 @@ Bool_t PairAnalysis::Process(PairAnalysisEvent* ev1) {
   if (!fNoPairing) {
     for (Int_t itrackArr1 = 0; itrackArr1 < 2; ++itrackArr1) {
       for (Int_t itrackArr2 = itrackArr1; itrackArr2 < 2; ++itrackArr2) {
-        if (!fProcessLS && GetPairIndex(itrackArr1, itrackArr2) != kSEPM)
+        if (!fProcessLS
+            && GetPairIndex(itrackArr1, itrackArr2)
+                 != static_cast<Int_t>(EPairType::kSEPM))
           continue;
         FillPairArrays(itrackArr1, itrackArr2);
       }
@@ -307,7 +309,8 @@ Bool_t PairAnalysis::Process(PairAnalysisEvent* ev1) {
 
   // fill candidate variables
   Double_t ntracks = fTracks[0].GetEntriesFast() + fTracks[1].GetEntriesFast();
-  Double_t npairs  = PairArray(PairAnalysis::kSEPM)->GetEntriesFast();
+  Double_t npairs =
+    PairArray(static_cast<Int_t>(EPairType::kSEPM))->GetEntriesFast();
   PairAnalysisVarManager::SetValue(PairAnalysisVarManager::kTracks, ntracks);
   PairAnalysisVarManager::SetValue(PairAnalysisVarManager::kPairs, npairs);
 
@@ -647,7 +650,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
         isig, fHistoArray && fHistoArray->HasHistClass(sigName));
     }
     // loop over both track arrays
-    for (Int_t i = 0; i < kLegTypes; ++i) {
+    for (Int_t i = 0; i < fLegTypes; ++i) {
       className.Form("Track.%s", fgkTrackClassNames[i]);
       Bool_t trkClass  = fHistos->HasHistClass(className);
       Bool_t trkClass2 = (fHistoArray && fHistoArray->HasHistClass(className));
@@ -702,7 +705,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
   TBits pairClassMC(nsig);
   TBits pairClassMChf(nsig);
   TObjArray arrLegs(100);
-  for (Int_t i = 0; i < (kPairTypes - 1); ++i) {
+  for (Int_t i = 0; i < (fNTypes - 1); ++i) {
     className.Form("Pair.%s", fgkPairClassNames[i]);
     className2.Form("Track.Legs.%s", fgkPairClassNames[i]);
     Bool_t pairClass  = fHistos->HasHistClass(className);
@@ -713,7 +716,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
     Bool_t legClassHits = kFALSE;
 
     // check leg hits and mc signal filling
-    if (i == kSEPM) {
+    if (i == static_cast<Int_t>(EPairType::kSEPM)) {
 
       // loop over all detectors and check for hit histos
       for (ECbmModuleId idet = ECbmModuleId::kRef;
@@ -788,7 +791,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
 
         // check mc filling
         fillMC.ResetAllBits();
-        if (i == kSEPM) {
+        if (i == static_cast<Int_t>(EPairType::kSEPM)) {
           for (Int_t isig = 0; isig < nsig; isig++) {
             // next if nothing needs to be filled
             if (!pairClassMC.TestBitNumber(isig)
@@ -823,7 +826,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
           if (legClass) fHistos->FillClass(className2, values);
           if (legClass2) fHistoArray->FillClass(className2, values);
           // mc signal filling
-          if (i == kSEPM) {
+          if (i == static_cast<Int_t>(EPairType::kSEPM)) {
             for (Int_t isig = 0; isig < nsig; isig++) {
               if (!fillMC.TestBitNumber(isig)) continue;
               sigMC   = (PairAnalysisSignalMC*) fSignalsMC->At(isig);
@@ -845,7 +848,7 @@ void PairAnalysis::FillHistograms(const PairAnalysisEvent* ev,
           if (legClass) fHistos->FillClass(className2, values);
           if (legClass2) fHistoArray->FillClass(className2, values);
           // mc signal filling
-          if (i == kSEPM) {
+          if (i == static_cast<Int_t>(EPairType::kSEPM)) {
             for (Int_t isig = 0; isig < nsig; isig++) {
               if (!fillMC.TestBitNumber(isig)) continue;
               sigMC   = (PairAnalysisSignalMC*) fSignalsMC->At(isig);
@@ -1147,11 +1150,16 @@ void PairAnalysis::PairPreFilter(Int_t arr1,
       if (!track1) continue;
 
       /// pair prefilter leg cuts
+      // pre-pairing filter for the first track candidate in the pairing step
+      // kBothLegs demands that both track candidates fullfill the cuts
+      // kAnyLeg demands that at least one candidate fullfills the cuts
+      // kOneLeg demands exactly one candidate to fullfill the cuts
       if (selectedMaskLeg) {
-        isLeg1selected = (fPairPreFilterLegs.IsSelected(
-                            static_cast<PairAnalysisTrack*>(track1))
-                          == selectedMaskLeg);
-        if (fCutType == kBothLegs && !isLeg1selected) continue;
+        isLeg1selected =
+          (fPairPreFilterLegs.IsSelected(
+             static_cast<PairAnalysisTrack*>(track1))
+           == selectedMaskLeg);  // check cuts for the first track candidate
+        if (fCutType == ECutType::kBothLegs && !isLeg1selected) continue;
       }
 
 
@@ -1160,23 +1168,20 @@ void PairAnalysis::PairPreFilter(Int_t arr1,
         if (!track2) continue;
 
         /// pair prefilter leg cuts
-        /// TODO: check rejection of pairleg only, when non prepair cut is applied!
-        /// NOTE: in mode kAnyLeg do the next check only if track1 was not selected
-        if ((selectedMaskLeg && fCutType != kAnyLeg)
-            || (selectedMaskLeg && fCutType == kAnyLeg && !isLeg1selected)) {
-          isLeg2selected = (fPairPreFilterLegs.IsSelected(
-                              static_cast<PairAnalysisTrack*>(track2))
-                            == selectedMaskLeg);  // apply selection
-          switch (fCutType) {
-            case kBothLegs:
-              if (!isLeg2selected) continue;
-              break;
-            case kAnyLeg:
-              if (!isLeg2selected) continue;
-              break;
-            case kOneLeg:
-              if (isLeg1selected == isLeg2selected) continue;
-              break;
+        if (selectedMaskLeg) {
+          if (fCutType != ECutType::kAnyLeg
+              || (fCutType == ECutType::kAnyLeg && !isLeg1selected)) {
+            isLeg2selected =
+              (fPairPreFilterLegs.IsSelected(
+                 static_cast<PairAnalysisTrack*>(track2))
+               == selectedMaskLeg);  // check cuts for the second track candidate
+            if (fCutType == ECutType::kBothLegs && !isLeg2selected)
+              continue;  // the second track did not fullfill cuts
+            if (fCutType == ECutType::kAnyLeg && !isLeg2selected)
+              continue;  // the first and second track did not fullfill cuts
+            if (fCutType == ECutType::kOneLeg
+                && isLeg1selected == isLeg2selected)
+              continue;  // both tracks have the same value
           }
         }
 
@@ -1374,7 +1379,7 @@ void PairAnalysis::FillPairArrays(Int_t arr1, Int_t arr2) {
   ///       otherwise this will crash in the refiting done in PairAnalysisPairKF
   ///       track rotation is not done here!
   PairAnalysisPair* candidate;
-  if (fUseKF && pairIndex <= kSEMM)
+  if (fUseKF && pairIndex <= static_cast<Int_t>(EPairType::kSEMM))
     candidate = new PairAnalysisPairKF();
   else
     candidate = new PairAnalysisPairLV();
@@ -1406,7 +1411,7 @@ void PairAnalysis::FillPairArrays(Int_t arr1, Int_t arr2) {
       UInt_t cutMask = fPairFilter.IsSelected(candidate);
 
       // cut qa
-      if (pairIndex == kSEPM && fCutQA) {
+      if (pairIndex == static_cast<Int_t>(EPairType::kSEPM) && fCutQA) {
         fQAmonitor->FillAll(candidate);
         fQAmonitor->Fill(cutMask, candidate);
       }
@@ -1423,7 +1428,7 @@ void PairAnalysis::FillPairArrays(Int_t arr1, Int_t arr2) {
       //add the candidate to the candidate array
       PairArray(pairIndex)->Add(candidate);
       //get a new candidate
-      if (fUseKF && pairIndex <= kSEMM)
+      if (fUseKF && pairIndex <= static_cast<Int_t>(EPairType::kSEMM))
         candidate = new PairAnalysisPairKF();
       else
         candidate = new PairAnalysisPairLV();
@@ -1450,7 +1455,7 @@ void PairAnalysis::FillPairArrayTR() {
   else
     candidate = new PairAnalysisPairLV();
   candidate->SetKFUsage(fUseKF);
-  candidate->SetType(kSEPMRot);
+  candidate->SetType(static_cast<Int_t>(EPairType::kSEPMRot));
 
   UInt_t selectedMask = (1 << fPairFilter.GetCuts()->GetEntries()) - 1;
   // loop over track arrays
@@ -1475,16 +1480,17 @@ void PairAnalysis::FillPairArrayTR() {
         if (cutMask != selectedMask) continue;
 
         //histogram array for the pair
-        if (fHistoArray) fHistoArray->Fill((Int_t) kSEPMRot, candidate);
+        if (fHistoArray)
+          fHistoArray->Fill(static_cast<Int_t>(EPairType::kSEPMRot), candidate);
 
         if (fHistos) FillHistogramsPair(candidate);
         if (fStoreRotatedPairs) {
           if (fUseKF)
-            PairArray(kSEPMRot)->Add(
-              static_cast<PairAnalysisPairKF*>(candidate->Clone()));
+            PairArray(static_cast<Int_t>(EPairType::kSEPMRot))
+              ->Add(static_cast<PairAnalysisPairKF*>(candidate->Clone()));
           else
-            PairArray(kSEPMRot)->Add(
-              static_cast<PairAnalysisPairLV*>(candidate->Clone()));
+            PairArray(static_cast<Int_t>(EPairType::kSEPMRot))
+              ->Add(static_cast<PairAnalysisPairLV*>(candidate->Clone()));
           // if(fUseKF) PairArray(kSEPMRot)->Add(new PairAnalysisPairKF(*candidate);
           // else       PairArray(kSEPMRot)->Add(new PairAnalysisPairLV(*candidate);
         }
@@ -1547,10 +1553,12 @@ PairAnalysis::FillMCHistograms(Int_t label1, Int_t label2, Int_t nSignal) {
   //  printf("leg/mother labels: %d/%d %d/%d \t part %p,%p \n",label1,mLabel1,label2,mLabel2,part1,part2);
 
   // check the same mother option
-  if (sigMC->GetMothersRelation() == PairAnalysisSignalMC::kSame
+  if (sigMC->GetMothersRelation()
+        == PairAnalysisSignalMC::EBranchRelation::kSame
       && mLabel1 != mLabel2)
     return kFALSE;
-  if (sigMC->GetMothersRelation() == PairAnalysisSignalMC::kDifferent
+  if (sigMC->GetMothersRelation()
+        == PairAnalysisSignalMC::EBranchRelation::kDifferent
       && mLabel1 == mLabel2)
     return kFALSE;
 
@@ -1655,7 +1663,7 @@ void PairAnalysis::FillHistogramsFromPairArray(
 
   //Fill Pair information, separately for all pair candidate arrays and the legs
   TObjArray arrLegs(100);
-  for (Int_t i = 0; i < (kPairTypes - 1); ++i) {
+  for (Int_t i = 0; i < (fNTypes - 1); ++i) {
     Int_t npairs = PairArray(i)->GetEntriesFast();
     if (npairs < 1) continue;
 
@@ -1673,7 +1681,7 @@ void PairAnalysis::FillHistogramsFromPairArray(
       UInt_t cutMask = fPairFilter.IsSelected(pair);
 
       // cut qa
-      if (i == kSEPM && fCutQA) {
+      if (i == static_cast<Int_t>(EPairType::kSEPM) && fCutQA) {
         fQAmonitor->FillAll(pair);
         fQAmonitor->Fill(cutMask, pair);
       }
@@ -1773,7 +1781,7 @@ void PairAnalysis::FillCutStepHistograms(AnalysisFilter* filter,
         /// fill track histos only once
         if (!isig) {
           histo.FillClass(classNamePM, values);
-          for (Int_t i = 0; i < kLegTypes; ++i) {
+          for (Int_t i = 0; i < fLegTypes; ++i) {
             className.Form("Track.%s", fgkTrackClassNames[i]);
             histo.FillClass(className, values);
           }
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.h
index 4357cee9c9de25cca4b13c4484e2a32e8fdcc868..2fb5e830406dcaaec35c4370f8554f80632bf541 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysis.h
@@ -23,7 +23,7 @@ class PairAnalysis : public TNamed {
 
   friend class PairAnalysisMixingHandler;  //mixing as friend class
 public:
-  enum EPairType {
+  enum class EPairType {
     kSEPP = 0,
     kSEPM,
     kSEMM,
@@ -34,8 +34,10 @@ public:
     kSEPMRot,
     kPairTypes
   };
-  enum ELegType { kSEP, kSEM, kLegTypes };
-  enum CutType {
+  static constexpr Int_t fNTypes = static_cast<Int_t>(EPairType::kPairTypes);
+  enum class ELegType { kSEP, kSEM, kLegTypes };
+  static constexpr Int_t fLegTypes = static_cast<Int_t>(ELegType::kLegTypes);
+  enum class ECutType {
     kBothLegs = 0,
     kAnyLeg,
     kOneLeg
@@ -67,7 +69,7 @@ public:
   AnalysisFilter& GetTrackFilterMC() { return fTrackFilterMC; }
   AnalysisFilter& GetPairFilterMC() { return fPairFilterMC; }
 
-  void SetPairPreFilterLegCutType(CutType type) { fCutType = type; }
+  void SetPairPreFilterLegCutType(ECutType type) { fCutType = type; }
   void SetCutQA(Bool_t qa = kTRUE) { fCutQA = qa; }
   void SetNoPairing(Bool_t noPairing = kTRUE) { fNoPairing = noPairing; }
   Bool_t IsNoPairing() { return fNoPairing; }
@@ -79,7 +81,7 @@ public:
     return (i >= 0 && i < 4) ? &fTracks[i] : 0;
   }
   const TObjArray* GetPairArray(Int_t i) const {
-    return (i >= 0 && i < kPairTypes)
+    return (i >= 0 && i < fNTypes)
              ? static_cast<TObjArray*>(fPairCandidates->UncheckedAt(i))
              : 0;
   }
@@ -196,7 +198,8 @@ private:
 
   TObjArray* fSignalsMC = NULL;  // array of PairAnalysisSignalMC
 
-  CutType fCutType = kBothLegs;  // type of pairprefilterleg cut logic
+  ECutType fCutType =
+    ECutType::kBothLegs;  // type of pairprefilterleg cut logic
   Bool_t fNoPairing =
     kFALSE;  // if to skip pairing, can be used for track QA only
   Bool_t fProcessLS = kTRUE;   // do the like-sign pairing
@@ -285,14 +288,14 @@ inline Int_t PairAnalysis::GetPairIndex(Int_t arr1, Int_t arr2) const {
   //
   // get pair index
   //
-  if (arr1 == 0 && arr2 == arr1) return kSEPP;
-  if (arr1 == 0 && arr2 == 1) return kSEPM;
-  if (arr1 == 1 && arr2 == arr1) return kSEMM;
-  if (arr1 == 0 && arr2 == 2) return kMEPP;
-  if (arr1 == 1 && arr2 == 2) return kMEMP;
-  if (arr1 == 0 && arr2 == 3) return kMEPM;
-  if (arr1 == 1 && arr2 == 3) return kMEMM;
-  return kSEPMRot;
+  if (arr1 == 0 && arr2 == arr1) return static_cast<Int_t>(EPairType::kSEPP);
+  if (arr1 == 0 && arr2 == 1) return static_cast<Int_t>(EPairType::kSEPM);
+  if (arr1 == 1 && arr2 == arr1) return static_cast<Int_t>(EPairType::kSEMM);
+  if (arr1 == 0 && arr2 == 2) return static_cast<Int_t>(EPairType::kMEPP);
+  if (arr1 == 1 && arr2 == 2) return static_cast<Int_t>(EPairType::kMEMP);
+  if (arr1 == 0 && arr2 == 3) return static_cast<Int_t>(EPairType::kMEPM);
+  if (arr1 == 1 && arr2 == 3) return static_cast<Int_t>(EPairType::kMEMM);
+  return static_cast<Int_t>(EPairType::kSEPMRot);
 }
 
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.cxx
index 9f416b4276827a1b7e822dc8286142abb6785ee7..a9edb341924444a7e267cbc432eaa77213ded448 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.cxx
@@ -39,7 +39,7 @@ ClassImp(PairAnalysisCutCombi)
   , fNActiveCuts(0)
   , fActiveCutsMask(0)
   , fSelectedCutsMask(0)
-  , fCutType(kAll) {
+  , fCutType(ECutType::kAll) {
   //
   // Default Constructor
   //
@@ -55,7 +55,7 @@ PairAnalysisCutCombi::PairAnalysisCutCombi(const char* name, const char* title)
   , fNActiveCuts(0)
   , fActiveCutsMask(0)
   , fSelectedCutsMask(0)
-  , fCutType(kAll) {
+  , fCutType(ECutType::kAll) {
   //
   // Named Constructor
   //
@@ -132,12 +132,13 @@ Bool_t PairAnalysisCutCombi::IsSelected(Double_t* const values) {
     if (!fCuts[iCut]->IsSelected(values)) CLRBIT(fSelectedCutsMask, iCut);
 
     // cut type and intermediate decision
-    if (fCutType == kAll && !TESTBIT(fSelectedCutsMask, iCut)) return kFALSE;
+    if (fCutType == ECutType::kAll && !TESTBIT(fSelectedCutsMask, iCut))
+      return kFALSE;
   }
 
   // cut type and final decision
   Bool_t isSelected = (fSelectedCutsMask == fActiveCutsMask);
-  if (fCutType == kAny) isSelected = (fSelectedCutsMask > 0);
+  if (fCutType == ECutType::kAny) isSelected = (fSelectedCutsMask > 0);
   SetSelected(isSelected);
   return isSelected;
 }
@@ -149,7 +150,7 @@ void PairAnalysisCutCombi::Print(const Option_t* /*option*/) const {
   //
   printf("-----------------------------------------------------------------\n");
   printf("cut ranges for '%s'\n", GetTitle());
-  if (fCutType == kAll) {
+  if (fCutType == ECutType::kAll) {
     printf("All Cuts have to be fulfilled\n");
   } else {
     printf("Any Cut has to be fulfilled\n");
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.h
index de128f37643817fc8e7441bc7a175d3f485adc94..15552f00d76b77e0119a6a6b4932e2921765a306 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutCombi.h
@@ -20,7 +20,7 @@ class PairAnalysisVarManager;
 class PairAnalysisCutCombi : public AnalysisCuts {
 public:
   // Whether all cut criteria have to be fulfilled of just any
-  enum CutType { kAll = 0, kAny };
+  enum class ECutType { kAll = 0, kAny };
 
   PairAnalysisCutCombi();
   PairAnalysisCutCombi(const char* name, const char* title);
@@ -29,10 +29,10 @@ public:
   void AddCut(AnalysisCuts* cuts, AnalysisCuts* range);
 
   // setters
-  void SetCutType(CutType type) { fCutType = type; }
+  void SetCutType(ECutType type) { fCutType = type; }
 
   // getters
-  CutType GetCutType() const { return fCutType; }
+  ECutType GetCutType() const { return fCutType; }
   Int_t GetNCuts() { return fNActiveCuts; }
 
   //
@@ -50,14 +50,14 @@ public:
 
 
 private:
-  enum { kNmaxCuts = 30 };
+  static const Int_t kNmaxCuts = 30;
 
   UShort_t fNActiveCuts;   // number of acive cuts
   UInt_t fActiveCutsMask;  // mask of active cuts
 
   UInt_t
     fSelectedCutsMask;  // Maks of selected cuts, is available after calling IsSelected
-  CutType fCutType;  // type of the cut: any, all
+  ECutType fCutType;    // type of the cut: any, all
 
   AnalysisCuts* fRangeCuts[kNmaxCuts];  // cuts to select a range
   AnalysisCuts* fCuts[kNmaxCuts];       // where these cuts are applied
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.cxx
index 93175f1dfd039126cbbfd00a9808193672739fec..07af6ee5580771ab3d464b9539a1b2e3819731a4 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.cxx
@@ -59,7 +59,7 @@ Bool_t PairAnalysisCutGroup::IsSelected(Double_t* const values) {
 
   TIter listIterator(&fCutGroupList);
   while (AnalysisCuts* thisCut = (AnalysisCuts*) listIterator()) {
-    if (fCompOperator == kCompOR) {
+    if (fCompOperator == static_cast<Bool_t>(ETruthValues::kCompOR)) {
       selectionResult = (selectionResult || thisCut->IsSelected(values));
     } else {  //kCompAND
       selectionResult = (selectionResult && thisCut->IsSelected(values));
@@ -113,7 +113,7 @@ void PairAnalysisCutGroup::Print(const Option_t* /*option*/) const {
 
   printf("*****************************************************************\n");
   printf("cut group '%s'\n", GetTitle());
-  if (fCompOperator == kCompAND) {
+  if (fCompOperator == static_cast<Bool_t>(ETruthValues::kCompAND)) {
     printf("Cut are compared with AND \n");
   } else {
     printf("Cut are compared with OR \n");
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.h
index 1e928d16f638dad3da1ff9c26c6f60d438647af9..35c56374d661c2b74326a836ea210c500fb5b2a7 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutGroup.h
@@ -23,12 +23,14 @@ class TCollection;
 class PairAnalysisCutGroup : public AnalysisCuts {
 
 public:
-  enum TruthValues { kCompAND = kTRUE, kCompOR = kFALSE };
-
-  PairAnalysisCutGroup(Bool_t compOperator = kCompOR);
-  PairAnalysisCutGroup(const char* name,
-                       const char* title,
-                       Bool_t compOperator = kCompOR);
+  enum class ETruthValues { kCompAND = kTRUE, kCompOR = kFALSE };
+
+  PairAnalysisCutGroup(
+    Bool_t compOperator = static_cast<Bool_t>(ETruthValues::kCompOR));
+  PairAnalysisCutGroup(
+    const char* name,
+    const char* title,
+    Bool_t compOperator = static_cast<Bool_t>(ETruthValues::kCompOR));
 
   virtual ~PairAnalysisCutGroup();
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.cxx
index 125db4345d5677748bb29d5a8113531d6597b3ec..10f37de15882e8ac7c53d42e5da7de539a717dd4 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.cxx
@@ -53,18 +53,18 @@ PairAnalysisCutQA::PairAnalysisCutQA(const char* name, const char* title)
   //
   // Named Constructor
   //
-  for (Int_t itype = 0; itype < kNtypes; itype++) {
+  for (Int_t itype = 0; itype < fNtypes; itype++) {
     fNCuts[itype] = 1;
     for (Int_t i = 0; i < 20; i++) {
       fCutNames[i][itype] = "";
     }
   }
-  fTypeKeys[kTrack]   = "Track";
-  fTypeKeys[kTrack2]  = "FinalTrack";
-  fTypeKeys[kTrackMC] = "MCTrack";
-  fTypeKeys[kPair]    = "Pair";
-  fTypeKeys[kPrePair] = "PrePair";
-  fTypeKeys[kEvent]   = "Event";
+  fTypeKeys[static_cast<Int_t>(ETypes::kTrack)]   = "Track";
+  fTypeKeys[static_cast<Int_t>(ETypes::kTrack2)]  = "FinalTrack";
+  fTypeKeys[static_cast<Int_t>(ETypes::kTrackMC)] = "MCTrack";
+  fTypeKeys[static_cast<Int_t>(ETypes::kPair)]    = "Pair";
+  fTypeKeys[static_cast<Int_t>(ETypes::kPrePair)] = "PrePair";
+  fTypeKeys[static_cast<Int_t>(ETypes::kEvent)]   = "Event";
   fQAHistList.SetOwner(kFALSE);
 }
 
@@ -104,10 +104,10 @@ void PairAnalysisCutQA::Init() {
   const TVectorD* binsPdg = PairAnalysisHelper::MakeLinBinning(5, 0, 5);
   const TVectorD* binsDet = PairAnalysisHelper::MakeLinBinning(6, 0, 6);
   // loop over all types
-  for (Int_t itype = 0; itype < kNtypes; itype++) {
+  for (Int_t itype = 0; itype < fNtypes; itype++) {
     //    printf("\n type: %d\n",itype);
     TString logic = "passed";
-    if (itype == kPrePair) logic = "rejected";
+    if (itype == static_cast<Int_t>(ETypes::kPrePair)) logic = "rejected";
 
     const TVectorD* binsX =
       PairAnalysisHelper::MakeLinBinning(fNCuts[itype], 0, fNCuts[itype]);
@@ -119,7 +119,8 @@ void PairAnalysisCutQA::Init() {
       fNCuts[itype],
       binsX->GetMatrixArray());
 
-    if (itype == kTrack || itype == kTrack2) {
+    if (itype == static_cast<Int_t>(ETypes::kTrack)
+        || itype == static_cast<Int_t>(ETypes::kTrack2)) {
       fPdgCutQA = new TH2I(Form("%sPDG", fTypeKeys[itype]),
                            Form("%sPDG;cuts;PDG code;# %s %ss",
                                 fTypeKeys[itype],
@@ -148,10 +149,10 @@ void PairAnalysisCutQA::Init() {
 
     // Set labels to histograms
     fCutNames[0][itype] = "no cuts";
-    if (fNCuts[kPrePair] > 1)
-      fCutNames[0][kTrack2] = "pair prefilter";
+    if (fNCuts[static_cast<Int_t>(ETypes::kPrePair)] > 1)
+      fCutNames[0][static_cast<Int_t>(ETypes::kTrack2)] = "pair prefilter";
     else
-      fCutNames[0][kTrack2] = "1st track filter";
+      fCutNames[0][static_cast<Int_t>(ETypes::kTrack2)] = "1st track filter";
     // loop over all cuts
     for (Int_t i = 0; i < fNCuts[itype]; i++) {
       fCutQA->GetXaxis()->SetBinLabel(i + 1, fCutNames[i][itype]);
@@ -207,13 +208,13 @@ void PairAnalysisCutQA::Init() {
 
     // add to output list
     switch (itype) {
-      case kEvent:
+      case static_cast<Int_t>(ETypes::kEvent):
         static_cast<THashList*>(fQAHistList.FindObject("Event"))
           ->AddLast(fCutQA);
         break;
-      case kTrack:
-      case kTrack2:
-      case kTrackMC:
+      case static_cast<Int_t>(ETypes::kTrack):
+      case static_cast<Int_t>(ETypes::kTrack2):
+      case static_cast<Int_t>(ETypes::kTrackMC):
         static_cast<THashList*>(fQAHistList.FindObject("Track"))
           ->AddLast(fCutQA);
         if (fPdgCutQA)
@@ -223,8 +224,8 @@ void PairAnalysisCutQA::Init() {
           static_cast<THashList*>(fQAHistList.FindObject("Track"))
             ->AddLast(fEffCutQA);
         break;
-      case kPair:
-      case kPrePair:
+      case static_cast<Int_t>(ETypes::kPair):
+      case static_cast<Int_t>(ETypes::kPrePair):
         static_cast<THashList*>(fQAHistList.FindObject("Pair"))
           ->AddLast(fCutQA);
         break;
@@ -249,9 +250,10 @@ void PairAnalysisCutQA::AddTrackFilter(AnalysisFilter* filter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kTrack]][kTrack] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kTrack)]]
+               [static_cast<Int_t>(ETypes::kTrack)] = thisCut->GetTitle();
       //      printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kTrack]);
-      fNCuts[kTrack]++;
+      fNCuts[static_cast<Int_t>(ETypes::kTrack)]++;
     }
 
   }  // pair filter loop
@@ -270,9 +272,10 @@ void PairAnalysisCutQA::AddTrackFilterMC(AnalysisFilter* filter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kTrackMC]][kTrackMC] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kTrackMC)]]
+               [static_cast<Int_t>(ETypes::kTrackMC)] = thisCut->GetTitle();
       //      printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kTrack]);
-      fNCuts[kTrackMC]++;
+      fNCuts[static_cast<Int_t>(ETypes::kTrackMC)]++;
     }
 
   }  // pair filter loop
@@ -291,9 +294,10 @@ void PairAnalysisCutQA::AddTrackFilter2(AnalysisFilter* filter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kTrack2]][kTrack2] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kTrack2)]]
+               [static_cast<Int_t>(ETypes::kTrack2)] = thisCut->GetTitle();
       //      printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kTrack]);
-      fNCuts[kTrack2]++;
+      fNCuts[static_cast<Int_t>(ETypes::kTrack2)]++;
     }
 
   }  // pair filter loop
@@ -312,9 +316,10 @@ void PairAnalysisCutQA::AddPairFilter(AnalysisFilter* pairFilter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kPair]][kPair] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kPair)]]
+               [static_cast<Int_t>(ETypes::kPair)] = thisCut->GetTitle();
       //  printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kPair]);
-      fNCuts[kPair]++;
+      fNCuts[static_cast<Int_t>(ETypes::kPair)]++;
     }
 
   }  // trk filter loop
@@ -333,9 +338,10 @@ void PairAnalysisCutQA::AddPrePairFilter(AnalysisFilter* pairFilter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kPrePair]][kPrePair] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kPrePair)]]
+               [static_cast<Int_t>(ETypes::kPrePair)] = thisCut->GetTitle();
       //  printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kPair]);
-      fNCuts[kPrePair]++;
+      fNCuts[static_cast<Int_t>(ETypes::kPrePair)]++;
     }
 
   }  // trk filter loop
@@ -354,9 +360,10 @@ void PairAnalysisCutQA::AddEventFilter(AnalysisFilter* eventFilter) {
 
     // add new cut class to the list
     if (addCut) {
-      fCutNames[fNCuts[kEvent]][kEvent] = thisCut->GetTitle();
+      fCutNames[fNCuts[static_cast<Int_t>(ETypes::kEvent)]]
+               [static_cast<Int_t>(ETypes::kEvent)] = thisCut->GetTitle();
       //      printf("add cut %s to %d \n",thisCut->GetTitle(),fNCuts[kEvent]);
-      fNCuts[kEvent]++;
+      fNCuts[static_cast<Int_t>(ETypes::kEvent)]++;
     }
 
   }  // trk filter loop
@@ -373,7 +380,8 @@ void PairAnalysisCutQA::Fill(UInt_t mask, TObject* obj, UInt_t addIdx) {
   // pdg to pdg label
   Int_t pdg      = 0;
   TString pdglbl = "";
-  if (idx == kTrack || idx == kTrack2) {
+  if (idx == static_cast<Int_t>(ETypes::kTrack)
+      || idx == static_cast<Int_t>(ETypes::kTrack2)) {
     pdg = (Int_t)(static_cast<PairAnalysisTrack*>(obj)->PdgCode());
     switch (TMath::Abs(pdg)) {
       case 11: pdglbl = "electron"; break;  // electron
@@ -387,16 +395,16 @@ void PairAnalysisCutQA::Fill(UInt_t mask, TObject* obj, UInt_t addIdx) {
   // find histolist
   THashList* histos = 0x0;
   switch (idx) {
-    case kEvent:
+    case static_cast<Int_t>(ETypes::kEvent):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Event"));
       break;
-    case kTrack:
-    case kTrack2:
-    case kTrackMC:
+    case static_cast<Int_t>(ETypes::kTrack):
+    case static_cast<Int_t>(ETypes::kTrack2):
+    case static_cast<Int_t>(ETypes::kTrackMC):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Track"));
       break;
-    case kPair:
-    case kPrePair:
+    case static_cast<Int_t>(ETypes::kPair):
+    case static_cast<Int_t>(ETypes::kPrePair):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Pair"));
       break;
   }
@@ -415,7 +423,8 @@ void PairAnalysisCutQA::Fill(UInt_t mask, TObject* obj, UInt_t addIdx) {
           ->Fill(cutstep, pdglbl.Data(), 1.);
 
       // fill detector dependent
-      if (idx == kTrack || idx == kTrack2) {
+      if (idx == static_cast<Int_t>(ETypes::kTrack)
+          || idx == static_cast<Int_t>(ETypes::kTrack2)) {
         TProfile2D* detQA = static_cast<TProfile2D*>(
           histos->FindObject(Form("%sMatchEff", fTypeKeys[idx])));
         PairAnalysisTrack* t = static_cast<PairAnalysisTrack*>(obj);
@@ -455,7 +464,8 @@ void PairAnalysisCutQA::FillAll(TObject* obj, UInt_t addIdx) {
   // pdg to pdg label
   Int_t pdg      = 0;
   TString pdglbl = "";
-  if (idx == kTrack || idx == kTrack2) {
+  if (idx == static_cast<Int_t>(ETypes::kTrack)
+      || idx == static_cast<Int_t>(ETypes::kTrack2)) {
     pdg = (Int_t)(static_cast<PairAnalysisTrack*>(obj)->PdgCode());
     switch (TMath::Abs(pdg)) {
       case 11: pdglbl = "electron"; break;  // electron
@@ -469,16 +479,16 @@ void PairAnalysisCutQA::FillAll(TObject* obj, UInt_t addIdx) {
   // find histolist
   THashList* histos = 0x0;
   switch (idx) {
-    case kEvent:
+    case static_cast<Int_t>(ETypes::kEvent):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Event"));
       break;
-    case kTrack:
-    case kTrack2:
-    case kTrackMC:
+    case static_cast<Int_t>(ETypes::kTrack):
+    case static_cast<Int_t>(ETypes::kTrack2):
+    case static_cast<Int_t>(ETypes::kTrackMC):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Track"));
       break;
-    case kPair:
-    case kPrePair:
+    case static_cast<Int_t>(ETypes::kPair):
+    case static_cast<Int_t>(ETypes::kPrePair):
       histos = static_cast<THashList*>(fQAHistList.FindObject("Pair"));
       break;
   }
@@ -490,7 +500,8 @@ void PairAnalysisCutQA::FillAll(TObject* obj, UInt_t addIdx) {
       ->Fill(0., pdglbl.Data(), 1.);
 
   // fill detector dependent
-  if (idx == kTrack || idx == kTrack2) {
+  if (idx == static_cast<Int_t>(ETypes::kTrack)
+      || idx == static_cast<Int_t>(ETypes::kTrack2)) {
     TProfile2D* detQA = static_cast<TProfile2D*>(
       histos->FindObject(Form("%sMatchEff", fTypeKeys[idx])));
     PairAnalysisTrack* t = static_cast<PairAnalysisTrack*>(obj);
@@ -522,15 +533,15 @@ UInt_t PairAnalysisCutQA::GetObjIndex(TObject* obj) {
   //
   //  printf("INFO: object type is a %s \n", obj->IsA()->GetName());
   if (obj->IsA() == CbmMCTrack::Class())
-    return kTrackMC;
+    return static_cast<Int_t>(ETypes::kTrackMC);
   else if (obj->IsA() == PairAnalysisTrack::Class())
-    return kTrack;
+    return static_cast<Int_t>(ETypes::kTrack);
   else if (obj->IsA() == PairAnalysisPairLV::Class())
-    return kPair;
+    return static_cast<Int_t>(ETypes::kPair);
   else if (obj->IsA() == PairAnalysisPairKF::Class())
-    return kPair;
+    return static_cast<Int_t>(ETypes::kPair);
   else if (obj->IsA() == PairAnalysisEvent::Class())
-    return kEvent;
+    return static_cast<Int_t>(ETypes::kEvent);
   else
     fprintf(stderr,
             "ERROR: object type not supported, please let the author know "
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.h
index 4a72d89df792741db8191e1301d27111c8af1b56..ef2ad650c5456e36e48d292b05d7dc8f0b7d42ae 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisCutQA.h
@@ -24,7 +24,15 @@ class TCollection;
 class PairAnalysisCutQA : public TNamed {
 
 public:
-  enum { kEvent = 0, kTrack, kTrack2, kTrackMC, kPair, kPrePair, kNtypes };
+  enum class ETypes {
+    kEvent = 0,
+    kTrack,
+    kTrack2,
+    kTrackMC,
+    kPair,
+    kPrePair,
+    kNtypes
+  };
 
   PairAnalysisCutQA();
   PairAnalysisCutQA(const char* name, const char* title);
@@ -46,10 +54,11 @@ public:
 
 
 private:
-  THashList fQAHistList;               //-> list of QA histograms
-  Int_t fNCuts[kNtypes];               // number of cuts
-  const char* fCutNames[20][kNtypes];  // cut names
-  const char* fTypeKeys[kNtypes];      // type names
+  THashList fQAHistList;  //-> list of QA histograms
+  static constexpr Int_t fNtypes = static_cast<Int_t>(ETypes::kNtypes);
+  Int_t fNCuts[fNtypes];               // number of cuts
+  const char* fCutNames[20][fNtypes];  // cut names
+  const char* fTypeKeys[fNtypes];      // type names
 
 
   UInt_t GetObjIndex(TObject* obj);  // return object index
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.cxx
index 4fbce1e74f2d4b0535fd5aef6c70ab849b2c0490..90211da835a924782413e23f2f4078f3bc0f3d83 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.cxx
@@ -242,10 +242,10 @@ void PairAnalysisFunction::SetDefault(EFunction predefinedFunc) {
   /// use a predefined function, that internally sets the "fFuncSigBack"
   ///
   switch (predefinedFunc) {
-    case kBoltzmann: GetBoltzmann(); break;
-    case kPtExp: GetPtExp(); break;
-    case kHagedorn: GetHagedorn(); break;
-    case kLevi: GetLevi(); break;
+    case EFunction::kBoltzmann: GetBoltzmann(); break;
+    case EFunction::kPtExp: GetPtExp(); break;
+    case EFunction::kHagedorn: GetHagedorn(); break;
+    case EFunction::kLevi: GetLevi(); break;
     default: Error("SetDefault", "predefined function not yet implemented");
   }
 }
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.h
index e0b4ecbf18523d57d15390ca4e374249c24ec66e..7d6e70fb0cc02ed9681a20af563edb65527578ad 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisFunction.h
@@ -22,7 +22,7 @@
 class PairAnalysisFunction : public TNamed {
 
 public:
-  enum EFunction { kBoltzmann = 0, kPtExp, kHagedorn, kLevi };
+  enum class EFunction { kBoltzmann = 0, kPtExp, kHagedorn, kLevi };
 
   PairAnalysisFunction();
   PairAnalysisFunction(const char* name, const char* title);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.cxx
index 3b95592c45aef0bc02afb02f701c5776c2fcb16d..8af8fb923dd98ba72ce4d7824193f1262f35a644 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.cxx
@@ -52,12 +52,12 @@ ClassImp(PairAnalysisHF)
   , fUsedVars(new TBits(PairAnalysisVarManager::kNMaxValuesMC))
   , fArrDielHistos()
   , fSignalsMC(0x0)
-  , fVarCutType(new TBits(kMaxCuts))
-  , fAxes(kMaxCuts) {
+  , fVarCutType(new TBits(fMaxCuts))
+  , fAxes(fMaxCuts) {
   //
   // Default Constructor
   //
-  for (Int_t i = 0; i < kMaxCuts; ++i) {
+  for (Int_t i = 0; i < fMaxCuts; ++i) {
     fVarCuts[i] = 0;
     //    fVarCutType[i]=0;
   }
@@ -72,12 +72,12 @@ PairAnalysisHF::PairAnalysisHF(const char* name, const char* title)
   , fUsedVars(new TBits(PairAnalysisVarManager::kNMaxValuesMC))
   , fArrDielHistos()
   , fSignalsMC(0x0)
-  , fVarCutType(new TBits(kMaxCuts))
-  , fAxes(kMaxCuts) {
+  , fVarCutType(new TBits(fMaxCuts))
+  , fAxes(fMaxCuts) {
   //
   // Named Constructor
   //
-  for (Int_t i = 0; i < kMaxCuts; ++i) {
+  for (Int_t i = 0; i < fMaxCuts; ++i) {
     fVarCuts[i] = 0;
     //    fVarCutType[i]=0;
   }
@@ -105,8 +105,8 @@ void PairAnalysisHF::AddCutVariable(PairAnalysisVarManager::ValueTypes type,
   // the TVectorD is assumed to be surplus after the creation and will be deleted!!!
   //
 
-  // limit number of variables to kMaxCuts
-  if (fAxes.GetEntriesFast() >= kMaxCuts) return;
+  // limit number of variables to fMaxCuts
+  if (fAxes.GetEntriesFast() >= fMaxCuts) return;
 
   if (!binLimits) return;
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.h
index 7fcc5ca2bc61b5bb0de651d994f4dfc97f735565..06a7dabfbd293d4cb5f573c011c576ec57acdced 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHF.h
@@ -23,7 +23,7 @@
 
 class PairAnalysisHF : public PairAnalysisHistos {
 public:
-  enum { kMaxCuts = 20 };
+  enum class Max { kMaxCuts = 20 };
 
   PairAnalysisHF();
   PairAnalysisHF(const char* name, const char* title);
@@ -61,7 +61,8 @@ private:
   TObjArray fArrDielHistos;  //-> array of papahistos
   TObjArray* fSignalsMC;     //! array of MC signals to be stupapad
 
-  UShort_t fVarCuts[kMaxCuts];  // cut variables
+  static const Int_t fMaxCuts = 20;
+  UShort_t fVarCuts[fMaxCuts];  // cut variables
   TBits* fVarCutType;           // array to store leg booleans
   //  Bool_t    fVarCutType[kMaxCuts];  // array to store leg booleans
   TObjArray fAxes;  // Axis descriptions of the cut binning
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.cxx
index 55b2aabc22f0532047c131a6c598769ab5409cc2..d6cda82b71b2351349056eefc21e1d81ba49cea9 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.cxx
@@ -110,7 +110,7 @@ ClassImp(PairAnalysisHistos)
   , fList(0x0)
   , fUsedVars(new TBits(PairAnalysisVarManager::kNMaxValues))
   , fReservedWords(new TString("Hit;Track;Pair"))
-  , fPrecision(kFloat) {
+  , fPrecision(Eprecision::kFloat) {
   //
   // Default constructor
   //
@@ -129,7 +129,7 @@ PairAnalysisHistos::PairAnalysisHistos(const char* name, const char* title)
   , fList(0x0)
   , fUsedVars(new TBits(PairAnalysisVarManager::kNMaxValues))
   , fReservedWords(new TString("Hit;Track;Pair"))
-  , fPrecision(kFloat) {
+  , fPrecision(Eprecision::kFloat) {
   //
   // TNamed constructor
   //
@@ -437,7 +437,7 @@ TH1* PairAnalysisHistos::GetTHist(const char* histClass,
   isOk &= (binsX != 0x0);
   if (!isOk) return 0x0;
   switch (fPrecision) {
-    case kFloat:
+    case Eprecision::kFloat:
       if (!binsY)
         return (new TH1F(
           name, title, binsX->GetNrows() - 1, binsX->GetMatrixArray()));
@@ -458,7 +458,7 @@ TH1* PairAnalysisHistos::GetTHist(const char* histClass,
                          binsZ->GetNrows() - 1,
                          binsZ->GetMatrixArray()));
       break;
-    case kDouble:
+    case Eprecision::kDouble:
       if (!binsY)
         return (new TH1D(
           name, title, binsX->GetNrows() - 1, binsX->GetMatrixArray()));
@@ -1821,7 +1821,9 @@ TObjArray* PairAnalysisHistos::DrawSame(TString histName,
                            "");
       }
       // change default signal names to titles
-      for (Int_t isig = 0; isig < PairAnalysisSignalMC::kNSignals; isig++) {
+      for (Int_t isig = 0; isig < static_cast<Int_t>(
+                             PairAnalysisSignalMC::EDefinedSignal::kNSignals);
+           isig++) {
         TString src = PairAnalysisSignalMC::fgkSignals[isig][0];
         TString rpl = PairAnalysisSignalMC::fgkSignals[isig][1];
         // avoid mc signal in header AND leg-entry
@@ -1835,13 +1837,15 @@ TObjArray* PairAnalysisHistos::DrawSame(TString histName,
       //	printf("histClass %s \n",histClass.Data());
 
       // change MCtruth to MC
-      for (Int_t isig = 0; isig < PairAnalysisSignalMC::kNSignals; isig++) {
+      for (Int_t isig = 0; isig < static_cast<Int_t>(
+                             PairAnalysisSignalMC::EDefinedSignal::kNSignals);
+           isig++) {
         histClass.ReplaceAll("MCtruth", "MC");
         ratioName.ReplaceAll("MCtruth", "MC");
         divName.ReplaceAll("MCtruth", "MC");
       }
       // remove pairing name if it is a MC
-      for (Int_t iptype = 0; iptype < PairAnalysis::kPairTypes; iptype++) {
+      for (Int_t iptype = 0; iptype < PairAnalysis::fNTypes; iptype++) {
         if (ndel > 0)
           histClass.ReplaceAll(PairAnalysis::PairClassName(iptype), "");
         if (ratioName.CountChar('_') > 0)
@@ -2129,8 +2133,10 @@ void PairAnalysisHistos::FillValues(TH1* obj, const Double_t* values) {
   Bool_t bprf = kFALSE;
   //  UInt_t nValues = (UInt_t) PairAnalysisVarManager::kNMaxValues;
   UInt_t valueTypes = obj->GetUniqueID();
-  if (valueTypes == (UInt_t) PairAnalysisHistos::kNoAutoFill) return;
-  Bool_t weight = (valueTypes != kNoWeights);
+  if (valueTypes
+      == static_cast<UInt_t>(PairAnalysisHistos::Eoption::kNoAutoFill))
+    return;
+  Bool_t weight = (valueTypes != static_cast<UInt_t>(Eoption::kNoWeights));
 
   // check if tprofile
   if (obj->IsA() == TProfile::Class() || obj->IsA() == TProfile2D::Class()
@@ -2261,7 +2267,8 @@ void PairAnalysisHistos::FillValues(THnBase* obj, const Double_t* values) {
 
   // skip if manual filling
   UInt_t value4 = obj->GetUniqueID();  // weighting variable if any
-  if (value4 == (UInt_t) PairAnalysisHistos::kNoAutoFill) return;
+  if (value4 == static_cast<UInt_t>(PairAnalysisHistos::Eoption::kNoAutoFill))
+    return;
 
   // check for formulas and skip the rest if needed
   TList* list = obj->GetListOfFunctions();
@@ -2270,7 +2277,7 @@ void PairAnalysisHistos::FillValues(THnBase* obj, const Double_t* values) {
   Bool_t useFormulas = (list && list->Last());
 
   //  do weighting
-  Bool_t weight = (value4 != kNoWeights);
+  Bool_t weight = (value4 != static_cast<UInt_t>(Eoption::kNoWeights));
 
   // fill array
   const Int_t dim = obj->GetNdimensions();
@@ -2380,7 +2387,7 @@ void PairAnalysisHistos::AdaptNameTitle(TH1* hist, const char* histClass) {
   UInt_t vary   = hist->GetYaxis()->GetUniqueID();
   UInt_t varz   = hist->GetZaxis()->GetUniqueID();
   UInt_t varp   = hist->GetUniqueID();
-  Bool_t weight = (varp != kNoWeights);
+  Bool_t weight = (varp != static_cast<UInt_t>(Eoption::kNoWeights));
   if (bprf && dim == 3) weight = kFALSE;  // no weighting for profile3D
 
   // store titles in the axis
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.h
index 54bef7ba5d2ff6d4697448df9beee4717d85217d..0f0c5d7db7df612057560a94088ae64242ea0d26 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisHistos.h
@@ -94,13 +94,13 @@ public:
   PairAnalysisHistos(const char* name, const char* title);
   virtual ~PairAnalysisHistos();
 
-  enum {
+  enum class Eoption {
     kNoAutoFill = 1000000000,
     kNoProfile  = 999,
     kNoWeights  = 998,
-    kNone       = 997
+    kNo         = 997
   };
-  enum Eprecision { kFloat = 0, kDouble };
+  enum class Eprecision { kFloat = 0, kDouble };
 
   // functions for object creation
   void SetPrecision(Eprecision precision) { fPrecision = precision; }
@@ -114,21 +114,22 @@ public:
   static void StoreVariables(TH1* obj, UInt_t valType[20]);
   static void StoreVariables(THnBase* obj, UInt_t valType[20]);
 
-  void UserHistogram(const char* histClass,
-                     Int_t ndim,
-                     TObjArray* limits,
-                     UInt_t* vars,
-                     UInt_t valTypeW = kNoWeights);
+  void
+  UserHistogram(const char* histClass,
+                Int_t ndim,
+                TObjArray* limits,
+                UInt_t* vars,
+                UInt_t valTypeW = static_cast<UInt_t>(Eoption::kNoWeights));
   void AddSparse(const char* histClass,
                  Int_t ndim,
                  TObjArray* limits,
                  UInt_t* vars,
-                 UInt_t valTypeW = kNoWeights);
+                 UInt_t valTypeW = static_cast<UInt_t>(Eoption::kNoWeights));
   void AddSparse(const char* histClass,
                  Int_t ndim,
                  TObjArray* limits,
                  TFormula** vars,
-                 UInt_t valTypeW = kNoWeights);
+                 UInt_t valTypeW = static_cast<UInt_t>(Eoption::kNoWeights));
 
   // templates
   template<typename valX,
@@ -161,10 +162,10 @@ public:
                       binsX,
                       valTypeX,
                       0x0,
-                      (UInt_t) kNone,
+                      static_cast<UInt_t>(Eoption::kNo),
                       0x0,
-                      (UInt_t) kNone,
-                      (UInt_t) kNoProfile,
+                      static_cast<UInt_t>(Eoption::kNo),
+                      static_cast<UInt_t>(Eoption::kNoProfile),
                       valTypeW,
                       "");
   }
@@ -173,7 +174,8 @@ public:
   TString AddHistogram(const char* histClass,
                        const TVectorD* const binsX,
                        valX valTypeX) {
-    return AddHistogram(histClass, binsX, valTypeX, (UInt_t) kNoWeights);
+    return AddHistogram(
+      histClass, binsX, valTypeX, static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   template<typename valX, typename valP, typename valW>
@@ -191,7 +193,7 @@ public:
                       0x0,
                       valTypeP,
                       0x0,
-                      (UInt_t) kNone,
+                      static_cast<UInt_t>(Eoption::kNo),
                       valTypeP,
                       valTypeW,
                       option);
@@ -203,8 +205,12 @@ public:
                      valX valTypeX,
                      valP valTypeP,
                      TString option) {
-    return AddProfile(
-      histClass, binsX, valTypeX, valTypeP, option, (UInt_t) kNoWeights);
+    return AddProfile(histClass,
+                      binsX,
+                      valTypeX,
+                      valTypeP,
+                      option,
+                      static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   // 2D
@@ -223,8 +229,8 @@ public:
                       binsY,
                       valTypeY,
                       0x0,
-                      (UInt_t) kNone,
-                      (UInt_t) kNoProfile,
+                      static_cast<UInt_t>(Eoption::kNo),
+                      static_cast<UInt_t>(Eoption::kNoProfile),
                       valTypeW,
                       "");
   }
@@ -235,8 +241,12 @@ public:
                        valX valTypeX,
                        const TVectorD* const binsY,
                        valY valTypeY) {
-    return AddHistogram(
-      histClass, binsX, valTypeX, binsY, valTypeY, (UInt_t) kNoWeights);
+    return AddHistogram(histClass,
+                        binsX,
+                        valTypeX,
+                        binsY,
+                        valTypeY,
+                        static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   template<typename valX, typename valY, typename valP, typename valW>
@@ -277,7 +287,7 @@ public:
                       valTypeY,
                       valTypeP,
                       option,
-                      (UInt_t) kNoWeights);
+                      static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   // 3D
@@ -299,7 +309,7 @@ public:
                       valTypeY,
                       binsZ,
                       valTypeZ,
-                      (UInt_t) kNoProfile,
+                      static_cast<UInt_t>(Eoption::kNoProfile),
                       valTypeW,
                       "");
   }
@@ -319,7 +329,7 @@ public:
                         valTypeY,
                         binsZ,
                         valTypeZ,
-                        (UInt_t) kNoWeights);
+                        static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   //profs
@@ -371,7 +381,7 @@ public:
                       valTypeZ,
                       valTypeP,
                       option,
-                      (UInt_t) kNoWeights);
+                      static_cast<UInt_t>(Eoption::kNoWeights));
   }
 
   // functions to fill objects
@@ -486,7 +496,8 @@ TString PairAnalysisHistos::UserObject(const char* histClass,
   TH1* hist   = 0x0;
   TString err = "err";
   //profile or histogram
-  if (typeid(valTypeP) == typeid(UInt_t) && (uintptr_t) valTypeP == kNoProfile)
+  if (typeid(valTypeP) == typeid(UInt_t)
+      && (uintptr_t) valTypeP == static_cast<UInt_t>(Eoption::kNoProfile))
     hist = GetTHist(histClass, name, title, binsX, binsY, binsZ);
   else
     hist = GetTProf(histClass, name, title, binsX, binsY, binsZ, option);
@@ -499,40 +510,55 @@ TString PairAnalysisHistos::UserObject(const char* histClass,
   // and store variales in uniqueIDs
   UInt_t valType[20] = {0};
   TString func       = "";
-  func += valTypeX;
+  func.Form("%d", valTypeX);
   if (!func.Atoi())
-    hist->GetListOfFunctions()->Add(GetFormula("xFormula", func));
+    std::cout
+      << func
+      << std::
+           endl;  //hist->GetListOfFunctions()->Add( GetFormula("xFormula",func) );
   else
     valType[0] = func.Atoi();
 
   func = "";
-  func += valTypeY;
+  func.Form("%d", valTypeY);
   if (!func.Atoi())
-    hist->GetListOfFunctions()->Add(GetFormula("yFormula", func));
+    std::cout
+      << func
+      << std::
+           endl;  //hist->GetListOfFunctions()->Add( GetFormula("yFormula",func) );
   else
     valType[1] = func.Atoi();
 
   func = "";
-  func += valTypeZ;
+  func.Form("%d", valTypeZ);
   if (!func.Atoi())
-    hist->GetListOfFunctions()->Add(GetFormula("zFormula", func));
+    std::cout
+      << func
+      << std::
+           endl;  //hist->GetListOfFunctions()->Add( GetFormula("zFormula",func) );
   else
     valType[2] = func.Atoi();
 
   func = "";
-  func += valTypeP;
+  func.Form("%d", valTypeP);
   if (!func.Atoi())
-    hist->GetListOfFunctions()->Add(GetFormula("pFormula", func));
+    std::cout
+      << func
+      << std::
+           endl;  //hist->GetListOfFunctions()->Add( GetFormula("pFormula",func) );
   else
     valType[3] = func.Atoi();
 
   TString func2 = "";
-  func2 += valTypeX;
+  func2.Form("%d", valTypeX);
   func = "";
-  func += valTypeW;
+  func.Form("%d", valTypeW);  //func+=valTypeW;
   if (!func.Atoi())
-    hist->GetListOfFunctions()->Add(GetFormula("wFormula", func));
-  else if (func2.Atoi() != kNoWeights) {
+    std::cout
+      << func
+      << std::
+           endl;  //hist->GetListOfFunctions()->Add( GetFormula("wFormula",func) );
+  else if (func2.Atoi() != static_cast<UInt_t>(Eoption::kNoWeights)) {
     hist->SetUniqueID(func.Atoi());  // store weighting variable
     fUsedVars->SetBitNumber(func.Atoi(), kTRUE);
   }
@@ -560,7 +586,7 @@ TString PairAnalysisHistos::UserObject(const char* histClass,
   */
 
   Bool_t isReserved = fReservedWords->Contains(histClass);
-  if (func2.Atoi() && func2.Atoi() == kNoAutoFill)
+  if (func2.Atoi() && func2.Atoi() == static_cast<UInt_t>(Eoption::kNoAutoFill))
     hist->SetUniqueID(func2.Atoi());
   if (isReserved)
     UserHistogramReservedWords(histClass, hist);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMC.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMC.cxx
index a0c6012cd71849ff75fc2b74c0fc96f49d38c838..27bd5e3bbcbf0725ad42fddddd13611144d33077 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMC.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMC.cxx
@@ -544,19 +544,19 @@ Bool_t PairAnalysisMC::CheckParticleSource(
   //  printf("process: id %d --> %s \n",processID,TMCProcessName[processID]);
 
   switch (source) {
-    case PairAnalysisSignalMC::kDontCare: return kTRUE; break;
-    case PairAnalysisSignalMC::kPrimary:
+    case PairAnalysisSignalMC::ESource::kDontCare: return kTRUE; break;
+    case PairAnalysisSignalMC::ESource::kPrimary:
       // NOTE: This includes all physics event history (initial state particles,
       //       exchange bosons, quarks, di-quarks, strings, un-stable particles, final state particles)
       //       Only the final state particles make it to the detector!!
       return (processID == kPPrimary);
       break;
-    case PairAnalysisSignalMC::kSecondary:
+    case PairAnalysisSignalMC::ESource::kSecondary:
       // particles which are created by the interaction of final state primaries with the detector
       // or particles from strange weakly decaying particles (e.g. lambda, kaons, etc.)
       return (!IsPhysicalPrimary(label, processID));
       break;
-    case PairAnalysisSignalMC::kFinalState:
+    case PairAnalysisSignalMC::ESource::kFinalState:
       // primary particles created in the collision which reach the detectors
       // These would be:
       // 1.) particles produced in the collision
@@ -567,7 +567,7 @@ Bool_t PairAnalysisMC::CheckParticleSource(
       // 6.) includes products of directly produced beauty hadron decays
       return IsPhysicalPrimary(label, processID);
       break;
-    case PairAnalysisSignalMC::kDirect:
+    case PairAnalysisSignalMC::ESource::kDirect:
       // Primary particles which do not have any mother
       // This is the case for:
       // 1.) Initial state particles (the 2 protons in Pythia pp collisions)
@@ -576,12 +576,12 @@ Bool_t PairAnalysisMC::CheckParticleSource(
       // 3.) Certain particles added via MC generator cocktails (e.g. J/psi added to pythia MB events)
       return (label >= 0 && GetMothersLabel(label) < 0);
       break;
-    case PairAnalysisSignalMC::kSecondaryFromWeakDecay:
+    case PairAnalysisSignalMC::ESource::kSecondaryFromWeakDecay:
       // secondary particle from weak decay
       // or particles from strange weakly decaying particles (e.g. lambda, kaons, etc.)
       return (IsSecondaryFromWeakDecay(label, processID));
       break;
-    case PairAnalysisSignalMC::kSecondaryFromMaterial:
+    case PairAnalysisSignalMC::ESource::kSecondaryFromMaterial:
       // secondary particle from material
       return (IsSecondaryFromMaterial(label, processID));
       break;
@@ -621,12 +621,15 @@ Bool_t PairAnalysisMC::CheckDalitzDecision(
 
   if (!signalMC) return kFALSE;
 
-  if (signalMC->GetDalitz() == PairAnalysisSignalMC::kWhoCares) return kTRUE;
+  if (signalMC->GetDalitz() == PairAnalysisSignalMC::EDalitz::kWhoCares)
+    return kTRUE;
 
   Bool_t isDalitz = CheckIsDalitz(mLabel, signalMC);
-  if ((signalMC->GetDalitz() == PairAnalysisSignalMC::kIsDalitz) && !isDalitz)
+  if ((signalMC->GetDalitz() == PairAnalysisSignalMC::EDalitz::kIsDalitz)
+      && !isDalitz)
     return kFALSE;
-  if ((signalMC->GetDalitz() == PairAnalysisSignalMC::kIsNotDalitz) && isDalitz)
+  if ((signalMC->GetDalitz() == PairAnalysisSignalMC::EDalitz::kIsNotDalitz)
+      && isDalitz)
     return kFALSE;
 
   return kTRUE;
@@ -675,7 +678,8 @@ Bool_t PairAnalysisMC::IsMCTruth(Int_t label,
   CbmMCTrack* mcMother = 0x0;
   Int_t mLabel         = -1;
   if (signalMC->GetMotherPDG(branch) != 0
-      || signalMC->GetMotherSource(branch) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetMotherSource(branch)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     mLabel   = GetMothersLabel(label);
     mcMother = GetMCTrackFromMCEvent(mLabel);
 
@@ -698,7 +702,7 @@ Bool_t PairAnalysisMC::IsMCTruth(Int_t label,
   Int_t gmLabel             = -1;
   if (signalMC->GetGrandMotherPDG(branch) != 0
       || signalMC->GetGrandMotherSource(branch)
-           != PairAnalysisSignalMC::kDontCare) {
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     if (mcMother) {
       gmLabel       = GetMothersLabel(mLabel);
       mcGrandMother = GetMCTrackFromMCEvent(gmLabel);
@@ -719,7 +723,7 @@ Bool_t PairAnalysisMC::IsMCTruth(Int_t label,
   CbmMCTrack* mcGreatGrandMother = 0x0;
   Int_t ggmLabel                 = -1;
   if(signalMC->GetGreatGrandMotherPDG(branch)   !=0/* ||
-     signalMC->GetGreatGrandMotherSource(branch)!=PairAnalysisSignalMC::kDontCare
+     signalMC->GetGreatGrandMotherSource(branch)!=PairAnalysisSignalMC::ESource::kDontCare
 						   */) {
     if (mcGrandMother) {
       ggmLabel           = GetMothersLabel(gmLabel);
@@ -804,7 +808,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   // mothers
   Int_t labelM1 = -1;
   if (signalMC->GetMotherPDG(1) != 0
-      || signalMC->GetMotherSource(1) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetMotherSource(1)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     labelM1 = GetMothersLabel(labelD1);
     if (labelD1 > -1 && labelM1 > -1) mcM1 = GetMCTrackFromMCEvent(labelM1);
     directTerm = directTerm && (mcM1 || signalMC->GetMotherPDGexclude(1))
@@ -818,7 +823,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
 
   Int_t labelM2 = -1;
   if (signalMC->GetMotherPDG(2) != 0
-      || signalMC->GetMotherSource(2) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetMotherSource(2)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     labelM2 = GetMothersLabel(labelD2);
     if (labelD2 > -1 && labelM2 > -1) mcM2 = GetMCTrackFromMCEvent(labelM2);
     directTerm = directTerm && (mcM2 || signalMC->GetMotherPDGexclude(2))
@@ -833,7 +839,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   // grand-mothers
   Int_t labelG1 = -1;
   if (signalMC->GetGrandMotherPDG(1) != 0
-      || signalMC->GetGrandMotherSource(1) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetGrandMotherSource(1)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     labelG1 = GetMothersLabel(labelM1);
     if (mcM1 && labelG1 > -1) mcG1 = GetMCTrackFromMCEvent(labelG1);
     directTerm =
@@ -847,7 +854,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
 
   Int_t labelG2 = -1;
   if (signalMC->GetGrandMotherPDG(2) != 0
-      || signalMC->GetGrandMotherSource(2) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetGrandMotherSource(2)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     labelG2 = GetMothersLabel(labelM2);
     if (mcM2 && labelG2 > -1) mcG2 = GetMCTrackFromMCEvent(labelG2);
     directTerm =
@@ -863,7 +871,7 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   Int_t labelGG1 = -1;
   if (
     signalMC->GetGreatGrandMotherPDG(1) != 0
-    /* || signalMC->GetGreatGrandMotherSource(1)!=PairAnalysisSignalMC::kDontCare*/) {
+    /* || signalMC->GetGreatGrandMotherSource(1)!=PairAnalysisSignalMC::ESource::kDontCare*/) {
     labelGG1 = GetMothersLabel(labelG1);
     if (mcG1 && labelGG1 > -1) mcGG1 = GetMCTrackFromMCEvent(labelGG1);
     directTerm =
@@ -878,7 +886,7 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   Int_t labelGG2 = -1;
   if (
     signalMC->GetGreatGrandMotherPDG(2) != 0
-    /* || signalMC->GetGreatGrandMotherSource(2)!=PairAnalysisSignalMC::kDontCare*/) {
+    /* || signalMC->GetGreatGrandMotherSource(2)!=PairAnalysisSignalMC::ESource::kDontCare*/) {
     labelGG2 = GetMothersLabel(labelG2);
     if (mcG2 && labelGG2 > -1) mcGG2 = GetMCTrackFromMCEvent(labelGG2);
     directTerm =
@@ -909,7 +917,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
 
   // mothers
   if (signalMC->GetMotherPDG(1) != 0
-      || signalMC->GetMotherSource(1) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetMotherSource(1)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     if (!mcM2 && labelD2 > -1) {
       labelM2 = GetMothersLabel(labelD2);
       if (labelM2 > -1) mcM2 = GetMCTrackFromMCEvent(labelM2);
@@ -924,7 +933,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   }
 
   if (signalMC->GetMotherPDG(2) != 0
-      || signalMC->GetMotherSource(2) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetMotherSource(2)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     if (!mcM1 && labelD1 > -1) {
       labelM1 = GetMothersLabel(labelD1);
       if (labelM1 > -1) mcM1 = GetMCTrackFromMCEvent(labelM1);
@@ -940,7 +950,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
 
   // grand-mothers
   if (signalMC->GetGrandMotherPDG(1) != 0
-      || signalMC->GetGrandMotherSource(1) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetGrandMotherSource(1)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     if (!mcG2 && mcM2) {
       labelG2 = GetMothersLabel(labelM2);
       if (labelG2 > -1) mcG2 = GetMCTrackFromMCEvent(labelG2);
@@ -955,7 +966,8 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   }
 
   if (signalMC->GetGrandMotherPDG(2) != 0
-      || signalMC->GetGrandMotherSource(2) != PairAnalysisSignalMC::kDontCare) {
+      || signalMC->GetGrandMotherSource(2)
+           != PairAnalysisSignalMC::ESource::kDontCare) {
     if (!mcG1 && mcM1) {
       labelG1 = GetMothersLabel(labelM1);
       if (labelG1 > -1) mcG1 = GetMCTrackFromMCEvent(labelG1);
@@ -972,7 +984,7 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   // great grand-mothers
   if (
     signalMC->GetGreatGrandMotherPDG(1) != 0
-    /*|| signalMC->GetGreatGrandMotherSource(1)!=PairAnalysisSignalMC::kDontCare*/) {
+    /*|| signalMC->GetGreatGrandMotherSource(1)!=PairAnalysisSignalMC::ESource::kDontCare*/) {
     if (!mcGG2 && mcG2) {
       labelGG2 = GetMothersLabel(labelG2);
       if (labelGG2 > -1) mcGG2 = GetMCTrackFromMCEvent(labelGG2);
@@ -988,7 +1000,7 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
 
   if (
     signalMC->GetGreatGrandMotherPDG(2) != 0
-    /* || signalMC->GetGreatGrandMotherSource(2)!=PairAnalysisSignalMC::kDontCare*/) {
+    /* || signalMC->GetGreatGrandMotherSource(2)!=PairAnalysisSignalMC::ESource::kDontCare*/) {
     if (!mcGG1 && mcG1) {
       labelGG1 = GetMothersLabel(labelG1);
       if (labelGG1 > -1) mcGG1 = GetMCTrackFromMCEvent(labelGG1);
@@ -1003,10 +1015,12 @@ Bool_t PairAnalysisMC::IsMCTruth(const PairAnalysisPair* pair,
   }
 
   Bool_t motherRelation = kTRUE;
-  if (signalMC->GetMothersRelation() == PairAnalysisSignalMC::kSame) {
+  if (signalMC->GetMothersRelation()
+      == PairAnalysisSignalMC::EBranchRelation::kSame) {
     motherRelation = motherRelation && HaveSameMother(pair);
   }
-  if (signalMC->GetMothersRelation() == PairAnalysisSignalMC::kDifferent) {
+  if (signalMC->GetMothersRelation()
+      == PairAnalysisSignalMC::EBranchRelation::kDifferent) {
     motherRelation = motherRelation && !HaveSameMother(pair);
   }
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.cxx
index 4d7176b2e95dab41f5cec9fc3b823b2632db4207..bd24d15ff495882401f666396c90cb90a8077840 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.cxx
@@ -43,11 +43,11 @@ ClassImp(PairAnalysisMixingHandler)
 //______________________________________________
 PairAnalysisMixingHandler::PairAnalysisMixingHandler(const char* name,
                                                      const char* title)
-  : TNamed(name, title), fArrPools("TClonesArray"), fAxes(kMaxCuts) {
+  : TNamed(name, title), fArrPools("TClonesArray"), fAxes(fMaxCuts) {
   //
   // Named Constructor
   //
-  for (Int_t i = 0; i < kMaxCuts; ++i) {
+  for (Int_t i = 0; i < fMaxCuts; ++i) {
     fEventCuts[i] = 0;
   }
   fAxes.SetOwner(kTRUE);
@@ -70,8 +70,8 @@ void PairAnalysisMixingHandler::AddVariable(
   // Add a variable to the mixing handler with arbitrary binning 'bins'
   //
 
-  // limit number of variables to kMaxCuts
-  if (fAxes.GetEntriesFast() >= kMaxCuts) return;
+  // limit number of variables to fMaxCuts
+  if (fAxes.GetEntriesFast() >= fMaxCuts) return;
 
   Int_t size       = fAxes.GetEntriesFast();
   fEventCuts[size] = (UShort_t) type;
@@ -192,7 +192,7 @@ void PairAnalysisMixingHandler::DoMixing(TClonesArray& pool,
       papa->fTracks[2].Add(o);
     papa->FillPairArrays(1, 2);
 
-    if (fMixType == kAll || fMixType == kOSandLS) {
+    if (fMixType == EMixType::kAll || fMixType == EMixType::kOSandLS) {
       // all 4 pair arrays will be filled
       while ((o = ev1P()))
         papa->fTracks[0].Add(o);
@@ -200,10 +200,10 @@ void PairAnalysisMixingHandler::DoMixing(TClonesArray& pool,
         papa->fTracks[3].Add(o);
       papa->FillPairArrays(0, 2);
       papa->FillPairArrays(1, 3);
-      if (fMixType == kAll) papa->FillPairArrays(0, 3);
+      if (fMixType == EMixType::kAll) papa->FillPairArrays(0, 3);
     }
 
-    if (fMixType == kOSonly || fMixType == kOSandLS) {
+    if (fMixType == EMixType::kOSonly || fMixType == EMixType::kOSandLS) {
       //use the pair type of ev1- ev1 also for ev1 ev1-
       papa->fTracks[1].Clear();
       papa->fTracks[2].Clear();
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.h
index 733acc900fb6cdf08024e92b4d45e9c464c902dd..869344ece91f5a6b97025401d2f6094622b30abb 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisMixingHandler.h
@@ -25,8 +25,7 @@ class PairAnalysisEvent;
 
 class PairAnalysisMixingHandler : public TNamed {
 public:
-  enum { kMaxCuts = 10 };
-  enum EMixType { kOSonly = 0, kOSandLS, kAll };
+  enum class EMixType { kOSonly = 0, kOSandLS, kAll };
   PairAnalysisMixingHandler();
   PairAnalysisMixingHandler(const char* name, const char* title);
 
@@ -49,11 +48,13 @@ public:
 
 private:
   UShort_t fDepth = 10;  // Number of events per bin to keep in the ring buffer
-  TClonesArray fArrPools;         // Array of events in bins
-  UShort_t fEventCuts[kMaxCuts];  // cut variables
+  TClonesArray fArrPools;  // Array of events in bins
+  static const Int_t fMaxCuts = 10;
+  UShort_t fEventCuts[fMaxCuts];  // cut variables
   TObjArray fAxes;                // Axis descriptions of the event binning
-  EMixType fMixType = kOSonly;    // which combinations to include in the mixing
-  TProcessID* fPID  = NULL;  //! internal PID for references to buffered objects
+  EMixType fMixType =
+    EMixType::kOSonly;      // which combinations to include in the mixing
+  TProcessID* fPID = NULL;  //! internal PID for references to buffered objects
 
   void DoMixing(TClonesArray& pool, PairAnalysis* papa);
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.cxx
index 42ce955f50e95d5155d7f427a8da5aa0b57a91e2..398dc62608f24c5108cc4441efaf87e6a014e174 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.cxx
@@ -43,7 +43,7 @@ PairAnalysisObjectCuts::PairAnalysisObjectCuts(const char* name,
   //
   // Named contructor
   //
-  for (Int_t i = 0; i < PairAnalysisObjectCuts::kNMaxCuts; ++i) {
+  for (Int_t i = 0; i < fMaxCuts; ++i) {
     fActiveCuts[i] = 0;
     fCutExclude[i] = kFALSE;
     fCutMin[i]     = 0x0;
@@ -59,7 +59,7 @@ PairAnalysisObjectCuts::~PairAnalysisObjectCuts() {
   // Destructor
   //
   if (fUsedVars) delete fUsedVars;
-  for (Int_t i = 0; i < PairAnalysisObjectCuts::kNMaxCuts; ++i) {
+  for (Int_t i = 0; i < fMaxCuts; ++i) {
     fActiveCuts[i] = 0;
     if (fCutMin[i]) delete fCutMin[i];
     if (fCutMax[i]) delete fCutMax[i];
@@ -191,12 +191,12 @@ Bool_t PairAnalysisObjectCuts::IsSelected(Double_t* const values) {
       CLRBIT(fSelectedCutsMask, iCut);
 
     // cut type and decision
-    if (fCutType == kAll && !TESTBIT(fSelectedCutsMask, iCut))
+    if (fCutType == ECutType::kAll && !TESTBIT(fSelectedCutsMask, iCut))
       return kFALSE;  // option to (minor) speed improvement
   }
 
   Bool_t isSelected = (fSelectedCutsMask == fActiveCutsMask);
-  if (fCutType == kAny) isSelected = (fSelectedCutsMask > 0);
+  if (fCutType == ECutType::kAny) isSelected = (fSelectedCutsMask > 0);
   SetSelected(isSelected);
   return isSelected;
 }
@@ -348,7 +348,7 @@ void PairAnalysisObjectCuts::Print(const Option_t* /*option*/) const {
   // Print cuts and the range
   //
   printf("cut ranges for '%s'\n", GetTitle());
-  if (fCutType == kAll) {
+  if (fCutType == ECutType::kAll) {
     printf("All Cuts have to be fulfilled\n");
   } else {
     printf("Any Cut has to be fulfilled\n");
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.h
index 946e51f08215241d2604f317c8c3e4738a15d9ae..7a0b24a1e8260ad79689f5d63bb15b5374a9753c 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisObjectCuts.h
@@ -22,8 +22,8 @@ class THnBase;
 class PairAnalysisObjectCuts : public AnalysisCuts {
 public:
   // Whether all cut criteria have to be fulfilled of just any
-  enum CutType { kAll = 0, kAny };
-  enum { kNMaxCuts = 10 };
+  enum class ECutType { kAll = 0, kAny };
+  static const Int_t fMaxCuts = 10;
 
   PairAnalysisObjectCuts();
   PairAnalysisObjectCuts(const char* name, const char* title);
@@ -57,10 +57,10 @@ public:
               Bool_t excludeRange = kFALSE);
 
   // setters
-  void SetCutType(CutType type) { fCutType = type; }
+  void SetCutType(ECutType type) { fCutType = type; }
 
   // getters
-  CutType GetCutType() const { return fCutType; }
+  ECutType GetCutType() const { return fCutType; }
 
   Int_t GetNCuts() { return fNActiveCuts; }
 
@@ -80,23 +80,19 @@ public:
 
 
 private:
-  TBits* fUsedVars;  // list of used variables
-  UShort_t
-    fActiveCuts[PairAnalysisObjectCuts::kNMaxCuts];  // list of activated cuts
-  UShort_t fNActiveCuts  = 0;                        // number of acive cuts
-  UInt_t fActiveCutsMask = 0;                        // mask of active cuts
+  TBits* fUsedVars;                // list of used variables
+  UShort_t fActiveCuts[fMaxCuts];  // list of activated cuts
+  UShort_t fNActiveCuts  = 0;      // number of acive cuts
+  UInt_t fActiveCutsMask = 0;      // mask of active cuts
 
   UInt_t fSelectedCutsMask =
     0;  // Maks of selected cuts, is available after calling IsSelected
-  CutType fCutType = kAll;  // type of the cut: any, all
-
-  Bool_t fCutExclude[PairAnalysisObjectCuts::kNMaxCuts];  // inverse cut logic?
-  TObject*
-    fCutMin[PairAnalysisObjectCuts::kNMaxCuts];  // use object as lower cut
-  TObject*
-    fCutMax[PairAnalysisObjectCuts::kNMaxCuts];  // use object as upper cut
-  TFormula* fVarFormula
-    [PairAnalysisObjectCuts::kNMaxCuts];  // use a formula for the variable
+  ECutType fCutType = ECutType::kAll;  // type of the cut: any, all
+
+  Bool_t fCutExclude[fMaxCuts];     // inverse cut logic?
+  TObject* fCutMin[fMaxCuts];       // use object as lower cut
+  TObject* fCutMax[fMaxCuts];       // use object as upper cut
+  TFormula* fVarFormula[fMaxCuts];  // use a formula for the variable
 
   PairAnalysisObjectCuts(const PairAnalysisObjectCuts& c);
   PairAnalysisObjectCuts& operator=(const PairAnalysisObjectCuts& c);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLV.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLV.cxx
index b41845e62e3211d91fb58664a572cc79ba91821f..e43be4161b54699c899a441dbb9fab2c18a6fdf9 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLV.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLV.cxx
@@ -339,8 +339,10 @@ void PairAnalysisPairLV::RotateTrack(PairAnalysisTrackRotator* rot) {
   //fD1.Print("");
   //fD2.Print("");
 
-  if (rot->GetRotationType() == PairAnalysisTrackRotator::kRotatePositive
-      || (rot->GetRotationType() == PairAnalysisTrackRotator::kRotateBothRandom
+  if (rot->GetRotationType()
+        == PairAnalysisTrackRotator::ERotationType::kRotatePositive
+      || (rot->GetRotationType()
+            == PairAnalysisTrackRotator::ERotationType::kRotateBothRandom
           && rotCharge == 0)) {
     if (first->Charge() > 0)
       fD1.RotateZ(rotAngle);
@@ -348,8 +350,10 @@ void PairAnalysisPairLV::RotateTrack(PairAnalysisTrackRotator* rot) {
       fD2.RotateZ(rotAngle);
   }
 
-  if (rot->GetRotationType() == PairAnalysisTrackRotator::kRotateNegative
-      || (rot->GetRotationType() == PairAnalysisTrackRotator::kRotateBothRandom
+  if (rot->GetRotationType()
+        == PairAnalysisTrackRotator::ERotationType::kRotateNegative
+      || (rot->GetRotationType()
+            == PairAnalysisTrackRotator::ERotationType::kRotateBothRandom
           && rotCharge == 1)) {
     if (first->Charge() > 0)
       fD1.RotateZ(rotAngle);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLegCuts.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLegCuts.h
index 795002839f06f116a8899a2da6d81186c30a6f45..d385b34046a36b63f8fd5ec8008a3c47c59d566a 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLegCuts.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisPairLegCuts.h
@@ -19,7 +19,7 @@
 
 class PairAnalysisPairLegCuts : public AnalysisCuts {
 public:
-  enum CutType { kBothLegs = 0, kAnyLeg, kMixLegs, kOneLeg };
+  enum ECutType { kBothLegs = 0, kAnyLeg, kMixLegs, kOneLeg };
 
   PairAnalysisPairLegCuts();
   PairAnalysisPairLegCuts(const char* name, const char* title);
@@ -37,14 +37,14 @@ public:
   AnalysisFilter& GetLeg1Filter() { return fFilterLeg1; }
   AnalysisFilter& GetLeg2Filter() { return fFilterLeg2; }
 
-  void SetCutType(CutType type) { fCutType = type; }
+  void SetCutType(ECutType type) { fCutType = type; }
   virtual void Print(const Option_t* option = "") const;
 
 private:
   AnalysisFilter fFilterLeg1;  // Analysis Filter for leg1
   AnalysisFilter fFilterLeg2;  // Analysis Filter for leg2
 
-  CutType fCutType = kBothLegs;  // Type of the cut
+  ECutType fCutType = kBothLegs;  // Type of the cut
 
   PairAnalysisPairLegCuts(const PairAnalysisPairLegCuts& c);
   PairAnalysisPairLegCuts& operator=(const PairAnalysisPairLegCuts& c);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.cxx
index b267900475ec4b0afc5c0bb6cb9a23c6c726505c..af1ad1507b619a6f0e89d13a185bc28025c8a2e9 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.cxx
@@ -603,7 +603,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
   // calculate optimal binning if configured
   if (fRebinStat < 1. && fBinLimits == 0x0) {
     fBinLimits = PairAnalysisHelper::MakeStatBinLimits(
-      (TH1*) FindObject(arrhist, PairAnalysis::kSEPM), fRebinStat);
+      (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kSEPM), fRebinStat);
   }
 
 
@@ -677,7 +677,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
 
   //// get histograms and rebin
   // SE ++
-  fHistDataPP = (TH1*) FindObject(arrhist, PairAnalysis::kSEPP);
+  fHistDataPP = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kSEPP);
   if (fHistDataPP) {
     if (fBinLimits) {
       fHistDataPP = fHistDataPP->Rebin(
@@ -690,7 +690,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fRebin > 1) fHistDataPP->Rebin(fRebin);
   }
   // SE +-
-  fHistDataPM = (TH1*) FindObject(arrhist, PairAnalysis::kSEPM);
+  fHistDataPM = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kSEPM);
   if (fHistDataPM) {
     if (fBinLimits) {
       fHistDataPM = fHistDataPM->Rebin(
@@ -704,7 +704,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     fHistDataPM->SetYTitle((fBinLimits ? "dN/dm" : "Counts"));
   }
   // SE --
-  fHistDataMM = (TH1*) FindObject(arrhist, PairAnalysis::kSEMM);
+  fHistDataMM = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kSEMM);
   if (fHistDataMM) {
     if (fBinLimits) {
       fHistDataMM = fHistDataMM->Rebin(
@@ -717,7 +717,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fRebin > 1) fHistDataMM->Rebin(fRebin);
   }
   // ME ++
-  fHistMixPP = (TH1*) FindObject(arrhist, PairAnalysis::kMEPP);
+  fHistMixPP = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kMEPP);
   if (fHistMixPP) {
     if (fBinLimits) {
       fHistMixPP = fHistMixPP->Rebin(
@@ -730,7 +730,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fRebin > 1) fHistMixPP->Rebin(fRebin);
   }
   // ME +-
-  fHistMixPM = (TH1*) FindObject(arrhist, PairAnalysis::kMEPM);
+  fHistMixPM = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kMEPM);
   if (fHistMixPM) {
     if (fBinLimits) {
       fHistMixPM = fHistMixPM->Rebin(
@@ -743,7 +743,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fRebin > 1) fHistMixPM->Rebin(fRebin);
   }
   // ME -+
-  fHistMixMP = (TH1*) FindObject(arrhist, PairAnalysis::kMEMP);
+  fHistMixMP = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kMEMP);
   if (fHistMixMP) {
     if (fBinLimits) {
       fHistMixMP = fHistMixMP->Rebin(
@@ -758,7 +758,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fHistMixPM) fHistMixMP->Add(fHistMixPM);  // merge ME +- and -+
   }
   // ME --
-  fHistMixMM = (TH1*) FindObject(arrhist, PairAnalysis::kMEMM);
+  fHistMixMM = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kMEMM);
   if (fHistMixMM) {
     if (fBinLimits) {
       fHistMixMM = fHistMixMM->Rebin(
@@ -771,7 +771,7 @@ void PairAnalysisSignalExt::Process(TObjArray* const arrhist) {
     if (fRebin > 1) fHistMixMM->Rebin(fRebin);
   }
   // TR +-
-  fHistDataTR = (TH1*) FindObject(arrhist, PairAnalysis::kSEPMRot);
+  fHistDataTR = (TH1*) FindObject(arrhist, PairAnalysis::EPairType::kSEPMRot);
   if (fHistDataTR) {
     if (fBinLimits) {
       fHistDataTR = fHistDataTR->Rebin(
@@ -1289,23 +1289,27 @@ void PairAnalysisSignalExt::Draw(const Option_t* option) {
   // styling
   fHistDataPM->SetNameTitle(Form("unlike-sign%s", GetName()), "unlike-sign");
   fHistDataPM->UseCurrentStyle();
-  PairAnalysisStyler::Style(fHistDataPM, PairAnalysisStyler::kRaw);
+  PairAnalysisStyler::Style(fHistDataPM,
+                            static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw));
   if (fPlotMin != fPlotMax) fHistDataPM->SetAxisRange(fPlotMin, fPlotMax, "X");
 
   fHistBackground->SetNameTitle(fgkBackgroundMethodNames[fMethod],
                                 fgkBackgroundMethodNames[fMethod]);
   fHistBackground->UseCurrentStyle();
-  PairAnalysisStyler::Style(fHistBackground, PairAnalysisStyler::kBgrd);
+  PairAnalysisStyler::Style(
+    fHistBackground, static_cast<Int_t>(PairAnalysisStyler::Eidx::kBgrd));
 
   fHistSignal->SetNameTitle(Form("signal%s", GetName()), "signal");
   fHistSignal->UseCurrentStyle();
-  PairAnalysisStyler::Style(fHistSignal, PairAnalysisStyler::kSig);
+  PairAnalysisStyler::Style(fHistSignal,
+                            static_cast<Int_t>(PairAnalysisStyler::Eidx::kSig));
   if (fPlotMin != fPlotMax) fHistSignal->SetAxisRange(fPlotMin, fPlotMax, "X");
 
   if (fHistCocktail) {
     fHistCocktail->SetNameTitle(Form("cocktail%s", GetName()), "cocktail");
     fHistCocktail->UseCurrentStyle();
-    PairAnalysisStyler::Style(fHistCocktail, PairAnalysisStyler::kCocktail);
+    PairAnalysisStyler::Style(
+      fHistCocktail, static_cast<Int_t>(PairAnalysisStyler::Eidx::kCocktail));
     if (fPlotMin != fPlotMax)
       fHistCocktail->SetAxisRange(fPlotMin, fPlotMax, "X");
   }
@@ -1313,12 +1317,14 @@ void PairAnalysisSignalExt::Draw(const Option_t* option) {
   if (optSB) {
     fHistSB->SetNameTitle(Form("s2b%s", GetName()), "signal");
     fHistSB->UseCurrentStyle();
-    PairAnalysisStyler::Style(fHistSB, PairAnalysisStyler::kSig);
+    PairAnalysisStyler::Style(
+      fHistSB, static_cast<Int_t>(PairAnalysisStyler::Eidx::kSig));
     if (fPlotMin != fPlotMax) fHistSB->SetAxisRange(fPlotMin, fPlotMax, "X");
   } else if (optSgn) {
     fHistSgn->SetNameTitle(Form("sgn%s", GetName()), "signal");
     fHistSgn->UseCurrentStyle();
-    PairAnalysisStyler::Style(fHistSgn, PairAnalysisStyler::kSig);
+    PairAnalysisStyler::Style(
+      fHistSgn, static_cast<Int_t>(PairAnalysisStyler::Eidx::kSig));
     if (fPlotMin != fPlotMax) fHistSgn->SetAxisRange(fPlotMin, fPlotMax, "X");
   }
 
@@ -1328,7 +1334,8 @@ void PairAnalysisSignalExt::Draw(const Option_t* option) {
 
   fgPeakShape->UseCurrentStyle();
   //  fgPeakShape->SetTitle("");
-  PairAnalysisStyler::Style(fgPeakShape, PairAnalysisStyler::kFit);
+  PairAnalysisStyler::Style(fgPeakShape,
+                            static_cast<Int_t>(PairAnalysisStyler::Eidx::kFit));
 
   // draw stuff
   if (c) c->cd(1);
@@ -1494,7 +1501,9 @@ void PairAnalysisSignalExt::Draw(const Option_t* option) {
         histClass.ReplaceAll("Pair.", "");
         histClass.ReplaceAll("Pair_", "");
         // change default signal names to titles
-        for (Int_t isig = 0; isig < PairAnalysisSignalMC::kNSignals; isig++) {
+        for (Int_t isig = 0; isig < static_cast<Int_t>(
+                               PairAnalysisSignalMC::EDefinedSignal::kNSignals);
+             isig++) {
           histClass.ReplaceAll(PairAnalysisSignalMC::fgkSignals[isig][0],
                                PairAnalysisSignalMC::fgkSignals[isig][1]);
         }
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.h
index e793b6c00f3ea378b35d218d80fa3e5db17d7d73..7c5707eaaf7bd0a84e385c3b47f972f3b8f0d772 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalExt.h
@@ -287,7 +287,8 @@ PairAnalysisSignalExt::FindObject(TObjArray* arrhist,
   //
 
   //  return ( arrhist->FindObject(Form("Pair.%s",PairAnalysis::PairClassName(type))) );
-  TString ref = Form("Pair.%s", PairAnalysis::PairClassName(type));
+  TString ref =
+    Form("Pair.%s", PairAnalysis::PairClassName(static_cast<Int_t>(type)));
   for (Int_t i = 0; i < arrhist->GetEntriesFast(); i++) {
     if (!ref.CompareTo(arrhist->UncheckedAt(i)->GetTitle()))
       return arrhist->UncheckedAt(i);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.cxx
index b54d3114cac1ce112724b93164d8f9f5d33d116e..14b6cdb9ba978e526bcf664a807c985d667dd4c9 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.cxx
@@ -66,35 +66,35 @@
 
 ClassImp(PairAnalysisSignalMC)
 
-  const char* PairAnalysisSignalMC::fgkSignals[kNSignals][2] =
-    {  //default signal names+titles
-      {"InclJpsi", "J/#psi (incl.)"},
-      {"NonRadJpsi", "J/#psi"},
-      {"RadJpsi", "J/#psi (rad.)"},
-      {"Psi2S", "#psi(2S)"},
-      {"Conversion", "#gamma#rightarrow e^{+}e^{-}"},
-      {"Rho0", "#rho^{0}"},
-      {"OmegaDalitz", "#omega_{Dalitz}"},
-      {"Omega", "#omega"},
-      {"Phi", "#phi"},
-      {"EtaDalitz", "#eta_{Dalitz}"},
-      {"Eta", "#eta"},
-      {"Pi0Dalitz", "#pi^{0}_{Dalitz}"},
-      {"Pi0Gamma", "#pi^{0}"},
-      {"Pi0", "#pi^{0}"},
-      {"K0Short", "K^{0}_{S}"},
-      {"Lambda", "#Lambda"},
-      {"InclElePM", "e^{+}e^{-} (incl.)"},
-      {"DeltaElectron", "#delta rays"},
-      {"PrimElectron", "e (prim.)"},
-      {"PrimMuon", "#mu (prim.)"},
-      {"PrimPion", "#pi (prim.)"},
-      {"PrimKaon", "K (prim.)"},
-      {"PrimProton", "p (prim.)"},
-      {"Deuteron", "d"},
-      {"Triton", "t"},
-      {"Helion", "^{3}He"},
-      {"Alpha", "^{4}He"}};
+  const char* PairAnalysisSignalMC::fgkSignals[static_cast<int>(
+    EDefinedSignal::kNSignals)][2] = {  //default signal names+titles
+    {"InclJpsi", "J/#psi (incl.)"},
+    {"NonRadJpsi", "J/#psi"},
+    {"RadJpsi", "J/#psi (rad.)"},
+    {"Psi2S", "#psi(2S)"},
+    {"Conversion", "#gamma#rightarrow e^{+}e^{-}"},
+    {"Rho0", "#rho^{0}"},
+    {"OmegaDalitz", "#omega_{Dalitz}"},
+    {"Omega", "#omega"},
+    {"Phi", "#phi"},
+    {"EtaDalitz", "#eta_{Dalitz}"},
+    {"Eta", "#eta"},
+    {"Pi0Dalitz", "#pi^{0}_{Dalitz}"},
+    {"Pi0Gamma", "#pi^{0}"},
+    {"Pi0", "#pi^{0}"},
+    {"K0Short", "K^{0}_{S}"},
+    {"Lambda", "#Lambda"},
+    {"InclElePM", "e^{+}e^{-} (incl.)"},
+    {"DeltaElectron", "#delta rays"},
+    {"PrimElectron", "e (prim.)"},
+    {"PrimMuon", "#mu (prim.)"},
+    {"PrimPion", "#pi (prim.)"},
+    {"PrimKaon", "K (prim.)"},
+    {"PrimProton", "p (prim.)"},
+    {"Deuteron", "d"},
+    {"Triton", "t"},
+    {"Helion", "^{3}He"},
+    {"Alpha", "^{4}He"}};
 
 //_________________________________________________________________________
 PairAnalysisSignalMC::PairAnalysisSignalMC()
@@ -125,160 +125,176 @@ PairAnalysisSignalMC::PairAnalysisSignalMC(EDefinedSignal defaultSignal)
   //
   TString title = "";
   switch (defaultSignal) {
-    case kInclJpsi:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kInclJpsi:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 443;
       fMother2         = 443;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       break;
-    case kRadJpsi:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kRadJpsi:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 443;
       fMother2         = 443;
-      fMothersRelation = kSame;
-      fDalitz          = kIsDalitz;
+      fMothersRelation = EBranchRelation::kSame;
+      fDalitz          = EDalitz::kIsDalitz;
       fDalitzPdg       = 22;
       break;
-    case kNonRadJpsi:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kNonRadJpsi:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 443;
       fMother2         = 443;
-      fMothersRelation = kSame;
-      fDalitz          = kIsNotDalitz;
+      fMothersRelation = EBranchRelation::kSame;
+      fDalitz          = EDalitz::kIsNotDalitz;
       fDalitzPdg       = 22;
       break;
-    case kPsi2S:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPsi2S:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 100443;
       fMother2         = 100443;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       break;
-    case kConversion:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kConversion:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 22;
       fMother2         = 22;
-      fMother1Source   = kSecondary;
-      fMother2Source   = kSecondary;
-      fMothersRelation = kSame;
+      fMother1Source   = ESource::kSecondary;
+      fMother2Source   = ESource::kSecondary;
+      fMothersRelation = EBranchRelation::kSame;
       // fGrandMother1=111; fGrandMother2=111;
       // fGrandMother1Exclude=kTRUE; fGrandMother1Exclude=111;
       SetGEANTProcess(kPPair);
       break;
-    case kRho0:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kRho0:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 113;
       fMother2         = 113;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       SetGEANTProcess(kPPrimary);  //pluto
       break;
-    case kOmega:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kOmega:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 223;
       fMother2         = 223;
-      fMothersRelation = kSame;
-      fDalitz          = kIsNotDalitz;
+      fMothersRelation = EBranchRelation::kSame;
+      fDalitz          = EDalitz::kIsNotDalitz;
       fDalitzPdg       = 111;
       SetGEANTProcess(kPPrimary);  //pluto
       break;
-    case kOmegaDalitz:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kOmegaDalitz:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 223;
       fMother2         = 223;
-      fMothersRelation = kSame;
-      fDalitz          = kIsDalitz;
+      fMothersRelation = EBranchRelation::kSame;
+      fDalitz          = EDalitz::kIsDalitz;
       fDalitzPdg       = 111;
       SetGEANTProcess(kPPrimary);  //pluto
       break;
-    case kPhi:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPhi:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 333;
       fMother2         = 333;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       SetGEANTProcess(kPPrimary);  //pluto
       break;
-    case kEtaDalitz:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kEtaDalitz:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 11;
       fLeg2                 = -11;
       fCheckBothChargesLeg1 = kTRUE;
       fCheckBothChargesLeg2 = kTRUE;
       fMother1              = 221;
       fMother2              = 221;
-      fMothersRelation      = kSame;
-      fDalitz               = kIsDalitz;
+      fMothersRelation      = EBranchRelation::kSame;
+      fDalitz               = EDalitz::kIsDalitz;
       fDalitzPdg            = 22;
       //    SetGEANTProcess(kPPrimary); //pluto
       break;
-    case kEta:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kEta:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 221;
       fMother2         = 221;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       //    SetGEANTProcess(kPUserDefined);
       break;
-    case kPi0:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPi0:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 111;
       fMother2         = 111;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       //    SetGEANTProcess(kPUserDefined);
       break;
-    case kPi0Gamma:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPi0Gamma:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 22;
       fMother2         = 22;
-      fMothersRelation = kSame;
+      fMothersRelation = EBranchRelation::kSame;
       fGrandMother1    = 111;
       fGrandMother2    = 111;
       //    SetGEANTProcess(kPUserDefined);
       break;
-    case kPi0Dalitz:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPi0Dalitz:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1            = 11;
       fLeg2            = -11;
       fMother1         = 111;
       fMother2         = 111;
-      fMothersRelation = kSame;
-      fDalitz          = kIsDalitz;
+      fMothersRelation = EBranchRelation::kSame;
+      fDalitz          = EDalitz::kIsDalitz;
       fDalitzPdg       = 22;
       // SetGEANTProcess(kPPrimary); //pluto
       break;
-    case kK0Short:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kK0Short:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                    = 211;
       fLeg2                    = -211;
       fMother1                 = 310;
       fMother2                 = 310;
       fCheckBothChargesMother1 = kTRUE;
       fCheckBothChargesMother2 = kTRUE;
-      fMothersRelation         = kSame;
+      fMothersRelation         = EBranchRelation::kSame;
       break;
-    case kLambda:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kLambda:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                    = 211;
       fLeg2                    = 2212;
       fCheckBothChargesLeg1    = kTRUE;
@@ -287,109 +303,120 @@ PairAnalysisSignalMC::PairAnalysisSignalMC(EDefinedSignal defaultSignal)
       fMother2                 = 3122;
       fCheckBothChargesMother1 = kTRUE;
       fCheckBothChargesMother2 = kTRUE;
-      fMothersRelation         = kSame;
+      fMothersRelation         = EBranchRelation::kSame;
       break;
-    case kInclElePM:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kInclElePM:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 11;
       fLeg2                 = -11;
       fCheckBothChargesLeg1 = kTRUE;
       fCheckBothChargesLeg2 = kTRUE;
-      fMother1Source        = kPrimary;
-      fMother2Source        = kPrimary;
-      //    fMothersRelation=kSame;
+      fMother1Source        = ESource::kPrimary;
+      fMother2Source        = ESource::kPrimary;
+      //    fMothersRelation=EBranchRelation::kSame;
       break;
-    case kDeltaElectron:  //single delta ray electrons
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kDeltaElectron:  //single delta ray electrons
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 11;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
       SetGEANTProcess(kPDeltaRay);
       fIsSingleParticle = kTRUE;
-      //    fMother1Source=kPrimary; fMother2Source=kDontCare;
+      //    fMother1Source=ESource::kPrimary; fMother2Source=kDontCare;
       break;
-    case kPrimElectron:  //single electrons
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPrimElectron:  //single electrons
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 11;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kPrimMuon:  //single muoons
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPrimMuon:  //single muoons
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 13;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kPrimPion:  //single pions
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPrimPion:  //single pions
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 211;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kPrimKaon:  //single kaons
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPrimKaon:  //single kaons
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 321;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kPrimProton:  //single protons
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kPrimProton:  //single protons
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1                 = 2212;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kDeuteron:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kDeuteron:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1 = 1000010020;
       ;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       //SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kTriton:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kTriton:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1 = 1000010030;
       ;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       //SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kHe3:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kHe3:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1 = 1000020030;
       ;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       //SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
-    case kAlpha:
-      SetNameTitle(fgkSignals[defaultSignal][0], fgkSignals[defaultSignal][1]);
+    case EDefinedSignal::kAlpha:
+      SetNameTitle(fgkSignals[static_cast<UInt_t>(defaultSignal)][0],
+                   fgkSignals[static_cast<UInt_t>(defaultSignal)][1]);
       fLeg1 = 1000020040;
       ;
       fLeg2                 = 1;
       fCheckBothChargesLeg1 = kTRUE;
-      //fMother1Source=kPrimary;
+      //fMother1Source=ESource::kPrimary;
       //SetGEANTProcess(kPPrimary);
       fIsSingleParticle = kTRUE;
       break;
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.h
index 30d2666dbeef47f4cf990f84f4607f5f26ecd032..7320f20ff9e255ef52006456165505768ea719e4 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSignalMC.h
@@ -15,8 +15,8 @@
 class PairAnalysisSignalMC : public TNamed {
 
 public:
-  enum EBranchRelation { kUndefined = 0, kSame, kDifferent };
-  enum ESource {
+  enum class EBranchRelation { kUndefined = 0, kSame, kDifferent };
+  enum class ESource {
     kDontCare = 0,
     kPrimary,
     kSecondary,
@@ -25,8 +25,8 @@ public:
     kSecondaryFromWeakDecay,
     kSecondaryFromMaterial
   };
-  enum EDalitz { kWhoCares = 0, kIsDalitz, kIsNotDalitz };
-  enum EDefinedSignal {
+  enum class EDalitz { kWhoCares = 0, kIsDalitz, kIsNotDalitz };
+  enum class EDefinedSignal {
     kInclJpsi = 0,
     kNonRadJpsi,
     kRadJpsi,
@@ -204,7 +204,8 @@ public:
   EDalitz GetDalitz() const { return fDalitz; }
   Int_t GetDalitzPdg() const { return fDalitzPdg; }
 
-  static const char* fgkSignals[kNSignals][2];  //default signal names+titles
+  static const char* fgkSignals[static_cast<int>(EDefinedSignal::kNSignals)]
+                               [2];  //default signal names+titles
 
   void Print(Option_t* option = "") const;
 
@@ -232,12 +233,12 @@ private:
   Bool_t fGreatGrandMother2Exclude = kFALSE;  // great grandmother 2
 
   // Particle sources
-  ESource fLeg1Source         = kDontCare;  // leg 1 source
-  ESource fLeg2Source         = kDontCare;  // leg 2 source
-  ESource fMother1Source      = kDontCare;  // mother 1 source
-  ESource fMother2Source      = kDontCare;  // mother 2 source
-  ESource fGrandMother1Source = kDontCare;  // grandmother 1 source
-  ESource fGrandMother2Source = kDontCare;  // grandmother 2 source
+  ESource fLeg1Source         = ESource::kDontCare;  // leg 1 source
+  ESource fLeg2Source         = ESource::kDontCare;  // leg 2 source
+  ESource fMother1Source      = ESource::kDontCare;  // mother 1 source
+  ESource fMother2Source      = ESource::kDontCare;  // mother 2 source
+  ESource fGrandMother1Source = ESource::kDontCare;  // grandmother 1 source
+  ESource fGrandMother2Source = ESource::kDontCare;  // grandmother 2 source
 
   // Flaggs whether to check both charges of a given PDG code
   Bool_t fCheckBothChargesLeg1 = kFALSE;  // check both charges of the legs pdg
@@ -252,7 +253,7 @@ private:
     kFALSE;                            //         great grand mother 2
   Bool_t fCheckGEANTProcess = kFALSE;  //              GEANT process
 
-  EBranchRelation fMothersRelation =
+  EBranchRelation fMothersRelation = EBranchRelation::
     kUndefined;  // mother 1&2 relation (same, different or whatever)
   TMCProcess fGEANTProcess =
     kPPrimary;                // GEANT process ID (see roots TMCProcess)
@@ -261,8 +262,8 @@ private:
   UInt_t fType       = 0;     // lookup variable for weighting factors
 
   // dalitz decays
-  EDalitz fDalitz  = kWhoCares;  // check for dalitz decay
-  Int_t fDalitzPdg = 0;          // dalitz PDG
+  EDalitz fDalitz  = EDalitz::kWhoCares;  // check for dalitz decay
+  Int_t fDalitzPdg = 0;                   // dalitz PDG
 
   Bool_t fFillPureMCStep = kFALSE;  // check and fill the pure MC step
   Bool_t fIsSingleParticle =
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
index ca8cfaa53986c38eeeed33ffdf105011810050ea..fa25438d1afce3e88041d2a4c22b35a6bf2995a8 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
@@ -266,7 +266,8 @@ void PairAnalysisSpectrum::Process() {
 
       if (!histArr && h)
         histArr = h->DrawSame(Form("pM_%s", fVar.Data()), "nomc goff");
-      TH2* histPM = (TH2*) sig->FindObject(histArr, PairAnalysis::kSEPM);
+      TH2* histPM =
+        (TH2*) sig->FindObject(histArr, PairAnalysis::EPairType::kSEPM);
       if (!histPM) return;
 
       TObjArray tmpArr;
@@ -637,7 +638,7 @@ void PairAnalysisSpectrum::DrawSpectrum(const char* varexp,
           //	  if(gx[j]!=xLo) break; // check should not be needed
           Double_t uce = 0.;
           switch (fSystMthd) {
-            case kBarlow:
+            case ESystMethod::kBarlow:
               // I.  calc uncorr. stat. error from sub/superset w.r.t. first measurement
               uce = TMath::Sqrt(
                 TMath::Abs(gye[j] * gye[j] - gye[first] * gye[first]));
@@ -645,19 +646,19 @@ void PairAnalysisSpectrum::DrawSpectrum(const char* varexp,
               // NOTE: 0.9 can be change to a max value of 1->1sigma, 0.9 is more consevative
               esys = TMath::Max(esys, TMath::Abs(ysys - gy[j]) - 0.9 * uce);
               break;
-            case kSystMax:
+            case ESystMethod::kSystMax:
               esys = TMath::Max(esys, TMath::Abs(ysys - gy[j]));
               break;
-            case kSystRMS: esys += gy[j] * gy[j]; break;
+            case ESystMethod::kSystRMS: esys += gy[j] * gy[j]; break;
           }
           //	  printf("bin error %f \t  syst %f  from abs %f \n",gye[j],esys, TMath::Abs( gy[j] ));
         }
 
         // normalisation
         switch (fSystMthd) {
-          case kBarlow: /* nothing to be done */ break;
-          case kSystMax: /* nothing to be done */ break;
-          case kSystRMS:
+          case ESystMethod::kBarlow: /* nothing to be done */ break;
+          case ESystMethod::kSystMax: /* nothing to be done */ break;
+          case ESystMethod::kSystRMS:
             esys =
               TMath::Sqrt(TMath::Abs(esys / (nsys ? nsys : 1) - ysys * ysys));
             break;
@@ -865,7 +866,8 @@ void PairAnalysisSpectrum::Fit(TString drawoption) {
     return;
   }
 
-  PairAnalysisStyler::Style(fFuncSigBack, PairAnalysisStyler::kFit);
+  PairAnalysisStyler::Style(fFuncSigBack,
+                            static_cast<Int_t>(PairAnalysisStyler::Eidx::kFit));
   fFuncSigBack->SetLineColor(fSignal->GetLineColor());
   //  fFuncSigBack->SetLineStyle(kDashed);
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.h
index 3bd0ef3bc1041a6222cfe491f73ccd51013d74a0..b1020e4b05f9f16d46000d5b903f9894b3891464 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.h
@@ -59,7 +59,7 @@ ClassImp(Extraction)
   class PairAnalysisSpectrum : public PairAnalysisFunction {
 
 public:
-  enum ESystMethod { kBarlow = 0, kSystMax, kSystRMS };
+  enum class ESystMethod { kBarlow = 0, kSystMax, kSystRMS };
 
   PairAnalysisSpectrum();
   PairAnalysisSpectrum(const char* name, const char* title);
@@ -108,7 +108,7 @@ private:
 
   // calculation
   ESystMethod fSystMthd =
-    kSystMax;  // method for systematic uncertainty calculation
+    ESystMethod::kSystMax;  // method for systematic uncertainty calculation
 
   // input
   TString fInputKeys[100];  // keys to identify the extraction
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyleDefs.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyleDefs.h
index 5a1c7ec8c739ede4e4255eca68ec7ff7c878bec0..cf5bde5ddf7909927e214f6c67a8cbbcda24d968 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyleDefs.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyleDefs.h
@@ -21,25 +21,29 @@
 
 namespace PairAnalysisStyler {
 
-  //  enum Eidx : Int_t { kRaw=100, kBgrd, kSig, kFit, kCocktail, kNidx };
-  //  enum EfillMark : Int_t { kOpenMarker=1, kFullMarker, kDontCare };
-  //  enum Estyle : Int_t { kNMaxMarker=13, kNMaxLine=4, kNMaxColor=17 };
-  //  enum Epalette : Int_t { kDefault=0, kGoodBad };
+  /* enum class Eidx  { kRaw=100, kBgrd, kSig, kFit, kCocktail, kNidx }; */
+  /* enum class EfillMark { kOpenMarker=1, kFullMarker, kDontCare }; */
+  /* enum class Estyle  { kNMaxMarker=13, kNMaxLine=4, kNMaxColor=17 }; */
+  /* enum class Epalette  { kDefault=0, kGoodBad }; */
 
-  static Int_t fCol[kNidx - kRaw]    = {kBlack,
-                                     kTeal - 8,
-                                     kBlack,
-                                     kTeal - 7,
-                                     kTeal - 7};
-  static Int_t fMrk[kNidx - kRaw]    = {kFullCircle,
-                                     kOpenCircle,
-                                     kOpenCircle,
-                                     kDot,
-                                     kDot};
-  static Double_t fSze[kNidx - kRaw] = {1., 1., 1., 1., 1.};
-  static Int_t fLne[kNidx - kRaw]    = {kSolid, kSolid, kSolid, kSolid, kSolid};
-  static Double_t fWdt[kNidx - kRaw] = {2., 2., 2., 2., 2.};
-  static Int_t fFll[kNidx - kRaw]    = {0, 0, 0, 0, 0};  //kFEmpty
+  static Int_t fCol[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                    - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {kBlack, kTeal - 8, kBlack, kTeal - 7, kTeal - 7};
+  static Int_t fMrk[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                    - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {kFullCircle, kOpenCircle, kOpenCircle, kDot, kDot};
+  static Double_t fSze[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                       - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {1., 1., 1., 1., 1.};
+  static Int_t fLne[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                    - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {kSolid, kSolid, kSolid, kSolid, kSolid};
+  static Double_t fWdt[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                       - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {2., 2., 2., 2., 2.};
+  static Int_t fFll[static_cast<Int_t>(PairAnalysisStyler::Eidx::kNidx)
+                    - static_cast<Int_t>(PairAnalysisStyler::Eidx::kRaw)] =
+    {0, 0, 0, 0, 0};  //kFEmpty
 
   static Int_t Marker[] = {kFullCircle,
                            kFullDiamond,
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.cxx
index 71b46a15311a927ad2c8996589a928d01dafef66..ea545b2501c7be5e453ec5c901a418216a5f27ee 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.cxx
@@ -289,19 +289,25 @@ void PairAnalysisStyler::Style(TObject* obj, Int_t idx) {
   // marker attributes
   if (obj->InheritsFrom(TAttMarker::Class())) {
     if (idx >= 100) {  // predefined styles
-      dynamic_cast<TAttMarker*>(obj)->SetMarkerSize(fSze[idx - kRaw]);
-      dynamic_cast<TAttMarker*>(obj)->SetMarkerStyle(fMrk[idx - kRaw]);
-      dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(fCol[idx - kRaw]);
+      dynamic_cast<TAttMarker*>(obj)->SetMarkerSize(
+        fSze[idx - static_cast<Int_t>(Eidx::kRaw)]);
+      dynamic_cast<TAttMarker*>(obj)->SetMarkerStyle(
+        fMrk[idx - static_cast<Int_t>(Eidx::kRaw)]);
+      dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(
+        fCol[idx - static_cast<Int_t>(Eidx::kRaw)]);
     } else {
       dynamic_cast<TAttMarker*>(obj)->SetMarkerSize(1.5);
-      dynamic_cast<TAttMarker*>(obj)->SetMarkerStyle(Marker[idx % kNMaxMarker]);
-      dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(Color[idx % kNMaxColor]);
-      if (idx >= kNMaxColor && idx < kNMaxColor * 2) {
-        idx = idx % kNMaxColor;
+      dynamic_cast<TAttMarker*>(obj)->SetMarkerStyle(
+        Marker[idx % static_cast<Int_t>(Estyle::kNMaxMarker)]);
+      dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(
+        Color[idx % static_cast<Int_t>(Estyle::kNMaxColor)]);
+      if (idx >= static_cast<Int_t>(Estyle::kNMaxColor)
+          && idx < static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % static_cast<Int_t>(Estyle::kNMaxColor);
         dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(
           TColor::GetColorDark(Color[idx]));
-      } else if (idx >= kNMaxColor * 2) {
-        idx = idx % (2 * kNMaxColor);
+      } else if (idx >= static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % (2 * static_cast<Int_t>(Estyle::kNMaxColor));
         dynamic_cast<TAttMarker*>(obj)->SetMarkerColor(
           TColor::GetColorBright(Color[idx]));
       }
@@ -312,19 +318,25 @@ void PairAnalysisStyler::Style(TObject* obj, Int_t idx) {
   if (obj->InheritsFrom(TAttLine::Class())) {
     //    printf("index %d for %s \n",idx,obj->GetName());
     if (idx >= 100) {  // predefined styles
-      dynamic_cast<TAttLine*>(obj)->SetLineWidth(fWdt[idx - kRaw]);
-      dynamic_cast<TAttLine*>(obj)->SetLineStyle(fLne[idx - kRaw]);
-      dynamic_cast<TAttLine*>(obj)->SetLineColor(fCol[idx - kRaw]);
+      dynamic_cast<TAttLine*>(obj)->SetLineWidth(
+        fWdt[idx - static_cast<Int_t>(Eidx::kRaw)]);
+      dynamic_cast<TAttLine*>(obj)->SetLineStyle(
+        fLne[idx - static_cast<Int_t>(Eidx::kRaw)]);
+      dynamic_cast<TAttLine*>(obj)->SetLineColor(
+        fCol[idx - static_cast<Int_t>(Eidx::kRaw)]);
     } else {
       dynamic_cast<TAttLine*>(obj)->SetLineWidth(2);
-      dynamic_cast<TAttLine*>(obj)->SetLineStyle(Line[idx % kNMaxLine]);
-      dynamic_cast<TAttLine*>(obj)->SetLineColor(Color[idx % kNMaxColor]);
-      if (idx >= kNMaxColor && idx < kNMaxColor * 2) {
-        idx = idx % kNMaxColor;
+      dynamic_cast<TAttLine*>(obj)->SetLineStyle(
+        Line[idx % static_cast<Int_t>(Estyle::kNMaxLine)]);
+      dynamic_cast<TAttLine*>(obj)->SetLineColor(
+        Color[idx % static_cast<Int_t>(Estyle::kNMaxColor)]);
+      if (idx >= static_cast<Int_t>(Estyle::kNMaxColor)
+          && idx < static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % static_cast<Int_t>(Estyle::kNMaxColor);
         dynamic_cast<TAttLine*>(obj)->SetLineColor(
           TColor::GetColorDark(Color[idx]));
-      } else if (idx >= kNMaxColor * 2) {
-        idx = idx % (2 * kNMaxColor);
+      } else if (idx >= static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % (2 * static_cast<Int_t>(Estyle::kNMaxColor));
         dynamic_cast<TAttLine*>(obj)->SetLineColor(
           TColor::GetColorBright(Color[idx]));
       }
@@ -334,17 +346,23 @@ void PairAnalysisStyler::Style(TObject* obj, Int_t idx) {
   // fill attributes, only used if fill style is set (default: not)
   if (obj->InheritsFrom(TAttFill::Class())) {
     //    printf("fill style %d for index: %d \n",Fill[0],idx);
-    if (idx >= 100 && fFll[idx - kRaw] >= 0) {  // predefined styles
-      dynamic_cast<TAttFill*>(obj)->SetFillColor(fCol[idx - kRaw]);
-      dynamic_cast<TAttFill*>(obj)->SetFillStyle(fFll[idx - kRaw]);
+    if (idx >= 100
+        && fFll[idx - static_cast<Int_t>(Eidx::kRaw)]
+             >= 0) {  // predefined styles
+      dynamic_cast<TAttFill*>(obj)->SetFillColor(
+        fCol[idx - static_cast<Int_t>(Eidx::kRaw)]);
+      dynamic_cast<TAttFill*>(obj)->SetFillStyle(
+        fFll[idx - static_cast<Int_t>(Eidx::kRaw)]);
     } else if (Fill[0] >= 0) {
-      dynamic_cast<TAttFill*>(obj)->SetFillColor(Color[idx % kNMaxColor]);
-      if (idx >= kNMaxColor && idx < kNMaxColor * 2) {
-        idx = idx % kNMaxColor;
+      dynamic_cast<TAttFill*>(obj)->SetFillColor(
+        Color[idx % static_cast<Int_t>(Estyle::kNMaxColor)]);
+      if (idx >= static_cast<Int_t>(Estyle::kNMaxColor)
+          && idx < static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % static_cast<Int_t>(Estyle::kNMaxColor);
         dynamic_cast<TAttFill*>(obj)->SetFillColor(
           TColor::GetColorDark(Color[idx]));
-      } else if (idx >= kNMaxColor * 2) {
-        idx = idx % (2 * kNMaxColor);
+      } else if (idx >= static_cast<Int_t>(Estyle::kNMaxColor) * 2) {
+        idx = idx % (2 * static_cast<Int_t>(Estyle::kNMaxColor));
         dynamic_cast<TAttFill*>(obj)->SetFillColor(
           TColor::GetColorBright(Color[idx]));
       }
@@ -358,7 +376,7 @@ void PairAnalysisStyler::SetForceLineStyle(Int_t line) {
   //
   // force a certain line style
   //
-  for (Int_t i = 0; i < kNMaxLine; i++) {
+  for (Int_t i = 0; i < static_cast<Int_t>(Estyle::kNMaxLine); i++) {
     Line[i] = line;
   }
 }
@@ -368,7 +386,7 @@ void PairAnalysisStyler::SetForceColor(Int_t color) {
   //
   // force a certain color
   //
-  for (Int_t i = 0; i < kNMaxColor; i++) {
+  for (Int_t i = 0; i < static_cast<Int_t>(Estyle::kNMaxColor); i++) {
     Color[i] = color;
   }
 }
@@ -378,7 +396,9 @@ void PairAnalysisStyler::SetForceFillStyle(Int_t fill) {
   //
   // force a certain color
   //
-  for (Int_t i = 0; i < (kNidx - kRaw); i++) {
+  for (Int_t i = 0;
+       i < (static_cast<Int_t>(Eidx::kNidx) - static_cast<Int_t>(Eidx::kRaw));
+       i++) {
     fFll[i] = fill;
   }
   Fill[0] = fill;
@@ -389,50 +409,50 @@ void PairAnalysisStyler::SetForceMarkerFillStyle(EfillMark fill) {
   //
   // force a certain marker fill style
   //
-  for (Int_t i = 0; i < kNMaxMarker; i++) {
+  for (Int_t i = 0; i < static_cast<Int_t>(Estyle::kNMaxMarker); i++) {
 
     switch (Marker[i]) {
       case kOpenCircle:
-        if (fill == kFullMarker) Marker[i] = kFullCircle;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullCircle;
         break;
       case kOpenSquare:
-        if (fill == kFullMarker) Marker[i] = kFullSquare;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullSquare;
         break;
       case kOpenTriangleUp:
-        if (fill == kFullMarker) Marker[i] = kFullTriangleUp;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullTriangleUp;
         break;
       case kOpenTriangleDown:
-        if (fill == kFullMarker) Marker[i] = kFullTriangleDown;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullTriangleDown;
         break;
       case kOpenStar:
-        if (fill == kFullMarker) Marker[i] = kFullStar;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullStar;
         break;
       case kOpenDiamond:
-        if (fill == kFullMarker) Marker[i] = kFullDiamond;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullDiamond;
         break;
       case kOpenCross:
-        if (fill == kFullMarker) Marker[i] = kFullCross;
+        if (fill == EfillMark::kFullMarker) Marker[i] = kFullCross;
         break;
       case kFullCircle:
-        if (fill == kOpenMarker) Marker[i] = kOpenCircle;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenCircle;
         break;
       case kFullSquare:
-        if (fill == kOpenMarker) Marker[i] = kOpenSquare;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenSquare;
         break;
       case kFullTriangleUp:
-        if (fill == kOpenMarker) Marker[i] = kOpenTriangleUp;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenTriangleUp;
         break;
       case kFullTriangleDown:
-        if (fill == kOpenMarker) Marker[i] = kOpenTriangleDown;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenTriangleDown;
         break;
       case kFullStar:
-        if (fill == kOpenMarker) Marker[i] = kOpenStar;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenStar;
         break;
       case kFullDiamond:
-        if (fill == kOpenMarker) Marker[i] = kOpenDiamond;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenDiamond;
         break;
       case kFullCross:
-        if (fill == kOpenMarker) Marker[i] = kOpenCross;
+        if (fill == EfillMark::kOpenMarker) Marker[i] = kOpenCross;
         break;
     }
   }
@@ -450,12 +470,12 @@ void PairAnalysisStyler::SetStyle(Eidx idx,
   //
   // change predefined style "idx" according to arguments
   //
-  fCol[idx - kRaw] = col;
-  fMrk[idx - kRaw] = marker;
-  fSze[idx - kRaw] = size;
-  fLne[idx - kRaw] = line;
-  fWdt[idx - kRaw] = width;
-  fFll[idx - kRaw] = fill;
+  fCol[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = col;
+  fMrk[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = marker;
+  fSze[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = size;
+  fLne[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = line;
+  fWdt[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = width;
+  fFll[static_cast<Int_t>(idx) - static_cast<Int_t>(Eidx::kRaw)] = fill;
 }
 
 
@@ -575,7 +595,7 @@ void PairAnalysisStyler::SetPalette(Epalette colors, Bool_t reverse) {
   Double_t stops[NRGBs] = {0.00, 0.34, 0.61, 0.84, 1.00};
 
   switch (colors) {
-    case kDefault: {
+    case Epalette::kDefault: {
       Double_t red[NRGBs]   = {0.00, 0.00, 0.87, 1.00, 0.51};
       Double_t green[NRGBs] = {0.00, 0.81, 1.00, 0.20, 0.00};
       Double_t blue[NRGBs]  = {0.51, 1.00, 0.12, 0.00, 0.00};
@@ -585,7 +605,7 @@ void PairAnalysisStyler::SetPalette(Epalette colors, Bool_t reverse) {
         TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
       break;
     }
-    case kGoodBad: {
+    case Epalette::kGoodBad: {
       Double_t red[NRGBs]   = {0.00, 0.00, 0.87, 1.00, 0.36};
       Double_t green[NRGBs] = {0.20, 0.81, 1.00, 0.20, 0.00};
       Double_t blue[NRGBs]  = {0.00, 0.00, 0.00, 0.00, 0.00};
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.h
index 0ae123cd072fc2511b051a60c4c152b3f37812bb..b106e9ea36978b18854b43d083e907cb3cbccd65 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisStyler.h
@@ -22,10 +22,10 @@
 
 namespace PairAnalysisStyler {
 
-  enum Eidx { kRaw = 100, kBgrd, kSig, kFit, kCocktail, kNidx };
-  enum Epalette { kDefault = 0, kGoodBad };
-  enum EfillMark { kOpenMarker = 1, kFullMarker, kDontCare };
-  enum Estyle { kNMaxMarker = 13, kNMaxLine = 4, kNMaxColor = 17 };
+  enum class Eidx { kRaw = 100, kBgrd, kSig, kFit, kCocktail, kNidx };
+  enum class Epalette { kDefault = 0, kGoodBad };
+  enum class EfillMark { kOpenMarker = 1, kFullMarker, kDontCare };
+  enum class Estyle { kNMaxMarker = 13, kNMaxLine = 4, kNMaxColor = 17 };
 
   void SetStyle(TStyle* userStyle);
 
@@ -45,7 +45,8 @@ namespace PairAnalysisStyler {
 
   void SetForceMarkerFillStyle(EfillMark fill);
 
-  void SetPalette(Epalette colors = kDefault, Bool_t reverse = kFALSE);
+  void SetPalette(Epalette colors = Epalette::kDefault,
+                  Bool_t reverse  = kFALSE);
 
   void SetLegendAlign(UInt_t align);
   void SetLegendAttributes(TLegend* leg, Bool_t fill = kFALSE);
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisTrackRotator.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisTrackRotator.h
index b41ba7d7d0acdf8005796b2bad15825bc0603c2c..e620f2f4b57ea8478f14621e051941d672c9fb07 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisTrackRotator.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisTrackRotator.h
@@ -16,7 +16,11 @@
 
 class PairAnalysisTrackRotator : public TNamed {
 public:
-  enum ERotationType { kRotatePositive, kRotateNegative, kRotateBothRandom };
+  enum class ERotationType {
+    kRotatePositive,
+    kRotateNegative,
+    kRotateBothRandom
+  };
 
   PairAnalysisTrackRotator();
   PairAnalysisTrackRotator(const char* name, const char* title);
@@ -41,9 +45,10 @@ public:
   Double_t GetCharge() const { return TMath::Nint(gRandom->Rndm()); }
 
 private:
-  UInt_t fIterations          = 1;                  // number of iterations
-  ERotationType fRotationType = kRotateBothRandom;  // which track to rotate
-  Double_t fStartAnglePhi     = TMath::Pi();  // starting angle for rotation
+  UInt_t fIterations = 1;  // number of iterations
+  ERotationType fRotationType =
+    ERotationType::kRotateBothRandom;     // which track to rotate
+  Double_t fStartAnglePhi = TMath::Pi();  // starting angle for rotation
   Double_t fConeAnglePhi =
     TMath::Pi();  // opening angle in phi for multiple rotation
 
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.cxx
index a35096dccd4ca07d168b27c45fba7316e2a94438..866dfcf366050a744a8f03dc4748542d05f1c120 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.cxx
@@ -38,7 +38,7 @@ ClassImp(PairAnalysisVarCuts)
   , fNActiveCuts(0)
   , fActiveCutsMask(0)
   , fSelectedCutsMask(0)
-  , fCutType(kAll) {
+  , fCutType(ECutType::kAll) {
   //
   // Default costructor
   //
@@ -60,7 +60,7 @@ PairAnalysisVarCuts::PairAnalysisVarCuts(const char* name, const char* title)
   , fNActiveCuts(0)
   , fActiveCutsMask(0)
   , fSelectedCutsMask(0)
-  , fCutType(kAll) {
+  , fCutType(ECutType::kAll) {
   //
   // Named contructor
   //
@@ -122,12 +122,12 @@ Bool_t PairAnalysisVarCuts::IsSelected(Double_t* const values) {
       }
     }
     // cut type and decision
-    if (fCutType == kAll && !TESTBIT(fSelectedCutsMask, iCut))
+    if (fCutType == ECutType::kAll && !TESTBIT(fSelectedCutsMask, iCut))
       return kFALSE;  // option to (minor) speed improvement
   }
 
   Bool_t isSelected = (fSelectedCutsMask == fActiveCutsMask);
-  if (fCutType == kAny) isSelected = (fSelectedCutsMask > 0);
+  if (fCutType == ECutType::kAny) isSelected = (fSelectedCutsMask > 0);
   SetSelected(isSelected);
   return isSelected;
 }
@@ -232,7 +232,7 @@ void PairAnalysisVarCuts::Print(const Option_t* /*option*/) const {
   //
   printf("------------------------------------------\n");
   printf("cut ranges for '%s'\n", GetTitle());
-  if (fCutType == kAll) {
+  if (fCutType == ECutType::kAll) {
     printf("All Cuts have to be fulfilled\n");
   } else {
     printf("Any Cut has to be fulfilled\n");
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.h
index 9b463a5b9cfcbe40e3cc2644f01a90f0a56738af..1832583a6e841182ec7c7dae39dc915de122d785 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarCuts.h
@@ -23,7 +23,7 @@
 class PairAnalysisVarCuts : public AnalysisCuts {
 public:
   // Whether all cut criteria have to be fulfilled of just any
-  enum CutType { kAll = 0, kAny };
+  enum class ECutType { kAll = 0, kAny };
 
   PairAnalysisVarCuts();
   PairAnalysisVarCuts(const char* name, const char* title);
@@ -46,10 +46,10 @@ public:
                  Bool_t excludeRange = kFALSE);
 
   // setters
-  void SetCutType(CutType type) { fCutType = type; }
+  void SetCutType(ECutType type) { fCutType = type; }
 
   // getters
-  CutType GetCutType() const { return fCutType; }
+  ECutType GetCutType() const { return fCutType; }
 
   Int_t GetNCuts() { return fNActiveCuts; }
 
@@ -80,7 +80,7 @@ private:
 
   UInt_t
     fSelectedCutsMask;  // Maks of selected cuts, is available after calling IsSelected
-  CutType fCutType;  // type of the cut: any, all
+  ECutType fCutType;    // type of the cut: any, all
 
   Double_t fCutMin
     [PairAnalysisVarManager::kNMaxValuesMC];  // minimum values for the cuts
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.cxx
index a7b40c6c7ebbff9935ddd9e4b81ee2edb4761ca1..38821e230c8a3eed1fb343c602b166495695635f 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.cxx
@@ -129,6 +129,7 @@ ClassImp(PairAnalysisVarManager)
     {"MVDFirstExtY", "y_{first station}^{MVD}", "(cm)"},
     //  {"ImpactParZ",             "#it{dca}_{z}/#Delta#it{dca}_{z}",                    "#sigma"},
     {"STSHits", "N_{hit}^{STS}", ""},
+    {"STSMVDHits", "N_{hit}^{STS}+MVD", ""},
     {"STSChi2NDF", "#chi^{2}/^{}N_{df}^{STS}", ""},
     {"STSPin", "#it{p}^{STSin}", "(GeV/#it{c})"},
     {"STSPtin", "#it{p}_{T}^{STSin}", "(GeV/#it{c})"},
@@ -182,6 +183,8 @@ ClassImp(PairAnalysisVarManager)
     {"Cos2PhiCS", "cos(2#phi_{CS})", ""},
     {"CosTilPhiCS", "cos(#phi_{CS})", ""},
     {"PsiPair", "#Psi^{pair}", "(rad.)"},
+    {"StsMvdFirstDaughter", "", ""},
+    {"StsMvdSecondDaughter", "", ""},
     {"PhivPair", "#Phi_{v}^{pair}", "(rad.)"},
 
     {"LegDistance", "d^{legs}", "(cm)"},
@@ -238,6 +241,7 @@ ClassImp(PairAnalysisVarManager)
     {"PMC", "#it{p}^{MC}", "(GeV/#it{c})"},
     {"XvMC", "x_{vtx}^{MC}", "(cm)"},
     {"YvMC", "y_{vtx}^{MC}", "(cm)"},
+    {"RvMC", "Sqrt(x_{vtx}^{2}_{MC}+y_{vtx}^{2}_{MC})", "(cm)"},
     {"ZvMC", "z_{vtx}^{MC}", "(cm)"},
     {"PhivMC", "#phi_{vtx}^{MC}", "(rad.)"},
     {"ThetavMC",
@@ -265,6 +269,7 @@ ClassImp(PairAnalysisVarManager)
     {"TRDHitsMC", "N_{hit}^{TRD} (MC)", ""},
     {"MVDHitsMC", "N_{hit}^{MVD} (MC)", ""},
     {"STSHitsMC", "N_{hit}^{STS} (MC)", ""},
+    {"STSMVDHitsMC", "N_{hit}^{STS} (MC)", ""},
     {"TOFHitsMC", "N_{hit}^{TOF} (MC)", ""},
     {"MUCHHitsMC", "N_{hit}^{MUCH} (MC)", ""},
     {"RICHHitsMC", "N_{hit}^{RICH} (MC)", ""},
@@ -287,6 +292,8 @@ ClassImp(PairAnalysisVarManager)
     // Pair specific MC variables
     {"OpeningAngleMC", "#varphi^{MC}", "(rad.)"},
     {"CosPointingAngleMC", "cos(#theta)^{MC}", "(rad.)"},
+    {"StsMvdFirstDaughterMC", "", ""},
+    {"StsMvdSecondDaughterMC", "", ""},
     //  {"PhivPairMC",               "#Phi_{v}^{MC}",                                    "(rad.)"},
 
     // Event specific MCvariables
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.h b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.h
index 29ce174e988eb5d1d0694e27e6a7e37670b72183..3079ba5db110f34a8fadd84dda6bf0b33e76c13f 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.h
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisVarManager.h
@@ -163,6 +163,7 @@ public:
     kMvdFirstExtY,  // y-position of the extrapolated track at the first MVD station (cm)
     //    kImpactParZ,             // Impact parameter of track at target z, in units of its error
     kStsHits,          // number of STS hits
+    kStsMvdHits,       // number of STS hits
     kStsChi2NDF,       // chi2/ndf STS
     kStsPin,           // first point STS momentum (GeV/c)
     kStsPtin,          // first point STS transverse momentum (GeV/c)
@@ -219,6 +220,8 @@ public:
     kCos2PhiCS,  // Cosine of 2*phi in mother's rest frame in the Collins-Soper picture
     kCosTilPhiCS,  // Shifted phi depending on kThetaCS
     kPsiPair,      // phi in mother's rest frame in Collins-Soper picture
+    kStsMvdFirstDaughter,   // number of STS and MVD hits
+    kStsMvdSecondDaughter,  // number of STS and MVD hits
     kPhivPair,  // angle between ee plane and the magnetic field (can be useful for conversion rejection)
 
     kLegDist,         // distance of the legs
@@ -278,6 +281,7 @@ public:
     kPMC,                 // momentum
     kXvMC,                // vertex position in x
     kYvMC,                // vertex position in y
+    kRvMC,                // vertex position as (x^2 + y^2)
     kZvMC,                // vertex position in z
     kPhivMC,              // vertex position in phi
     kThetavMC,            // vertex position in theta
@@ -303,6 +307,7 @@ public:
     kTrdHitsMC = kParticleMaxMC,  // number of TRD hits
     kMvdHitsMC,                   // number of MVD hits
     kStsHitsMC,                   // number of STS hits
+    kStsMvdHitsMC,                // number of STS hits
     kTofHitsMC,                   // number of TOF hits
     kMuchHitsMC,                  // number of MUCH hits
     kRichHitsMC,                  // number of RICH hits
@@ -326,6 +331,8 @@ public:
     // Pair specific MC variables
     kOpeningAngleMC = kTrackMaxMC,  // opening angle
     kCosPointingAngleMC,            // cosine of the pointing angle
+    kStsMvdFirstDaughterMC,         // number of STS and MVD hits
+    kStsMvdSecondDaughterMC,        // number of STS and MVD hits
     //    kPhivPairMC,                // angle between d1d2 plane and the magnetic field
     kPairMaxMC,
 
@@ -801,7 +808,7 @@ PairAnalysisVarManager::FillVarPairAnalysisTrack(const PairAnalysisTrack* track,
   values[kM]      = track->M();
   values[kCharge] = track->Charge();
   values[kMt] = TMath::Sqrt(values[kMPair] * values[kMPair] + values[kPtSq]);
-  //  values[kPdgCode]   = track->PdgCode();
+  values[kPdgCode] = track->PdgCode();
   values[kChi2NDFtoVtx] = track->ChiToVertex();
   values[kImpactParXY] =
     TMath::Sqrt(TMath::Power(TMath::Abs(values[kXv] - values[kXvPrim]), 2)
@@ -973,7 +980,8 @@ inline void PairAnalysisVarManager::FillVarStsTrack(const CbmStsTrack* track,
   //  values[kImpactParZ]     = track->GetB();  //Impact parameter of track at target z, in units of its error
   //  printf(" mom %f   impactparz %f \n",values[kPout],values[kImpactParZ]);
   // accessors via CbmTrack
-  values[kStsHits] = track->GetNofStsHits();
+  values[kStsHits]    = track->GetNofStsHits();
+  values[kStsMvdHits] = track->GetNofStsHits() + track->GetNofMvdHits();
   values[kStsChi2NDF] =
     (track->GetNDF() > 0. ? track->GetChiSq() / track->GetNDF() : -999.);
   // accessors via first FairTrackParam
@@ -1038,16 +1046,24 @@ inline void PairAnalysisVarManager::FillVarMCParticle(const CbmMCTrack* p1,
 
   // Set
   CbmMCTrack* mother = 0x0;
-  Int_t mLabel1      = p1->GetMotherId();
-  Int_t mLabel2      = p2->GetMotherId();
+  //  CbmMCTrack* smother = 0x0;
+  Int_t mLabel1 = p1->GetMotherId();
+  Int_t mLabel2 = p2->GetMotherId();
   if (mLabel1 == mLabel2) mother = mc->GetMCTrackFromMCEvent(mLabel1);
+  /* mother  = mc->GetMCTrackFromMCEvent(mLabel1); */
+  /* smother = mc->GetMCTrackFromMCEvent(mLabel2); */
 
   PairAnalysisPair* pair = new PairAnalysisPairLV();
   pair->SetMCTracks(p1, p2);
 
-  if (mother)
+  if (mother) {
     FillVarMCTrack(mother, values);
-  else {
+    values[kStsMvdFirstDaughterMC] =
+      p1->GetNPoints(ECbmModuleId::kSts) + p1->GetNPoints(ECbmModuleId::kMvd);
+    values[kStsMvdSecondDaughterMC] =
+      p2->GetNPoints(ECbmModuleId::kSts) + p2->GetNPoints(ECbmModuleId::kMvd);
+    //    FillVarMCTrack(smother, values);
+  } else {
     values[kPxMC]   = pair->Px();
     values[kPyMC]   = pair->Py();
     values[kPzMC]   = pair->Pz();
@@ -1057,6 +1073,14 @@ inline void PairAnalysisVarManager::FillVarMCParticle(const CbmMCTrack* p1,
 
     values[kXvMC] = pair->Xv();
     values[kYvMC] = pair->Yv();
+    if (mother)
+      if (mother->GetPdgCode() == 22)
+        std::cout << pair->Xv() << "   " << pair->Xv() * pair->Xv() << "   "
+                  << TMath::Sqrt(pair->Xv() * pair->Xv()
+                                 + pair->Yv() * pair->Yv())
+                  << "   " << pair->Zv() << std::endl;
+    values[kRvMC] =
+      TMath::Sqrt(pair->Xv() * pair->Xv() + pair->Yv() * pair->Yv());
     values[kZvMC] = pair->Zv();
     //TODO  values[kTMC]         = 0.;
 
@@ -1076,6 +1100,7 @@ inline void PairAnalysisVarManager::FillVarMCParticle(const CbmMCTrack* p1,
     fgVertexMC ? pair->GetCosPointingAngle(fgVertexMC) : -1;
   //  values[kPhivPairMC]     = pair->PhivPair(1.);
 
+
   // delete the surplus pair
   delete pair;
 }
@@ -1103,8 +1128,21 @@ inline void PairAnalysisVarManager::FillVarMCTrack(const CbmMCTrack* particle,
 
   values[kPdgCode]       = particle->GetPdgCode();
   values[kPdgCodeMother] = (mother ? mother->GetPdgCode() : -99999.);
-  values[kEMotherMC]     = (mother ? mother->GetEnergy() : -99999.);
-  CbmMCTrack* granni     = 0x0;
+
+  if (mother) {
+    //    if(particle->GetPdgCode() == 11 || particle->GetPdgCode() == -11)  std::cout<<  particle->GetPdgCode()  <<"    " <<  mother->GetPdgCode() <<"   "<< particle->GetGeantProcessId() <<std::endl;
+    if (mother->GetPdgCode() == 22) values[kPdgCodeMother] = 1;
+    if (mother->GetPdgCode() == 111) values[kPdgCodeMother] = 3;
+    if (mother->GetPdgCode() == 211 || mother->GetPdgCode() == -211)
+      values[kPdgCodeMother] = 5;
+    if (mother->GetPdgCode() == 2212) values[kPdgCodeMother] = 7;
+    if (mother->GetPdgCode() == 99009011 || mother->GetPdgCode() == 99009911)
+      values[kPdgCodeMother] = 9;
+  }
+
+
+  values[kEMotherMC] = (mother ? mother->GetEnergy() : -99999.);
+  CbmMCTrack* granni = 0x0;
   if (mother) granni = mc->GetMCTrackMother(mother);
   values[kPdgCodeGrandMother] =
     (granni ? granni->GetPdgCode() : -99999.);  //mc->GetMotherPDG(mother);
@@ -1120,6 +1158,10 @@ inline void PairAnalysisVarManager::FillVarMCTrack(const CbmMCTrack* particle,
   values[kXvMC] = particle->GetStartX();
   values[kYvMC] = particle->GetStartY();
   values[kZvMC] = particle->GetStartZ();
+  //  if(mother) if(mother->GetPdgCode() == 22)    std::cout<<particle->GetStartX()<<"   "<<particle->GetStartX()*particle->GetStartX()<<"   "<< TMath::Sqrt( particle->GetStartX()*particle->GetStartX() + particle->GetStartY()*particle->GetStartY() ) <<"   " << particle->GetStartZ()<<std::endl;
+  values[kRvMC] = TMath::Sqrt(particle->GetStartX() * particle->GetStartX()
+                              + particle->GetStartY() * particle->GetStartY());
+
   TVector3 vtx;
   particle->GetStartVertex(vtx);
   values[kPhivMC]   = vtx.Phi();
@@ -1146,10 +1188,12 @@ inline void PairAnalysisVarManager::FillVarMCTrack(const CbmMCTrack* particle,
   values[kChargeMC]    = particle->GetCharge();
 
   // detector info
-  values[kRichHitsMC] = particle->GetNPoints(ECbmModuleId::kRich);
-  values[kTrdHitsMC]  = particle->GetNPoints(ECbmModuleId::kTrd);
-  values[kMvdHitsMC]  = particle->GetNPoints(ECbmModuleId::kMvd);
-  values[kStsHitsMC]  = particle->GetNPoints(ECbmModuleId::kSts);
+  values[kRichHitsMC]   = particle->GetNPoints(ECbmModuleId::kRich);
+  values[kTrdHitsMC]    = particle->GetNPoints(ECbmModuleId::kTrd);
+  values[kMvdHitsMC]    = particle->GetNPoints(ECbmModuleId::kMvd);
+  values[kStsHitsMC]    = particle->GetNPoints(ECbmModuleId::kSts);
+  values[kStsMvdHitsMC] = particle->GetNPoints(ECbmModuleId::kSts)
+                          + particle->GetNPoints(ECbmModuleId::kMvd);
   values[kTofHitsMC]  = particle->GetNPoints(ECbmModuleId::kTof);
   values[kMuchHitsMC] = particle->GetNPoints(ECbmModuleId::kMuch);
 }
@@ -1209,6 +1253,166 @@ PairAnalysisVarManager::FillVarPairAnalysisPair(const PairAnalysisPair* pair,
   /* values[kPdgCodeGrandMother]=-1; */
   values[kWeight] = pair->GetWeight();
 
+
+  if (pair->GetFirstDaughter() && pair->GetFirstDaughter()->GetStsTrack()) {
+    values[kStsMvdFirstDaughter] =
+      pair->GetFirstDaughter()->GetStsTrack()->GetNofStsHits()
+      + pair->GetFirstDaughter()->GetStsTrack()->GetNofMvdHits();
+    //    std::cout<<pair->GetFirstDaughter()->GetStsTrack()->GetNofMvdHits()<<std::endl;
+  }
+  if (pair->GetSecondDaughter() && pair->GetSecondDaughter()->GetStsTrack())
+    values[kStsMvdSecondDaughter] =
+      pair->GetSecondDaughter()->GetStsTrack()->GetNofStsHits()
+      + pair->GetSecondDaughter()->GetStsTrack()->GetNofMvdHits();
+
+
+  if (pair->GetFirstDaughter()->GetMCTrack()) {
+
+    PairAnalysisMC* mc = PairAnalysisMC::Instance();
+    if (!mc->HasMC()) return;
+
+    // Set
+    CbmMCTrack* mother = 0x0;
+    Int_t mLabel1      = pair->GetFirstDaughter()->GetMCTrack()->GetMotherId();
+    mother             = mc->GetMCTrackFromMCEvent(mLabel1);
+
+    Int_t motherCode = (mother ? mother->GetPdgCode() : -99999.);
+
+    Int_t secondMother = -99999.;
+    if (pair->GetSecondDaughter()->GetMCTrack()) {
+      CbmMCTrack* sm = 0x0;
+      Int_t mLabel2  = pair->GetSecondDaughter()->GetMCTrack()->GetMotherId();
+      sm             = mc->GetMCTrackFromMCEvent(mLabel2);
+      secondMother   = (sm ? sm->GetPdgCode() : -99999.);
+
+
+      //      std::cout<<pair->GetFirstDaughter()->GetMCTrack()->GetNPoints(ECbmModuleId::kSts)<<"    " << pair->GetSecondDaughter()->GetMCTrack()->GetNPoints(ECbmModuleId::kSts)<<std::endl;
+
+      /* if(mother){ */
+      /* 	if(  (pair->GetFirstDaughter()->GetMCTrack()->GetPdgCode() == 11 &&  pair->GetSecondDaughter()->GetMCTrack()->GetPdgCode() == -11) || */
+      /* 	     (pair->GetFirstDaughter()->GetMCTrack()->GetPdgCode() == -11 && pair->GetSecondDaughter()->GetMCTrack()->GetPdgCode() == 11) )      std::cout<<motherCode<<"    " << secondMother<<"   "<< pair->GetFirstDaughter()->GetMCTrack()->GetGeantProcessId()<<"   "<< pair->GetSecondDaughter()->GetMCTrack()->GetGeantProcessId()<<std::endl; */
+      /* } */
+    }
+
+    if (motherCode == 99009011 || secondMother == 99009011
+        || motherCode == 99009911 || secondMother == 99009911) {
+      //if (motherCode == 99009011 || secondMother == 99009011) {
+      Double_t mass[170] = {
+        0.0195, 0.0395, 0.0595, 0.0795, 0.0995, 0.1195, 0.1395, 0.1595, 0.1795,
+        0.1995, 0.2195, 0.2395, 0.2595, 0.2795, 0.2995, 0.3195, 0.3395, 0.3595,
+        0.3795, 0.3995, 0.4195, 0.4395, 0.4595, 0.4795, 0.4995, 0.5195, 0.5395,
+        0.5595, 0.5795, 0.5995, 0.6195, 0.6395, 0.6595, 0.6795, 0.6995, 0.7195,
+        0.7395, 0.7595, 0.7795, 0.7995, 0.8195, 0.8395, 0.8595, 0.8795, 0.8995,
+        0.9195, 0.9395, 0.9595, 0.9795, 0.9995, 1.0195, 1.0395, 1.0595, 1.0795,
+        1.0995, 1.1195, 1.1395, 1.1595, 1.1795, 1.1995, 1.2195, 1.2395, 1.2595,
+        1.2795, 1.2995, 1.3195, 1.3395, 1.3595, 1.3795, 1.3995, 1.4195, 1.4395,
+        1.4595, 1.4795, 1.4995, 1.5195, 1.5395, 1.5595, 1.5795, 1.5995, 1.6195,
+        1.6395, 1.6595, 1.6795, 1.6995, 1.7195, 1.7395, 1.7595, 1.7795, 1.7995,
+        1.8195, 1.8395, 1.8595, 1.8795, 1.8995, 1.9195, 1.9395, 1.9595, 1.9795,
+        1.9995, 2.0195, 2.0395, 2.0595, 2.0795, 2.0995, 2.1195, 2.1395, 2.1595,
+        2.1795, 2.1995, 2.2195, 2.2395, 2.2595, 2.2795, 2.2995, 2.3195, 2.3395,
+        2.3595, 2.3795, 2.3995, 2.4195, 2.4395, 2.4595, 2.4795, 2.4995, 2.5195,
+        2.5395, 2.5595, 2.5795, 2.5995, 2.6195, 2.6395, 2.6595, 2.6795, 2.6995,
+        2.7195, 2.7395, 2.7595, 2.7795, 2.7995, 2.8195, 2.8395, 2.8595, 2.8795,
+        2.8995, 2.9195, 2.9395, 2.9595, 2.9795, 2.9995, 3.0195, 3.0395, 3.0595,
+        3.0795, 3.0995, 3.1195, 3.1395, 3.1595, 3.1795, 3.1995, 3.2195, 3.2395,
+        3.2595, 3.2795, 3.2995, 3.3195, 3.3395, 3.3595, 3.3795, 3.3995};
+      Double_t scale[170] = {
+        41.706,     18.918,     11.465,     8.4388,     5.9176,     4.9025,
+        3.8087,     3.0387,     2.5856,     2.1142,     1.7603,     1.5327,
+        1.28,       1.1579,     1.0367,     0.89355,    0.81317,    0.71582,
+        0.65863,    0.59678,    0.53702,    0.45378,    0.41238,    0.37502,
+        0.33593,    0.28791,    0.26352,    0.23939,    0.21167,    0.19479,
+        0.19204,    0.17492,    0.15811,    0.15479,    0.14935,    0.13803,
+        0.1354,     0.11993,    0.1046,     0.08226,    0.073183,   0.055433,
+        0.043467,   0.033975,   0.028025,   0.021504,   0.016863,   0.014108,
+        0.01094,    0.0088095,  0.007324,   0.0057162,  0.0046817,  0.0037459,
+        0.0030017,  0.0024459,  0.0020671,  0.0016089,  0.0013754,  0.0011223,
+        0.00096256, 0.00081647, 0.00072656, 0.00060776, 0.00051243, 0.00045705,
+        0.00039636, 0.00036259, 0.00033248, 0.0002953,  0.00027328, 0.00023776,
+        0.00022163, 0.00019852, 0.000186,   0.00016846, 0.00015469, 0.00014169,
+        0.00013343, 0.00011594, 0.00010722, 0.00010205, 9.1907e-05, 8.3718e-05,
+        7.5457e-05, 6.7192e-05, 6.2202e-05, 5.7372e-05, 4.8314e-05, 4.5502e-05,
+        4.1334e-05, 3.7429e-05, 3.2131e-05, 3.0103e-05, 2.6125e-05, 2.3601e-05,
+        2.1167e-05, 1.94e-05,   1.7025e-05, 1.5496e-05, 1.3704e-05, 1.1866e-05,
+        1.1135e-05, 9.8842e-06, 8.9101e-06, 7.9225e-06, 7.0706e-06, 6.3536e-06,
+        5.3786e-06, 4.7179e-06, 4.2128e-06, 4.0015e-06, 3.4118e-06, 3.1864e-06,
+        2.734e-06,  2.3844e-06, 2.173e-06,  1.8774e-06, 1.6468e-06, 1.501e-06,
+        1.3597e-06, 1.2113e-06, 1.0384e-06, 9.4105e-07, 8.4223e-07, 7.434e-07,
+        6.5049e-07, 5.8824e-07, 5.3603e-07, 4.6756e-07, 4.1173e-07, 3.5872e-07,
+        3.2764e-07, 2.9889e-07, 2.5989e-07, 2.219e-07,  1.9468e-07, 1.816e-07,
+        1.5707e-07, 1.3565e-07, 1.2619e-07, 1.0919e-07, 1.0071e-07, 8.4632e-08,
+        7.6459e-08, 6.829e-08,  6.2046e-08, 5.5335e-08, 4.5937e-08, 4.2426e-08,
+        3.567e-08,  3.4051e-08, 2.9627e-08, 2.5249e-08, 2.2767e-08, 2.1054e-08,
+        1.7873e-08, 1.574e-08,  1.3713e-08, 1.23e-08,   1.1045e-08, 9.5536e-09,
+        8.5859e-09, 7.7217e-09, 6.9958e-09, 6.0992e-09, 5.3453e-09, 4.7659e-09,
+        4.3313e-09, 3.6575e-09};
+      TSpline3* weight = new TSpline3("inmedwghts", mass, scale, 170);
+      Double_t corrw   = weight->Eval(values[PairAnalysisVarManager::kM]);
+      values[kWeight] *= corrw;
+      delete weight;
+    }
+
+    if (motherCode == 99009111 || secondMother == 99009111) {
+      //    if(motherCode == 99009911 || secondMother == 99009911){
+      Double_t mass[170] = {
+        0.0195, 0.0395, 0.0595, 0.0795, 0.0995, 0.1195, 0.1395, 0.1595, 0.1795,
+        0.1995, 0.2195, 0.2395, 0.2595, 0.2795, 0.2995, 0.3195, 0.3395, 0.3595,
+        0.3795, 0.3995, 0.4195, 0.4395, 0.4595, 0.4795, 0.4995, 0.5195, 0.5395,
+        0.5595, 0.5795, 0.5995, 0.6195, 0.6395, 0.6595, 0.6795, 0.6995, 0.7195,
+        0.7395, 0.7595, 0.7795, 0.7995, 0.8195, 0.8395, 0.8595, 0.8795, 0.8995,
+        0.9195, 0.9395, 0.9595, 0.9795, 0.9995, 1.0195, 1.0395, 1.0595, 1.0795,
+        1.0995, 1.1195, 1.1395, 1.1595, 1.1795, 1.1995, 1.2195, 1.2395, 1.2595,
+        1.2795, 1.2995, 1.3195, 1.3395, 1.3595, 1.3795, 1.3995, 1.4195, 1.4395,
+        1.4595, 1.4795, 1.4995, 1.5195, 1.5395, 1.5595, 1.5795, 1.5995, 1.6195,
+        1.6395, 1.6595, 1.6795, 1.6995, 1.7195, 1.7395, 1.7595, 1.7795, 1.7995,
+        1.8195, 1.8395, 1.8595, 1.8795, 1.8995, 1.9195, 1.9395, 1.9595, 1.9795,
+        1.9995, 2.0195, 2.0395, 2.0595, 2.0795, 2.0995, 2.1195, 2.1395, 2.1595,
+        2.1795, 2.1995, 2.2195, 2.2395, 2.2595, 2.2795, 2.2995, 2.3195, 2.3395,
+        2.3595, 2.3795, 2.3995, 2.4195, 2.4395, 2.4595, 2.4795, 2.4995, 2.5195,
+        2.5395, 2.5595, 2.5795, 2.5995, 2.6195, 2.6395, 2.6595, 2.6795, 2.6995,
+        2.7195, 2.7395, 2.7595, 2.7795, 2.7995, 2.8195, 2.8395, 2.8595, 2.8795,
+        2.8995, 2.9195, 2.9395, 2.9595, 2.9795, 2.9995, 3.0195, 3.0395, 3.0595,
+        3.0795, 3.0995, 3.1195, 3.1395, 3.1595, 3.1795, 3.1995, 3.2195, 3.2395,
+        3.2595, 3.2795, 3.2995, 3.3195, 3.3395, 3.3595, 3.3795, 3.3995};
+      Double_t scale[170] = {
+        39.496,     17.961,     11.024,     8.2093,     5.8331,     4.8995,
+        3.8612,     3.1258,     2.7006,     2.2465,     1.908,      1.699,
+        1.4435,     1.3253,     1.2059,     1.049,      0.96753,    0.86685,
+        0.81407,    0.75959,    0.70663,    0.61951,    0.58586,    0.55534,
+        0.51902,    0.46377,    0.4415,     0.41412,    0.37414,    0.34883,
+        0.34494,    0.31141,    0.2762,     0.26331,    0.24693,    0.22286,
+        0.21697,    0.1972,     0.1841,     0.16097,    0.16352,    0.14345,
+        0.13096,    0.11911,    0.11399,    0.10111,    0.0913,     0.08764,
+        0.077745,   0.071417,   0.067561,   0.05987,    0.055543,   0.050193,
+        0.045244,   0.04128,    0.03898,    0.03365,    0.031622,   0.028217,
+        0.026215,   0.023919,   0.022648,   0.019915,   0.017524,   0.016145,
+        0.014357,   0.013362,   0.012368,   0.011036,   0.010198,   0.0088275,
+        0.0081762,  0.0072697,  0.00675,    0.0060424,  0.0054788,  0.0049588,
+        0.0046174,  0.0039685,  0.00363,    0.0034204,  0.0030534,  0.0027606,
+        0.0024723,  0.0021893,  0.0020174,  0.0018545,  0.0015584,  0.0014661,
+        0.0013315,  0.0012065,  0.0010375,  0.00097456, 0.00084865, 0.00076982,
+        0.00069371, 0.00063931, 0.00056442, 0.00051712, 0.00046054, 0.00040174,
+        0.00037996, 0.00034009, 0.00030921, 0.00027738, 0.00024981, 0.00022659,
+        0.00019366, 0.00017153, 0.00015469, 0.00014841, 0.00012783, 0.00012061,
+        0.00010456, 9.2145e-05, 8.4856e-05, 7.4087e-05, 6.5675e-05, 6.0496e-05,
+        5.5386e-05, 4.9865e-05, 4.3202e-05, 3.9571e-05, 3.5821e-05, 3.201e-05,
+        2.8322e-05, 2.5886e-05, 2.384e-05,  2.1016e-05, 1.8703e-05, 1.6467e-05,
+        1.5199e-05, 1.4011e-05, 1.2311e-05, 1.0621e-05, 9.4155e-06, 8.874e-06,
+        7.7548e-06, 6.7662e-06, 6.3589e-06, 5.5585e-06, 5.1791e-06, 4.3965e-06,
+        4.012e-06,  3.6195e-06, 3.3215e-06, 2.9918e-06, 2.5084e-06, 2.3397e-06,
+        1.9865e-06, 1.915e-06,  1.6826e-06, 1.448e-06,  1.3183e-06, 1.231e-06,
+        1.0551e-06, 9.3811e-07, 8.2511e-07, 7.4714e-07, 6.7735e-07, 5.9142e-07,
+        5.3654e-07, 4.8709e-07, 4.4543e-07, 3.9199e-07, 3.4674e-07, 3.1203e-07,
+        2.862e-07,  2.4391e-07};
+      TSpline3* weight = new TSpline3("inmedwghts", mass, scale, 170);
+      Double_t corrw   = weight->Eval(values[PairAnalysisVarManager::kM]);
+      values[kWeight] *= corrw;
+      delete weight;
+    }
+  }
+
+
   Double_t thetaHE = 0;
   Double_t phiHE   = 0;
   Double_t thetaCS = 0;