Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PWGJE] Implementation of Hadronic Correction task #9084

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

Archita-Dash
Copy link
Contributor

Hadronic Correction in the EMCAL framework is implemented to avoid the double counting of the charged particles' contribution in jets.

@github-actions github-actions bot changed the title Implementation of Hadronic Correction task [PWGJE] Implementation of Hadronic Correction task Dec 20, 2024
Archita-Dash added a commit to Archita-Dash/O2Physics that referenced this pull request Dec 20, 2024
[PWGJE] Please consider the following formatting changes to AliceO2Group#9084
@nzardosh
Copy link
Collaborator

Hi Archita, thanks for the PR. Just to understand, this would mean that for jet finding the corrected cluster energy would be used instead of the standard cluster energy? otherwise it is all the same?

@Archita-Dash
Copy link
Contributor Author

Hi Nima. yes, that's right. The jet finder needs to use the corrected energy values (we have 4 corrected energy columns- depends on what the analyser wants). everything else remains the same.

@Archita-Dash
Copy link
Contributor Author

BTW Nima, I think the more efficient way to achieve this would be somehow to set up 4 different jet-finders for each corrected energy value such that the user can use whichever jet finder they want corresponding to the desired corrected energy.

@nzardosh
Copy link
Collaborator

BTW Nima, I think the more efficient way to achieve this would be somehow to set up 4 different jet-finders for each corrected energy value such that the user can use whichever jet finder they want corresponding to the desired corrected energy.

This would be good if the user needs to run all 4 jet finders at the same time for some reason. If they would instead each only be needed independently then i would make it a configurable in the jet finder to select which is used but only have it happen once. Let me know which is best

using namespace o2::framework;
using namespace o2::framework::expressions;
using collisionEvSelIt = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>::iterator;
using selectedClusters = o2::soa::Filtered<o2::aod::EMCALClusters>;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one thing i would recommend here is not performing this on filtered clusters, otherwise this table would not be joinable with the original cluster table, unless exactly the same filters are used everywhere.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@Archita-Dash
Copy link
Contributor Author

BTW Nima, I think the more efficient way to achieve this would be somehow to set up 4 different jet-finders for each corrected energy value such that the user can use whichever jet finder they want corresponding to the desired corrected energy.

This would be good if the user needs to run all 4 jet finders at the same time for some reason. If they would instead each only be needed independently then i would make it a configurable in the jet finder to select which is used but only have it happen once. Let me know which is best

Okay, you are right. Since each would be needed independently by the user, it makes more sense to define a configurable in the jet finder instead.

// c) If you want to do systematic studies -> perform the above two checks a) and b), and then subtract 70% energy instead of 100%

// Perform dEta/dPhi matching
double dEta = match.track_as<myTracks>().eta() - cluster.eta();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should use eta on the emcal surface instead of eta at vertex


// Perform dEta/dPhi matching
double dEta = match.track_as<myTracks>().eta() - cluster.eta();
double dPhi = TVector2::Phi_mpi_pi(match.track_as<myTracks>().phi() - cluster.phi());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

likewise this should use phi propagated to emcal surface and not at vertex

auto trackPhiLow = -funcPtDepPhi.Eval(mom);

if ((dPhi < trackPhiHigh && dPhi > trackPhiLow) && fabs(dEta) < trackEtaMax) {
if (Nmatches == 0) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while the list is indeed sorted to contain the closest track first, for safety reasons I would explicitly check that it is the closest of the ones you looped over

EclusterAll1 = subtractClusterEnergy(EclusterAll1, totalTrkP, fHadCorralltrks1, Nmatches, UseFraction1);
}

if (UseM02SubtractionScheme2) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the M02 subtraction scheme and what is the difference bewteen one and two?

registry.fill(HIST("h2_ClsEvsEclusterAll2"), cluster.energy(), EclusterAll2);

// Fill the table with all four corrected energies
hadroniccorrectedclusters(Ecluster1, Ecluster2, EclusterAll1, EclusterAll2);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how does one match this table to the cluster table? What is the index? collision id?

registry.add("h_matchedtracks", "Total matched tracks; track status;entries", {HistType::kTH1F, {{1, 0.5, 1.5}}});
}

Filter clusterDefinitionSelection = (o2::aod::emcalcluster::definition == mClusterDefinition) && (o2::aod::emcalcluster::time >= minTime) && (o2::aod::emcalcluster::time <= maxTime) && (o2::aod::emcalcluster::m02 > minM02) && (o2::aod::emcalcluster::m02 < maxM02);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we doing any cluster cuts here? I think then the resulting table will no longer be joinable to the existing cluster table. I think this task should simply provide the values for all clusters. Cluster selection should then be done in the full jet finder

// For M02 in the single photon region, the signal is primarily: Single photons, single electrons, single MIPs
if (m02 > 0.1 && m02 < 0.4) { //circular clusters(electron/photon)
Ecorr = Ecluster; // Single electron, single MIP
} else if (m02 > 0.4) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Normally (I think) if M02 is bigger than 0.4 and the number of matches is >1, there should be nothing subtracted. Could you explain why you changed the logic from the function we had in Run2?

[PWGJE] Please consider the following formatting changes to AliceO2Group#9084
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

4 participants