2 // $Id: AliHLTJETConeFinder.cxx $
3 /**************************************************************************
4 * This file is property of and copyright by the ALICE HLT Project *
5 * ALICE Experiment at CERN, All rights reserved. *
7 * Primary Authors: Jochen Thaeder <thaeder@kip.uni-heidelberg.de> *
8 * for The ALICE HLT Project. *
10 * Permission to use, copy, modify and distribute this software and its *
11 * documentation strictly for non-commercial purposes is hereby granted *
12 * without fee, provided that the above copyright notice appears in all *
13 * copies and that both the copyright notice and this permission notice *
14 * appear in the supporting documentation. The authors make no claims *
15 * about the suitability of this software for any purpose. It is *
16 * provided "as is" without express or implied warranty. *
17 **************************************************************************/
19 /** @file AliHLTJETConeFinder.cxx
20 @author Jochen Thaeder
22 @brief Jet cone finder
25 // see header file for class documentation
27 // refer to README to build package
29 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
31 #include "AliHLTJETReader.h"
33 #include "AliHLTJETConeGrid.h"
34 #include "AliHLTJETConeFinder.h"
35 #include "AliHLTJETConeHeader.h"
36 #include "AliHLTJETConeJetCandidate.h"
37 #include "AliHLTJETConeEtaPhiCell.h"
41 /** ROOT macro for the implementation of ROOT specific class methods */
42 ClassImp(AliHLTJETConeFinder)
45 * ---------------------------------------------------------------------------------
46 * Constructor / Destructor
47 * ---------------------------------------------------------------------------------
50 // #################################################################################
51 AliHLTJETConeFinder::AliHLTJETConeFinder()
57 // see header file for class documentation
59 // refer to README to build package
61 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
65 // #################################################################################
66 AliHLTJETConeFinder::~AliHLTJETConeFinder() {
67 // see header file for class documentation
72 * ---------------------------------------------------------------------------------
74 * ---------------------------------------------------------------------------------
77 // #################################################################################
78 Int_t AliHLTJETConeFinder::Initialize() {
79 // see header file for class documentation
83 if ( !fHeader || !fReader ) {
84 HLTError("No header or reader set!");
88 // -- Initialize Reader
89 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
91 HLTError( "Casting Reader failed!");
95 iResult = reader->Initialize();
97 HLTError( "Initializing Reader failed!");
101 // -- Initialize Header
102 AliHLTJETConeHeader *header = dynamic_cast<AliHLTJETConeHeader*> (fHeader);
104 HLTError( "Casting Header failed!");
108 iResult = header->Initialize();
110 HLTError( "Initializing Header failed!");
114 // -- Set ptr to grid
115 fGrid = reader->GetGrid();
117 HLTError( "Getting ptr to grid failed!");
121 // -- Check ptr to output container
123 HLTError( "Ptr to output container not set!");
130 // #################################################################################
131 void AliHLTJETConeFinder::Reset() {
132 // see header file for class documentation
134 // -- Reset output container
142 * ---------------------------------------------------------------------------------
144 * ---------------------------------------------------------------------------------
147 // #################################################################################
148 Bool_t AliHLTJETConeFinder::ProcessEvent() {
149 // see header file for class documentation
154 // -- Pick up jet reader
155 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
157 HLTError("Error getting reader.");
162 if ( !reader->FillGrid() ){
163 HLTError("Error filling grid.");
168 if ( FindConeLeading() ) {
169 HLTError("Error finding leading.");
174 if ( FindConeJets() ) {
175 HLTError("Error finding jets.");
179 // -- Fill Jets and apply jet cuts
180 if ( FillConeJets() ) {
181 HLTError("Error filling jets.");
188 // #################################################################################
189 Bool_t AliHLTJETConeFinder::ProcessHLTEvent() {
190 // see header file for class documentation
196 if ( FindConeLeading() ) {
197 HLTError("Error finding leading.");
202 if ( FindConeJets() ) {
203 HLTError("Error finding jets.");
207 // -- Fill Jets and apply jet cuts
208 if ( FillConeJets() ) {
209 HLTError("Error filling jets.");
217 * ---------------------------------------------------------------------------------
219 * ---------------------------------------------------------------------------------
222 // #################################################################################
223 Int_t AliHLTJETConeFinder::FindConeLeading() {
224 // see header file for class documentation
226 // -- Pick up jet reader
227 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
229 HLTError("Error getting reader.");
233 // -- Pick up jet header
234 AliHLTJETConeHeader* header = dynamic_cast<AliHLTJETConeHeader*> (fHeader);
236 HLTError("Error getting header.");
240 // -- Pick up jet canidates
241 TClonesArray* jetCandidates = reader->GetJetCandidates();
243 // -- Check for more than 1 jet candidate
244 if ( reader->GetNJetCandidates() > 1 ) {
246 // -- Sort jet candidates with seed pt
247 jetCandidates->Sort();
249 // -- Use leading seed only
250 // Keep index 0, remove the others
251 if ( header->GetUseLeading() ) {
253 for ( Int_t iter = 1; iter < reader->GetNJetCandidates(); iter++ )
254 jetCandidates->RemoveAt(iter);
256 reader->SetNJetCandidates(1);
259 } // if ( reader->GetNJetCandidates() > 1 ) {
261 // -- Resize the seed TClonesArray
262 jetCandidates->Compress();
267 // #################################################################################
268 Int_t AliHLTJETConeFinder::FindConeJets() {
269 // see header file for class documentation
273 // -- Pick up jet reader
274 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
276 HLTError("Error getting reader.");
280 // -- Pick up jet canidates
281 TClonesArray* jetCandidates = reader->GetJetCandidates();
283 // -- Loop over jet candidates
284 for ( Int_t iter = 0; iter < reader->GetNJetCandidates(); iter++ ) {
286 AliHLTJETConeJetCandidate* jet = reinterpret_cast<AliHLTJETConeJetCandidate*> ((*jetCandidates)[iter]);
288 // -- Set iterator for cells around seed
289 fGrid->SetCellIter( jet->GetSeedEtaIdx(), jet->GetSeedPhiIdx() );
293 // -- Loop over cells around ssed
294 while ( (cellIdx = fGrid->NextCell() ) >= 0 && !iResult) {
296 AliHLTJETConeEtaPhiCell* cell = NULL;
297 if ( ! (cell = reinterpret_cast<AliHLTJETConeEtaPhiCell*>(fGrid->UncheckedAt(cellIdx))) )
300 if ( ( iResult = jet->AddCell(cell) ) ) {
301 HLTError( "Error adding cell %d to jet candiate %d", cellIdx, iter);
304 } // while ( (cellIdx = fGrid->NextCell() ) >= 0 && !iResult) {
306 } // for ( Int_t iter = 0; iter < reader->GetNJetCandidates(); iter++ ) {
311 // #################################################################################
312 Int_t AliHLTJETConeFinder::FillConeJets() {
313 // see header file for class documentation
317 // -- Pick up jet reader
318 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
320 HLTError("Error getting reader.");
324 // -- Pick up jet header
325 AliHLTJETConeHeader *header = dynamic_cast<AliHLTJETConeHeader*> (fHeader);
327 HLTError("Error getting header.");
331 // -- Get jet canidates
332 TClonesArray* jetCandidates = reader->GetJetCandidates();
335 AliHLTJETJetCuts* jetCuts = header->GetJetCuts();
337 // -- Loop over jet candidates
338 for ( Int_t iter = 0; iter < reader->GetNJetCandidates(); iter++ ) {
340 AliHLTJETConeJetCandidate* jet = reinterpret_cast<AliHLTJETConeJetCandidate*> ((*jetCandidates)[iter]);
343 if ( ! jetCuts->IsSelected(jet) )
346 // -- Add jet as AliAODJet
347 fJets->AddJet(jet->GetEta(), jet->GetPhi(), jet->GetPt(), jet->GetEt());
349 } // for ( Int_t iter = 0; iter < reader->GetNJetCandidates(); iter++ ) {
351 // xxx HLTDebug( "Added %d jets", fJets->GetNAODJets());
352 HLTInfo( "Added %d jets", fJets->GetNAODJets());