]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AOD/AliAODEvent.cxx
Fix for track vertices without constraint
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODEvent.cxx
index cf72ef72bebc138427cb78815d12008e6e0aa65d..b1de8eb8760b625a4f6c4b67d28e50850cedccb6 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,12 +427,11 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
                           Int_t caloClusSize, 
                           Int_t fmdClusSize, 
                           Int_t pmdClusSize,
+                           Int_t hmpidRingsSize,
                           Int_t dimuonArrSize
                           )
 {
   // deletes content of standard arrays and resets size 
-  // The line below added to avoid very costly and un-needed TROOT::RecursiveRemove (A.G.)
-  gROOT->SetMustClean(kFALSE);  
   if (fTracks) {
     fTracks->Delete();
     if (trkArrSize > fTracks->GetSize()) 
@@ -467,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()) 
@@ -483,6 +493,7 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
        fEMCALTrigger->DeAllocate();
   if (fPHOSTrigger)
        fPHOSTrigger->DeAllocate();
+
 }
 
 void AliAODEvent::ClearStd()
@@ -511,7 +522,9 @@ void AliAODEvent::ClearStd()
   if (fFmdClusters)
     fFmdClusters   ->Clear();
   if (fPmdClusters)
-    fPmdClusters   ->Clear();
+    fPmdClusters   ->Clear();  
+  if (fHMPIDrings) 
+     fHMPIDrings   ->Clear();    
   if (fDimuons)
     fDimuons       ->Clear();
        
@@ -865,6 +878,45 @@ Bool_t AliAODEvent::IsPileupFromSPDInMultBins() const {
     else return IsPileupFromSPD(5,0.8);
 }
 
+void AliAODEvent::Reset()
+{
+  // Handle the cases
+  // Std content + Non std content
+
+  ClearStd();
+
+  if(fAODObjects->GetSize()>kAODListN){
+    // we have non std content
+    // this also covers aodfriends
+    for(int i = kAODListN;i < fAODObjects->GetSize();++i){
+      TObject *pObject = fAODObjects->At(i);
+      // TClonesArrays
+      if(pObject->InheritsFrom(TClonesArray::Class())){
+       ((TClonesArray*)pObject)->Delete();
+      }
+      else if(!pObject->InheritsFrom(TCollection::Class())){
+       TClass *pClass = TClass::GetClass(pObject->ClassName());
+       if (pClass && pClass->GetListOfMethods()->FindObject("Clear")) {
+         AliDebug(1, Form("Clear for object %s class %s", pObject->GetName(), pObject->ClassName()));
+         pObject->Clear();
+       }
+       else {
+         AliDebug(1, Form("ResetWithPlacementNew for object %s class %s", pObject->GetName(), pObject->ClassName()));
+          Long_t dtoronly = TObject::GetDtorOnly();
+          TObject::SetDtorOnly(pObject);
+          delete pObject;
+          pClass->New(pObject);
+          TObject::SetDtorOnly((void*)dtoronly);
+       }
+      }
+      else{
+       AliWarning(Form("No reset for %s \n",
+                       pObject->ClassName()));
+      }
+    }
+  }
+}
+
 Float_t AliAODEvent::GetVZEROEqMultiplicity(Int_t i) const
 {
   // Get VZERO Multiplicity for channel i
@@ -902,3 +954,42 @@ void  AliAODEvent::SetTOFHeader(const AliTOFHeader *header)
   }
 
 }
+//------------------------------------------------------------
+AliAODHMPIDrings *AliAODEvent::GetHMPIDringForTrackID(Int_t trackID) const
+{
+  //
+  // 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() const   
+{ 
+  //
+  // 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) const
+{ 
+  //
+  // 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;  
+}
+//------------------------------------------------------------