diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/CMakeLists.txt b/Trigger/TrigFTK/FTKStandaloneMonitoring/CMakeLists.txt
index d0a01ea28b70033317d368b9a63ea80b838cd046..95b3af9cda0f9b2b37a67af7746e093606072ce8 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/CMakeLists.txt
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/CMakeLists.txt
@@ -1,29 +1,28 @@
 atlas_subdir(FTKStandaloneMonitoring)
-#include(ATLAS)
+
 atlas_depends_on_subdirs( PUBLIC
                           Event/ByteStreamData
                           Trigger/TrigFTK/TrigFTK_RawData
 			  Trigger/TrigAnalysis/TrigInDetAnalysis
 			  Trigger/TrigAnalysis/TrigInDetAnalysisUtils
-			  GaudiKernel	
                           PRIVATE
                           Trigger/TrigFTK/TrigFTKSim
                           )
 
 # External dependencies:
-find_package( tdaq-common COMPONENTS eformat_write ROOT) 
+find_package( tdaq-common COMPONENTS eformat_write ) 
 
 atlas_add_library(FTKStandaloneMonitoring
-		  src/*.cxx
-		  PUBLIC_HEADERS FTKStandaloneMonitoring
-		  PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-		  LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES}   ByteStreamData  GaudiKernel TrigFTK_RawData TrigFTKSimLib TrigInDetAnalysisUtils TrigInDetAnalysis TrigFTK_RawData 
+                  src/*.cxx
+                  PUBLIC_HEADERS FTKStandaloneMonitoring
+                  PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                  LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES}   ByteStreamData   TrigFTK_RawData TrigFTKSimLib TrigInDetAnalysisUtils TrigInDetAnalysis TrigFTK_RawData
                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} )
 
 atlas_add_executable(MonitoringFTKHWSWComparison
                      test/MonitoringComparison.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES} GaudiKernel  ByteStreamData TrigFTK_RawData TrigFTKSimLib TrigInDetAnalysisUtils TrigInDetAnalysis TrigFTK_RawData FTKStandaloneMonitoring  
+                     LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES}   ByteStreamData TrigFTK_RawData TrigFTKSimLib TrigInDetAnalysisUtils TrigInDetAnalysis TrigFTK_RawData FTKStandaloneMonitoring
 		     )
 
 atlas_install_headers( FTKStandaloneMonitoring )
diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKEvents.h b/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKEvents.h
index eed29f60315417f4c552648115fdae4f72ae5137..85773c3eeae153f52eb7bf14f39b57f8a962c076 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKEvents.h
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKEvents.h
@@ -1,12 +1,6 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
-/* CompareFTKEvents class
- * author: Maddalena.Giulini@cern.ch
- * started: 27/02/2017
- *
- * Class to compare BS file and NTUP_FTK transformed file
- */
 #ifndef __CompareFTKEvents__
 #define __CompareFTKEvents__
 
@@ -19,9 +13,8 @@
 #include <cmath>
 #include "TTree.h"
 #include "TFile.h"
-#include "GaudiKernel/ToolHandle.h"
-#include "GaudiKernel/MsgStream.h"
-#include "AthenaBaseComps/AthAlgorithm.h"
+
+
 #include "ByteStreamData/RawEvent.h"
 #include "TrigFTKSim/FTKTrackStream.h"
 #include "TrigFTK_RawData/FTK_RawTrackContainer.h"
@@ -29,7 +22,6 @@
 #include "TrigFTK_RawData/FTK_RawSCT_Cluster.h"
 #include "FTKStandaloneMonitoring/FTKTrkAssoc.h"
 #include "FTKStandaloneMonitoring/CompareFTKTracks.h"
-
 class CompareFTKEvents{
   public:
     CompareFTKEvents();
@@ -76,8 +68,8 @@ class CompareFTKEvents{
     FTKTrackStream *m_ft;
     bool m_allmatched=true;
     bool m_verbose=false;
+    bool m_setup_partition=false;
     CompareFTKTracks * m_compTrk;
-    std::vector<TH1D *> vec_histo;
     std::vector<std::string> m_histo_list;
     std::map<std::string , TH1D * > map_histo;
     std::map<std::string , TH2D * > map_histo_2D;
@@ -87,6 +79,7 @@ class CompareFTKEvents{
     std::string m_str_tree_evtinfo="evtinfo";
     std::string m_str_tree_ftkdata="ftkdata";
     std::string m_str_tree_ftkstream="FTKMergedTracksStream";
+    std::string m_partition_name="";
     std::map<std::string, std::vector<double> > histo_param={{"pt",{1000.,0.,100000.}},
                                                               {"eta",{100.,-2.5,2.5}},
 							      {"phi",{100.,-3.2,3.2}},
@@ -94,6 +87,6 @@ class CompareFTKEvents{
 							      {"z0",{100,-50,50}},
 							      {"chi2",{100,0,50}},
 							      {"ETA_PHI",{100,-2.5,2.5,100,-3.2,3.2}}};
-    std::vector<std::string> variable_list={"pt","eta","phi","d0","z0","chi2","ETA_PHI"};
+    std::vector<std::string> variable_list={"pt","eta","phi","d0","z0","chi2","ETA_PHI"};    
   };
 #endif //__CompareFTKEvents__
diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKTracks.h b/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKTracks.h
index 0668ab460e742ca1e8571532f83b1046b793511a..485a642bf7077bfd55f60198ecf0a9fc5be9ff8d 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKTracks.h
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/FTKStandaloneMonitoring/CompareFTKTracks.h
@@ -1,7 +1,6 @@
 /*
 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 */
-
 #ifndef __CompareFTKTracks__
 #define __CompareFTKTracks__
 
@@ -21,14 +20,13 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 class CompareFTKTracks{
   public:
     CompareFTKTracks();
-    CompareFTKTracks(std::vector<const FTK_RawTrack *> &ref, std::vector<const FTK_RawTrack *> &test, std::vector<TH1D *> &vec_histo, std::map<std::string , TH1D * > &map_histo, std::map<std::string , TH2D * > &map_histo_2D);
+    CompareFTKTracks(std::vector<const FTK_RawTrack *> &ref, std::vector<const FTK_RawTrack *> &test, std::map<std::string , TH1D * > &map_histo, std::map<std::string , TH2D * > &map_histo_2D);
     void AssociateTracks();
     void SetDRmax(double dmax){m_dmax=dmax;}
     void TestEquivalence();
     void FillHistos();
     double GetValue(std::string & variable, const FTK_RawTrack * tmptrk);
   private:
-    std::vector<TH1D *> m_vec_histo;
     std::map<std::string , TH1D * > m_map_histo;
     std::map<std::string , TH2D * > m_map_histo_2D;
     std::vector<const FTK_RawTrack *> m_ref;
diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKEvents.cxx b/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKEvents.cxx
index fc0b67e776203f227da6d5a318c80642a63cb562..f912d03e4a62bc1a0b11e0f015853dfc2c25bce9 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKEvents.cxx
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKEvents.cxx
@@ -20,18 +20,8 @@ CompareFTKEvents::CompareFTKEvents(const std::string &BSfile, const std::string
         std::cout << "ERROR! cannot open file "<<m_BSfile.c_str();
 	m_myBSfile.clear( );
     }
-}
-void CompareFTKEvents::CreateHistos(){
-    TH1D * h_res_pt= new TH1D("h_res_pt","#Delta p_{T} (test-ref)/ p_{T}^{ref};( p_{T}^{test} - p_{T}^{ref} )/ p_{T}^{ref};FTK Tracks",2000,-1.,1.);
-    TH1D * h_res_d0= new TH1D("h_res_d0","#Delta d_{0} (test-ref)/ d_{0}^{ref};( d_{0}^{test} - d_{0}^{ref} )/ d_{0}^{ref};FTK Tracks",4000,-2.,2.);
-    TH1D * h_ref_ntrk= new TH1D("h_ref_ntrk","Reference Nr. of tracks;N_{trk}^{ref};Events",100,0,100);
-    TH1D * h_test_ntrk= new TH1D("h_test_ntrk","Test Nr. of tracks;N_{trk}^{test};Events",100,0,100);
-    vec_histo.push_back(h_res_pt);
-    vec_histo.push_back(h_res_d0);
-    vec_histo.push_back(h_ref_ntrk);
-    vec_histo.push_back(h_test_ntrk);
-
-}
+}    
+// defining histograms
 void CompareFTKEvents::SetHistos(std::vector<std::string> histo_list){
     m_histo_list=histo_list;
     for (auto & istr : m_histo_list){
@@ -40,26 +30,50 @@ void CompareFTKEvents::SetHistos(std::vector<std::string> histo_list){
         std::stringstream ss;
         if (istr.find("HWSW")!=std::string::npos)        ss<<"HW=SIM;"<<str3<<";FTK HW=SIM Tracks";
         else if (istr.find("HWonly")!=std::string::npos) ss<<"HW only;"<<str3<<";FTK HW Tracks w/o SW match";
-        else if (istr.find("nTrk")!=std::string::npos) ss<<istr<<";N tracks;Events";
+        else if (istr.find("SWonly")!=std::string::npos) ss<<"SW only;"<<str3<<";FTK SW Tracks w/o HW match";
+        else if (istr.find("HWvsSWhw")!=std::string::npos) ss<<"Matched Tracks but HW!=SW; HW "<<str3<<";FTK HW Tracks w/ SW match "<<str3;
+        else if (istr.find("HWvsSWsw")!=std::string::npos) ss<<"Matched Tracks but HW!=SW; SW "<<str3<<";FTK SW Tracks w/ HW match "<<str3;
+	//else if (istr.find("res")!=std::string::npos)  ss<<"Matched Tracks but HW!=SW, #Delta  (SW-HW)/ HW;"<<str3<<";FTK HW Tracks w/ SW match";
+	else if (istr.find("nTrk")!=std::string::npos) ss<<istr<<";N tracks;Events";
 	std::string title = ss.str();
+	//if histo is not eta vs phi 2D histo
         if (istr.find("ETA_PHI")==std::string::npos){
             if (istr.find("nTrk")!=std::string::npos) map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),title.c_str(),100,0,100)));
- 	    else if (istr.find("HWSW")!=std::string::npos|| istr.find("HWonly")!=std::string::npos) map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),title.c_str(),histo_param[str3].at(0),histo_param[str3].at(1),histo_param[str3].at(2))));
-            if (istr.find("res_pt")!=std::string::npos){
-		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D("m_res_pt","#Delta p_{T} (test-ref)/ p_{T}^{ref};( p_{T}^{test} - p_{T}^{ref} )/ p_{T}^{ref};FTK Tracks",2000,-1.,1.)));
-	    }
-            if (istr.find("res_d0")!=std::string::npos) 
-		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D("m_res_d0","#Delta d_{0} (test-ref)/ d_{0}^{ref};( d_{0}^{test} - d_{0}^{ref} )/ d_{0}^{ref};FTK Tracks",4000,-2.,2.)));
+ 	    else if (istr.find("HWSW")!=std::string::npos|| istr.find("HWonly")!=std::string::npos||istr.find("SWonly")!=std::string::npos||(istr.find("HWvsSW")!=std::string::npos&&istr.find("diff")==std::string::npos))
+	       map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),title.c_str(),histo_param[str3].at(0),histo_param[str3].at(1),histo_param[str3].at(2))));
+            else if (istr.find("HWvsSWdiff_pt")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta p_{T} (test-ref); p_{T}^{test} - p_{T}^{ref} ;FTK Tracks",1000,-5000,5000)));
+            else if (istr.find("HWvsSWdiff_eta")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta #eta (test-ref); #eta^{test} - #eta^{ref} ;FTK Tracks",2000,-0.1,0.1)));
+            else if (istr.find("HWvsSWdiff_phi")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta #phi (test-ref); #phi^{test} - #phi^{ref} ;FTK Tracks",2000,-0.1,0.1)));
+            else if (istr.find("HWvsSWdiff_d0")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta d_{0} (test-ref); d_{0}^{test} - d_{0}^{ref} ;FTK Tracks",4000,-5.,5.)));
+            else if (istr.find("HWvsSWdiff_z0")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta z_{0} (test-ref); z_{0}^{test} - z_{0}^{ref} ;FTK Tracks",4000,-2.,2.)));
+            else if (istr.find("HWvsSWdiff_chi2")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta chi2 (test-ref); chi2^{test} - chi2^{ref} ;FTK Tracks",4000,-5.,5.)));
+            else if (istr.find("res_pt")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta p_{T} (test-ref)/ p_{T}^{ref};( p_{T}^{test} - p_{T}^{ref} )/ p_{T}^{ref};FTK Tracks",2000,-1.,1.)));
+            else if (istr.find("res_eta")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta #eta (test-ref)/ #eta^{ref};( #eta^{test} - #eta^{ref} )/ #eta^{ref};FTK Tracks",2000,-1.,1.)));
+            else if (istr.find("res_phi")!=std::string::npos)
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta #phi (test-ref)/ #phi^{ref};( #phi^{test} - #phi^{ref} )/ #phi^{ref};FTK Tracks",2000,-1.,1.)));
+            else if (istr.find("res_d0")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta d_{0} (test-ref)/ d_{0}^{ref};( d_{0}^{test} - d_{0}^{ref} )/ d_{0}^{ref};FTK Tracks",4000,-2.,2.)));
+            else if (istr.find("res_z0")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta z_{0} (test-ref)/ z_{0}^{ref};( z_{0}^{test} - z_{0}^{ref} )/ z_{0}^{ref};FTK Tracks",4000,-2.,2.)));
+            else if (istr.find("res_chi2")!=std::string::npos) 
+		map_histo.insert(std::map<std::string, TH1D *>::value_type(istr, new TH1D(istr.c_str(),"#Delta chi2 (test-ref)/ chi2^{ref};( chi2^{test} - chi2^{ref} )/ chi2^{ref};FTK Tracks",4000,-2.,2.)));
 	}
 	else {
  	    map_histo_2D.insert(std::map<std::string, TH2D *>::value_type(istr, new TH2D(istr.c_str(),title.c_str(),100,-2.5,2.5,100,-3.2,3.2)));	
 	}
     }	
-    
 }
+// reading BS file, starting loop on events and writing histograms
 void CompareFTKEvents::Execute()
 {
-    CreateHistos();
     m_Nevents_BS=GetNEventsBS();
     std::cout<<"Input BS file has N events: "<<m_Nevents_BS<<std::endl;
     readNTUP_FTKfile();
@@ -70,6 +84,7 @@ void CompareFTKEvents::Execute()
     EventLoop();
     WriteHistos();
 }
+// reading the SW NTUP_FTK TTrees
 void CompareFTKEvents::readNTUP_FTKfile()
 {
     std::cout<<"Reading NTUP_FTK file "<<m_NTUP_FTK_file<<std::endl;
@@ -91,6 +106,7 @@ void CompareFTKEvents::readNTUP_FTKfile()
     branch->SetAddress(&m_ft);
     m_Nevents_NTUPFTK=m_theTree->GetEntries();
 }
+// decoding functions from FTKByteStreamDecoderEncoder
 StatusCode CompareFTKEvents::decode(uint32_t nTracks, OFFLINE_FRAGMENTS_NAMESPACE::PointerType rodData, FTK_RawTrackContainer* result) {
 
   result->reserve(result->size() + nTracks);
@@ -126,6 +142,7 @@ void CompareFTKEvents::unpackPixCluster(OFFLINE_FRAGMENTS_NAMESPACE::PointerType
   cluster.setWordA(*data);
   cluster.setWordB(*(data+1));
 }
+// Looping over events of the HW (BS_FTK) and SW (NTUP_FTK files) and collecting track info
 void CompareFTKEvents::EventLoop()
 {
     std::cout<<"Starting Loop"<<std::endl;
@@ -184,7 +201,9 @@ void CompareFTKEvents::EventLoop()
 	   }
 	   nrob+=1;	  
        }
-       vec_histo.at(2)->Fill(nTrks);
+       auto search = map_histo.find("nTrk_HW");
+       if(search != map_histo.end()) search->second->Fill(nTrks);
+       else  std::cout << "Not found "<<search->first<<std::endl;
        if (nrob>1){std::cout<<"!!!!!!!!!!SOMETHING WRONG number of robs >1:"<<nrob<<std::endl;}
        std::cout<<"Event "<<ievent<<" N tracks BS file "<<trkcontainer->size()<<std::endl;
        // end reading info from BS file
@@ -195,7 +214,9 @@ void CompareFTKEvents::EventLoop()
        std::vector<const FTK_RawTrack *> ftkNTUPtest;
        int NTracksNTUP;
        NTracksNTUP=m_ft->getNTracks();
-       vec_histo.at(3)->Fill(NTracksNTUP);
+       auto search_SW = map_histo.find("nTrk_SW");
+       if(search_SW != map_histo.end()) search_SW->second->Fill(NTracksNTUP);
+       else  std::cout << "Not found "<<search_SW->first<<std::endl;
        for(int it=0; it<NTracksNTUP;it++){
          FTKTrack* ftktrk=m_ft->getTrack(it);
          FTK_RawTrack* rawftktrk=new FTK_RawTrack();
@@ -224,24 +245,26 @@ void CompareFTKEvents::EventLoop()
            if(trkcontainerNTUP->at(i)->getD0()!=0&&trkcontainerNTUP->at(i)->getZ0()!=0&&trkcontainerNTUP->at(i)->getInvPt()!=0&&
 	      trkcontainerNTUP->at(i)->getPhi()!=0&&trkcontainerNTUP->at(i)->getCotTh()!=0&&trkcontainerNTUP->at(i)->getChi2()!=0
 	      &&(
-	       abs(trkcontainer->at(i)->getD0()/trkcontainerNTUP->at(i)->getD0()-1.)>0.001||
-               abs(trkcontainer->at(i)->getZ0()/trkcontainerNTUP->at(i)->getZ0()-1.)>0.001||
-               abs(trkcontainer->at(i)->getInvPt()/trkcontainerNTUP->at(i)->getInvPt()-1.)>0.001||
-               abs(trkcontainer->at(i)->getPhi()/trkcontainerNTUP->at(i)->getPhi()-1.)>0.001||
-               abs(trkcontainer->at(i)->getCotTh()/trkcontainerNTUP->at(i)->getCotTh()-1.)>0.001||
-               abs(trkcontainer->at(i)->getChi2()/trkcontainerNTUP->at(i)->getChi2()-1.)>0.001)){
-		   std::cout<<"Difference in comparing trk "<<i<<std::endl;
-		   std::cout<<"\td0 : \t"<<trkcontainer->at(i)->getD0()<<"\t"<<trkcontainerNTUP->at(i)->getD0()<<std::endl;
-		   std::cout<<"\tz0 : \t"<<trkcontainer->at(i)->getZ0()<<"\t"<<trkcontainerNTUP->at(i)->getZ0()<<std::endl;
-		   std::cout<<"\tipt : \t"<<trkcontainer->at(i)->getInvPt()<<"\t"<<trkcontainerNTUP->at(i)->getInvPt()<<std::endl;
-		   std::cout<<"\tPhi : \t"<<trkcontainer->at(i)->getPhi()<<"\t"<<trkcontainerNTUP->at(i)->getPhi()<<std::endl;
-		   std::cout<<"\tCotTh : \t"<<trkcontainer->at(i)->getCotTh()<<"\t"<<trkcontainerNTUP->at(i)->getCotTh()<<std::endl;
-		   std::cout<<"\tChi2 : \t"<<trkcontainer->at(i)->getChi2()<<"\t"<<trkcontainerNTUP->at(i)->getChi2()<<std::endl;
+	       fabs(trkcontainer->at(i)->getD0()/trkcontainerNTUP->at(i)->getD0()-1.)>0.001||
+               fabs(trkcontainer->at(i)->getZ0()/trkcontainerNTUP->at(i)->getZ0()-1.)>0.001||
+               fabs(trkcontainer->at(i)->getInvPt()/trkcontainerNTUP->at(i)->getInvPt()-1.)>0.001||
+               fabs(trkcontainer->at(i)->getPhi()/trkcontainerNTUP->at(i)->getPhi()-1.)>0.001||
+               fabs(trkcontainer->at(i)->getCotTh()/trkcontainerNTUP->at(i)->getCotTh()-1.)>0.001||
+               fabs(trkcontainer->at(i)->getChi2()/trkcontainerNTUP->at(i)->getChi2()-1.)>0.001)){
+		   if (m_verbose){
+		       std::cout<<"Difference in comparing trk "<<i<<std::endl;
+		       std::cout<<"\td0 : \t"<<trkcontainer->at(i)->getD0()<<"\t"<<trkcontainerNTUP->at(i)->getD0()<<std::endl;
+		       std::cout<<"\tz0 : \t"<<trkcontainer->at(i)->getZ0()<<"\t"<<trkcontainerNTUP->at(i)->getZ0()<<std::endl;
+		       std::cout<<"\tipt : \t"<<trkcontainer->at(i)->getInvPt()<<"\t"<<trkcontainerNTUP->at(i)->getInvPt()<<std::endl;
+		       std::cout<<"\tPhi : \t"<<trkcontainer->at(i)->getPhi()<<"\t"<<trkcontainerNTUP->at(i)->getPhi()<<std::endl;
+		       std::cout<<"\tCotTh : \t"<<trkcontainer->at(i)->getCotTh()<<"\t"<<trkcontainerNTUP->at(i)->getCotTh()<<std::endl;
+		       std::cout<<"\tChi2 : \t"<<trkcontainer->at(i)->getChi2()<<"\t"<<trkcontainerNTUP->at(i)->getChi2()<<std::endl;
+		   }    
 		   m_allmatched=false;
                }
 	   else {if (i%std::min(nTrks,NTracksNTUP)==0 && m_allmatched){std::cout<<"Track Parameters btw BS_FTK and NTUP_FTK are the same: good!"<<std::endl;}}
        }
-       m_compTrk= new CompareFTKTracks(ftkBSref,ftkNTUPtest,vec_histo, map_histo, map_histo_2D);
+       m_compTrk= new CompareFTKTracks(ftkBSref,ftkNTUPtest, map_histo, map_histo_2D);
        m_compTrk->AssociateTracks();
        m_compTrk->FillHistos();
        delete data32;
@@ -250,12 +273,12 @@ void CompareFTKEvents::EventLoop()
 void CompareFTKEvents::WriteHistos(){
     m_fout= new TFile("./out.histo.root","RECREATE");
     m_fout->cd();
-    for(unsigned int ih=0; ih<vec_histo.size();ih++){
-        vec_histo.at(ih)->Write();
-    }
     for(auto & imap : map_histo){
         imap.second->Write();
     }
+    for(auto & imap : map_histo_2D){
+        imap.second->Write();
+    }
     m_fout->Write();
     m_fout->Close();
     std::cout<<"Histo written into file "<<m_fout->GetName()<<std::endl;
diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKTracks.cxx b/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKTracks.cxx
index 2e549c812ac3faffd84e5a16fc862be72ab5c61d..ea370c7e72d3ee733084299c55b956e2a1afef91 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKTracks.cxx
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/src/CompareFTKTracks.cxx
@@ -4,17 +4,16 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
 #include "FTKStandaloneMonitoring/CompareFTKTracks.h"
 #include <iostream>
 #include <string>
-CompareFTKTracks::CompareFTKTracks(std::vector<const FTK_RawTrack *> &ref, std::vector<const FTK_RawTrack *> &test, std::vector<TH1D *> &vec_histo, std::map<std::string , TH1D * > &map_histo, std::map<std::string , TH2D * > &map_histo_2D){
+CompareFTKTracks::CompareFTKTracks(std::vector<const FTK_RawTrack *> &ref, std::vector<const FTK_RawTrack *> &test, std::map<std::string , TH1D * > &map_histo, std::map<std::string , TH2D * > &map_histo_2D){
       m_ref=ref;
       m_test=test;
-      m_vec_histo=vec_histo;
       m_map_histo=map_histo;
       m_map_histo_2D=map_histo_2D;
 }
 void CompareFTKTracks::AssociateTracks(){
       m_associator= new FTKTrkAssoc("FTKTrkAssoc", m_dmax);
       m_associator->match( m_ref,m_test);
-      std::cout<<"Of the N ref tracks ("<<m_ref.size()<<") wrt to the test tracks ("<<m_test.size()<<"), the number of matched tracks is "<<m_associator->size()<<std::endl;
+      std::cout<<"Of N ref trks ("<<m_ref.size()<<") wrt to test trk ("<<m_test.size()<<"), number of matched trks: "<<m_associator->size()<<std::endl;
 }
 
 void CompareFTKTracks::TestEquivalence(){
@@ -24,7 +23,7 @@ void CompareFTKTracks::TestEquivalence(){
          itrk+=1;
          match_track = m_associator->matched(ref_track);
 	 if (!match_track) {std::cout<<"the "<<itrk<<"-th track has no matched track"<<std::endl; continue;}
-	 if (ref_track->getPhi()!=0&&abs(match_track->getPhi()/ref_track->getPhi()-1.)>0.001){	    
+	 if (ref_track->getPhi()!=0&&fabs(match_track->getPhi()/ref_track->getPhi()-1.)>0.001){	    
       	    std::cout<<"Wrong matching: Phi matched "<<match_track->getPhi()<<" ref "<<ref_track->getPhi()<<std::endl;
 	    m_allmatched=false;
 	 }
@@ -40,7 +39,7 @@ double CompareFTKTracks::GetValue(std::string & variable, const FTK_RawTrack  *t
      else if (variable.find("chi2")!=std::string::npos) {outvar= tmptrk->getChi2();}
      else if (variable.find("phi")!=std::string::npos)  {outvar= tmptrk->getPhi();}
      else if (variable.find("eta")!=std::string::npos)  {outvar= TMath::ASinH(tmptrk->getCotTh());}
-     else std::cout<<"variable not found!!"<<variable<<std::endl;
+     else std::cout<<"variable not found!! "<<variable<<std::endl;
      return outvar;
 }
 void CompareFTKTracks::FillHistos(){
@@ -49,56 +48,87 @@ void CompareFTKTracks::FillHistos(){
       int HWSWmatched=0;
       int HWSWdifferent=0;
       int HWonly=0;
+      int SWonly=0;
+      for(auto& test_track : m_test){
+          match_track = m_associator->revmatched(test_track);
+	  if (!match_track) {
+	     std::cout<<"the "<<itrk<<"-th SW track has no matched track"<<std::endl; 
+             for (auto& imap : m_map_histo){
+	         if (imap.first.find("SWonly")==std::string::npos) continue;
+		 std::size_t pos = imap.first.find("_");      
+        	 std::string istr = imap.first.substr (pos+1);		 
+                 imap.second->Fill(GetValue(istr,test_track));
+	     } 
+             for (auto& imap : m_map_histo_2D){
+		 std::size_t pos = imap.first.find("_");      
+        	 std::string istr = imap.first.substr (pos+1);		 
+	         if (imap.first.find("SWonly")==std::string::npos) continue;
+		 if (istr.find("ETA_PHI")!=std::string::npos) {		     
+		     std::string etastr("eta");
+		     std::string phistr("phi");
+		     imap.second->Fill(GetValue(etastr,test_track),GetValue(phistr,test_track));
+		 }    
+             }
+	     SWonly+=1;	      
+	  }    
+      }  
       for(auto& ref_track : m_ref){
          itrk+=1;
          match_track = m_associator->matched(ref_track);
 	 //no SW matched track
 	 if (!match_track) {
-	     std::cout<<"the "<<itrk<<"-th track has no matched track"<<std::endl; 
+	     std::cout<<"the "<<itrk<<"-th HW track has no matched track"<<std::endl; 
              for (auto& imap : m_map_histo){
 	         if (imap.first.find("HWonly")==std::string::npos) continue;
 		 std::size_t pos = imap.first.find("_");      
         	 std::string istr = imap.first.substr (pos+1);		 
-                 if (istr.find("ETA_PHI")==std::string::npos){
-		     imap.second->Fill(GetValue(istr,ref_track));
-		 }
-		 else {		     
+                 imap.second->Fill(GetValue(istr,ref_track));
+	     } 
+             for (auto& imap : m_map_histo_2D){
+		 std::size_t pos = imap.first.find("_");      
+        	 std::string istr = imap.first.substr (pos+1);		 
+	         if (imap.first.find("HWonly")==std::string::npos) continue;
+		 if (istr.find("ETA_PHI")!=std::string::npos) {		     
 		     std::string etastr("eta");
 		     std::string phistr("phi");
 		     imap.second->Fill(GetValue(etastr,ref_track),GetValue(phistr,ref_track));
 		 }    
              }
 	     HWonly+=1;
-	     continue;
 	 }
 	 //completely matched tracks    
 	 else if (!(
-	      (ref_track->getPhi()!=0&&abs(match_track->getPhi()/ref_track->getPhi()-1.)>0.001)&&
-	      (ref_track->getInvPt()!=0&&abs(match_track->getInvPt()/ref_track->getInvPt()-1.)>0.001)&&
-	      (ref_track->getD0()!=0&&abs(match_track->getD0()/ref_track->getD0()-1.)>0.001)&&
-	      (ref_track->getZ0()!=0&&abs(match_track->getZ0()/ref_track->getZ0()-1.)>0.001)&&
-	      (ref_track->getChi2()!=0&&abs(match_track->getChi2()/ref_track->getChi2()-1.)>0.001)&&
-	      (ref_track->getCotTh()!=0&&abs(match_track->getCotTh()/ref_track->getCotTh()-1.)>0.001)
+	      (ref_track->getPhi()!=0&&fabs(match_track->getPhi()/ref_track->getPhi()-1.)>0.001)||
+	      (ref_track->getInvPt()!=0&&fabs(match_track->getInvPt()/ref_track->getInvPt()-1.)>0.001)||
+	      (ref_track->getD0()!=0&&fabs(match_track->getD0()/ref_track->getD0()-1.)>0.001)||
+	      (ref_track->getZ0()!=0&&fabs(match_track->getZ0()/ref_track->getZ0()-1.)>0.001)||
+	      (ref_track->getChi2()!=0&&fabs(match_track->getChi2()/ref_track->getChi2()-1.)>0.001)||
+	      (ref_track->getCotTh()!=0&&fabs(match_track->getCotTh()/ref_track->getCotTh()-1.)>0.001)
 	      )
-	     ){
+	     ){	     
              for (auto& imap : m_map_histo){
 	         if (imap.first.find("HWSW")==std::string::npos) continue;
 		 std::size_t pos = imap.first.find("_");      
         	 std::string istr = imap.first.substr (pos+1);		 
-                 if (istr.find("ETA_PHI")==std::string::npos){
-		     imap.second->Fill(GetValue(istr,match_track));
-		 }
-		 else {		     
+                 imap.second->Fill(GetValue(istr,match_track));
+	     } 
+             for (auto& imap : m_map_histo_2D){
+		std::size_t pos = imap.first.find("_");      
+        	std::string istr = imap.first.substr (pos+1);
+	         if (imap.first.find("HWSW")==std::string::npos) continue;
+		 if (istr.find("ETA_PHI")!=std::string::npos) {		     
 		     std::string etastr("eta");
 		     std::string phistr("phi");
-		     imap.second->Fill(GetValue(etastr,ref_track),GetValue(phistr,ref_track));
+		     imap.second->Fill(GetValue(etastr,match_track),GetValue(phistr,match_track));
 		 }    
              }
+             
 	     HWSWmatched+=1;
 	 }
 	 //not matched tracks
-	 else{    	     
+	 else{
 	     for (auto& imap : m_map_histo){
+	        if (imap.first.find("HWvsSW")==std::string::npos && imap.first.find("res")==std::string::npos) continue;
 		std::size_t pos = imap.first.find("_");      
         	std::string istr = imap.first.substr (pos+1);
 		double refval,testval;
@@ -107,16 +137,29 @@ void CompareFTKTracks::FillHistos(){
 		if (imap.first.find("res")!=std::string::npos) {
                     imap.second->Fill( (testval-refval)/(refval));
         	}
-
-	     }
+		else if (imap.first.find("HWvsSWdiff")!=std::string::npos) {
+                    imap.second->Fill( (testval-refval));
+        	}
+		else if (imap.first.find("HWvsSWsw")!=std::string::npos) {
+                    imap.second->Fill( testval);
+        	}
+		else if (imap.first.find("HWvsSWhw")!=std::string::npos) {
+                    imap.second->Fill( refval);
+        	}
+             }
+	     auto search_h2HW = m_map_histo_2D.find("HWvsSWhw_ETA_PHI");
+	     std::string etastr("eta");
+	     std::string phistr("phi");
+	     if(search_h2HW != m_map_histo_2D.end()) search_h2HW->second->Fill(GetValue(etastr,ref_track),GetValue(phistr,ref_track));
+	     else  std::cout << "Not found "<<search_h2HW->first<<std::endl;
+	     auto search_h2SW = m_map_histo_2D.find("HWvsSWsw_ETA_PHI");
+	     if(search_h2SW != m_map_histo_2D.end()) search_h2SW->second->Fill(GetValue(etastr,match_track),GetValue(phistr,match_track));
+	     else  std::cout << "Not found "<<search_h2SW->first<<std::endl;
 	     HWSWdifferent+=1;
 	 }   
-         m_vec_histo.at(0)->Fill( (1./match_track->getInvPt()-1./ref_track->getInvPt())/(1./ref_track->getInvPt()));
-      
-         m_vec_histo.at(1)->Fill( (match_track->getD0()-ref_track->getD0())/(ref_track->getD0()));
       }
+      m_map_histo["nTrk_only_sw"]->Fill(SWonly); 
       m_map_histo["nTrk_only_hw"]->Fill(HWonly); 
       m_map_histo["nTrk_different_hw_sw"]->Fill(HWSWdifferent); 
       m_map_histo["nTrk_same_hw_sw"]->Fill(HWSWmatched); 
 }
-
diff --git a/Trigger/TrigFTK/FTKStandaloneMonitoring/test/MonitoringComparison.cxx b/Trigger/TrigFTK/FTKStandaloneMonitoring/test/MonitoringComparison.cxx
index 9ff7b51f0b5e38be7e93e3a8a4d2c0adf25f250d..5e4adc32399310486e4b1aa0d91f6ef33da11fed 100644
--- a/Trigger/TrigFTK/FTKStandaloneMonitoring/test/MonitoringComparison.cxx
+++ b/Trigger/TrigFTK/FTKStandaloneMonitoring/test/MonitoringComparison.cxx
@@ -35,8 +35,6 @@ using namespace std;
 int verbose = FALSE;
 int readfile = FALSE;
 char filename[200] = {0};
-std::string inputfilename;
-uint32_t checkword=0xaa1234aa;
 
 
 
@@ -59,13 +57,14 @@ int main(int argc, char **argv)
 /*****************************/
 {
 
+  //default files
   std::string inputfilenameBS= "/afs/cern.ch/user/g/giulini/workdir/public/FTKcomparison/compareInputs/OUT.BS_FTK.root";
   std::string inputfilenameNTUPFTK= "/afs/cern.ch/user/g/giulini/workdir/public/FTKcomparison/compareInputs/OUT.NTUP_FTK.root";
   //evtinfo TTree NTUP_FTK
   int c;
   int evtmax=0;
   static struct option long_options[] = {"DVS", no_argument, NULL, '1'}; 
-  while ((c = getopt_long(argc, argv, "f:n:v:m:h", long_options, NULL)) != -1)
+  while ((c = getopt_long(argc, argv, "f:n:m:vh", long_options, NULL)) != -1)
     switch (c) 
     {
     case 'h':
@@ -89,13 +88,14 @@ int main(int argc, char **argv)
       inputfilenameNTUPFTK.append(filename);
       std::cout << "read NTUP_FTK data from file: "<< std::endl << inputfilenameNTUPFTK<< std::endl << std::endl;
       break;
-      
+            
     case 'm':   
       sscanf(optarg,"%d", &evtmax);
       std::cout << "maximum number of events: "<< evtmax << std::endl << std::endl;
       break;
       
-    case 'v': verbose = TRUE;               break;
+    case 'v': verbose = TRUE;  break;
+
 
     default:
       std::cout << "Invalid option " << c << std::endl;
@@ -104,29 +104,43 @@ int main(int argc, char **argv)
       exit (-1);
     }
   ;
-  
+
+
+  // initialization of the class to compare FTK events of HW (BS_FTK) and SW (NTUP_FTK)
   CompareFTKEvents *comparison= new CompareFTKEvents(inputfilenameBS,inputfilenameNTUPFTK);
-  comparison->PrintFiles();      
   if (verbose) comparison->SetVerbose();  
   if (evtmax!=0)    comparison->SetNEvents(evtmax);
-  std::string str= "prova";
-  std::vector<std::string> variable_list={"pt","eta","phi","d0","z0","chi2","ETA_PHI"};
-  
+  // create list of histograms to be published on oh
+  std::vector<std::string> variable_list={"pt","eta","phi","d0","z0","chi2","ETA_PHI"};//  
   std::vector<std::string> histo_list;
   for (auto & istr: variable_list){
       std::stringstream ss;
-      ss << "HWSW_" << istr;
+      ss << "HWSW_" << istr; // labels for FTK tracks completely matched (= same track parameters) btw HW and SW
       std::stringstream ss2;
-      ss2 << "HWonly_" << istr;
+      ss2 << "HWonly_" << istr; // labels for HW FTK tracks not matched to any SW track
+      std::stringstream ss3;
+      ss3 << "SWonly_" << istr; // labels for SW FTK tracks not matched to any HW track
+      std::stringstream ss4;
+      ss4 << "HWvsSWhw_" << istr; // labels for HW FTK tracks geometrically matched to SW tracks but with different track parameters
+      std::stringstream ss5;
+      ss5 << "HWvsSWsw_" << istr; // labels for SW FTK tracks geometrically matched to HW tracks but with different track parameters
       histo_list.push_back(ss.str());
       histo_list.push_back(ss2.str());
+      histo_list.push_back(ss3.str());
+      histo_list.push_back(ss4.str());
+      histo_list.push_back(ss5.str());
+      if (istr!="ETA_PHI"){
+          std::stringstream ss6;
+          ss6 << "HWvsSWdiff_" << istr; // resolution distributions for FTK tracks matched btw HW and SW but with different track parameters
+          histo_list.push_back(ss6.str());
+      }
   }
-  histo_list.push_back("m_res_pt");
-  histo_list.push_back("m_res_d0");
   histo_list.push_back("nTrk_same_hw_sw");
   histo_list.push_back("nTrk_different_hw_sw");
   histo_list.push_back("nTrk_only_hw");
   histo_list.push_back("nTrk_only_sw");
+  histo_list.push_back("nTrk_HW");
+  histo_list.push_back("nTrk_SW");
   comparison->SetHistos(histo_list);
   comparison->Execute();      
   return 0;