-
Notifications
You must be signed in to change notification settings - Fork 148
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c62c9fc
commit e0b88b1
Showing
1 changed file
with
64 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
int External() | ||
{ | ||
std::string path{"o2sim_Kine.root"}; | ||
// Check that file exists, can be opened and has the correct tree | ||
TFile file(path.c_str(), "READ"); | ||
if (file.IsZombie()) | ||
{ | ||
std::cerr << "Cannot open ROOT file " << path << "\n"; | ||
return 1; | ||
} | ||
auto tree = (TTree *)file.Get("o2sim"); | ||
if (!tree) | ||
{ | ||
std::cerr << "Cannot find tree o2sim in file " << path << "\n"; | ||
return 1; | ||
} | ||
std::vector<o2::MCTrack> *tracks{}; | ||
tree->SetBranchAddress("MCTrack", &tracks); | ||
|
||
// Check if all events are filled | ||
auto nEvents = tree->GetEntries(); | ||
for (Long64_t i = 0; i < nEvents; ++i) | ||
{ | ||
tree->GetEntry(i); | ||
if (tracks->empty()) | ||
{ | ||
std::cerr << "Empty entry found at event " << i << "\n"; | ||
return 1; | ||
} | ||
} | ||
// Check if there are 100 events, as simulated in the o2dpg-test | ||
if (nEvents != 100) | ||
{ | ||
std::cerr << "Expected 100 events, got " << nEvents << "\n"; | ||
return 1; | ||
} | ||
// check if each event has two protons with 6800 GeV of energy | ||
// exits if the particle is not a proton | ||
for (int i = 0; i < nEvents; i++) | ||
{ | ||
auto check = tree->GetEntry(i); | ||
int count = 0; | ||
for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack) | ||
{ | ||
auto track = tracks->at(idxMCTrack); | ||
double energy = track.GetEnergy(); | ||
// Check if track energy is approximately equal to 6800 GeV (a tolerance of 65 keV is considered, straight equality does not work due to floating point precision) | ||
if (std::abs(energy - 6800) < 1e-4) | ||
{ | ||
if (track.GetPdgCode() != 2212){ | ||
std::cerr << "Found 6800 GeV particle with pdgID " << track.GetPdgCode() << "\n"; | ||
return 1; | ||
} | ||
count++; | ||
} | ||
} | ||
if (count < 2) | ||
{ | ||
std::cerr << "Event " << i << " has less than 2 protons at 6800 GeV\n"; | ||
return 1; | ||
} | ||
} | ||
return 0; | ||
} |