correcting baryon mass subtraction for visible energy in MC
[u/mrichter/AliRoot.git] / JETAN / AliJetFinder.cxx
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$ */
17
18 //---------------------------------------------------------------------
19 // Jet finder base class
20 // manages the search for jets 
21 // Authors: jgcn@mda.cinvestav.mx
22 //          andreas.morsch@cern.ch
23 //          magali.estienne@subatech.in2p3.fr
24 //---------------------------------------------------------------------
25
26 #include <Riostream.h>
27 #include <TFile.h>
28
29 #include "AliJetFinder.h"
30 #include "AliAODJet.h"
31 #include "AliAODEvent.h"
32 #include "AliJetUnitArray.h"
33 #include "AliJetReaderHeader.h"
34 #include "AliJetHeader.h"
35 #include "AliJetReader.h"
36 #include "AliAODJetEventBackground.h"
37
38 ClassImp(AliJetFinder)
39
40 AliJetFinder::AliJetFinder():
41     fReader(0x0),
42     fHeader(0x0),
43     fAODjets(0x0),
44     fNAODjets(0),
45     fAODEvBkg(0),
46     fDebug(0)
47 {
48   //
49   // Constructor
50   //
51   fAODjets = 0;
52 }
53
54 ////////////////////////////////////////////////////////////////////////
55 AliJetFinder::~AliJetFinder()
56 {
57   //
58   // Destructor
59   //
60 }
61
62
63
64 ////////////////////////////////////////////////////////////////////////
65 void AliJetFinder::WriteRHeaderToFile()
66 {
67   // write reader header
68     AliJetReaderHeader *rh = fReader->GetReaderHeader();
69     rh->Write();
70 }
71
72
73 ////////////////////////////////////////////////////////////////////////
74 void AliJetFinder::ConnectTree(TTree* tree, TObject* data)
75 {
76     // Connect the input file
77     fReader->ConnectTree(tree, data);
78 }
79
80 ////////////////////////////////////////////////////////////////////////
81 void AliJetFinder::WriteHeaders()
82 {
83     // Write the Headers
84     TFile* f = new TFile("jets_local.root", "recreate");
85     WriteRHeaderToFile();
86     WriteJHeaderToFile();
87     f->Close();
88 }
89
90 ////////////////////////////////////////////////////////////////////////
91 Bool_t AliJetFinder::ProcessEvent()
92 {
93   //
94   // Process one event
95   // Charged only jets
96   //
97
98   Bool_t ok = fReader->FillMomentumArray();
99   if (!ok) return kFALSE;
100   // Jets
101   FindJets(); // V1
102   Reset();  
103   return kTRUE;
104 }
105
106 ////////////////////////////////////////////////////////////////////////
107 Bool_t AliJetFinder::ProcessEvent2()
108 {
109   //
110   // Process one event
111   // Charged only or charged+neutral jets
112   //
113
114   TRefArray* ref = new TRefArray();
115   Bool_t procid = kFALSE;
116   Bool_t ok = fReader->ExecTasks(procid,ref);
117
118   // Delete reference pointer  
119   if (!ok) {delete ref; return kFALSE;}
120   // Jets
121   FindJets();
122   
123   Int_t nEntRef = ref->GetEntries();
124
125   for(Int_t i=0; i<nEntRef; i++)
126     { 
127       // Reset the UnitArray content which were referenced
128       ((AliJetUnitArray*)ref->At(i))->SetUnitTrackID(0);
129       ((AliJetUnitArray*)ref->At(i))->SetUnitEnergy(0.);
130       ((AliJetUnitArray*)ref->At(i))->SetUnitCutFlag(kPtSmaller);
131       ((AliJetUnitArray*)ref->At(i))->SetUnitCutFlag2(kPtSmaller);
132       ((AliJetUnitArray*)ref->At(i))->SetUnitSignalFlag(kBad);
133       ((AliJetUnitArray*)ref->At(i))->SetUnitSignalFlagC(kTRUE,kBad);
134       ((AliJetUnitArray*)ref->At(i))->SetUnitDetectorFlag(kTpc);
135       ((AliJetUnitArray*)ref->At(i))->SetUnitFlag(kOutJet);
136       ((AliJetUnitArray*)ref->At(i))->ClearUnitTrackRef();
137
138       // Reset process ID
139       AliJetUnitArray* uA = (AliJetUnitArray*)ref->At(i);
140       uA->ResetBit(kIsReferenced);
141       uA->SetUniqueID(0);     
142     }
143
144   // Delete the reference pointer
145   ref->Delete();
146   delete ref;
147
148   Reset();
149
150   return kTRUE;
151 }
152
153
154 void AliJetFinder::AddJet(AliAODJet p)
155 {
156 // Add new jet to the list
157   new ((*fAODjets)[fNAODjets++]) AliAODJet(p);
158 }
159
160 void AliJetFinder::ConnectAOD(AliAODEvent* aod)
161 {
162 // Connect to the AOD
163     fAODjets = aod->GetJets();
164     fAODEvBkg = (AliAODJetEventBackground*)(aod->FindListObject(AliAODJetEventBackground::StdBranchName()));
165 }
166
167 ////////////////////////////////////////////////////////////////////////
168 void AliJetFinder::ConnectAODNonStd(AliAODEvent* aod,const char *bname)
169 {
170
171   fAODjets = dynamic_cast<TClonesArray*>(aod->FindListObject(bname));
172   fAODEvBkg = (AliAODJetEventBackground*)(aod->FindListObject(Form("%s_%s",AliAODJetEventBackground::StdBranchName(),bname)));
173   // how is this is reset? Cleared? -> by the UserExec!!
174 }
175