ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMuonMatching_example.cxx File Reference
#include "TrigConfxAOD/xAODConfigTool.h"
#include "TrigDecisionTool/TrigDecisionTool.h"
#include "xAODMuon/MuonContainer.h"
#include "xAODMuon/MuonAuxContainer.h"
#include "TrigMuonMatching/TrigMuonMatching.h"
#include "TChain.h"
#include "TError.h"
#include "TFile.h"
#include "TH1F.h"
#include "TLorentzVector.h"
#include "TCanvas.h"
#include <iostream>

Go to the source code of this file.

Functions

TChain * getFilesFromCommandLine (int argc, char *argv[])
int main (int argc, char *argv[])

Variables

const char * APP_NAME = "TrigMuonMatching_example"
const char * OUTPUT_FILE = "TrigMuonMatching_example.root"

Function Documentation

◆ getFilesFromCommandLine()

TChain * getFilesFromCommandLine ( int argc,
char * argv[] )

Definition at line 179 of file util/TrigMuonMatching_example.cxx.

180{
181 if (argc < 2) {
182 ::Error(APP_NAME, "Usage: %s <xAOD file> [xAOD file2]...", APP_NAME);
183 return nullptr;
184 }
185
186 auto chain = new TChain("CollectionTree");
187 for (int i = 1; i < argc; i++) {
188 chain->Add(argv[i]);
189 }
190
191 return chain;
192}
#define APP_NAME

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 42 of file util/TrigMuonMatching_example.cxx.

42 {
43
44 // Initialize (as done for all xAOD standalone programs!)
46
47 auto chain = getFilesFromCommandLine(argc, argv);
48 if (chain == nullptr) {
49 return 1;
50 }
51
52 // The TEvent object
54 RETURN_CHECK( APP_NAME, event.readFrom(chain));
55
56 // The configuration tool.
57 xAODConfigTool configTool("xAODConfigTool");
58 ToolHandle<TrigConf::ITrigConfigTool> configHandle(&configTool);
59 ASG_CHECK_SA(APP_NAME,configHandle->initialize());
60
61 // The decision tool
62 TrigDecisionTool trigDecTool("TrigDecTool");
63 ASG_CHECK_SA(APP_NAME, trigDecTool.setProperty("ConfigTool",configHandle));
64 ASG_CHECK_SA(APP_NAME, trigDecTool.setProperty("TrigDecisionKey","xTrigDecision"));
65 ASG_CHECK_SA(APP_NAME, trigDecTool.initialize());
66 ToolHandle<Trig::TrigDecisionTool> m_trigDec(&trigDecTool);
67
68 Trig::TrigMuonMatching m_match_Tool("TestMatchClass");
69 ASG_CHECK_SA(APP_NAME, m_match_Tool.setProperty("TriggerTool",m_trigDec));
70 ASG_CHECK_SA(APP_NAME, m_match_Tool.initialize());
71
73 auto outputFile = TFile::Open(OUTPUT_FILE, "RECREATE");
74 if (outputFile == nullptr || !outputFile->IsOpen()) {
75 return 1;
76 }
77
78 auto hmu_offline_pt = new TH1F("mu_offline_pt","mu_offline_pt", 100, 0, 300);
79 auto hmu_hltmatch_pt = new TH1F("mu_hltmatch_pt","mu_hltmatch_pt", 100, 0, 300);
80 auto hmu_l1match_pt = new TH1F("mu_l1match_pt","mu_l1match_pt", 100, 0, 300);
81 auto hmu_L2SAmatch_pt = new TH1F("mu_L2SAmatch_pt","mu_L2SAmatch_pt", 100, 0, 300);
82 auto hmu_L2CBmatch_pt = new TH1F("mu_L2CBmatch_pt","mu_L2CBmatch_pt", 100, 0, 300);
83
84 // Run the files
85 size_t nEntries = chain->GetEntries();
86 for (size_t entry = 0; entry < nEntries; entry++) {
87 event.getEntry(entry);
88
91 goodMuons->setStore(goodMuonsAux);
92
93 const xAOD::MuonContainer* muons = 0;
94 RETURN_CHECK(APP_NAME, event.retrieve(muons,"Muons"));
95 std::cout << "Number of muons " << muons->size() << std::endl;
96 for(const auto* mu : *muons){
97 std::cout << "muon pt " << mu->pt() << std::endl;
98 hmu_offline_pt->Fill(mu->pt()*0.001);
99 Bool_t ismu26_imedium = false;
100 Bool_t ismu50 = false;
101 ismu26_imedium = m_match_Tool.match(mu,"HLT_mu26_imedium");
102 ismu50 = m_match_Tool.match(mu,"HLT_mu50");
103 if(ismu26_imedium){
104 std::cout << "HLT_mu26_imedium matched." << std::endl;
105 hmu_hltmatch_pt->Fill(mu->pt()*0.001);
106 }
107 if(ismu50)std::cout << "HLT_mu50 matched." << std::endl;
108
109 // L1
110 Bool_t isMU20 = false;
111 isMU20 = m_match_Tool.matchL1(mu,"L1_MU20");
112 if(isMU20){
113 std::cout << "L1_MU20 matched." << std::endl;
114 hmu_l1match_pt->Fill(mu->pt()*0.001);
115 }
116
117 // L2SA
118 Bool_t isL2SA = false;
119 isL2SA = m_match_Tool.matchL2SA(mu,"L1_MU20","HLT_mu26_imedium");
120 if(isL2SA){
121 std::cout << "L2SA matched" << std::endl;
122 hmu_L2SAmatch_pt->Fill(mu->pt()*0.001);
123 }
124
125 // L2CB
126 Bool_t isL2CB = false;
127 isL2CB = m_match_Tool.matchL2CB(mu,"HLT_mu26_imedium");
128 if(isL2CB){
129 std::cout << "L2CB matched" << std::endl;
130 hmu_L2CBmatch_pt->Fill(mu->pt()*0.001);
131 }
132
133 xAOD::Muon* muon = new xAOD::Muon();
134 muon->makePrivateStore(*mu);
135 goodMuons->push_back(muon);
136 }
137
138 Int_t index = 0;
139 const xAOD::Muon *mu1 = 0;
140 const xAOD::Muon *mu2 = 0;
141 if(goodMuons->size()==2){
142 for(const auto mu : *goodMuons){
143 if(index == 0) mu1 = mu;
144 if(index == 1) mu2 = mu;
145 index = index + 1;
146 }
147 std::pair<Bool_t,Bool_t> result1, result2;
148 Bool_t valid;
149 valid = m_match_Tool.matchDimuon(mu1, mu2, "HLT_2mu14", result1, result2);
150 if(!valid) std::cout << "not supported 2mu14" << std::endl;
151 if(result1.first && result2.first) std::cout << "HLT_2mu14 matched" << std::endl;
152
153 std::pair<Bool_t,Bool_t> result3, result4;
154 valid = m_match_Tool.matchDimuon(mu1, mu2, "HLT_mu18_mu8noL1", result3, result4);
155 if(!valid) std::cout << "not supported mu18_mu8noL1" << std::endl;
156 if((result1.first && result2.second) || (result1.second && result2.first)) std::cout << "HLT_mu18_mu8noL1 matched" << std::endl;
157
158 }
159
160 }
161
162 TCanvas* c1 = new TCanvas();
163 hmu_offline_pt -> Draw();
164 hmu_offline_pt ->SetLineColor(1);
165 hmu_hltmatch_pt -> Draw("same");
166 hmu_hltmatch_pt ->SetLineColor(2);
167 hmu_l1match_pt -> Draw("same");
168 hmu_l1match_pt ->SetLineColor(3);
169 hmu_L2SAmatch_pt -> Draw("same");
170 hmu_L2SAmatch_pt ->SetLineColor(4);
171 hmu_L2CBmatch_pt -> Draw("same");
172 hmu_L2CBmatch_pt ->SetLineColor(5);
173 c1->Write();
174
175 outputFile->Write();
176 outputFile->Close();
177}
#define ASG_CHECK_SA(SOURCE, EXP)
Helper macro for checking the status code of a call outside of an ASG tool.
Definition Check.h:76
#define RETURN_CHECK(CONTEXT, EXP)
Helper macro for checking return codes in a compact form in the code.
Definition ReturnCheck.h:26
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
Trigger configuration metadata tool for xAOD analysis.
Tool for accessing xAOD files outside of Athena.
@ kBranchAccess
Access auxiliary data branch-by-branch.
list valid
Definition calibdata.py:44
Definition index.py:1
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition Init.cxx:31
Muon_v1 Muon
Reference the current persistent version:
MuonAuxContainer_v5 MuonAuxContainer
Definition of the current Muon auxiliary container.
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
const char * OUTPUT_FILE
Definition ringsHist.cxx:39
TChain * getFilesFromCommandLine(int argc, char *argv[])

Variable Documentation

◆ APP_NAME

const char* APP_NAME = "TrigMuonMatching_example"

Definition at line 36 of file util/TrigMuonMatching_example.cxx.

◆ OUTPUT_FILE

const char* OUTPUT_FILE = "TrigMuonMatching_example.root"

Definition at line 37 of file util/TrigMuonMatching_example.cxx.