Skip to content

Commit 2f2da24

Browse files
Jinhyun ParkJinhyun Park
authored andcommitted
Merge branch 'master' of https://github.com/AliceO2Group/O2Physics into update
2 parents e8c5705 + 0db20fc commit 2f2da24

51 files changed

Lines changed: 4283 additions & 1248 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ALICE3/Tasks/alice3-qa-singleparticle.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
/// \brief Task to monitor the single particle QA, at the particle and track level, showing the tracked and the origin of particles
1616
///
1717

18+
#include <CommonConstants/PhysicsConstants.h>
1819
#include <Framework/ASoA.h>
1920
#include <Framework/AnalysisDataModel.h>
2021
#include <Framework/AnalysisHelpers.h>
@@ -88,10 +89,10 @@ struct Alice3SingleParticle {
8889
pdg->AddParticle("triton", "triton", 2.8089218, kTRUE, 0.0, 3, "Nucleus", 1000010030);
8990
pdg->AddAntiParticle("anti-triton", -1000010030);
9091

91-
pdg->AddParticle("helium3", "helium3", 2.80839160743, kTRUE, 0.0, 6, "Nucleus", 1000020030);
92+
pdg->AddParticle("helium3", "helium3", o2::constants::physics::MassHelium3, kTRUE, 0.0, 6, "Nucleus", 1000020030);
9293
pdg->AddAntiParticle("anti-helium3", -1000020030);
9394

94-
pdg->AddParticle("helium4", "helium4", 2.80839160743, kTRUE, 0.0, 6, "Nucleus", 1000020040);
95+
pdg->AddParticle("helium4", "helium4", o2::constants::physics::MassAlpha, kTRUE, 0.0, 6, "Nucleus", 1000020040);
9596
pdg->AddAntiParticle("anti-helium4", -1000020040);
9697

9798
const TString tit = Form("%i", PDG.value);

ALICE3/Tasks/alice3DecayerQa.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ struct Alice3DecayerQa {
132132

133133
void process(const aod::McCollision& collision, const aod::McParticles& particles)
134134
{
135-
LOG(info) << particles.size();
136135
// Group with collision
137136
auto trueElectronsGrouped = trueElectrons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
138137
auto trueMuonsGrouped = trueMuons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);

Common/Tasks/centralityStudy.cxx

Lines changed: 158 additions & 68 deletions
Large diffs are not rendered by default.

Common/Tools/TrackPropagationModule.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,18 +234,24 @@ class TrackPropagationModule
234234
return; // suppress everything
235235
}
236236

237+
// Reserve every cursor filled in the loop below: reserve() switches the
238+
// cursor to the unsafe (no bounds check) append, so a cursor filled
239+
// without it pays the safe per-row append. The Par/ParExtension/DCA
240+
// tables are filled in the covariance branch as well.
241+
cursors.tracksParPropagated.reserve(tracks.size());
242+
cursors.tracksParExtensionPropagated.reserve(tracks.size());
243+
if (fillTracksDCA) {
244+
cursors.tracksDCA.reserve(tracks.size());
245+
}
237246
if (fillTracksCov) {
238247
cursors.tracksParCovPropagated.reserve(tracks.size());
239248
cursors.tracksParCovExtensionPropagated.reserve(tracks.size());
240249
if (fillTracksDCACov) {
241250
cursors.tracksDCACov.reserve(tracks.size());
242251
}
243-
} else {
244-
cursors.tracksParPropagated.reserve(tracks.size());
245-
cursors.tracksParExtensionPropagated.reserve(tracks.size());
246-
if (fillTracksDCA) {
247-
cursors.tracksDCA.reserve(tracks.size());
248-
}
252+
}
253+
if (cGroup.useTrackTuner.value && cGroup.fillTrackTunerTable.value) {
254+
cursors.tunertable.reserve(tracks.size());
249255
}
250256

251257
for (const auto& track : tracks) {

PWGCF/Femto/FemtoNuclei/TableProducer/HadNucleiFemto.cxx

Lines changed: 122 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ struct HadNucleiFemto {
273273
// Candidate topology and kinematics
274274
{"hTrackSel", "Accepted hadron tracks", {HistType::kTH1F, {{Selections::kAll, -0.5, static_cast<double>(Selections::kAll) - 0.5}}}},
275275
{"hTrackSelDe", "Accepted deuteron tracks", {HistType::kTH1F, {{Selections::kAll, -0.5, static_cast<double>(Selections::kAll) - 0.5}}}},
276+
{"hDePairFlow", "Deuteron pair-building flow;step;counts", {HistType::kTH1F, {{3, -0.5, 2.5}}}},
276277

277278
{"hdcaxyNu", ";DCA_{xy} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}},
278279
{"hdcazNu", ";DCA_{z} (cm)", {HistType::kTH1F, {{200, -1.0f, 1.0f}}}},
@@ -577,12 +578,45 @@ struct HadNucleiFemto {
577578
template <typename Ttrack>
578579
bool selectTrackHadron(const Ttrack& candidate)
579580
{
581+
if (settingHadPDGCode.value == static_cast<int>(PDG_t::kProton)) {
582+
return selectTrackProton(candidate);
583+
}
580584
if (useReferencePionCuts()) {
581585
return selectTrackPionReference(candidate);
582586
}
583587
return selectTrack(candidate);
584588
}
585589

590+
template <typename Ttrack>
591+
bool selectTrackProton(const Ttrack& candidate)
592+
{
593+
constexpr float protonEtaMax = 0.8f;
594+
constexpr int protonTPCNClsFoundMin = 90;
595+
constexpr int protonTPCCrossedRowsMin = 80;
596+
constexpr float protonDCAzMax = 0.2f;
597+
598+
if (std::abs(candidate.eta()) >= protonEtaMax) {
599+
return false;
600+
}
601+
602+
const float absPt = std::abs(candidate.pt());
603+
if (absPt <= 0.f) {
604+
return false;
605+
}
606+
607+
if (candidate.tpcNClsFound() <= protonTPCNClsFoundMin ||
608+
candidate.tpcNClsCrossedRows() <= protonTPCCrossedRowsMin) {
609+
return false;
610+
}
611+
612+
const float prDCAxyMax = 105.e-3f + 30.5e-3f / std::pow(absPt, 1.1f);
613+
if (std::abs(candidate.dcaXY()) >= prDCAxyMax || std::abs(candidate.dcaZ()) >= protonDCAzMax) {
614+
return false;
615+
}
616+
617+
return true;
618+
}
619+
586620
template <typename Ttrack>
587621
bool selectTrackDe(const Ttrack& candidate)
588622
{
@@ -690,6 +724,51 @@ struct HadNucleiFemto {
690724
return isRejected;
691725
}
692726

727+
template <typename Ttrack>
728+
bool selectionPIDProton(const Ttrack& candidate)
729+
{
730+
constexpr float protonPtMin = 0.5f;
731+
constexpr float protonPtMax = 3.0f;
732+
constexpr float protonPCombMin = 0.75f;
733+
constexpr float protonTPCNsigmaMax = 3.0f;
734+
constexpr float protonCombNsigmaMax = 3.0f;
735+
736+
const float tpcNSigmaPr = candidate.tpcNSigmaPr();
737+
mQaRegistry.fill(HIST("h2NsigmaHadTPC_preselection"), candidate.sign() * candidate.tpcInnerParam(), tpcNSigmaPr);
738+
739+
if (std::abs(candidate.pt()) <= protonPtMin || std::abs(candidate.pt()) >= protonPtMax) {
740+
return false;
741+
}
742+
743+
const float absPin = std::abs(candidate.tpcInnerParam());
744+
if (absPin < protonPCombMin) {
745+
if (std::abs(tpcNSigmaPr) > protonTPCNsigmaMax) {
746+
return false;
747+
}
748+
mQaRegistry.fill(HIST("h2NsigmaHadTPC"), candidate.sign() * candidate.pt(), tpcNSigmaPr);
749+
mQaRegistry.fill(HIST("h2dEdxHadcandidates"), candidate.sign() * candidate.tpcInnerParam(), candidate.tpcSignal());
750+
return true;
751+
}
752+
753+
if (!candidate.hasTOF()) {
754+
return false;
755+
}
756+
757+
const float tofNSigmaPr = candidate.tofNSigmaPr();
758+
const float combNsigma = std::sqrt(tpcNSigmaPr * tpcNSigmaPr + tofNSigmaPr * tofNSigmaPr);
759+
mQaRegistry.fill(HIST("h2NsigmaHadTOF_preselection"), candidate.sign() * candidate.pt(), tofNSigmaPr);
760+
mQaRegistry.fill(HIST("h2NsigmaHadComb_preselection"), candidate.sign() * candidate.pt(), combNsigma);
761+
if (combNsigma > protonCombNsigmaMax) {
762+
return false;
763+
}
764+
765+
mQaRegistry.fill(HIST("h2NsigmaHadTPC"), candidate.sign() * candidate.pt(), tpcNSigmaPr);
766+
mQaRegistry.fill(HIST("h2NsigmaHadTOF"), candidate.sign() * candidate.pt(), tofNSigmaPr);
767+
mQaRegistry.fill(HIST("h2NsigmaHadComb"), candidate.sign() * candidate.pt(), combNsigma);
768+
mQaRegistry.fill(HIST("h2dEdxHadcandidates"), candidate.sign() * candidate.tpcInnerParam(), candidate.tpcSignal());
769+
return true;
770+
}
771+
693772
template <typename Ttrack>
694773
bool selectionPIDKaon(const Ttrack& candidate)
695774
{
@@ -840,12 +919,30 @@ struct HadNucleiFemto {
840919
} else if (settingHadPDGCode == PDG_t::kKPlus) {
841920
PID = selectionPIDKaon(candidate);
842921
MassHad = o2::constants::physics::MassKPlus;
922+
} else if (settingHadPDGCode == PDG_t::kProton) {
923+
PID = selectionPIDProton(candidate);
924+
MassHad = o2::constants::physics::MassProton;
843925
} else {
844926
LOG(info) << "invalid PDG code";
845927
}
846928
return PID;
847929
}
848930

931+
template <typename Ttrack>
932+
float getHadronTPCNSigma(const Ttrack& candidate) const
933+
{
934+
if (settingHadPDGCode.value == static_cast<int>(PDG_t::kPiPlus)) {
935+
return candidate.tpcNSigmaPi();
936+
}
937+
if (settingHadPDGCode.value == static_cast<int>(PDG_t::kKPlus)) {
938+
return candidate.tpcNSigmaKa();
939+
}
940+
if (settingHadPDGCode.value == static_cast<int>(PDG_t::kProton)) {
941+
return candidate.tpcNSigmaPr();
942+
}
943+
return -10.f;
944+
}
945+
849946
template <typename Ttrack>
850947
float computeNSigmaDe(const Ttrack& candidate)
851948
{
@@ -1018,7 +1115,7 @@ struct HadNucleiFemto {
10181115

10191116
hadNucand.nTPCClustersNu = trackDe.tpcNClsFound();
10201117
hadNucand.nSigmaNu = computeNSigmaDe(trackDe);
1021-
// hadNucand.nSigmaHad = trackHad.tpcNSigmaPi();
1118+
hadNucand.nSigmaHad = getHadronTPCNSigma(trackHad);
10221119

10231120
hadNucand.chi2TPCNu = trackDe.tpcChi2NCl();
10241121
hadNucand.chi2TPCHad = trackHad.tpcChi2NCl();
@@ -1104,7 +1201,7 @@ struct HadNucleiFemto {
11041201
hadHypercand.tpcSignalHad = trackHad.tpcSignal();
11051202
hadHypercand.tpcSignalNu = V0Hyper.tpcSignalHe();
11061203
hadHypercand.momHadTPC = trackHad.tpcInnerParam();
1107-
hadHypercand.nSigmaHad = trackHad.tpcNSigmaPi();
1204+
hadHypercand.nSigmaHad = getHadronTPCNSigma(trackHad);
11081205
hadHypercand.nSigmaNu = V0Hyper.nSigmaHe();
11091206
hadHypercand.chi2TPCHad = trackHad.tpcChi2NCl();
11101207
hadHypercand.chi2TPCNu = V0Hyper.tpcChi2He();
@@ -1146,6 +1243,10 @@ struct HadNucleiFemto {
11461243
mQaRegistry.fill(HIST("hTrackSel"), Selections::kPID);
11471244
mQaRegistry.fill(HIST("hSingleNuPt"), track0.pt() * track0.sign());
11481245
mQaRegistry.fill(HIST("hSingleNuPin"), track0.tpcInnerParam() * track0.sign());
1246+
mQaRegistry.fill(HIST("hDePairFlow"), 0);
1247+
1248+
bool hasHadronSelected = false;
1249+
bool hasStoredPair = false;
11491250

11501251
for (const auto& track1 : tracks) {
11511252
if (track0 == track1) {
@@ -1164,6 +1265,7 @@ struct HadNucleiFemto {
11641265
if (!selectTrackHadron(track1) || !selectionPIDHadron(track1)) {
11651266
continue;
11661267
}
1268+
hasHadronSelected = true;
11671269
if (isClosePair(track0, track1)) {
11681270
continue;
11691271
}
@@ -1175,6 +1277,14 @@ struct HadNucleiFemto {
11751277
CollBracket collBracket{collIdx, collIdx};
11761278
trackPair.collBracket = collBracket;
11771279
mTrackPairs.push_back(trackPair);
1280+
hasStoredPair = true;
1281+
}
1282+
1283+
if (hasHadronSelected) {
1284+
mQaRegistry.fill(HIST("hDePairFlow"), 1);
1285+
}
1286+
if (hasStoredPair) {
1287+
mQaRegistry.fill(HIST("hDePairFlow"), 2);
11781288
}
11791289
}
11801290
}
@@ -1628,6 +1738,16 @@ PROCESS_SWITCH(HadNucleiFemto, processMixedEventHyper, "Process Mixed event", fa
16281738
mQaRegistry.fill(HIST("purity/h2NsigmaHadTOF_preselection"), track.sign() * track.pt(), tofNSigmaHad);
16291739
mQaRegistry.fill(HIST("purity/h2NsigmaHadComb_preselection"), track.sign() * track.pt(), combNsigmaHad);
16301740
}
1741+
} else if (passTrackHad && settingHadPDGCode == PDG_t::kProton) {
1742+
constexpr float protonPCombMin = 0.75f;
1743+
const float tpcNSigmaHad = track.tpcNSigmaPr();
1744+
mQaRegistry.fill(HIST("purity/h2NsigmaHadTPC_preselection"), track.sign() * track.pt(), tpcNSigmaHad);
1745+
if (track.hasTOF() && std::abs(track.tpcInnerParam()) >= protonPCombMin) {
1746+
const float tofNSigmaHad = track.tofNSigmaPr();
1747+
const float combNsigmaHad = std::sqrt(tofNSigmaHad * tofNSigmaHad + tpcNSigmaHad * tpcNSigmaHad);
1748+
mQaRegistry.fill(HIST("purity/h2NsigmaHadTOF_preselection"), track.sign() * track.pt(), tofNSigmaHad);
1749+
mQaRegistry.fill(HIST("purity/h2NsigmaHadComb_preselection"), track.sign() * track.pt(), combNsigmaHad);
1750+
}
16311751
}
16321752

16331753
if (passTrackDe) {

PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,12 @@ struct singleTrackSelector {
184184
registry.add("hGen_EtaPhiPt_Deuteron", "Gen (anti)deuteron in true collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
185185
registry.add("hGen_EtaPhiPt_Helium3", "Gen (anti)Helium3 in true collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
186186
registry.add("hGen_EtaPhiPt_Triton", "Gen (anti)triton in true collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
187+
registry.add("hGen_EtaYPt_Triton", "Gen (anti)triton in true collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {100, -1., 1., "y"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
187188
registry.add("hReco_EtaPhiPt_Proton", "Gen (anti)protons in reco collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
188189
registry.add("hReco_EtaPhiPt_Deuteron", "Gen (anti)deuteron in reco collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
189190
registry.add("hReco_EtaPhiPt_Helium3", "Gen (anti)Helium3 in reco collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
190191
registry.add("hReco_EtaPhiPt_Triton", "Gen (anti)triton in reco collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {157, 0., o2::constants::math::TwoPI, "#phi"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
192+
registry.add("hReco_EtaYPt_Triton", "Gen (anti)triton in reco collisions", {HistType::kTH3F, {{100, -1., 1., "#eta"}, {100, -1., 1., "y"}, {100, -5.f, 5.f, "p_{T} GeV/c"}}});
191193
}
192194
}
193195

@@ -587,8 +589,11 @@ struct singleTrackSelector {
587589

588590
if (mcParticle.pdgCode() == 1000010030) {
589591
registry.fill(HIST("hReco_EtaPhiPt_Triton"), mcParticle.eta(), mcParticle.phi(), mcParticle.pt());
592+
registry.fill(HIST("hReco_EtaYPt_Triton"), mcParticle.eta(), mcParticle.y(), mcParticle.pt());
593+
590594
} else if (mcParticle.pdgCode() == -1000010030) {
591595
registry.fill(HIST("hReco_EtaPhiPt_Triton"), mcParticle.eta(), mcParticle.phi(), mcParticle.pt() * -1);
596+
registry.fill(HIST("hReco_EtaYPt_Triton"), mcParticle.eta(), mcParticle.y(), mcParticle.pt() * -1);
592597
}
593598
}
594599
}
@@ -633,8 +638,10 @@ struct singleTrackSelector {
633638

634639
if (mcParticle.pdgCode() == 1000010030) {
635640
registry.fill(HIST("hGen_EtaPhiPt_Triton"), mcParticle.eta(), mcParticle.phi(), mcParticle.pt());
641+
registry.fill(HIST("hGen_EtaYPt_Triton"), mcParticle.eta(), mcParticle.y(), mcParticle.pt());
636642
} else if (mcParticle.pdgCode() == -1000010030) {
637643
registry.fill(HIST("hGen_EtaPhiPt_Triton"), mcParticle.eta(), mcParticle.phi(), mcParticle.pt() * -1);
644+
registry.fill(HIST("hGen_EtaYPt_Triton"), mcParticle.eta(), mcParticle.y(), mcParticle.pt() * -1);
638645
}
639646
}
640647
}

PWGCF/FemtoUniverse/Core/FemtoUniverseFemtoContainer.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,10 @@ class FemtoUniverseFemtoContainer
205205
/// \param part2 Particle two
206206
/// \param mult Multiplicity of the event
207207
template <bool isMC, typename T>
208-
void setPair(T const& part1, T const& part2, const int mult, bool use3dplots)
208+
void setPair(T const& part1, T const& part2, const int mult, bool use3dplots, bool onlyPrimaryMC = false)
209209
{
210210
float femtoObs, femtoObsMC;
211+
211212
// Calculate femto observable and the mT with reconstructed information
212213
if constexpr (kFemtoObs == femto_universe_femto_container::Observable::kstar) {
213214
femtoObs = FemtoUniverseMath::getkstar(part1, kMassOne, part2, kMassTwo);
@@ -226,8 +227,10 @@ class FemtoUniverseFemtoContainer
226227
const float mTMC = FemtoUniverseMath::getmT(part1.fdMCParticle(), kMassOne, part2.fdMCParticle(), kMassTwo);
227228

228229
if (std::abs(part1.fdMCParticle().pdgMCTruth()) == std::abs(kPDGOne) && std::abs(part2.fdMCParticle().pdgMCTruth()) == std::abs(kPDGTwo)) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
229-
setPairBase<o2::aod::femtouniverse_mc_particle::MCType::kTruth>(femtoObsMC, mTMC, part1.fdMCParticle(), part2.fdMCParticle(), mult, use3dplots);
230-
setPairMC(femtoObsMC, femtoObs, mT, mult);
230+
if (!onlyPrimaryMC || (part1.fdMCParticle().partOriginMCTruth() == o2::aod::femtouniverse_mc_particle::kPrimary && part2.fdMCParticle().partOriginMCTruth() == o2::aod::femtouniverse_mc_particle::kPrimary)) {
231+
setPairBase<o2::aod::femtouniverse_mc_particle::MCType::kTruth>(femtoObsMC, mTMC, part1.fdMCParticle(), part1.fdMCParticle(), mult, use3dplots);
232+
setPairMC(femtoObsMC, femtoObs, mT, mult);
233+
}
231234
} else {
232235
kHistogramRegistry->fill(HIST(kFolderSuffix[kEventType]) + HIST(o2::aod::femtouniverse_mc_particle::MCTypeName[o2::aod::femtouniverse_mc_particle::MCType::kTruth]) + HIST("/hFakePairsCounter"), 0);
233236
}

PWGCF/FemtoUniverse/Core/FemtoUniversePairSHCentMultKt.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ class PairSHCentMultKt
8484
int em = 0;
8585
int il = 0;
8686
do {
87-
8887
fels[il] = el;
8988
fems[il] = em;
9089
felsi[il] = static_cast<int>(el);
@@ -245,10 +244,10 @@ class PairSHCentMultKt
245244
/// Set the PDG codes of the two particles involved
246245
/// \param pdg1 PDG code of particle one
247246
/// \param pdg2 PDG code of particle two
248-
void setPionPairMass()
247+
void setPairMass(const float mass1, const float mass2)
249248
{
250-
mMassOne = o2::constants::physics::MassPiPlus; // FIXME: Get from the PDG service of the common header
251-
mMassTwo = o2::constants::physics::MassPiPlus; // FIXME: Get from the PDG service of the common header
249+
mMassOne = mass1;
250+
mMassTwo = mass2;
252251
}
253252

254253
/// To compute the bin value for cavariance matrix
@@ -278,10 +277,8 @@ class PairSHCentMultKt
278277
int fKtBin = ktval;
279278
std::vector<std::complex<double>> fYlmBuffer(kMaxJM);
280279
std::vector<double> f3d;
281-
setPionPairMass();
282280

283-
f3d = FemtoUniverseMath::newpairfunc(part1, mMassOne, part2, mMassTwo,
284-
isIdenLCMS, isWeight, isIdenPRF);
281+
f3d = FemtoUniverseMath::newpairfunc(part1, mMassOne, part2, mMassTwo, isIdenLCMS, isWeight, isIdenPRF);
285282
double varout = 0.0;
286283
double varside = 0.0;
287284
double varlong = 0.0;

0 commit comments

Comments
 (0)