From daf4fc16167bae3e58fbbbf94b810d9e89cb65d8 Mon Sep 17 00:00:00 2001
From: "alberica.toia@cern.ch" <alberica.toia@cern.ch>
Date: Tue, 6 Apr 2021 18:18:40 +0200
Subject: [PATCH] Cosy2019 geometry par fixed

---
 fles/cosy2019/CMakeLists.txt                  |   3 +-
 fles/cosy2019/CbmBeamtimeCosy2019LinkDef.h    |   1 +
 fles/cosy2019/unpacker/CbmStsCoincHodo.cxx    | 690 ++++++++++++++++++
 fles/cosy2019/unpacker/CbmStsCoincHodo.h      | 166 +++++
 macro/beamtime/cosy2019/check_coinc_Hodo.C    |  79 ++
 macro/beamtime/cosy2019/create_cosygeo_v19a.C |   2 +-
 macro/beamtime/cosy2019/mHodoPar.par          |   6 +-
 macro/beamtime/cosy2019/mStsPar.par           |   2 +-
 8 files changed, 943 insertions(+), 6 deletions(-)
 create mode 100644 fles/cosy2019/unpacker/CbmStsCoincHodo.cxx
 create mode 100644 fles/cosy2019/unpacker/CbmStsCoincHodo.h
 create mode 100644 macro/beamtime/cosy2019/check_coinc_Hodo.C

diff --git a/fles/cosy2019/CMakeLists.txt b/fles/cosy2019/CMakeLists.txt
index 6f7cecbeda..1cc748ac27 100644
--- a/fles/cosy2019/CMakeLists.txt
+++ b/fles/cosy2019/CMakeLists.txt
@@ -52,7 +52,8 @@ Set(SRCS
 
    unpacker/CbmCosy2019UnpackerAlgoHodo.cxx
    unpacker/CbmCosy2019UnpackerTaskHodo.cxx
-
+   unpacker/CbmStsCoincHodo.cxx
+   
    monitor/CbmCosy2019MonitorAlgoHodo.cxx
    monitor/CbmCosy2019MonitorTaskHodo.cxx
 )
diff --git a/fles/cosy2019/CbmBeamtimeCosy2019LinkDef.h b/fles/cosy2019/CbmBeamtimeCosy2019LinkDef.h
index affce1ea6a..826d37d82c 100644
--- a/fles/cosy2019/CbmBeamtimeCosy2019LinkDef.h
+++ b/fles/cosy2019/CbmBeamtimeCosy2019LinkDef.h
@@ -9,6 +9,7 @@
 
 #pragma link C++ class CbmCosy2019UnpackerAlgoHodo;
 #pragma link C++ class CbmCosy2019UnpackerTaskHodo + ;
+#pragma link C++ class CbmStsCoincHodo;
 
 #pragma link C++ class CbmCosy2019MonitorAlgoHodo;
 #pragma link C++ class CbmCosy2019MonitorTaskHodo;
diff --git a/fles/cosy2019/unpacker/CbmStsCoincHodo.cxx b/fles/cosy2019/unpacker/CbmStsCoincHodo.cxx
new file mode 100644
index 0000000000..a8fc9cd25b
--- /dev/null
+++ b/fles/cosy2019/unpacker/CbmStsCoincHodo.cxx
@@ -0,0 +1,690 @@
+/********************************************************************************
+ *    Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH    *
+ *                                                                              *
+ *              This software is distributed under the terms of the             *
+ *              GNU Lesser General Public Licence (LGPL) version 3,             *
+ *                  copied verbatim in the file "LICENSE"                       *
+ ********************************************************************************/
+#include "CbmStsCoincHodo.h"
+
+#include "CbmStsDigi.h"
+#include "CbmStsCluster.h"
+#include "CbmStsHit.h"
+
+#include "FairLogger.h"
+#include "FairRootManager.h"
+#include "FairRunOnline.h"
+
+#include "TClonesArray.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "THttpServer.h"
+
+#include <iomanip>
+using std::fixed;
+using std::setprecision;
+
+// ---- Default constructor -------------------------------------------
+CbmStsCoincHodo::CbmStsCoincHodo()
+  : FairTask("CbmStsCoincHodo")
+  , arrayClusters{nullptr}
+  , arrayHits{nullptr}
+
+{
+}
+
+// ---- Destructor ----------------------------------------------------
+CbmStsCoincHodo::~CbmStsCoincHodo()
+{
+}
+
+
+// ---- Init ----------------------------------------------------------
+InitStatus CbmStsCoincHodo::Init()
+{
+
+  // Get a handle from the IO manager
+  FairRootManager* ioman = FairRootManager::Instance();
+
+  // Get a pointer to the previous already existing data level
+   arrayClusters = static_cast<TClonesArray*>(ioman->GetObject("StsCluster"));
+   arrayHits = static_cast<TClonesArray*>(ioman->GetObject("StsHit"));
+   
+   if ( ! arrayClusters ) {
+     LOG(info) << "No TClonesArray with STS clusters found.";
+   }
+   if ( ! arrayHits ) {
+     LOG(info) << "No TClonesArray with STS hits found.";
+   }
+   
+   CreateHistos();
+
+  return kSUCCESS;
+}
+
+void CbmStsCoincHodo::CreateHistos()
+{
+   phHitsStsTime = new TH1F("phHitsStsTime","phHitsStsTime",1000,0,1000);
+   phHitsHodoATime = new TH1F("phHitsHodoATime","phHitsHodoATime",1000,0,1000);
+   phHitsHodoBTime = new TH1F("phHitsHodoBTime","phHitsHodoBTime",1000,0,1000);
+
+///---------------------------------------------------------------------///
+   
+   phHitsPositionHodoA  = new TH2F( "phHitsPositionHodoA", "Position of the hits in hodoscope A; X [cm]; Y [cm]",
+                                           80,  -4.0,  4.0,
+                                           80,  -4.0,  4.0 );
+   phHitsPositionSts    = new TH2F( "phHitsPositionSts",  "Position of the hits in hodoscope B; X [cm]; Y [cm]",
+				           80, - 4.0,  4.0,
+                                           80,  -4.0,  4.0 );
+   phHitsPositionHodoB  = new TH2F( "phHitsPositionHodoB", "Position of the hits in hodoscope B; X [cm]; Y [cm]",
+                                           80,  -4.0,  4.0,
+                                           80,  -4.0,  4.0 );
+///---------------------------------------------------------------------///
+
+   phNbHitsCompHodo     = new TH2F( "phNbHitsCompHodo", "Number of hits per TS in Hodo A vs Hodo B; Nb Hits A[]; Nb Hits B []",
+                                          100, 0.0, 20000.0,
+                                          100, 0.0, 20000.0 );
+   phNbHitsCompStsHodoA = new TH2F( "phNbHitsCompStsHodoA", "Number of hits per TS in STS vs Hodo A; Nb Hits STS[]; Nb Hits A []",
+                                          100, 0.0, 20000.0,
+                                          100, 0.0, 20000.0 );
+   phNbHitsCompStsHodoB = new TH2F( "phNbHitsCompStsHodoB", "Number of hits per TS in STS vs Hodo B; Nb Hits STS[]; Nb Hits B []",
+                                          100, 0.0, 20000.0,
+                                          100, 0.0, 20000.0 );
+///---------------------------------------------------------------------///
+
+   phHitsCoincCorrXX   = new TH2F( "phHitsCoincCorrXX", "XX correlation of the coincident hits; X_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsCoincCorrYY   = new TH2F( "phHitsCoincCorrYY", "YY correlation of the coincident hits; Y_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsCoincCorrXY   = new TH2F( "phHitsCoincCorrXY", "XY correlation of the coincident hits; X_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsCoincCorrYX   = new TH2F( "phHitsCoincCorrYX", "YX correlation of the coincident hits; Y_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+   phHitsPositionCoincA = new TH2F( "phHitsPositionCoincA", "Position of the coincident hits in hodoscope A; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsPositionCoincB = new TH2F( "phHitsPositionCoincB", "Position of the coincident hits in hodoscope B; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsPositionDiff   = new TH2F( "phHitsPositionDiff", "Position difference of the coincident hits; X_B - X_A [cm]; Y_B- Y_A [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsTimeDiff       = new TH1F( "phHitsTimeDiff", "Time difference of the coincident hits; t_B - t_A [ns]",
+                                          2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+
+   phHitsCoincDist     = new TH1F( "phHitsCoincDist", "XY distance of the coincident hits; Dist. [cm]",
+                                         100,   0.0, 10.0 );
+   phHitsCoincAngle     = new TH1F( "phHitsCoincAngle", "Vertical angle of the coincident hits; Angle [deg.]",
+                                         180, -90.0, 90.0 );
+///---------------------------------------------------------------------///
+
+   phHitsSingleCoincCorrXX   = new TH2F( "phHitsSingleCoincCorrXX", "XX correlation of the coincident hits; X_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsSingleCoincCorrYY   = new TH2F( "phHitsSingleCoincCorrYY", "YY correlation of the coincident hits; Y_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsSingleCoincCorrXY   = new TH2F( "phHitsSingleCoincCorrXY", "XY correlation of the coincident hits; X_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsSingleCoincCorrYX   = new TH2F( "phHitsSingleCoincCorrYX", "YX correlation of the coincident hits; Y_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+   phHitsSinglePositionCoincA = new TH2F( "phHitsSinglePositionCoincA", "Position of the coincident hits in hodoscope A; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsSinglePositionCoincB = new TH2F( "phHitsSinglePositionCoincB", "Position of the coincident hits in hodoscope B; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsSinglePositionDiff   = new TH2F( "phHitsSinglePositionDiff", "Position difference of the coincident hits; X_B - X_A [cm]; Y_B- Y_A [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsSingleTimeDiff       = new TH1F( "phHitsSingleTimeDiff", "Time difference of the coincident hits; t_B - t_A [ns]",
+                                          2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+
+   phHitsSingleCoincDist     = new TH1F( "phHitsSingleCoincDist", "XY distance of the coincident hits; Dist. [cm]",
+                                         100,   0.0, 10.0 );
+   phHitsSingleCoincAngle     = new TH1F( "phHitsSingleCoincAngle", "Vertical angle of the coincident hits; Angle [deg.]",
+                                         180, -90.0, 90.0 );
+///---------------------------------------------------------------------///
+
+   phHitsBestCoincCorrXX   = new TH2F( "phHitsBestCoincCorrXX", "XX correlation of the coincident hits; X_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsBestCoincCorrYY   = new TH2F( "phHitsBestCoincCorrYY", "YY correlation of the coincident hits; Y_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsBestCoincCorrXY   = new TH2F( "phHitsBestCoincCorrXY", "XY correlation of the coincident hits; X_A [cm]; Y_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsBestCoincCorrYX   = new TH2F( "phHitsBestCoincCorrYX", "YX correlation of the coincident hits; Y_A [cm]; X_B [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+   phHitsBestPositionCoincA = new TH2F( "phHitsBestPositionCoincA", "Position of the coincident hits in hodoscope A; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsBestPositionCoincB = new TH2F( "phHitsBestPositionCoincB", "Position of the coincident hits in hodoscope B; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsBestPositionDiff   = new TH2F( "phHitsBestPositionDiff", "Position difference of the coincident hits; X_B - X_A [cm]; Y_B- Y_A [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsBestTimeDiff       = new TH1F( "phHitsBestTimeDiff", "Time difference of the coincident hits; t_B - t_A [ns]",
+                                          2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+
+   phHitsBestCoincDist      = new TH1F( "phHitsBestCoincDist", "XY distance of the coincident hits; Dist. [cm]",
+                                         100,   0.0, 10.0 );
+   phHitsBestCoincAngle     = new TH1F( "phHitsBestCoincAngle", "Vertical angle of the coincident hits; Angle [deg.]",
+                                         180, -90.0, 90.0 );
+
+///---------------------------------------------------------------------///
+   phHitsPositionCoincExtr = new TH2F( "phHitsPositionCoincExtr", "Position of the extrapolated hits ; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+///---------------------------------------------------------------------///
+   
+   phHitsStsCoincCorrXX   = new TH2F( "phHitsStsCoincCorrXX", "XX correlation of the coincident hits; X_extr [cm]; X_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsCoincCorrYY   = new TH2F( "phHitsStsCoincCorrYY", "YY correlation of the coincident hits; Y_extr [cm]; Y_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsCoincCorrXY   = new TH2F( "phHitsStsCoincCorrXY", "XY correlation of the coincident hits; X_extr [cm]; Y_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsCoincCorrYX   = new TH2F( "phHitsStsCoincCorrYX", "YX correlation of the coincident hits; Y_extr [cm]; X_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+   phHitsStsPositionCoincExtr = new TH2F( "phHitsStsPositionCoincExtr", "Position of the extrapolated hits ; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsStsPositionCoinc = new TH2F( "phHitsStsPositionCoinc", "Position of the coincident hits in Sts; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsStsTimeDiff = new TH1F( "phHitsStsTimeDiff", "Position difference of STS hit with the best coincident hits; t_Sts - t_(AB) [ns]",
+                                          2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+   phHitsStsPositionDiff   = new TH2F( "phHitsStsPositionDiff", "Position difference of the coincident hits; X_STS - X_extr [cm]; Y_STS- Y_extr [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsPositionDiffInv   = new TH2F( "phHitsStsPositionDiffInv", "Position difference of the coincident hits; X_STS - Y_extr [cm]; Y_STS- Y_extr [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+///---------------------------------------------------------------------///
+
+
+   phHitsStsBestCoincCorrXX   = new TH2F( "phHitsStsBestCoincCorrXX", "XX correlation of the coincident hits; X_extr [cm]; X_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsBestCoincCorrYY   = new TH2F( "phHitsStsBestCoincCorrYY", "YY correlation of the coincident hits; Y_extr [cm]; Y_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsBestCoincCorrXY   = new TH2F( "phHitsStsBestCoincCorrXY", "XY correlation of the coincident hits; X_extr [cm]; Y_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+   phHitsStsBestCoincCorrYX   = new TH2F( "phHitsStsBestCoincCorrYX", "YX correlation of the coincident hits; Y_extr [cm]; X_STS [cm]",
+                                         160, -8.0, 8.0,
+                                         160, -8.0, 8.0 );
+
+   phHitsStsBestPositionCoincExtr = new TH2F( "phHitsStsBestPositionCoincExtr", "Position of the extrapolated hits ; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsStsBestPositionCoinc = new TH2F( "phHitsStsBestPositionCoinc", "Position of the coincident hits in Sts; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   phHitsStsBestPositionShiftCoinc = new TH2F( "phHitsStsBestPositionShiftCoinc", "Position of the coincident hits in Sts; X [cm]; Y [cm]",
+                                          80, -4.0, 4.0,
+                                          80, -4.0, 4.0 );
+   
+   phHitsStsBestTimeDiff = new TH1F( "phHitsStsBestTimeDiff", "Position difference of STS hit with the best coincident hits; t_Sts - t_(AB) [ns]",
+                                          2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+   phHitsStsBestPositionDiff = new TH2F( "phHitsStsBestPositionDiff", "Position difference of STS hit with the best coincident hits; X_Sts - X_extr(AB) [cm]; Y_Sts- Y_extr(AB) [cm]",
+                                         400, -8.0, 8.0,
+                                         400, -8.0, 8.0 );
+   phHitsStsBestPositionDiffInv = new TH2F( "phHitsStsBestPositionDiffInv", "Position difference of STS hit (inverted) with the best coincident hits; X_Sts - Y_extr(AB) [cm]; Y_Sts- X_extr(AB) [cm]",
+                                         400, -8.0, 8.0,
+                                         400, -8.0, 8.0 );
+   phHitsStsBestDiff = new TH3F( "phHitsStsBestDiff", "Difference of STS hit with the best coincident hits; X_Sts - X_extr(AB) [cm]; Y_Sts- Y_extr(AB) [cm]; t_Sts - t_mean(AB) [ns]",
+				 160, -8.0, 8.0,
+				 160, -8.0, 8.0,
+				 2 * iCoincLimitClk, -dCoincLimit, dCoincLimit );
+
+///---------------------------------------------------------------------///
+   phHitsStsEff = new TH2F( "phHitsStsEff", "Position of the coincident hits in Sts; X [cm]; Y [cm]",
+			    80, -4.0, 4.0,
+			    80, -4.0, 4.0 );
+   
+  
+   
+
+  /// Register the histos in the HTTP server
+  FairRunOnline* run = FairRunOnline::Instance();
+  if (run) {
+    THttpServer* server = run->GetHttpServer();
+    if( nullptr != server ) {
+
+    server->Register("CheckCoinc",phHitsStsTime);
+    server->Register("CheckCoinc",phHitsHodoATime);
+    server->Register("CheckCoinc",phHitsHodoBTime);
+
+    server->Register("CheckCoinc",phHitsPositionHodoA);
+    server->Register("CheckCoinc",phHitsPositionSts);
+    server->Register("CheckCoinc",phHitsPositionHodoB);
+
+    server->Register("CheckCoinc",phNbHitsCompHodo);
+    server->Register("CheckCoinc",phNbHitsCompStsHodoA);
+    server->Register("CheckCoinc",phNbHitsCompStsHodoB);
+
+    server->Register("CheckCoinc",phHitsCoincCorrXX);
+    server->Register("CheckCoinc",phHitsCoincCorrYY);
+    server->Register("CheckCoinc",phHitsCoincCorrXY);
+    server->Register("CheckCoinc",phHitsCoincCorrYX);
+    server->Register("CheckCoinc",phHitsPositionCoincA);
+    server->Register("CheckCoinc",phHitsPositionCoincB);
+    server->Register("CheckCoinc",phHitsPositionDiff);
+    server->Register("CheckCoinc",phHitsTimeDiff);
+    server->Register("CheckCoinc",phHitsCoincDist);
+    server->Register("CheckCoinc",phHitsCoincAngle);
+
+    server->Register("CheckCoinc",phHitsSingleCoincCorrXX);
+    server->Register("CheckCoinc",phHitsSingleCoincCorrYY);
+    server->Register("CheckCoinc",phHitsSingleCoincCorrXY);
+    server->Register("CheckCoinc",phHitsSingleCoincCorrYX);
+    server->Register("CheckCoinc",phHitsSinglePositionCoincA);
+    server->Register("CheckCoinc",phHitsSinglePositionCoincB);
+    server->Register("CheckCoinc",phHitsSinglePositionDiff);
+    server->Register("CheckCoinc",phHitsSingleTimeDiff);
+    server->Register("CheckCoinc",phHitsSingleCoincDist);
+    server->Register("CheckCoinc",phHitsSingleCoincAngle);
+
+    server->Register("CheckCoinc",phHitsBestCoincCorrXX);
+    server->Register("CheckCoinc",phHitsBestCoincCorrYY);
+    server->Register("CheckCoinc",phHitsBestCoincCorrXY);
+    server->Register("CheckCoinc",phHitsBestCoincCorrYX);
+    server->Register("CheckCoinc",phHitsBestPositionCoincA);
+    server->Register("CheckCoinc",phHitsBestPositionCoincB);
+    server->Register("CheckCoinc",phHitsBestPositionDiff);
+    server->Register("CheckCoinc",phHitsBestTimeDiff);
+    server->Register("CheckCoinc",phHitsBestCoincDist);
+    server->Register("CheckCoinc",phHitsBestCoincAngle);
+
+    server->Register("CheckCoinc",phHitsPositionCoincExtr);
+	
+    server->Register("CheckCoinc",phHitsStsCoincCorrXX);
+    server->Register("CheckCoinc",phHitsStsCoincCorrYY);
+    server->Register("CheckCoinc",phHitsStsCoincCorrXY);
+    server->Register("CheckCoinc",phHitsStsCoincCorrYX);
+    server->Register("CheckCoinc",phHitsStsPositionCoincExtr);
+    server->Register("CheckCoinc",phHitsStsPositionCoinc);
+    server->Register("CheckCoinc",phHitsStsTimeDiff);
+    server->Register("CheckCoinc",phHitsStsPositionDiff);
+    server->Register("CheckCoinc",phHitsStsPositionDiffInv);
+
+    server->Register("CheckCoinc",phHitsStsBestCoincCorrXX);
+    server->Register("CheckCoinc",phHitsStsBestCoincCorrYY);
+    server->Register("CheckCoinc",phHitsStsBestCoincCorrXY);
+    server->Register("CheckCoinc",phHitsStsBestCoincCorrYX);
+    server->Register("CheckCoinc",phHitsStsBestPositionCoincExtr);
+    server->Register("CheckCoinc",phHitsStsBestPositionCoinc);
+    server->Register("CheckCoinc",phHitsStsBestPositionShiftCoinc);
+    server->Register("CheckCoinc",phHitsStsBestTimeDiff);
+    server->Register("CheckCoinc",phHitsStsBestPositionDiff); 
+    server->Register("CheckCoinc",phHitsStsBestPositionDiffInv);
+    server->Register("CheckCoinc",phHitsStsBestDiff); 
+
+    server->Register("CheckCoinc",phHitsStsEff);
+
+    }
+  }
+}
+// ---- ReInit  -------------------------------------------------------
+InitStatus CbmStsCoincHodo::ReInit()
+{
+  return kSUCCESS;
+}
+
+// ---- Exec ----------------------------------------------------------
+void CbmStsCoincHodo::Exec(Option_t* /*option*/)
+{
+
+  fNbTs++;
+
+  Double_t dOffsetX = 0.0; Double_t dOffsetY = 0.0; Double_t dOffsetT=-6.38091e+00;
+  Double_t dOffsetXSts = -2.55; Double_t dOffsetYSts = -1.46; Double_t dOffsetTSts = -5.22608e+00;
+  Double_t dSigmaXSts =6.79000e-02;  Double_t dSigmaYSts =2.81408e-02;
+    
+  Int_t iNbClusters = arrayClusters->GetEntriesFast();
+  Int_t iNbHits = arrayHits->GetEntriesFast();
+  std::cout << "executing TS " << fNbTs << " StsClusters: " << iNbClusters << " StsHits: " << iNbHits << std::endl;
+
+  // Fill vectors for Sts and HodoA,B
+  std::vector< CbmStsHit * > vHitsHodoA;
+  std::vector< CbmStsHit * > vHitsSts;
+  std::vector< CbmStsHit * > vHitsHodoB;
+
+  vHitsHodoA.clear();
+  vHitsSts.clear();
+  vHitsHodoB.clear();
+  for( Int_t iHit = 0; iHit < iNbHits; ++iHit)
+    {
+      CbmStsHit * pHit = dynamic_cast< CbmStsHit * >( arrayHits->UncheckedAt( iHit ) );
+      Double_t dX = pHit->GetX();
+      Double_t dY = pHit->GetY();
+      Double_t dZ = pHit->GetZ();
+      //std::cout << "TS: " << fNbTs << " " << pHit->GetAddress() << std::endl;
+      /// Check if the hit is in Hodo A or B or in STS
+      //         if( dZ < dMidStsHodoA )
+      if (pHit->GetAddress() == 0x10008002)
+	{
+	  //std::cout << "TS: " << fNbTs << " HODOA" << std::endl;
+	  vHitsHodoA.push_back( pHit );
+	  phHitsPositionHodoA->Fill( dX, dY );
+	} // if( dZ < dMidStsHodoA ) => if Hodo A
+      //      else if( dZ < dMidStsHodoB )
+      else if (pHit->GetAddress() == 0x10008012)
+	{
+	  //std::cout << "TS: " << fNbTs << " STS" << std::endl;
+	  vHitsSts.push_back( pHit );
+	  phHitsPositionSts->Fill( dX, dY );
+	} // else if( dZ < dMidStsHodoB ) of if( dZ < dMidStsHodoA ) => if STS
+      //else
+      else if (pHit->GetAddress() == 0x10008022)
+	{
+	  //std::cout << "TS: " << fNbTs << " HODOB" << std::endl;
+	  vHitsHodoB.push_back( pHit );
+	  phHitsPositionHodoB->Fill( dX, dY );
+	} // else of if( dZ < dMidStsHodoB ) => if Hodo B
+    } // for( Int_t iHit = 0; iHit < iNbHits; ++iHit)
+   std::cout << "TS: " << fNbTs
+        << " " << vHitsHodoA.size() 
+        << " " << vHitsHodoB.size() 
+        << " " << vHitsSts.size() << std::endl;
+  
+  phNbHitsCompHodo->Fill( vHitsHodoA.size(), vHitsHodoB.size() );
+  phNbHitsCompStsHodoA->Fill( vHitsSts.size(), vHitsHodoA.size() );
+  phNbHitsCompStsHodoB->Fill( vHitsSts.size(), vHitsHodoB.size() );
+  
+  phHitsStsTime ->Fill(fNbTs,vHitsSts.size());
+  phHitsHodoATime ->Fill(fNbTs,vHitsHodoA.size());
+  phHitsHodoBTime ->Fill(fNbTs,vHitsHodoB.size());
+  
+  //-----------------------------------------------------------------------
+
+
+  // Look for coincidence HODOA - HODOB
+      for( UInt_t uHitA = 0; uHitA < vHitsHodoA.size(); ++uHitA )
+      {
+         Double_t dBestTime = 1e9;
+         UInt_t   uBestB = vHitsHodoB.size();
+
+         Double_t dTimeA = vHitsHodoA[ uHitA ]->GetTime();
+         for( UInt_t uHitB = 0; uHitB < vHitsHodoB.size(); ++uHitB )
+         {
+            Double_t dTimeB = vHitsHodoB[ uHitB ]->GetTime();
+
+	    // time difference of the hits in HODOB - HODOA
+	    phHitsTimeDiff->Fill( dTimeB - dTimeA );
+
+	    if( TMath::Abs( dTimeB - dTimeA ) < dCoincLimit )
+            {
+	      // HODOA vs HODOB 
+               phHitsCoincCorrXX->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uHitB ]->GetX() );
+               phHitsCoincCorrYY->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uHitB ]->GetY() );
+               phHitsCoincCorrXY->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uHitB ]->GetY() );
+               phHitsCoincCorrYX->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uHitB ]->GetX() );
+	       // position X vs Y of the hits in coincidence HODOA and HODOB
+               phHitsPositionCoincA->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoA[ uHitA ]->GetY() );
+               phHitsPositionCoincB->Fill( vHitsHodoB[ uHitB ]->GetX(), vHitsHodoB[ uHitB ]->GetY() );
+	       // position difference DeltaX vs DeltaY of the hits in coincidence HODOB - HODOA
+               phHitsPositionDiff->Fill( vHitsHodoB[ uHitB ]->GetX() - vHitsHodoA[ uHitA ]->GetX() - dOffsetX,
+                                         vHitsHodoB[ uHitB ]->GetY() - vHitsHodoA[ uHitA ]->GetY() - dOffsetY);
+
+               Double_t dHitsDistXY = TMath::Sqrt(  ( vHitsHodoA[ uHitA ]->GetX() - vHitsHodoB[ uHitB ]->GetX() - dOffsetX )
+                                                  * ( vHitsHodoA[ uHitA ]->GetX() - vHitsHodoB[ uHitB ]->GetX() - dOffsetX )
+                                                  + ( vHitsHodoA[ uHitA ]->GetY() - vHitsHodoB[ uHitB ]->GetY() - dOffsetY )
+                                                  * ( vHitsHodoA[ uHitA ]->GetY() - vHitsHodoB[ uHitB ]->GetY() - dOffsetY )
+                                                 );
+               Double_t dHitsDistZ = TMath::Abs( vHitsHodoA[ uHitA ]->GetZ() - vHitsHodoB[ uHitB ]->GetZ() );
+               Double_t dAngle = TMath::RadToDeg() * TMath::ATan2( dHitsDistXY, dHitsDistZ );
+               phHitsCoincDist->Fill( dHitsDistXY );
+               phHitsCoincAngle->Fill( dAngle );
+
+               if( TMath::Abs( dTimeB - dTimeA - dOffsetT )  < dBestTime )
+               {
+                  dBestTime = TMath::Abs( dTimeB - dTimeA );
+                  uBestB = uHitB;
+               } // if( TMath::Abs( dTimeB - dTimeA )  < dBestTime )
+            } // if( TMath::Abs( dTimeB - dTimeA ) < dCoincLimit )
+         } // for( UInt_t uHitB = 0; uHitB < vHitsHodoB.size(); ++uHitB )
+         if( uBestB < vHitsHodoB.size() )
+         {
+            Double_t dTimeB = vHitsHodoB[ uBestB ]->GetTime();
+
+	    phHitsBestTimeDiff->Fill( dTimeB - dTimeA );
+	    
+            if( TMath::Abs( dTimeB - dTimeA ) < dCoincLimit )
+            {
+               phHitsBestCoincCorrXX->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uBestB ]->GetX() );
+               phHitsBestCoincCorrYY->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uBestB ]->GetY() );
+               phHitsBestCoincCorrXY->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uBestB ]->GetY() );
+               phHitsBestCoincCorrYX->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uBestB ]->GetX() );
+
+               phHitsBestPositionCoincA->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoA[ uHitA ]->GetY() );
+               phHitsBestPositionCoincB->Fill( vHitsHodoB[ uBestB ]->GetX(), vHitsHodoB[ uBestB ]->GetY() );
+               phHitsBestPositionDiff->Fill( vHitsHodoB[ uBestB ]->GetX() - vHitsHodoA[ uHitA ]->GetX() - dOffsetX,
+                                             vHitsHodoB[ uBestB ]->GetY() - vHitsHodoA[ uHitA ]->GetY() - dOffsetY);
+
+
+               Double_t dHitsDistXY = TMath::Sqrt(  ( vHitsHodoA[ uHitA ]->GetX() - vHitsHodoB[ uBestB ]->GetX() - dOffsetX )
+                                                  * ( vHitsHodoA[ uHitA ]->GetX() - vHitsHodoB[ uBestB ]->GetX() - dOffsetX )
+                                                  + ( vHitsHodoA[ uHitA ]->GetY() - vHitsHodoB[ uBestB ]->GetY() - dOffsetY )
+                                                  * ( vHitsHodoA[ uHitA ]->GetY() - vHitsHodoB[ uBestB ]->GetY() - dOffsetY )
+                                                 );
+               Double_t dHitsDistZ = TMath::Abs( vHitsHodoA[ uHitA ]->GetZ() - vHitsHodoB[ uBestB ]->GetZ() );
+               Double_t dAngle = TMath::RadToDeg() * TMath::ATan2( dHitsDistXY, dHitsDistZ );
+               phHitsBestCoincDist->Fill( dHitsDistXY );
+               phHitsBestCoincAngle->Fill( dAngle );
+
+	       // only one hit per TS (never happens in data!)
+               if( 1 == vHitsHodoA.size() && 1 == vHitsHodoB.size() )
+               {
+                  phHitsSingleCoincCorrXX->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uBestB ]->GetX() );
+                  phHitsSingleCoincCorrYY->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uBestB ]->GetY() );
+                  phHitsSingleCoincCorrXY->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoB[ uBestB ]->GetY() );
+                  phHitsSingleCoincCorrYX->Fill( vHitsHodoA[ uHitA ]->GetY(), vHitsHodoB[ uBestB ]->GetX() );
+
+                  phHitsSinglePositionCoincA->Fill( vHitsHodoA[ uHitA ]->GetX(), vHitsHodoA[ uHitA ]->GetY() );
+                  phHitsSinglePositionCoincB->Fill( vHitsHodoB[ uBestB ]->GetX(), vHitsHodoB[ uBestB ]->GetY() );
+                  phHitsSinglePositionDiff->Fill( vHitsHodoB[ uBestB ]->GetX() - vHitsHodoA[ uHitA ]->GetX() - dOffsetX,
+                                                  vHitsHodoB[ uBestB ]->GetY() - vHitsHodoA[ uHitA ]->GetY() - dOffsetY);
+                  phHitsSingleTimeDiff->Fill( dTimeB - dTimeA );
+                  phHitsSingleCoincDist->Fill( dHitsDistXY );
+                  phHitsSingleCoincAngle->Fill( dAngle );
+               } // if( 1 == vHitsHodoA.size() && 1 == vHitsHodoB.size() )
+
+            } // if( TMath::Abs( dTimeB - dTimeA ) < dCoincLimit )
+
+
+	    /// now search coincidence in Sts
+            Double_t dBestTimeSts = 1e9;
+            UInt_t   uBestSts = vHitsSts.size();
+
+            Double_t dHodoMeanTime = ( dTimeA + dTimeB ) / 2.0;
+            Double_t dHodoExtrX    = vHitsHodoA[ uHitA ]->GetX()
+                                     + ( vHitsHodoB[ uBestB ]->GetX() - vHitsHodoA[ uHitA ]->GetX() )
+                                       * dStsDistZ / dHodoDistZ;
+            Double_t dHodoExtrY    = vHitsHodoA[ uHitA ]->GetY()
+                                     + ( vHitsHodoB[ uBestB ]->GetY() - vHitsHodoA[ uHitA ]->GetY() )
+                                       * dStsDistZ / dHodoDistZ;
+
+	    phHitsPositionCoincExtr->Fill( dHodoExtrX, dHodoExtrY );
+	       
+            for( UInt_t uHitSts = 0; uHitSts < vHitsSts.size(); ++uHitSts )
+            {
+               Double_t dTimeSts = vHitsSts[ uHitSts ]->GetTime();
+               Double_t dTimeDiffSts = dTimeSts - dHodoMeanTime;
+
+               phHitsStsTimeDiff->Fill( dTimeDiffSts );
+
+               if( TMath::Abs( dTimeDiffSts ) < dCoincLimit )
+               {
+
+               phHitsStsCoincCorrXX->Fill( dHodoExtrX, vHitsSts[ uHitSts ]->GetX() );
+               phHitsStsCoincCorrYY->Fill( dHodoExtrY, vHitsSts[ uHitSts ]->GetY() );
+               phHitsStsCoincCorrXY->Fill( dHodoExtrX, vHitsSts[ uHitSts ]->GetY() );
+               phHitsStsCoincCorrYX->Fill( dHodoExtrY, vHitsSts[ uHitSts ]->GetX() );
+
+               phHitsStsPositionCoincExtr->Fill( dHodoExtrX, dHodoExtrY );
+               phHitsStsPositionCoinc->Fill( vHitsSts[ uHitSts ]->GetX(), vHitsSts[ uHitSts ]->GetY() );
+
+               phHitsStsPositionDiff->Fill( vHitsSts[ uHitSts ]->GetX() - dHodoExtrX - dOffsetX,
+					    vHitsSts[ uHitSts ]->GetY() - dHodoExtrY - dOffsetY);
+               phHitsStsPositionDiffInv->Fill( vHitsSts[ uHitSts ]->GetX() - dHodoExtrY - dOffsetX,
+					       vHitsSts[ uHitSts ]->GetY() - dHodoExtrX - dOffsetY);
+
+	       
+		 if( TMath::Abs( dTimeDiffSts -dOffsetTSts)  < dBestTimeSts )
+                  {
+                     dBestTimeSts = TMath::Abs( dTimeDiffSts );
+                     uBestSts = uHitSts;
+                  } // if( TMath::Abs( dTimeB - dTimeA )  < dBestTimeSts )
+                  // else std::cout << fNbTs << " " << vHitsHodoA.size() << " " << vHitsSts.size() << " " << vHitsHodoB.size()
+                  //                << " " << TMath::Abs( dTimeDiffSts ) << " " << dBestTimeSts
+                  //                << std::endl;
+               } // if( TMath::Abs( dTimeSts - dHodoMeanTime ) < dCoincLimit )
+            } // for( UInt_t uHitSts = 0; uHitSts < vHitsSts.size(); ++uHitSts )
+
+            if( uBestSts < vHitsSts.size() )
+	      {
+		phHitsStsBestCoincCorrXX->Fill( dHodoExtrX, vHitsSts[ uBestSts ]->GetX() );
+		phHitsStsBestCoincCorrYY->Fill( dHodoExtrY, vHitsSts[ uBestSts ]->GetY() );
+		phHitsStsBestCoincCorrXY->Fill( dHodoExtrX, vHitsSts[ uBestSts ]->GetY() );
+		phHitsStsBestCoincCorrYX->Fill( dHodoExtrY, vHitsSts[ uBestSts ]->GetX() );
+			 
+		phHitsStsBestPositionCoincExtr->Fill( dHodoExtrX, dHodoExtrY );
+		phHitsStsBestPositionCoinc->Fill( vHitsSts[ uBestSts ]->GetX(), vHitsSts[ uBestSts ]->GetY() );
+		phHitsStsBestPositionShiftCoinc->Fill( vHitsSts[ uBestSts ]->GetX()-dOffsetXSts, vHitsSts[ uBestSts ]->GetY() -dOffsetYSts );
+	    
+		phHitsStsBestTimeDiff->Fill( vHitsSts[ uBestSts ]->GetTime()- dHodoMeanTime );
+		phHitsStsBestPositionDiff->Fill( vHitsSts[ uBestSts ]->GetX() - dHodoExtrX,
+					    vHitsSts[ uBestSts ]->GetY() - dHodoExtrY );
+		phHitsStsBestPositionDiffInv->Fill( vHitsSts[ uBestSts ]->GetX() - dHodoExtrY,
+					       vHitsSts[ uBestSts ]->GetY() - dHodoExtrX );
+		phHitsStsBestDiff->Fill( vHitsSts[ uBestSts ]->GetX() - dHodoExtrX,
+						 vHitsSts[ uBestSts ]->GetY() - dHodoExtrY,
+						 vHitsSts[ uBestSts ]->GetTime()- dHodoMeanTime );
+
+		if ( (TMath::Abs( vHitsSts[ uBestSts ]->GetX() - dHodoExtrX -dOffsetXSts)<3*dSigmaXSts )&&
+		     (TMath::Abs( -vHitsSts[ uBestSts ]->GetY() - dHodoExtrY -dOffsetYSts)<3*dSigmaYSts )) 
+		  {
+		    phHitsStsEff->Fill( dHodoExtrX, dHodoExtrY );
+		  }
+
+	      }
+	 } //  if( uBestB < vHitsHodoB.size() )
+      } // for( UInt_t uHitA = 0; uHitA < vHitsHodoA.size(); ++uHitA )
+
+
+  
+
+}
+
+
+// ---- Finish --------------------------------------------------------
+void CbmStsCoincHodo::Finish()
+{
+  WriteHistos();
+}
+
+void CbmStsCoincHodo::WriteHistos()
+{
+  TFile* old = gFile;
+  TFile* outfile = TFile::Open(fOutFileName,"RECREATE");
+
+  phHitsStsTime->Write();
+  phHitsHodoATime->Write();
+  phHitsHodoBTime->Write();
+  
+  phHitsPositionHodoA->Write();
+  phHitsPositionSts->Write();
+  phHitsPositionHodoB->Write();
+  
+  phNbHitsCompHodo->Write();
+  phNbHitsCompStsHodoA->Write();
+  phNbHitsCompStsHodoB->Write();
+  
+  phHitsCoincCorrXX->Write();
+  phHitsCoincCorrYY->Write();
+  phHitsCoincCorrXY->Write();
+  phHitsCoincCorrYX->Write();
+  phHitsPositionCoincA->Write();
+  phHitsPositionCoincB->Write();
+  phHitsPositionDiff->Write();
+  phHitsTimeDiff->Write();
+  phHitsCoincDist->Write();
+  phHitsCoincAngle->Write();
+  
+  // phHitsSingleCoincCorrXX->Write();
+  // phHitsSingleCoincCorrYY->Write();
+  // phHitsSingleCoincCorrXY->Write();
+  // phHitsSingleCoincCorrYX->Write();
+  // phHitsSinglePositionCoincA->Write();
+  // phHitsSinglePositionCoincB->Write();
+  // phHitsSinglePositionDiff->Write();
+  // phHitsSingleTimeDiff->Write();
+  // phHitsSingleCoincDist->Write();
+  // phHitsSingleCoincAngle->Write();
+  
+  phHitsBestCoincCorrXX->Write();
+  phHitsBestCoincCorrYY->Write();
+  phHitsBestCoincCorrXY->Write();
+  phHitsBestCoincCorrYX->Write();
+  phHitsBestPositionCoincA->Write();
+  phHitsBestPositionCoincB->Write();
+  phHitsBestPositionDiff->Write();
+  phHitsBestTimeDiff->Write();
+  phHitsBestCoincDist->Write();
+  phHitsBestCoincAngle->Write();
+
+  phHitsPositionCoincExtr->Write();
+    
+  phHitsStsCoincCorrXX->Write();
+  phHitsStsCoincCorrYY->Write();
+  phHitsStsCoincCorrXY->Write();
+  phHitsStsCoincCorrYX->Write();
+  phHitsStsPositionCoincExtr->Write();
+  phHitsStsPositionCoinc->Write();
+  phHitsStsTimeDiff->Write();
+  phHitsStsPositionDiff->Write();
+  phHitsStsPositionDiffInv->Write();
+  
+  phHitsStsBestCoincCorrXX->Write();
+  phHitsStsBestCoincCorrYY->Write();
+  phHitsStsBestCoincCorrXY->Write();
+  phHitsStsBestCoincCorrYX->Write();
+  phHitsStsBestPositionCoincExtr->Write();
+  phHitsStsBestPositionCoinc->Write();
+  phHitsStsBestPositionShiftCoinc->Write();
+  phHitsStsBestTimeDiff->Write();
+  phHitsStsBestPositionDiff->Write();                                        
+  phHitsStsBestPositionDiffInv->Write();
+  phHitsStsBestDiff->Write();                                        
+
+  phHitsStsEff->Write();
+  
+  outfile->Close();
+  delete outfile;
+
+  gFile = old;
+}
+
+ClassImp(CbmStsCoincHodo)
diff --git a/fles/cosy2019/unpacker/CbmStsCoincHodo.h b/fles/cosy2019/unpacker/CbmStsCoincHodo.h
new file mode 100644
index 0000000000..fc70b61ab1
--- /dev/null
+++ b/fles/cosy2019/unpacker/CbmStsCoincHodo.h
@@ -0,0 +1,166 @@
+/********************************************************************************
+ *    Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH    *
+ *                                                                              *
+ *              This software is distributed under the terms of the             *
+ *              GNU Lesser General Public Licence (LGPL) version 3,             *
+ *                  copied verbatim in the file "LICENSE"                       *
+ ********************************************************************************/
+#ifndef CBMCHECKCOINCHODO_H
+#define CBMCHECKCOINCHODO_H
+
+#include "FairTask.h"
+
+#include "TString.h"
+#include "TH3.h"
+#include "TClonesArray.h"
+
+//class TClonesArray;
+class TH1;
+class TH2;
+class TH3;
+
+class CbmStsCoincHodo : public FairTask
+{
+  public:
+
+    /** Default constructor **/
+    CbmStsCoincHodo();
+
+    CbmStsCoincHodo(const CbmStsCoincHodo&) = delete;
+    CbmStsCoincHodo operator=(const CbmStsCoincHodo&) = delete;
+
+    /** Constructor with parameters (Optional) **/
+    //  CbmStsCoincHodo(Int_t verbose);
+
+
+    /** Destructor **/
+    ~CbmStsCoincHodo();
+
+
+    /** Initiliazation of task at the beginning of a run **/
+    virtual InitStatus Init();
+
+    /** ReInitiliazation of task when the runID changes **/
+    virtual InitStatus ReInit();
+
+
+    /** Executed for each event. **/
+    virtual void Exec(Option_t*);
+
+    /** Finish task called at the end of the run **/
+    virtual void Finish();
+
+    inline void SetOutFilename( TString sNameIn ) { fOutFileName = sNameIn; }
+
+    inline void SetTsStart( Int_t i ) { TsStart = i; }
+    inline void SetTsStop( Int_t i ) { TsStop = i; }
+    
+  private:
+
+    void CreateHistos();
+    void WriteHistos();
+
+
+    /** Input array from previous already existing data level **/
+    TClonesArray* arrayClusters = nullptr;
+    TClonesArray* arrayHits     = nullptr;
+    
+    /// Constants
+   Double_t dPosZHodoA =  200.0;
+   Double_t dPosZSts   =  229.0;
+   Double_t dPosZHodoB =  264.0;
+   Double_t dHodoDistZ = dPosZHodoB - dPosZHodoA;
+   Double_t dStsDistZ  = dPosZSts   - dPosZHodoA;
+
+   Double_t dMidStsHodoA = ( dPosZHodoA + dPosZSts ) / 2.0;
+   Double_t dMidStsHodoB = ( dPosZHodoB + dPosZSts ) / 2.0;
+
+   Int_t    iCoincLimitClk = 100;
+   Double_t dClockCycle    =   3.125; // ns
+   Double_t dCoincLimit    = iCoincLimitClk * dClockCycle;
+ 
+    //
+    Int_t fNbTs = 0;
+    Int_t fNrOfStsDigis = 0; 
+
+    //
+    Int_t TsStart;
+    Int_t TsStop;
+    
+    // Histos
+    TH1 * phHitsStsTime;
+    TH1 * phHitsHodoATime;
+    TH1 * phHitsHodoBTime;
+
+    TH2 * phHitsPositionHodoA;
+    TH2 * phHitsPositionSts;
+    TH2 * phHitsPositionHodoB;
+    TH2 * phNbHitsCompHodo;
+    TH2 * phNbHitsCompStsHodoA;
+    TH2 * phNbHitsCompStsHodoB;
+    
+    TH2 * phHitsCoincCorrXX;
+    TH2 * phHitsCoincCorrYY;
+    TH2 * phHitsCoincCorrXY;
+    TH2 * phHitsCoincCorrYX;
+    TH2 * phHitsPositionCoincA;
+    TH2 * phHitsPositionCoincB;
+    TH2 * phHitsPositionDiff;
+    TH1 * phHitsTimeDiff;
+    TH1 * phHitsCoincDist;
+    TH1 * phHitsCoincAngle;
+
+    TH2 * phHitsSingleCoincCorrXX;
+    TH2 * phHitsSingleCoincCorrYY;
+    TH2 * phHitsSingleCoincCorrXY;
+    TH2 * phHitsSingleCoincCorrYX;
+    TH2 * phHitsSinglePositionCoincA;
+    TH2 * phHitsSinglePositionCoincB;
+    TH2 * phHitsSinglePositionDiff;
+    TH1 * phHitsSingleTimeDiff;
+    TH1 * phHitsSingleCoincDist;
+    TH1 * phHitsSingleCoincAngle;
+
+    TH2 * phHitsBestCoincCorrXX;
+    TH2 * phHitsBestCoincCorrYY;
+    TH2 * phHitsBestCoincCorrXY;
+    TH2 * phHitsBestCoincCorrYX;
+    TH2 * phHitsBestPositionCoincA;
+    TH2 * phHitsBestPositionCoincB;
+    TH2 * phHitsBestPositionDiff;
+    TH1 * phHitsBestTimeDiff;
+    TH1 * phHitsBestCoincDist;
+    TH1 * phHitsBestCoincAngle;
+
+    TH2 * phHitsPositionCoincExtr;
+	
+    TH2 * phHitsStsCoincCorrXX;
+    TH2 * phHitsStsCoincCorrYY;
+    TH2 * phHitsStsCoincCorrXY;
+    TH2 * phHitsStsCoincCorrYX;
+    TH2 * phHitsStsPositionCoincExtr;
+    TH2 * phHitsStsPositionCoinc;
+    TH1 * phHitsStsTimeDiff;
+    TH2 * phHitsStsPositionDiff;
+    TH2 * phHitsStsPositionDiffInv;
+	
+    TH2 * phHitsStsBestCoincCorrXX;
+    TH2 * phHitsStsBestCoincCorrYY;
+    TH2 * phHitsStsBestCoincCorrXY;
+    TH2 * phHitsStsBestCoincCorrYX;
+    TH2 * phHitsStsBestPositionCoincExtr;
+    TH2 * phHitsStsBestPositionCoinc;
+    TH2 * phHitsStsBestPositionShiftCoinc;
+    TH1 * phHitsStsBestTimeDiff;
+    TH2 * phHitsStsBestPositionDiff;                                        
+    TH2 * phHitsStsBestPositionDiffInv;
+    TH3 * phHitsStsBestDiff;                                        
+
+    TH2 * phHitsStsEff;
+    
+    TString fOutFileName{"testCoincHodo.root"};
+
+    ClassDef(CbmStsCoincHodo,1);
+};
+
+#endif
diff --git a/macro/beamtime/cosy2019/check_coinc_Hodo.C b/macro/beamtime/cosy2019/check_coinc_Hodo.C
new file mode 100644
index 0000000000..50c0b5227e
--- /dev/null
+++ b/macro/beamtime/cosy2019/check_coinc_Hodo.C
@@ -0,0 +1,79 @@
+void check_coinc_Hodo(
+		  Int_t nEvents = 10,
+		  UInt_t run=25,
+		  UInt_t prefix=0)
+{
+  TString runId = TString::Format("%04u", run);
+  TString prefixId = TString::Format("%04u", prefix);
+  // TString fileName="/lustre/cbm/users/alberica/cosy2019/rec/TESTrec_cosy_";
+  //   fileName = fileName + runId + "_" + prefixId + ".root";
+  TString fileName="0025.rec.root";
+  // ========================================================================
+  //          Adjust this part according to your requirements
+
+  // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug)
+  Int_t iVerbose = 1;
+
+  TString srcDir = gSystem->Getenv("VMCWORKDIR");
+
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
+  // -----  Analysis run   --------------------------------------------------
+  FairRunOnline *fRun= new FairRunOnline();
+  fRun->ActivateHttpServer( 100, 8080 ); // refresh each 100 events
+
+  FairFileSource* inputSource = new FairFileSource(fileName);
+  fRun->SetSource(inputSource);
+
+  // Define output file for FairMonitor histograms
+  FairMonitor::GetMonitor()->EnableMonitor(kFALSE);
+  // ------------------------------------------------------------------------
+
+  CbmStsCoincHodo* timeChecker = new CbmStsCoincHodo();
+  timeChecker->SetTsStart(0);
+  timeChecker->SetTsStop(5000);
+  timeChecker->SetOutFilename(Form("testCoincHodo_%i_%i_2_8.root",run,prefix));
+  fRun->AddTask(timeChecker);
+
+
+  // -----   Intialise and run   --------------------------------------------
+  fRun->Init();
+  cout << "Starting run" << endl;
+  fRun->Run(0,nEvents);
+  // ------------------------------------------------------------------------
+
+
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  cout << endl << endl;
+  cout << "Macro finished succesfully." << endl;
+  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
+  cout << endl;
+  // ------------------------------------------------------------------------
+
+  // Extract the maximal used memory an add is as Dart measurement
+  // This line is filtered by CTest and the value send to CDash
+  FairSystemInfo sysInfo;
+  Float_t maxMemory=sysInfo.GetMaxMemory();
+  cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
+  cout << maxMemory;
+  cout << "</DartMeasurement>" << endl;
+
+  Float_t cpuUsage=ctime/rtime;
+  cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
+  cout << cpuUsage;
+  cout << "</DartMeasurement>" << endl;
+
+  FairMonitor* tempMon = FairMonitor::GetMonitor();
+  tempMon->Print();
+
+//  RemoveGeoManager();
+  cout << " Test passed" << endl;
+  cout << " All ok " << endl;
+}
diff --git a/macro/beamtime/cosy2019/create_cosygeo_v19a.C b/macro/beamtime/cosy2019/create_cosygeo_v19a.C
index 373b7f4ffa..4662ac5077 100644
--- a/macro/beamtime/cosy2019/create_cosygeo_v19a.C
+++ b/macro/beamtime/cosy2019/create_cosygeo_v19a.C
@@ -489,7 +489,7 @@ void create_cosygeo_v19a(
     if (2 == iStation) {
       /// Rotate STS station to horizontal position
       TGeoRotation* rot = new TGeoRotation();
-      rot->RotateZ(90.);
+      rot->RotateZ(-90.);
 
       /// Shift the station to pick a module under test
       //      Double_t dShiftX = -3.1;
diff --git a/macro/beamtime/cosy2019/mHodoPar.par b/macro/beamtime/cosy2019/mHodoPar.par
index 32304aa9cf..a9d3afd9d4 100644
--- a/macro/beamtime/cosy2019/mHodoPar.par
+++ b/macro/beamtime/cosy2019/mHodoPar.par
@@ -1,8 +1,8 @@
 ##############################################################################
-# Class:   CbmMcbm2018HodoPar
+# Class:   CbmCosy2019HodoPar
 # Context: For mHODO testing
 ##############################################################################
-[CbmMcbm2018HodoPar]
+[CbmCosy2019HodoPar]
 //----------------------------------------------------------------------------
 // Total number of STS modules in the setup
 NbModules: Int_t 2
@@ -21,7 +21,7 @@ ModSwapXY: Int_t \
          0           0
 // Flag telling if channels on X axis should be inverted (original axis, not swapped one!)
 ModInvertX: Int_t \
-         1           1
+         0           0
 // Flag telling if channels on Y axis should be inverted (original axis, not swapped one!)
 ModInvertY: Int_t \
          0           0
diff --git a/macro/beamtime/cosy2019/mStsPar.par b/macro/beamtime/cosy2019/mStsPar.par
index 62000c0418..7f52a39335 100644
--- a/macro/beamtime/cosy2019/mStsPar.par
+++ b/macro/beamtime/cosy2019/mStsPar.par
@@ -32,7 +32,7 @@ FebModuleIdx: Int_t \
  -1  0  0 -1 -1
 // STS module side for each FEB, [ NbDpb * kuNbCrobPerDpb * kuNbFebsPerCrob ], 0 = P, 1 = N, -1 if inactive
 FebModuleSide: Int_t \
-  0  0  1  0  1
+ -1  0  1  -1  -1
 // ADC Gain in e-/ADC bin for each FEB, [ NbDpb * kuNbCrobPerDpb * kuNbFebsPerCrob ]
 FebAdcGain: Double_t \
      1.0     1.0     1.0     1.0     1.0
-- 
GitLab