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;