2 // $Id: AliHLTJETFastJetFinder.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 AliHLTJETFastJetFinder.cxx
20 @author Jochen Thaeder
22 @brief FastJet finder interface
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 "fastjet/AreaDefinition.hh"
32 //#include "fastjet/JetDefinition.hh"
33 // get info on how fastjet was configured
34 //#include "fastjet/config.h"
36 //#include <TLorentzVector.h>
37 //#include <TArrayF.h>
38 //#include <TClonesArray.h>
40 //#include "AliAODJet.h"
42 #include "AliHLTJETReader.h"
43 #include "AliHLTJETJetCuts.h"
45 #include "AliHLTJETFastJetFinder.h"
46 #include "AliHLTJETFastJetHeader.h"
48 //#include<sstream> // needed for internal io
54 /** ROOT macro for the implementation of ROOT specific class methods */
55 ClassImp(AliHLTJETFastJetFinder)
58 * ---------------------------------------------------------------------------------
59 * Constructor / Destructor
60 * ---------------------------------------------------------------------------------
63 // #################################################################################
64 AliHLTJETFastJetFinder::AliHLTJETFastJetFinder()
69 // see header file for class documentation
71 // refer to README to build package
73 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
77 // #################################################################################
78 AliHLTJETFastJetFinder::~AliHLTJETFastJetFinder() {
79 // see header file for class documentation
84 * ---------------------------------------------------------------------------------
86 * ---------------------------------------------------------------------------------
89 // #################################################################################
90 Int_t AliHLTJETFastJetFinder::Initialize() {
91 // see header file for class documentation
95 if ( !fHeader || !fReader ) {
96 HLTError("No header or reader set!");
100 // -- Initialize Reader
101 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
103 iResult = reader->Initialize();
105 HLTError( "Initializing Reader failed!");
109 // -- Initialize Header
110 AliHLTJETFastJetHeader *header = dynamic_cast<AliHLTJETFastJetHeader*> (fHeader);
112 iResult = header->Initialize();
114 HLTError( "Initializing Header failed!");
118 // -- Set ptr to vector
119 fInputVector = reader->GetVector();
120 if ( ! fInputVector ) {
121 HLTError( "Getting ptr to vector failed!");
125 // -- Check ptr to output container
127 HLTError( "Ptr to output container not set!");
134 // #################################################################################
135 void AliHLTJETFastJetFinder::Reset() {
136 // see header file for class documentation
138 // -- Reset output container
146 * ---------------------------------------------------------------------------------
148 * ---------------------------------------------------------------------------------
151 // #################################################################################
152 Bool_t AliHLTJETFastJetFinder::ProcessEvent() {
153 // see header file for class documentation
155 // -- Pick up jet reader
156 AliHLTJETReader *reader = dynamic_cast<AliHLTJETReader*> (fReader);
162 if ( !reader->FillVector() ){
163 HLTError("Error filling vector.");
167 // -- Find Jets, fill jets and apply jet cuts
168 if ( FindFastJets() ) {
169 HLTError("Error finding jets.");
176 // #################################################################################
177 Bool_t AliHLTJETFastJetFinder::ProcessHLTEvent() {
178 // see header file for class documentation
183 // -- Find Jets, fill jets and apply jet cuts
184 if ( FindFastJets() ) {
185 HLTError("Error finding jets.");
193 * ---------------------------------------------------------------------------------
195 * ---------------------------------------------------------------------------------
198 // #################################################################################
199 void AliHLTJETFastJetFinder::PrintJets( vector<fastjet::PseudoJet> &jets,
200 fastjet::ClusterSequenceArea &clust_seq ) {
201 // see header file for class documentation
203 // -- pick up fastjet header
204 AliHLTJETFastJetHeader *header = dynamic_cast<AliHLTJETFastJetHeader*> (fHeader);
206 // -- print header info
207 TString comment = header->GetComment();
208 comment += TString(clust_seq.strategy_string());
210 HLTInfo( "--------------------------------------------------------" );
211 HLTInfo( "%s", comment.Data() );
212 HLTInfo( "--------------------------------------------------------" );
214 header->PrintParameters();
216 // -- print found jets
217 HLTInfo( "Number of unclustered particles: %i", clust_seq.unclustered_particles().size() );
219 HLTInfo( "Printing inclusive sub jets with pt > %f GeV", header->GetPtMin() );
220 HLTInfo( "-------------------------------------------------------" );
221 HLTInfo( " ijet rap phi Pt area +- err" );
223 for ( UInt_t jetIter = 0; jetIter < jets.size(); jetIter++ ) {
225 Double_t area = clust_seq.area(jets[jetIter]);
226 Double_t area_error = clust_seq.area_error(jets[jetIter]);
228 HLTInfo( "%5u %9.5f %8.5f %10.3f %8.3f +- %6.3f",
229 jetIter,jets[jetIter].rap(),jets[jetIter].phi(),jets[jetIter].perp(), area, area_error );
231 } // for ( Int_t jetIter = 0; jetIter < jets.size(); jetIter++ ) {
237 * ---------------------------------------------------------------------------------
239 * ---------------------------------------------------------------------------------
242 // #################################################################################
243 Int_t AliHLTJETFastJetFinder::FindFastJets() {
244 // see header file for class documentation
246 // -- pick up fastjet header
247 AliHLTJETFastJetHeader *header = dynamic_cast<AliHLTJETFastJetHeader*> (fHeader);
249 // -- Run the jet clustering with the jet definition from the header
250 fastjet::ClusterSequenceArea clust_seq( (*fInputVector),
251 (*header->GetJetDefinition()),
252 (*header->GetAreaDefinition()) );
254 // -- Extract the inclusive jets with pt > ptmin, sorted by pt
255 vector<fastjet::PseudoJet> inclusive_jets = clust_seq.inclusive_jets(header->GetPtMin());
257 // -- Subtract background
258 vector<fastjet::PseudoJet> sub_jets = clust_seq.subtracted_jets((*header->GetRangeDefinition()),
261 // -- Sort jets into increasing pt
262 vector<fastjet::PseudoJet> jets = sorted_by_pt(sub_jets);
264 // -- Fill jets in output container
265 // -----------------------------------
268 AliHLTJETJetCuts* jetCuts = header->GetJetCuts();
270 // -- Loop over jet candidates
271 for ( UInt_t jetIter = 0; jetIter < jets.size(); jetIter++ ) {
274 AliAODJet aodjet (jets[jetIter].px(), jets[jetIter].py(),
275 jets[jetIter].pz(), jets[jetIter].E());
278 if ( ! jetCuts->IsSelected(&aodjet) )
281 fJets->AddJet(&aodjet);
283 } // for ( Int_t jetIter = 0; jetIter < jets.size(); jetIter++ ) {
286 // -- Print found jets
287 PrintJets( jets, clust_seq );