/* $Id: AliAnalysisTaskESDfilter.cxx 24535 2008-03-16 22:43:30Z fca $ */
#include <TChain.h>
+#include <TTree.h>
#include <TList.h>
+#include <TString.h>
#include <TFile.h>
#include <TArrayI.h>
#include <TRandom.h>
#include "AliESDCaloCluster.h"
#include "AliESDCaloCells.h"
#include "AliMultiplicity.h"
+#include "AliRunTag.h"
+#include "AliEventTag.h"
+#include "AliAODTagCreator.h"
#include "AliLog.h"
ClassImp(AliAnalysisTaskESDfilter)
fKinkFilter(0x0),
fV0Filter(0x0),
fHighPthreshold(0),
- fPtshape(0x0)
+ fPtshape(0x0),
+ fCreateTags(kFALSE),
+ fFirstFile(kTRUE),
+ fRunTag(0),
+ fTreeT(0),
+ fTagCreator(0)
{
// Default constructor
}
-AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
+AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name, Bool_t tags):
AliAnalysisTaskSE(name),
fTrackFilter(0x0),
fKinkFilter(0x0),
fV0Filter(0x0),
fHighPthreshold(0),
- fPtshape(0x0)
+ fPtshape(0x0),
+ fCreateTags(tags),
+ fFirstFile(kTRUE),
+ fRunTag(0),
+ fTreeT(0),
+ fTagCreator(0)
{
// Constructor
+ if (fCreateTags) {
+ DefineOutput(1, TTree::Class());
+ }
}
void AliAnalysisTaskESDfilter::UserCreateOutputObjects()
{
// Create the output container
OutputTree()->GetUserInfo()->Add(fTrackFilter);
+
+// In case tag creation has been requested
+ if (fCreateTags) {
+ OpenFile(1);
+ fTreeT = new TTree("T", "AOD Tags");
+ fRunTag = new AliRunTag();
+ TBranch * btag = fTreeT->Branch("AliTag", "AliRunTag", &fRunTag);
+ btag->SetCompressionLevel(9);
+
+ fTagCreator = new AliAODTagCreator();
+ }
}
void AliAnalysisTaskESDfilter::Init()
if (fHighPthreshold == 0) AliInfo("detector PID signals are stored in each track");
if (!fPtshape) AliInfo("detector PID signals are not stored below the pt threshold");
ConvertESDtoAOD();
+
+ if (fCreateTags) CreateTags();
}
void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
return;
}
+void AliAnalysisTaskESDfilter::CreateTags()
+{
+ // Create Tags for the current event
+ AliEventTag* evtTag = new AliEventTag();
+ fTagCreator->FillEventTag(AODEvent(), evtTag);
+ // Reference to the input file
+ TString fturl, fturltemp, fguid;
+
+ TString opt(fInputHandler->GetAnalysisType());
+ opt.ToLower();
+ TFile *file = fInputHandler->GetTree()->GetCurrentFile();
+ const TUrl *url = file->GetEndpointUrl();
+ fguid = file->GetUUID().AsString();
+ if (opt.Contains("grid")) {
+ fturltemp = "alien://"; fturltemp += url->GetFile();
+ fturl = fturltemp(0,fturltemp.Index(".root",5,0,TString::kExact)+5);
+ } else {
+ fturl = url->GetFile();
+ }
+ evtTag->SetEventId(fInputHandler->GetReadEntry() + 1);
+ evtTag->SetGUID(fguid);
+ if(opt.Contains("grid")) {
+ evtTag->SetMD5(0);
+ evtTag->SetTURL(fturl);
+ evtTag->SetSize(0);
+ }
+ else evtTag->SetPath(fturl);
+ //
+ // Add the event tag
+ fRunTag->AddEventTag(*evtTag);
+ PostData(1, fTreeT);
+}
+
void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero)
{
//
aodpid->SetHMPIDsignal(track->GetHMPIDsignal());
}
+
+
+void AliAnalysisTaskESDfilter::FinishTaskOutput()
+{
+// Terminate analysis
+//
+ if (fCreateTags) {
+ fRunTag->CopyStandardContent(fInputHandler->GetRunTag());
+ fTreeT->Fill();
+// fTreeT->Write();
+ }
+}
+
+Bool_t AliAnalysisTaskESDfilter::Notify()
+{
+ // Notify file change
+ if (fCreateTags) {
+ if (!fFirstFile) {
+ printf("Filling Tags %p \n", fInputHandler->GetRunTag());
+ fRunTag->CopyStandardContent(fInputHandler->GetRunTag());
+ fTreeT->Fill();
+ fRunTag->Clear();
+ } else {
+ fFirstFile = kFALSE;
+ }
+ }
+
+ return kTRUE;
+}
+
+
void AliAnalysisTaskESDfilter::Terminate(Option_t */*option*/)
{
// Terminate analysis
#include "AliAODTrack.h"
#include "AliAODPid.h"
class AliAnalysisFilter;
+class AliRunTag;
+class AliAODTagCreator;
+
class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
{
public:
AliAnalysisTaskESDfilter();
- AliAnalysisTaskESDfilter(const char* name);
+ AliAnalysisTaskESDfilter(const char* name, Bool_t tags = kFALSE);
virtual ~AliAnalysisTaskESDfilter() {;}
// Implementation of interface methods
- virtual void UserCreateOutputObjects();
- virtual void Init();
- virtual void LocalInit() {Init();}
- virtual void UserExec(Option_t *option);
- virtual void Terminate(Option_t *option);
+ virtual void UserCreateOutputObjects();
+ virtual void Init();
+ virtual void LocalInit() {Init();}
+ virtual void UserExec(Option_t *option);
+ virtual Bool_t Notify();
+ virtual void Terminate(Option_t *option);
+ virtual void FinishTaskOutput();
virtual void ConvertESDtoAOD();
-
+ virtual void CreateTags();
+ virtual void SetCreateTags() {fCreateTags = kTRUE;}
// Setters
virtual void SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
virtual void SetKinkFilter (AliAnalysisFilter* KinkF) {fKinkFilter = KinkF;}
virtual void SetV0Filter (AliAnalysisFilter* V0F) {fV0Filter = V0F;}
- virtual void SetPthreshold (Double_t p) {fHighPthreshold = p;}
- virtual void SetPshape (TF1 *func) {fPtshape = func;}
+ virtual void SetPthreshold (Double_t p) {fHighPthreshold = p;}
+ virtual void SetPshape (TF1 *func) {fPtshape = func;}
virtual void SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero);
void SetDetectorRawSignals(AliAODPid *aodpid, AliESDtrack *track, Double_t timezero);
private:
AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
AliAnalysisTaskESDfilter& operator=(const AliAnalysisTaskESDfilter&);
+ // Filtering
AliAnalysisFilter* fTrackFilter; // Track Filter
AliAnalysisFilter* fKinkFilter; // Kink Filter
- AliAnalysisFilter* fV0Filter; // V0 Filter
+ AliAnalysisFilter* fV0Filter; // V0 Filter
+ // PID
Double_t fHighPthreshold; // Pt threshold for detector signal setting
TF1 * fPtshape; // Pt spectrum distribution
-
+ // Tags
+ Bool_t fCreateTags; // Flag for tag creation
+ Bool_t fFirstFile; //! To flag the first file
+ AliRunTag *fRunTag; //! Pointer to run tag
+ TTree *fTreeT; //! tree for aod tags
+ AliAODTagCreator *fTagCreator; //! The tag creator
+
ClassDef(AliAnalysisTaskESDfilter, 1); // Analysis task for standard ESD filtering
};