]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskESDfilter.cxx
Draw spd mult histogram in viewer
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskESDfilter.cxx
index 323316f461cf319e70a3323a4eb0319c8f92af07..fd9f1950db8af4d87cd8a3115e42a7f5403573cd 100644 (file)
@@ -21,6 +21,7 @@
 #include <TArrayI.h>\r
 #include <TRandom.h>\r
 #include <TParticle.h>\r
+#include <TFile.h>\r
 \r
 #include "AliAnalysisTaskESDfilter.h"\r
 #include "AliAnalysisManager.h"\r
@@ -56,7 +57,8 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
     fV0Filter(0x0),\r
     fCascadeFilter(0x0),\r
     fHighPthreshold(0),\r
-    fPtshape(0x0)\r
+    fPtshape(0x0),\r
+    fEnableFillAOD(kTRUE)\r
 {\r
   // Default constructor\r
 }\r
@@ -68,7 +70,8 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fV0Filter(0x0),\r
     fCascadeFilter(0x0),\r
     fHighPthreshold(0),\r
-    fPtshape(0x0)\r
+    fPtshape(0x0),\r
+    fEnableFillAOD(kTRUE)\r
 {\r
   // Constructor\r
 }\r
@@ -106,7 +109,10 @@ void AliAnalysisTaskESDfilter::UserExec(Option_t */*option*/)
       if (fHighPthreshold == 0) AliInfo("detector PID signals are stored in each track");\r
       if (!fPtshape) AliInfo("detector PID signals are not stored below the pt threshold");\r
   }\r
-  \r
+  // Filters must explicitely enable AOD filling in their UserExec (AG)\r
+  if (!AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()) AliFatal("Cannot run ESD filter without an output event handler");\r
+  if(fEnableFillAOD) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);\r
+\r
   ConvertESDtoAOD();\r
 }\r
 \r
@@ -114,13 +120,12 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
     // ESD Filter analysis task executed for each event\r
 \r
     AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent());\r
+    if(!esd)return;\r
     AliESD*      old = esd->GetAliESDOld();\r
 \r
     // Fetch Stack for debuggging if available \r
-    AliStack *pStack = 0;\r
     AliMCEventHandler *mcH = 0;\r
     if(MCEvent()){\r
-      pStack = MCEvent()->Stack();\r
       mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler()); \r
     }\r
     // set arrays and pointers\r
@@ -155,6 +160,13 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
     AliAODHeader* header = AODEvent()->GetHeader();\r
     \r
     header->SetRunNumber(esd->GetRunNumber());\r
+    header->SetOfflineTrigger(fInputHandler->IsEventSelected()); // propagate the decision of the physics selection\r
+    TTree* tree = fInputHandler->GetTree();\r
+    if (tree) {\r
+       TFile* file = tree->GetCurrentFile();\r
+       if (file) header->SetESDFileName(file->GetName());\r
+    }\r
+    \r
     if (old) {\r
        header->SetBunchCrossNumber(0);\r
        header->SetOrbitNumber(0);\r
@@ -167,13 +179,16 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
        header->SetOrbitNumber(esd->GetOrbitNumber());\r
        header->SetPeriodNumber(esd->GetPeriodNumber());\r
        header->SetEventType(esd->GetEventType());\r
-       header->SetCentrality(-999.);        // FIXME\r
+       header->SetCentrality(-999.);\r
+       header->SetEventNumberESDFile(esd->GetHeader()->GetEventNumberInFile());\r
     }\r
     // Trigger\r
     header->SetFiredTriggerClasses(esd->GetFiredTriggerClasses());\r
     header->SetTriggerMask(esd->GetTriggerMask()); \r
     header->SetTriggerCluster(esd->GetTriggerCluster());\r
-    \r
+    header->SetL0TriggerInputs(esd->GetHeader()->GetL0TriggerInputs());    \r
+    header->SetL1TriggerInputs(esd->GetHeader()->GetL1TriggerInputs());    \r
+    header->SetL2TriggerInputs(esd->GetHeader()->GetL2TriggerInputs());    \r
 \r
     header->SetMagneticField(esd->GetMagneticField());\r
     header->SetMuonMagFieldScale(esd->GetCurrentDip()/6000.);\r
@@ -1139,50 +1154,39 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
 \r
       AliESDCaloCluster * cluster = esd->GetCaloCluster(iClust);\r
 \r
-      Int_t id        = cluster->GetID();\r
-      Int_t nLabel    = cluster->GetNLabels();\r
-      TArrayI* labels = cluster->GetLabels();\r
-      Int_t *label = 0;\r
-      if (labels){\r
-       label = (cluster->GetLabels())->GetArray();\r
-       for(int i = 0;i < labels->GetSize();++i){\r
-         if(mcH)mcH->SelectParticle(label[i]);\r
-       }\r
-      }     \r
+      Int_t  id        = cluster->GetID();\r
+      Int_t  nLabel    = cluster->GetNLabels();\r
+      Int_t *labels    = cluster->GetLabels();\r
+      if(labels){ \r
+                 for(int i = 0;i < nLabel;++i){\r
+                         if(mcH)mcH->SelectParticle(labels[i]);\r
+                 }\r
+         }             \r
 \r
       Float_t energy = cluster->E();\r
       cluster->GetPosition(posF);\r
-      Char_t ttype = AliAODCluster::kUndef; \r
 \r
-      if (cluster->GetClusterType() == AliESDCaloCluster::kPHOSCluster) {\r
-       ttype=AliAODCluster::kPHOSNeutral;\r
-      } \r
-      else if (cluster->GetClusterType() == AliESDCaloCluster::kEMCALClusterv1) {\r
-       ttype = AliAODCluster::kEMCALClusterv1;\r
-      }\r
-\r
-      \r
       AliAODCaloCluster *caloCluster = new(caloClusters[jClusters++]) AliAODCaloCluster(id,\r
                                                                                        nLabel,\r
-                                                                                       label,\r
+                                                                                       labels,\r
                                                                                        energy,\r
                                                                                        posF,\r
                                                                                        NULL,\r
-                                                                                       ttype);\r
+                                                                                       cluster->GetType(),0);\r
       \r
       caloCluster->SetCaloCluster(cluster->GetDistanceToBadChannel(),\r
-                                 cluster->GetClusterDisp(),\r
+                                 cluster->GetDispersion(),\r
                                  cluster->GetM20(), cluster->GetM02(),\r
                                  cluster->GetEmcCpvDistance(),  \r
                                  cluster->GetNExMax(),cluster->GetTOF()) ;\r
 \r
-      caloCluster->SetPIDFromESD(cluster->GetPid());\r
+      caloCluster->SetPIDFromESD(cluster->GetPID());\r
       caloCluster->SetNCells(cluster->GetNCells());\r
       caloCluster->SetCellsAbsId(cluster->GetCellsAbsId());\r
       caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());\r
 \r
       TArrayI* matchedT =      cluster->GetTracksMatched();\r
-      if (nTracks>0 && matchedT && cluster->GetTrackMatched() >= 0) {  \r
+      if (nTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) {     \r
        for (Int_t im = 0; im < matchedT->GetSize(); im++) {\r
            Int_t iESDtrack = matchedT->At(im);;\r
            if (aodTrackRefs->At(iESDtrack) != 0) {\r
@@ -1202,7 +1206,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
       \r
       AliAODCaloCells &aodEMcells = *(AODEvent()->GetEMCALCells());\r
       aodEMcells.CreateContainer(nEMcell);\r
-      aodEMcells.SetType(AliAODCaloCells::kEMCAL);\r
+      aodEMcells.SetType(AliAODCaloCells::kEMCALCell);\r
       for (Int_t iCell = 0; iCell < nEMcell; iCell++) {      \r
        aodEMcells.SetCell(iCell,esdEMcells.GetCellNumber(iCell),esdEMcells.GetAmplitude(iCell));\r
       }\r
@@ -1216,7 +1220,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
       \r
       AliAODCaloCells &aodPHcells = *(AODEvent()->GetPHOSCells());\r
       aodPHcells.CreateContainer(nPHcell);\r
-      aodPHcells.SetType(AliAODCaloCells::kPHOS);\r
+      aodPHcells.SetType(AliAODCaloCells::kPHOSCell);\r
       for (Int_t iCell = 0; iCell < nPHcell; iCell++) {      \r
        aodPHcells.SetCell(iCell,esdPHcells.GetCellNumber(iCell),esdPHcells.GetAmplitude(iCell));\r
       }\r
@@ -1262,7 +1266,7 @@ void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aod
   // Save PID object for candidate electrons\r
     Bool_t pidSave = kFALSE;\r
     if (fTrackFilter) {\r
-       Bool_t selectInfo = fTrackFilter->IsSelected("Electrons");\r
+       Bool_t selectInfo = fTrackFilter->IsSelected((char*) "Electrons");\r
        if (selectInfo)  pidSave = kTRUE;\r
     }\r
 \r
@@ -1310,6 +1314,7 @@ void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtr
 \r
  aodpid->SetITSsignal(track->GetITSsignal());\r
  aodpid->SetTPCsignal(track->GetTPCsignal());\r
+ aodpid->SetTPCsignalN(track->GetTPCsignalN());\r
 \r
  //n TRD planes = 6\r
  Int_t nslices = track->GetNumberOfTRDslices()*6;\r