ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliTRDTriggerL1.cxx 31904 2009-04-08 16:42:03Z cblume $ */

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// TRD trigger L1 (GTU) simulation steering                                  //
// 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 "AliRunLoader.h"
#include "AliLoader.h"

#include "AliTRDTriggerL1.h"
#include "AliTRDgtuSim.h"
#include "AliTRDtrackGTU.h"
#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("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);

  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 %lld tracks", trackTree->GetEntriesFast()));

  // trigger algorithms to come, e.g.
  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);

    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);

      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()]++;
      }

      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 (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 (triggered1HCO) {
    AliDebug(1, "Fired cosmic trigger");
    SetInput("1HCO");
  }

  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;
}
 AliTRDTriggerL1.cxx:1
 AliTRDTriggerL1.cxx:2
 AliTRDTriggerL1.cxx:3
 AliTRDTriggerL1.cxx:4
 AliTRDTriggerL1.cxx:5
 AliTRDTriggerL1.cxx:6
 AliTRDTriggerL1.cxx:7
 AliTRDTriggerL1.cxx:8
 AliTRDTriggerL1.cxx:9
 AliTRDTriggerL1.cxx:10
 AliTRDTriggerL1.cxx:11
 AliTRDTriggerL1.cxx:12
 AliTRDTriggerL1.cxx:13
 AliTRDTriggerL1.cxx:14
 AliTRDTriggerL1.cxx:15
 AliTRDTriggerL1.cxx:16
 AliTRDTriggerL1.cxx:17
 AliTRDTriggerL1.cxx:18
 AliTRDTriggerL1.cxx:19
 AliTRDTriggerL1.cxx:20
 AliTRDTriggerL1.cxx:21
 AliTRDTriggerL1.cxx:22
 AliTRDTriggerL1.cxx:23
 AliTRDTriggerL1.cxx:24
 AliTRDTriggerL1.cxx:25
 AliTRDTriggerL1.cxx:26
 AliTRDTriggerL1.cxx:27
 AliTRDTriggerL1.cxx:28
 AliTRDTriggerL1.cxx:29
 AliTRDTriggerL1.cxx:30
 AliTRDTriggerL1.cxx:31
 AliTRDTriggerL1.cxx:32
 AliTRDTriggerL1.cxx:33
 AliTRDTriggerL1.cxx:34
 AliTRDTriggerL1.cxx:35
 AliTRDTriggerL1.cxx:36
 AliTRDTriggerL1.cxx:37
 AliTRDTriggerL1.cxx:38
 AliTRDTriggerL1.cxx:39
 AliTRDTriggerL1.cxx:40
 AliTRDTriggerL1.cxx:41
 AliTRDTriggerL1.cxx:42
 AliTRDTriggerL1.cxx:43
 AliTRDTriggerL1.cxx:44
 AliTRDTriggerL1.cxx:45
 AliTRDTriggerL1.cxx:46
 AliTRDTriggerL1.cxx:47
 AliTRDTriggerL1.cxx:48
 AliTRDTriggerL1.cxx:49
 AliTRDTriggerL1.cxx:50
 AliTRDTriggerL1.cxx:51
 AliTRDTriggerL1.cxx:52
 AliTRDTriggerL1.cxx:53
 AliTRDTriggerL1.cxx:54
 AliTRDTriggerL1.cxx:55
 AliTRDTriggerL1.cxx:56
 AliTRDTriggerL1.cxx:57
 AliTRDTriggerL1.cxx:58
 AliTRDTriggerL1.cxx:59
 AliTRDTriggerL1.cxx:60
 AliTRDTriggerL1.cxx:61
 AliTRDTriggerL1.cxx:62
 AliTRDTriggerL1.cxx:63
 AliTRDTriggerL1.cxx:64
 AliTRDTriggerL1.cxx:65
 AliTRDTriggerL1.cxx:66
 AliTRDTriggerL1.cxx:67
 AliTRDTriggerL1.cxx:68
 AliTRDTriggerL1.cxx:69
 AliTRDTriggerL1.cxx:70
 AliTRDTriggerL1.cxx:71
 AliTRDTriggerL1.cxx:72
 AliTRDTriggerL1.cxx:73
 AliTRDTriggerL1.cxx:74
 AliTRDTriggerL1.cxx:75
 AliTRDTriggerL1.cxx:76
 AliTRDTriggerL1.cxx:77
 AliTRDTriggerL1.cxx:78
 AliTRDTriggerL1.cxx:79
 AliTRDTriggerL1.cxx:80
 AliTRDTriggerL1.cxx:81
 AliTRDTriggerL1.cxx:82
 AliTRDTriggerL1.cxx:83
 AliTRDTriggerL1.cxx:84
 AliTRDTriggerL1.cxx:85
 AliTRDTriggerL1.cxx:86
 AliTRDTriggerL1.cxx:87
 AliTRDTriggerL1.cxx:88
 AliTRDTriggerL1.cxx:89
 AliTRDTriggerL1.cxx:90
 AliTRDTriggerL1.cxx:91
 AliTRDTriggerL1.cxx:92
 AliTRDTriggerL1.cxx:93
 AliTRDTriggerL1.cxx:94
 AliTRDTriggerL1.cxx:95
 AliTRDTriggerL1.cxx:96
 AliTRDTriggerL1.cxx:97
 AliTRDTriggerL1.cxx:98
 AliTRDTriggerL1.cxx:99
 AliTRDTriggerL1.cxx:100
 AliTRDTriggerL1.cxx:101
 AliTRDTriggerL1.cxx:102
 AliTRDTriggerL1.cxx:103
 AliTRDTriggerL1.cxx:104
 AliTRDTriggerL1.cxx:105
 AliTRDTriggerL1.cxx:106
 AliTRDTriggerL1.cxx:107
 AliTRDTriggerL1.cxx:108
 AliTRDTriggerL1.cxx:109
 AliTRDTriggerL1.cxx:110
 AliTRDTriggerL1.cxx:111
 AliTRDTriggerL1.cxx:112
 AliTRDTriggerL1.cxx:113
 AliTRDTriggerL1.cxx:114
 AliTRDTriggerL1.cxx:115
 AliTRDTriggerL1.cxx:116
 AliTRDTriggerL1.cxx:117
 AliTRDTriggerL1.cxx:118
 AliTRDTriggerL1.cxx:119
 AliTRDTriggerL1.cxx:120
 AliTRDTriggerL1.cxx:121
 AliTRDTriggerL1.cxx:122
 AliTRDTriggerL1.cxx:123
 AliTRDTriggerL1.cxx:124
 AliTRDTriggerL1.cxx:125
 AliTRDTriggerL1.cxx:126
 AliTRDTriggerL1.cxx:127
 AliTRDTriggerL1.cxx:128
 AliTRDTriggerL1.cxx:129
 AliTRDTriggerL1.cxx:130
 AliTRDTriggerL1.cxx:131
 AliTRDTriggerL1.cxx:132
 AliTRDTriggerL1.cxx:133
 AliTRDTriggerL1.cxx:134
 AliTRDTriggerL1.cxx:135
 AliTRDTriggerL1.cxx:136
 AliTRDTriggerL1.cxx:137
 AliTRDTriggerL1.cxx:138
 AliTRDTriggerL1.cxx:139
 AliTRDTriggerL1.cxx:140
 AliTRDTriggerL1.cxx:141
 AliTRDTriggerL1.cxx:142
 AliTRDTriggerL1.cxx:143
 AliTRDTriggerL1.cxx:144
 AliTRDTriggerL1.cxx:145
 AliTRDTriggerL1.cxx:146
 AliTRDTriggerL1.cxx:147
 AliTRDTriggerL1.cxx:148
 AliTRDTriggerL1.cxx:149
 AliTRDTriggerL1.cxx:150
 AliTRDTriggerL1.cxx:151
 AliTRDTriggerL1.cxx:152
 AliTRDTriggerL1.cxx:153
 AliTRDTriggerL1.cxx:154
 AliTRDTriggerL1.cxx:155
 AliTRDTriggerL1.cxx:156
 AliTRDTriggerL1.cxx:157
 AliTRDTriggerL1.cxx:158
 AliTRDTriggerL1.cxx:159
 AliTRDTriggerL1.cxx:160
 AliTRDTriggerL1.cxx:161
 AliTRDTriggerL1.cxx:162
 AliTRDTriggerL1.cxx:163
 AliTRDTriggerL1.cxx:164
 AliTRDTriggerL1.cxx:165
 AliTRDTriggerL1.cxx:166
 AliTRDTriggerL1.cxx:167
 AliTRDTriggerL1.cxx:168
 AliTRDTriggerL1.cxx:169
 AliTRDTriggerL1.cxx:170
 AliTRDTriggerL1.cxx:171
 AliTRDTriggerL1.cxx:172
 AliTRDTriggerL1.cxx:173
 AliTRDTriggerL1.cxx:174
 AliTRDTriggerL1.cxx:175
 AliTRDTriggerL1.cxx:176
 AliTRDTriggerL1.cxx:177
 AliTRDTriggerL1.cxx:178
 AliTRDTriggerL1.cxx:179
 AliTRDTriggerL1.cxx:180
 AliTRDTriggerL1.cxx:181
 AliTRDTriggerL1.cxx:182
 AliTRDTriggerL1.cxx:183
 AliTRDTriggerL1.cxx:184
 AliTRDTriggerL1.cxx:185
 AliTRDTriggerL1.cxx:186
 AliTRDTriggerL1.cxx:187
 AliTRDTriggerL1.cxx:188
 AliTRDTriggerL1.cxx:189
 AliTRDTriggerL1.cxx:190