Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 49 additions & 49 deletions PWGDQ/Tasks/tableReader_withAssoc.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1280,8 +1280,8 @@ struct AnalysisSameEventPairing {
Configurable<std::string> fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"};
Configurable<bool> fConfigQA{"cfgQA", true, "If true, fill output histograms"};
Configurable<bool> fConfigAmbiguousMuonHistograms{"cfgAmbiguousMuonHistograms", true, "If true, fill ambiguous histograms"};
//option for TR pair fill

// option for TR pair fill
Configurable<bool> fConfigTRPairs{"cfgFillTRPairs", false, "If true, fill Track rotation pairs"};
Configurable<int> fConfigNRotations{"cfgNRotations", 20, "Number of rotations for track rotation method"};

Expand Down Expand Up @@ -2137,67 +2137,67 @@ struct AnalysisSameEventPairing {

// edit
// rotation 20 times
if (fConfigTRPairs) {
if constexpr (TPairType == VarManager::kDecayToEE) {
twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask;
if (fConfigTRPairs) {
if constexpr (TPairType == VarManager::kDecayToEE) {
twoTrackFilter = a1.isBarrelSelected_raw() & a2.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isBarrelSelectedPrefilter_raw() & fTrackFilterMask;

if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue
continue;
}
if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue
continue;
}

auto t1 = a1.template reducedtrack_as<TTracks>();
auto t2 = a2.template reducedtrack_as<TTracks>();
sign1 = t1.sign();
sign2 = t2.sign();
if (t1.barrelAmbiguityInBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 28);
}
if (t2.barrelAmbiguityInBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 29);
}
if (t1.barrelAmbiguityOutOfBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 30);
}
if (t2.barrelAmbiguityOutOfBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 31);
}
auto t1 = a1.template reducedtrack_as<TTracks>();
auto t2 = a2.template reducedtrack_as<TTracks>();
sign1 = t1.sign();
sign2 = t2.sign();
if (t1.barrelAmbiguityInBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 28);
}
if (t2.barrelAmbiguityInBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 29);
}
if (t1.barrelAmbiguityOutOfBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 30);
}
if (t2.barrelAmbiguityOutOfBunch() > 1) {
twoTrackFilter |= (static_cast<uint32_t>(1) << 31);
}

for (int icut = 0; icut < ncuts; icut++) {
if (twoTrackFilter & (static_cast<uint32_t>(1) << icut)) {
isAmbiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29));
isAmbiOutOfBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 30)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31));
isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch);
isLeg1Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 28) || (twoTrackFilter & (static_cast<uint32_t>(1) << 30)));
isLeg2Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 29) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31)));
if constexpr (TPairType == VarManager::kDecayToEE) {
if (isLeg1Ambi && isLeg2Ambi) {
std::pair<uint32_t, uint32_t> iPair(a1.reducedtrackId(), a2.reducedtrackId());
if (fAmbiguousPairs.find(iPair) != fAmbiguousPairs.end()) {
if (fAmbiguousPairs[iPair] & (static_cast<uint32_t>(1) << icut)) { // if this pair is already stored with this cut
isAmbiExtra = true;
for (int icut = 0; icut < ncuts; icut++) {
if (twoTrackFilter & (static_cast<uint32_t>(1) << icut)) {
isAmbiInBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 28)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 29));
isAmbiOutOfBunch = (twoTrackFilter & (static_cast<uint32_t>(1) << 30)) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31));
isUnambiguous = !(isAmbiInBunch || isAmbiOutOfBunch);
isLeg1Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 28) || (twoTrackFilter & (static_cast<uint32_t>(1) << 30)));
isLeg2Ambi = (twoTrackFilter & (static_cast<uint32_t>(1) << 29) || (twoTrackFilter & (static_cast<uint32_t>(1) << 31)));
if constexpr (TPairType == VarManager::kDecayToEE) {
if (isLeg1Ambi && isLeg2Ambi) {
std::pair<uint32_t, uint32_t> iPair(a1.reducedtrackId(), a2.reducedtrackId());
if (fAmbiguousPairs.find(iPair) != fAmbiguousPairs.end()) {
if (fAmbiguousPairs[iPair] & (static_cast<uint32_t>(1) << icut)) { // if this pair is already stored with this cut
isAmbiExtra = true;
} else {
fAmbiguousPairs[iPair] |= static_cast<uint32_t>(1) << icut;
}
} else {
fAmbiguousPairs[iPair] |= static_cast<uint32_t>(1) << icut;
fAmbiguousPairs[iPair] = static_cast<uint32_t>(1) << icut;
}
} else {
fAmbiguousPairs[iPair] = static_cast<uint32_t>(1) << icut;
}
}
}
if (sign1 * sign2 < 0) {
for (int i = 0; i < fConfigNRotations.value; i++) {
VarManager::FillPairRotation<TPairType, TTrackFillMap>(t1, t2);
if constexpr (TPairType == VarManager::kDecayToEE) {
fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), VarManager::fgValues);
if (isAmbiExtra) {
fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), VarManager::fgValues);
if (sign1 * sign2 < 0) {
for (int i = 0; i < fConfigNRotations.value; i++) {
VarManager::FillPairRotation<TPairType, TTrackFillMap>(t1, t2);
if constexpr (TPairType == VarManager::kDecayToEE) {
fHistMan->FillHistClass(Form("PairsBarrelTRPM_%s", fTrackCuts[icut].Data()), VarManager::fgValues);
if (isAmbiExtra) {
fHistMan->FillHistClass(Form("PairsBarrelTRPM_ambiguousextra_%s", fTrackCuts[icut].Data()), VarManager::fgValues);
}
}
}
}
}
}
}
}
}
// end
} // end loop over pairs of track associations
VarManager::fgValues[VarManager::kNPairsPerEvent] = fNPairPerEvent;
Expand Down