]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
From Giacomo (AliRoot #96201): Patch for AliAODHMPIDrings in AODEvent + filtering
authoragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Jul 2012 12:13:01 +0000 (12:13 +0000)
committeragheata <agheata@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Jul 2012 12:13:01 +0000 (12:13 +0000)
ANALYSIS/AliAnalysisTaskESDfilter.cxx
ANALYSIS/AliAnalysisTaskESDfilter.h
STEER/AOD/AliAODEvent.cxx
STEER/AOD/AliAODEvent.h
STEER/AODLinkDef.h
STEER/CMakelibAOD.pkg

index 04b55b7289f89c5e4628638f61d8bd27603b79ec..a68d277df9d4394365d3cd8c3c94c301ab3c458f 100644 (file)
@@ -51,6 +51,7 @@
 #include "AliCodeTimer.h"
 #include "AliESDtrackCuts.h"
 #include "AliESDpid.h"
+#include "AliAODHMPIDrings.h"
 #include "AliV0vertexer.h"
 #include "AliCascadeVertexer.h"
 #include "Riostream.h"
@@ -98,6 +99,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
   fIsVZEROEnabled(kTRUE),
   fIsTZEROEnabled(kTRUE),
   fIsZDCEnabled(kTRUE),
+  fIsHMPIDEnabled(kTRUE), 
   fIsV0CascadeRecoEnabled(kFALSE),
   fAreCascadesEnabled(kTRUE),
   fAreV0sEnabled(kTRUE),
@@ -169,6 +171,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
     fIsVZEROEnabled(kTRUE),
     fIsTZEROEnabled(kTRUE),
     fIsZDCEnabled(kTRUE),
+    fIsHMPIDEnabled(kTRUE), 
     fIsV0CascadeRecoEnabled(kFALSE),
     fAreCascadesEnabled(kTRUE),
     fAreV0sEnabled(kTRUE),
@@ -2012,6 +2015,72 @@ void AliAnalysisTaskESDfilter::ConvertZDC(const AliESDEvent& esd)
 
 }
 
+//_______________________________________________________________________________________________________________________________________
+Int_t AliAnalysisTaskESDfilter::ConvertHMPID(const AliESDEvent& esd) // clm
+{
+  //
+  // Convtert ESD HMPID info to AOD and return the number of good tracks with HMPID signal.
+  // We need to return an int since there is no signal counter in the ESD.
+  //
+  
+  AliCodeTimerAuto("",0);
+  
+  Int_t cntHmpidGoodTracks = 0;
+  
+  Float_t  xMip = 0;
+  Float_t  yMip = 0;
+  Int_t    qMip = 0;
+  Int_t    nphMip = 0;
+  
+  Float_t xTrk = 0;
+  Float_t yTrk = 0;
+  Float_t thetaTrk = 0;
+  Float_t phiTrk = 0;
+  
+  Double_t hmpPid[5]={0};
+  Double_t hmpMom[3]={0};
+  
+  TClonesArray &hmpidRings = *(AODEvent()->GetHMPIDrings());
+  
+ for (Int_t iTrack=0; iTrack<esd.GetNumberOfTracks(); ++iTrack) 
+  {
+    if(! esd.GetTrack(iTrack) ) continue;
+      
+    if(esd.GetTrack(iTrack)->GetHMPIDsignal() > -20 ) {                  // 
+       
+      (esd.GetTrack(iTrack))->GetHMPIDmip(xMip, yMip, qMip, nphMip);     // Get MIP properties
+      (esd.GetTrack(iTrack))->GetHMPIDtrk(xTrk,yTrk,thetaTrk,phiTrk);
+      (esd.GetTrack(iTrack))->GetHMPIDpid(hmpPid);
+      if((esd.GetTrack(iTrack))->GetOuterHmpParam()) (esd.GetTrack(iTrack))->GetOuterHmpPxPyPz(hmpMom);
+      
+     if(esd.GetTrack(iTrack)->GetHMPIDsignal() == 0 && thetaTrk == 0 && qMip == 0 && nphMip ==0 ) continue;  //
+      
+     new(hmpidRings[cntHmpidGoodTracks++]) AliAODHMPIDrings(
+                                                                 (esd.GetTrack(iTrack))->GetID(),             // Unique track id to attach the ring to
+                                                                 1000000*nphMip+qMip,                         // MIP charge and number of photons
+                                                                 (esd.GetTrack(iTrack))->GetHMPIDcluIdx(),    // 1000000*chamber id + cluster idx of the assigned MIP cluster  
+                                                                 thetaTrk,                                    // track inclination angle theta
+                                                                 phiTrk,                                      // track inclination angle phi
+                                                                 (esd.GetTrack(iTrack))->GetHMPIDsignal(),    // Cherenkov angle
+                                                                 (esd.GetTrack(iTrack))->GetHMPIDoccupancy(), // Occupancy claculated for the given chamber 
+                                                                 (esd.GetTrack(iTrack))->GetHMPIDchi2(),      // Ring resolution squared
+                                                                  xTrk,                                       // Track x coordinate (LORS)
+                                                                  yTrk,                                       // Track y coordinate (LORS)
+                                                                  xMip,                                       // MIP x coordinate (LORS)
+                                                                  yMip,                                       // MIP y coordinate (LORS)
+                                                                  hmpPid,                                     // PID probablities from ESD, remove later once it is in CombinedPid
+                                                                  hmpMom                                      // Track momentum in HMPID at ring reconstruction
+                                                               );  
+     
+      //  Printf(Form("+++++++++ yes/no: %d  %lf %lf %lf %lf %lf %lf ",(esd.GetTrack(iTrack))->IsHMPID(),thetaTrk, (esd.GetTrack(iTrack))->GetHMPIDchi2(),xTrk, yTrk , xMip, yMip));
+     
+                                                                
+   }// HMPID signal > -20
+  }//___esd track loop
+  
+  return cntHmpidGoodTracks;
+}
+
 //______________________________________________________________________________
 void AliAnalysisTaskESDfilter::ConvertESDtoAOD() 
 {
@@ -2080,10 +2149,11 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
   Int_t nCaloClus = esd->GetNumberOfCaloClusters();
   Int_t nFmdClus  = 0;
   Int_t nPmdClus  = esd->GetNumberOfPmdTracks();
+  Int_t nHmpidRings = 0;  
     
   AliDebug(1,Form("   NV0=%d  NCASCADES=%d  NKINKS=%d", nV0s, nCascades, nKinks));
        
-  AODEvent()->ResetStd(nTracks, nVertices, nV0s, nCascades, nJets, nCaloClus, nFmdClus, nPmdClus);
+  AODEvent()->ResetStd(nTracks, nVertices, nV0s, nCascades, nJets, nCaloClus, nFmdClus, nPmdClus,nHmpidRings);
 
   if (nV0s > 0) 
   {
@@ -2178,6 +2248,8 @@ void AliAnalysisTaskESDfilter::ConvertESDtoAOD()
   if ( fAreTrackletsEnabled ) ConvertTracklets(*esd);
   if ( fIsZDCEnabled ) ConvertZDC(*esd);
   
+  if(fIsHMPIDEnabled) nHmpidRings = ConvertHMPID(*esd); 
+
   delete fAODTrackRefs; fAODTrackRefs=0x0;
   delete fAODV0VtxRefs; fAODV0VtxRefs=0x0;
   delete fAODV0Refs; fAODV0Refs=0x0;
@@ -2295,7 +2367,7 @@ void AliAnalysisTaskESDfilter::SetDetectorRawSignals(AliAODPid *aodpid, AliESDtr
   }
   aodpid->SetTOFpidResolution(tofRes);
 
-//  aodpid->SetHMPIDsignal(track->GetHMPIDsignal());
+//  aodpid->SetHMPIDsignal(0); // set to zero for compression but it will be removed later
 
 }
 
index 57c02e73944315f4016007f5f0e8f7443107c358..7ecd997a5c48fb2f1b4c83e7f18bc49e1f9296fb 100644 (file)
@@ -82,6 +82,7 @@ class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
   void DisableCells() { fAreEMCALCellsEnabled = fArePHOSCellsEnabled = kFALSE; }
   void DisableCaloTrigger(TString calo = "PHOS") { if (calo.Contains("EMCAL")) fAreEMCALTriggerEnabled = kFALSE; else fArePHOSTriggerEnabled = kFALSE; }
   void DisableTracklets() { fAreTrackletsEnabled = kFALSE; }
+  void DisableHMPID()  { fIsHMPIDEnabled = kFALSE; } 
 
   void EnableV0CascadeVerticesReco() { fIsV0CascadeRecoEnabled = kTRUE; }
 
@@ -112,6 +113,7 @@ private:
   void ConvertVZERO(const AliESDEvent& esd);
   void ConvertTZERO(const AliESDEvent& esd);
   void ConvertZDC(const AliESDEvent& esd);
+  Int_t ConvertHMPID(const AliESDEvent& esd);
   void PropagateTrackToEMCal(AliESDtrack *esdTrack);
 
   TClonesArray& Tracks();
@@ -154,6 +156,7 @@ private:
   Bool_t fIsVZEROEnabled; // whether or not to fill the vzero branch (true by default)
   Bool_t fIsTZEROEnabled; // whether or not to fill the tzero branch (true by default)
   Bool_t fIsZDCEnabled; // whether or not to fill the zdc branch (true by default)
+  Bool_t fIsHMPIDEnabled; // whether or not to fill the hmpid branch (true by default) 
   Bool_t fIsV0CascadeRecoEnabled; // whether or not to reconstruct again V0s and cascades (false by default)
   Bool_t fAreCascadesEnabled; // whether or not to fill the cascades branch (true by default)
   Bool_t fAreV0sEnabled; // whether or not to fill the v0 branch (true by default)
@@ -175,7 +178,7 @@ private:
   Bool_t fDoPropagateTrackToEMCal;  // whether or not to propagate the tracks to EMCal surface (430cm) -- true by default
   
   
-  ClassDef(AliAnalysisTaskESDfilter, 14); // Analysis task for standard ESD filtering
+  ClassDef(AliAnalysisTaskESDfilter, 15); // Analysis task for standard ESD filtering
 };
 
 #endif
index 84fb6b38a99161f372403264334ae687febdabad..ebc154d654e0e6bad3682f8c3c08cc62006d2f7d 100644 (file)
@@ -49,6 +49,7 @@ ClassImp(AliAODEvent)
                                                                        "phosTrigger",
                                                      "fmdClusters",
                                                      "pmdClusters",
+                                                      "hmpidRings",
                                                      "dimuons",
                                                      "AliAODTZERO",
                                                      "AliAODVZERO",
@@ -79,6 +80,7 @@ AliAODEvent::AliAODEvent() :
   fPHOSTrigger(0),
   fFmdClusters(0),
   fPmdClusters(0),
+  fHMPIDrings(0),
   fDimuons(0),
   fAODTZERO(0),
   fAODVZERO(0),
@@ -112,6 +114,7 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   fPHOSTrigger(new AliAODCaloTrigger(*aod.fPHOSTrigger)),
   fFmdClusters(new TClonesArray(*aod.fFmdClusters)),
   fPmdClusters(new TClonesArray(*aod.fPmdClusters)),
+  fHMPIDrings(new TClonesArray(*aod.fHMPIDrings)),
   fDimuons(new TClonesArray(*aod.fDimuons)),
   fAODTZERO(new AliAODTZERO(*aod.fAODTZERO)),
   fAODVZERO(new AliAODVZERO(*aod.fAODVZERO)),
@@ -136,6 +139,7 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   AddObject(fPHOSTrigger);
   AddObject(fFmdClusters);
   AddObject(fPmdClusters);
+  AddObject(fHMPIDrings);
   AddObject(fDimuons);
   AddObject(fAODTZERO);
   AddObject(fAODVZERO);
@@ -310,6 +314,7 @@ void AliAODEvent::CreateStdContent()
   AddObject(new AliAODCaloTrigger()); // PHOS
   AddObject(new TClonesArray("AliAODFmdCluster", 0));
   AddObject(new TClonesArray("AliAODPmdCluster", 0));
+  AddObject(new TClonesArray("AliAODHMPIDrings", 0));
   AddObject(new TClonesArray("AliAODDimuon", 0));
   AddObject(new AliAODTZERO());
   AddObject(new AliAODVZERO());
@@ -398,10 +403,11 @@ void AliAODEvent::GetStdContent()
   fEmcalCells    = (AliAODCaloCells*)fAODObjects->FindObject("emcalCells");
   fPhosCells     = (AliAODCaloCells*)fAODObjects->FindObject("phosCells");
   fCaloClusters  = (TClonesArray*)fAODObjects->FindObject("caloClusters");
-       fEMCALTrigger  = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
-       fPHOSTrigger   = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
+  fEMCALTrigger  = (AliAODCaloTrigger*)fAODObjects->FindObject("emcalTrigger");
+  fPHOSTrigger   = (AliAODCaloTrigger*)fAODObjects->FindObject("phosTrigger");
   fFmdClusters   = (TClonesArray*)fAODObjects->FindObject("fmdClusters");
   fPmdClusters   = (TClonesArray*)fAODObjects->FindObject("pmdClusters");
+  fHMPIDrings    = (TClonesArray*)fAODObjects->FindObject("hmpidRings");
   fDimuons       = (TClonesArray*)fAODObjects->FindObject("dimuons");
   fAODTZERO      = (AliAODTZERO*)fAODObjects->FindObject("AliAODTZERO");
   fAODVZERO      = (AliAODVZERO*)fAODObjects->FindObject("AliAODVZERO");
@@ -421,6 +427,7 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
                           Int_t caloClusSize, 
                           Int_t fmdClusSize, 
                           Int_t pmdClusSize,
+                           Int_t hmpidRingsSize,
                           Int_t dimuonArrSize
                           )
 {
@@ -465,6 +472,11 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
     if (pmdClusSize > fPmdClusters->GetSize()) 
       fPmdClusters->Expand(pmdClusSize);
   }
+  if (fHMPIDrings) {
+       fHMPIDrings->Delete();
+    if (hmpidRingsSize > fHMPIDrings->GetSize()) 
+      fHMPIDrings->Expand(hmpidRingsSize);
+  }
   if (fDimuons) {
     fDimuons->Delete();
     if (dimuonArrSize > fDimuons->GetSize()) 
@@ -511,6 +523,8 @@ void AliAODEvent::ClearStd()
     fFmdClusters   ->Clear();
   if (fPmdClusters)
     fPmdClusters   ->Clear();
+  if (fHMPIDrings)
+    fHMPIDrings   ->Delete();
   if (fDimuons)
     fDimuons       ->Clear();
        
@@ -659,24 +673,16 @@ void AliAODEvent::ReadFromTree(TTree *tree, Option_t* opt /*= ""*/)
         } else {
           
          //          TList* objL = (TList*)(aodEvent->GetList()->Clone());
-          TList* objL = aodEvent->GetList();
-          
-          if(objL == fAODObjects)
+          TList* objL = (TList*)aodEvent->GetList();
+          printf("Get list of object from tree %d !!\n", objL->GetEntries());
+          TIter nextobject(objL);
+          TObject* obj =  0;
+          while((obj = nextobject()))
           {
-                       AliInfo("Adding object from friend. Same object friend list...skipping\n");
-            
-          } else {
-                                       printf("Get list of object from tree %d !!\n", objL->GetEntries());
-           
-                   TIter nextobject(objL);
-                TObject* obj =  0;
-             while((obj = nextobject()))
-                  {
-                       printf("Adding object from friend %s !\n", obj->GetName());
-                       fAODObjects->Add(obj);
-               }
+            printf("Adding object from friend %s !\n", obj->GetName());
+            fAODObjects->Add(obj);
           } // object "branch" loop
-               } // has userinfo  
+        } // has userinfo  
       } // friend loop
     } // has friends   
       // set the branch addresses
@@ -948,4 +954,42 @@ void  AliAODEvent::SetTOFHeader(const AliTOFHeader *header)
   }
 
 }
-
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDringForTrackID(Int_t trackID)
+{
+  //
+  // Returns the HMPID object if any for a given track ID
+  //
+  if(GetHMPIDrings())
+  {
+    for(Int_t ien = 0 ; ien < GetNHMPIDrings(); ien++)
+    {
+      if( ien == trackID ) return GetHMPIDring(ien);      
+    }//rings loop  
+  }
+  return 0;
+}
+//------------------------------------------------------------
+Int_t AliAODEvent::GetNHMPIDrings()   
+{ 
+  //
+  // If there is a list of HMPID rings in the given AOD event, return their number
+  //
+  if ( fHMPIDrings) return fHMPIDrings->GetEntriesFast(); 
+  else return -1;
+} 
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDring(Int_t nRings)   
+{ 
+  //
+  // If there is a list of HMPID rings in the given AOD event, return corresponding ring
+  //
+  if(fHMPIDrings) {
+    if(   (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings) ) {
+      return (AliAODHMPIDrings*)fHMPIDrings->UncheckedAt(nRings);
+    }
+    else return 0x0;
+  }
+  else return 0x0;  
+}
+//------------------------------------------------------------
index 47fa99982deb95dcb0fdb884fd00a5a04c50b68b..8acbfa0afad37a1d87476128e8bcbfc9d2e0a304 100644 (file)
@@ -33,6 +33,7 @@
 #include "AliAODDimuon.h"
 #include "AliAODTZERO.h"
 #include "AliAODVZERO.h"
+#include "AliAODHMPIDrings.h"
 #include "AliAODZDC.h"
 #ifdef MFT_UPGRADE
 #include "AliAODMFT.h"
@@ -60,11 +61,12 @@ class AliAODEvent : public AliVEvent {
                   kAODPHOSTrigger,
                       kAODFmdClusters,
                       kAODPmdClusters,
+                       kAODHMPIDrings,
                       kAODDimuons,
                       kAODTZERO,
                       kAODVZERO,
                       kAODZDC,
-                      kTOFHeader,
+                      kTOFHeader,                       
                       kAODListN
                   #ifdef MFT_UPGRADE
                   ,kAODVZERO
@@ -210,6 +212,16 @@ class AliAODEvent : public AliVEvent {
   Int_t         AddPmdCluster(const AliAODPmdCluster* clus)
   {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
 
+  // -- HMPID objects 
+  TClonesArray *GetHMPIDrings()       const { return fHMPIDrings; } 
+  Int_t         GetNHMPIDrings();
+  AliAODHMPIDrings *GetHMPIDring(Int_t nRings);
+  Int_t         AddHMPIDrings(const  AliAODHMPIDrings* ring) 
+  {new((*fHMPIDrings)[fHMPIDrings->GetEntriesFast()]) AliAODHMPIDrings(*ring); return fHMPIDrings->GetEntriesFast()-1;}
+  
+  AliAODHMPIDrings *GetHMPIDringForTrackID(Int_t trackID);
+  
+  
   // -- Jet
   TClonesArray *GetJets()            const { return fJets; }
   Int_t         GetNJets()           const { return fJets?fJets->GetEntriesFast():0; }
@@ -248,6 +260,7 @@ class AliAODEvent : public AliVEvent {
                   Int_t caloClusSize = 0, 
                   Int_t fmdClusSize = 0, 
                   Int_t pmdClusSize = 0,
+                   Int_t hmpidRingsSize = 0,
                   Int_t dimuonArrsize =0
                   );
   void    ClearStd();
@@ -308,6 +321,7 @@ class AliAODEvent : public AliVEvent {
   AliAODCaloTrigger *fPHOSTrigger;  //! PHOS Trigger information
   TClonesArray    *fFmdClusters;  //! FMDclusters
   TClonesArray    *fPmdClusters;  //! PMDclusters
+  TClonesArray    *fHMPIDrings;   //! HMPID signals
   TClonesArray    *fDimuons;      //! dimuons
   AliAODTZERO     *fAODTZERO;     //! TZERO AOD
   AliAODVZERO     *fAODVZERO;     //! VZERO AOD
@@ -322,7 +336,7 @@ class AliAODEvent : public AliVEvent {
   
   static const char* fAODListName[kAODListN]; //!
 
-  ClassDef(AliAODEvent,90);
+  ClassDef(AliAODEvent,91);
 };
 
 #endif
index f6454467d9c5eb4f56668ca8da39653df93cc06e..fd308c331da1bf31b9fe1f4661e436d445bc48f0 100644 (file)
@@ -60,6 +60,7 @@
 #pragma link C++ class AliAODTZERO+;
 #pragma link C++ class AliAODVZERO+;
 #pragma link C++ class AliAODZDC+;
+#pragma link C++ class AliAODHMPIDrings+;
 
 #pragma link C++ method AliAODTrack::SetPosition<double>(double const*, bool);
 
index 103e158185487152f572e165b2820ff399507c9f..1405a136d574ec97720100ca113d825c1ab157cb 100644 (file)
@@ -44,6 +44,7 @@ set ( SRCS
     AOD/AliAODTZERO.cxx
     AOD/AliAODVZERO.cxx
     AOD/AliAODZDC.cxx  
+    AOD/AliAODHMPIDrings.cxx   
     )
 
 string( REPLACE ".cxx" ".h" HDRS "${SRCS}")