//////////////////////////////////////////////////////////////////////////
// //
// ATLFast TriggerMaker class. //
// //
//////////////////////////////////////////////////////////////////////////
#include "ATLFPhotonMaker.h"
#include "ATLFMuonMaker.h"
#include "ATLFElectronMaker.h"
#include "ATLFJetMaker.h"
#include "ATLFMCMaker.h"
#include "ATLFElectron.h"
#include "ATLFJet.h"
#include "ATLFPhoton.h"
#include "ATLFMuon.h"
#include "ATLFast.h"
#include "ATLFTriggerMaker.h"
#include "ATLFTrigger.h"
ClassImp(ATLFTriggerMaker)
//_____________________________________________________________________________
ATLFTriggerMaker::ATLFTriggerMaker()
{
}
//_____________________________________________________________________________
ATLFTriggerMaker::ATLFTriggerMaker(const char *name, const char *title)
:ATLFMaker(name,title)
{
// Setters for isolated electron/photon trigger
SetEPhoEtaCoverage();
SetEPhoMinPTlowEle();
SetEPhoMinPThighEle();
SetEPhoMinPTlowPho();
SetEPhoMinPThighPho();
SetEPhoMinPTlow2();
SetEPhoMinPThigh2();
// Setters for muon trigger
SetMuoEtaCoverage();
SetMuoMinPTlowIso();
SetMuoMinPThighIso();
SetMuoMinPTlow();
SetMuoMinPThigh();
SetMuoMinPTlow2();
SetMuoMinPThigh2();
SetMuoMinPThigh2Iso();
// Setters for electron/muon trigger
SetEMuoEtaCoverageE();
SetEMuoEtaCoverageM();
SetEMuoMinPTlowEle();
SetEMuoMinPThighEle();
SetEMuoMinPTlowMuo();
SetEMuoMinPThighMuo();
// Setters for jet trigger
SetJetEtaCoverage();
SetJetMinPTlow1jet();
SetJetMinPThigh1jet();
SetJetMinPTlow3jet();
SetJetMinPThigh3jet();
SetJetMinPTlow4jet();
SetJetMinPThigh4jet();
m_Fruits = new ATLFTrigger();
m_BranchName = "Trigger";
Save();
}
//_____________________________________________________________________________
ATLFTriggerMaker::~ATLFTriggerMaker()
{
//dummy
}
//_____________________________________________________________________________
void ATLFTriggerMaker::Clear(Option_t *option)
{
// Reset Cluster Maker
ATLFMaker::Clear(option);
}
//_____________________________________________________________________________
void ATLFTriggerMaker::Init()
{
// Create histograms
m_Content = new TH1F("TriContent","trigger content",12,0,12);
m_MuonEffHighLow = new TH1F("TriMuonEffHighLow","muon trig eff. for high + low pT threshold",50,0,100);
m_MuonEffHigh = new TH1F("TriMuonEffHigh","muon trig eff. for high pT threshold",50,0,100);
m_Counter = new TH1F("TriCounter","muon trig counter",50,0,100);
// Initialize trigger parameters in function of the selected luminosity
if (gATLFast->Luminosity() == 1) {
m_PTELE = m_EPhoMinPTlowEle;
m_PTPHO = m_EPhoMinPTlowPho;
m_PTEM2 = m_EPhoMinPTlow2;
m_PTMU1I = m_MuoMinPTlowIso;
m_PTMU1 = m_MuoMinPTlow;
m_PTMU2 = m_MuoMinPTlow2;
m_ETAEL1 = m_EMuoEtaCoverageE;
m_ETAMU1 = m_EMuoEtaCoverageM;
m_PTEMUE = m_EMuoMinPTlowEle;
m_PTEMUM = m_EMuoMinPTlowMuo;
m_PTJET1 = m_JetMinPTlow1jet;
m_PTJET3 = m_JetMinPTlow3jet;
m_PTJET4 = m_JetMinPTlow4jet;
} else {
m_PTELE = m_EPhoMinPThighEle;
m_PTPHO = m_EPhoMinPThighPho;
m_PTEM2 = m_EPhoMinPThigh2;
m_PTMU1I = m_MuoMinPThighIso;
m_PTMU1 = m_MuoMinPThigh;
m_PTMU2 = m_MuoMinPThigh2;
m_PTMU2I = m_MuoMinPThigh2Iso;
m_ETAEL1 = m_EMuoEtaCoverageE;
m_ETAMU1 = m_EMuoEtaCoverageM;
m_PTEMUE = m_EMuoMinPThighEle;
m_PTEMUM = m_EMuoMinPThighMuo;
m_PTJET1 = m_JetMinPThigh1jet;
m_PTJET3 = m_JetMinPThigh3jet;
m_PTJET4 = m_JetMinPThigh4jet;
}
}
//_____________________________________________________________________________
void ATLFTriggerMaker::Finish()
{
// Function called by ATLFast::Finish at the end of the job
m_MuonEffHighLow->Divide(m_Counter);
m_MuonEffHigh->Divide(m_Counter);
}
//_____________________________________________________________________________
Int_t ATLFTriggerMaker::Make()
{
//.............................................
// This primitive trigger routine provides nine types of trigger selection:
//
// trigger types
// Bool_t m_ALL; //All triggers
// Bool_t m_EM1; //One isolated electron
// Bool_t m_PH1; //One isolated photon
// Bool_t m_EM2; //Two isolated electrons/photons
// Bool_t m_MU1; //One muon
// Bool_t m_MU2; //Two muons
// Bool_t m_EMU; //Electron-muon pairs
// Bool_t m_JT1; //One jet
// Bool_t m_JT3; //Three jets
// Bool_t m_JT4; //Four jets
// where the logical values can be true/false depending on whether the
// event passed trigger selection criteria.
// If any of above listed logical variables is true than m_ALL is true.
//.............................................
Bool_t Trig_EM1 = kFALSE;
Bool_t Trig_PH1 = kFALSE;
Bool_t Trig_EM2 = kFALSE;
Bool_t Trig_MU1 = kFALSE;
Bool_t Trig_MU2 = kFALSE;
Bool_t Trig_EMU = kFALSE;
Bool_t Trig_JT1 = kFALSE;
Bool_t Trig_JT3 = kFALSE;
Bool_t Trig_JT4 = kFALSE;
Bool_t Trig_ALL = kFALSE;
//........................................................
//... Get pointers to electronmaker ClonesArray
//........................................................
ATLFElectronMaker *electronmaker = gATLFast->ElectronMaker();
TClonesArray *electrons = electronmaker->Fruits();
ATLFElectron *electron;
Int_t nelectrons = electronmaker->Nelectrons();
//........................................................
//... Get pointers to photonmaker ClonesArray
//........................................................
ATLFPhotonMaker *photonmaker = gATLFast->PhotonMaker();
TClonesArray *photons = photonmaker->Fruits();
ATLFPhoton *photon;
Int_t nphotons = photonmaker->Nphotons();
//........................................................
//... Get pointers to muonmaker ClonesArray
//........................................................
ATLFMuonMaker *muonmaker = gATLFast->MuonMaker();
TClonesArray *muons = muonmaker->Fruits();
ATLFMuon *muon;
Int_t nmuons = muonmaker->Nmuons();
//........................................................
//... Get pointers to jets ClonesArray
//........................................................
ATLFJetMaker *jetmaker = gATLFast->JetMaker();
TClonesArray *jets = jetmaker->Fruits();
ATLFJet *jet;
Int_t njets = jetmaker->Njets();
//........................................................
//..... apply efficiency for triggering
//.....** APPLY MUON TRIGGER EFFICIENCY
//.....** KMUOTRG(I)=2 muon passing high pt trigger
//.....** KMUOTRG(I)=1 muon passing low pt trigger
//.....** KMUOTRG(I)=0 muon failing both triggers
//........................................................
// ISTART=1
Int_t i;
Int_t trigger = 0;
for (i=0;i<nmuons;i++) {
muon = (ATLFMuon*)muons->UncheckedAt(i);
// CALL TRIGMUO(ISTART,muon->PT(),muon-Px(),trigger)
//=========>
static Bool_t printerror = kTRUE;
if (printerror) {
Warning("ATLFTriggerMaker","Function TRIGMUO for Muon Trigger Efficiency missing");
Warning("ATLFTriggerMaker","instead used 100 percent efficiency");
printerror = kFALSE;
}
trigger=1;
muon->SetTrigger(trigger);
if (trigger >= 1) m_MuonEffHighLow->Fill(muon->PT());
if (trigger == 2) m_MuonEffHigh->Fill(muon->PT());
m_Counter->Fill(muon->PT());
}
//........................................................
//.... trigger for isolated electron/photons
//........................................................
Int_t nTrigA,nTrigB,nTrigC,nTrigD;
nTrigA = 0;
nTrigB = 0;
nTrigC = 0;
for (i=0;i<nelectrons;i++) {
electron = (ATLFElectron*)electrons->UncheckedAt(i);
if (TMath::Abs(electron->Eta()) < m_EPhoEtaCoverage ) {
if (electron->PT() > m_PTELE) nTrigA++;
if (electron->PT() > m_PTEM2) nTrigC++;
}
}
for (i=0;i<nphotons;i++) {
photon = (ATLFPhoton*)photons->UncheckedAt(i);
if (TMath::Abs(photon->Eta()) < m_EPhoEtaCoverage) {
if (photon->PT() > m_PTPHO) nTrigB++;
if (photon->PT() > m_PTEM2) nTrigC++;
}
}
if (nTrigA >= 1) Trig_EM1= kTRUE;
if (nTrigB >= 1) Trig_PH1= kTRUE;
if (nTrigC >= 2) Trig_EM2= kTRUE;
if (Trig_EM1) m_Content->Fill(1.1);
if (Trig_PH1) m_Content->Fill(2.1);
if (Trig_EM2) m_Content->Fill(3.1);
//........................................................
//.... trigger for muons
//........................................................
nTrigA = 0;
nTrigB = 0;
nTrigC = 0;
nTrigD = 0;
for (i=0;i<nmuons;i++) {
muon = (ATLFMuon*)muons->UncheckedAt(i);
if (muon->Trigger() > 0) {
if (TMath::Abs(muon->Eta()) < m_MuoEtaCoverage) {
if (muon->PT() > m_PTMU1I && muon->Isolated() == 1) nTrigA++;
if (muon->PT() > m_PTMU2I && muon->Isolated() == 1 && gATLFast->Luminosity() == 2) nTrigB++;
if (muon->PT() > m_PTMU1) nTrigC++;
if (muon->PT() > m_PTMU2) nTrigD++;
}
}
}
if (nTrigA >= 1 || nTrigC >= 1) Trig_MU1 = kTRUE;
if (nTrigB >= 1 || nTrigD >= 2) Trig_MU2 = kTRUE;
if (Trig_MU1) m_Content->Fill(4.1);
if (Trig_MU2) m_Content->Fill(5.1);
//........................................................
//.... trigger for electron-muons pairs
//........................................................
nTrigA = 0;
nTrigB = 0;
for (i=0;i<nelectrons;i++) {
electron = (ATLFElectron*)electrons->UncheckedAt(i);
if (TMath::Abs(electron->Eta()) < m_ETAEL1) {
if (electron->PT() > m_PTEMUE) nTrigA++;
}
}
for (i=0;i<nmuons;i++) {
muon = (ATLFMuon*)muons->UncheckedAt(i);
if (TMath::Abs(muon->Eta()) < m_EMuoEtaCoverageM && muon->Trigger() > 0) {
if (muon->PT() > m_PTEMUM) nTrigB++;
}
}
if (nTrigA >= 1 && nTrigB >= 1) Trig_EMU = kTRUE;
if (Trig_EMU) m_Counter->Fill(6.1);
//........................................................
//.... trigger for jets
//........................................................
nTrigA = 0;
nTrigB = 0;
nTrigC = 0;
for (i=0;i<njets;i++) {
jet = (ATLFJet*)jets->UncheckedAt(i);
if (TMath::Abs(jet->Eta()) < m_JetEtaCoverage) {
if (jet->PT() >= m_PTJET1) nTrigA++;
if (jet->PT() >= m_PTJET3) nTrigB++;
if (jet->PT() >= m_PTJET4) nTrigC++;
}
}
if (nTrigA >= 1) Trig_JT1 = kTRUE;
if (nTrigB >= 3) Trig_JT3 = kTRUE;
if (nTrigC >= 4) Trig_JT4 = kTRUE;
if (Trig_JT1) m_Content->Fill(7.1);
if (Trig_JT3) m_Content->Fill(8.1);
if (Trig_JT4) m_Content->Fill(9.1);
//........................................................
//...any trigger
//........................................................
if (Trig_EM1 || Trig_PH1 || Trig_EM2 || Trig_MU1 || Trig_MU2 || Trig_EMU
|| Trig_JT1 || Trig_JT3 || Trig_JT4) Trig_ALL= kTRUE;
if (Trig_ALL) m_Content->Fill(10.1);
//........................................................
//...Save trigger info into Root trigger object
//........................................................
ATLFTrigger *trig = (ATLFTrigger*)m_Fruits;
trig->SetEM1(Trig_EM1);
trig->SetPH1(Trig_PH1);
trig->SetEM2(Trig_EM2);
trig->SetMU1(Trig_MU1);
trig->SetMU2(Trig_MU2);
trig->SetEMU(Trig_EMU);
trig->SetJT1(Trig_JT1);
trig->SetJT3(Trig_JT3);
trig->SetJT4(Trig_JT4);
trig->SetALL(Trig_ALL);
return 0;
}
//_____________________________________________________________________________
void ATLFTriggerMaker::PrintInfo()
{
ATLFMaker::PrintInfo();
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.