8 #include <TClonesArray.h>
9 #include "AliAODCaloCluster.h"
10 #include "AliAODEvent.h"
11 #include "AliAnalysisManager.h"
12 #include "AliEMCALRecoUtils.h"
13 #include "AliESDCaloCluster.h"
14 #include "AliESDEvent.h"
15 #include "AliEmcalClusterMaker.h"
17 ClassImp(AliEmcalClusterMaker)
19 //________________________________________________________________________
20 AliEmcalClusterMaker::AliEmcalClusterMaker() :
21 AliAnalysisTaskEmcal("AliEmcalClusterMaker", kFALSE),
27 // Default constructor.
30 //________________________________________________________________________
31 AliEmcalClusterMaker::AliEmcalClusterMaker(const char *name, Bool_t histo) :
32 AliAnalysisTaskEmcal(name, histo),
33 fOutCaloName("EmcClusters"),
38 // Standard constructor.
40 SetMakeGeneralHistograms(histo);
42 fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.";
45 //________________________________________________________________________
46 AliEmcalClusterMaker::~AliEmcalClusterMaker()
51 //________________________________________________________________________
52 void AliEmcalClusterMaker::UserCreateOutputObjects()
54 // Create my user objects.
56 AliAnalysisTaskEmcal::UserCreateOutputObjects();
59 fRecoUtils->Print("");
60 // PostData(1, fOutput);
63 //________________________________________________________________________
64 void AliEmcalClusterMaker::ExecOnce()
66 // Initialize the analysis.
68 // Do base class initializations and if it fails -> bail out
69 AliAnalysisTaskEmcal::ExecOnce();
73 if (dynamic_cast<AliAODEvent*>(InputEvent()))
77 fOutClusters = new TClonesArray("AliESDCaloCluster");
79 fOutClusters = new TClonesArray("AliAODCaloCluster");
81 fOutClusters->SetName(fOutCaloName);
83 // post output in event if not yet present
84 if (!(InputEvent()->FindListObject(fOutCaloName))) {
85 InputEvent()->AddObject(fOutClusters);
87 fInitialized = kFALSE;
88 AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutCaloName.Data()));
93 //________________________________________________________________________
94 Bool_t AliEmcalClusterMaker::Run()
96 // Run the hadronic correction
99 fOutClusters->Delete();
101 // loop over clusters
103 Int_t entries = fCaloClusters->GetEntries();
104 for (Int_t i=0; i<entries; ++i) {
105 AliVCluster *clus = static_cast<AliVCluster*>(fCaloClusters->At(i));
106 if (!clus || !clus->IsEMCAL())
110 AliESDCaloCluster *ec = dynamic_cast<AliESDCaloCluster*>(clus);
112 oc = new ((*fOutClusters)[clusCount]) AliESDCaloCluster(*ec);
114 AliAODCaloCluster *ac = dynamic_cast<AliAODCaloCluster*>(clus);
116 oc = new ((*fOutClusters)[clusCount]) AliAODCaloCluster(*ac);
119 if (fRecoUtils->IsRejectExoticCluster()) {
120 if (fRecoUtils->IsExoticCluster(oc,fCaloCells))
123 if (fRecoUtils->GetNonLinearityFunction()!=AliEMCALRecoUtils::kNoCorrection) {
124 Double_t energy = fRecoUtils->CorrectClusterEnergyLinearity(oc);
128 if (!AcceptCluster(oc))
132 if ((clusCount>0) && (clusCount==fOutClusters->GetEntries()))
133 fOutClusters->RemoveAt(clusCount);