]>
Commit | Line | Data |
---|---|---|
1 | /************************************************************************** | |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* $Id: AliTRDTriggerL1.cxx 31904 2009-04-08 16:42:03Z cblume $ */ | |
17 | ||
18 | /////////////////////////////////////////////////////////////////////////////// | |
19 | // // | |
20 | // TRD trigger L1 (GTU) simulation steering // | |
21 | // The Trigger() method calls the GTU tracking simulation and // | |
22 | // runs the triggers for HCO, HJT, HSE, HQU, HEE // | |
23 | // // | |
24 | /////////////////////////////////////////////////////////////////////////////// | |
25 | ||
26 | ||
27 | #include "TObjArray.h" | |
28 | #include <TTree.h> | |
29 | ||
30 | #include "AliLog.h" | |
31 | #include "AliTriggerInput.h" | |
32 | #include "AliRunLoader.h" | |
33 | #include "AliLoader.h" | |
34 | ||
35 | #include "AliTRDTriggerL1.h" | |
36 | #include "AliTRDgtuSim.h" | |
37 | #include "AliTRDtrackGTU.h" | |
38 | #include "AliTRDcalibDB.h" | |
39 | #include "AliTRDCalDCSGTU.h" | |
40 | ||
41 | AliTRDTriggerL1::AliTRDTriggerL1() : | |
42 | AliTriggerDetector(), | |
43 | fPtThresholdA(3.), | |
44 | fPtThresholdB(2.), | |
45 | fPidThresholdA(144), | |
46 | fPidThresholdB(164), | |
47 | fNoThreshold(1), | |
48 | fNoThresholdA(1), | |
49 | fNoThresholdB(1), | |
50 | fNoThresholdJetA(3), | |
51 | fNoThresholdJetB(250), | |
52 | fNoThresholdElA(1), | |
53 | fNoThresholdElB(1), | |
54 | fNoTrklThresholdElA(5), | |
55 | fNoTrklThresholdElB(5), | |
56 | fLayerMaskElA(0x1), | |
57 | fLayerMaskElB(0x1) | |
58 | { | |
59 | // ctor | |
60 | ||
61 | SetName("TRD"); | |
62 | } | |
63 | ||
64 | AliTRDTriggerL1::~AliTRDTriggerL1() | |
65 | { | |
66 | // dtor | |
67 | } | |
68 | ||
69 | void AliTRDTriggerL1::CreateInputs() | |
70 | { | |
71 | // create the trigger inputs for TRD | |
72 | ||
73 | if (fInputs.GetEntriesFast() > 0) | |
74 | return; | |
75 | ||
76 | fInputs.AddLast(new AliTriggerInput("1HCO", "TRD", 1)); | |
77 | fInputs.AddLast(new AliTriggerInput("1HJT", "TRD", 1)); | |
78 | fInputs.AddLast(new AliTriggerInput("1HSE", "TRD", 1)); | |
79 | fInputs.AddLast(new AliTriggerInput("1HQU", "TRD", 1)); | |
80 | fInputs.AddLast(new AliTriggerInput("1HEE", "TRD", 1)); | |
81 | } | |
82 | ||
83 | void AliTRDTriggerL1::Trigger() | |
84 | { | |
85 | // run the trigger algorithms | |
86 | ||
87 | AliRunLoader *runLoader = AliRunLoader::Instance(); | |
88 | if (!runLoader) | |
89 | return; | |
90 | AliLoader *trdLoader = runLoader->GetLoader("TRDLoader"); | |
91 | if (!trdLoader) | |
92 | return; | |
93 | ||
94 | // now running the GTU tracking; | |
95 | AliTRDgtuSim *gtusim = new AliTRDgtuSim(); | |
96 | gtusim->RunGTU(trdLoader, 0x0); | |
97 | ||
98 | TTree *trackTree = trdLoader->GetDataLoader("gtutracks")->Tree(); | |
99 | if (!trackTree) { | |
100 | AliDebug(1,"Did not find track tree"); | |
101 | return; | |
102 | } | |
103 | TBranch *branch = trackTree->GetBranch("TRDtrackGTU"); | |
104 | AliDebug(1,Form("TRD trigger: found %lld tracks", trackTree->GetEntriesFast())); | |
105 | ||
106 | // trigger algorithms to come, e.g. | |
107 | Bool_t triggered1HCO = kFALSE; | |
108 | Bool_t triggered1HJT = kFALSE; | |
109 | Bool_t triggered1HSE = kFALSE; | |
110 | Bool_t triggered1HQU = kFALSE; | |
111 | Bool_t triggered1HEE = kFALSE; | |
112 | ||
113 | if (branch) { | |
114 | AliTRDtrackGTU *trk = 0x0; | |
115 | branch->SetAddress(&trk); | |
116 | ||
117 | Int_t nTracks[90] = { 0 }; // number of tracks | |
118 | Int_t nTracksA[90] = { 0 }; // number of tracks above pt threshold A | |
119 | Int_t nTracksB[90] = { 0 }; // number of tracks above pt threshold B | |
120 | Int_t nTracksElA[90] = { 0 }; // number of tracks above pt threshold A and PID threshold A | |
121 | Int_t nTracksElB[90] = { 0 }; // number of tracks above pt threshold B and PID threshold B | |
122 | ||
123 | for (Int_t iTrack = 0; iTrack < trackTree->GetEntriesFast(); iTrack++) { | |
124 | trackTree->GetEntry(iTrack); | |
125 | ||
126 | nTracks[5*trk->GetSector() + trk->GetStack()]++; | |
127 | ||
128 | if (TMath::Abs(trk->GetPt()) > fPtThresholdA) { | |
129 | nTracksA[5*trk->GetSector() + trk->GetStack()]++; | |
130 | if ((trk->GetPID() > fPidThresholdA) && | |
131 | ((trk->GetTrackletMask() & fLayerMaskElA) == fLayerMaskElA) && | |
132 | (trk->GetNTracklets() >= fNoTrklThresholdElA)) | |
133 | nTracksElA[5*trk->GetSector() + trk->GetStack()]++; | |
134 | } | |
135 | ||
136 | if (TMath::Abs(trk->GetPt()) > fPtThresholdB) { | |
137 | nTracksB[5*trk->GetSector() + trk->GetStack()]++; | |
138 | if ((trk->GetPID() > fPidThresholdB) && | |
139 | ((trk->GetTrackletMask() & fLayerMaskElB) == fLayerMaskElB) && | |
140 | (trk->GetNTracklets() >= fNoTrklThresholdElB)) | |
141 | nTracksElB[5*trk->GetSector() + trk->GetStack()]++; | |
142 | } | |
143 | } | |
144 | ||
145 | for (Int_t iStack = 0; iStack < 90; iStack++) { | |
146 | if (nTracks[iStack] >= fNoThreshold) | |
147 | triggered1HCO = kTRUE; | |
148 | ||
149 | if ((nTracksA[iStack] >= fNoThresholdJetA) || (nTracksB[iStack] >= fNoThresholdJetB)) | |
150 | triggered1HJT = kTRUE; | |
151 | ||
152 | if ((nTracksElA[iStack] >= fNoThresholdElA)) | |
153 | triggered1HSE = kTRUE; | |
154 | ||
155 | if ((nTracksElB[iStack] >= fNoThresholdElB)) | |
156 | triggered1HQU = kTRUE; | |
157 | } | |
158 | } | |
159 | else { | |
160 | AliWarning("GTU Branch not found"); | |
161 | } | |
162 | ||
163 | if (triggered1HCO) { | |
164 | AliDebug(1, "Fired cosmic trigger"); | |
165 | SetInput("1HCO"); | |
166 | } | |
167 | ||
168 | if (triggered1HJT) { | |
169 | AliDebug(1, "Fired jet trigger"); | |
170 | SetInput("1HJT"); | |
171 | } | |
172 | ||
173 | if (triggered1HSE) { | |
174 | AliDebug(1, "Fired single electron trigger"); | |
175 | SetInput("1HSE"); | |
176 | } | |
177 | ||
178 | if (triggered1HQU) { | |
179 | AliDebug(1, "Fired single electron trigger"); | |
180 | SetInput("1HQU"); | |
181 | } | |
182 | ||
183 | if (triggered1HEE) { | |
184 | AliDebug(1, "Fired single electron trigger"); | |
185 | SetInput("1HEE"); | |
186 | } | |
187 | ||
188 | // cleaning up | |
189 | delete gtusim; | |
190 | } |