Skip to content
Merged
Show file tree
Hide file tree
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
68 changes: 68 additions & 0 deletions examples/aod/createO2tables.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,25 @@ TTree* MakeTreeO2collision()
return tEvents;
}

void ConnectTreeO2collision(TTree *tEvents)
{
tEvents->SetBranchAddress("fBCsID", &collision.fBCsID);
tEvents->SetBranchAddress("fPosX", &collision.fPosX);
tEvents->SetBranchAddress("fPosY", &collision.fPosY);
tEvents->SetBranchAddress("fPosZ", &collision.fPosZ);
tEvents->SetBranchAddress("fCovXX", &collision.fCovXX);
tEvents->SetBranchAddress("fCovXY", &collision.fCovXY);
tEvents->SetBranchAddress("fCovXZ", &collision.fCovXZ);
tEvents->SetBranchAddress("fCovYY", &collision.fCovYY);
tEvents->SetBranchAddress("fCovYZ", &collision.fCovYZ);
tEvents->SetBranchAddress("fCovZZ", &collision.fCovZZ);
tEvents->SetBranchAddress("fChi2", &collision.fChi2);
tEvents->SetBranchAddress("fNumContrib", &collision.fN);
tEvents->SetBranchAddress("fCollisionTime", &collision.fCollisionTime);
tEvents->SetBranchAddress("fCollisionTimeRes", &collision.fCollisionTimeRes);
tEvents->SetBranchAddress("fCollisionTimeMask", &collision.fCollisionTimeMask);
}

struct {
// MC collision
Int_t fBCsID = 0u; /// Index to BC table
Expand Down Expand Up @@ -206,6 +225,55 @@ TTree* MakeTreeO2track()
return fTracks;
}

void ConnectTreeO2track(TTree *fTracks)
{
fTracks->SetBranchAddress("fCollisionsID", &mytracks.fCollisionsID);
fTracks->SetBranchAddress("fTrackType", &mytracks.fTrackType);
// fTracks->SetBranchAddress("fTOFclsIndex", &mytracks.fTOFclsIndex);
// fTracks->SetBranchAddress("fNTOFcls", &mytracks.fNTOFcls);
fTracks->SetBranchAddress("fX", &mytracks.fX);
fTracks->SetBranchAddress("fAlpha", &mytracks.fAlpha);
fTracks->SetBranchAddress("fY", &mytracks.fY);
fTracks->SetBranchAddress("fZ", &mytracks.fZ);
fTracks->SetBranchAddress("fSnp", &mytracks.fSnp);
fTracks->SetBranchAddress("fTgl", &mytracks.fTgl);
fTracks->SetBranchAddress("fSigned1Pt", &mytracks.fSigned1Pt);
// Modified covariance matrix
fTracks->SetBranchAddress("fSigmaY", &mytracks.fSigmaY);
fTracks->SetBranchAddress("fSigmaZ", &mytracks.fSigmaZ);
fTracks->SetBranchAddress("fSigmaSnp", &mytracks.fSigmaSnp);
fTracks->SetBranchAddress("fSigmaTgl", &mytracks.fSigmaTgl);
fTracks->SetBranchAddress("fSigma1Pt", &mytracks.fSigma1Pt);
fTracks->SetBranchAddress("fRhoZY", &mytracks.fRhoZY);
fTracks->SetBranchAddress("fRhoSnpY", &mytracks.fRhoSnpY);
fTracks->SetBranchAddress("fRhoSnpZ", &mytracks.fRhoSnpZ);
fTracks->SetBranchAddress("fRhoTglY", &mytracks.fRhoTglY);
fTracks->SetBranchAddress("fRhoTglZ", &mytracks.fRhoTglZ);
fTracks->SetBranchAddress("fRhoTglSnp", &mytracks.fRhoTglSnp);
fTracks->SetBranchAddress("fRho1PtY", &mytracks.fRho1PtY);
fTracks->SetBranchAddress("fRho1PtZ", &mytracks.fRho1PtZ);
fTracks->SetBranchAddress("fRho1PtSnp", &mytracks.fRho1PtSnp);
fTracks->SetBranchAddress("fRho1PtTgl", &mytracks.fRho1PtTgl);
//
fTracks->SetBranchAddress("fTPCInnerParam", &mytracks.fTPCinnerP);
fTracks->SetBranchAddress("fFlags", &mytracks.fFlags);
fTracks->SetBranchAddress("fITSClusterMap", &mytracks.fITSClusterMap);
fTracks->SetBranchAddress("fTPCNClsFindable", &mytracks.fTPCNClsFindable);
fTracks->SetBranchAddress("fTPCNClsFindableMinusFound",&mytracks.fTPCNClsFindableMinusFound);
fTracks->SetBranchAddress("fTPCNClsFindableMinusCrossedRows", &mytracks.fTPCNClsFindableMinusCrossedRows);
fTracks->SetBranchAddress("fTPCNClsShared", &mytracks.fTPCNClsShared);
fTracks->SetBranchAddress("fTRDPattern", &mytracks.fTRDPattern);
fTracks->SetBranchAddress("fITSChi2NCl", &mytracks.fITSChi2NCl);
fTracks->SetBranchAddress("fTPCChi2NCl", &mytracks.fTPCChi2NCl);
fTracks->SetBranchAddress("fTRDChi2", &mytracks.fTRDChi2);
fTracks->SetBranchAddress("fTOFChi2", &mytracks.fTOFChi2);
fTracks->SetBranchAddress("fTPCSignal", &mytracks.fTPCSignal);
fTracks->SetBranchAddress("fTRDSignal", &mytracks.fTRDSignal);
fTracks->SetBranchAddress("fTOFSignal", &mytracks.fTOFSignal);
fTracks->SetBranchAddress("fLength", &mytracks.fLength);
fTracks->SetBranchAddress("fTOFExpMom", &mytracks.fTOFExpMom);
}

struct {
// MC particle

Expand Down
93 changes: 93 additions & 0 deletions examples/aod/inspectTOF.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
R__LOAD_LIBRARY(libDelphes)
R__LOAD_LIBRARY(libDelphesO2)

#include "createO2tables.h"

using O2Track = o2::track::TrackParCov;

void
inspectTOF(const char *filename)
{
auto fin = TFile::Open(filename);

auto tcollision = (TTree *)fin->Get("O2collision");
auto ncollision = tcollision->GetEntries();
ConnectTreeO2collision(tcollision);

auto ttracks = (TTree *)fin->Get("O2track");
auto ntracks = ttracks->GetEntries();
ConnectTreeO2track(ttracks);

/** histograms **/
auto hTZero = new TH1F("hTZero", ";t_{0} (ns)", 1000, -1., 1.);
auto hBetaP = new TH2F("hBetaP", ";#it{p} (GeV/#it{c});#it{v}/#it{c}", 500., 0., 5., 500, 0.1, 1.1);
auto hNsigmaP = new TH2F("hNsigmaP", ";#it{p} (GeV/#it{c});n#sigma_{K}", 500., 0., 5., 500, -100., 100.);

/** loop over collisions **/
for (int icollision = 0; icollision < ncollision; ++icollision) {
tcollision->GetEntry(icollision);
auto t0 = collision.fCollisionTime;
auto t0e = collision.fCollisionTimeRes;
hTZero->Fill(t0 * 0.001);
}

/** loop over tracks **/
for (int itrack = 0; itrack < ntracks; ++itrack) {

/** get track **/
ttracks->GetEntry(itrack);

/** get collision and start time **/
auto icollision = mytracks.fCollisionsID;
tcollision->GetEntry(icollision);
auto t0 = collision.fCollisionTime;
auto t0e = collision.fCollisionTimeRes;

/** create o2 track **/
O2Track o2track;
o2track.setX(mytracks.fX);
o2track.setAlpha(mytracks.fAlpha);
o2track.setY(mytracks.fY);
o2track.setZ(mytracks.fZ);
o2track.setSnp(mytracks.fSnp);
o2track.setTgl(mytracks.fTgl);
o2track.setQ2Pt(mytracks.fSigned1Pt);

/** get track information **/
auto p = o2track.getP();
auto p2 = p * p;
auto pe = p * mytracks.fSigma1Pt; // this is wrong, needs to add pz contribution
auto d0 = mytracks.fY;
auto d0e = mytracks.fSigmaY;

/** 3-sigma DCA cut on primaries **/
if (fabs(d0 / d0e) > 1.) continue;

/** get TOF information **/
auto L = mytracks.fLength;
auto t = mytracks.fTOFSignal;
auto tof = t - t0;
auto beta = L / tof / 0.029979246;
auto mass = 0.49367700;
auto mass2 = mass * mass;
auto texp = L / p / 0.029979246 * hypot(mass, p);
auto texpe = L / 0.029979246 / p / p * mass * mass * hypot(mass, p) * pe;
auto sigma = hypot(hypot(20., t0e), texpe);
auto nsigma = (tof - texp) / sigma;

hBetaP->Fill(p, beta);
hNsigmaP->Fill(p, nsigma);

}

/** write output **/
auto fout = TFile::Open(std::string("inspectTOF." + std::string(filename)).c_str(), "RECREATE");
hTZero->Write();
hBetaP->Write();
hNsigmaP->Write();
fout->Close();

/** close input **/
fin->Close();

}