ATLAS Offline Software
Loading...
Searching...
No Matches
Run1BStoxAODTrigger.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5//
6// Fill histograms for some of HLT xAOD containers from converted Run 1 data, to
7// compare them with the AOD reference.
8//
9
12
13// to read HLT containers
16#include "xAODMuon/Muon.h"
18#include "xAODJet/Jet.h"
22
23// Root headers
24#include "TH1F.h"
25#include "TFile.h"
26#include <iostream>
27
28using namespace std;
29using namespace Trig;
30using namespace xAOD;
31
32namespace TrigAnalysisTest {
33 //
34 // Init counters and get ready to run.
35 //
37 : m_passed_l1(0),
39 //m_first_call(true)
40 {
41 m_histFile = new TFile("hist.root", "RECREATE");
42 if (m_histFile == nullptr || !m_histFile->IsOpen()) {
43 throw std::runtime_error("unable to open file for writing, exiting");
44 }
45
46 // bphys
47 m_HLT_EFBMuMuXFex_eta = new TH1F( "HLT_EFBMuMuXFex_eta", "HLT_EFBMuMuXFex;#eta;No. of TrigEFBphys objects", 100, -4., 4. );
48 m_HLT_EFBMuMuXFex_mass = new TH1F( "HLT_EFBMuMuXFex_mass", "HLT_EFBMuMuXFex;#M (GeV);No. of TrigEFBphys objects", 100, 0., 20. );
49 // taus
50 m_HLT_TrigTauJet = new TH1F( "HLT_TrigTauJet", "HLT_TrigTauJet;p_{T} (GeV);Jets", 100, 0., 500. );
51 // muons
52 m_HLT_MuonEF_NSegments = new TH1F( "HLT_MuonEF_NSegments", "HLT_MuonEF_NSegments;NSegments;Muons", 100, 0., 100.);
53 m_HLT_MuonEF_pt = new TH1F( "HLT_MuonEF_pt", "HLT_MuonEF_pt;p_{T} (GeV);Muons", 100, 0., 100.);
54 // MET
55 m_HLT_TrigEFMissingET = new TH1F( "HLT_TrigEFMissingET", "HLT_TrigEFMissingET;E_{T} (GeV);Entries", 100, 0., 200.);
56 m_HLT_TrigEFMissingET_FEB = new TH1F( "HLT_TrigEFMissingET_FEB", "HLT_TrigEFMissingET_FEB;E_{T} (GeV);Entries", 100, 0., 200. );
57 m_HLT_TrigEFMissingET_topocl = new TH1F( "HLT_TrigEFMissingET_topocl", "HLT_TrigEFMissingET_topocl;E_{T} (GeV);Entries", 100, 0., 200. );
58 // all trigger bits. The binning is changed in finalize() when the total number of triggers is known
59 m_all_triggers = new TH1F("all_triggers", ";Trigger;No. of events", 1, 0., 1.);
60 }
61
62 // Actually process an event.
64
65 // Did we pass a trigger level?
66 if (trigDecTool.isPassed("L1_.*"))
68 if (trigDecTool.isPassed("EF_.*"))
70
71 auto chainGroups = trigDecTool.getChainGroup(".*");
72 for(auto &trig : chainGroups->getListOfTriggers()) {
73 if(!m_trigger_counts.count(trig))
74 m_trigger_counts[trig] = 0;
75 if(trigDecTool.isPassed(trig)) {
76 m_trigger_counts[trig] += 1;
77 cout << "Trigger passed: " << trig << endl;
78 }
79 }
80
81 //
82 //extract trigger containers and fill histograms
83 //
84
85 // bphys
86 // HLT_EFBMuMuXFex
87 const xAOD::TrigBphysContainer* HLT_xAOD__TrigBphysContainer_EFBMuMuXFex = 0;
88 eventStore()->retrieve( HLT_xAOD__TrigBphysContainer_EFBMuMuXFex, "HLT_xAOD__TrigBphysContainer_EFBMuMuXFex" ).ignore();
89 cout << "size of HLT_xAOD__TrigBphysContainer_EFBMuMuXFex is " << HLT_xAOD__TrigBphysContainer_EFBMuMuXFex->size() << endl;
91 for(TrigBphys_iter = HLT_xAOD__TrigBphysContainer_EFBMuMuXFex->begin(); TrigBphys_iter != HLT_xAOD__TrigBphysContainer_EFBMuMuXFex->end(); ++TrigBphys_iter) {
92 cout << "eta, mass = "<< (*TrigBphys_iter)->eta() << ", "<< (*TrigBphys_iter)->mass() << endl;
93 m_HLT_EFBMuMuXFex_eta->Fill( (*TrigBphys_iter)->eta() );
94 m_HLT_EFBMuMuXFex_mass->Fill( (*TrigBphys_iter)->mass() );
95 }
96
97 // taus
98 // HLT_TrigTauJet
99 const xAOD::JetContainer* HLT_xAOD__JetContainer_TrigTauJet = 0;
100 eventStore()->retrieve( HLT_xAOD__JetContainer_TrigTauJet, "HLT_xAOD__JetContainer_TrigTauJet" ).ignore();//weird name
101 cout << "HLT_xAOD__JetContainer_TrigTauJet successfully retrieved - size is " << HLT_xAOD__JetContainer_TrigTauJet->size() << " jets" << endl;
103 for(Jet_iter = HLT_xAOD__JetContainer_TrigTauJet->begin(); Jet_iter != HLT_xAOD__JetContainer_TrigTauJet->end(); ++Jet_iter) {
104 cout << "tau jet eta, pt: " << (*Jet_iter)->eta() << ", " << (*Jet_iter)->pt() << endl;
105 m_HLT_TrigTauJet->Fill( (*Jet_iter)->pt() / 1000. );
106 }
107
108
109 // muons
110 // HLT_MuonEFInfo
111 const xAOD::MuonContainer* HLT_xAOD__MuonContainer_MuonEFInfo = 0;
112 eventStore()->retrieve( HLT_xAOD__MuonContainer_MuonEFInfo, "HLT_xAOD__MuonContainer_MuonEFInfo").ignore();
113 cout << "size of HLT_xAOD__MuonContainer_MuonEFInfo is " << HLT_xAOD__MuonContainer_MuonEFInfo->size() << endl;
115 for(Muon_iter = HLT_xAOD__MuonContainer_MuonEFInfo->begin(); Muon_iter!= HLT_xAOD__MuonContainer_MuonEFInfo->end(); ++Muon_iter) {
116 cout << "muon n segments, pt: " << (*Muon_iter)->nMuonSegments() << ", " << (*Muon_iter)->pt() << endl;
117 m_HLT_MuonEF_NSegments->Fill( float((*Muon_iter)->nMuonSegments()) );
118 m_HLT_MuonEF_pt->Fill( (*Muon_iter)->pt() / 1000. );
119 }
120
121
122 // MET
123 // HLT_xAOD__TrigMissingETContainer_TrigEFMissingET
124 const xAOD::TrigMissingETContainer* HLT_xAOD__TrigMissingETContainer_TrigEFMissingET = 0;
125 eventStore()->retrieve( HLT_xAOD__TrigMissingETContainer_TrigEFMissingET, "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET" ).ignore();
127 cout << "Size of TrigMissingETContainer is " << HLT_xAOD__TrigMissingETContainer_TrigEFMissingET->size() << endl;
128 for(TrigMissingET_iter = HLT_xAOD__TrigMissingETContainer_TrigEFMissingET->begin(); TrigMissingET_iter != HLT_xAOD__TrigMissingETContainer_TrigEFMissingET->end(); ++TrigMissingET_iter) {
129 Double_t ex = (*TrigMissingET_iter)->ex();
130 Double_t ey = (*TrigMissingET_iter)->ey();
131 Double_t et = std::sqrt(ex*ex + ey*ey);
132 cout << " missing et = " << et << endl;
133 m_HLT_TrigEFMissingET->Fill( et / 1000. );
134 }
135 // HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB
136 const xAOD::TrigMissingETContainer* HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB = 0;
137 eventStore()->retrieve( HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB, "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB" ).ignore();
138 cout << "Size of TrigMissingETContainer is " << HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB->size() << endl;
139 for(TrigMissingET_iter = HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB->begin(); TrigMissingET_iter != HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_FEB->end(); ++TrigMissingET_iter) {
140 Double_t ex = (*TrigMissingET_iter)->ex();
141 Double_t ey = (*TrigMissingET_iter)->ey();
142 Double_t et = std::sqrt(ex*ex + ey*ey);
143 cout << " missing et = " << et << endl;
144 m_HLT_TrigEFMissingET_FEB->Fill( et / 1000. );
145 }
146 // HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl
147 const xAOD::TrigMissingETContainer* HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl = 0;
148 eventStore()->retrieve( HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl, "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl" ).ignore();
149 cout << "Size of TrigMissingETContainer is " << HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl->size() << endl;
150 for(TrigMissingET_iter = HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl->begin(); TrigMissingET_iter != HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_topocl->end(); ++TrigMissingET_iter) {
151 Double_t ex = (*TrigMissingET_iter)->ex();
152 Double_t ey = (*TrigMissingET_iter)->ey();
153 Double_t et = std::sqrt(ex*ex + ey*ey);
154 cout << " missing et = " << et << endl;
155 m_HLT_TrigEFMissingET_topocl->Fill( et / 1000. );
156 }
157
158 cout << " --- Event processing done --- \n" << endl;
159 }
160
161 // Dump everything and return a status.
163 {
164 //athena doesn't store m_all_triggers without this
165 m_histFile->cd();
166
167 // Dump for debugging.
168 cout << "L1 triggers passed: " << m_passed_l1 << endl;
169 cout << "EF triggers passed: " << m_passed_hlt << endl;
170 cout << "START SUMMARY: Run1BStoxAODTrigger" << endl;
171 cout << "creating histogram with one bin per trigger, n of bins is " << m_trigger_counts.size() << endl;
172 // Set the correct binning
173 m_all_triggers->SetBins( m_trigger_counts.size(), 0.0, m_trigger_counts.size() );
174 cout << "histogram created" << endl;
175 int trigger_counter = 0;
176 for (auto it = m_trigger_counts.begin(); it!=m_trigger_counts.end(); it++) {
177 cout << (*it).first << "\t" << (*it).second <<endl;
178 trigger_counter++;
179 m_all_triggers->GetXaxis()->SetBinLabel( trigger_counter, ((*it).first).c_str() );
180 m_all_triggers->SetBinContent( trigger_counter, (*it).second );
181 }
182 cout << "END SUMMARY : Run1BStoxAODTrigger" << endl;
183
184 m_histFile->Write();
185 m_histFile->Close();
186
187 // our aim here is to test the conversion of variables
188 return 0;
189 }
190
191}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
EventPtr_t eventStore()
Definition ITest.h:29
std::map< std::string, int > m_trigger_counts
void processEvent(Trig::TrigDecisionTool &trigDecTool)
const Trig::ChainGroup * getChainGroup(const std::vector< std::string > &patterns, TrigDefs::Group props=TrigDefs::Group::Default) const
Create/get chain group (.
virtual bool isPassed(const std::string &chain, unsigned int condition) const
true if given chain passed
The common trigger namespace for trigger analysis tools.
STL namespace.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
TrigMissingETContainer_v1 TrigMissingETContainer
DataVector of TrigMissingET - the current version.
JetContainer_v1 JetContainer
Definition of the current "jet container version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
TrigBphysContainer_v1 TrigBphysContainer
Extra patterns decribing particle interation process.