]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/muondep/AliAnalysisTaskPileup.cxx
set arrays to 0 after delete to avoid crash in Pb reconstruction - Ruben
[u/mrichter/AliRoot.git] / PWG3 / muondep / AliAnalysisTaskPileup.cxx
index d218184dbf0e8df4ab6de58120379e54e45e557b..2e0e04da9abaefb2040000c36fe16332012f0b70 100644 (file)
@@ -13,6 +13,8 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+/* $Id$ */
+
 //-------------------------------------------------------------------------
 //             Implementation of class AliAnalysisTaskPileup
 //
@@ -96,10 +98,10 @@ AliAnalysisTaskSE(),
   fTriggerClasses(0x0),
   fTriggerClassIndex(0x0),
   fIsInitCDB(0),
-  fCentralityClasses(0x0)
+  fCentralityClasses(0x0),
+  fStorageList("")
 #if defined(READOCDB)
-  , fTriggerRunScalers(0x0),
-  fStorageList(0x0)
+  , fTriggerRunScalers(0x0)
 #endif
 
 {
@@ -115,12 +117,11 @@ AliAnalysisTaskPileup::AliAnalysisTaskPileup(const char *name) :
   fTriggerClasses(0x0),
   fTriggerClassIndex(0x0),
   fIsInitCDB(0),
-  fCentralityClasses(0x0)
+  fCentralityClasses(0x0),
+  fStorageList("")
 #if defined(READOCDB)
-  , fTriggerRunScalers(0x0),
-  fStorageList(0x0)
+  , fTriggerRunScalers(0x0)
 #endif
-
 {
   /// Constructor
 
@@ -134,7 +135,7 @@ AliAnalysisTaskPileup::~AliAnalysisTaskPileup()
   /// Destructor
 
   // For proof: do not delete output containers
-  if ( ! AliAnalysisManager::GetAnalysisManager()->IsProofMode() ) {
+  if ( ! AliAnalysisManager::GetAnalysisManager() || ! AliAnalysisManager::GetAnalysisManager()->IsProofMode() ) {
     delete fEventCounters;
   }
 
@@ -142,10 +143,9 @@ AliAnalysisTaskPileup::~AliAnalysisTaskPileup()
   delete fTriggerClasses;
   delete fTriggerClassIndex;
 
-#if defined(READOCDB)
-  delete fTriggerRunScalers;
-  delete fStorageList;
-#endif
+  //#if defined(READOCDB)
+  //delete fTriggerRunScalers; // Not owner -> Owned by OCDB
+  //#endif
 
 }
 
@@ -156,12 +156,17 @@ void AliAnalysisTaskPileup::NotifyRun()
   /// Notify run
 
 #if defined(READOCDB)
-  fStorageList->Compress();
+  if ( fStorageList.IsNull() ) {
+    AliError("Default storage not set! Pileup corrections won't be calculated!");
+    return;
+  }
   if ( ! AliCDBManager::Instance()->GetDefaultStorage() ) {
-    for ( Int_t ientry=0; ientry<fStorageList->GetEntries(); ientry++ ) {
-      TObjString* calibStr = (TObjString*)fStorageList->At(ientry);
+    TObjArray* storageList = fStorageList.Tokenize(" ");
+    storageList->SetOwner();
+    for ( Int_t ientry=0; ientry<storageList->GetEntries(); ientry++ ) {
+      TObjString* calibStr = (TObjString*)storageList->At(ientry);
       ientry++;
-      TObjString* dbStr = (TObjString*)fStorageList->At(ientry);
+      TObjString* dbStr = (TObjString*)storageList->At(ientry);
       TString calibName = calibStr->GetString();
       if ( ! calibName.CompareTo("default") ) {
        AliCDBManager::Instance()->SetDefaultStorage(dbStr->GetName());
@@ -170,6 +175,7 @@ void AliAnalysisTaskPileup::NotifyRun()
        AliCDBManager::Instance()->SetSpecificStorage(calibStr->GetName(), dbStr->GetName());
       }
     }
+    delete storageList;
   }
 
   // Default storage was not correclty set: nothing done
@@ -214,8 +220,7 @@ void AliAnalysisTaskPileup::NotifyRun()
   entry = AliCDBManager::Instance()->Get("GRP/CTP/Scalers");
   if ( ! entry ) return;
   AliInfo("Found an AliTriggerRunScalers in GRP/CTP/Scalers, reading it");
-  fTriggerRunScalers = dynamic_cast<AliTriggerRunScalers*> (entry->GetObject());
-  entry->SetOwner(0);
+  fTriggerRunScalers = static_cast<AliTriggerRunScalers*> (entry->GetObject());
   if (fTriggerRunScalers->CorrectScalersOverflow() == 0) AliInfo("32bit Trigger counters corrected for overflow");
 
   fIsInitCDB = kTRUE;
@@ -359,7 +364,7 @@ void AliAnalysisTaskPileup::UserExec(Option_t *)
 #if defined(READOCDB)
   Double_t deltaScalersBeam = 0., deltaScalers = 0.;
 #endif
-  Bool_t isFiredOnce = kFALSE;
+  //Bool_t isFiredOnce = kFALSE;
   for (Int_t itrig=0; itrig<nTriggerClasses+1; itrig++) {
 
     Double_t correctFactorL0 = 1.;
@@ -399,11 +404,11 @@ void AliAnalysisTaskPileup::UserExec(Option_t *)
     else {
       classIndex = -1;
       trigName = "any";
-      isClassFired = isFiredOnce;
+      isClassFired = kTRUE; // isFiredOnce;
     }
 
     if ( ! isClassFired ) continue;
-    isFiredOnce = kTRUE;
+    //isFiredOnce = kTRUE;
 
     //const AliTriggerScalersESD* trigScaler = trigScalerRecords->GetTriggerScalersForClass(classIndex+1); // REMEMBER TO CUT
     //if ( classIndex > 1 ) printf("Index: trigger %i  scaler %i\n", classIndex+1, trigScaler->GetClassIndex()); // REMEMBER TO CUT
@@ -536,16 +541,13 @@ void AliAnalysisTaskPileup::SetSpecificStorage(TString calibType, TString dbStri
 {
   /// Set specific storage
 #if defined(READOCDB)
-  if ( ! fStorageList ) {
-    fStorageList = new TObjArray(5);
-    fStorageList->SetOwner();
-  }
-  fStorageList->AddLast(new TObjString(calibType));
-  fStorageList->AddLast(new TObjString(dbString));
+  if ( ! fStorageList.IsNull() ) fStorageList += " ";
+  fStorageList += Form("%s %s", calibType.Data(), dbString.Data());
+  if ( fDebug >= 3 ) printf("AliAnalysisTaskPileup: Setting storage %s %s", calibType.Data(), dbString.Data());
 #else
   calibType = "";
   dbString  = "";
-  AliWarning(Form("Class was not compiled to run on OCDB. Command will not have effect"));
+  AliWarning("Class was not compiled to run on OCDB. Command will not have effect");
 #endif
 }