]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/dielectron/AliAnalysisTaskDielectronSE.cxx
Add AliEMCALRecoUtils pointer to remove bad or exotic clusters for cluster histograms...
[u/mrichter/AliRoot.git] / PWG3 / dielectron / AliAnalysisTaskDielectronSE.cxx
1 /*************************************************************************
2 * Copyright(c) 1998-2009, 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 ///////////////////////////////////////////////////////////////////////////
17 //                                                                       //
18 //                        Basic Analysis Task                            //
19 //                      for Dielectron Analysis                          //
20 //                                                                       //
21 ///////////////////////////////////////////////////////////////////////////
22
23 #include <TChain.h>
24 #include <TH1D.h>
25
26 #include <AliCFContainer.h>
27 #include <AliVEvent.h>
28 #include <AliInputEventHandler.h>
29 #include <AliESDInputHandler.h>
30 #include <AliAnalysisManager.h>
31 #include <AliAODInputHandler.h>
32
33 #include "AliDielectron.h"
34 #include "AliDielectronHistos.h"
35 #include "AliDielectronCF.h"
36 #include "AliAnalysisTaskDielectronSE.h"
37
38 ClassImp(AliAnalysisTaskDielectronSE)
39
40 //_________________________________________________________________________________
41 AliAnalysisTaskDielectronSE::AliAnalysisTaskDielectronSE() :
42   AliAnalysisTaskSE(),
43   fDielectron(0),
44   fSelectPhysics(kFALSE),
45   fTriggerMask(AliVEvent::kMB),
46   fEventStat(0x0)
47 {
48   //
49   // Constructor
50   //
51 }
52
53 //_________________________________________________________________________________
54 AliAnalysisTaskDielectronSE::AliAnalysisTaskDielectronSE(const char *name) :
55   AliAnalysisTaskSE(name),
56   fDielectron(0),
57   fSelectPhysics(kFALSE),
58   fTriggerMask(AliVEvent::kMB),
59   fEventStat(0x0)
60 {
61   //
62   // Constructor
63   //
64   DefineInput(0,TChain::Class());
65   DefineOutput(1, THashList::Class());
66   DefineOutput(2, AliCFContainer::Class());
67   DefineOutput(3, TH1D::Class());
68 }
69
70 //_________________________________________________________________________________
71 void AliAnalysisTaskDielectronSE::UserCreateOutputObjects()
72 {
73   //
74   // Initialise the framework objects
75   //
76   if (!fDielectron){
77     AliError("No Dielectron framework object set !!!");
78     return;
79   }
80   fDielectron->Init();
81   if (fDielectron->GetHistogramList()){
82     PostData(1, const_cast<THashList*>(fDielectron->GetHistogramList()));
83   }
84   if (fDielectron->GetCFManagerPair()){
85     PostData(2, const_cast<AliCFContainer*>(fDielectron->GetCFManagerPair()->GetContainer()));
86   }
87   
88   if (!fEventStat){
89     fEventStat=new TH1D("hEventStat","Event statistics",5,0,5);
90     fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel.");
91     fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel.");
92   }
93   
94   PostData(3,fEventStat);
95   
96 }
97
98 //_________________________________________________________________________________
99 void AliAnalysisTaskDielectronSE::UserExec(Option_t *)
100 {
101   //
102   // Main loop. Called for every event
103   //
104
105   if (!fDielectron) return;
106   
107   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
108   AliESDInputHandler *esdHandler=0x0;
109   if ( (esdHandler=dynamic_cast<AliESDInputHandler*>(man->GetInputEventHandler())) && esdHandler->GetESDpid() ){
110     AliDielectronVarManager::SetESDpid(esdHandler->GetESDpid());
111   } else {
112     //load esd pid bethe bloch parameters depending on the existance of the MC handler
113     // yes: MC parameters
114     // no:  data parameters
115     
116     //ESD case
117     if (man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()){
118       if (!AliDielectronVarManager::GetESDpid()){
119         
120         if (AliDielectronMC::Instance()->HasMC()) {
121           AliDielectronVarManager::InitESDpid();
122         } else {
123           AliDielectronVarManager::InitESDpid(1);
124         }
125       }
126     }
127     //AOD case
128     if (man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class()){
129       if (!AliDielectronVarManager::GetAODpidUtil()){
130         if (AliDielectronMC::Instance()->HasMC()) {
131           AliDielectronVarManager::InitAODpidUtil();
132         } else {
133           AliDielectronVarManager::InitAODpidUtil(1);
134         }
135       }
136     }
137   }
138   // Was event selected ?
139   AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
140   UInt_t isSelected = AliVEvent::kAny;
141   if( fSelectPhysics && inputHandler && inputHandler->GetEventSelection() ) {
142     isSelected = inputHandler->IsEventSelected();
143     isSelected&=fTriggerMask;
144   }
145   
146   //Before physics selection
147   fEventStat->Fill(0.);
148   if (isSelected==0) {
149     PostData(3,fEventStat);
150     return;
151   }
152   //after physics selection
153   fEventStat->Fill(1.);
154   
155   //bz for AliKF
156   Double_t bz = InputEvent()->GetMagneticField();
157   AliKFParticle::SetField( bz );
158   
159   fDielectron->Process(InputEvent());
160
161   if (fDielectron->GetHistogramList()){
162     PostData(1, const_cast<THashList*>(fDielectron->GetHistogramList()));
163   }
164   if (fDielectron->GetCFManagerPair()){
165     PostData(2, const_cast<AliCFContainer*>(fDielectron->GetCFManagerPair()->GetContainer()));
166   }
167   PostData(3,fEventStat);
168 }
169