1+ int External ()
2+ {
3+ std ::string path {"o2sim_Kine.root" };
4+ int numberOfInjectedSignalsPerEvent {10 };
5+ std ::vector < int > injectedPDGs = {1010000030 , -1010000030 };
6+
7+ auto nInjection = injectedPDGs .size ();
8+
9+ TFile file (path .c_str (), "READ ");
10+ if (file .IsZombie ())
11+ {
12+ std ::cerr << "Cannot open ROOT file " << path << "\n" ;
13+ return 1 ;
14+ }
15+
16+ auto tree = (TTree * )file .Get ("o2sim" );
17+ if (!tree )
18+ {
19+ std ::cerr << "Cannot find tree o2sim in file " << path << "\n" ;
20+ return 1 ;
21+ }
22+ std ::vector < o2 ::MCTrack > * tracks {};
23+ tree -> SetBranchAddress ("MCTrack" , & tracks );
24+
25+ std ::vector < int > nSignal ;
26+ for (int i = 0 ; i < nInjection ; i ++ )
27+ {
28+ nSignal .push_back (0 );
29+ }
30+
31+ auto nEvents = tree -> GetEntries ();
32+ for (int i = 0 ; i < nEvents ; i ++ )
33+ {
34+ auto check = tree -> GetEntry (i );
35+ for (int idxMCTrack = 0 ; idxMCTrack < tracks -> size (); ++ idxMCTrack )
36+ {
37+ auto track = tracks -> at (idxMCTrack );
38+ auto pdg = track .GetPdgCode ();
39+ auto it = std ::find (injectedPDGs .begin (), injectedPDGs .end (), pdg );
40+ int index = std ::distance (injectedPDGs .begin (), it ); // index of injected PDG
41+ if (it != injectedPDGs .end ()) // found
42+ {
43+ // count signal PDG
44+ nSignal [index ]++ ;
45+ }
46+ }
47+ }
48+ std ::cout << "--------------------------------\n" ;
49+ std ::cout << "# Events: " << nEvents << "\n" ;
50+ for (int i = 0 ; i < nInjection ; i ++ )
51+ {
52+ std ::cout << "# Injected nuclei \n" ;
53+ std ::cout << injectedPDGs [i ] << ": " << nSignal [i ] << "\n" ;
54+ if (nSignal [i ] == 0 )
55+ {
56+ std ::cerr << "No generated: " << injectedPDGs [i ] << "\n" ;
57+ return 1 ; // At least one of the injected particles should be generated
58+ }
59+ }
60+ return 0 ;
61+ }
0 commit comments