]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskESDfilter.cxx
Tag creation removed from task.
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskESDfilter.cxx
index 94342d2e918285818f454f01eca0a61132362d6e..0cdd7ceeda25cf8c10dd5a4b94504d6a2ce51940 100644 (file)
@@ -16,7 +16,8 @@
 /* $Id: AliAnalysisTaskESDfilter.cxx 24535 2008-03-16 22:43:30Z fca $ */
  
 #include <TChain.h>
-#include <TFile.h>
+#include <TTree.h>
+#include <TList.h>
 #include <TArrayI.h>
 #include <TRandom.h>
 
@@ -48,7 +49,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
     fKinkFilter(0x0),
     fV0Filter(0x0),
     fHighPthreshold(0),
-    fPtshape(0x0)     
+    fPtshape(0x0)
 {
   // Default constructor
 }
@@ -170,9 +171,9 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
     Double_t timezero = 0; //TO BE FIXED
     AliAODv0    *aodV0    = 0x0;
 
-    // RefArray to take into account the tracks associated to V0s
-    TRefArray   *v0DaughterTracks = NULL;
-    if (nTracks>0) v0DaughterTracks = new TRefArray(nTracks);
+    // RefArray to store the mapping between esd track number and newly created AOD-Track
+    TRefArray   *aodRefs = NULL;
+    if (nTracks > 0) aodRefs = new TRefArray(nTracks);
 
     // Array to take into account the tracks already added to the AOD
     Bool_t * usedTrack = NULL;
@@ -325,7 +326,10 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
            esdTrack->GetXYZ(pos);
            esdTrack->GetCovarianceXYZPxPyPz(covTr);
            esdTrack->GetESDpid(pid);
-           UInt_t selectInfo = fTrackFilter->IsSelected(esdTrack);
+           UInt_t selectInfo = 0;
+           if (fTrackFilter) {
+               selectInfo = fTrackFilter->IsSelected(esdTrack);
+           }
            
            vV0FromCascade->AddDaughter(aodTrack =
                                        new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
@@ -344,6 +348,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                                           AliAODTrack::kSecondary,
                                                                           selectInfo)
                                        );
+           aodRefs->AddAt(aodTrack, posFromV0);
+           
        if (esdTrack->GetSign() > 0) nPosTracks++;
            aodTrack->ConvertAliPIDtoAODPID();
            aodTrack->SetFlags(esdTrack->GetStatus());
@@ -365,7 +371,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
            esdTrack->GetXYZ(pos);
            esdTrack->GetCovarianceXYZPxPyPz(covTr);
            esdTrack->GetESDpid(pid);
-           UInt_t selectInfo = fTrackFilter->IsSelected(esdTrack);         
+           UInt_t selectInfo = 0;
+           if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdTrack);      
 
            vV0FromCascade->AddDaughter(aodTrack =
                                        new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
@@ -384,6 +391,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                                           AliAODTrack::kSecondary,
                                                                           selectInfo)
                                        );
+           aodRefs->AddAt(aodTrack, negFromV0);
 
        if (esdTrack->GetSign() > 0) nPosTracks++;
            aodTrack->ConvertAliPIDtoAODPID();
@@ -413,7 +421,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
            esdTrack->GetXYZ(pos);
            esdTrack->GetCovarianceXYZPxPyPz(covTr);
            esdTrack->GetESDpid(pid);
-           UInt_t selectInfo = fTrackFilter->IsSelected(esdTrack);
+           UInt_t selectInfo = 0;
+           if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdTrack);
            
            vcascade->AddDaughter(aodTrack =
                                  new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
@@ -432,6 +441,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                                     AliAODTrack::kSecondary,
                                                                     selectInfo)
                                  );
+           aodRefs->AddAt(aodTrack, bachelor);
        if (esdTrack->GetSign() > 0) nPosTracks++;
            aodTrack->ConvertAliPIDtoAODPID();
            aodTrack->SetFlags(esdTrack->GetStatus());
@@ -445,15 +455,44 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
        // Add the primary track of the cascade (if any)
        
     } // end of the loop on cascades
-   
+
+    //
     // V0s
+    //
     
     for (Int_t nV0 = 0; nV0 < nV0s; ++nV0) {
        
        if (usedV0[nV0]) continue; // skip if already added to the AOD
        
        AliESDv0 *v0 = esd->GetV0(nV0);
+       Int_t posFromV0 = v0->GetPindex();
+       Int_t negFromV0 = v0->GetNindex();
+       if (posFromV0 < 0 || negFromV0 < 0) continue;
+
+       // V0 selection 
+       //
+       AliESDVertex *esdVtx = new AliESDVertex(*(esd->GetPrimaryVertex()));
        
+       AliESDtrack *esdV0Pos = esd->GetTrack(posFromV0);
+       AliESDtrack *esdV0Neg = esd->GetTrack(negFromV0);
+       TList v0objects;
+       v0objects.AddAt(v0,                      0);
+       v0objects.AddAt(esdV0Pos,                1);
+       v0objects.AddAt(esdV0Neg,                2);
+       v0objects.AddAt(esdVtx,                  3);
+       UInt_t selectV0 = 0;
+       if (fV0Filter) {
+         selectV0 = fV0Filter->IsSelected(&v0objects);
+         // this is a little awkward but otherwise the 
+         // list wants to access the pointer again when going out of scope
+         delete v0objects.RemoveAt(3);
+         if (!selectV0) 
+           continue;
+       }
+       else{
+         delete v0objects.RemoveAt(3);
+       }
+    
        v0->GetXYZ(pos[0], pos[1], pos[2]);
 
        if (!old) {
@@ -474,8 +513,6 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                  AliAODVertex::kV0);
        primary->AddDaughter(vV0);
        
-       Int_t posFromV0 = v0->GetPindex();
-       Int_t negFromV0 = v0->GetNindex();
 
        Float_t  dcaPosToPrimVertexXYZ[2]   = { 999., 999.}; // ..[0] = in XY plane and ..[1] = in Z
        Float_t  dcaNegToPrimVertexXYZ[2]   = { 999., 999.}; // ..[0] = in XY plane and ..[1] = in Z
@@ -489,102 +526,95 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
 
        // Add the positive tracks from the V0
        
-       if (posFromV0>-1){
-         AliESDtrack *esdTrack = esd->GetTrack(posFromV0);
-         esdTrack->GetPxPyPz(p_pos);
-         esdTrack->GetXYZ(pos);
-         esdTrack->GetCovarianceXYZPxPyPz(covTr);
-         esdTrack->GetESDpid(pid);
-         esdTrack->GetImpactParameters(dcaPosToPrimVertexXYZ[0],dcaPosToPrimVertexXYZ[1]);
-         if (!usedTrack[posFromV0]) {
+
+       esdV0Pos->GetPxPyPz(p_pos);
+       esdV0Pos->GetXYZ(pos);
+       esdV0Pos->GetCovarianceXYZPxPyPz(covTr);
+       esdV0Pos->GetESDpid(pid);
+       esdV0Pos->GetImpactParameters(dcaPosToPrimVertexXYZ[0],dcaPosToPrimVertexXYZ[1]);
+       if (!usedTrack[posFromV0]) {
            usedTrack[posFromV0] = kTRUE;
-           UInt_t selectInfo = fTrackFilter->IsSelected(esdTrack);
-           aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
-                                                         esdTrack->GetLabel(), 
+           UInt_t selectInfo = 0;
+           if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdV0Pos);
+           aodTrack = new(tracks[jTracks++]) AliAODTrack(esdV0Pos->GetID(),
+                                                         esdV0Pos->GetLabel(), 
                                                          p_pos, 
                                                          kTRUE,
                                                          pos,
                                                          kFALSE,
                                                          covTr, 
-                                                         (Short_t)esdTrack->GetSign(),
-                                                         esdTrack->GetITSClusterMap(), 
+                                                         (Short_t)esdV0Pos->GetSign(),
+                                                         esdV0Pos->GetITSClusterMap(), 
                                                          pid,
                                                          vV0,
                                                          kTRUE,  // check if this is right
                                                          kFALSE, // check if this is right
                                                          AliAODTrack::kSecondary,
                                                          selectInfo);
-           v0DaughterTracks->AddAt(aodTrack,posFromV0);
+           aodRefs->AddAt(aodTrack,posFromV0);
            //      if (fDebug > 0) printf("-------------------Bo: pos track from original pt %.3f \n",aodTrack->Pt());
-           if (esdTrack->GetSign() > 0) nPosTracks++;
+           if (esdV0Pos->GetSign() > 0) nPosTracks++;
            aodTrack->ConvertAliPIDtoAODPID();
-           aodTrack->SetFlags(esdTrack->GetStatus());
-            SetAODPID(esdTrack,aodTrack,detpid,timezero);
-         }
-         else {
-           aodTrack = dynamic_cast<AliAODTrack*>(v0DaughterTracks->At(posFromV0));
+           aodTrack->SetFlags(esdV0Pos->GetStatus());
+            SetAODPID(esdV0Pos,aodTrack,detpid,timezero);
+       }
+       else {
+           aodTrack = dynamic_cast<AliAODTrack*>(aodRefs->At(posFromV0));
            //      if (fDebug > 0) printf("-------------------Bo pos track from refArray pt %.3f \n",aodTrack->Pt());
-         }
-         vV0->AddDaughter(aodTrack);
        }
-       
+       vV0->AddDaughter(aodTrack);
+    
        // Add the negative tracks from the V0
        
-       if (negFromV0>-1){
-         AliESDtrack *esdTrack = esd->GetTrack(negFromV0);
-         esdTrack->GetPxPyPz(p_neg);
-         esdTrack->GetXYZ(pos);
-         esdTrack->GetCovarianceXYZPxPyPz(covTr);
-         esdTrack->GetESDpid(pid);
-         esdTrack->GetImpactParameters(dcaNegToPrimVertexXYZ[0],dcaNegToPrimVertexXYZ[1]);
-
-         if (!usedTrack[negFromV0]) {
+       esdV0Neg->GetPxPyPz(p_neg);
+       esdV0Neg->GetXYZ(pos);
+       esdV0Neg->GetCovarianceXYZPxPyPz(covTr);
+       esdV0Neg->GetESDpid(pid);
+       esdV0Neg->GetImpactParameters(dcaNegToPrimVertexXYZ[0],dcaNegToPrimVertexXYZ[1]);
+       
+       if (!usedTrack[negFromV0]) {
            usedTrack[negFromV0] = kTRUE;
-           UInt_t selectInfo = fTrackFilter->IsSelected(esdTrack);
-           aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
-                                                         esdTrack->GetLabel(),
+           UInt_t selectInfo = 0;
+           if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdV0Neg);
+           aodTrack = new(tracks[jTracks++]) AliAODTrack(esdV0Neg->GetID(),
+                                                         esdV0Neg->GetLabel(),
                                                          p_neg,
                                                          kTRUE,
                                                          pos,
                                                          kFALSE,
                                                          covTr, 
-                                                         (Short_t)esdTrack->GetSign(),
-                                                         esdTrack->GetITSClusterMap(), 
+                                                         (Short_t)esdV0Neg->GetSign(),
+                                                         esdV0Neg->GetITSClusterMap(), 
                                                          pid,
                                                          vV0,
                                                          kTRUE,  // check if this is right
                                                          kFALSE, // check if this is right
                                                          AliAODTrack::kSecondary,
                                                          selectInfo);
-
-           v0DaughterTracks->AddAt(aodTrack,negFromV0);
+           
+           aodRefs->AddAt(aodTrack,negFromV0);
            //      if (fDebug > 0) printf("-------------------Bo: neg track from original pt %.3f \n",aodTrack->Pt());
-           if (esdTrack->GetSign() > 0) nPosTracks++;
+           if (esdV0Neg->GetSign() > 0) nPosTracks++;
            aodTrack->ConvertAliPIDtoAODPID();
-           aodTrack->SetFlags(esdTrack->GetStatus());
-            SetAODPID(esdTrack,aodTrack,detpid,timezero);
-         }
-         else {
-           aodTrack = dynamic_cast<AliAODTrack*>(v0DaughterTracks->At(negFromV0));
+           aodTrack->SetFlags(esdV0Neg->GetStatus());
+            SetAODPID(esdV0Neg,aodTrack,detpid,timezero);
+       }
+       else {
+           aodTrack = dynamic_cast<AliAODTrack*>(aodRefs->At(negFromV0));
            //      if (fDebug > 0) printf("-------------------Bo neg track from refArray pt %.3f \n",aodTrack->Pt());
-         }
-         vV0->AddDaughter(aodTrack);
        }
-       dcaDaughterToPrimVertex[0] = 
-         TMath::Sqrt(dcaPosToPrimVertexXYZ[0]*dcaPosToPrimVertexXYZ[0]
-                     +dcaPosToPrimVertexXYZ[1]*dcaPosToPrimVertexXYZ[1]);
+       vV0->AddDaughter(aodTrack);
+       dcaDaughterToPrimVertex[0] = 
+           TMath::Sqrt(dcaPosToPrimVertexXYZ[0]*dcaPosToPrimVertexXYZ[0]
+                       +dcaPosToPrimVertexXYZ[1]*dcaPosToPrimVertexXYZ[1]);
        dcaDaughterToPrimVertex[1] = 
-         TMath::Sqrt(dcaNegToPrimVertexXYZ[0]*dcaNegToPrimVertexXYZ[0]
-                     +dcaNegToPrimVertexXYZ[1]*dcaNegToPrimVertexXYZ[1]);
+           TMath::Sqrt(dcaNegToPrimVertexXYZ[0]*dcaNegToPrimVertexXYZ[0]
+                       +dcaNegToPrimVertexXYZ[1]*dcaNegToPrimVertexXYZ[1]);
        // add it to the V0 array as well
        aodV0 = new(V0s[jV0s++]) 
-         AliAODv0(vV0, dcaV0Daughters, dcaV0ToPrimVertex, p_pos_atv0, p_neg_atv0, dcaDaughterToPrimVertex); // to be refined
+           AliAODv0(vV0, dcaV0Daughters, dcaV0ToPrimVertex, p_pos_atv0, p_neg_atv0, dcaDaughterToPrimVertex); // to be refined
        // set the aod v0 on-the-fly status
        aodV0->SetOnFlyStatus(v0->GetOnFlyStatus());
-//     if (fDebug > 0) 
-//       printf("-------------------Bo: In the v0 loop: onFlyStatus=%d,dcaV0Daughters=%.3f dcaV0ToPrimVertex=%.3f dcaDaughterToPrimVertex=[%.3f,%.3f]\n",
-//              aodV0->GetOnFlyStatus(), aodV0->DcaV0Daughters(), aodV0->DcaV0ToPrimVertex(), 
-//              aodV0->DcaPosToPrimVertex(),aodV0->DcaNegToPrimVertex());
     } 
     V0s.Expand(jV0s);   
     // end of the loop on V0s
@@ -635,10 +665,16 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                        continue;
                    }
                    
-                   // Add the mother track
+                   // Add the mother track if it passed primary track selection cuts
                    
                    AliAODTrack * mother = NULL;
                    
+                   UInt_t selectInfo = 0;
+                   if (fTrackFilter) {
+                       selectInfo = fTrackFilter->IsSelected(esd->GetTrack(imother));
+                       if (!selectInfo) continue;
+                   }
+                   
                    if (!usedTrack[imother]) {
                        
                        usedTrack[imother] = kTRUE;
@@ -648,7 +684,7 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                        esdTrackM->GetXYZ(pos);
                        esdTrackM->GetCovarianceXYZPxPyPz(covTr);
                        esdTrackM->GetESDpid(pid);
-                       UInt_t selectInfo = fTrackFilter->IsSelected(esdTrackM);
+                       
                        mother = 
                            new(tracks[jTracks++]) AliAODTrack(esdTrackM->GetID(),
                                                               esdTrackM->GetLabel(),
@@ -665,6 +701,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                               kTRUE, // check if this is right
                                                               AliAODTrack::kPrimary,
                                                               selectInfo);
+                       aodRefs->AddAt(mother, imother);
+                       
                        if (esdTrackM->GetSign() > 0) nPosTracks++;
                        mother->SetFlags(esdTrackM->GetStatus());
                        mother->ConvertAliPIDtoAODPID();
@@ -700,7 +738,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                        esdTrackD->GetXYZ(pos);
                        esdTrackD->GetCovarianceXYZPxPyPz(covTr);
                        esdTrackD->GetESDpid(pid);
-                       UInt_t selectInfo = fTrackFilter->IsSelected(esdTrackD);
+                       selectInfo = 0;
+                       if (fTrackFilter) selectInfo = fTrackFilter->IsSelected(esdTrackD);
                        daughter = 
                            new(tracks[jTracks++]) AliAODTrack(esdTrackD->GetID(),
                                                               esdTrackD->GetLabel(),
@@ -717,7 +756,9 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
                                                               kTRUE, // check if this is right
                                                               AliAODTrack::kSecondary,
                                                               selectInfo);
-
+                       
+                       aodRefs->AddAt(daughter, idaughter);
+                       
                        if (esdTrackD->GetSign() > 0) nPosTracks++;
                        daughter->SetFlags(esdTrackD->GetStatus());
                        daughter->ConvertAliPIDtoAODPID();
@@ -759,61 +800,30 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
        esdTrack->GetCovarianceXYZPxPyPz(covTr);
        esdTrack->GetESDpid(pid);
        
-       Float_t impactXY, impactZ;
-       
-       esdTrack->GetImpactParameters(impactXY,impactZ);
-       
-       if (impactXY<3) {
-           // track inside the beam pipe
            
-           primary->AddDaughter(aodTrack =
-                                new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
-                                                                   esdTrack->GetLabel(),
-                                                                   p,
-                                                                   kTRUE,
-                                                                   pos,
-                                                                   kFALSE,
-                                                                   covTr, 
-                                                                   (Short_t)esdTrack->GetSign(),
-                                                                   esdTrack->GetITSClusterMap(), 
-                                                                   pid,
-                                                                   primary,
-                                                                   kTRUE, // check if this is right
-                                                                   kTRUE, // check if this is right
-                                                                   AliAODTrack::kPrimary, 
-                                                                   selectInfo)
-               );
-       if (esdTrack->GetSign() > 0) nPosTracks++;
-           aodTrack->SetFlags(esdTrack->GetStatus());
-           aodTrack->ConvertAliPIDtoAODPID();
-            SetAODPID(esdTrack,aodTrack,detpid,timezero);
-       }
-       else {
-         // outside the beam pipe: orphan track
-         // Don't write them anymore!
-         continue;
-         /*
-         aodTrack =
-           new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
-                                              esdTrack->GetLabel(),
-                                              p,
-                                              kTRUE,
-                                              pos,
-                                              kFALSE,
-                                              covTr, 
-                                              (Short_t)esdTrack->GetSign(),
-                                              esdTrack->GetITSClusterMap(), 
-                                              pid,
-                                              NULL,
-                                              kFALSE, // check if this is right
-                                              kFALSE, // check if this is right
-                                              AliAODTrack::kOrphan,
-                                              selectInfo);
-     if (esdTrack->GetSign() > 0) nPosTracks++;
-         aodTrack->SetFlags(esdTrack->GetStatus());
-         aodTrack->ConvertAliPIDtoAODPID();
-         */
-       }       
+       primary->AddDaughter(aodTrack =
+                            new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
+                                                               esdTrack->GetLabel(),
+                                                               p,
+                                                               kTRUE,
+                                                               pos,
+                                                               kFALSE,
+                                                               covTr, 
+                                                               (Short_t)esdTrack->GetSign(),
+                                                               esdTrack->GetITSClusterMap(), 
+                                                               pid,
+                                                               primary,
+                                                               kTRUE, // check if this is right
+                                                               kTRUE, // check if this is right
+                                                               AliAODTrack::kPrimary, 
+                                                               selectInfo)
+           );
+       aodRefs->AddAt(aodTrack, nTrack);
+       
+       if (esdTrack->GetSign() > 0) nPosTracks++;
+       aodTrack->SetFlags(esdTrack->GetStatus());
+       aodTrack->ConvertAliPIDtoAODPID();
+       SetAODPID(esdTrack,aodTrack,detpid,timezero);
     } // end of loop on tracks
     
     // Update number of AOD tracks in header at the end of track loop (M.G.)
@@ -889,10 +899,13 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
       TArrayI* matchedT =      cluster->GetTracksMatched();
       if (matchedT && cluster->GetTrackMatched() >= 0) {       
        for (Int_t im = 0; im < matchedT->GetSize(); im++) {
-         caloCluster->AddTrackMatched((esd->GetTrack(im)));
+           Int_t iESDtrack = matchedT->At(im);;
+           if (aodRefs->At(iESDtrack) != 0) {
+               caloCluster->AddTrackMatched((AliAODTrack*)aodRefs->At(iESDtrack));
+           }
        }
       }
-
+      
     } 
     caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters   
     // end of loop on calo clusters
@@ -943,11 +956,12 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD() {
     delete [] usedTrack;
     delete [] usedV0;
     delete [] usedKink;
-    delete    v0DaughterTracks;
+    delete    aodRefs;
 
     return;
 }
 
+
 void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero)
 {
   //
@@ -1001,6 +1015,7 @@ void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtr
  aodpid->SetHMPIDsignal(track->GetHMPIDsignal());
 
 }
+
 void AliAnalysisTaskESDfilter::Terminate(Option_t */*option*/)
 {
 // Terminate analysis