* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
//---------------------------------------------------------------------
// Jet finder base class
// manages the search for jets
-// Author: jgcn@mda.cinvestav.mx
+// Authors: jgcn@mda.cinvestav.mx
+// andreas.morsch@cern.ch
+// magali.estienne@subatech.in2p3.fr
//---------------------------------------------------------------------
#include <Riostream.h>
#include <TFile.h>
-#include "AliGenPythiaEventHeader.h"
+
#include "AliJetFinder.h"
-#include "AliJet.h"
-#include "AliJetReader.h"
+#include "AliAODJet.h"
+#include "AliAODEvent.h"
+#include "AliJetUnitArray.h"
#include "AliJetReaderHeader.h"
-#include "AliJetControlPlots.h"
-#include "AliLeading.h"
-#include "AliHeader.h"
+#include "AliJetHeader.h"
+#include "AliJetReader.h"
+#include "AliAODJetEventBackground.h"
ClassImp(AliJetFinder)
-
AliJetFinder::AliJetFinder():
- fPlotMode(kFALSE),
- fJets(0),
- fGenJets(0),
- fLeading(0),
- fReader(0x0),
- fPlots(0x0),
- fOut(0x0)
-
+ fReader(0x0),
+ fHeader(0x0),
+ fAODjets(0x0),
+ fNAODjets(0),
+ fAODEvBkg(0),
+ fDebug(0)
{
+ //
// Constructor
- //fOut = 0x0;
- fJets = new AliJet();
- fGenJets = new AliJet();
- fLeading = new AliLeading();
- //fReader = 0x0;
- //fPlots = 0x0;
- //SetPlotMode(kFALSE);
+ //
+ fAODjets = 0;
}
////////////////////////////////////////////////////////////////////////
-
AliJetFinder::~AliJetFinder()
{
- // destructor
- // here reset and delete jets
- fJets->ClearJets();
- delete fJets;
- fGenJets->ClearJets();
- delete fGenJets;
- // close file
- if (fOut) {
- fOut->Close();
- fOut->Delete();
- }
- delete fOut;
- // reset and delete control plots
- if (fPlots) delete fPlots;
+ //
+ // Destructor
+ //
}
-////////////////////////////////////////////////////////////////////////
-void AliJetFinder::SetOutputFile(const char *name)
+
+////////////////////////////////////////////////////////////////////////
+void AliJetFinder::WriteRHeaderToFile()
{
- // opens output file
- fOut = new TFile(name,"recreate");
+ // write reader header
+ AliJetReaderHeader *rh = fReader->GetReaderHeader();
+ rh->Write();
}
-////////////////////////////////////////////////////////////////////////
-void AliJetFinder::PrintJets()
+////////////////////////////////////////////////////////////////////////
+void AliJetFinder::ConnectTree(TTree* tree, TObject* data)
{
- // Print jet information
- cout << " Jets found with jet algorithm:" << endl;
- fJets->PrintJets();
- cout << " Jets found by pythia:" << endl;
- fGenJets->PrintJets();
+ // Connect the input file
+ fReader->ConnectTree(tree, data);
}
////////////////////////////////////////////////////////////////////////
-
-void AliJetFinder::SetPlotMode(Bool_t b)
+void AliJetFinder::WriteHeaders()
{
- // Sets the plotting mode
- fPlotMode=b;
- if (b && !fPlots) fPlots = new AliJetControlPlots();
+ // Write the Headers
+ TFile* f = new TFile("jets_local.root", "recreate");
+ WriteRHeaderToFile();
+ WriteJHeaderToFile();
+ f->Close();
}
////////////////////////////////////////////////////////////////////////
-
-void AliJetFinder::WriteJetsToFile(Int_t i)
+Bool_t AliJetFinder::ProcessEvent()
{
- // Writes the jets to file
- fOut->cd();
- char hname[30];
- sprintf(hname,"TreeJ%d",i);
- TTree* jetT = new TTree(hname,"AliJet");
- jetT->Branch("FoundJet",&fJets,1000);
- jetT->Branch("GenJet",&fGenJets,1000);
- jetT->Branch("LeadingPart",&fLeading,1000);
- jetT->Fill();
- jetT->Write(hname);
- delete jetT;
+ //
+ // Process one event
+ // Charged only jets
+ //
+
+ Bool_t ok = fReader->FillMomentumArray();
+ if (!ok) return kFALSE;
+ // Jets
+ FindJets(); // V1
+ Reset();
+ return kTRUE;
}
////////////////////////////////////////////////////////////////////////
-
-void AliJetFinder::WriteRHeaderToFile()
+Bool_t AliJetFinder::ProcessEvent2()
{
- // write reader header
- fOut->cd();
- AliJetReaderHeader *rh = fReader->GetReaderHeader();
- rh->Write();
+ //
+ // Process one event
+ // Charged only or charged+neutral jets
+ //
+
+ TRefArray* ref = new TRefArray();
+ Bool_t procid = kFALSE;
+ Bool_t ok = fReader->ExecTasks(procid,ref);
+
+ // Delete reference pointer
+ if (!ok) {delete ref; return kFALSE;}
+ // Jets
+ FindJets();
+
+ Int_t nEntRef = ref->GetEntries();
+
+ for(Int_t i=0; i<nEntRef; i++)
+ {
+ // Reset the UnitArray content which were referenced
+ ((AliJetUnitArray*)ref->At(i))->SetUnitTrackID(0);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitEnergy(0.);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitCutFlag(kPtSmaller);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitCutFlag2(kPtSmaller);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitSignalFlag(kBad);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitSignalFlagC(kTRUE,kBad);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitDetectorFlag(kTpc);
+ ((AliJetUnitArray*)ref->At(i))->SetUnitFlag(kOutJet);
+ ((AliJetUnitArray*)ref->At(i))->ClearUnitTrackRef();
+
+ // Reset process ID
+ AliJetUnitArray* uA = (AliJetUnitArray*)ref->At(i);
+ uA->ResetBit(kIsReferenced);
+ uA->SetUniqueID(0);
+ }
+
+ // Delete the reference pointer
+ ref->Delete();
+ delete ref;
+
+ Reset();
+
+ return kTRUE;
}
-////////////////////////////////////////////////////////////////////////
-void AliJetFinder::GetGenJets()
+void AliJetFinder::AddJet(AliAODJet p)
{
- // Get the generated jet information from mc header
- AliHeader* alih = fReader->GetAliHeader();
- if (alih == 0) return;
- AliGenEventHeader * genh = alih->GenEventHeader();
- if (genh == 0) return;
- Int_t nj =((AliGenPythiaEventHeader*)genh)->NTriggerJets();
- Int_t* m = new Int_t[nj];
- Int_t* k = new Int_t[nj];
- for (Int_t i=0; i< nj; i++) {
- Float_t p[4];
- ((AliGenPythiaEventHeader*)genh)->TriggerJet(i,p);
- fGenJets->AddJet(p[0],p[1],p[2],p[3]);
- m[i]=1;
- k[i]=i;
- }
- fGenJets->SetNinput(nj);
- fGenJets->SetMultiplicities(m);
- fGenJets->SetInJet(k);
+// Add new jet to the list
+ new ((*fAODjets)[fNAODjets++]) AliAODJet(p);
}
-////////////////////////////////////////////////////////////////////////
+void AliJetFinder::ConnectAOD(AliAODEvent* aod)
+{
+// Connect to the AOD
+ fAODjets = aod->GetJets();
+ fAODEvBkg = (AliAODJetEventBackground*)(aod->FindListObject(AliAODJetEventBackground::StdBranchName()));
+}
-void AliJetFinder::Run()
+////////////////////////////////////////////////////////////////////////
+void AliJetFinder::ConnectAODNonStd(AliAODEvent* aod,const char *bname)
{
- // do some initialization
- Init();
-
- // connect files
- fReader->OpenInputFiles();
-
- // write headers
- if (fOut) {
- fOut->cd();
- WriteRHeaderToFile();
- WriteJHeaderToFile();
- }
- // loop over events
- Int_t nFirst,nLast;
- nFirst = fReader->GetReaderHeader()->GetFirstEvent();
- nLast = fReader->GetReaderHeader()->GetLastEvent();
- // loop over events
- for (Int_t i=nFirst;i<nLast;i++) {
- fReader->FillMomentumArray(i);
- fLeading->FindLeading(fReader);
- GetGenJets();
- FindJets();
- if (fOut) WriteJetsToFile(i);
- if (fPlots) fPlots->FillHistos(fJets);
- fLeading->Reset();
- fGenJets->ClearJets();
- Reset();
- }
- // write out
- if (fPlots) {
- fPlots->Normalize();
- fPlots->PlotHistos();
- }
- if (fOut) {
- fOut->cd();
- fPlots->Write();
- fOut->Close();
- }
+
+ fAODjets = dynamic_cast<TClonesArray*>(aod->FindListObject(bname));
+ fAODEvBkg = (AliAODJetEventBackground*)(aod->FindListObject(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),bname)));
+ // how is this is reset? Cleared? -> by the UserExec!!
}
+