From 967283d18317e23b5e1936633d01344b3964a3c7 Mon Sep 17 00:00:00 2001
From: Daniel Wielanek <wielanek@if.pw.edu.pl>
Date: Thu, 12 Nov 2020 16:08:20 +0100
Subject: [PATCH] Cleaing up cuts. Added CbmHbtEvent.

---
 .../femtoscopy/nicafemto/CMakeLists.txt       |   5 +
 .../femtoscopy/nicafemto/cuts/CMakeLists.txt  |  70 +++++-
 ...TrackCutLinkDef.h => NicaCbmCutsLinkDef.h} |  17 ++
 .../anatreecuts/pair/CbmBasicFemtoPairCut.cxx |  63 ++++++
 .../anatreecuts/pair/CbmBasicFemtoPairCut.h   |  48 ++++
 .../anatreecuts/track/CbmBasicTrackCuts.cxx   | 214 ++++++++++++++++++
 .../anatreecuts/track/CbmBasicTrackCuts.h     |  70 ++++++
 .../cuts/anatreecuts/track/CbmNHitsCut.cxx    |  25 ++
 .../cuts/anatreecuts/track/CbmNHitsCut.h      |  23 ++
 .../cuts/anatreecuts/track/CbmTofCut.cxx      |  38 ++++
 .../cuts/anatreecuts/track/CbmTofCut.h        |  27 +++
 .../pair/CbmDeltaPhiDeltaThetaCut.cxx         | 117 ++++++++++
 .../pair/CbmDeltaPhiDeltaThetaCut.h           |  40 ++++
 .../cuts/commoncuts/pair/CbmStsExitSepCut.cxx |  85 +++++++
 .../cuts/commoncuts/pair/CbmStsExitSepCut.h   |  28 +++
 .../cuts/commoncuts/track/CbmTofM2PolyCut.cxx |  24 ++
 .../cuts/commoncuts/track/CbmTofM2PolyCut.h   |  22 ++
 .../cuts/rawcuts/paircuts/CbmAvXYCut.cxx      |  56 +++++
 .../cuts/rawcuts/paircuts/CbmAvXYCut.h        |  24 ++
 .../rawcuts/paircuts/CbmSailorCowboyCut.cxx   |  65 ++++++
 .../rawcuts/paircuts/CbmSailorCowboyCut.h     |  29 +++
 .../trackcuts/CbmHasTofTrackCut.cxx           |   6 +-
 .../trackcuts/CbmHasTofTrackCut.h             |   0
 .../trackcuts/CbmMCPointsCuts.cxx             |   1 +
 .../{ => rawcuts}/trackcuts/CbmMCPointsCuts.h |   0
 .../trackcuts/CbmStsFarDetectorHit.cxx        |   4 +-
 .../trackcuts/CbmStsFarDetectorHit.h          |   0
 .../trackcuts/CbmStsStationsCut.cxx           |   1 +
 .../trackcuts/CbmStsStationsCut.h             |   0
 .../trackcuts/CbmStsTrackHitsCut.cxx          |   5 +-
 .../trackcuts/CbmStsTrackHitsCut.h            |   0
 .../trackcuts/CbmTofTrackCuts.cxx             |  11 +-
 .../{ => rawcuts}/trackcuts/CbmTofTrackCuts.h |   0
 .../nicafemto/cuts/trackcuts/CMakeLists.txt   |  54 -----
 .../nicafemto/cuts/trackcuts/CbmGhostCut.cxx  |  21 --
 .../nicafemto/cuts/trackcuts/CbmGhostCut.h    |  21 --
 .../nicafemto/format/CMakeLists.txt           |  33 ++-
 .../nicafemto/format/NicaCbmFormatLinkDef.h   |  20 ++
 .../nicafemto/format/NicaCbmFormatTypes.cxx   |  30 +++
 .../nicafemto/format/NicaCbmFormatTypes.h     |  22 ++
 .../format/anatree/CbmAnaTreeContainer.cxx    |  48 ++++
 .../format/anatree/CbmAnaTreeContainer.h      |  91 ++++++++
 .../format/anatree/CbmAnaTreeObjectTrack.cxx  |  28 +++
 .../format/anatree/CbmAnaTreeObjectTrack.h    |  35 +++
 .../format/anatree/CbmAnaTreeSource.cxx       | 175 ++++++++++++++
 .../format/anatree/CbmAnaTreeSource.h         |  71 ++++++
 .../format/anatree/femto/CbmHbtEvent.cxx      |  35 +++
 .../format/anatree/femto/CbmHbtEvent.h        |  30 +++
 .../format/anatree/femto/CbmHbtTrack.cxx      |  67 ++++++
 .../format/anatree/femto/CbmHbtTrack.h        |  39 ++++
 .../format/anatree/mc/NicaCbmATMCEvent.cxx    |  66 ++++++
 .../format/anatree/mc/NicaCbmATMCEvent.h      |  29 +++
 .../anatree/mc/NicaCbmATMCEventInterface.cxx  |  72 ++++++
 .../anatree/mc/NicaCbmATMCEventInterface.h    |  53 +++++
 .../format/anatree/mc/NicaCbmATMCTrack.cxx    |  13 ++
 .../format/anatree/mc/NicaCbmATMCTrack.h      |  20 ++
 .../anatree/mc/NicaCbmATMCTrackInterface.cxx  |  13 ++
 .../anatree/mc/NicaCbmATMCTrackInterface.h    |  21 ++
 .../format/anatree/reco/NicaCbmATEvent.cxx    | 107 +++++++++
 .../format/anatree/reco/NicaCbmATEvent.h      |  34 +++
 .../anatree/reco/NicaCbmATEventInterface.cxx  |  81 +++++++
 .../anatree/reco/NicaCbmATEventInterface.h    |  51 +++++
 .../format/anatree/reco/NicaCbmATTrack.cxx    |  49 ++++
 .../format/anatree/reco/NicaCbmATTrack.h      |  41 ++++
 .../anatree/reco/NicaCbmATTrackInterface.cxx  |  13 ++
 .../anatree/reco/NicaCbmATTrackInterface.h    |  22 ++
 .../format/combined/CbmHbtFullEvent.cxx       |  25 ++
 .../format/combined/CbmHbtFullEvent.h         |  29 +++
 .../format/combined/NicaCbmATFullEvent.cxx    |  52 +++++
 .../format/combined/NicaCbmATFullEvent.h      |  27 +++
 .../format/combined/NicaCbmGlobalMCEvent.cxx  |   3 +-
 .../format/combined/NicaCbmGlobalMCEvent.h    |   2 +-
 .../nicafemto/format/full/NicaCbmEvent.cxx    |  63 ++++--
 .../nicafemto/format/full/NicaCbmEvent.h      |   2 +-
 .../format/full/NicaCbmEventInterface.cxx     |  78 +++++--
 .../format/full/NicaCbmEventInterface.h       |   2 +-
 .../nicafemto/format/full/NicaCbmTrack.cxx    |  36 ++-
 .../nicafemto/format/full/NicaCbmTrack.h      |  13 +-
 .../format/global/NicaCbmGlobalEvent.cxx      |   7 +-
 .../format/global/NicaCbmGlobalTrack.cxx      |   4 +-
 .../format/global/NicaCbmGlobalTrack.h        |   2 +-
 .../global/NicaCbmGlobalTrackInterface.cxx    |   4 +-
 .../format/matched/NicaCbmMatchedEvent.cxx    |  13 +-
 .../format/matched/NicaCbmMatchedEvent.h      |   5 +-
 .../matched/NicaCbmMatchedEventInterface.cxx  |  48 ++--
 .../matched/NicaCbmMatchedEventInterface.h    |   2 +-
 .../format/matched/NicaCbmMatchedTrack.cxx    |  46 ++--
 .../matched/NicaCbmMatchedTrackInterface.cxx  |   4 +-
 .../nicafemto/format/mc/NicaCbmMCEvent.cxx    |  11 +-
 .../nicafemto/format/mc/NicaCbmMCTrack.cxx    |  10 +-
 .../format/mc/NicaCbmMCTrackInterface.cxx     |   8 +-
 .../format/unigen/NicaGeneratorReadUnigen.cxx |  10 +-
 .../unigen/NicaGeneratorWriteUnigen.cxx       |  11 +-
 .../format/unigen/NicaUnigenEvent.cxx         |  25 +-
 .../format/unigen/NicaUnigenSource.cxx        |   1 -
 .../unigen/NicaUnigenTrackInterface.cxx       |   4 +-
 .../nicafemto/helpers/CMakeLists.txt          |   1 -
 .../nicafemto/helpers/CbmDetectorID.h         |   7 +-
 .../femtoscopy/nicafemto/helpers/CbmHelix.cxx | 135 ++++++-----
 .../femtoscopy/nicafemto/helpers/CbmHelix.h   |   4 +-
 .../nicafemto/helpers/CbmNicaCompression.cxx  | 190 ++++++++++++++++
 .../nicafemto/helpers/CbmNicaCompression.h    |  38 ++++
 .../helpers/CbmStsTrackMapProducer.cxx        |  75 ------
 .../helpers/CbmStsTrackMapProducer.h          |  29 ---
 .../nicafemto/helpers/NicaCbmFirstTask.cxx    |  15 +-
 .../nicafemto/helpers/NicaCbmFirstTask.h      |   5 +-
 .../nicafemto/helpers/NicaCbmHelpersLinkDef.h |   2 +-
 .../analysis_tree_converter/CMakeLists.txt    |   1 +
 external/InstallNicaFemto.cmake               |   2 +-
 macro/analysis/cbmfemto/hbt_anatree.C         | 173 ++++++++++++++
 macro/analysis/cbmfemto/show_hbt.C            |  36 +++
 111 files changed, 3443 insertions(+), 440 deletions(-)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{trackcuts/NicaCbmTrackCutLinkDef.h => NicaCbmCutsLinkDef.h} (57%)
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.h
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmHasTofTrackCut.cxx (84%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmHasTofTrackCut.h (100%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmMCPointsCuts.cxx (99%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmMCPointsCuts.h (100%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsFarDetectorHit.cxx (87%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsFarDetectorHit.h (100%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsStationsCut.cxx (99%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsStationsCut.h (100%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsTrackHitsCut.cxx (92%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmStsTrackHitsCut.h (100%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmTofTrackCuts.cxx (93%)
 rename analysis/PWGC2F/femtoscopy/nicafemto/cuts/{ => rawcuts}/trackcuts/CbmTofTrackCuts.h (100%)
 delete mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CMakeLists.txt
 delete mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.cxx
 delete mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.h
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.cxx
 create mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.h
 delete mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.cxx
 delete mode 100644 analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.h
 create mode 100644 macro/analysis/cbmfemto/hbt_anatree.C
 create mode 100644 macro/analysis/cbmfemto/show_hbt.C

diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt
index ea637c24c1..d13d09552e 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/CMakeLists.txt
@@ -32,6 +32,10 @@ set(NICA_CBM_FORMAT
 	${NICA_CBM}/format/global
 	${NICA_CBM}/format/matched
 	${NICA_CBM}/format/mc
+	${NICA_CBM}/format/anatree
+	${NICA_CBM}/format/anatree/reco
+	${NICA_CBM}/format/anatree/mc
+	${NICA_CBM}/format/anatree/femto
 	${NICA_CBM}/format/unigen
 	${NICA_CBM}/format/hits
 	${NICA_CBM}/format/matched_hits
@@ -56,6 +60,7 @@ set(NICAFEMTO_FEATURES
 	${CBMROOT_SOURCE_DIR}/external/NicaFemto/features
 	${CBMROOT_SOURCE_DIR}/external/NicaFemto/features/hist
 	${CBMROOT_SOURCE_DIR}/external/NicaFemto/features/io
+	${CBMROOT_SOURCE_DIR}/external/NicaFemto/features/io/html
 	${CBMROOT_SOURCE_DIR}/external/NicaFemto/features/std
 )
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/CMakeLists.txt
index e9ba064f99..10a72636da 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/CMakeLists.txt
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/CMakeLists.txt
@@ -1 +1,69 @@
-add_subdirectory(trackcuts)
+# Create a library called "" which includes the source files given in
+# the array .
+# The extension is already found.  Any number of sources could be listed here.
+Set(INCLUDE_DIRECTORIES
+${BASE_INCLUDE_DIRECTORIES}
+${CMAKE_SOURCE_FAIRMCSTACK}
+${NICAFEMTO_CUTS}
+${NICAFEMTO_FEATURES}
+${NICAFEMTO_DATA}
+${NICA_CBM_FORMAT}
+${KF_HEADERS}
+${NICA_CBM}/helpers
+${NICA_CBM}/cuts
+${NICA_CBM}/cuts/rawcuts/trackcuts
+${NICA_CBM}/cuts/rawcuts/paircuts
+${NICA_CBM}/cuts/rawcuts
+${NICA_CBM}/cuts/commoncuts/pair
+${NICA_CBM}/cuts/commoncuts/track
+${NICA_CBM}/cuts/anatreecuts/pair
+${NICA_CBM}/cuts/anatreecuts/track
+)
+
+Set(SYSTEM_INCLUDE_DIRECTORIES
+ ${ROOT_INCLUDE_DIR} 
+  ${CLHEP_INCLUDE_DIR}
+ ${Boost_INCLUDE_DIRS}
+)
+
+Set(LINK_DIRECTORIES
+  ${ROOT_LIBRARY_DIR}
+  ${FAIRROOT_LIBRARY_DIR}
+  ${Boost_LIBRARY_DIRS}
+  ${Vc_LIB_DIR}
+  ${KFParticle_LIB_DIR}
+)
+
+Include_Directories(${INCLUDE_DIRECTORIES})
+Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
+ 
+Link_Directories(${LINK_DIRECTORIES})
+
+# List of source files
+set(SRCS
+    rawcuts/paircuts/CbmAvXYCut.cxx
+    rawcuts/paircuts/CbmSailorCowboyCut.cxx
+    rawcuts/trackcuts/CbmHasTofTrackCut.cxx
+    rawcuts/trackcuts/CbmMCPointsCuts.cxx
+    rawcuts/trackcuts/CbmStsFarDetectorHit.cxx
+    rawcuts/trackcuts/CbmStsStationsCut.cxx
+    rawcuts/trackcuts/CbmStsTrackHitsCut.cxx
+    rawcuts/trackcuts/CbmTofTrackCuts.cxx
+    commoncuts/pair/CbmDeltaPhiDeltaThetaCut.cxx
+    commoncuts/pair/CbmStsExitSepCut.cxx
+    commoncuts/track/CbmTofM2PolyCut.cxx
+    anatreecuts/pair/CbmBasicFemtoPairCut.cxx
+    anatreecuts/track/CbmBasicTrackCuts.cxx
+    anatreecuts/track/CbmNHitsCut.cxx
+    anatreecuts/track/CbmTofCut.cxx
+)
+
+Set(HEADERS )
+Set(LINKDEF NicaCbmCutsLinkDef.h)
+Set(LIBRARY_NAME NicaCbmCuts)
+Set(DEPENDENCIES NicaFeatures NicaDataFormat NicaCut
+CbmData NicaCbmFormat)
+
+GENERATE_LIBRARY()
+
+Add_Dependencies(NicaCbmCuts NICAFEMTO)
\ No newline at end of file
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/NicaCbmTrackCutLinkDef.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/NicaCbmCutsLinkDef.h
similarity index 57%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/NicaCbmTrackCutLinkDef.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/NicaCbmCutsLinkDef.h
index 9af37ddc74..fea2b61eac 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/NicaCbmTrackCutLinkDef.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/NicaCbmCutsLinkDef.h
@@ -3,6 +3,7 @@
 #pragma link off all functions;
 
 #pragma link C++ class CbmStsTrackHitsCut + ;
+#pragma link C++ class CbmTofM2PolyCut + ;
 
 #pragma link C++ class NicaCbmMCPointsCut + ;
 #pragma link C++ class NicaCbmStsPointsCut + ;
@@ -19,3 +20,19 @@
 #pragma link C++ class CbmStsFarDetectorHit + ;
 #pragma link C++ class CbmHasTofTrackCut + ;
 #pragma link C++ class CbmStsStationsCut + ;
+
+#pragma link C++ class CbmStsExitSepCut + ;
+#pragma link C++ class CbmSailorCowboyCut + ;
+#pragma link C++ class CbmAvXYCut + ;
+#pragma link C++ class CbmDeltaPhiDeltaThetaStarCut + ;
+#pragma link C++ class CbmDeltaPhiDeltaThetaCut + ;
+
+
+#pragma link C++ class CbmBasicTrackCuts + ;
+#pragma link C++ class CbmNHitsCut + ;
+#pragma link C++ class CbmTofCut + ;
+#pragma link C++ class CbmBasicFemtoPairCut + ;
+
+#pragma link C++ class CbmDeltaPhiDeltaThetaStarCut + ;
+#pragma link C++ class CbmDeltaPhiDeltaThetaCut + ;
+#pragma link C++ class CbmStsExitSepCut + ;
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.cxx
new file mode 100644
index 0000000000..b3da5bd0f8
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.cxx
@@ -0,0 +1,63 @@
+/*
+ * CbmBasicFemtoPairCut.cxx
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmBasicFemtoPairCut.h"
+
+#include "CbmDeltaPhiDeltaThetaCut.h"
+#include "CbmStsExitSepCut.h"
+#include "NicaCutMonitorX.h"
+#include "NicaCutMonitorXY.h"
+
+CbmBasicFemtoPairCut::CbmBasicFemtoPairCut() {
+  AddCut(CbmStsExitSepCut());
+  AddCut(CbmDeltaPhiDeltaThetaStarCut());
+  SetSeparationMonitorAxis(100, 0, 10);
+  SetDeltaPhiStarAxis(100, -0.1, 0.1);
+  SetDeltaEtaStarAxis(100, -0.1, 0.1);
+}
+
+void CbmBasicFemtoPairCut::SetDeltaPhiStarCut(Double_t min, Double_t max) {
+  GetDeltaPhiEtaStarCut()->SetMinMax(min, max, 0);
+}
+
+void CbmBasicFemtoPairCut::SetDeltaEtaStarCut(Double_t min, Double_t max) {
+  GetDeltaPhiEtaStarCut()->SetMinMax(min, max, 1);
+}
+
+void CbmBasicFemtoPairCut::SetR(Double_t R) {
+  GetDeltaPhiEtaStarCut()->SetR(R);
+}
+
+void CbmBasicFemtoPairCut::SetSTSExitSeparationCut(Double_t min, Double_t max) {
+  GetStsExitCut()->SetMinMax(min, max);
+}
+
+void CbmBasicFemtoPairCut::CreateBasicMonitors() {
+  TString opt    = "";
+  Int_t step     = 0;
+  TString params = GetGlobalCutOption();
+  if (NicaStd::FindParam(params, "re")) { opt = "re"; }
+  if (NicaStd::FindParam(params, "im")) {
+    opt  = "im";
+    step = 1;
+  }
+  NicaCutMonitorX exitM(GetStsExitCut()->CutName(opt), step);
+  exitM.SetXaxis(fExitSeparation.X(), fExitSeparation.Y(), fExitSeparation.Z());
+  AddCutMonitor(exitM);
+  NicaCutMonitorXY phiM(GetDeltaPhiEtaStarCut()->CutName(opt),
+                        0 + step,
+                        GetDeltaPhiEtaStarCut()->CutName(opt),
+                        1 + step);
+  phiM.SetXaxis(
+    fMonitorPhiPair[0].X(), fMonitorPhiPair[0].Y(), fMonitorPhiPair[0].Z());
+  phiM.SetYaxis(
+    fMonitorPhiPair[1].X(), fMonitorPhiPair[1].Y(), fMonitorPhiPair[1].Z());
+  AddCutMonitor(phiM);
+}
+
+CbmBasicFemtoPairCut::~CbmBasicFemtoPairCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.h
new file mode 100644
index 0000000000..ad0f2486b8
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/pair/CbmBasicFemtoPairCut.h
@@ -0,0 +1,48 @@
+/*
+ * CbmBasicFemtoPairCut.h
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMBASICFEMTOPAIRCUT_H_
+#define CBMBASICFEMTOPAIRCUT_H_
+
+#include "NicaCutsAndMonitors.h"
+#include <TVector3.h>
+
+class CbmStsExitSepCut;
+class CbmDeltaPhiDeltaThetaStarCut;
+
+class CbmBasicFemtoPairCut : public NicaCutsAndMonitors {
+  TVector3 fMonitorPhiPair[2];
+  TVector3 fExitSeparation;
+  CbmStsExitSepCut* GetStsExitCut() const {
+    return (CbmStsExitSepCut*) CutAt(0);
+  }
+  CbmDeltaPhiDeltaThetaStarCut* GetDeltaPhiEtaStarCut() const {
+    return (CbmDeltaPhiDeltaThetaStarCut*) CutAt(1);
+  }
+
+public:
+  CbmBasicFemtoPairCut();
+  void SetSeparationMonitorAxis(Int_t nbins, Double_t min, Double_t max) {
+    fExitSeparation.SetXYZ(nbins, min, max);
+  }
+  void SetDeltaPhiStarAxis(Int_t bin, Double_t min, Double_t max) {
+    fMonitorPhiPair[0].SetXYZ(bin, min, max);
+  }
+  void SetDeltaEtaStarAxis(Int_t bin, Double_t min, Double_t max) {
+    fMonitorPhiPair[1].SetXYZ(bin, min, max);
+  }
+  void SetDeltaPhiStarCut(Double_t min, Double_t max);
+  void SetDeltaEtaStarCut(Double_t min, Double_t max);
+  void SetR(Double_t R);
+  void SetSTSExitSeparationCut(Double_t min, Double_t max);
+  void CreateBasicMonitors();
+  virtual ~CbmBasicFemtoPairCut();
+  ClassDef(CbmBasicFemtoPairCut, 1)
+};
+
+#endif /* CBMBASICFEMTOPAIRCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.cxx
new file mode 100644
index 0000000000..a8a1fee92c
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.cxx
@@ -0,0 +1,214 @@
+/*
+ * CbmBasicTrackCut.cxx
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#include "CbmBasicTrackCuts.h"
+
+#include "CbmNHitsCut.h"
+#include "CbmTofCut.h"
+#include "NicaCutMonitorX.h"
+#include "NicaCutMonitorXY.h"
+#include "NicaStdString.h"
+#include "NicaTrackChargeCut.h"
+#include "NicaTrackChi2Cut.h"
+#include "NicaTrackDCACut.h"
+#include "NicaTrackEtaCut.h"
+#include "NicaTrackPCut.h"
+#include "NicaTrackPtCut.h"
+
+CbmBasicTrackCuts::CbmBasicTrackCuts() {
+  fMonitorSettingsChi2    = TVector3(20, 0, 10);
+  fMonitorsSettingsKin[0] = TVector3(100, -2, 6);
+  fMonitorsSettingsKin[1] = TVector3(100, 0, 3);
+  fMonitorSettingsTof[0]  = TVector3(100, 0, 2);
+  fMonitorSettingsTof[1]  = TVector3(140, -0.2, 1.2);
+  fMonitorSettingsNHits   = TVector3(10, 0, 10);
+  fMonitorSettingsDCA[0]  = TVector3(100, 0, 10);
+  fMonitorSettingsDCA[1]  = TVector3(100, 0, 10);
+  AddCut(NicaTrackChargeCut());  //0
+  AddCut(CbmNHitsCut());         //1
+  AddCut(NicaTrackChi2Cut());    //2
+  AddCut(NicaTrackPCut());       //3
+  AddCut(NicaTrackPtCut());      //4
+  AddCut(NicaTrackEtaCut());     //5
+  AddCut(NicaTrackDCACut());     //6
+  AddCut(CbmTofCut());           //7
+}
+
+NicaTrackChargeCut* CbmBasicTrackCuts::GetChargeCut() const {
+  return (NicaTrackChargeCut*) this->CutAt(0);
+}
+
+CbmNHitsCut* CbmBasicTrackCuts::GetNHitsCut() const {
+  return (CbmNHitsCut*) this->CutAt(1);
+}
+
+NicaTrackChi2Cut* CbmBasicTrackCuts::GetChi2Cut() const {
+  return (NicaTrackChi2Cut*) this->CutAt(2);
+}
+
+NicaTrackPCut* CbmBasicTrackCuts::GetPCut() const {
+  return (NicaTrackPCut*) this->CutAt(3);
+}
+
+NicaTrackPtCut* CbmBasicTrackCuts::GetPtCut() const {
+  return (NicaTrackPtCut*) this->CutAt(4);
+}
+
+NicaTrackEtaCut* CbmBasicTrackCuts::GetEtaCut() const {
+  return (NicaTrackEtaCut*) this->CutAt(5);
+}
+
+NicaTrackDCACut* CbmBasicTrackCuts::GetDCACut() const {
+  return (NicaTrackDCACut*) this->CutAt(6);
+}
+
+void CbmBasicTrackCuts::CreateBasicMonitors() {
+  TString opt    = "";
+  Int_t step     = 0;
+  TString params = GetGlobalCutOption();
+  if (NicaStd::FindParam(params, "re")) { opt = "re"; }
+  if (NicaStd::FindParam(params, "im")) {
+    opt  = "im";
+    step = 1;
+  }
+  NicaCutMonitorX nHits(GetNHitsCut()->CutName(opt), step);
+  nHits.SetXaxis(fMonitorSettingsNHits.X(),
+                 fMonitorSettingsNHits.Y(),
+                 fMonitorSettingsNHits.Z());
+  AddCutMonitor(nHits);
+
+  NicaCutMonitorX nchi(GetChi2Cut()->CutName(opt), step);
+  nchi.SetXaxis(fMonitorSettingsChi2.X(),
+                fMonitorSettingsChi2.Y(),
+                fMonitorSettingsChi2.Z());
+  AddCutMonitor(nchi);
+
+  NicaCutMonitorXY kinM(
+    GetEtaCut()->CutName(opt), step, GetPtCut()->CutName(opt), step);
+  kinM.SetXaxis(fMonitorsSettingsKin[0].X(),
+                fMonitorsSettingsKin[0].Y(),
+                fMonitorsSettingsKin[0].Z());
+  kinM.SetYaxis(fMonitorsSettingsKin[1].X(),
+                fMonitorsSettingsKin[1].Y(),
+                fMonitorsSettingsKin[1].Z());
+  AddCutMonitor(kinM);
+
+  NicaCutMonitorXY tofM(GetPCut()->CutName(opt),
+                        step,
+                        GetTofCut()->CutName(opt),
+                        step + GetTofCut()->M2());
+  tofM.SetXaxis(fMonitorSettingsTof[0].X(),
+                fMonitorSettingsTof[0].Y(),
+                fMonitorSettingsTof[0].Z());
+  tofM.SetYaxis(fMonitorSettingsTof[1].X(),
+                fMonitorSettingsTof[1].Y(),
+                fMonitorSettingsTof[1].Z());
+  AddCutMonitor(tofM);
+
+  NicaCutMonitorXY dcaM(GetDCACut()->CutName(opt),
+                        step + GetDCACut()->DCAz(),
+                        GetDCACut()->CutName(opt),
+                        step + GetDCACut()->DCAxy());
+  dcaM.SetXaxis(fMonitorSettingsDCA[0].X(),
+                fMonitorSettingsDCA[0].Y(),
+                fMonitorSettingsDCA[0].Z());
+  dcaM.SetYaxis(fMonitorSettingsDCA[1].X(),
+                fMonitorSettingsDCA[1].Y(),
+                fMonitorSettingsDCA[1].Z());
+  AddCutMonitor(dcaM);
+}
+
+void CbmBasicTrackCuts::SetCharge(Int_t charge) {
+  GetChargeCut()->SetMinAndMax(charge);
+}
+
+void CbmBasicTrackCuts::SetNHits(Int_t min, Int_t max) {
+  GetNHitsCut()->SetMinMax(min, max);
+}
+
+void CbmBasicTrackCuts::SetPt(Double_t min, Double_t max) {
+  GetPtCut()->SetMinMax(min, max);
+}
+
+void CbmBasicTrackCuts::SetEta(Double_t min, Double_t max) {
+  GetEtaCut()->SetMinMax(min, max);
+}
+
+void CbmBasicTrackCuts::SetM2(Double_t min, Double_t max) {
+  GetTofCut()->SetMinMax(min, max);
+}
+
+void CbmBasicTrackCuts::SetDCAXY(Double_t min, Double_t max) {
+  GetDCACut()->SetMinMax(min, max, GetDCACut()->DCAxy());
+}
+
+void CbmBasicTrackCuts::SetDCAZ(Double_t min, Double_t max) {
+  GetDCACut()->SetMinMax(min, max, GetDCACut()->DCAz());
+}
+
+void CbmBasicTrackCuts::SetTofMonitorPAxis(Int_t nbins,
+                                           Double_t min,
+                                           Double_t max) {
+  fMonitorSettingsTof[0].SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetTofMonitorM2Axis(Int_t nbins,
+                                            Double_t min,
+                                            Double_t max) {
+  fMonitorSettingsTof[1].SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetPtEtaMonitorPtAxis(Int_t nbins,
+                                              Double_t min,
+                                              Double_t max) {
+  fMonitorsSettingsKin[1].SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetPtEtaMonitorEtaAxis(Int_t nbins,
+                                               Double_t min,
+                                               Double_t max) {
+  fMonitorsSettingsKin[0].SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetNHitsMonitorAxis(Int_t nbins,
+                                            Double_t min,
+                                            Double_t max) {
+  fMonitorSettingsNHits.SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetChi2MonitorAxis(Int_t nbins,
+                                           Double_t min,
+                                           Double_t max) {
+  fMonitorSettingsChi2.SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetDCAMonitorZAxis(Int_t nbins,
+                                           Double_t min,
+                                           Double_t max) {
+  fMonitorSettingsDCA[0].SetXYZ(nbins, min, max);
+}
+
+void CbmBasicTrackCuts::SetDCAMonitorXYAxis(Int_t nbins,
+                                            Double_t min,
+                                            Double_t max) {
+  fMonitorSettingsDCA[1].SetXYZ(nbins, min, max);
+}
+
+CbmTofCut* CbmBasicTrackCuts::GetTofCut() const {
+  return (CbmTofCut*) this->CutAt(7);
+}
+
+void CbmBasicTrackCuts::AcceptOnlyWithTofHit(Bool_t val) {
+  if (val)
+    GetTofCut()->AcceptTracksOnlyWithToF();
+  else
+    GetTofCut()->SetMinMax(0, 1, 1);
+}
+
+CbmBasicTrackCuts::~CbmBasicTrackCuts() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.h
new file mode 100644
index 0000000000..f740a9ee89
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmBasicTrackCuts.h
@@ -0,0 +1,70 @@
+/*
+ * CbmBasicTrackCut.h
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMBASICTRACKCUT_H_
+#define CBMBASICTRACKCUT_H_
+
+#include <Rtypes.h>
+#include <RtypesCore.h>
+
+#include "NicaCutsAndMonitors.h"
+
+class NicaTrackPCut;
+
+class CbmTofCut;
+class NicaTrackChargeCut;
+class CbmNHitsCut;
+class NicaTrackChi2Cut;
+class NicaTrackPtCut;
+class NicaTrackEtaCut;
+class NicaTrackDCACut;
+/**collection of basic cuts and cut monitors for track in AnaTree format **/
+
+class CbmBasicTrackCuts : public NicaCutsAndMonitors {
+
+  NicaTrackChargeCut* GetChargeCut() const;
+  CbmNHitsCut* GetNHitsCut() const;
+  NicaTrackChi2Cut* GetChi2Cut() const;
+  NicaTrackPCut* GetPCut() const;
+  NicaTrackPtCut* GetPtCut() const;
+  NicaTrackEtaCut* GetEtaCut() const;
+  NicaTrackDCACut* GetDCACut() const;
+  TVector3 fMonitorsSettingsKin[2];
+  TVector3 fMonitorSettingsTof[2];
+  TVector3 fMonitorSettingsNHits;
+  TVector3 fMonitorSettingsChi2;
+  TVector3 fMonitorSettingsDCA[2];
+
+public:
+  CbmBasicTrackCuts();
+  /**
+     * enable monitors must be called **after** setting axes of histograms
+     */
+  void CreateBasicMonitors();
+  void SetCharge(Int_t charge);
+  void SetNHits(Int_t min, Int_t max);
+  void SetPt(Double_t min, Double_t max);
+  void SetEta(Double_t min, Double_t max);
+  void AcceptOnlyWithTofHit(Bool_t val);
+  void SetM2(Double_t min, Double_t max);
+  void SetDCAXY(Double_t min, Double_t max);
+  void SetDCAZ(Double_t min, Double_t max);
+  void SetTofMonitorPAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetTofMonitorM2Axis(Int_t nbins, Double_t min, Double_t max);
+  void SetPtEtaMonitorPtAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetPtEtaMonitorEtaAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetNHitsMonitorAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetChi2MonitorAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetDCAMonitorZAxis(Int_t nbins, Double_t min, Double_t max);
+  void SetDCAMonitorXYAxis(Int_t nbins, Double_t min, Double_t max);
+  CbmTofCut* GetTofCut() const;
+  virtual ~CbmBasicTrackCuts();
+  ClassDef(CbmBasicTrackCuts, 1)
+};
+
+#endif /* CBMBASICTRACKCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.cxx
new file mode 100644
index 0000000000..844b69170c
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.cxx
@@ -0,0 +1,25 @@
+/*
+ * CbmNHitsCut.cxx
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmNHitsCut.h"
+
+#include "NicaCbmATTrack.h"
+
+CbmNHitsCut::CbmNHitsCut() : NicaTrackExpCut(1) { SetUnitName("N_{hits}"); }
+
+Bool_t CbmNHitsCut::Init(Int_t task_id) {
+  return FormatInhertis("NicaCbmATEvent", task_id);
+}
+
+Bool_t CbmNHitsCut::Pass(NicaTrack* track) {
+  NicaCbmATTrack* tr = (NicaCbmATTrack*) track;
+  SetValue(tr->GetNHits());
+  return Validate();
+}
+
+CbmNHitsCut::~CbmNHitsCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.h
new file mode 100644
index 0000000000..09692c0f2f
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmNHitsCut.h
@@ -0,0 +1,23 @@
+/*
+ * CbmNHitsCut.h
+ *
+ *  Created on: 22 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMNHITSCUT_H_
+#define CBMNHITSCUT_H_
+
+#include "NicaTrackExpCut.h"
+
+class CbmNHitsCut : public NicaTrackExpCut {
+public:
+  CbmNHitsCut();
+  virtual Bool_t Init(Int_t task_id);
+  virtual Bool_t Pass(NicaTrack* track);
+  virtual ~CbmNHitsCut();
+  ClassDef(CbmNHitsCut, 1)
+};
+
+#endif /* CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_CUTS_ANATREECUTS_TRACK_CBMNHITSCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.cxx
new file mode 100644
index 0000000000..73a3172374
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.cxx
@@ -0,0 +1,38 @@
+/*
+ * CbmTofCut.cxx
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmTofCut.h"
+
+#include "NicaCbmATTrack.h"
+
+CbmTofCut::CbmTofCut() : NicaTrackToFMass2Cut(2) {
+  SetUnitName("Flag [AU]", 1);
+}
+
+Bool_t CbmTofCut::Init(Int_t task_id) {
+  if (FormatInhertis("NicaCbmATEvent", task_id, ENicaFormatDepth::kNonBuffered))
+    return kTRUE;
+  return kFALSE;
+}
+
+Bool_t CbmTofCut::Pass(NicaTrack* track) {
+  NicaCbmATTrack* reco = (NicaCbmATTrack*) track;
+  NicaToFTrack* tof    = reco->GetTofTrack();
+  SetValue(tof->GetFlag(), Flag());
+  SetValue(tof->GetMass2(), M2());
+  Double_t m2 = tof->GetMass2();
+  Double_t p  = reco->GetMomentum()->P();
+  SetValue(m2, 0);
+  SetValue(tof->GetFlag(), 1);
+  Double_t min = fLowLine[0] + fLowLine[1] * p + fLowLine[2] * p * p;
+  Double_t max = fHighLine[0] + fHighLine[1] * p + fHighLine[2] * p * p;
+  if (m2 > max || m2 < min) { return ForcedUpdate(kFALSE); }
+  return Validate();
+}
+
+CbmTofCut::~CbmTofCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.h
new file mode 100644
index 0000000000..cbbdd93203
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/anatreecuts/track/CbmTofCut.h
@@ -0,0 +1,27 @@
+/*
+ * CbmTofCut.h
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMTOFCUT_H_
+#define CBMTOFCUT_H_
+
+#include "NicaTrackToFMass2Cut.h"
+
+class CbmTofCut : public NicaTrackToFMass2Cut {
+public:
+  CbmTofCut();
+  void AcceptTracksWithoutTof() { SetMinMax(0, 1, 1); };
+  void AcceptTracksOnlyWithToF() { SetMinMax(1, 1, 1); };
+  static Int_t Flag() { return 1; };
+  static Int_t M2() { return 0; };
+  virtual Bool_t Init(Int_t task_id);
+  virtual Bool_t Pass(NicaTrack* track);
+  virtual ~CbmTofCut();
+  ClassDef(CbmTofCut, 1)
+};
+
+#endif /* CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_CUTS_ANATREECUTS_TRACK_CBMTOFCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.cxx
new file mode 100644
index 0000000000..de4da85788
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.cxx
@@ -0,0 +1,117 @@
+/*
+ * CbmDeltaPhiDeltaThetaCut.cxx
+ *
+ *  Created on: 22 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#include "CbmDeltaPhiDeltaThetaCut.h"
+
+#include "CbmHbtTrack.h"
+#include "CbmHelix.h"
+#include "NicaCbmATTrack.h"
+#include "NicaCbmGlobalTrack.h"
+#include "NicaCut.h"
+#include "NicaEvent.h"
+#include "NicaPackage.h"
+#include "NicaParameter.h"
+#include "NicaStd.h"
+#include "NicaTrack.h"
+#include "NicaTwoTrack.h"
+
+#include <TLorentzVector.h>
+#include <TVector3.h>
+
+CbmDeltaPhiDeltaThetaStarCut::CbmDeltaPhiDeltaThetaStarCut()
+  : NicaTwoTrackCut(2)
+  , fR(0.0)
+  , fDataType(NicaCbmFormats::ECbmFormatType::kUnknown) {
+  SetUnitName("#Delta#phi^{*} [rad]", 0);
+  SetUnitName("#Delta#eta^{*} [rad]", 1);
+}
+
+Bool_t CbmDeltaPhiDeltaThetaStarCut::Init(Int_t task_id) {
+  fDataType =
+    NicaCbmFormats::GetFormatType(task_id, ENicaFormatDepth::kBuffered);
+  if (fDataType == NicaCbmFormats::ECbmFormatType::kUnknown) return kFALSE;
+  return kTRUE;
+}
+
+Bool_t CbmDeltaPhiDeltaThetaStarCut::Pass(NicaTwoTrack* pair) {
+  TVector3 mom1, mom2;
+  switch (fDataType) {
+    case NicaCbmFormats::ECbmFormatType::kCbmRoot: {
+      NicaCbmTrack* tr1 = static_cast<NicaCbmTrack*>(pair->GetTrack1());
+      NicaCbmTrack* tr2 = static_cast<NicaCbmTrack*>(pair->GetTrack2());
+      CbmHelix* h1      = tr1->GetHelix();
+      CbmHelix* h2      = tr2->GetHelix();
+      h1->Eval(fR + tr1->GetEvent()->GetVertex()->Z(), mom1);
+      h2->Eval(fR + tr2->GetEvent()->GetVertex()->Z(), mom2);
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kAnaTree: {
+      NicaCbmATTrack* tr1 = static_cast<NicaCbmATTrack*>(pair->GetTrack1());
+      NicaCbmATTrack* tr2 = static_cast<NicaCbmATTrack*>(pair->GetTrack2());
+      CbmHelix* h1        = tr1->GetHelix();
+      CbmHelix* h2        = tr2->GetHelix();
+      h1->Eval(fR + tr1->GetEvent()->GetVertex()->Z(), mom1);
+      h2->Eval(fR + tr2->GetEvent()->GetVertex()->Z(), mom2);
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kHbt: {
+      CbmHbtTrack* tr1 = static_cast<CbmHbtTrack*>(pair->GetTrack1());
+      CbmHbtTrack* tr2 = static_cast<CbmHbtTrack*>(pair->GetTrack2());
+      tr1->CalculateMomAt(fR);
+      tr2->CalculateMomAt(fR);
+      mom1 = *tr1->GetMomAtR();
+      mom2 = *tr2->GetMomAtR();
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kUnknown: {
+
+    } break;
+  }
+
+  SetValue(mom1.Phi() - mom2.Phi(), 0);  //dleta phi
+  SetValue(mom1.Theta() - mom2.Theta(), 1);
+  if (GetValue(0) > GetMin(0) && GetValue(0) < GetMax(0)
+      && GetValue(1) > GetMin(1) && GetValue(1) < GetMax(1)) {
+    return ForcedUpdate(kFALSE);
+  }
+  return ForcedUpdate(kTRUE);
+}
+
+NicaPackage* CbmDeltaPhiDeltaThetaStarCut::Report() const {
+  NicaPackage* pack = NicaTwoTrackCut::Report();
+  pack->AddObject(new NicaParameterDouble("R", fR));
+  return pack;
+}
+
+CbmDeltaPhiDeltaThetaStarCut& CbmDeltaPhiDeltaThetaStarCut::
+operator=(const CbmDeltaPhiDeltaThetaStarCut& other) {
+  if (this == &other) return *this;
+  fDataType = other.fDataType;
+  return *this;
+}
+
+CbmDeltaPhiDeltaThetaStarCut::~CbmDeltaPhiDeltaThetaStarCut() {}
+
+CbmDeltaPhiDeltaThetaCut::CbmDeltaPhiDeltaThetaCut() : NicaTwoTrackCut(2) {
+  SetUnitName("#Delta#phi [rad]", 0);
+  SetUnitName("#Delta#eta [rad]", 1);
+}
+
+Bool_t CbmDeltaPhiDeltaThetaCut::Init(Int_t /*task_id*/) { return kTRUE; }
+
+Bool_t CbmDeltaPhiDeltaThetaCut::Pass(NicaTwoTrack* pair) {
+  NicaCbmTrack* tr1 = static_cast<NicaCbmTrack*>(pair->GetTrack1());
+  NicaCbmTrack* tr2 = static_cast<NicaCbmTrack*>(pair->GetTrack2());
+  SetValue(tr1->GetMomentum()->Phi() - tr2->GetMomentum()->Phi(), 0);
+  SetValue(tr1->GetMomentum()->Theta() - tr2->GetMomentum()->Theta(), 1);
+  if (GetValue(0) > GetMin(0) && GetValue(0) < GetMax(0)
+      && GetValue(1) > GetMin(1) && GetValue(1) < GetMax(1)) {
+    return ForcedUpdate(kFALSE);
+  }
+  return ForcedUpdate(kTRUE);
+}
+
+CbmDeltaPhiDeltaThetaCut::~CbmDeltaPhiDeltaThetaCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.h
new file mode 100644
index 0000000000..cacb2fd9c7
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmDeltaPhiDeltaThetaCut.h
@@ -0,0 +1,40 @@
+/*
+ * CbmDeltaPhiDeltaThetaCut.h
+ *
+ *  Created on: 22 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMDELTAPHIDELTATHETACUT_H_
+#define CBMDELTAPHIDELTATHETACUT_H_
+#include "NicaCbmFormatTypes.h"
+#include "NicaCbmTrack.h"
+#include "NicaTwoTrackCut.h"
+
+class CbmDeltaPhiDeltaThetaStarCut : public NicaTwoTrackCut {
+  Double_t fR;
+  NicaCbmFormats::ECbmFormatType fDataType;
+
+public:
+  CbmDeltaPhiDeltaThetaStarCut();
+  CbmDeltaPhiDeltaThetaStarCut&
+  operator=(const CbmDeltaPhiDeltaThetaStarCut& other);
+  void SetR(Double_t r) { fR = r; }
+  virtual Bool_t Init(Int_t task_id = 0);
+  Bool_t Pass(NicaTwoTrack* pair);
+  virtual NicaPackage* Report() const;
+  virtual ~CbmDeltaPhiDeltaThetaStarCut();
+  ClassDef(CbmDeltaPhiDeltaThetaStarCut, 1)
+};
+
+class CbmDeltaPhiDeltaThetaCut : public NicaTwoTrackCut {
+public:
+  CbmDeltaPhiDeltaThetaCut();
+  virtual Bool_t Init(Int_t task_id = 0);
+  Bool_t Pass(NicaTwoTrack* pair);
+  virtual ~CbmDeltaPhiDeltaThetaCut();
+  ClassDef(CbmDeltaPhiDeltaThetaCut, 1)
+};
+
+#endif /* CBMDELTAPHIDELTATHETACUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.cxx
new file mode 100644
index 0000000000..f14176d55d
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.cxx
@@ -0,0 +1,85 @@
+/*
+ * CbmStsExitSepCut.cxx
+ *
+ *  Created on: 23 mar 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmStsExitSepCut.h"
+
+#include "CbmHbtTrack.h"
+#include "CbmHelix.h"
+#include "NicaCbmATTrack.h"
+#include "NicaExpEvent.h"
+#include "NicaTwoTrack.h"
+
+#include <TLorentzVector.h>
+#include <TVector3.h>
+
+CbmStsExitSepCut::CbmStsExitSepCut()
+  : NicaTwoTrackCut(1), fDataType(NicaCbmFormats::ECbmFormatType::kUnknown) {
+  SetUnitName("StsExitSep [cm]");
+  SetMinMax(0, 1E+5);
+}
+
+Bool_t CbmStsExitSepCut::Pass(NicaTwoTrack* pair) {
+  CbmHelix *h1 = nullptr, *h2 = nullptr;
+  TLorentzVector *Pos1 = nullptr, *Pos2 = nullptr;
+  Double_t dist = 0;
+  switch (fDataType) {
+    case NicaCbmFormats::ECbmFormatType::kCbmRoot: {
+      NicaCbmTrack* tr1 = static_cast<NicaCbmTrack*>(pair->GetTrack1());
+      NicaCbmTrack* tr2 = static_cast<NicaCbmTrack*>(pair->GetTrack2());
+      Pos1 = static_cast<NicaExpEvent*>(tr1->GetEvent())->GetVertex();
+      Pos2 = static_cast<NicaExpEvent*>(tr2->GetEvent())->GetVertex();
+
+      h1            = tr1->GetHelix();
+      h2            = tr2->GetHelix();
+      TVector3 pos1 = h1->Eval(101.1 + Pos1->Z());
+      TVector3 pos2 = h2->Eval(101.1 + Pos2->Z());
+      pos1.SetX(pos1.X() - Pos1->X());
+      pos1.SetY(pos1.Y() - Pos1->Y());
+      pos2.SetX(pos2.X() - Pos2->X());
+      pos2.SetY(pos2.Y() - Pos2->Y());
+      dist = (pos1 - pos2).Mag();
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kAnaTree: {
+      NicaCbmATTrack* tr1 = static_cast<NicaCbmATTrack*>(pair->GetTrack1());
+      NicaCbmATTrack* tr2 = static_cast<NicaCbmATTrack*>(pair->GetTrack2());
+      Pos1 = static_cast<NicaExpEvent*>(tr1->GetEvent())->GetVertex();
+      Pos2 = static_cast<NicaExpEvent*>(tr2->GetEvent())->GetVertex();
+
+      h1            = tr1->GetHelix();
+      h2            = tr2->GetHelix();
+      TVector3 pos1 = h1->Eval(101.1 + Pos1->Z());
+      TVector3 pos2 = h2->Eval(101.1 + Pos2->Z());
+      pos1.SetX(pos1.X() - Pos1->X());
+      pos1.SetY(pos1.Y() - Pos1->Y());
+      pos2.SetX(pos2.X() - Pos2->X());
+      pos2.SetY(pos2.Y() - Pos2->Y());
+      dist = (pos1 - pos2).Mag();
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kHbt: {
+      CbmHbtTrack* tr1 = static_cast<CbmHbtTrack*>(pair->GetTrack1());
+      CbmHbtTrack* tr2 = static_cast<CbmHbtTrack*>(pair->GetTrack2());
+      tr1->CalculatePosAt(101.0);
+      tr2->CalculatePosAt(101.0);
+      dist = (*tr1->GetPosAtR() - *tr2->GetPosAtR()).Mag();
+    } break;
+    case NicaCbmFormats::ECbmFormatType::kUnknown: {
+
+    } break;
+  }
+  SetValue(dist);
+  return Validate();
+}
+
+Bool_t CbmStsExitSepCut::Init(Int_t task_id) {
+  fDataType =
+    NicaCbmFormats::GetFormatType(task_id, ENicaFormatDepth::kBuffered);
+  if (fDataType == NicaCbmFormats::ECbmFormatType::kUnknown) return kFALSE;
+  return kTRUE;
+}
+
+CbmStsExitSepCut::~CbmStsExitSepCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.h
new file mode 100644
index 0000000000..e1add33749
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/pair/CbmStsExitSepCut.h
@@ -0,0 +1,28 @@
+/*
+ * CbmStsExitSep.h
+ *
+ *  Created on: 23 mar 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef PAIRCUTS_CBMSTSEXITSEPCUT_H_
+#define PAIRCUTS_CBMSTSEXITSEPCUT_H_
+
+#include "NicaCbmFormatTypes.h"
+#include "NicaCbmTrack.h"
+#include "NicaTwoTrackCut.h"
+
+
+class CbmStsExitSepCut : public NicaTwoTrackCut {
+  NicaCbmFormats::ECbmFormatType fDataType;
+
+public:
+  CbmStsExitSepCut();
+  virtual Bool_t Init(Int_t task_id = 0);
+  Bool_t Pass(NicaTwoTrack* pair);
+  virtual ~CbmStsExitSepCut();
+  ClassDef(CbmStsExitSepCut, 1)
+};
+
+#endif /* PAIRCUTS_CBMSTSEXITSEPCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.cxx
new file mode 100644
index 0000000000..a963743dac
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.cxx
@@ -0,0 +1,24 @@
+/*
+ * CbmTofM2PolyCut.cxx
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmTofM2PolyCut.h"
+#include "CbmDetectorID.h"
+#include "NicaExpTrack.h"
+
+CbmTofM2PolyCut::CbmTofM2PolyCut() {}
+
+Bool_t CbmTofM2PolyCut::Pass(NicaTrack* track) {
+  NicaToFTrack* tof =
+    (NicaToFTrack*) static_cast<NicaExpTrack*>(track)->GetDetTrack(
+      NicaCbmDetectorID::kTOF);
+  if (tof->GetFlag() == 0) { SetValue(NicaToFTrack::DummyVal()); }
+  SetValue(tof->GetMass2());
+  return Validate();
+}
+
+CbmTofM2PolyCut::~CbmTofM2PolyCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.h
new file mode 100644
index 0000000000..ca10b91b9c
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/commoncuts/track/CbmTofM2PolyCut.h
@@ -0,0 +1,22 @@
+/*
+ * CbmTofM2PolyCut.h
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef COMMONCUTS_TRACK_CBMTOFM2POLYCUT_H_
+#define COMMONCUTS_TRACK_CBMTOFM2POLYCUT_H_
+
+#include "NicaTrackToFMass2Cut.h"
+
+class CbmTofM2PolyCut : public NicaTrackToFMass2Cut {
+public:
+  CbmTofM2PolyCut();
+  Bool_t Pass(NicaTrack* track);
+  virtual ~CbmTofM2PolyCut();
+  ClassDef(CbmTofM2PolyCut, 1)
+};
+
+#endif /* CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_CUTS_COMMONCUTS_TRACK_CBMTOFM2POLYCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.cxx
new file mode 100644
index 0000000000..f1cdc95c34
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.cxx
@@ -0,0 +1,56 @@
+/*
+ * CbmAvXYCut.cpp
+ *
+ *  Created on: 15 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmAvXYCut.h"
+
+#include "CbmHelix.h"
+#include "NicaExpEvent.h"
+#include "NicaTwoTrack.h"
+
+#include <TLorentzVector.h>
+#include <TVector3.h>
+
+CbmAvXYCut::CbmAvXYCut() : NicaTwoTrackCut(2) {
+  SetUnitName("X_{av} [cm]", 0);
+  SetUnitName("Y_{av} [cm]", 1);
+  SetMinMax(-90, 90, 0);
+  SetMinMax(-90, 90, 1);
+}
+
+Bool_t CbmAvXYCut::Init(Int_t task_id) {
+  if (FormatInhertis("NicaCbmEvent", task_id)
+      || FormatInhertis("NicaCbmGlobalMCEvent", task_id)) {
+    return kTRUE;
+  }
+  return kFALSE;
+}
+
+Bool_t CbmAvXYCut::Pass(NicaTwoTrack* pair) {
+  NicaCbmTrack* tr1 = static_cast<NicaCbmTrack*>(pair->GetTrack1());
+  NicaCbmTrack* tr2 = static_cast<NicaCbmTrack*>(pair->GetTrack2());
+  TLorentzVector* Pos1 =
+    static_cast<NicaExpEvent*>(tr1->GetEvent())->GetVertex();
+  TLorentzVector* Pos2 =
+    static_cast<NicaExpEvent*>(tr2->GetEvent())->GetVertex();
+
+  CbmHelix* h1  = tr1->GetHelix();
+  CbmHelix* h2  = tr2->GetHelix();
+  TVector3 pos1 = h1->Eval(50.1 + Pos1->Z());
+  TVector3 pos2 = h2->Eval(50.1 + Pos2->Z());
+  pos1.SetX(pos1.X() - Pos1->X());
+  pos1.SetY(pos1.Y() - Pos1->Y());
+  pos2.SetX(pos2.X() - Pos2->X());
+  pos2.SetY(pos2.Y() - Pos2->Y());
+
+  TVector3 av = pos1 + pos2;
+  SetValue(av.X() * 0.5, 0);
+  SetValue(av.Y() * 0.5, 1);
+  return Validate();
+}
+
+CbmAvXYCut::~CbmAvXYCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.h
new file mode 100644
index 0000000000..a386b3d82e
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmAvXYCut.h
@@ -0,0 +1,24 @@
+/*
+ * CbmAvXYCut.h
+ *
+ *  Created on: 15 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMAVXYCUT_H_
+#define CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMAVXYCUT_H_
+
+#include "NicaCbmTrack.h"
+#include "NicaTwoTrackCut.h"
+
+class CbmAvXYCut : public NicaTwoTrackCut {
+public:
+  CbmAvXYCut();
+  virtual Bool_t Init(Int_t task_id = 0);
+  Bool_t Pass(NicaTwoTrack* pair);
+  virtual ~CbmAvXYCut();
+  ClassDef(CbmAvXYCut, 1)
+};
+
+#endif /* CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMAVXYCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.cxx
new file mode 100644
index 0000000000..6201a6a9b7
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.cxx
@@ -0,0 +1,65 @@
+/*
+ * CbmSailorCowboyCut.cxx
+ *
+ *  Created on: 9 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmSailorCowboyCut.h"
+
+#include "CbmHelix.h"
+#include "CbmStsExitSepCut.h"
+#include "NicaExpEvent.h"
+#include "NicaTwoTrack.h"
+
+
+CbmSailorCowboyCut::CbmSailorCowboyCut() : NicaTwoTrackCut(1) {
+  SetUnitName("Sail Cow [Au]", 0);
+  SetMinMax(0, 1);
+}
+
+CbmSailorCowboyCut::~CbmSailorCowboyCut() {}
+
+Bool_t CbmSailorCowboyCut::Init(Int_t task_id) {
+  if (FormatInhertis("NicaCbmEvent", task_id)
+      || FormatInhertis("NicaCbmGlobalMCEvent", task_id)) {
+    return kTRUE;
+  }
+  return kFALSE;
+}
+
+Bool_t CbmSailorCowboyCut::Pass(NicaTwoTrack* pair) {
+  NicaCbmTrack* tr1 = static_cast<NicaCbmTrack*>(pair->GetTrack1());
+  NicaCbmTrack* tr2 = static_cast<NicaCbmTrack*>(pair->GetTrack2());
+  TLorentzVector* Pos1 =
+    static_cast<NicaExpEvent*>(tr1->GetEvent())->GetVertex();
+  TLorentzVector* Pos2 =
+    static_cast<NicaExpEvent*>(tr2->GetEvent())->GetVertex();
+
+  CbmHelix* h1 = tr1->GetHelix();
+  CbmHelix* h2 = tr2->GetHelix();
+  TVector3 pos1[4], pos2[4];
+  pos1[0]        = h1->Eval(Pos1->Z());
+  pos2[0]        = h2->Eval(Pos2->Z());
+  pos1[1]        = h1->Eval(Pos1->Z() + 25.0);
+  pos2[1]        = h2->Eval(Pos2->Z() + 25.0);
+  pos1[2]        = h1->Eval(Pos1->Z() + 50.0);
+  pos2[2]        = h2->Eval(Pos2->Z() + 50.0);
+  pos1[3]        = h1->Eval(Pos1->Z() + 75.0);
+  pos2[3]        = h2->Eval(Pos2->Z() + 75.0);
+  Double_t minXY = -1000.0;
+  for (int i = 0; i < 4; i++) {
+    Double_t dx = (pos1[i].X() - Pos1->X()) - (pos2[i].X() - Pos2->X());
+    Double_t dy = (pos1[i].Y() - Pos1->Y()) - (pos2[i].Y() - Pos2->Y());
+    Double_t dR = dx * dx + dy * dy;
+    if (dR < minXY) {  //distance smaller than previous  - cowboy
+      SetValue(Cowboy());
+      return Validate();
+    } else {
+      minXY = dR;
+    }
+  }
+  SetValue(Sailor());
+  return Validate();
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.h
new file mode 100644
index 0000000000..38688dc8c3
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/paircuts/CbmSailorCowboyCut.h
@@ -0,0 +1,29 @@
+/*
+ * CbmSailorCowboyCut.h
+ *
+ *  Created on: 9 cze 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMSAILORCOWBOYCUT_H_
+#define CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMSAILORCOWBOYCUT_H_
+
+#include "NicaCbmTrack.h"
+#include "NicaTwoTrackCut.h"
+
+class CbmSailorCowboyCut : public NicaTwoTrackCut {
+
+public:
+  CbmSailorCowboyCut();
+  static Int_t Cowboy() { return 1; };
+  static Int_t Sailor() { return 0; };
+  void AcceptSailor() { SetMinAndMax(Sailor()); };
+  void AcceptCowboy() { SetMinAndMax(Cowboy()); };
+  virtual ~CbmSailorCowboyCut();
+  virtual Bool_t Init(Int_t task_id = 0);
+  Bool_t Pass(NicaTwoTrack* pair);
+  ClassDef(CbmSailorCowboyCut, 1)
+};
+
+#endif /* CBM_NOV_ANALYSIS_CBMFEMTO_CUTS_PAIRCUTS_CBMSAILORCOWBOYCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmHasTofTrackCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmHasTofTrackCut.cxx
similarity index 84%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmHasTofTrackCut.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmHasTofTrackCut.cxx
index e9a52f57a5..2a8ae84cb9 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmHasTofTrackCut.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmHasTofTrackCut.cxx
@@ -19,7 +19,7 @@ Bool_t CbmHasTofTrackCut::Init(Int_t format_id) {
 
 Bool_t CbmHasTofTrackCut::Pass(NicaTrack* track) {
   NicaCbmTrack* tr = (NicaCbmTrack*) track;
-  CbmTofHit* tof   = tr->GetTofTrack();
+  CbmTofHit* tof   = tr->GetTofHit();
   if (tof == NULL) {
     SetValue(0);
     return ForcedUpdate(kFALSE);
@@ -29,6 +29,4 @@ Bool_t CbmHasTofTrackCut::Pass(NicaTrack* track) {
   }
 }
 
-CbmHasTofTrackCut::~CbmHasTofTrackCut() {
-  // TODO Auto-generated destructor stub
-}
+CbmHasTofTrackCut::~CbmHasTofTrackCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmHasTofTrackCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmHasTofTrackCut.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmHasTofTrackCut.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmHasTofTrackCut.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmMCPointsCuts.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmMCPointsCuts.cxx
similarity index 99%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmMCPointsCuts.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmMCPointsCuts.cxx
index b265fee0a5..4d2f40577b 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmMCPointsCuts.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmMCPointsCuts.cxx
@@ -7,6 +7,7 @@
  *		Warsaw University of Technology, Faculty of Physics
  */
 #include "CbmMCPointsCuts.h"
+
 #include "NicaCbmMCTrack.h"
 
 NicaCbmMCPointsCut::NicaCbmMCPointsCut(Int_t params) : NicaTrackCut(params) {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmMCPointsCuts.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmMCPointsCuts.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmMCPointsCuts.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmMCPointsCuts.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsFarDetectorHit.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsFarDetectorHit.cxx
similarity index 87%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsFarDetectorHit.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsFarDetectorHit.cxx
index e742a8d2ad..94ca6f7bef 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsFarDetectorHit.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsFarDetectorHit.cxx
@@ -25,6 +25,4 @@ Bool_t CbmStsFarDetectorHit::Pass(NicaTrack* track) {
   return Validate();
 }
 
-CbmStsFarDetectorHit::~CbmStsFarDetectorHit() {
-  // TODO Auto-generated destructor stub
-}
+CbmStsFarDetectorHit::~CbmStsFarDetectorHit() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsFarDetectorHit.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsFarDetectorHit.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsFarDetectorHit.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsFarDetectorHit.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsStationsCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsStationsCut.cxx
similarity index 99%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsStationsCut.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsStationsCut.cxx
index cc6e866c4c..585a141924 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsStationsCut.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsStationsCut.cxx
@@ -7,6 +7,7 @@
  *		Warsaw University of Technology, Faculty of Physics
  */
 #include "CbmStsStationsCut.h"
+
 #include "CbmStsTrack.h"
 #include "NicaCbmTrack.h"
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsStationsCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsStationsCut.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsStationsCut.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsStationsCut.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsTrackHitsCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsTrackHitsCut.cxx
similarity index 92%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsTrackHitsCut.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsTrackHitsCut.cxx
index 32bf9117ea..c0188697c1 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsTrackHitsCut.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsTrackHitsCut.cxx
@@ -7,6 +7,7 @@
  *		Warsaw University of Technology, Faculty of Physics
  */
 #include "CbmStsTrackHitsCut.h"
+
 #include "CbmStsTrack.h"
 
 CbmStsTrackHitsCut::CbmStsTrackHitsCut() : NicaTrackCut(3) {
@@ -39,6 +40,4 @@ Bool_t CbmStsTrackHitsCut::Init(Int_t format_id) {
   return kFALSE;
 }
 
-CbmStsTrackHitsCut::~CbmStsTrackHitsCut() {
-  // TODO Auto-generated destructor stub
-}
+CbmStsTrackHitsCut::~CbmStsTrackHitsCut() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsTrackHitsCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsTrackHitsCut.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmStsTrackHitsCut.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmStsTrackHitsCut.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmTofTrackCuts.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmTofTrackCuts.cxx
similarity index 93%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmTofTrackCuts.cxx
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmTofTrackCuts.cxx
index 9df50d89ea..858e9ba425 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmTofTrackCuts.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmTofTrackCuts.cxx
@@ -7,6 +7,7 @@
  *		Warsaw University of Technology, Faculty of Physics
  */
 #include "CbmTofTrackCuts.h"
+
 #include "CbmGlobalTrack.h"
 #include "CbmTofHit.h"
 #include "NicaCbmTrack.h"
@@ -30,7 +31,7 @@ void CbmTofTrackCuts::SetBetaCut(Double_t min, Double_t max) {
 Bool_t CbmTofTrackCuts::Pass(NicaTrack* track) {
   NicaCbmTrack* tr = (NicaCbmTrack*) track;
   Double_t l       = tr->GetTrackLenght();
-  CbmTofHit* h     = tr->GetTofTrack();
+  CbmTofHit* h     = tr->GetTofHit();
   if (h == NULL) {
     SetValue(2, Beta());
     SetValue(-1000, M2());
@@ -45,9 +46,7 @@ Bool_t CbmTofTrackCuts::Pass(NicaTrack* track) {
   return Validate();
 }
 
-CbmTofTrackCuts::~CbmTofTrackCuts() {
-  // TODO Auto-generated destructor stub
-}
+CbmTofTrackCuts::~CbmTofTrackCuts() {}
 
 CbmTofM2Cut::CbmTofM2Cut() : fOneOverC(1.0 / 29.99792458) {
   SetUnitName("m^2 [GeV^2/c^4]");
@@ -56,7 +55,7 @@ CbmTofM2Cut::CbmTofM2Cut() : fOneOverC(1.0 / 29.99792458) {
 Bool_t CbmTofM2Cut::Pass(NicaTrack* track) {
   NicaCbmTrack* tr = (NicaCbmTrack*) track;
   Double_t l       = tr->GetTrackLenght();
-  CbmTofHit* h     = tr->GetTofTrack();
+  CbmTofHit* h     = tr->GetTofHit();
   if (h == NULL) {
     SetValue(-1000);
     return ForcedUpdate(kFALSE);
@@ -81,7 +80,7 @@ CbmTofMassCut::CbmTofMassCut() : fOneOverC(1.0 / 29.99792458) {
 Bool_t CbmTofMassCut::Pass(NicaTrack* track) {
   NicaCbmTrack* tr = (NicaCbmTrack*) track;
   Double_t l       = tr->GetTrackLenght();
-  CbmTofHit* h     = tr->GetTofTrack();
+  CbmTofHit* h     = tr->GetTofHit();
   if (h == NULL) {
     SetValue(-1000);
     return ForcedUpdate(kFALSE);
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmTofTrackCuts.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmTofTrackCuts.h
similarity index 100%
rename from analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmTofTrackCuts.h
rename to analysis/PWGC2F/femtoscopy/nicafemto/cuts/rawcuts/trackcuts/CbmTofTrackCuts.h
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CMakeLists.txt
deleted file mode 100644
index 4afbe2005f..0000000000
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CMakeLists.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-# Create a library called "" which includes the source files given in
-# the array .
-# The extension is already found.  Any number of sources could be listed here.
-Set(INCLUDE_DIRECTORIES
-${BASE_INCLUDE_DIRECTORIES}
-${CMAKE_SOURCE_FAIRMCSTACK}
-${NICAFEMTO_CUTS}
-${NICAFEMTO_FEATURES}
-${NICAFEMTO_DATA}
-${NICA_CBM_FORMAT}
-${KF_HEADERS}
-${NICA_CBM}/helpers
-${NICA_CBM}/cuts/trackcuts
-)
-
-Set(SYSTEM_INCLUDE_DIRECTORIES
- ${ROOT_INCLUDE_DIR} 
-  ${CLHEP_INCLUDE_DIR}
- ${Boost_INCLUDE_DIRS}
-)
-
-Set(LINK_DIRECTORIES
-  ${ROOT_LIBRARY_DIR}
-  ${FAIRROOT_LIBRARY_DIR}
-  ${Boost_LIBRARY_DIRS}
-  ${Vc_LIB_DIR}
-  ${KFParticle_LIB_DIR}
-)
-
-Include_Directories(${INCLUDE_DIRECTORIES})
-Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES})
- 
-Link_Directories(${LINK_DIRECTORIES})
-
-# List of source files
-set(SRCS
-	CbmStsTrackHitsCut.cxx
-	CbmHasTofTrackCut.cxx
-	CbmMCPointsCuts.cxx
-	CbmTofTrackCuts.cxx
-	CbmStsFarDetectorHit.cxx
-	CbmStsStationsCut.cxx
-)
-
-Set(HEADERS )
-Set(LINKDEF NicaCbmTrackCutLinkDef.h)
-Set(LIBRARY_NAME NicaCbmTrackCut)
-Set(DEPENDENCIES NicaFeatures NicaDataFormat NicaCut
-CbmData NicaCbmFormat)
-
-GENERATE_LIBRARY()
-
-Add_Dependencies(NicaCbmTrackCut NICAFEMTO)
-
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.cxx
deleted file mode 100644
index dfddab79a2..0000000000
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.cxx
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * CbmGhostCut.cxx
- *
- *  Created on: 6 sie 2019
- *      Author: Daniel Wielanek
- *		E-mail: daniel.wielanek@gmail.com
- *		Warsaw University of Technology, Faculty of Physics
- */
-#include "CbmGhostCut.h"
-
-CbmGhostCut::CbmGhostCut() {
-  // TODO Auto-generated constructor stub
-}
-
-Bool_t CbmGhostCut::Init(Int_t task_id) {}
-
-Bool_t CbmGhostCut::Pass(NicaTrack* track) {}
-
-CbmGhostCut::~CbmGhostCut() {
-  // TODO Auto-generated destructor stub
-}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.h b/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.h
deleted file mode 100644
index aaedc66503..0000000000
--- a/analysis/PWGC2F/femtoscopy/nicafemto/cuts/trackcuts/CbmGhostCut.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * CbmGhostCut.h
- *
- *  Created on: 6 sie 2019
- *      Author: Daniel Wielanek
- *		E-mail: daniel.wielanek@gmail.com
- *		Warsaw University of Technology, Faculty of Physics
- */
-#ifndef NICA_CBM_CUTS_TRACKCUTS_CBMGHOSTCUT_H_
-#define NICA_CBM_CUTS_TRACKCUTS_CBMGHOSTCUT_H_
-#include "NicaTrackCut.h"
-class CbmGhostCut : public NicaTrackCut {
-public:
-  CbmGhostCut();
-  virtual Bool_t Init(Int_t task_id = 0);
-  virtual Bool_t Pass(NicaTrack* track);
-  virtual ~CbmGhostCut();
-  ClassDef(CbmGhostCut, 1)
-};
-
-#endif /* NICA_CBM_CUTS_TRACKCUTS_CBMGHOSTCUT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/format/CMakeLists.txt
index 8393c463e0..5bf8ee101e 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/CMakeLists.txt
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/CMakeLists.txt
@@ -9,10 +9,11 @@ Set(INCLUDE_DIRECTORIES
 	${NICAFEMTO_GEN}
 	${KF_HEADERS}
 	${CBMROOT_SOURCE_DIR}/sim/transport/generators/unigen
+	${CBMROOT_SOURCE_DIR}/core/data
 	${NICA_CBM}/helpers
 	${NICA_CBM_FORMAT}
+	${AnalysisTree_INCLUDE_DIR}
 )
-
 Set(SYSTEM_INCLUDE_DIRECTORIES
  ${ROOT_INCLUDE_DIR} 
  ${CLHEP_INCLUDE_DIR}
@@ -25,6 +26,7 @@ Set(LINK_DIRECTORIES
   ${Boost_LIBRARY_DIRS}
   ${Vc_LIB_DIR}
   ${KFParticle_LIB_DIR}
+  ${AnalysisTree_LIBRARY_DIR}
 )
 
 Include_Directories(${INCLUDE_DIRECTORIES})
@@ -35,7 +37,11 @@ Link_Directories(${LINK_DIRECTORIES})
 # List of source files
 set(SRCS
 
+NicaCbmFormatTypes.cxx
+
 combined/NicaCbmGlobalMCEvent.cxx
+combined/NicaCbmATFullEvent.cxx
+combined/CbmHbtFullEvent.cxx
 
 full/NicaCbmEvent.cxx
 full/NicaCbmEventInterface.cxx
@@ -52,6 +58,7 @@ global/NicaCbmGlobalEventInterface.cxx
 global/NicaCbmGlobalTrack.cxx
 global/NicaCbmGlobalTrackInterface.cxx
 
+
 matched/NicaCbmMatchedEvent.cxx
 matched/NicaCbmMatchedEventInterface.cxx
 matched/NicaCbmMatchedTrack.cxx
@@ -64,14 +71,34 @@ unigen/NicaUnigenEvent.cxx
 unigen/NicaUnigenEventInterface.cxx
 unigen/NicaUnigenTrack.cxx
 unigen/NicaUnigenTrackInterface.cxx
+
+anatree/mc/NicaCbmATMCEvent.cxx
+anatree/mc/NicaCbmATMCEventInterface.cxx
+anatree/mc/NicaCbmATMCTrack.cxx
+anatree/mc/NicaCbmATMCTrackInterface.cxx
+anatree/reco/NicaCbmATEvent.cxx
+anatree/reco/NicaCbmATEventInterface.cxx
+anatree/reco/NicaCbmATTrack.cxx
+anatree/reco/NicaCbmATTrackInterface.cxx
+anatree/femto/CbmHbtTrack.cxx
+anatree/femto/CbmHbtEvent.cxx
+anatree/CbmAnaTreeContainer.cxx
+anatree/CbmAnaTreeSource.cxx
 )
 
 Set(HEADERS )
 Set(LINKDEF NicaCbmFormatLinkDef.h)
 Set(LIBRARY_NAME NicaCbmFormat)
-Set(DEPENDENCIES NicaFeatures NicaGen NicaDataFormat NicaCbmHelper CbmSimGenerators)
+
+If(UNIX AND NOT APPLE)
+  Set(_AnalysisTree_LIB  AnalysisTreeBase.so AnalysisTreeInfra.so)
+  Else()
+  Set(_AnalysisTree_LIB  AnalysisTreeBase.dylib AnalysisTreeInfra.dylib)
+EndIf()
+
+Set(DEPENDENCIES ${_AnalysisTree_LIB} CbmData NicaFeatures NicaGen NicaDataFormat NicaCbmHelper CbmSimGenerators Tree)
 
 GENERATE_LIBRARY()
 
-Add_Dependencies(NicaCbmFormat NICAFEMTO)
+Add_Dependencies(NicaCbmFormat NICAFEMTO ANALYSISTREE )
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatLinkDef.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatLinkDef.h
index 6437c5077d..98e6d4539f 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatLinkDef.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatLinkDef.h
@@ -11,8 +11,15 @@
 #pragma link off all functions;
 
 #pragma link C++ enum NicaCbmEvent::ECbmMode;
+#pragma link C++ namespace NicaCbmFormats;
+#pragma link C++ enum NicaCbmFormats::ECbmFormatType;
+
 #pragma link C++ class NicaCbmGlobalMCEvent + ;
 
+#pragma link C++ class CbmHbtFullEvent + ;
+#pragma link C++ class CbmHbtEvent + ;
+#pragma link C++ class CbmHbtTrack + ;
+
 #pragma link C++ class NicaCbmEvent + ;
 #pragma link C++ class NicaCbmEventInterface + ;
 #pragma link C++ class NicaCbmTrack + ;
@@ -40,3 +47,16 @@
 #pragma link C++ class NicaUnigenSource + ;
 #pragma link C++ class NicaUnigenTrack + ;
 #pragma link C++ class NicaUnigenTrackInterface + ;
+
+#pragma link C++ class NicaCbmATMCEvent + ;
+#pragma link C++ class NicaCbmATMCEventInterface + ;
+#pragma link C++ class NicaCbmATMCTrack + ;
+#pragma link C++ class NicaCbmATMCTrackInterface + ;
+#pragma link C++ class NicaCbmATEvent + ;
+#pragma link C++ class NicaCbmATEventInterface + ;
+#pragma link C++ class NicaCbmATTrack + ;
+#pragma link C++ class NicaCbmATTrackInterface + ;
+#pragma link C++ class CbmAnaTreeRecoSourceContainer + ;
+#pragma link C++ class CbmAnaTreeMcSourceContainer + ;
+#pragma link C++ class CbmAnaTreeSource + ;
+#pragma link C++ class NicaCbmATFullEvent + ;
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.cxx
new file mode 100644
index 0000000000..ea9197e049
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.cxx
@@ -0,0 +1,30 @@
+/*
+ * NicaCbmFormatTypes.cxx
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#include "NicaCbmFormatTypes.h"
+#include "NicaDataFormatManager.h"
+#include "NicaEvent.h"
+#include "NicaStd.h"
+
+
+namespace NicaCbmFormats {
+
+  ECbmFormatType GetFormatType(Int_t task_id, ENicaFormatDepth depth) {
+    const NicaEvent* ev =
+      NicaDataFormatManager::Instance()->GetFormat(task_id, depth);
+    if (ev->InheritsFrom("NicaCbmEvent")) {
+      return ECbmFormatType::kCbmRoot;
+    } else if (ev->InheritsFrom("NicaCbmATEvent")) {
+      return ECbmFormatType::kAnaTree;
+    } else if (ev->InheritsFrom("CbmHbtEvent")) {
+      return ECbmFormatType::kHbt;
+    }
+    return ECbmFormatType::kUnknown;
+  }
+}  // namespace NicaCbmFormats
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.h
new file mode 100644
index 0000000000..8da6b26956
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/NicaCbmFormatTypes.h
@@ -0,0 +1,22 @@
+/*
+ * NicaCbmFormatTypes.h
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMFORMATTYPES_H_
+#define NICACBMFORMATTYPES_H_
+
+#include "NicaDataFormatManager.h"
+
+namespace NicaCbmFormats {
+
+  enum class ECbmFormatType { kCbmRoot, kAnaTree, kHbt, kUnknown };
+  ECbmFormatType GetFormatType(Int_t task_id,
+                               ENicaFormatDepth depht = ENicaFormatDepth::kAll);
+
+}  // namespace NicaCbmFormats
+
+#endif /* NICACBMFORMATTYPES_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.cxx
new file mode 100644
index 0000000000..f0002acd13
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.cxx
@@ -0,0 +1,48 @@
+/*
+ * NicaDstAnaTreeContainer.cxx
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmAnaTreeContainer.h"
+#include "AnalysisTree/Matching.hpp"
+#include <TChain.h>
+
+Bool_t CbmAnaTreeRecoSourceContainer::ConnectToTree(TChain* tree) {
+  fEvent     = new AnalysisTree::EventHeader();
+  fVtxTracks = new AnalysisTree::TrackDetector();
+  fTofHits   = new AnalysisTree::HitDetector();
+  fVtx2Tof   = new AnalysisTree::Matching();
+  fVtx2Mc    = new AnalysisTree::Matching();
+  if (tree->GetBranch("VtxTracks") == nullptr) return kFALSE;
+  if (tree->GetBranch("RecEventHeader") == nullptr) return kFALSE;
+  if (tree->GetBranch("TofHits") == nullptr) return kFALSE;
+  if (tree->GetBranch("VtxTracks2TofHits") == nullptr) return kFALSE;
+  tree->SetBranchAddress("VtxTracks", &fVtxTracks);
+  tree->SetBranchAddress("RecEventHeader", &fEvent);
+  tree->SetBranchAddress("TofHits", &fTofHits);
+  tree->SetBranchAddress("VtxTracks2TofHits", &fVtx2Tof);
+  tree->SetBranchStatus("VtxTracks", 1);
+  tree->SetBranchStatus("RecEventHeader", 1);
+  tree->SetBranchStatus("TofHits", 1);
+  tree->SetBranchStatus("VtxTracks2TofHits", 1);
+  if (tree->GetBranch("VtxTracks2SimParticles")) {
+    tree->SetBranchAddress("VtxTracks2SimParticles", &fVtx2Mc);
+    tree->SetBranchStatus("VtxTracks2SimParticles", 1);
+  }
+  return kTRUE;
+}
+
+Bool_t CbmAnaTreeMcSourceContainer::ConnectToTree(TChain* tree) {
+  fEvent     = new AnalysisTree::EventHeader();
+  fParticles = new AnalysisTree::Particles();
+  if (tree->GetBranch("SimEventHeader") == nullptr) return kFALSE;
+  if (tree->GetBranch("SimParticles") == nullptr) return kFALSE;
+  tree->SetBranchAddress("SimEventHeader", &fEvent);
+  tree->SetBranchAddress("SimParticles", &fParticles);
+  tree->SetBranchStatus("SimEventHeader", 1);
+  tree->SetBranchStatus("SimParticles", 1);
+  return kTRUE;
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.h
new file mode 100644
index 0000000000..24d6122e46
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeContainer.h
@@ -0,0 +1,91 @@
+/*
+ * NicaCbmDstAnaTreeContainer.h
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATCONTAINER_H_
+#define NICACBMATCONTAINER_H_
+
+#include <TNamed.h>
+
+#include "AnalysisTree/Detector.hpp"
+#include "AnalysisTree/EventHeader.hpp"
+#include "AnalysisTree/Matching.hpp"
+//#include "Matching.hpp"
+
+class TChain;
+
+struct AnaTreeRecoIds {
+  Int_t vtx_px, vtx_py, vtx_pz;
+  Int_t vtx_dcax, vtx_dcay, vtx_dcaz;
+  Int_t vtx_vtxchi2, vtx_chi2;
+  Int_t vtx_q, vtx_nhits, vtx_mvdhits;
+
+  Int_t tof_mass2;
+};
+
+class CbmAnaTreeRecoSourceContainer : public TNamed {
+  AnalysisTree::EventHeader* fEvent;
+  AnalysisTree::TrackDetector* fVtxTracks;
+  AnalysisTree::Matching* fVtx2Tof;
+  AnalysisTree::HitDetector* fTofHits;
+  AnalysisTree::Matching* fVtx2Mc;
+  AnaTreeRecoIds fVtxIds;
+
+public:
+  CbmAnaTreeRecoSourceContainer()
+    : fEvent(nullptr)
+    , fVtxTracks(nullptr)
+    , fVtx2Tof(nullptr)
+    , fTofHits(nullptr)
+    , fVtx2Mc(nullptr) {};
+  Bool_t ConnectToTree(TChain* tree);
+  AnalysisTree::EventHeader* GetEventHeader() const { return fEvent; };
+  AnalysisTree::TrackDetector* GetVtxTracks() const { return fVtxTracks; };
+  AnalysisTree::HitDetector* GetTofHits() const { return fTofHits; };
+  AnalysisTree::Matching* GetVtx2ToFMatch() const { return fVtx2Tof; };
+  AnalysisTree::Matching* GetVtx2Sim() const { return fVtx2Mc; };
+  AnaTreeRecoIds& GetFieldIds() { return fVtxIds; }
+  virtual ~CbmAnaTreeRecoSourceContainer() {
+    if (fEvent) {
+      delete fEvent;
+      delete fVtxTracks;
+      delete fTofHits;
+      delete fVtx2Tof;
+      delete fVtx2Mc;
+    }
+  }
+  ClassDef(CbmAnaTreeRecoSourceContainer, 1)
+};
+
+struct AnaTreeMcIds {
+  Int_t px, py, pz;
+  Int_t pdg, motherId, mass;
+  Int_t event_b;
+  Int_t event_psi;
+};
+
+class CbmAnaTreeMcSourceContainer : public TNamed {
+  AnalysisTree::EventHeader* fEvent;
+  AnalysisTree::Particles* fParticles;
+  AnaTreeMcIds fIds;
+
+public:
+  CbmAnaTreeMcSourceContainer() : fEvent(nullptr), fParticles(nullptr) {};
+  Bool_t ConnectToTree(TChain* tree);
+  AnaTreeMcIds& GetFieldIds() { return fIds; };
+  AnalysisTree::EventHeader* GetEventHeader() const { return fEvent; };
+  AnalysisTree::Particles* GetParticles() const { return fParticles; };
+  virtual ~CbmAnaTreeMcSourceContainer() {
+    if (fEvent) {
+      delete fEvent;
+      delete fParticles;
+    }
+  };
+  ClassDef(CbmAnaTreeMcSourceContainer, 1)
+};
+
+#endif /* NICACBMATCONTAINER_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.cxx
new file mode 100644
index 0000000000..d7b6e49650
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.cxx
@@ -0,0 +1,28 @@
+/*
+ * CbmAnaTreeObjectTrack.cxx
+ *
+ *  Created on: 14 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmAnaTreeObjectTrack.h"
+
+CbmAnaTreeObjectTrack::CbmAnaTreeObjectTrack()
+  : fTreeParticle(nullptr), fTreeTrack(nullptr), fTreeHit(nullptr) {}
+
+CbmAnaTreeObjectTrack::~CbmAnaTreeObjectTrack() {}
+
+CbmAnaTreeObjectTrack::CbmAnaTreeObjectTrack(const CbmAnaTreeObjectTrack& other)
+  : fTreeParticle(other.fTreeParticle)
+  , fTreeTrack(other.fTreeTrack)
+  , fTreeHit(other.fTreeTrack) {}
+
+CbmAnaTreeObjectTrack& CbmAnaTreeObjectTrack::
+operator=(const CbmAnaTreeObjectTrack& other) {
+  if (this == &other) return *this;
+  fTreeParticle = other.fTreeParticle;
+  fTreeTrack    = other.fTreeTrack;
+  fTreeHit      = other.fTreeHit;
+  return *this;
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.h
new file mode 100644
index 0000000000..d4a6ea4034
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeObjectTrack.h
@@ -0,0 +1,35 @@
+/*
+ * CbmAnaTreeObjectTrack.h
+ *
+ *  Created on: 14 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_FORMAT_ANATREE_CBMANATREEOBJECTTRACK_H_
+#define CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_FORMAT_ANATREE_CBMANATREEOBJECTTRACK_H_
+
+#include "AnalysisTree/Detector.hpp"
+#include "AnalysisTree/Hit.hpp"
+#include "AnalysisTree/Particle.hpp"
+#include <TObject.h>
+
+class CbmAnaTreeObjectTrack : public TObject {
+  AnalysisTree::Particle* fTreeParticle;
+  AnalysisTree::Track* fTreeTrack;
+  AnalysisTree::Hit* fTreeHit;
+
+public:
+  CbmAnaTreeObjectTrack();
+  AnalysisTree::Particle* GetTreeParticle() const { return fTreeParticle; };
+  AnalysisTree::Track* GetTreeTrack() const { return fTreeTrack; };
+  AnalysisTree::Hit* GetTreeHit() const { return fTreeHit; };
+  void SetTreeParticle(AnalysisTree::Particle* p) { fTreeParticle = p; };
+  void SetTreeTrack(AnalysisTree::Track* t) { fTreeTrack = t; };
+  void SetTreeTof(AnalysisTree::Hit* h) { fTreeHit = t; };
+  virtual ~CbmAnaTreeObjectTrack();
+  CbmAnaTreeObjectTrack(const CbmAnaTreeObjectTrack& other);
+  CbmAnaTreeObjectTrack& operator=(const CbmAnaTreeObjectTrack& other);
+};
+
+#endif /* CBMROOT_ANALYSIS_PWGC2F_FEMTOSCOPY_NICAFEMTO_FORMAT_ANATREE_CBMANATREEOBJECTTRACK_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.cxx
new file mode 100644
index 0000000000..85b2389088
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.cxx
@@ -0,0 +1,175 @@
+/*
+ * NicaCbmDstSource.cxx
+ *
+ *  Created on: 27 mar 2017
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmAnaTreeSource.h"
+
+#include "AnalysisTree/Configuration.hpp"
+#include "CbmAnaTreeContainer.h"
+#include "FairLogger.h"
+#include "FairRootManager.h"
+#include <TBranch.h>
+#include <TChain.h>
+#include <TFile.h>
+#include <fstream>
+
+
+CbmAnaTreeSource::CbmAnaTreeSource() : CbmAnaTreeSource("") {}
+
+CbmAnaTreeSource::CbmAnaTreeSource(TString inFile)
+  : fNFiles(1)
+  , fChain(nullptr)
+  , fFileName(nullptr)
+  , fContainerReco(nullptr)
+  , fContainerSim(nullptr) {
+  fFileName    = new TString[1];
+  fFileName[0] = inFile;
+}
+
+CbmAnaTreeSource::~CbmAnaTreeSource() {
+  if (fFileName) delete[] fFileName;
+}
+
+Bool_t CbmAnaTreeSource::Init() {
+  LOG(debug) << "Init source ";
+  FairRootManager* mngr = FairRootManager::Instance();
+  fChain                = new TChain("aTree");
+  TString first_file_name;
+  if (fFileName[0].EndsWith(".root")) {
+    for (int i = 0; i < fNFiles; i++) {
+      LOG(debug) << "CbmAnaTree: opening single file" << fFileName[i];
+      fChain->Add(fFileName[i]);
+    }
+    first_file_name = fFileName[0];
+  } else {  // this is long list
+    std::ifstream list;
+    list.open(fFileName[0]);
+    bool first = true;
+    do {
+      TString temp;
+      list >> temp;
+      if (temp.Length() > 1) {
+        fChain->Add(temp);
+        if (first) {
+          first_file_name = temp;
+          first           = false;
+        }
+      } else {
+        break;
+      }
+      LOG(debug) << "Adding file " << temp << " to chain";
+    } while (!list.eof());
+    list.close();
+  }
+  LOG(debug) << "load container ";
+  fContainerReco   = new CbmAnaTreeRecoSourceContainer();
+  fContainerSim    = new CbmAnaTreeMcSourceContainer();
+  Bool_t recoAvail = fContainerReco->ConnectToTree(fChain);
+  Bool_t simAvail  = fContainerSim->ConnectToTree(fChain);
+  if (recoAvail == kFALSE) {
+    delete fContainerReco;
+    fContainerReco = nullptr;
+  }
+  if (simAvail == kFALSE) {
+    delete fContainerSim;
+    fContainerSim = nullptr;
+  }
+  LOG(debug) << "load conf ";
+  LoadConf(first_file_name);
+  mngr->SetInChain(fChain, -1);
+  if (fContainerReco) {
+    mngr->Register("CbmAnaTreeSourceContainer.",
+                   "CbmAnaTreeSourceContainer",
+                   fContainerReco,
+                   kFALSE);
+  }
+  if (fContainerSim) {
+    mngr->Register("CbmAnaTreeMcSourceContainer.",
+                   "CbmAnaTreeMcSourceContainer",
+                   fContainerSim,
+                   kFALSE);
+  }
+  return kTRUE;
+}
+
+Int_t CbmAnaTreeSource::ReadEvent(UInt_t unsignedInt) {
+  fChain->GetEntry(unsignedInt);
+  return 0;
+}
+
+void CbmAnaTreeSource::Close() {}
+
+void CbmAnaTreeSource::LoadConf(TString name) {
+  TFile* f = new TFile(name);
+  // TTree *tree = (TTree*)f->Get("aTree");
+  AnalysisTree::Configuration* conf =
+    (AnalysisTree::Configuration*) f->Get("Configuration");
+  if (fContainerReco) {
+    fContainerReco->GetFieldIds().vtx_px =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("px");
+    fContainerReco->GetFieldIds().vtx_py =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("py");
+    fContainerReco->GetFieldIds().vtx_pz =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("pz");
+    fContainerReco->GetFieldIds().vtx_dcax =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("dcax");
+    fContainerReco->GetFieldIds().vtx_dcay =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("dcay");
+    fContainerReco->GetFieldIds().vtx_dcaz =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("dcaz");
+
+    fContainerReco->GetFieldIds().vtx_chi2 =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("chi2");
+    fContainerReco->GetFieldIds().vtx_vtxchi2 =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("vtx_chi2");
+    fContainerReco->GetFieldIds().vtx_q =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("q");
+    fContainerReco->GetFieldIds().vtx_nhits =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("nhits");
+    fContainerReco->GetFieldIds().vtx_mvdhits =
+      conf->GetBranchConfig("VtxTracks").GetFieldId("nhits_mvd");
+
+    fContainerReco->GetFieldIds().tof_mass2 =
+      conf->GetBranchConfig("TofHits").GetFieldId("mass2");
+  }
+  if (fContainerSim) {
+    fContainerSim->GetFieldIds().px =
+      conf->GetBranchConfig("SimParticles").GetFieldId("px");
+    fContainerSim->GetFieldIds().py =
+      conf->GetBranchConfig("SimParticles").GetFieldId("py");
+    fContainerSim->GetFieldIds().pz =
+      conf->GetBranchConfig("SimParticles").GetFieldId("pz");
+    fContainerSim->GetFieldIds().mass =
+      conf->GetBranchConfig("SimParticles").GetFieldId("mass");
+    fContainerSim->GetFieldIds().pdg =
+      conf->GetBranchConfig("SimParticles").GetFieldId("pid");
+    fContainerSim->GetFieldIds().motherId =
+      conf->GetBranchConfig("SimParticles").GetFieldId("mother_id");
+    fContainerSim->GetFieldIds().event_b =
+      conf->GetBranchConfig("SimEventHeader").GetFieldId("b");
+    fContainerSim->GetFieldIds().event_psi =
+      conf->GetBranchConfig("SimEventHeader").GetFieldId("psi_RP");
+  }
+
+  f->Close();
+  delete f;
+}
+
+void CbmAnaTreeSource::AddFile(TString file) {
+  TString* temp = fFileName;
+  fFileName     = new TString[fNFiles + 1];
+  for (int i = 0; i < fNFiles; i++) {
+    fFileName[i] = temp[i];
+  }
+  delete[] temp;
+  fFileName[fNFiles] = file;
+  fNFiles            = fNFiles + 1;
+}
+
+Int_t CbmAnaTreeSource::CheckMaxEventNo(Int_t /*int1*/) {
+  return fChain->GetEntries();
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.h
new file mode 100644
index 0000000000..d5dce709aa
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/CbmAnaTreeSource.h
@@ -0,0 +1,71 @@
+/*
+ * CbmAnaTreeSource.h
+ *
+ *  Created on: 15 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMANATREESOURCE_H_
+#define CBMANATREESOURCE_H_
+/**
+ *class  only for reading pure anatree files
+ */
+
+#include <FairSource.h>
+#include <TString.h>
+
+class CbmAnaTreeMcSourceContainer;
+class CbmAnaTreeRecoSourceContainer;
+class TChain;
+
+class CbmAnaTreeSource : public FairSource {
+  Int_t fNFiles;
+  TChain* fChain;
+  TString* fFileName;  //[fNFiles]
+  CbmAnaTreeRecoSourceContainer* fContainerReco;
+  CbmAnaTreeMcSourceContainer* fContainerSim;
+
+protected:
+  void LoadConf(TString name);
+
+public:
+  /**
+	 * defaut constructor should not be used
+	 */
+  CbmAnaTreeSource();
+  /**
+	 * main constructor
+	 * @param inFile unigen file
+	 */
+  CbmAnaTreeSource(TString inFile);
+  /**
+	 * copy constructor
+	 * @param source
+	 */
+  CbmAnaTreeSource(const CbmAnaTreeSource& source) = delete;
+  CbmAnaTreeSource& operator=(const CbmAnaTreeSource&) = delete;
+  virtual ~CbmAnaTreeSource();
+  virtual Bool_t Init();
+  virtual Int_t ReadEvent(UInt_t = 0);
+  virtual void AddFile(TString file);
+  virtual void Close();
+  virtual void Reset() {};
+  virtual Bool_t ActivateObject(TObject**, const char*) { return kFALSE; }
+  virtual Source_Type GetSourceType() { return kFILE; };
+  virtual void SetParUnpackers() {};
+  virtual Bool_t InitUnpackers() { return kTRUE; };
+  virtual Bool_t ReInitUnpackers() { return kTRUE; };
+  virtual Int_t CheckMaxEventNo(Int_t = 0);
+  virtual void ReadBranchEvent(const char* /*BrName*/) {};
+  virtual void ReadBranchEvent(const char* /*BrName*/, Int_t /*Event*/) {};
+  virtual void FillEventHeader(FairEventHeader* /*feh*/) {};
+  CbmAnaTreeRecoSourceContainer* GetRecoContainer() const {
+    return fContainerReco;
+  };
+  CbmAnaTreeMcSourceContainer* GetSimContainer() const { return fContainerSim; }
+  void SetRunId(Int_t runId) { fRunId = runId; }
+  ClassDef(CbmAnaTreeSource, 1)
+};
+
+#endif /* CBMANATREESOURCE_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.cxx
new file mode 100644
index 0000000000..6b61635253
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.cxx
@@ -0,0 +1,35 @@
+/*
+ * CbmHbtEventReco.cxx
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmHbtEvent.h"
+
+#include "CbmHbtTrack.h"
+#include "NicaCbmATEvent.h"
+
+CbmHbtEvent::CbmHbtEvent() : NicaExpEvent("CbmHbtTrack") {}
+
+Bool_t CbmHbtEvent::IsCompatible(const NicaEvent* non_buffered) const {
+  if (non_buffered->InheritsFrom("NicaCbmATEvent")) return kTRUE;
+  return kFALSE;
+}
+
+void CbmHbtEvent::ShallowCopyTracks(NicaEvent* event) {
+  fTracks->Clear();
+  fTotalTracksNo = event->GetTotalTrackNo();
+  fTracks->ExpandCreateFast(fTotalTracksNo);
+  for (int i = 0; i < fTotalTracksNo; i++) {
+    NicaCbmATTrack* from = (NicaCbmATTrack*) event->GetTrack(i);
+    CbmHbtTrack* to      = (CbmHbtTrack*) fTracks->UncheckedAt(i);
+    to->CopyData(from);
+    from->SetEvent(this);
+    to->GetLink()->ClearLinks();
+    to->GetLink()->SetLink(0, i);
+  }
+}
+
+CbmHbtEvent::~CbmHbtEvent() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.h
new file mode 100644
index 0000000000..3c1a11a8de
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtEvent.h
@@ -0,0 +1,30 @@
+/*
+ * CbmHbtEventReco.h
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMHBTEVENT_H_
+#define CBMHBTEVENT_H_
+
+#include "NicaExpEvent.h"
+/**
+ * class for HBT analysis, note: CAN BE USED ONLY AS BUFFERED EVENT!
+ */
+
+class CbmHbtEvent : public NicaExpEvent {
+protected:
+  virtual void CreateSource() {};
+  virtual void ShallowCopyTracks(NicaEvent* event);
+
+public:
+  CbmHbtEvent();
+  virtual Bool_t IsCompatible(const NicaEvent* non_buffered) const;
+  virtual NicaEvent* GetNewEvent() const { return new CbmHbtEvent(); };
+  virtual ~CbmHbtEvent();
+  ClassDef(CbmHbtEvent, 1)
+};
+
+#endif /* CBMHBTEVENT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.cxx
new file mode 100644
index 0000000000..798c6113a5
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.cxx
@@ -0,0 +1,67 @@
+/*
+ * CbmHbtTrack.cxx
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmHbtTrack.h"
+
+#include "CbmHbtEvent.h"
+#include "NicaCbmATTrack.h"
+
+CbmHbtTrack::CbmHbtTrack()
+  : NicaExpTrack()
+  , fPosAt(new TVector3())
+  , fMomAt(new TVector3())
+  , fHelix(new CbmHelix())
+  , fRPos(0)
+  , fRMom(0) {}
+
+CbmHbtTrack::~CbmHbtTrack() {
+  if (fPosAt) delete fPosAt;
+  if (fMomAt) delete fMomAt;
+  if (fHelix) delete fHelix;
+}
+
+CbmHbtTrack::CbmHbtTrack(const CbmHbtTrack& other) : NicaExpTrack(other) {
+  fPosAt = new TVector3(*other.fPosAt);
+  fMomAt = new TVector3(*other.fMomAt);
+  fHelix = new CbmHelix(*other.fHelix);
+  fRPos  = other.fRPos;
+  fRMom  = other.fRMom;
+}
+
+CbmHbtTrack& CbmHbtTrack::operator=(const CbmHbtTrack& other) {
+  if (this == &other) return *this;
+  NicaExpTrack::operator=(other);
+  *fPosAt               = *other.fPosAt;
+  *fMomAt               = *other.fMomAt;
+  *fHelix               = *other.fHelix;
+  fRPos                 = other.fRPos;
+  fRMom                 = other.fRMom;
+  return *this;
+}
+
+void CbmHbtTrack::CopyData(NicaTrack* other) {
+  NicaExpTrack::CopyData(other);
+  *fHelix = *((NicaCbmATTrack*) other)->GetHelix();
+  fRPos = fRMom = -1;
+}
+
+void CbmHbtTrack::CalculatePosAt(Double_t R) {
+  if (fRPos == R) return;
+  TLorentzVector* vertex = GetEvent()->GetVertex();
+  TVector3 pos           = GetHelix()->Eval(vertex->Z() + R);
+  fPosAt->SetXYZ(
+    pos.X() - vertex->X(), pos.Y() - vertex->Y(), pos.Z() - vertex->Z());
+  fRPos = R;
+}
+
+void CbmHbtTrack::CalculateMomAt(Double_t R) {
+  if (fRMom == R) return;
+  TLorentzVector* vertex = GetEvent()->GetVertex();
+  GetHelix()->Eval(vertex->Z() + R, *fMomAt);
+  fRMom = R;
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.h
new file mode 100644
index 0000000000..afa3844bf7
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/femto/CbmHbtTrack.h
@@ -0,0 +1,39 @@
+/*
+ * CbmHbtTrack.h
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMHBTTRACK_H_
+#define CBMHBTTRACK_H_
+
+#include "CbmHelix.h"
+#include "NicaExpTrack.h"
+#include <TVector3.h>
+
+
+class CbmHbtTrack : public NicaExpTrack {
+  TVector3* fPosAt;
+  TVector3* fMomAt;
+  CbmHelix* fHelix;
+  /* true if hbt values are calculated */
+  Double_t fRPos;
+  Double_t fRMom;
+
+public:
+  CbmHbtTrack();
+  TVector3* GetPosAtR() const { return fPosAt; };
+  TVector3* GetMomAtR() const { return fMomAt; };
+  CbmHelix* GetHelix() const { return fHelix; };
+  void CalculatePosAt(Double_t R);
+  void CalculateMomAt(Double_t R);
+  virtual void CopyData(NicaTrack* other);
+  CbmHbtTrack(const CbmHbtTrack& other);
+  CbmHbtTrack& operator=(const CbmHbtTrack& other);
+  virtual ~CbmHbtTrack();
+  ClassDef(CbmHbtTrack, 1)
+};
+
+#endif /* CBMHBTTRACK_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.cxx
new file mode 100644
index 0000000000..90e303cf19
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.cxx
@@ -0,0 +1,66 @@
+/*
+ * NicaCbmDstMcEvent.cxx
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATMCEvent.h"
+
+#include "AnalysisTree/EventHeader.hpp"
+#include "AnalysisTree/Particle.hpp"
+#include "CbmAnaTreeSource.h"
+#include "NicaCbmATMCEventInterface.h"
+#include "NicaCbmATMCTrack.h"
+
+NicaCbmATMCEvent::NicaCbmATMCEvent() : NicaMCEvent("NicaCbmATMCTrack") {}
+
+void NicaCbmATMCEvent::CreateSource() {
+  fSource = new NicaCbmATMCEventInterface();
+}
+
+NicaCbmATMCEvent::NicaCbmATMCEvent(const NicaCbmATMCEvent& other)
+  : NicaMCEvent(other) {}
+
+void NicaCbmATMCEvent::Update() {
+  NicaCbmATMCEventInterface* s =
+    static_cast<NicaCbmATMCEventInterface*>(fSource);
+  CbmAnaTreeMcSourceContainer* data =
+    (CbmAnaTreeMcSourceContainer*) s->GetRawEventPointer();
+  AnaTreeMcIds conf = data->GetFieldIds();
+  fTotalTracksNo    = data->GetParticles()->GetNumberOfChannels();
+  fB                = data->GetEventHeader()->GetField<Float_t>(conf.event_b);
+  fPhi              = data->GetEventHeader()->GetField<Float_t>(conf.event_psi);
+  fTracks->Clear();
+  fTracks->ExpandCreateFast(fTotalTracksNo);
+
+  for (int i = 0; i < fTotalTracksNo; i++) {
+    NicaCbmATMCTrack* track = (NicaCbmATMCTrack*) fTracks->UncheckedAt(i);
+    track->SetEvent(this);
+    AnalysisTree::Particle particle = data->GetParticles()->GetChannel(i);
+    Double_t px                     = particle.GetField<float>(conf.px);
+    Double_t py                     = particle.GetField<float>(conf.py);
+    Double_t pz                     = particle.GetField<float>(conf.pz);
+    Double_t mass                   = particle.GetField<float>(conf.mass);
+    Int_t mother_id                 = particle.GetField<int>(conf.motherId);
+    Int_t pid                       = particle.GetField<int>(conf.pdg);
+    track->GetMomentum()->SetXYZM(px, py, pz, mass);
+    track->SetPdg(pid);
+    track->SetMotherIndex(mother_id);
+    track->GetLink()->ClearLinks();
+    track->GetLink()->SetLink(0, i);
+    if (mother_id < 0) {
+      track->SetPrimary();
+    } else {
+      track->SetMotherIndex(track->GetMotherIndex());
+    }
+    track->SetCharge(CalculateCharge(pid));
+  }
+}
+
+Bool_t NicaCbmATMCEvent::ExistInTree() const {
+  return CheckBranches(1, "CbmAnaTreeMcSourceContainer.");
+}
+
+NicaCbmATMCEvent::~NicaCbmATMCEvent() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.h
new file mode 100644
index 0000000000..b2914dbda1
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEvent.h
@@ -0,0 +1,29 @@
+/*
+ * NicaCbmDstMcEvent.h
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATMCEVENT_H_
+#define NICACBMATMCEVENT_H_
+
+#include "NicaMCEvent.h"
+
+class NicaCbmATMCEvent : public NicaMCEvent {
+protected:
+  virtual void CreateSource();
+
+public:
+  NicaCbmATMCEvent();
+  NicaCbmATMCEvent(const NicaCbmATMCEvent& other);
+  virtual void Update();
+  virtual NicaEvent* GetNewEvent() const { return new NicaCbmATMCEvent(); };
+  virtual Bool_t ExistInTree() const;
+  virtual TString GetFormatName() const { return "CbmATMCEvent"; };
+  virtual ~NicaCbmATMCEvent();
+  ClassDef(NicaCbmATMCEvent, 1)
+};
+
+#endif /* NICACBMATMCEVENT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.cxx
new file mode 100644
index 0000000000..95c9e6bf5b
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.cxx
@@ -0,0 +1,72 @@
+/*
+ * NicaCbmDstMcEventInterface.cxx
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATMCEventInterface.h"
+
+#include "FairRootManager.h"
+
+#include "CbmAnaTreeContainer.h"
+
+NicaCbmATMCEventInterface::NicaCbmATMCEventInterface()
+  : fDataContainer(nullptr) {}
+
+void NicaCbmATMCEventInterface::ConnectToTree() {
+  FairRootManager* manager = FairRootManager::Instance();
+  if (CanDeleteEvent()) { delete fDataContainer; }
+  fDataContainer = (CbmAnaTreeMcSourceContainer*) manager->GetObject(
+    "CbmAnaTreeMcSourceContainer.");
+}
+
+void NicaCbmATMCEventInterface::Register(Bool_t write) {
+  FairRootManager* manager = FairRootManager::Instance();
+  manager->Register("CbmAnaTreeMcSourceContainer.",
+                    "CbmAnaTreeMcSourceContainer.",
+                    fDataContainer,
+                    write);
+}
+
+void NicaCbmATMCEventInterface::CopyData(NicaEventInterface* s) {
+  NicaCbmATMCEventInterface* ev = (NicaCbmATMCEventInterface*) s;
+  *fDataContainer = *ev->fDataContainer;  //TODO make assignment operator
+}
+
+void NicaCbmATMCEventInterface::Compress(Int_t* /*map*/, Int_t /*map_size*/) {
+  //TODO
+}
+
+void NicaCbmATMCEventInterface::CopyAndCompress(NicaEventInterface* s,
+                                                Int_t* /*map*/,
+                                                Int_t /*map_size*/) {
+  CopyData(s);
+}
+
+void NicaCbmATMCEventInterface::FillTrackInterface(
+  NicaTrackInterface* /*track*/,
+  Int_t /*index*/) {}
+
+Int_t NicaCbmATMCEventInterface::GetTotalTrackNo() const {
+  return fDataContainer->GetParticles()->GetNumberOfChannels();
+}
+
+TObject* NicaCbmATMCEventInterface::GetRawTrackPointer(Int_t /*index*/) const {
+  return nullptr;
+}
+
+TLorentzVector NicaCbmATMCEventInterface::GetVertexError() const {
+  return TLorentzVector(0, 0, 0, 0);
+}
+
+TLorentzVector NicaCbmATMCEventInterface::GetVertex() const {
+  AnalysisTree::EventHeader* header = fDataContainer->GetEventHeader();
+  return TLorentzVector(
+    header->GetVertexX(), header->GetVertexY(), header->GetVertexZ(), 0);
+}
+
+NicaCbmATMCEventInterface::~NicaCbmATMCEventInterface() {
+  if (CanDeleteEvent()) delete fDataContainer;
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.h
new file mode 100644
index 0000000000..871d8bb06d
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCEventInterface.h
@@ -0,0 +1,53 @@
+/*
+ * NicaCbmDstMcEventInterface.h
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATMCEVENTINTERFACE_H_
+#define NICACBMATMCEVENTINTERFACE_H_
+
+#include <TVector3.h>
+
+#include "CbmAnaTreeContainer.h"
+#include "NicaCbmGlobalTrackInterface.h"
+#include "NicaMCEventInterface.h"
+
+class CbmAnaTreeMcSourceContainer;
+class NicaCbmATMCEvent;
+class NicaCbmATMCEventInterface : public NicaMCEventInterface {
+  friend class NicaCbmATMCEvent;
+
+protected:
+  CbmAnaTreeMcSourceContainer* fDataContainer;
+  virtual void ConnectToTree();
+  void Register(Bool_t write);
+
+public:
+  NicaCbmATMCEventInterface();
+  virtual void CopyData(NicaEventInterface* s);
+  virtual void Compress(Int_t* map, Int_t map_size);
+  virtual void
+  CopyAndCompress(NicaEventInterface* s, Int_t* map, Int_t map_size);
+  virtual void FillTrackInterface(NicaTrackInterface* track, Int_t index);
+  virtual Int_t GetTotalTrackNo() const;
+  virtual TObject* GetRawEventPointer() const { return fDataContainer; };
+  virtual NicaTrackInterface* GetTrackInterface() const {
+    return new NicaCbmGlobalTrackInterface();
+  }
+  virtual TObject* GetRawTrackPointer(Int_t index) const;
+  /** GETTERS AND SETTERS **/
+  virtual void SetRunInfoId(Int_t /*i*/) {};
+  virtual Int_t GetRunInfoId() const { return 0; };
+  ;
+  virtual void SetMagneticField(TVector3 /*mag*/) const {};
+  virtual TVector3 GetMagneticField() const { return TVector3(0, 0, 0); };
+  virtual TLorentzVector GetVertexError() const;
+  virtual TLorentzVector GetVertex() const;
+  virtual ~NicaCbmATMCEventInterface();
+  ClassDef(NicaCbmATMCEventInterface, 1)
+};
+
+#endif /* NICACBMATMCEVENTINTERFACE_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.cxx
new file mode 100644
index 0000000000..39871f3742
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.cxx
@@ -0,0 +1,13 @@
+/*
+ * NicaCbmATMCTrack.cxx
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATMCTrack.h"
+
+NicaCbmATMCTrack::NicaCbmATMCTrack() {}
+
+NicaCbmATMCTrack::~NicaCbmATMCTrack() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.h
new file mode 100644
index 0000000000..1bae96ff4b
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrack.h
@@ -0,0 +1,20 @@
+/*
+ * NicaCbmATMCTrack.h
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATMCTRACK_H_
+#define NICACBMATMCTRACK_H_
+
+#include "NicaMCTrack.h"
+class NicaCbmATMCTrack : public NicaMCTrack {
+public:
+  NicaCbmATMCTrack();
+  virtual ~NicaCbmATMCTrack();
+  ClassDef(NicaCbmATMCTrack, 1)
+};
+
+#endif /* NICACBMATMCTRACK_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.cxx
new file mode 100644
index 0000000000..0b60b8a712
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.cxx
@@ -0,0 +1,13 @@
+/*
+ * NicaCbmATMMCTrackInterface.cxx
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATMCTrackInterface.h"
+
+NicaCbmATMCTrackInterface::NicaCbmATMCTrackInterface() {}
+
+NicaCbmATMCTrackInterface::~NicaCbmATMCTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.h
new file mode 100644
index 0000000000..fa1927dab4
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/mc/NicaCbmATMCTrackInterface.h
@@ -0,0 +1,21 @@
+/*
+ * NicaCbmATMMCTrackInterface.h
+ *
+ *  Created on: 21 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATMMCTRACKINTERFACE_H_
+#define NICACBMATMMCTRACKINTERFACE_H_
+
+#include "NicaMCTrackInterface.h"
+
+class NicaCbmATMCTrackInterface : public NicaMCTrackInterface {
+public:
+  NicaCbmATMCTrackInterface();
+  virtual ~NicaCbmATMCTrackInterface();
+  ClassDef(NicaCbmATMCTrackInterface, 1)
+};
+
+#endif /* NICACBMATMMCTRACKINTERFACE_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.cxx
new file mode 100644
index 0000000000..41615d2b51
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.cxx
@@ -0,0 +1,107 @@
+/*
+ * NicaCbmEvent.cxx
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATEvent.h"
+
+#include "AnalysisTree/Constants.hpp"
+#include "AnalysisTree/Matching.hpp"
+#include "NicaDetectorID.h"
+#include "NicaEvent.h"
+#include <TVector3.h>
+#include <iostream>
+
+#include "NicaCbmATEventInterface.h"
+#include "NicaCbmATTrack.h"
+
+NicaCbmATEvent::NicaCbmATEvent() : NicaExpEvent("NicaCbmATTrack") {}
+
+void NicaCbmATEvent::ShallowCopyTracks(NicaEvent* event) {
+  fTracks->Clear();
+  fTotalTracksNo = event->GetTotalTrackNo();
+  fTracks->ExpandCreateFast(fTotalTracksNo);
+  NicaCbmATEvent* Event = (NicaCbmATEvent*) event;
+  for (int i = 0; i < fTotalTracksNo; i++) {
+    NicaCbmATTrack* from  = (NicaCbmATTrack*) Event->fTracks->UncheckedAt(i);
+    NicaCbmATTrack* to    = (NicaCbmATTrack*) fTracks->UncheckedAt(i);
+    NicaEvent* temp_event = from->GetEvent();
+    from->SetEvent(this);
+    to->CopyData(from);
+    from->SetEvent(temp_event);
+    to->GetLink()->ClearLinks();
+    to->GetLink()->SetLink(0, i);
+  }
+}
+
+void NicaCbmATEvent::ShallowCopyEvent(NicaEvent* event) {
+  NicaExpEvent::ShallowCopyEvent(event);
+}
+
+void NicaCbmATEvent::CreateSource() { fSource = new NicaCbmATEventInterface(); }
+
+NicaCbmATEvent::NicaCbmATEvent(const NicaCbmATEvent& other)
+  : NicaExpEvent(other) {
+  if (other.fSource) CreateSource();
+}
+
+void NicaCbmATEvent::Update() {
+  fTracks->Clear();
+  NicaCbmATEventInterface* interface = (NicaCbmATEventInterface*) fSource;
+  CbmAnaTreeRecoSourceContainer* container =
+    (CbmAnaTreeRecoSourceContainer*) interface->GetRawEventPointer();
+  fTotalTracksNo = interface->GetTotalTrackNo();
+  if (fTotalTracksNo > 1000) { fTotalTracksNo = 0; }
+  TLorentzVector start = interface->GetVertex();
+  fVertex->SetXYZT(start.X(), start.Y(), start.Z(), start.T());
+  fTracks->ExpandCreateFast(fTotalTracksNo);
+  AnaTreeRecoIds ids = container->GetFieldIds();
+  for (int i = 0; i < fTotalTracksNo; i++) {
+    AnalysisTree::Track p = container->GetVtxTracks()->GetChannel(i);
+    AnalysisTree::ShortInt_t match =
+      container->GetVtx2ToFMatch()->GetMatchDirect(i);
+    NicaCbmATTrack* track = (NicaCbmATTrack*) fTracks->UncheckedAt(i);
+    track->SetEvent(this);
+    track->SetChi2(p.GetField<float>(ids.vtx_chi2));
+    track->SetVertexChi2(p.GetField<float>(ids.vtx_vtxchi2));
+    track->GetMomentum()->SetPxPyPzE(p.GetPx(), p.GetPy(), p.GetPz(), 0);
+    track->GetDCA()->SetXYZ(p.GetField<float>(ids.vtx_dcax),
+                            p.GetField<float>(ids.vtx_dcay),
+                            p.GetField<float>(ids.vtx_dcaz));
+    track->SetNHits(p.GetField<int>(ids.vtx_nhits));
+    track->SetCharge(p.GetField<int>(ids.vtx_q));
+    TVector3 mom(p.GetPx(), p.GetPy(), p.GetPz());
+    TVector3 pos(
+      track->GetDCA()->X(), track->GetDCA()->Y(), track->GetDCA()->Z());
+    track->GetHelix()->Build(pos, mom, track->GetCharge());
+    NicaToFTrack* tof =
+      (NicaToFTrack*) track->GetDetTrack(NicaDetectorID::kTOF);
+    if (match == AnalysisTree::UndefValueShort) {
+      //no tof
+      tof->SetMass2(NicaToFTrack::DummyVal());
+      tof->SetBeta(NicaToFTrack::DummyVal());
+      tof->SetFlag(0);
+    } else {
+      AnalysisTree::Hit tof_hit = container->GetTofHits()->GetChannel(match);
+      Double_t P                = track->GetMomentum()->P();
+      Double_t m2               = tof_hit.GetField<float>(ids.tof_mass2);
+      Double_t E                = TMath::Sqrt(mom * mom + m2);
+      Double_t beta             = P / E;
+      tof->SetMass2(m2);
+      tof->SetBeta(beta);
+      tof->SetFlag(1);
+    }
+    track->GetLink()->SetLink(0, i);
+  }
+}
+
+NicaCbmATEvent::NicaCbmATEvent(TString classname) : NicaExpEvent(classname) {}
+
+NicaCbmATEvent::~NicaCbmATEvent() {}
+
+Bool_t NicaCbmATEvent::ExistInTree() const {
+  return CheckBranches(1, "CbmAnaTreeSourceContainer.");
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.h
new file mode 100644
index 0000000000..a0c05249a3
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEvent.h
@@ -0,0 +1,34 @@
+/*
+ * NicaCbmEvent.h
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMDSTEVENT_H_
+#define NICACBMDSTEVENT_H_
+
+#include "NicaCbmATTrack.h"
+#include "NicaExpEvent.h"
+
+class NicaCbmATEvent : public NicaExpEvent {
+protected:
+  virtual void ShallowCopyTracks(NicaEvent* event);
+  virtual void ShallowCopyEvent(NicaEvent* event);
+  virtual void CreateSource();
+  NicaCbmATEvent(TString classname);
+
+public:
+  NicaCbmATEvent();
+  NicaCbmATEvent(const NicaCbmATEvent& other);
+  virtual void Update();
+  virtual Bool_t ExistInTree() const;
+  NicaTrack* GetNewTrack() const { return new NicaCbmATTrack(); };
+  virtual NicaEvent* GetNewEvent() const { return new NicaCbmATEvent(); };
+  virtual TString GetFormatName() const { return "NicaCbmATEvent"; };
+  virtual ~NicaCbmATEvent();
+  ClassDef(NicaCbmATEvent, 1)
+};
+
+#endif /* NICACBMDSTEVENT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.cxx
new file mode 100644
index 0000000000..1ab4bacca1
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.cxx
@@ -0,0 +1,81 @@
+/*
+ * NicaCbmEventInterface.cxx
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#include "NicaCbmATEventInterface.h"
+
+#include <FairRootManager.h>
+#include <RtypesCore.h>
+#include <TObjArray.h>
+#include <stddef.h>
+
+#include "CbmAnaTreeSource.h"
+#include "CbmGlobalTrack.h"
+#include "CbmStsTrack.h"
+#include "CbmTofTrack.h"
+
+NicaCbmATEventInterface::NicaCbmATEventInterface() : fDataContainer(nullptr) {}
+
+void NicaCbmATEventInterface::ConnectToTree() {
+  FairRootManager* manager = FairRootManager::Instance();
+  if (CanDeleteEvent()) { delete fDataContainer; }
+
+  fDataContainer = (CbmAnaTreeRecoSourceContainer*) manager->GetObject(
+    "CbmAnaTreeSourceContainer.");
+}
+
+void NicaCbmATEventInterface::Register(Bool_t write) {
+  FairRootManager* manager = FairRootManager::Instance();
+  manager->Register("CbmAnaTreeSourceContainer.",
+                    "CbmAnaTreeSourceContainer.",
+                    fDataContainer,
+                    write);
+}
+
+void NicaCbmATEventInterface::CopyData(NicaEventInterface* s) {
+  NicaCbmATEventInterface* ev = (NicaCbmATEventInterface*) s;
+  *fDataContainer = *ev->fDataContainer;  //TODO make assignment operator
+}
+
+void NicaCbmATEventInterface::Compress(Int_t* /*map*/, Int_t /*map_size*/) {
+  //NOT AVAIABLE IN ANATREE
+}
+
+void NicaCbmATEventInterface::CopyAndCompress(NicaEventInterface* s,
+                                              Int_t* /*map*/,
+                                              Int_t /*map_size*/) {
+  NicaCbmATEventInterface* ev = (NicaCbmATEventInterface*) s;
+  *fDataContainer             = *ev->fDataContainer;
+}
+
+void NicaCbmATEventInterface::FillTrackInterface(NicaTrackInterface* /*track*/,
+                                                 Int_t /*index*/) {
+  // OPS NO POINTER TO TOBJECT !
+}
+
+Int_t NicaCbmATEventInterface::GetTotalTrackNo() const {
+  return fDataContainer->GetVtxTracks()->GetNumberOfChannels();
+}
+
+TObject* NicaCbmATEventInterface::GetRawTrackPointer(Int_t /*index*/) const {
+  return nullptr;
+}
+
+TLorentzVector NicaCbmATEventInterface::GetVertexError() const {
+  return TLorentzVector(0, 0, 0, 0);
+}
+
+TLorentzVector NicaCbmATEventInterface::GetVertex() const {
+  AnalysisTree::EventHeader* header = fDataContainer->GetEventHeader();
+  return TLorentzVector(
+    header->GetVertexX(), header->GetVertexY(), header->GetVertexZ(), 0);
+}
+
+NicaCbmATEventInterface::~NicaCbmATEventInterface() {
+  if (CanDeleteEvent()) { delete fDataContainer; }
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.h
new file mode 100644
index 0000000000..b0663930bb
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATEventInterface.h
@@ -0,0 +1,51 @@
+/*
+ * NicaCbmDstEventInterface.h
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATRECOEVENTINTERFACE_H_
+#define NICACBMATRECOEVENTINTERFACE_H_
+
+#include <Rtypes.h>
+#include <RtypesCore.h>
+#include <TVector3.h>
+
+#include "CbmAnaTreeContainer.h"
+#include "NicaCbmGlobalTrackInterface.h"
+#include "NicaExpEventInterface.h"
+
+class NicaCbmATEventInterface : public NicaExpEventInterface {
+protected:
+  CbmAnaTreeRecoSourceContainer* fDataContainer;
+  virtual void ConnectToTree();
+  void Register(Bool_t write);
+
+public:
+  NicaCbmATEventInterface();
+  virtual void CopyData(NicaEventInterface* s);
+  virtual void Compress(Int_t* map, Int_t map_size);
+  virtual void
+  CopyAndCompress(NicaEventInterface* s, Int_t* map, Int_t map_size);
+  virtual void FillTrackInterface(NicaTrackInterface* track, Int_t index);
+  virtual Int_t GetTotalTrackNo() const;
+  virtual TObject* GetRawEventPointer() const { return fDataContainer; };
+  virtual NicaTrackInterface* GetTrackInterface() const {
+    return new NicaCbmGlobalTrackInterface();
+  }
+  virtual TObject* GetRawTrackPointer(Int_t index) const;
+  /** GETTERS AND SETTERS **/
+  virtual void SetRunInfoId(Int_t /*i*/) {};
+  virtual Int_t GetRunInfoId() const { return 0; };
+  ;
+  virtual void SetMagneticField(TVector3 /*mag*/) const {};
+  virtual TVector3 GetMagneticField() const { return TVector3(0, 0, 0); };
+  virtual TLorentzVector GetVertexError() const;
+  virtual TLorentzVector GetVertex() const;
+  virtual ~NicaCbmATEventInterface();
+  ClassDef(NicaCbmATEventInterface, 1)
+};
+
+#endif /* NICACBMATRECOEVENTINTERFACE_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.cxx
new file mode 100644
index 0000000000..3ca3c94085
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.cxx
@@ -0,0 +1,49 @@
+/*
+ * NicaCbmTrack.cxx
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATTrack.h"
+
+#include "CbmHelix.h"
+#include "NicaCbmATEventInterface.h"
+#include "NicaDetectorID.h"
+#include "NicaExpEvent.h"
+
+NicaCbmATTrack::NicaCbmATTrack()
+  : fTofTrack(new NicaToFTrack()), fHelix(new CbmHelix()), fChi2Vertex(0) {}
+
+NicaCbmATTrack::NicaCbmATTrack(const NicaCbmATTrack& other)
+  : NicaExpTrack(other)
+  , fTofTrack(new NicaToFTrack(*other.fTofTrack))
+  , fHelix(new CbmHelix(*other.fHelix))
+  , fChi2Vertex(other.fChi2Vertex) {}
+
+NicaCbmATTrack& NicaCbmATTrack::operator=(const NicaCbmATTrack& other) {
+  if (this == &other) return *this;
+  NicaExpTrack::operator=(other);
+  *fTofTrack            = *other.fTofTrack;
+  *fHelix               = *other.fHelix;
+  fChi2Vertex           = other.fChi2Vertex;
+  return *this;
+}
+
+TObject* NicaCbmATTrack::GetDetTrack(const UInt_t detID) const {
+  if (detID == NicaDetectorID::kTOF) { return fTofTrack; }
+  return nullptr;
+}
+
+NicaCbmATTrack::~NicaCbmATTrack() {
+  delete fTofTrack;
+  delete fHelix;
+}
+
+void NicaCbmATTrack::CopyData(NicaTrack* other) {
+  NicaExpTrack::CopyData(other);
+  *fTofTrack  = *(static_cast<NicaCbmATTrack*>(other))->fTofTrack;
+  *fHelix     = *(static_cast<NicaCbmATTrack*>(other))->fHelix;
+  fChi2Vertex = (static_cast<NicaCbmATTrack*>(other))->fChi2Vertex;
+}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.h
new file mode 100644
index 0000000000..64e3d334f3
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrack.h
@@ -0,0 +1,41 @@
+/*
+ * NicaCbmTrack.h
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATRECOTRACK_H_
+#define NICACBMATRECOTRACK_H_
+
+#include "AnalysisTree/Detector.hpp"
+#include "AnalysisTree/Particle.hpp"
+#include "CbmGlobalTrack.h"
+#include "CbmHelix.h"
+#include "NicaCbmATEventInterface.h"
+#include "NicaExpTrack.h"
+#include "NicaToFTrack.h"
+
+class CbmHelix;
+class NicaCbmATTrackInterface;
+class NicaCbmATTrack : public NicaExpTrack {
+  NicaToFTrack* fTofTrack;
+  CbmHelix* fHelix;
+  Float_t fChi2Vertex;
+
+public:
+  NicaCbmATTrack();
+  NicaCbmATTrack(const NicaCbmATTrack& other);
+  NicaCbmATTrack& operator=(const NicaCbmATTrack& other);
+  NicaToFTrack* GetTofTrack() { return fTofTrack; };
+  CbmHelix* GetHelix() const { return fHelix; };
+  Double_t GetVertexChi2() const { return fChi2Vertex; };
+  void SetVertexChi2(Double_t v) { fChi2Vertex = v; };
+  virtual void CopyData(NicaTrack* other);
+  virtual TObject* GetDetTrack(const UInt_t detID) const;
+  virtual ~NicaCbmATTrack();
+  ClassDef(NicaCbmATTrack, 1)
+};
+
+#endif /* NICACBMATRECOTRACK_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.cxx
new file mode 100644
index 0000000000..c01f8b44d9
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.cxx
@@ -0,0 +1,13 @@
+/*
+ * NicaCbmTrackInterface.cxx
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "NicaCbmATTrackInterface.h"
+
+NicaCbmATTrackInterface::NicaCbmATTrackInterface() {}
+
+NicaCbmATTrackInterface::~NicaCbmATTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.h
new file mode 100644
index 0000000000..9239ccab18
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/anatree/reco/NicaCbmATTrackInterface.h
@@ -0,0 +1,22 @@
+/*
+ * NicaCbmTrackInterface.h
+ *
+ *  Created on: 3 gru 2018
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATRECOTRACKINTERFACE_H_
+#define NICACBMATRECOTRACKINTERFACE_H_
+
+#include "CbmStsTrack.h"
+#include "NicaCbmGlobalTrackInterface.h"
+#include "NicaTrackInterface.h"
+class NicaCbmATTrackInterface : public NicaTrackInterface {
+public:
+  NicaCbmATTrackInterface();
+  virtual ~NicaCbmATTrackInterface();
+  ClassDef(NicaCbmATTrackInterface, 1)
+};
+
+#endif /* NICACBMATTRACKINTERFACE_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.cxx
new file mode 100644
index 0000000000..f578b190f9
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.cxx
@@ -0,0 +1,25 @@
+/*
+ * NicaCbmHbtEvent.cxx
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmHbtFullEvent.h"
+#include "CbmHbtEvent.h"
+#include "CbmHbtFullEvent.h"
+
+#include "NicaCbmATMCEvent.h"
+
+CbmHbtFullEvent::CbmHbtFullEvent()
+  : NicaComplexEvent(new CbmHbtEvent(), new NicaCbmATMCEvent()) {}
+
+CbmHbtFullEvent::~CbmHbtFullEvent() {}
+
+/*
+Bool_t CbmHbtFullEvent::IsCompatible(const NicaEvent *non_buffered) const {
+    if(non_buffered->InheritsFrom("NicaCbmATFullEvent")) return kTRUE;
+    return kFALSE;
+}
+*/
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.h
new file mode 100644
index 0000000000..2f7b940164
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/CbmHbtFullEvent.h
@@ -0,0 +1,29 @@
+/*
+ * NicaCbmHbtEvent.h
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMHBTFULLEVENT_H_
+#define CBMHBTFULLEVENT_H_
+
+#include "NicaComplexEvent.h"
+
+/**
+ * class for ana tree data and HBT analysis
+ */
+
+class CbmHbtFullEvent : public NicaComplexEvent {
+public:
+  CbmHbtFullEvent();
+  virtual void Update() {};  // we are never reading directly from tree
+  virtual TString GetFormatName() const { return "NicaCbmHbtEvent"; };
+  virtual NicaEvent* GetNewEvent() const { return new CbmHbtFullEvent(); };
+  //   virtual Bool_t IsCompatible(const NicaEvent *non_buffered) const;
+  virtual ~CbmHbtFullEvent();
+  ClassDef(CbmHbtFullEvent, 1)
+};
+
+#endif /* CBMHBTFULLEVENT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.cxx
new file mode 100644
index 0000000000..07c24cf5a9
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.cxx
@@ -0,0 +1,52 @@
+/*
+ * NicaCbmATEvent.cxx
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#include "NicaCbmATFullEvent.h"
+
+#include "AnalysisTree/Constants.hpp"
+#include "NicaCbmATEvent.h"
+#include "NicaCbmATEventInterface.h"
+#include "NicaCbmATMCEvent.h"
+#include "NicaComplexTrack.h"
+
+
+NicaCbmATFullEvent::NicaCbmATFullEvent()
+  : NicaComplexEvent(new NicaCbmATEvent(), new NicaCbmATMCEvent()) {}
+
+void NicaCbmATFullEvent::Update() {
+  fImgEvent->Update();
+  fRealEvent->Update();
+  NicaEvent::ShallowCopyEvent(fRealEvent);
+  fTracks->Clear();
+  fTotalTracksNo = fRealEvent->GetTotalTrackNo();
+  fTracks->ExpandCreateFast(fTotalTracksNo);
+  NicaCbmATEventInterface* s = (NicaCbmATEventInterface*) fSource;
+  CbmAnaTreeRecoSourceContainer* reco =
+    (CbmAnaTreeRecoSourceContainer*) s->GetRawEventPointer();
+  for (Int_t i = 0; i < fTotalTracksNo; i++) {
+    NicaComplexTrack* track = (NicaComplexTrack*) fTracks->UncheckedAt(i);
+    track->SetRealTrack(fRealEvent->GetTrack(i));
+    track->NicaTrack::CopyData(fRealEvent->GetTrack(i));
+    Int_t match = reco->GetVtx2Sim()->GetMatchDirect(i);
+
+    if (match < 0 || match == AnalysisTree::UndefValueInt) {
+      track->SetImgTrack(nullptr);
+    } else {
+      track->SetImgTrack(fImgEvent->GetTrack(match));
+      track->SetMatchID(match);
+    }
+    track->SetEvent(this);
+  }
+}
+
+NicaEvent* NicaCbmATFullEvent::GetNewEvent() const {
+  return new NicaCbmATFullEvent();
+}
+
+NicaCbmATFullEvent::~NicaCbmATFullEvent() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.h
new file mode 100644
index 0000000000..0aa1cd8c7e
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmATFullEvent.h
@@ -0,0 +1,27 @@
+/*
+ * NicaCbmATEvent.h
+ *
+ *  Created on: 17 wrz 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef NICACBMATEVENT_H_
+#define NICACBMATEVENT_H_
+#include "NicaComplexEvent.h"
+
+/**
+ * class for analyses that base on anatree events
+ */
+
+class NicaCbmATFullEvent : public NicaComplexEvent {
+public:
+  NicaCbmATFullEvent();
+  virtual void Update();
+  virtual TString GetFormatName() const { return "NicaGlobalMCEvent"; };
+  virtual NicaEvent* GetNewEvent() const;
+  virtual ~NicaCbmATFullEvent();
+  ClassDef(NicaCbmATFullEvent, 1)
+};
+
+#endif /* NICACBMATEVENT_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.cxx
index d6f2588a77..c1865baf38 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.cxx
@@ -54,16 +54,17 @@ void NicaCbmGlobalMCEvent::Update() {
     id_match = link->GetMatchedLink().GetIndex();
     if (id_match < 0) {
       track->SetImgTrack(NULL);
+      track->SetMatchID(-1);
     } else {
       NicaCbmMCTrack* mc = (NicaCbmMCTrack*) fImgEvent->GetTrack(id_match);
       track->SetImgTrack(mc);
       track->SetMatchID(id_match);
     }
+    track->SetEvent(this);
   }
 }
 
 Bool_t NicaCbmGlobalMCEvent::ExistInTree() const {
-  //NicaCbmMatchedEventInterface *interface = (NicaCbmMatchedEventInterface*)fRealEvent->GetSource();
   if (fImgEvent && fRealEvent) {
     if (fImgEvent->ExistInTree() && fRealEvent->ExistInTree()) { return kTRUE; }
   }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.h
index 2f6bfaca2a..8dd90339b4 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/combined/NicaCbmGlobalMCEvent.h
@@ -25,7 +25,7 @@ class NicaCbmGlobalMCEvent : public NicaComplexEvent {
   NicaCbmMatchedTrackInterface* fRealTrackInterface;
 
 public:
-  NicaCbmGlobalMCEvent(NicaCbmSetup mode  = kSis100Hadron,
+  NicaCbmGlobalMCEvent(NicaCbmSetup mode  = NicaCbmSetup::kSis100Hadron,
                        ECbmModuleId match = ECbmModuleId::kSts);
   virtual void Update();
   virtual Bool_t ExistInTree() const;
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.cxx
index 0462672e60..615e310387 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.cxx
@@ -17,19 +17,25 @@
 NicaCbmEvent::NicaCbmEvent(NicaCbmSetup mode)
   : NicaCbmGlobalEvent("NicaCbmTrack")
   , fMode(mode)
+  , fTrdTracks(NULL)
   , fRichRings(NULL)
   , fMuchTracks(NULL) {
   fStsTracks = new NicaTrackClones("CbmStsTrack", "", "");
   fTofHits   = new NicaTrackClones("CbmTofHit", "", "");
-  fTrdTracks = new NicaTrackClones("CbmTrdTrack", "", "");
+
   switch (fMode) {
-    case kSis100Electron:
+    case NicaCbmSetup::kSis100Electron:
       fRichRings = new NicaTrackClones("CbmRichRing", "", "");
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "", "");
+      break;
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "", "");
       break;
-    case kSis100Hadron: break;
-    case kSis100Muon:
+    case NicaCbmSetup::kSis100Muon:
       fMuchTracks = new NicaTrackClones("CbmMuchTrack", "", "");
+      fTrdTracks  = new NicaTrackClones("CbmTrdTrack", "", "");
       break;
+    case NicaCbmSetup::kSis100Mini: break;
   }
 }
 
@@ -37,15 +43,19 @@ void NicaCbmEvent::ShallowCopyTracks(NicaEvent* event) {
   NicaCbmEvent* ev = (NicaCbmEvent*) event;
   fStsTracks->CopyFrom<CbmStsTrack>(ev->fStsTracks->GetArray());
   fTofHits->CopyFrom<CbmTofHit>(ev->fTofHits->GetArray());
-  fTrdTracks->CopyFrom<CbmTrdTrack>(ev->fTrdTracks->GetArray());
   switch (fMode) {
-    case kSis100Electron:
+    case NicaCbmSetup::kSis100Electron:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(ev->fTrdTracks->GetArray());
       fRichRings->CopyFrom<CbmRichRing>(ev->fRichRings->GetArray());
       break;
-    case kSis100Hadron: break;
-    case kSis100Muon:
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(ev->fTrdTracks->GetArray());
+      break;
+    case NicaCbmSetup::kSis100Muon:
       fMuchTracks->CopyFrom<CbmMuchTrack>(ev->fMuchTracks->GetArray());
+      fTrdTracks->CopyFrom<CbmTrdTrack>(ev->fTrdTracks->GetArray());
       break;
+    case NicaCbmSetup::kSis100Mini: break;
   }
   NicaCbmGlobalEvent::ShallowCopyTracks(event);
 }
@@ -62,15 +72,19 @@ void NicaCbmEvent::Update() {
   NicaCbmEventInterface* interface = (NicaCbmEventInterface*) fSource;
   fStsTracks->CopyFrom<CbmStsTrack>(interface->fStsTracks->GetArray());
   fTofHits->CopyFrom<CbmTofHit>(interface->fTofHits->GetArray());
-  fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
   switch (fMode) {
-    case kSis100Electron:
+    case NicaCbmSetup::kSis100Electron:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
       fRichRings->CopyFrom<CbmRichRing>(interface->fRichRings->GetArray());
       break;
-    case kSis100Hadron: break;
-    case kSis100Muon:
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
+      break;
+    case NicaCbmSetup::kSis100Muon:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
       fMuchTracks->CopyFrom<CbmMuchTrack>(interface->fMuchTracks->GetArray());
       break;
+    case NicaCbmSetup::kSis100Mini: break;
   }
   NicaCbmGlobalEvent::Update();
 }
@@ -84,30 +98,39 @@ NicaCbmEvent::NicaCbmEvent(TString classname, NicaCbmSetup mode)
   , fMuchTracks(NULL) {
   fStsTracks = new NicaTrackClones("CbmStsTrack", "StsTrack", "STS");
   fTofHits   = new NicaTrackClones("CbmTofHit", "TofHit", "TOF");
-  fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
       fRichRings = new NicaTrackClones("CbmRichRing", "RichRing", "");
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
+      break;
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdTracks  = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
       fMuchTracks = new NicaTrackClones("CbmMuchTrack", "MuchTrack", "MUCH");
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
 Bool_t NicaCbmEvent::ExistInTree() const {
   Bool_t exists = kFALSE;
   switch (fMode) {
-    case kSis100Electron:
+    case NicaCbmSetup::kSis100Electron:
       exists = CheckBranches(4, "StsTrack", "TofHit", "TrdTrack", "RichRing");
       break;
-    case kSis100Muon:
+    case NicaCbmSetup::kSis100Muon:
       exists = CheckBranches(4, "StsTrack", "TofHit", "TrdTrack", "MuchTrack");
       break;
-    case kSis100Hadron:
+    case NicaCbmSetup::kSis100Hadron:
       exists = CheckBranches(3, "StsTrack", "TofHit", "TrdTrack");
       break;
+    case NicaCbmSetup::kSis100Mini:
+      exists = CheckBranches(2, "StsTrack", "TofHit");
+      break;
   }
   if (exists == kFALSE) return kFALSE;
   return NicaCbmGlobalEvent::ExistInTree();
@@ -116,7 +139,7 @@ Bool_t NicaCbmEvent::ExistInTree() const {
 NicaCbmEvent::~NicaCbmEvent() {
   delete fStsTracks;
   delete fTofHits;
-  delete fTrdTracks;
+  if (fTrdTracks) delete fTrdTracks;
   if (fRichRings) delete fRichRings;
   if (fMuchTracks) delete fMuchTracks;
 }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.h
index bdb12547d4..04f584dabb 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEvent.h
@@ -27,7 +27,7 @@ protected:
   NicaCbmEvent(TString classname, NicaCbmSetup mode);
 
 public:
-  NicaCbmEvent(NicaCbmSetup mode = kSis100Hadron);
+  NicaCbmEvent(NicaCbmSetup mode = NicaCbmSetup::kSis100Hadron);
   NicaCbmSetup GetMode() const { return fMode; }
   virtual Bool_t ExistInTree() const;
   NicaTrackClones* GetStsTracks() const { return fStsTracks; }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.cxx
index 062b1a9a78..85b019fb20 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.cxx
@@ -25,20 +25,24 @@
 #include <TClonesArray.h>
 
 NicaCbmEventInterface::NicaCbmEventInterface(NicaCbmSetup mode)
-  : fMode(mode), fMuchTracks(NULL), fRichRings(NULL) {
+  : fMode(mode), fTrdTracks(NULL), fMuchTracks(NULL), fRichRings(NULL) {
   fStsTracks = new NicaTrackClones("CbmStsTrack", "StsTrack", "STS");
   fTofHits   = new NicaTrackClones("CbmTofHit", "TofHit", "TOF");
-  fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
       fRichRings = new NicaTrackClones("CbmRichRing", "RichRing", "");
     } break;
-    case kSis100Hadron: {
-
+    case NicaCbmSetup::kSis100Hadron: {
+      fTrdTracks = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
     } break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdTracks  = new NicaTrackClones("CbmTrdTrack", "TrdTrack", "TRD");
       fMuchTracks = new NicaTrackClones("CbmMuchTrack", "MuchTrack", "MUCH");
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
@@ -46,17 +50,21 @@ void NicaCbmEventInterface::ConnectToTree() {
   NicaCbmGlobalEventInterface::ConnectToTree();
   fStsTracks->GetFromTree();
   fTofHits->GetFromTree();
-  fTrdTracks->GetFromTree();
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdTracks->GetFromTree();
       fRichRings->GetFromTree();
     } break;
-    case kSis100Hadron: {
-
+    case NicaCbmSetup::kSis100Hadron: {
+      fTrdTracks->GetFromTree();
     } break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdTracks->GetFromTree();
       fMuchTracks->GetFromTree();
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
@@ -64,15 +72,19 @@ void NicaCbmEventInterface::Register(Bool_t write) {
   NicaCbmGlobalEventInterface::Register(write);
   fStsTracks->Register(write);
   fTofHits->Register(write);
-  fTrdTracks->Register(write);
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdTracks->Register(write);
       fRichRings->Register(write);
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron: fTrdTracks->Register(write); break;
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdTracks->Register(write);
       fMuchTracks->Register(write);
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
@@ -81,15 +93,22 @@ void NicaCbmEventInterface::CopyData(NicaEventInterface* s) {
   NicaCbmEventInterface* interface = (NicaCbmEventInterface*) s;
   fStsTracks->CopyFrom<CbmStsTrack>(interface->fStsTracks->GetArray());
   fTofHits->CopyFrom<CbmTofHit>(interface->fTofHits->GetArray());
-  fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
+
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
       fRichRings->CopyFrom<CbmRichRing>(interface->fRichRings->GetArray());
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
+      break;
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
       fMuchTracks->CopyFrom<CbmMuchTrack>(interface->fMuchTracks->GetArray());
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
@@ -106,7 +125,8 @@ void NicaCbmEventInterface::CopyAndCompress(NicaEventInterface* s,
   //TODO compression
   fStsTracks->CopyFrom<CbmStsTrack>(interface->fStsTracks->GetArray());
   fTofHits->CopyFrom<CbmTofHit>(interface->fTofHits->GetArray());
-  fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
+  if (fTrdTracks)
+    fTrdTracks->CopyFrom<CbmTrdTrack>(interface->fTrdTracks->GetArray());
   if (fRichRings)
     fRichRings->CopyFrom<CbmRichRing>(interface->fRichRings->GetArray());
   if (fMuchTracks)
@@ -122,18 +142,26 @@ void NicaCbmEventInterface::FillTrackInterface(NicaTrackInterface* track,
     (CbmStsTrack*) fStsTracks->UncheckedAt(glob->GetStsTrackIndex()));
   cbm_track->SetTofHit(
     (CbmTofHit*) fTofHits->UncheckedAt(glob->GetTofHitIndex()));
-  cbm_track->SetTrdTrack(
-    (CbmTrdTrack*) fTrdTracks->UncheckedAt(glob->GetTrdTrackIndex()));
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      cbm_track->SetTrdTrack(
+        (CbmTrdTrack*) fTrdTracks->UncheckedAt(glob->GetTrdTrackIndex()));
       cbm_track->SetRichRing(
         (CbmRichRing*) fRichRings->UncheckedAt(glob->GetRichRingIndex()));
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron:
+      cbm_track->SetTrdTrack(
+        (CbmTrdTrack*) fTrdTracks->UncheckedAt(glob->GetTrdTrackIndex()));
+      break;
+    case NicaCbmSetup::kSis100Muon: {
+      cbm_track->SetTrdTrack(
+        (CbmTrdTrack*) fTrdTracks->UncheckedAt(glob->GetTrdTrackIndex()));
       cbm_track->SetMuchTrack(
         (CbmMuchTrack*) fMuchTracks->UncheckedAt(glob->GetMuchTrackIndex()));
     } break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
   }
 }
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.h
index 851951b482..1232fa045e 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmEventInterface.h
@@ -32,7 +32,7 @@ protected:
   void Register(Bool_t write);
 
 public:
-  NicaCbmEventInterface(NicaCbmSetup mode = kSis100Electron);
+  NicaCbmEventInterface(NicaCbmSetup mode = NicaCbmSetup::kSis100Electron);
   NicaTrackClones* GetStsTracks() const { return fStsTracks; }
   NicaTrackClones* GetTrdTracks() const { return fTrdTracks; }
   NicaTrackClones* GetMuchTracks() const { return fMuchTracks; }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.cxx
index 833fee2702..3f33aaba3b 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.cxx
@@ -13,17 +13,25 @@
 
 NicaCbmTrack::NicaCbmTrack()
   : fStsTrack(NULL)
-  , fTofTrack(NULL)
+  , fTofHit(NULL)
   , fTrdTrack(NULL)
   , fRichRing(NULL)
   , fMuchTrack(NULL)
+  , fTofTrack(new NicaToFTrack())
   , fStsTrackIndex(-1)
   , fTofTrackIndex(-1)
   , fTrdTrackIndex(-1)
   , fRichRingIndex(-1)
-  , fMuchTrackIndex(-1) {}
+  , fMuchTrackIndex(-1) {
+  fTofTrack->SetFlag(-1);
+}
+
+TObject* NicaCbmTrack::GetDetTrack(const UInt_t detID) const {
+  if (detID == NicaDetectorID::kTOF) { return fTofTrack; }
+  return nullptr;
+}
 
-NicaCbmTrack::~NicaCbmTrack() {}
+NicaCbmTrack::~NicaCbmTrack() { delete fTofTrack; }
 
 void NicaCbmTrack::Update(CbmGlobalTrack* track,
                           NicaCbmGlobalEventInterface* interface) {
@@ -31,11 +39,12 @@ void NicaCbmTrack::Update(CbmGlobalTrack* track,
   NicaCbmGlobalTrack::Update(track, interface);
   fStsTrackIndex    = track->GetStsTrackIndex();
   fTofTrackIndex    = track->GetTofHitIndex();
-  fTrdTrackIndex    = track->GetTrdTrackIndex();
   NicaCbmSetup mode = evint->GetMode();
-  if (mode == kSis100Electron)
+  if (mode != NicaCbmSetup::kSis100Mini)
+    fTrdTrackIndex = track->GetTrdTrackIndex();
+  if (mode == NicaCbmSetup::kSis100Electron)
     fRichRingIndex = track->GetRichRingIndex();
-  else if (mode == kSis100Muon)
+  else if (mode == NicaCbmSetup::kSis100Muon)
     fMuchTrackIndex = track->GetMuchTrackIndex();
   if (fStsTrackIndex >= 0)
     SetStsTrack(
@@ -45,18 +54,24 @@ void NicaCbmTrack::Update(CbmGlobalTrack* track,
   if (fTofTrackIndex >= 0) {
     CbmTofHit* hit =
       (CbmTofHit*) evint->GetTofHits()->UncheckedAt(fTofTrackIndex);
-    SetTofTrack(hit);
+    SetTofHit(hit);
     Double_t t    = hit->GetTime();
     Double_t beta = GetTrackLenght() / t / (29.9792458);
     Double_t p    = GetMomentum()->P();
     Double_t m2   = p * p * (1. / beta / beta - 1.);
+    fTofTrack->SetMass2(m2);
+    fTofTrack->SetBeta(beta);
+    fTofTrack->SetFlag(1);
     if (m2 > 0) {
       SetMass(TMath::Sqrt(m2));
     } else {
       SetMass(TMath::Sqrt(-m2));
     }
   } else {
-    SetTofTrack(NULL);
+    fTofTrack->SetFlag(0);
+    fTofTrack->SetMass2(-100);
+    fTofTrack->SetBeta(-1);
+    SetTofHit(NULL);
     SetMass(-2);
   }
   if (fTrdTrackIndex >= 0)
@@ -90,9 +105,9 @@ void NicaCbmTrack::CopyData(NicaTrack* track) {
   else
     fStsTrack = NULL;
   if (fTofTrackIndex >= 0)
-    fTofTrack = (CbmTofHit*) ev->GetTofHits()->UncheckedAt(fTofTrackIndex);
+    fTofHit = (CbmTofHit*) ev->GetTofHits()->UncheckedAt(fTofTrackIndex);
   else
-    fTofTrack = NULL;
+    fTofHit = NULL;
   if (fTrdTrackIndex >= 0)
     fTrdTrack = (CbmTrdTrack*) ev->GetTrdTracks()->UncheckedAt(fTrdTrackIndex);
   else
@@ -106,4 +121,5 @@ void NicaCbmTrack::CopyData(NicaTrack* track) {
       (CbmMuchTrack*) ev->GetMuchTracks()->UncheckedAt(fMuchTrackIndex);
   else
     fMuchTrack = NULL;
+  *fTofTrack = *other->fTofTrack;
 }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.h
index 15196e529e..a862ad7464 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/full/NicaCbmTrack.h
@@ -16,13 +16,14 @@
 #include "CbmTofTrack.h"
 #include "CbmTrdTrack.h"
 #include "NicaCbmGlobalTrack.h"
-
+#include "NicaToFTrack.h"
 class NicaCbmTrack : public NicaCbmGlobalTrack {
   CbmStsTrack* fStsTrack;
-  CbmTofHit* fTofTrack;
+  CbmTofHit* fTofHit;
   CbmTrdTrack* fTrdTrack;
   CbmRichRing* fRichRing;
   CbmMuchTrack* fMuchTrack;
+  NicaToFTrack* fTofTrack;
   Int_t fStsTrackIndex;
   Int_t fTofTrackIndex;
   Int_t fTrdTrackIndex;
@@ -35,12 +36,12 @@ public:
                       NicaCbmGlobalEventInterface* interface);
   virtual void CopyData(NicaTrack* track);
   CbmStsTrack* GetStsTrack() const { return fStsTrack; }
-  CbmTofHit* GetTofTrack() const { return fTofTrack; }
+  CbmTofHit* GetTofHit() const { return fTofHit; }
   CbmTrdTrack* GetTrdTrack() const { return fTrdTrack; }
   CbmRichRing* GetRichRing() const { return fRichRing; };
   CbmMuchTrack* GetMuchTrack() const { return fMuchTrack; };
   Int_t GetStsTrackIndex() const { return fStsTrackIndex; }
-  Int_t GetTofTrackIndex() const { return fTofTrackIndex; }
+  Int_t GetTofHitIndex() const { return fTofTrackIndex; }
   Int_t GetTrdTrackIndex() const { return fTrdTrackIndex; }
   Int_t GetRichRingIndex() const { return fRichRingIndex; };
   Int_t GetMuchIndex() const { return fMuchTrackIndex; };
@@ -50,10 +51,12 @@ public:
   void SetRichRingIndex(Int_t no) { fRichRingIndex = no; };
   void SetMuchIndex(Int_t id) { fMuchTrackIndex = id; };
   void SetStsTrack(CbmStsTrack* stsTrack) { fStsTrack = stsTrack; }
-  void SetTofTrack(CbmTofHit* tofTrack) { fTofTrack = tofTrack; }
+  void SetTofHit(CbmTofHit* tofTrack) { fTofHit = tofTrack; }
   void SetTrdTrack(CbmTrdTrack* trdTrack) { fTrdTrack = trdTrack; }
   void SetRichRing(CbmRichRing* tr) { fRichRing = tr; };
   void SetMuchTrack(CbmMuchTrack* tr) { fMuchTrack = tr; };
+  /** curently return only pointer to ToF **/
+  virtual TObject* GetDetTrack(const UInt_t detID) const;
   virtual ~NicaCbmTrack();
   ClassDef(NicaCbmTrack, 1)
 };
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalEvent.cxx
index 694c630610..5c52be0e97 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalEvent.cxx
@@ -26,7 +26,6 @@ void NicaCbmGlobalEvent::ShallowCopyTracks(NicaEvent* event) {
     from->SetEvent(this);
     to->CopyData(from);
     from->SetEvent(temp_event);
-    to->GetLink()->SetLink(0, i);
   }
 }
 
@@ -56,7 +55,7 @@ void NicaCbmGlobalEvent::Update() {
     NicaCbmGlobalTrack* tr_nica = (NicaCbmGlobalTrack*) fTracks->UncheckedAt(i);
     tr_nica->SetEvent(this);
     tr_nica->Update(tr_cbm, interface);
-    tr_nica->SetEvent(this);
+    tr_nica->GetLink()->ClearLinks();
     tr_nica->GetLink()->SetLink(0, i);
   }
 }
@@ -64,9 +63,7 @@ void NicaCbmGlobalEvent::Update() {
 NicaCbmGlobalEvent::NicaCbmGlobalEvent(TString classname)
   : NicaExpEvent(classname) {}
 
-NicaCbmGlobalEvent::~NicaCbmGlobalEvent() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmGlobalEvent::~NicaCbmGlobalEvent() {}
 
 Bool_t NicaCbmGlobalEvent::ExistInTree() const {
   return CheckBranches(2, "PrimaryVertex.", "GlobalTrack");
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.cxx
index aec1a528f2..22651ba279 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.cxx
@@ -20,8 +20,8 @@ NicaCbmGlobalTrack::NicaCbmGlobalTrack(const NicaCbmGlobalTrack& other)
   fHelix      = other.fHelix;
 }
 
-NicaCbmGlobalTrack&
-NicaCbmGlobalTrack::operator=(const NicaCbmGlobalTrack& other) {
+NicaCbmGlobalTrack& NicaCbmGlobalTrack::
+operator=(const NicaCbmGlobalTrack& other) {
   if (this == &other) return *this;
   NicaExpTrack::operator=(other);
   *fFirstPoint          = *other.fFirstPoint;
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.h
index 4641b9b40d..237ae36cad 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrack.h
@@ -27,7 +27,7 @@ public:
   virtual void Update(CbmGlobalTrack* track,
                       NicaCbmGlobalEventInterface* interface);
   CbmHelix* GetHelix() { return &fHelix; };
-  void CopyData(NicaTrack* other);
+  virtual void CopyData(NicaTrack* other);
   virtual ~NicaCbmGlobalTrack();
   ClassDef(NicaCbmGlobalTrack, 1)
 };
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrackInterface.cxx
index 041cecc23a..a9c605ed5c 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrackInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/global/NicaCbmGlobalTrackInterface.cxx
@@ -10,6 +10,4 @@
 
 NicaCbmGlobalTrackInterface::NicaCbmGlobalTrackInterface() {}
 
-NicaCbmGlobalTrackInterface::~NicaCbmGlobalTrackInterface() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmGlobalTrackInterface::~NicaCbmGlobalTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.cxx
index 6e21924663..bcf319c9ab 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.cxx
@@ -19,7 +19,7 @@ NicaCbmMatchedEvent::NicaCbmMatchedEvent(NicaCbmSetup mode)
 
 Bool_t NicaCbmMatchedEvent::ExistInTree() const {
   switch (fMode) {
-    case kSis100Electron:
+    case NicaCbmSetup::kSis100Electron:
       if (!CheckBranches(4,
                          "StsTrackMatch",
                          "TofHitMatch",
@@ -27,7 +27,7 @@ Bool_t NicaCbmMatchedEvent::ExistInTree() const {
                          "RichRingMatch"))
         return kFALSE;
       break;
-    case kSis100Muon:
+    case NicaCbmSetup::kSis100Muon:
       if (!CheckBranches(4,
                          "StsTrackMatch",
                          "TofHitMatch",
@@ -35,17 +35,18 @@ Bool_t NicaCbmMatchedEvent::ExistInTree() const {
                          "MuchTrackMatch"))
         return kFALSE;
       break;
-    default:
+    case NicaCbmSetup::kSis100Hadron: {
       if (!CheckBranches(3, "StsTrackMatch", "TofHitMatch", "TrdTrackMatch"))
         return kFALSE;
+    } break;
+    default:
+      if (!CheckBranches(2, "StsTrackMatch", "TofHitMatch")) return kFALSE;
       break;
   }
   return NicaCbmEvent::ExistInTree();
 }
 
-NicaCbmMatchedEvent::~NicaCbmMatchedEvent() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmMatchedEvent::~NicaCbmMatchedEvent() {}
 
 NicaCbmMatchedEvent::NicaCbmMatchedEvent(TString classname, NicaCbmSetup mode)
   : NicaCbmEvent(classname, mode) {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.h
index bd149c1cd9..3966a4755d 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEvent.h
@@ -15,10 +15,11 @@
 class NicaCbmMatchedEvent : public NicaCbmEvent {
 protected:
   virtual void CreateSource();
-  NicaCbmMatchedEvent(TString classname, NicaCbmSetup mode = kSis100Hadron);
+  NicaCbmMatchedEvent(TString classname,
+                      NicaCbmSetup mode = NicaCbmSetup::kSis100Hadron);
 
 public:
-  NicaCbmMatchedEvent(NicaCbmSetup mode = kSis100Hadron);
+  NicaCbmMatchedEvent(NicaCbmSetup mode = NicaCbmSetup::kSis100Hadron);
   virtual Bool_t ExistInTree() const;
   virtual NicaEvent* GetNewEvent() const {
     return new NicaCbmMatchedEvent(fMode);
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.cxx
index 2f1461bcd7..f39c422bcc 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.cxx
@@ -11,17 +11,29 @@
 #include "NicaCbmMatchedTrackInterface.h"
 
 NicaCbmMatchedEventInterface::NicaCbmMatchedEventInterface(NicaCbmSetup mode)
-  : NicaCbmEventInterface(mode), fMuchMatches(NULL), fRichMatches(NULL) {
+  : NicaCbmEventInterface(mode)
+  , fTrdMatches(NULL)
+  , fMuchMatches(NULL)
+  , fRichMatches(NULL) {
   fStsMatches = new NicaTrackClones("CbmTrackMatchNew", "StsTrackMatch", "STS");
   fTofMatches = new NicaTrackClones("CbmTrackMatchNew", "TofHitMatch", "TOF");
-  fTrdMatches = new NicaTrackClones("CbmTrackMatchNew", "TrdTrackMatch", "TRD");
   switch (fMode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      fTrdMatches =
+        new NicaTrackClones("CbmTrackMatchNew", "TrdTrackMatch", "TRD");
       fRichMatches =
         new NicaTrackClones("CbmTrackMatchNew", "RichRingMatch", "RICH");
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron:
+      fTrdMatches =
+        new NicaTrackClones("CbmTrackMatchNew", "TrdTrackMatch", "TRD");
+      break;
+    case NicaCbmSetup::kSis100Mini: {
+
+    } break;
+    case NicaCbmSetup::kSis100Muon: {
+      fTrdMatches =
+        new NicaTrackClones("CbmTrackMatchNew", "TrdTrackMatch", "TRD");
       fMuchMatches =
         new NicaTrackClones("CbmTrackMatchNew", "MuchTrackMatch", "MUCH");
     } break;
@@ -33,20 +45,23 @@ void NicaCbmMatchedEventInterface::ConnectToTree() {
   if (CanDeleteEvent()) {
     fStsMatches->DeleteClones();
     fTofMatches->DeleteClones();
-    fTrdMatches->DeleteClones();
     switch (fMode) {
-      case kSis100Electron: {
+      case NicaCbmSetup::kSis100Electron: {
         fRichMatches->DeleteClones();
+        fTrdMatches->DeleteClones();
       } break;
-      case kSis100Hadron: break;
-      case kSis100Muon: {
+      case NicaCbmSetup::kSis100Hadron: fTrdMatches->DeleteClones(); break;
+      case NicaCbmSetup::kSis100Muon: {
+        fTrdMatches->DeleteClones();
         fMuchMatches->DeleteClones();
       } break;
+      case NicaCbmSetup::kSis100Mini: {
+      } break;
     }
   }
   fStsMatches->GetFromTree();
   fTofMatches->GetFromTree();
-  fTrdMatches->GetFromTree();
+  if (fTrdMatches) fTrdMatches->GetFromTree();
   if (fRichMatches) fRichMatches->GetFromTree();
   if (fMuchMatches) fMuchMatches->GetFromTree();
 }
@@ -55,7 +70,7 @@ void NicaCbmMatchedEventInterface::Register(Bool_t write) {
   NicaCbmEventInterface::Register(write);
   fStsMatches->Register(write);
   fTofMatches->Register(write);
-  fTrdMatches->Register(write);
+  if (fTrdMatches) fTrdMatches->Register(write);
   if (fMuchMatches) fMuchMatches->Register(write);
   if (fRichMatches) fRichMatches->Register(write);
 }
@@ -65,7 +80,8 @@ void NicaCbmMatchedEventInterface::CopyData(NicaEventInterface* s) {
   NicaCbmMatchedEventInterface* interface = (NicaCbmMatchedEventInterface*) s;
   fStsMatches->CopyFrom<CbmTrackMatchNew>(interface->GetStsMatches());
   fTofMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTofMatches());
-  fTrdMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTrdMatches());
+  if (fTrdMatches)
+    fTrdMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTrdMatches());
   if (fMuchMatches)
     fMuchMatches->CopyFrom<CbmTrackMatchNew>(interface->GetMuchMatches());
   if (fRichMatches)
@@ -84,7 +100,8 @@ void NicaCbmMatchedEventInterface::CopyAndCompress(NicaEventInterface* s,
   NicaCbmMatchedEventInterface* interface = (NicaCbmMatchedEventInterface*) s;
   fStsMatches->CopyFrom<CbmTrackMatchNew>(interface->GetStsMatches());
   fTofMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTofMatches());
-  fTrdMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTrdMatches());
+  if (fTrdMatches)
+    fTrdMatches->CopyFrom<CbmTrackMatchNew>(interface->GetTrdMatches());
   if (fMuchMatches)
     fMuchMatches->CopyFrom<CbmTrackMatchNew>(interface->GetMuchMatches());
   if (fRichMatches)
@@ -100,8 +117,9 @@ void NicaCbmMatchedEventInterface::FillTrackInterface(NicaTrackInterface* track,
     (CbmTrackMatchNew*) fStsMatches->UncheckedAt(glob->GetStsTrackIndex()));
   Track->SetLinkTof(
     (CbmTrackMatchNew*) fTofMatches->UncheckedAt(glob->GetTofHitIndex()));
-  Track->SetLinkTrd(
-    (CbmTrackMatchNew*) fTrdMatches->UncheckedAt(glob->GetTrdTrackIndex()));
+  if (fTrdMatches)
+    Track->SetLinkTrd(
+      (CbmTrackMatchNew*) fTrdMatches->UncheckedAt(glob->GetTrdTrackIndex()));
   if (fMuchMatches) {
     Track->SetLinkMuch(
       (CbmTrackMatchNew*) fMuchMatches->UncheckedAt(glob->GetMuchTrackIndex()));
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.h b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.h
index fe5ca04de4..71f0725949 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedEventInterface.h
@@ -26,7 +26,7 @@ protected:
   void Register(Bool_t write);
 
 public:
-  NicaCbmMatchedEventInterface(NicaCbmSetup mode = kSis100Hadron);
+  NicaCbmMatchedEventInterface(NicaCbmSetup mode = NicaCbmSetup::kSis100Hadron);
   TClonesArray* GetStsMatches() const { return fStsMatches->GetArray(); };
   TClonesArray* GetTofMatches() const { return fTofMatches->GetArray(); };
   TClonesArray* GetTrdMatches() const { return fTrdMatches->GetArray(); };
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrack.cxx
index fbd4d7d687..53f3773794 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrack.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrack.cxx
@@ -32,12 +32,11 @@ void NicaCbmMatchedTrack::Update(CbmGlobalTrack* track,
   if (GetStsTrackIndex() >= 0)
     match_sts =
       (CbmTrackMatchNew*) ev->GetStsMatches()->UncheckedAt(GetStsTrackIndex());
-  if (GetTofTrackIndex() >= 0)
+  if (GetTofHitIndex() >= 0)
     match_tof =
-      (CbmTrackMatchNew*) ev->GetTofMatches()->UncheckedAt(GetTofTrackIndex());
-  if (GetTrdTrackIndex() >= 0)
-    match_trd =
-      (CbmTrackMatchNew*) ev->GetTrdMatches()->UncheckedAt(GetTrdTrackIndex());
+      (CbmTrackMatchNew*) ev->GetTofMatches()->UncheckedAt(GetTofHitIndex());
+
+
   if (match_sts) {
     fStsMCIndex = match_sts->GetMatchedLink().GetIndex();
   } else {
@@ -48,14 +47,12 @@ void NicaCbmMatchedTrack::Update(CbmGlobalTrack* track,
   } else {
     fTofMCIndex = -1;
   }
-  if (match_trd) {
-    fTrdMCIndex = match_trd->GetMatchedLink().GetIndex();
-  } else {
-    fTrdMCIndex = -1;
-  }
   NicaCbmSetup mode = ev->GetMode();
   switch (mode) {
-    case kSis100Electron: {
+    case NicaCbmSetup::kSis100Electron: {
+      if (GetTrdTrackIndex() >= 0)
+        match_trd = (CbmTrackMatchNew*) ev->GetTrdMatches()->UncheckedAt(
+          GetTrdTrackIndex());
       if (GetRichRingIndex() >= 0)
         match_rich = (CbmTrackMatchNew*) ev->GetRichMatches()->UncheckedAt(
           GetRichRingIndex());
@@ -64,9 +61,26 @@ void NicaCbmMatchedTrack::Update(CbmGlobalTrack* track,
       } else {
         fRichMCIndex = -1;
       }
+      if (match_trd) {
+        fTrdMCIndex = match_trd->GetMatchedLink().GetIndex();
+      } else {
+        fTrdMCIndex = -1;
+      }
     } break;
-    case kSis100Hadron: break;
-    case kSis100Muon: {
+    case NicaCbmSetup::kSis100Hadron: {
+      if (GetTrdTrackIndex() >= 0)
+        match_trd = (CbmTrackMatchNew*) ev->GetTrdMatches()->UncheckedAt(
+          GetTrdTrackIndex());
+      if (match_trd) {
+        fTrdMCIndex = match_trd->GetMatchedLink().GetIndex();
+      } else {
+        fTrdMCIndex = -1;
+      }
+    } break;
+    case NicaCbmSetup::kSis100Muon: {
+      if (GetTrdTrackIndex() >= 0)
+        match_trd = (CbmTrackMatchNew*) ev->GetTrdMatches()->UncheckedAt(
+          GetTrdTrackIndex());
       if (GetMuchIndex() >= 0)
         match_much =
           (CbmTrackMatchNew*) ev->GetMuchMatches()->UncheckedAt(GetMuchIndex());
@@ -75,7 +89,13 @@ void NicaCbmMatchedTrack::Update(CbmGlobalTrack* track,
       } else {
         fMuchMCIndex = -1;
       }
+      if (match_trd) {
+        fTrdMCIndex = match_trd->GetMatchedLink().GetIndex();
+      } else {
+        fTrdMCIndex = -1;
+      }
     } break;
+    default: break;
   }
 }
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrackInterface.cxx
index ceaa13df43..50157ae826 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrackInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/matched/NicaCbmMatchedTrackInterface.cxx
@@ -15,6 +15,4 @@ NicaCbmMatchedTrackInterface::NicaCbmMatchedTrackInterface()
   , fRichLink(NULL)
   , fMuchLink(NULL) {}
 
-NicaCbmMatchedTrackInterface::~NicaCbmMatchedTrackInterface() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmMatchedTrackInterface::~NicaCbmMatchedTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCEvent.cxx
index 8bf33ddc00..0edf1814bc 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCEvent.cxx
@@ -8,6 +8,7 @@
  */
 #include "NicaCbmMCEvent.h"
 #include "CbmMCTrack.h"
+#include "FairLogger.h"
 #include "FairRootManager.h"
 #include "NicaCbmMCEventInterface.h"
 #include "NicaCbmMCTrack.h"
@@ -16,9 +17,7 @@ NicaCbmMCEvent::NicaCbmMCEvent() : NicaMCEvent("NicaCbmMCTrack") {
   fSource = new NicaCbmMCEventInterface();
 }
 
-NicaCbmMCEvent::~NicaCbmMCEvent() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmMCEvent::~NicaCbmMCEvent() {}
 
 void NicaCbmMCEvent::CreateSource() { fSource = new NicaCbmMCEventInterface(); }
 
@@ -37,8 +36,8 @@ void NicaCbmMCEvent::Update() {
     Double_t charge    = CalculateCharge(track->GetPdgCode());
     NicaCbmMCTrack* mc = (NicaCbmMCTrack*) fTracks->UncheckedAt(i);
     mc->SetEvent(this);
+    mc->GetLink()->ClearLinks();
     mc->Update(track, charge);
-    mc->GetLink()->Clear();
     mc->GetLink()->SetLink(0, i);
   }
 }
@@ -50,6 +49,10 @@ Bool_t NicaCbmMCEvent::ExistInTree() const {
   FairRootManager* manager = FairRootManager::Instance();
   Int_t header             = manager->CheckBranch("MCEventHeader.")
                  + manager->CheckBranch("EventHeader.");
+  LOG(debug) << "Branch MCEventHeader. "
+             << manager->CheckBranch("MCEventHeader.");
+  LOG(debug) << "Branch EventHeader. " << manager->CheckBranch("EventHeader.");
+  LOG(debug) << "Branch MCTrack " << manager->CheckBranch("MCTrack");
   Int_t tracks = manager->CheckBranch("MCTrack");
   if ((header + tracks) >= 2) { return kTRUE; }
   return kFALSE;
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrack.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrack.cxx
index 2063684218..4a28206293 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrack.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrack.cxx
@@ -8,8 +8,6 @@
  */
 #include "NicaCbmMCTrack.h"
 
-#include <FairLogger.h>
-
 NicaCbmMCTrack::NicaCbmMCTrack() : fNPoints(0) {}
 
 void NicaCbmMCTrack::Update(CbmMCTrack* mc, Double_t charge) {
@@ -17,9 +15,9 @@ void NicaCbmMCTrack::Update(CbmMCTrack* mc, Double_t charge) {
     mc->GetPx(), mc->GetPy(), mc->GetPz(), mc->GetEnergy());
   SetMotherIndex(mc->GetMotherId());
   if (GetMotherIndex() > -1) {
-    SetPrimary(kFALSE);
+    SetMotherIndex(mc->GetMotherId());
   } else {
-    SetPrimary(kTRUE);
+    SetPrimary();
   }
   SetStatus(0);
   SetCharge(charge);
@@ -104,9 +102,7 @@ void NicaCbmMCTrack::SetNPoints(ECbmModuleId iDet, Int_t nPoints) {
         nPoints = 1;
       fNPoints = (fNPoints & (~(1 << 25))) | (nPoints << 25);
     } break;
-    default: {
-      LOG(warn) << "Call NicaCbmMCTrack::SetNPoints with unsupported system";
-    }
+    default: break;
   }
 }
 
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrackInterface.cxx
index 5c33670b57..21ee0b0912 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrackInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/mc/NicaCbmMCTrackInterface.cxx
@@ -8,10 +8,6 @@
  */
 #include "NicaCbmMCTrackInterface.h"
 
-NicaCbmMCTrackInterface::NicaCbmMCTrackInterface() {
-  // TODO Auto-generated constructor stub
-}
+NicaCbmMCTrackInterface::NicaCbmMCTrackInterface() {}
 
-NicaCbmMCTrackInterface::~NicaCbmMCTrackInterface() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmMCTrackInterface::~NicaCbmMCTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorReadUnigen.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorReadUnigen.cxx
index 038ebca1c0..2823612afe 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorReadUnigen.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorReadUnigen.cxx
@@ -6,8 +6,14 @@
  *		E-mail: daniel.wielanek@gmail.com
  *		Warsaw University of Technology, Faculty of Physics
  */
+
 #include "NicaGeneratorReadUnigen.h"
 
+#include "NicaGeneratorParametersArray.h"
+#include "NicaGeneratorRead.h"
+
+#include <TString.h>
+
 
 Int_t NicaGeneratorReadUnigen::ReadEvent() {
   Int_t status = NicaGeneratorReadTree::ReadEvent();
@@ -93,6 +99,4 @@ void NicaGeneratorReadUnigen::CheckParameters() {
   fEStepT_Id  = CheckParameter("Step_t");
 }
 
-NicaGeneratorReadUnigen::~NicaGeneratorReadUnigen() {
-  // TODO Auto-generated destructor stub
-}
+NicaGeneratorReadUnigen::~NicaGeneratorReadUnigen() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorWriteUnigen.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorWriteUnigen.cxx
index 0b267f15ba..4ad6e1833e 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorWriteUnigen.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaGeneratorWriteUnigen.cxx
@@ -6,9 +6,16 @@
  *		E-mail: daniel.wielanek@gmail.com
  *		Warsaw University of Technology, Faculty of Physics
  */
+
 #include "NicaGeneratorWriteUnigen.h"
+
+#include "NicaGeneratorParametersArray.h"
 #include "NicaRunSim.h"
 
+#include <FairLogger.h>
+#include <FairTask.h>
+#include <TTree.h>
+
 NicaGeneratorWriteUnigen::NicaGeneratorWriteUnigen()
   : NicaGeneratorWrite(4, 3, 1, 0, 9, 9, 0, 0) {
   fEvent = new UEvent();
@@ -72,6 +79,4 @@ void NicaGeneratorWriteUnigen::AddParticle() {
                       fTrackParameters->GetDouble(9));
 }
 
-NicaGeneratorWriteUnigen::~NicaGeneratorWriteUnigen() {
-  // TODO Auto-generated destructor stub
-}
+NicaGeneratorWriteUnigen::~NicaGeneratorWriteUnigen() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenEvent.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenEvent.cxx
index 406c614437..02b57a1eb4 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenEvent.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenEvent.cxx
@@ -8,9 +8,19 @@
  */
 
 #include "NicaUnigenEvent.h"
-#include "FairRootManager.h"
+
+#include "NicaEventInterface.h"
+#include "NicaLink.h"
+#include "NicaMCTrack.h"
+#include "NicaTrack.h"
 #include "NicaUnigenEventInterface.h"
 
+#include <FairRootManager.h>
+#include <TClonesArray.h>
+#include <TDatabasePDG.h>
+#include <TLorentzVector.h>
+#include <TParticlePDG.h>
+
 NicaUnigenEvent::NicaUnigenEvent() : NicaMCEvent("NicaUnigenTrack") {}
 
 void NicaUnigenEvent::Update() {
@@ -25,16 +35,17 @@ void NicaUnigenEvent::Update() {
     Double_t charge        = 0;
     if (pdg_part) { charge = pdg_part->Charge() / 3.0; }
     NicaMCTrack* target_track = (NicaMCTrack*) fTracks->ConstructedAt(i);
-    if (particle->GetMate() < 0) {
-      target_track->SetPrimary(kTRUE);
-    } else {
-      target_track->SetPrimary(kFALSE);
-    }
+
     target_track->SetID(i);
     target_track->SetCharge(charge);
     target_track->SetPdg(particle->GetPdg());
-    target_track->GetLink()->Clear();
+    target_track->GetLink()->ClearLinks();
     target_track->GetLink()->SetLink(0, i);
+    if (particle->GetParent() < 0) {
+      target_track->SetPrimary();
+    } else {
+      target_track->SetMotherIndex(particle->GetParent());
+    }
     target_track->GetMomentum()->SetPxPyPzE(
       particle->Px(), particle->Py(), particle->Pz(), particle->E());
     target_track->GetFreezoutPosition()->SetXYZT(
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenSource.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenSource.cxx
index d6b9e5bf1b..f9597e4d76 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenSource.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenSource.cxx
@@ -13,7 +13,6 @@
 #include "UParticle.h"
 #include <TBranch.h>
 #include <fstream>
-#include <iostream>
 
 NicaUnigenSource::NicaUnigenSource()
   : fUnigenChain(NULL), fFileName("data.root"), fEvent(NULL) {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenTrackInterface.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenTrackInterface.cxx
index bf973df556..5782111fd3 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenTrackInterface.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/format/unigen/NicaUnigenTrackInterface.cxx
@@ -10,6 +10,4 @@
 
 NicaUnigenTrackInterface::NicaUnigenTrackInterface() {}
 
-NicaUnigenTrackInterface::~NicaUnigenTrackInterface() {
-  // TODO Auto-generated destructor stub
-}
+NicaUnigenTrackInterface::~NicaUnigenTrackInterface() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CMakeLists.txt b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CMakeLists.txt
index b6de60aede..c93514cbf4 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CMakeLists.txt
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CMakeLists.txt
@@ -35,7 +35,6 @@ Link_Directories(${LINK_DIRECTORIES})
 # List of source files
 set(SRCS
 CbmDetectorID.cxx
-CbmStsTrackMapProducer.cxx
 NicaCbmFirstTask.cxx
 CbmHelix.cxx
 )
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmDetectorID.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmDetectorID.h
index df817812ff..9a9a7b8283 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmDetectorID.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmDetectorID.h
@@ -22,7 +22,12 @@ namespace NicaCbmDetectorID {
   const UInt_t kMUCH = 1065761;
 };  // namespace NicaCbmDetectorID
 
-enum NicaCbmSetup { kSis100Hadron = 0, kSis100Electron = 1, kSis100Muon = 2 };
+enum class NicaCbmSetup {
+  kSis100Hadron   = 0,
+  kSis100Electron = 1,
+  kSis100Muon     = 2,
+  kSis100Mini     = 3
+};
 
 
 #endif /* CBMROOT_NICA_CBM_HELPERS_CBMDETECTORID_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.cxx
index 5479e8b7ec..568b86192f 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.cxx
@@ -42,40 +42,61 @@ TVector3 CbmHelix::Eval(Double_t z, TVector3& mom) {
 }
 
 void CbmHelix::SetParameters(const FairTrackParam* param) {
-  fT[0] = param->GetX();
-  fT[1] = param->GetY();
-  fT[2] = param->GetTx();
-  fT[3] = param->GetTy();
-  fT[4] = param->GetQp();
-  fT[5] = param->GetZ();
-  for (Int_t i = 0, iCov = 0; i < 5; i++)
-    for (Int_t j = 0; j <= i; j++, iCov++)
-      fC[iCov] = param->GetCovariance(i, j);
+  fTb[0] = param->GetX();
+  fTb[1] = param->GetY();
+  fTb[2] = param->GetTx();
+  fTb[3] = param->GetTy();
+  fTb[4] = param->GetQp();
+  fTb[5] = param->GetZ();
+  /*
+    for (Int_t i=0,iCov=0; i<5; i++)
+    	for (Int_t j=0; j<=i; j++,iCov++)
+    		fC[iCov] = param->GetCovariance(i,j);
+    		*/
 }
 
-CbmHelix::~CbmHelix() {
-  // TODO Auto-generated destructor stub
+void CbmHelix::Build(const TVector3& pos,
+                     const TVector3& mom,
+                     Double_t charge) {
+  fTb[0]     = pos.X();
+  fTb[1]     = pos.Y();
+  Double_t p = mom.Mag();
+  fTb[2]     = mom.Px() / mom.Pz();
+  fTb[3]     = mom.Py() / mom.Pz();
+  fTb[4]     = charge / p;
+  fTb[5]     = pos.Z();
 }
 
+CbmHelix::~CbmHelix() {}
+
 CbmHelix::CbmHelix(const CbmHelix& other) : TObject() {
-  for (int i = 0; i < 6; i++)
-    fT[i] = other.fT[i];
-  for (int i = 0; i < 15; i++)
-    fC[i] = other.fC[i];
+  for (int i = 0; i < 6; i++) {
+    fT[i]  = other.fT[i];
+    fTb[i] = other.fTb[i];
+  }
+  /*
+	for(int i=0;i<15;i++){
+		fC[i] = other.fC[i];
+	}*/
 }
 
 CbmHelix& CbmHelix::operator=(const CbmHelix& other) {
   if (&other == this) return *this;
-  for (int i = 0; i < 6; i++)
-    fT[i] = other.fT[i];
-  for (int i = 0; i < 15; i++)
-    fC[i] = other.fC[i];
+  for (int i = 0; i < 6; i++) {
+    fT[i]  = other.fT[i];
+    fTb[i] = other.fTb[i];
+  }
+  //for(int i=0;i<15;i++)
+  //	fC[i] = other.fC[i];
   return *this;
 }
 
 Int_t CbmHelix::Propagate(Double_t z) {
   Int_t fMethod = 1;
   Bool_t err    = 0;
+  for (int i = 0; i < 6; i++) {
+    fT[i] = fTb[i];
+  }
   if (fabs(fT[5] - z) < 1.e-5) return 0;
 
   if (!fgField || (300 <= z && 300 <= fT[5])) {
@@ -121,22 +142,23 @@ void CbmHelix::ExtrapolateLine(Double_t z_out) {
   fT[0] += dz * fT[2];
   fT[1] += dz * fT[3];
   fT[5] = z_out;
+  /*
+	const Double_t dzC_in8 = dz * fC[8];
 
-  const Double_t dzC_in8 = dz * fC[8];
-
-  fC[4] = fC[4] + dzC_in8;
-  fC[1] = fC[1] + dz * (fC[4] + fC[6]);
+	fC[4] = fC[4] + dzC_in8;
+	fC[1] = fC[1] + dz * (fC[4] + fC[6]);
 
-  const Double_t C_in3 = fC[3];
+	const Double_t C_in3 = fC[3];
 
-  fC[3] = C_in3 + dz * fC[5];
-  fC[0] = fC[0] + dz * (fC[3] + C_in3);
+	fC[3] = C_in3 + dz * fC[5];
+	fC[0] = fC[0] + dz * (fC[3] + C_in3);
 
-  const Double_t C_in7 = fC[7];
+	const Double_t C_in7 = fC[7];
 
-  fC[7] = C_in7 + dz * fC[9];
-  fC[2] = fC[2] + dz * (fC[7] + C_in7);
-  fC[6] = fC[6] + dzC_in8;
+	fC[7] = C_in7 + dz * fC[9];
+	fC[2] = fC[2] + dz * (fC[7] + C_in7);
+	fC[6] = fC[6] + dzC_in8;
+*/
 }
 
 Int_t CbmHelix::ExtrapolateRK4(Double_t z_out) {
@@ -367,14 +389,15 @@ Int_t CbmHelix::ExtrapolateALight(Double_t z_out) {
     bool ok = 1;
     for (int i = 0; i < 6; i++)
       ok = ok && !TMath::IsNaN(fT[i]) && (fT[i] < 1.e5);
-    for (int i = 0; i < 15; i++)
-      ok = ok && !TMath::IsNaN(fC[i]);
-    if (!ok) {
-      for (int i = 0; i < 15; i++)
-        fC[i] = 0;
-      fC[0] = fC[2] = fC[5] = fC[9] = fC[14] = 100.;
-      return 1;
-    }
+    /*	for (int i = 0; i < 15; i++)
+			ok = ok && !TMath::IsNaN(fC[i]);
+		if (!ok) {
+			for (int i = 0; i < 15; i++)
+				fC[i] = 0;
+			fC[0] = fC[2] = fC[5] = fC[9] = fC[14] = 100.;
+			return 1;
+		}
+		*/
   }
   const Double_t c_light = 0.000299792458;
 
@@ -607,23 +630,21 @@ Int_t CbmHelix::ExtrapolateALight(Double_t z_out) {
   return 0;
 }
 
-void CbmHelix::multQtSQ(const Int_t N, Double_t Q[]) {
-  Double_t A[N * N];
-
-  for (Int_t i = 0, n = 0; i < N; i++) {
-    for (Int_t j = 0; j < N; j++, ++n) {
-      A[n] = 0;
-      for (Int_t k = 0; k < N; ++k)
-        A[n] += fC[indexS(i, k)] * Q[k * N + j];
-    }
-  }
-
-  for (Int_t i = 0; i < N; i++) {
-    for (Int_t j = 0; j <= i; j++) {
-      Int_t n = indexS(i, j);
-      fC[n]   = 0;
-      for (Int_t k = 0; k < N; k++)
-        fC[n] += Q[k * N + i] * A[k * N + j];
-    }
-  }
+void CbmHelix::multQtSQ(const Int_t /*N*/, Double_t /*Q*/[]) {
+  /*Double_t A[N * N];
+
+	  for( Int_t i=0, n=0; i<N; i++ ){
+	    for( Int_t j=0; j<N; j++, ++n ){
+	      A[n] = 0 ;
+	      for( Int_t k=0; k<N; ++k ) A[n]+= fC[indexS(i,k)] * Q[ k*N+j];
+	    }
+	  }
+
+	  for( Int_t i=0; i<N; i++ ){
+	    for( Int_t j=0; j<=i; j++ ){
+	      Int_t n = indexS(i,j);
+	      fC[n] = 0 ;
+	      for( Int_t k=0; k<N; k++ )  fC[n] += Q[ k*N+i ] * A[ k*N+j ];
+	    }
+	  }*/
 }
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.h
index f489c88e48..7319d55174 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmHelix.h
@@ -22,7 +22,7 @@
 
 class CbmHelix : public TObject {
 protected:
-  Double_t fT[6], fC[15];
+  Double_t fT[6], fTb[15];
   Double_t Qp() const { return fT[4]; };
   void SetQp(Double_t qp) { fT[4] = qp; }
   Double_t X() const { return fT[0]; }
@@ -49,6 +49,7 @@ public:
   void Build(const FairTrackParam* params) { SetParameters(params); }
   void Build(const CbmGlobalTrack* tr);
   void Build(const CbmStsTrack* tr, Bool_t first);
+  void Build(const TVector3& pos, const TVector3& mom, Double_t charge);
   void PrintInfo() const {
     std::cout << Form("T={%4.2f\t%4.2f\t%4.2f\t%4.2f\t%4.2f\t%4.2f}",
                       fT[0],
@@ -60,7 +61,6 @@ public:
               << std::endl;
   }
   Double_t* GetTrack() { return fT; }
-  Double_t* GetCovMatrix() { return fC; }
   TVector3 Eval(Double_t z);
   TVector3 Eval(Double_t z, TVector3& mom);
   virtual ~CbmHelix();
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.cxx
new file mode 100644
index 0000000000..f6c0f5dd06
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.cxx
@@ -0,0 +1,190 @@
+/*
+ * CbmNicaCompression.cxx
+ *
+ *  Created on: 7 lut 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#include "CbmNicaCompression.h"
+#include "CbmMCTrack.h"
+#include "CbmTrackMatchNew.h"
+#include "CbmVertex.h"
+#include "FairRootManager.h"
+
+CbmNicaCompression::CbmNicaCompression()
+  : fAllDep(kFALSE), fStsLinks(nullptr), fTofLinks(nullptr) {
+  fStsMatches = new NicaTrackClones("CbmTrackMatchNew", "StsTrackMatch", "STS");
+  fTofMatches = new NicaTrackClones("CbmTrackMatchNew", "TofHitMatch", "TOF");
+  fMCTracks   = new NicaTrackClones("CbmMCTrack", "MCTrack", "MC");
+}
+
+InitStatus CbmNicaCompression::Init() {
+  FairRootManager* mngr = FairRootManager::Instance();
+  fTofMatches->GetFromTree();
+  fStsMatches->GetFromTree();
+  fMCTracks->GetFromTree();
+  if (fTofMatches->GetArray() == nullptr) return kFATAL;
+  if (fStsMatches->GetArray() == nullptr) return kFATAL;
+
+  if (fMCTracks->GetArray() == nullptr) return kFATAL;
+
+  mngr->Register("MCTrack", "MC", fMCTracks->GetArray(), kTRUE);
+  fStsLinks = new TClonesArray("CbmTrackMatchNew");
+  fTofLinks = new TClonesArray("CbmTrackMatchNew");
+  mngr->Register("StsTrackMatch", "STS", fStsLinks, kTRUE);
+  mngr->Register("TofHitMatch", "TOF", fTofLinks, kTRUE);
+  mngr->Register("PrimaryVertex.",
+                 "PV",
+                 (CbmVertex*) mngr->GetObject("PrimaryVertex."),
+                 kTRUE);
+  TClonesArray* sts_tracks  = (TClonesArray*) mngr->GetObject("StsTrack");
+  TClonesArray* tof_tracks  = (TClonesArray*) mngr->GetObject("TofHit");
+  TClonesArray* glob_tracks = (TClonesArray*) mngr->GetObject("GlobalTrack");
+
+  mngr->Register("StsTrack", "STS", sts_tracks, kTRUE);
+  mngr->Register("TofHit", "TOF", tof_tracks, kTRUE);
+  mngr->Register("GlobalTrack", "STS", glob_tracks, kTRUE);
+
+  return kSUCCESS;
+}
+
+void CbmNicaCompression::Exec(Option_t* opt) {
+  fMapUse.MakeBigger(fMCTracks->GetEntriesFast());
+  fMapIndex.MakeBigger(fMCTracks->GetEntriesFast());
+  fStsLinks->Clear();
+  fTofLinks->Clear();
+  fStsLinks->ExpandCreateFast(fStsMatches->GetEntriesFast());
+  fTofLinks->ExpandCreateFast(fTofMatches->GetEntriesFast());
+  for (int i = 0; i < fMCTracks->GetEntriesFast(); i++) {
+    fMapUse[i]   = 0;
+    fMapIndex[i] = -2;
+  }
+  if (fAllDep) {
+    WithDep();
+  } else {
+    NoDep();
+  }
+}
+
+void CbmNicaCompression::NoDep() {
+  for (int i = 0; i < fStsMatches->GetEntriesFast(); i++) {
+    CbmTrackMatchNew* match = (CbmTrackMatchNew*) fStsMatches->UncheckedAt(i);
+    int index               = match->GetMatchedLink().GetIndex();
+    if (index >= 0) {  // needed?
+      fMapUse[index] = 1;
+    }
+  }
+  for (int i = 0; i < fTofMatches->GetEntriesFast(); i++) {
+    CbmTrackMatchNew* match = (CbmTrackMatchNew*) fTofMatches->UncheckedAt(i);
+    int index               = match->GetMatchedLink().GetIndex();
+    if (index >= 0) { fMapUse[index] = 1; }
+  }
+  int count = 0;
+  for (int i = 0; i < fMCTracks->GetEntriesFast(); i++) {
+    if (fMapUse[i] == 1) {
+      fMapIndex[i] = count;
+      ++count;
+    } else {
+      fMCTracks->GetArray()->RemoveAt(i);
+    }
+  }
+  fMCTracks->GetArray()->Compress();
+  for (int i = 0; i < fMCTracks->GetEntriesFast(); i++) {
+    CbmMCTrack* mc = (CbmMCTrack*) fMCTracks->UncheckedAt(i);
+    int mom        = mc->GetMotherId();
+    if (mom >= 0) { mc->SetMotherId(fMapIndex[mom]); }
+  }
+
+  //ok let's fix matches
+  for (int iTrack = 0; iTrack < fStsMatches->GetEntriesFast(); iTrack++) {
+    CbmTrackMatchNew* match =
+      (CbmTrackMatchNew*) fStsMatches->UncheckedAt(iTrack);
+    CbmLink link = match->GetMatchedLink();
+    CbmTrackMatchNew* match2 =
+      (CbmTrackMatchNew*) fStsLinks->UncheckedAt(iTrack);
+    match2->ClearLinks();
+    int index = link.GetIndex();
+    if (index >= 0) {
+      link.SetIndex(fMapIndex[index]);
+      link.SetWeight(1);
+    }
+    match2->AddLink(link);
+  }
+  for (int iTrack = 0; iTrack < fTofMatches->GetEntriesFast(); iTrack++) {
+    CbmTrackMatchNew* match =
+      (CbmTrackMatchNew*) fTofMatches->UncheckedAt(iTrack);
+    CbmTrackMatchNew* match2 =
+      (CbmTrackMatchNew*) fTofLinks->UncheckedAt(iTrack);
+    CbmLink link = match->GetMatchedLink();
+    match2->ClearLinks();
+    int index = link.GetIndex();
+    if (index >= 0) {
+      link.SetIndex(fMapIndex[index]);
+      link.SetWeight(1);
+    }
+    match2->AddLink(link);
+  }
+}
+
+void CbmNicaCompression::WithDep() {
+  for (int i = 0; i < fStsMatches->GetEntriesFast(); i++) {
+    CbmTrackMatchNew* match = (CbmTrackMatchNew*) fStsMatches->UncheckedAt(i);
+    for (int j = 0; j < match->GetNofLinks(); j++) {
+      int index = match->GetLink(j).GetIndex();
+      if (index >= 0) { fMapUse[index] = 1; }
+    }
+  }
+  for (int i = 0; i < fTofMatches->GetEntriesFast(); i++) {
+    CbmTrackMatchNew* match = (CbmTrackMatchNew*) fTofMatches->UncheckedAt(i);
+    for (int j = 0; j < match->GetNofLinks(); j++) {
+      int index = match->GetLink(j).GetIndex();
+      if (index >= 0) { fMapUse[index] = 1; }
+    }
+  }
+  int count = 0;
+  for (int i = 0; i < fMCTracks->GetEntriesFast(); i++) {
+    if (fMapUse[i] == 1) {
+      fMapIndex[i] = count;
+      ++count;
+    } else {
+      fMCTracks->GetArray()->RemoveAt(i);
+    }
+  }
+  fMCTracks->GetArray()->Compress();
+  for (int i = 0; i < fMCTracks->GetEntriesFast(); i++) {
+    CbmMCTrack* mc = (CbmMCTrack*) fMCTracks->UncheckedAt(i);
+    int mom        = mc->GetMotherId();
+    if (mom >= 0) { mc->SetMotherId(fMapIndex[mom]); }
+  }
+
+  //ok let's fix matches
+  for (int iTrack = 0; iTrack < fStsMatches->GetEntriesFast(); iTrack++) {
+    CbmTrackMatchNew* match =
+      (CbmTrackMatchNew*) fStsMatches->UncheckedAt(iTrack);
+    CbmTrackMatchNew* match2 =
+      (CbmTrackMatchNew*) fStsLinks->UncheckedAt(iTrack);
+    match2->ClearLinks();
+    for (int iLink = 0; iLink < match->GetNofLinks(); iLink++) {
+      CbmLink link = match->GetLink(iLink);
+      int index    = link.GetIndex();
+      if (index >= 0) { link.SetIndex(fMapIndex[index]); }
+      match2->AddLink(link);
+    }
+  }
+  for (int iTrack = 0; iTrack < fTofMatches->GetEntriesFast(); iTrack++) {
+    CbmTrackMatchNew* match =
+      (CbmTrackMatchNew*) fTofMatches->UncheckedAt(iTrack);
+    CbmTrackMatchNew* match2 =
+      (CbmTrackMatchNew*) fTofLinks->UncheckedAt(iTrack);
+    match2->ClearLinks();
+    for (int iLink = 0; iLink < match->GetNofLinks(); iLink++) {
+      CbmLink link = match->GetLink(iLink);
+      int index    = link.GetIndex();
+      if (index >= 0) { link.SetIndex(fMapIndex[index]); }
+      match2->AddLink(link);
+    }
+  }
+}
+
+CbmNicaCompression::~CbmNicaCompression() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.h
new file mode 100644
index 0000000000..df8ad1df67
--- /dev/null
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmNicaCompression.h
@@ -0,0 +1,38 @@
+/*
+ * CbmNicaCompression.h
+ *
+ *  Created on: 7 lut 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+#ifndef CBMNICACOMPRESSION_H_
+#define CBMNICACOMPRESSION_H_
+
+#include "FairTask.h"
+#include "NicaArray.h"
+#include "NicaTrackClones.h"
+#include "TClonesArray.h"
+
+class CbmNicaCompression : public FairTask {
+  NicaTrackClones* fStsMatches;
+  NicaTrackClones* fTofMatches;
+  NicaTrackClones* fMCTracks;
+  TClonesArray* fStsLinks;
+  TClonesArray* fTofLinks;
+  NicaArray_1<Int_t> fMapUse;
+  NicaArray_1<Int_t> fMapIndex;
+  Bool_t fAllDep;
+  void NoDep();
+  void WithDep();
+
+public:
+  CbmNicaCompression();
+  InitStatus Init();
+  void AllDependencies() { fAllDep = kTRUE; };
+  void Exec(Option_t* opt);
+  virtual ~CbmNicaCompression();
+  ClassDef(CbmNicaCompression, 1)
+};
+
+#endif /* CBMNICACOMPRESSION_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.cxx
deleted file mode 100644
index 146b86bf92..0000000000
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.cxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * CbmStsTrackMapProducer.cxx
- *
- *  Created on: 7 sie 2019
- *      Author: Daniel Wielanek
- *		E-mail: daniel.wielanek@gmail.com
- *		Warsaw University of Technology, Faculty of Physics
- */
-#include "CbmStsTrackMapProducer.h"
-#include "CbmStsHit.h"
-#include "CbmStsTrack.h"
-#include <bitset>
-#include <iostream>
-CbmStsTrackMapProducer::CbmStsTrackMapProducer() {
-  fStsHits   = new NicaTrackClones("CbmStsHit", "StsHit", "STS");
-  fStsTracks = new NicaTrackClones("CbmStsTrack", "StsTrack", "STS");
-}
-
-InitStatus CbmStsTrackMapProducer::Init() {
-  fStsHits->GetFromTree();
-  fStsTracks->GetFromTree();
-  return kSUCCESS;
-}
-
-void CbmStsTrackMapProducer::Exec(Option_t* /*opt*/) {
-  for (int i = 0; i < fStsTracks->GetEntriesFast(); i++) {
-    CbmStsTrack* track = (CbmStsTrack*) fStsTracks->UncheckedAt(i);
-    Int_t hits         = track->GetNofStsHits();
-    UShort_t bitmap    = 0;
-    Int_t stations[8]  = {0};
-    for (int j = 0; j < hits; j++) {
-      CbmStsHit* hit =
-        (CbmStsHit*) fStsHits->UncheckedAt(track->GetHitIndex(j));
-      Int_t station_no = GetStation(hit);
-      stations[station_no]++;
-    }
-    for (int j = 0; j < 8; j++) {
-      switch (stations[j]) {
-        case 0:  //do nothing
-          break;
-        case 1:  //one hit per station
-          SETBIT(bitmap, j * 2);
-          break;
-        default:  //at least two hits in station
-          std::cout << "MULTIPLE HIT ! " << std::endl;
-          SETBIT(bitmap, j * 2);
-          SETBIT(bitmap, j * 2 + 1);
-          break;
-      }
-    }
-    //	track->SetStationMap(bitmap);
-    std::cout << std::bitset<16>(bitmap) << std::endl;
-  }
-}
-
-Int_t CbmStsTrackMapProducer::GetStation(CbmStsHit* hit) const {
-  Int_t z = hit->GetZ();
-  if (z < 35) return 0;
-  if (z < 45) return 1;
-  if (z < 55) return 2;
-  if (z < 65) return 3;
-  if (z < 75) return 4;
-  if (z < 85) return 5;
-  if (z < 95) return 6;
-  if (z < 105) return 7;
-  if (z < 115) return 8;
-  z = hit->GetZ() - 25;
-
-
-  return (z - z % 10) / 10;
-}
-
-CbmStsTrackMapProducer::~CbmStsTrackMapProducer() {
-  // TODO Auto-generated destructor stub
-}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.h
deleted file mode 100644
index de262d0c70..0000000000
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/CbmStsTrackMapProducer.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * CbmStsTrackMapProducer.h
- *
- *  Created on: 7 sie 2019
- *      Author: Daniel Wielanek
- *		E-mail: daniel.wielanek@gmail.com
- *		Warsaw University of Technology, Faculty of Physics
- */
-#ifndef CBMSTSTRACKMAPPRODUCER_H_
-#define CBMSTSTRACKMAPPRODUCER_H_
-
-#include "CbmStsHit.h"
-#include "FairTask.h"
-#include "NicaTrackClones.h"
-
-class CbmStsTrackMapProducer : public FairTask {
-  NicaTrackClones* fStsHits;
-  NicaTrackClones* fStsTracks;
-  Int_t GetStation(CbmStsHit* hit) const;
-
-public:
-  CbmStsTrackMapProducer();
-  InitStatus Init();
-  void Exec(Option_t* /*opt*/);
-  virtual ~CbmStsTrackMapProducer();
-  ClassDef(CbmStsTrackMapProducer, 1)
-};
-
-#endif /* CBMSTSTRACKMAPPRODUCER_H_ */
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.cxx b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.cxx
index b69d40353f..abccc27bcd 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.cxx
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.cxx
@@ -9,15 +9,16 @@
 #include "NicaCbmFirstTask.h"
 #include "FairRunAna.h"
 
-NicaCbmFirstTask::NicaCbmFirstTask() {
-  // TODO Auto-generated constructor stub
-}
+NicaCbmFirstTask::NicaCbmFirstTask() : fMagField(nullptr) {}
 
 InitStatus NicaCbmFirstTask::Init() {
-  CbmHelix::SetField(FairRunAna::Instance()->GetField());
+  if (fMagField != nullptr) {
+    CbmHelix::SetField(fMagField);
+    std::cout << "SET FIELD " << fMagField << std::endl;
+  } else {
+    CbmHelix::SetField(FairRunAna::Instance()->GetField());
+  }
   return kSUCCESS;
 }
 
-NicaCbmFirstTask::~NicaCbmFirstTask() {
-  // TODO Auto-generated destructor stub
-}
+NicaCbmFirstTask::~NicaCbmFirstTask() {}
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.h
index 738b3b39dd..8e1fa5ed14 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmFirstTask.h
@@ -9,12 +9,15 @@
 #ifndef NICACBMFIRSTTASK_H_
 #define NICACBMFIRSTTASK_H_
 #include "CbmHelix.h"
+#include "FairField.h"
 #include "FairTask.h"
 
-
 class NicaCbmFirstTask : public FairTask {
+  FairField* fMagField;
+
 public:
   NicaCbmFirstTask();
+  void SetMagField(FairField* f) { fMagField = f; };
   InitStatus Init();
   void Exec(Option_t* /*opt*/) {};
   virtual ~NicaCbmFirstTask();
diff --git a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmHelpersLinkDef.h b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmHelpersLinkDef.h
index 9dad96da09..adcbf61ac4 100644
--- a/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmHelpersLinkDef.h
+++ b/analysis/PWGC2F/femtoscopy/nicafemto/helpers/NicaCbmHelpersLinkDef.h
@@ -11,7 +11,7 @@
 #pragma link off all functions;
 
 #pragma link C++ namespace NicaCbmDetectorID;
-#pragma link C++ class CbmStsTrackMapProducer + ;
 #pragma link C++ class NicaCbmFirstTask + ;
 #pragma link C++ class CbmHelix + ;
 #pragma link C++ enum NicaCbmSetup;
+#pragma link C++ class CbmNicaCompression + ;
diff --git a/analysis/common/analysis_tree_converter/CMakeLists.txt b/analysis/common/analysis_tree_converter/CMakeLists.txt
index 6804d422b5..9ad0854ea2 100644
--- a/analysis/common/analysis_tree_converter/CMakeLists.txt
+++ b/analysis/common/analysis_tree_converter/CMakeLists.txt
@@ -10,6 +10,7 @@ set(SRCS
         CbmPsdModulesConverter.cxx
         CbmTofHitsConverter.cxx
     )
+    
 
 Set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}
diff --git a/external/InstallNicaFemto.cmake b/external/InstallNicaFemto.cmake
index 69e39db7c9..d80028c235 100644
--- a/external/InstallNicaFemto.cmake
+++ b/external/InstallNicaFemto.cmake
@@ -1,4 +1,4 @@
-set(NICAFEMTO_VERSION 7c5c9286cc18da15b80baaaa972010f0ee134ebe)
+set(NICAFEMTO_VERSION 7b5fe1ef06433c55ee9f11efef05872c177f273f)
 
 set(NICAFEMTO_SRC_URL "https://git.jinr.ru/nica/nicafemto.git")
 set(NICAFEMTO_DESTDIR "${CMAKE_BINARY_DIR}/external/NICAFEMTO-prefix")
diff --git a/macro/analysis/cbmfemto/hbt_anatree.C b/macro/analysis/cbmfemto/hbt_anatree.C
new file mode 100644
index 0000000000..b2bda782a9
--- /dev/null
+++ b/macro/analysis/cbmfemto/hbt_anatree.C
@@ -0,0 +1,173 @@
+/*
+ * hbt_anatree.C
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+/**
+ * example macro for pi-pi analysis
+ */
+#ifndef __CLING__
+#include <FairLogger.h>
+#include <FairRunAna.h>
+#include <RtypesCore.h>
+#include <TString.h>
+#include <iostream>
+
+#include "CbmAnaTreeSource.h"
+#include "CbmBasicFemtoPairCut.h"
+#include "CbmBasicTrackCuts.h"
+#include "CbmDeltaPhiDeltaThetaCut.h"
+#include "CbmDetectorID.h"
+#include "CbmFieldMap.h"
+#include "CbmHasTofTrackCut.h"
+#include "CbmHbtFullEvent.h"
+#include "CbmStsExitSepCut.h"
+#include "CbmStsTrackHitsCut.h"
+#include "CbmTofTrackCuts.h"
+#include "FairFileSource.h"
+#include "FairParRootFileIo.h"
+#include "NicaCbmATFullEvent.h"
+#include "NicaCbmFirstTask.h"
+#include "NicaCbmGlobalMCEvent.h"
+#include "NicaCbmMCEvent.h"
+#include "NicaCut.h"
+#include "NicaCutMonitorX.h"
+#include "NicaCutMonitorXY.h"
+#include "NicaCutMonitorXYZ.h"
+#include "NicaEventComplexCut.h"
+#include "NicaEventImpactParameterCut.h"
+#include "NicaEventPhiCut.h"
+#include "NicaEventVertexCut.h"
+#include "NicaEventVirtualCut.h"
+#include "NicaFemto1DCF.h"
+#include "NicaFemtoBasicAna.h"
+#include "NicaFemtoCorrFuncKt.h"
+#include "NicaFemtoPairKinematics.h"
+#include "NicaFemtoSourceModelGausMt.h"
+#include "NicaFemtoWeightGenerator.h"
+#include "NicaFemtoWeightGeneratorSupressed.h"
+#include "NicaPdgBinPairCut.h"
+#include "NicaStd.h"
+#include "NicaTrackAna.h"
+#include "NicaTrackBasicMCCut.h"
+#include "NicaTrackBoostedMomentaCuts.h"
+#include "NicaTrackChargeCut.h"
+#include "NicaTrackDCACut.h"
+#include "NicaTrackDeltaMomCut.h"
+#include "NicaTrackEtaCut.h"
+#include "NicaTrackOnlyPrimariesCut.h"
+#include "NicaTrackPCut.h"
+#include "NicaTrackPdgCut.h"
+#include "NicaTrackPtCut.h"
+#include "NicaTrackPzCut.h"
+#include "NicaTwoTrackFemtoQinvCut.h"
+#include "TFile.h"
+#include <TStopwatch.h>
+#include <TTimer.h>
+
+#include "data/CbmDefs.h"
+using namespace std;
+#endif
+
+/**
+ * macro for calcution of final CF
+ */
+
+#define KRONOS
+
+void SetEventCut(NicaEventAna* task) {
+  NicaEventVertexCut vtx;
+  task->AddCut(vtx, "im");
+  NicaCutMonitorXY vtxM(
+    vtx.CutName("im"), vtx.Z(), vtx.CutName("im"), vtx.Rt());
+  vtxM.SetXaxis(100, 0, 1);
+  vtxM.SetYaxis(200, 0, 2);
+  task->AddCutMonitor(vtxM);
+  NicaEventImpactParameterCut b;
+  NicaEventPhiCut phi;
+  NicaCutMonitorX phiM(phi.CutName("im"), 0);
+  phiM.SetXaxis(100, -TMath::TwoPi(), TMath::TwoPi());
+  NicaCutMonitorX bM(b.CutName("im"), 0);
+  bM.SetXaxis(100, 0, 15);
+  task->AddCut(b, "im");
+  task->AddCut(phi, "im");
+  task->AddCutMonitor(phiM);
+  task->AddCutMonitor(bM);
+}
+void SetTrackCuts(NicaEventAna* task, Bool_t mc = kTRUE) {
+  CbmBasicTrackCuts basic;
+  basic.SetCharge(-1);
+  basic.SetM2(-0.1, 0.1);
+  basic.SetPt(0.1, 10);
+  basic.SetOptionForAllCuts("re");
+  basic.CreateBasicMonitors();  // must be called after SetOptionForAllCuts
+  task->AddCutsAndMonitors(basic);
+  NicaTrackPdgCut pid;
+  pid.SetMinAndMax(-211);
+  if (mc) { task->AddCut(pid, "im"); }
+}
+
+void SetPairCuts(NicaTwoTrackAna* task) {
+  CbmBasicFemtoPairCut combinedCut;
+  combinedCut.SetR(25);
+  combinedCut.SetDeltaPhiStarCut(-0.01, 0.01);
+  combinedCut.SetDeltaEtaStarCut(-0.01, 0.01);
+  combinedCut.SetDeltaEtaStarAxis(100, -0.1, 0.1);
+  combinedCut.SetDeltaPhiStarAxis(100, -0.1, 0.1);
+  combinedCut.SetOptionForAllCuts("re");
+  combinedCut.CreateBasicMonitors();
+  task->AddCutsAndMonitors(combinedCut);
+}
+
+void hbt_anatree(
+  TString inFile  = "/media/daniel/WD/anatree/1.analysistree.root",
+  TString outFile = "test2.root") {
+  FairRunAna* ana = new FairRunAna();
+  //  inFile = "/home/daniel/temp/00001.mini.root";
+  FairSource* source = new CbmAnaTreeSource(inFile);
+  ana->SetSource(source);
+  ana->SetOutputFile(outFile);
+
+  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
+  FairLogger* log     = FairLogger::GetLogger();
+  log->SetColoredLog(kTRUE);
+  log->SetLogVerbosityLevel("high");
+
+  NicaFemtoBasicAna* task = new NicaFemtoBasicAna();
+  task->SetCorrFctn(NicaFemtoCorrFuncKt(
+    NicaFemto1DCF("cf", 100, 0, 1, ENicaFemtoKinematics::kLCMS), {0, 10}));
+  task->SetOption(NicaTwoTrackAna::BackgroundOptionMixed());
+  task->SetWeight(NicaFemtoWeightGenerator());
+  task->SetPdg(211);
+  task->SetMixSize(5);
+#ifdef SPEEDUP
+  /**
+   * speed up analysis by using compression and special HBT format
+   * the sts exit distance and phi* are calculated once per track
+   */
+  task->SetFormat(new NicaCbmATFullEvent(), ENicaFormatDepth::kNonBuffered);
+  task->SetFormat(new CbmHbtFullEvent(), ENicaFormatDepth::kBuffered);
+  task->SetFormatOption(NicaEventAna::EFormatOption::kCompress);
+#else
+  task->SetFormat(new NicaCbmATFullEvent());
+#endif
+  SetEventCut(task);
+  SetTrackCuts(task);
+  SetPairCuts(task);
+  NicaCbmFirstTask* first_task = new NicaCbmFirstTask();
+  CbmFieldMap* field           = new CbmFieldMap("field_v18a.root");
+  first_task->SetMagField(field);
+  ana->AddTask(first_task);
+  ana->AddTask(task);
+
+  TStopwatch timer;
+  timer.Start();
+
+  ana->Init();
+  ana->Run(0, 1000);
+  Double_t rtime = timer.RealTime(), ctime = timer.CpuTime();
+  printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime);
+}
diff --git a/macro/analysis/cbmfemto/show_hbt.C b/macro/analysis/cbmfemto/show_hbt.C
new file mode 100644
index 0000000000..a6d927ade0
--- /dev/null
+++ b/macro/analysis/cbmfemto/show_hbt.C
@@ -0,0 +1,36 @@
+/*
+ * show_hbt.C
+ *
+ *  Created on: 21 paź 2020
+ *      Author: Daniel Wielanek
+ *		E-mail: daniel.wielanek@gmail.com
+ *		Warsaw University of Technology, Faculty of Physics
+ */
+
+#ifndef __CLING__
+
+#include "NicaAnaFile.h"
+#include "NicaFemto1DCF.h"
+#include "NicaFemtoCorrFuncKt.h"
+#include <TCanvas.h>
+#include <TH1.h>
+#endif
+
+
+void show_hbt() {
+  NicaAnaFile* f             = new NicaAnaFile("test2.root");
+  NicaFemtoCorrFuncKt* cf_kt = (NicaFemtoCorrFuncKt*) f->GetMainObject(2);
+  TH1* h                     = cf_kt->GetKtNum();
+  NicaFemto1DCF* cf          = (NicaFemto1DCF*) cf_kt->GetCF(0);
+
+  TH1* mon = f->GetHistogramPassed(ENicaCutUpdate::kTrackUpdate, 0, 3);
+
+  TCanvas* c = new TCanvas();
+  c->Divide(2, 2);
+  c->cd(1);
+  h->Draw();
+  c->cd(2);
+  mon->Draw("colz");
+  c->cd(3);
+  cf->Draw();
+}
-- 
GitLab