///////////////////////////////////////////////////////////////////////////////
// //
// TRD trigger L1 (GTU) simulation steering //
-// currently the Trigger() method calls the GTU tracking simulation and //
-// runs two example triggers, namely on a single high pt particle and //
-// on a jet. //
+// The Trigger() method calls the GTU tracking simulation and //
+// runs the triggers for HCO, HJT, HSE, HQU, HEE //
// //
///////////////////////////////////////////////////////////////////////////////
#include "TObjArray.h"
+#include <TTree.h>
#include "AliLog.h"
#include "AliTriggerInput.h"
#include "AliTRDTriggerL1.h"
#include "AliTRDgtuSim.h"
#include "AliTRDtrackGTU.h"
-
-AliTRDTriggerL1::AliTRDTriggerL1()
+#include "AliTRDcalibDB.h"
+#include "AliTRDCalDCSGTU.h"
+
+AliTRDTriggerL1::AliTRDTriggerL1() :
+ AliTriggerDetector(),
+ fPtThresholdA(3.),
+ fPtThresholdB(2.),
+ fPidThresholdA(144),
+ fPidThresholdB(164),
+ fNoThreshold(1),
+ fNoThresholdA(1),
+ fNoThresholdB(1),
+ fNoThresholdJetA(3),
+ fNoThresholdJetB(250),
+ fNoThresholdElA(1),
+ fNoThresholdElB(1),
+ fNoTrklThresholdElA(5),
+ fNoTrklThresholdElB(5),
+ fLayerMaskElA(0x1),
+ fLayerMaskElB(0x1)
{
+ // ctor
+
SetName("TRD");
}
AliTRDTriggerL1::~AliTRDTriggerL1()
{
-
+ // dtor
}
void AliTRDTriggerL1::CreateInputs()
{
+ // create the trigger inputs for TRD
+
if (fInputs.GetEntriesFast() > 0)
return;
- fInputs.AddLast(new AliTriggerInput("1HSH", "TRD", 1));
+ fInputs.AddLast(new AliTriggerInput("1HCO", "TRD", 1));
fInputs.AddLast(new AliTriggerInput("1HJT", "TRD", 1));
+ fInputs.AddLast(new AliTriggerInput("1HSE", "TRD", 1));
+ fInputs.AddLast(new AliTriggerInput("1HQU", "TRD", 1));
+ fInputs.AddLast(new AliTriggerInput("1HEE", "TRD", 1));
}
void AliTRDTriggerL1::Trigger()
{
+ // run the trigger algorithms
+
AliRunLoader *runLoader = AliRunLoader::Instance();
if (!runLoader)
return;
AliLoader *trdLoader = runLoader->GetLoader("TRDLoader");
if (!trdLoader)
return;
-
+
// now running the GTU tracking;
AliTRDgtuSim *gtusim = new AliTRDgtuSim();
gtusim->RunGTU(trdLoader, 0x0);
- gtusim->WriteTracksToLoader();
-
+
TTree *trackTree = trdLoader->GetDataLoader("gtutracks")->Tree();
if (!trackTree) {
AliDebug(1,"Did not find track tree");
return;
}
TBranch *branch = trackTree->GetBranch("TRDtrackGTU");
- AliDebug(1,Form("TRD trigger: found %i tracks", trackTree->GetEntriesFast()));
-
- // trigger thresholds should go elsewhere
- Float_t ptThreshold1 = 2;
- Float_t ptThreshold2 = 9.9;
- Int_t trackThreshold1 = 6;
- Int_t trackThreshold2 = 2;
-
+ AliDebug(1,Form("TRD trigger: found %lld tracks", trackTree->GetEntriesFast()));
+
// trigger algorithms to come, e.g.
- Bool_t triggered_highpt = kFALSE;
- Bool_t triggered_jet = kFALSE;
-
+ Bool_t triggered1HCO = kFALSE;
+ Bool_t triggered1HJT = kFALSE;
+ Bool_t triggered1HSE = kFALSE;
+ Bool_t triggered1HQU = kFALSE;
+ Bool_t triggered1HEE = kFALSE;
+
if (branch) {
AliTRDtrackGTU *trk = 0x0;
branch->SetAddress(&trk);
- // high pt trigger
+ Int_t nTracks[90] = { 0 }; // number of tracks
+ Int_t nTracksA[90] = { 0 }; // number of tracks above pt threshold A
+ Int_t nTracksB[90] = { 0 }; // number of tracks above pt threshold B
+ Int_t nTracksElA[90] = { 0 }; // number of tracks above pt threshold A and PID threshold A
+ Int_t nTracksElB[90] = { 0 }; // number of tracks above pt threshold B and PID threshold B
+
for (Int_t iTrack = 0; iTrack < trackTree->GetEntriesFast(); iTrack++) {
trackTree->GetEntry(iTrack);
- if (TMath::Abs(trk->GetPt()) > 3.0) {
- AliDebug(1, Form("Found track in sector %2i, stack %i with pt = %3.1f, triggered",
- trk->GetSector(), trk->GetStack(), trk->GetPt()));
- triggered_highpt = kTRUE;
+
+ nTracks[5*trk->GetSector() + trk->GetStack()]++;
+
+ if (TMath::Abs(trk->GetPt()) > fPtThresholdA) {
+ nTracksA[5*trk->GetSector() + trk->GetStack()]++;
+ if ((trk->GetPID() > fPidThresholdA) &&
+ ((trk->GetTrackletMask() & fLayerMaskElA) == fLayerMaskElA) &&
+ (trk->GetNTracklets() >= fNoTrklThresholdElA))
+ nTracksElA[5*trk->GetSector() + trk->GetStack()]++;
}
- }
- // jet trigger
- Int_t nTracks1[90]; // tracks above lower pt threshold
- Int_t nTracks2[90]; // tracks above higher pt threshold
- for (Int_t iTrack = 0; iTrack < trackTree->GetEntriesFast(); iTrack++) {
- trackTree->GetEntry(iTrack);
- if (TMath::Abs(trk->GetPt()) > ptThreshold1)
- nTracks1[5*trk->GetSector() + trk->GetStack()]++;
- if (TMath::Abs(trk->GetPt()) > ptThreshold2)
- nTracks2[5*trk->GetSector() + trk->GetStack()]++;
+ if (TMath::Abs(trk->GetPt()) > fPtThresholdB) {
+ nTracksB[5*trk->GetSector() + trk->GetStack()]++;
+ if ((trk->GetPID() > fPidThresholdB) &&
+ ((trk->GetTrackletMask() & fLayerMaskElB) == fLayerMaskElB) &&
+ (trk->GetNTracklets() >= fNoTrklThresholdElB))
+ nTracksElB[5*trk->GetSector() + trk->GetStack()]++;
+ }
}
+
for (Int_t iStack = 0; iStack < 90; iStack++) {
- if ((nTracks1[iStack] >= trackThreshold1) || (nTracks2[iStack] >= trackThreshold2))
- triggered_jet = kTRUE;
+ if (nTracks[iStack] >= fNoThreshold)
+ triggered1HCO = kTRUE;
+
+ if ((nTracksA[iStack] >= fNoThresholdJetA) || (nTracksB[iStack] >= fNoThresholdJetB))
+ triggered1HJT = kTRUE;
+
+ if ((nTracksElA[iStack] >= fNoThresholdElA))
+ triggered1HSE = kTRUE;
+
+ if ((nTracksElB[iStack] >= fNoThresholdElB))
+ triggered1HQU = kTRUE;
}
}
else {
AliWarning("GTU Branch not found");
}
- if (triggered_highpt) {
- AliInfo("Fired high-pt trigger");
- SetInput("1HSH");
+ if (triggered1HCO) {
+ AliDebug(1, "Fired cosmic trigger");
+ SetInput("1HCO");
}
- if (triggered_jet) {
- AliInfo("Fired jet trigger");
+ if (triggered1HJT) {
+ AliDebug(1, "Fired jet trigger");
SetInput("1HJT");
}
+ if (triggered1HSE) {
+ AliDebug(1, "Fired single electron trigger");
+ SetInput("1HSE");
+ }
+
+ if (triggered1HQU) {
+ AliDebug(1, "Fired single electron trigger");
+ SetInput("1HQU");
+ }
+
+ if (triggered1HEE) {
+ AliDebug(1, "Fired single electron trigger");
+ SetInput("1HEE");
+ }
+
// cleaning up
delete gtusim;
}