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