From: loizides Date: Thu, 16 Jan 2014 08:03:25 +0000 (+0100) Subject: first steps with cluster maker X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=6de19f6c1d702c50fc2fb49305839fd54c480976;p=u%2Fmrichter%2FAliRoot.git first steps with cluster maker --- diff --git a/PWG/CMakelibPWGEMCAL.pkg b/PWG/CMakelibPWGEMCAL.pkg index c5cf42d7ba7..843f4e8d9d7 100644 --- a/PWG/CMakelibPWGEMCAL.pkg +++ b/PWG/CMakelibPWGEMCAL.pkg @@ -31,7 +31,9 @@ set ( SRCS EMCAL/AliAnalysisTaskEmcal.cxx EMCAL/AliClusterContainer.cxx EMCAL/AliEMCALClusterParams.cxx + EMCAL/AliEmcalAodTrackFilterTask.cxx EMCAL/AliEmcalClusTrackMatcherTask.cxx + EMCAL/AliEmcalClusterMaker.cxx EMCAL/AliEmcalCompatTask.cxx EMCAL/AliEmcalContainer.cxx EMCAL/AliEmcalEsdTrackFilterTask.cxx @@ -41,18 +43,17 @@ set ( SRCS EMCAL/AliEmcalPhysicsSelection.cxx EMCAL/AliEmcalPhysicsSelectionTask.cxx EMCAL/AliEmcalPicoTrackMaker.cxx - EMCAL/AliEmcalAodTrackFilterTask.cxx EMCAL/AliEmcalSetupTask.cxx EMCAL/AliEmcalTenderTask.cxx EMCAL/AliEmcalTrackPropagatorTask.cxx EMCAL/AliEmcalTrackPropagatorTaskAOD.cxx + EMCAL/AliEmcalTriggerMaker.cxx + EMCAL/AliEmcalTriggerPatchInfo.cxx + EMCAL/AliEmcalTriggerSetupInfo.cxx EMCAL/AliEsdSkimTask.cxx EMCAL/AliEsdTrackExt.cxx EMCAL/AliParticleContainer.cxx EMCAL/AliPicoTrack.cxx - EMCAL/AliEmcalTriggerPatchInfo.cxx - EMCAL/AliEmcalTriggerSetupInfo.cxx - EMCAL/AliEmcalTriggerMaker.cxx ) string ( REPLACE ".cxx" ".h" HDRS "${SRCS}" ) diff --git a/PWG/EMCAL/AliEmcalClusterMaker.cxx b/PWG/EMCAL/AliEmcalClusterMaker.cxx new file mode 100644 index 00000000000..b1cb300bb87 --- /dev/null +++ b/PWG/EMCAL/AliEmcalClusterMaker.cxx @@ -0,0 +1,133 @@ +// $Id$ +// +// Cluster maker task. +// +// Author: C.Loizides + +#include +#include +#include "AliAODCaloCluster.h" +#include "AliAODEvent.h" +#include "AliAnalysisManager.h" +#include "AliEMCALRecoUtils.h" +#include "AliESDCaloCluster.h" +#include "AliESDEvent.h" +#include "AliEmcalClusterMaker.h" + +ClassImp(AliEmcalClusterMaker) + +//________________________________________________________________________ +AliEmcalClusterMaker::AliEmcalClusterMaker() : + AliAnalysisTaskEmcal("AliEmcalClusterMaker", kFALSE), + fOutCaloName(), + fEsdMode(kTRUE), + fOutClusters(0) +{ + // Default constructor. +} + +//________________________________________________________________________ +AliEmcalClusterMaker::AliEmcalClusterMaker(const char *name, Bool_t histo) : + AliAnalysisTaskEmcal(name, histo), + fOutCaloName("EmcClusters"), + fEsdMode(kTRUE), + fOutClusters(0) +{ + // Standard constructor. + + SetMakeGeneralHistograms(histo); + + fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex."; +} + +//________________________________________________________________________ +AliEmcalClusterMaker::~AliEmcalClusterMaker() +{ + // Destructor +} + +//________________________________________________________________________ +void AliEmcalClusterMaker::UserCreateOutputObjects() +{ + // Create my user objects. + + AliAnalysisTaskEmcal::UserCreateOutputObjects(); + + if (fRecoUtils) + fRecoUtils->Print(""); + // PostData(1, fOutput); +} + +//________________________________________________________________________ +void AliEmcalClusterMaker::ExecOnce() +{ + // Initialize the analysis. + + // Do base class initializations and if it fails -> bail out + AliAnalysisTaskEmcal::ExecOnce(); + if (!fInitialized) + return; + + if (dynamic_cast(InputEvent())) + fEsdMode = kFALSE; + + if (fEsdMode) + fOutClusters = new TClonesArray("AliESDCaloCluster"); + else + fOutClusters = new TClonesArray("AliAODCaloCluster"); + + fOutClusters->SetName(fOutCaloName); + + // post output in event if not yet present + if (!(InputEvent()->FindListObject(fOutCaloName))) { + InputEvent()->AddObject(fOutClusters); + } else { + fInitialized = kFALSE; + AliFatal(Form("%s: Container with same name %s already present. Aborting", GetName(), fOutCaloName.Data())); + return; + } +} + +//________________________________________________________________________ +Bool_t AliEmcalClusterMaker::Run() +{ + // Run the hadronic correction + + // delete output + fOutClusters->Delete(); + + // loop over clusters + Int_t clusCount = 0; + Int_t entries = fCaloClusters->GetEntries(); + for (Int_t i=0; i(fCaloClusters->At(i)); + if (!clus || !clus->IsEMCAL()) + continue; + AliVCluster *oc = 0; + if (fEsdMode) { + AliESDCaloCluster *ec = dynamic_cast(clus); + if (!ec) continue; + oc = new ((*fOutClusters)[clusCount]) AliESDCaloCluster(*ec); + } else { + AliAODCaloCluster *ac = dynamic_cast(clus); + if (!ac) continue; + oc = new ((*fOutClusters)[clusCount]) AliAODCaloCluster(*ac); + } + if (fRecoUtils) { + if (fRecoUtils->IsRejectExoticCluster()) { + if (fRecoUtils->IsExoticCluster(oc,fCaloCells)) + continue; + } + if (fRecoUtils->GetNonLinearityFunction()!=AliEMCALRecoUtils::kNoCorrection) { + Double_t energy = fRecoUtils->CorrectClusterEnergyLinearity(oc); + oc->SetE(energy); + } + } + if (!AcceptCluster(oc)) + continue; + clusCount++; + } + if ((clusCount>0) && (clusCount==fOutClusters->GetEntries())) + fOutClusters->RemoveAt(clusCount); + return kTRUE; +} diff --git a/PWG/EMCAL/AliEmcalClusterMaker.h b/PWG/EMCAL/AliEmcalClusterMaker.h new file mode 100644 index 00000000000..d08b591ba8a --- /dev/null +++ b/PWG/EMCAL/AliEmcalClusterMaker.h @@ -0,0 +1,37 @@ +#ifndef ALIEMCALCLUSTERMAKER_H +#define ALIEMCALCLUSTERMAKER_H + +// $Id$ + +class TClonesArray; +class AliEMCALRecoUtils; + +#include "AliAnalysisTaskEmcal.h" + +class AliEmcalClusterMaker : public AliAnalysisTaskEmcal { + + public: + AliEmcalClusterMaker(); + AliEmcalClusterMaker(const char *name, Bool_t histo=kFALSE); + virtual ~AliEmcalClusterMaker(); + + void UserCreateOutputObjects(); + void SetOutClusName(const char *n) { fOutCaloName = n ; } + void SetRecoUtils(AliEMCALRecoUtils *ru) { fRecoUtils = ru; } + + protected: + Bool_t Run() ; + void ExecOnce() ; + + TString fOutCaloName; // name of output clusters + AliEMCALRecoUtils *fRecoUtils; // pointer to reco utils + Bool_t fEsdMode; //!ESD/AOD mode + TClonesArray *fOutClusters; //!output cluster collection + + private: + AliEmcalClusterMaker(const AliEmcalClusterMaker&); // not implemented + AliEmcalClusterMaker &operator=(const AliEmcalClusterMaker&); // not implemented + + ClassDef(AliEmcalClusterMaker, 1) // Emcal cluster maker +}; +#endif diff --git a/PWG/PWGEMCALLinkDef.h b/PWG/PWGEMCALLinkDef.h index 2693ea431d9..4587dcac2ae 100644 --- a/PWG/PWGEMCALLinkDef.h +++ b/PWG/PWGEMCALLinkDef.h @@ -8,7 +8,9 @@ #pragma link C++ class AliAnalysisTaskEmcal+; #pragma link C++ class AliClusterContainer+; #pragma link C++ class AliEMCALClusterParams+; +#pragma link C++ class AliEmcalAodTrackFilterTask+; #pragma link C++ class AliEmcalClusTrackMatcherTask+; +#pragma link C++ class AliEmcalClusterMaker+; #pragma link C++ class AliEmcalCompatTask+; #pragma link C++ class AliEmcalContainer+; #pragma link C++ class AliEmcalEsdTrackFilterTask; @@ -18,18 +20,17 @@ #pragma link C++ class AliEmcalPhysicsSelection+; #pragma link C++ class AliEmcalPhysicsSelectionTask+; #pragma link C++ class AliEmcalPicoTrackMaker+; -#pragma link C++ class AliEmcalAodTrackFilterTask+; #pragma link C++ class AliEmcalSetupTask+; #pragma link C++ class AliEmcalTenderTask+; #pragma link C++ class AliEmcalTrackPropagatorTask+; #pragma link C++ class AliEmcalTrackPropagatorTaskAOD+; +#pragma link C++ class AliEmcalTriggerMaker+; +#pragma link C++ class AliEmcalTriggerPatchInfo+; +#pragma link C++ class AliEmcalTriggerSetupInfo+; #pragma link C++ class AliEsdSkimTask+; #pragma link C++ class AliEsdTrackExt+; #pragma link C++ class AliParticleContainer+; #pragma link C++ class AliPicoTrack+; -#pragma link C++ class AliEmcalTriggerSetupInfo+; -#pragma link C++ class AliEmcalTriggerPatchInfo+; -#pragma link C++ class AliEmcalTriggerMaker+; #endif