|
27 | 27 | #include "Common/DataModel/EventSelection.h" |
28 | 28 | #include "Common/Core/TrackSelectionDefaults.h" |
29 | 29 | #include "Common/DataModel/TrackSelectionTables.h" |
| 30 | +#include "PWGLF/DataModel/LFParticleIdentification.h" |
30 | 31 |
|
31 | 32 | // ROOT includes |
32 | 33 | #include "TPDGCode.h" |
@@ -1578,7 +1579,7 @@ struct QaEfficiency { |
1578 | 1579 | if constexpr (doFillHisto) { |
1579 | 1580 | histos.fill(countingHisto, trkCutIdxPassedDcaZMax); |
1580 | 1581 | } |
1581 | | - if (std::abs(track.passedDCAz()) < minDcaZ) { |
| 1582 | + if (std::abs(track.dcaZ()) < minDcaZ) { |
1582 | 1583 | return false; |
1583 | 1584 | } |
1584 | 1585 | if constexpr (doFillHisto) { |
@@ -1635,30 +1636,33 @@ struct QaEfficiency { |
1635 | 1636 | histos.fill(countingHisto, trkCutIdxPassedTOFPartial); |
1636 | 1637 | } |
1637 | 1638 | } |
1638 | | - |
| 1639 | + bool isTrackSelectedAfteAll = false; |
1639 | 1640 | switch (globalTrackSelection) { |
1640 | 1641 | case 0: |
1641 | | - return true; |
| 1642 | + isTrackSelectedAfteAll = true; |
1642 | 1643 | case 1: |
1643 | | - return track.isGlobalTrack(); |
| 1644 | + isTrackSelectedAfteAll = track.isGlobalTrack(); |
1644 | 1645 | case 2: |
1645 | | - return track.isGlobalTrackWoPtEta(); |
| 1646 | + isTrackSelectedAfteAll = track.isGlobalTrackWoPtEta(); |
1646 | 1647 | case 3: |
1647 | | - return track.isGlobalTrackWoDCA(); |
| 1648 | + isTrackSelectedAfteAll = track.isGlobalTrackWoDCA(); |
1648 | 1649 | case 4: |
1649 | | - return track.isQualityTrack(); |
| 1650 | + isTrackSelectedAfteAll = track.isQualityTrack(); |
1650 | 1651 | case 5: |
1651 | | - return track.isInAcceptanceTrack(); |
| 1652 | + isTrackSelectedAfteAll = track.isInAcceptanceTrack(); |
1652 | 1653 | case 6: |
1653 | | - return customTrackCuts.IsSelected(track); |
| 1654 | + isTrackSelectedAfteAll = customTrackCuts.IsSelected(track); |
1654 | 1655 | default: |
1655 | 1656 | LOG(fatal) << "Can't interpret track asked selection " << globalTrackSelection; |
1656 | 1657 | } |
| 1658 | + if (!isTrackSelectedAfteAll) { |
| 1659 | + return false; |
| 1660 | + } |
1657 | 1661 | if constexpr (doFillHisto) { |
1658 | 1662 | histos.fill(countingHisto, trkCutIdxPassedGlobal); |
1659 | 1663 | } |
1660 | 1664 |
|
1661 | | - return false; |
| 1665 | + return true; |
1662 | 1666 | } |
1663 | 1667 |
|
1664 | 1668 | // MC process |
@@ -1909,6 +1913,99 @@ struct QaEfficiency { |
1909 | 1913 | } |
1910 | 1914 | PROCESS_SWITCH(QaEfficiency, processData, "process data", true); |
1911 | 1915 |
|
| 1916 | + void processDataWithPID(o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>::iterator const& collision, |
| 1917 | + o2::soa::Join<TrackCandidates, o2::aod::pidTPCLfFullDe> const& tracks) |
| 1918 | + { |
| 1919 | + |
| 1920 | + if (!isCollisionSelected<false>(collision)) { |
| 1921 | + return; |
| 1922 | + } |
| 1923 | + |
| 1924 | + for (const auto& track : tracks) { |
| 1925 | + if (!isTrackSelected<false>(track, HIST("Data/trackSelection"))) { |
| 1926 | + continue; |
| 1927 | + } |
| 1928 | + if (abs(track.tpcNSigmaDe()) > 3.f) { |
| 1929 | + continue; |
| 1930 | + } |
| 1931 | + histos.fill(HIST("Data/trackLength"), track.length()); |
| 1932 | + |
| 1933 | + if (passedITS) { |
| 1934 | + if (track.sign() > 0) { |
| 1935 | + histos.fill(HIST("Data/pos/pt/its"), track.pt()); |
| 1936 | + histos.fill(HIST("Data/pos/eta/its"), track.eta()); |
| 1937 | + histos.fill(HIST("Data/pos/phi/its"), track.phi()); |
| 1938 | + histos.fill(HIST("Data/pos/etaphi/its"), track.eta(), track.phi()); |
| 1939 | + } else { |
| 1940 | + histos.fill(HIST("Data/neg/pt/its"), track.pt()); |
| 1941 | + histos.fill(HIST("Data/neg/eta/its"), track.eta()); |
| 1942 | + histos.fill(HIST("Data/neg/phi/its"), track.phi()); |
| 1943 | + histos.fill(HIST("Data/neg/etaphi/its"), track.eta(), track.phi()); |
| 1944 | + } |
| 1945 | + } |
| 1946 | + |
| 1947 | + if (passedTPC) { |
| 1948 | + if (track.sign() > 0) { |
| 1949 | + histos.fill(HIST("Data/pos/pt/tpc"), track.pt()); |
| 1950 | + histos.fill(HIST("Data/pos/eta/tpc"), track.eta()); |
| 1951 | + histos.fill(HIST("Data/pos/phi/tpc"), track.phi()); |
| 1952 | + histos.fill(HIST("Data/pos/etaphi/tpc"), track.eta(), track.phi()); |
| 1953 | + } else { |
| 1954 | + histos.fill(HIST("Data/neg/pt/tpc"), track.pt()); |
| 1955 | + histos.fill(HIST("Data/neg/eta/tpc"), track.eta()); |
| 1956 | + histos.fill(HIST("Data/neg/phi/tpc"), track.phi()); |
| 1957 | + histos.fill(HIST("Data/neg/etaphi/tpc"), track.eta(), track.phi()); |
| 1958 | + } |
| 1959 | + } |
| 1960 | + |
| 1961 | + if (passedITS && passedTPC) { |
| 1962 | + if (track.sign() > 0) { |
| 1963 | + histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); |
| 1964 | + histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); |
| 1965 | + histos.fill(HIST("Data/pos/phi/its_tpc"), track.phi()); |
| 1966 | + histos.fill(HIST("Data/pos/etaphi/its_tpc"), track.eta(), track.phi()); |
| 1967 | + } else { |
| 1968 | + histos.fill(HIST("Data/neg/pt/its_tpc"), track.pt()); |
| 1969 | + histos.fill(HIST("Data/neg/eta/its_tpc"), track.eta()); |
| 1970 | + histos.fill(HIST("Data/neg/phi/its_tpc"), track.phi()); |
| 1971 | + histos.fill(HIST("Data/neg/etaphi/its_tpc"), track.eta(), track.phi()); |
| 1972 | + } |
| 1973 | + } |
| 1974 | + |
| 1975 | + if (passedITS && passedTPC && passedTOF) { |
| 1976 | + if (track.sign() > 0) { |
| 1977 | + histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); |
| 1978 | + histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); |
| 1979 | + histos.fill(HIST("Data/pos/phi/its_tpc_tof"), track.phi()); |
| 1980 | + histos.fill(HIST("Data/pos/etaphi/its_tpc_tof"), track.eta(), track.phi()); |
| 1981 | + } else { |
| 1982 | + histos.fill(HIST("Data/neg/pt/its_tpc_tof"), track.pt()); |
| 1983 | + histos.fill(HIST("Data/neg/eta/its_tpc_tof"), track.eta()); |
| 1984 | + histos.fill(HIST("Data/neg/phi/its_tpc_tof"), track.phi()); |
| 1985 | + histos.fill(HIST("Data/neg/etaphi/its_tpc_tof"), track.eta(), track.phi()); |
| 1986 | + } |
| 1987 | + } |
| 1988 | + |
| 1989 | + if (makeEff) { |
| 1990 | + if (passedITS) { |
| 1991 | + effITSTPCMatchingVsPt->Fill(passedTPC, track.pt()); |
| 1992 | + } |
| 1993 | + if (passedTPC) { |
| 1994 | + effTPCITSMatchingVsPt->Fill(passedITS, track.pt()); |
| 1995 | + } |
| 1996 | + if (passedITS && passedTPC) { |
| 1997 | + effTPCTOFMatchingVsPt->Fill(passedTOF, track.pt()); |
| 1998 | + effTPCTOFMatchingVsP->Fill(passedTOF, track.p()); |
| 1999 | + effTPCTOFMatchingVsEta->Fill(passedTOF, track.eta()); |
| 2000 | + effTPCTOFMatchingVsPhi->Fill(passedTOF, track.phi()); |
| 2001 | + effTPCTOFMatchingVsPtVsEta->Fill(passedTOF, track.pt(), track.eta()); |
| 2002 | + effTPCTOFMatchingVsPtVsPhi->Fill(passedTOF, track.pt(), track.phi()); |
| 2003 | + } |
| 2004 | + } |
| 2005 | + } |
| 2006 | + } |
| 2007 | + PROCESS_SWITCH(QaEfficiency, processDataWithPID, "process data with PID", false); |
| 2008 | + |
1912 | 2009 | void processHmpid(o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>::iterator const& collision, |
1913 | 2010 | TrackCandidates const& tracks, |
1914 | 2011 | o2::aod::HMPIDs const& hmpids) |
|
0 commit comments