]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliAnalysisTaskMultiDielectron.cxx
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliAnalysisTaskMultiDielectron.cxx
index fdbe547b466e20deeecf8c54b677ea3b37c97dc8..62f3c60e758d0e4918e3c55dd3eadf185f039f4c 100644 (file)
@@ -44,6 +44,7 @@ ClassImp(AliAnalysisTaskMultiDielectron)
 //_________________________________________________________________________________
 AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron() :
   AliAnalysisTaskSE(),
+       fPairArray(0x0),
   fListDielectron(),
   fListHistos(),
   fListCF(),
@@ -51,6 +52,8 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron() :
   fTriggerMask(AliVEvent::kMB),
   fExcludeTriggerMask(0),
   fTriggerOnV0AND(kFALSE),
+  fFiredTrigger(""),
+  fFiredExclude(kFALSE),
   fRejectPileup(kFALSE),
   fBeamEnergy(-1.),
   fTriggerLogic(kAny),
@@ -66,6 +69,7 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron() :
 //_________________________________________________________________________________
 AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron(const char *name) :
   AliAnalysisTaskSE(name),
+  fPairArray(0x0),
   fListDielectron(),
   fListHistos(),
   fListCF(),
@@ -73,6 +77,8 @@ AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron(const char *name)
   fTriggerMask(AliVEvent::kMB),
   fExcludeTriggerMask(0),
   fTriggerOnV0AND(kFALSE),
+  fFiredTrigger(""),
+  fFiredExclude(kFALSE),
   fRejectPileup(kFALSE),
   fBeamEnergy(-1.),
   fTriggerLogic(kAny),
@@ -106,7 +112,11 @@ AliAnalysisTaskMultiDielectron::~AliAnalysisTaskMultiDielectron()
   //lists need to be owner...
   fListHistos.SetOwner(kFALSE);
   fListCF.SetOwner(kFALSE);
-  
+
+  //  if(fPairArray)       { delete fPairArray;       fPairArray=0; }
+  // try to reduce memory issues
+  if(fEventStat)       { delete fEventStat;       fEventStat=0; }
+  if(fTriggerAnalysis) { delete fTriggerAnalysis; fTriggerAnalysis=0; }
 }
 //_________________________________________________________________________________
 void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
@@ -125,9 +135,10 @@ void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
   AliDielectron *die=0;
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
     die->Init();
-    if (die->GetHistogramList()) fListHistos.Add(const_cast<THashList*>(die->GetHistogramList()));
-    if (die->GetHistogramArray()) fListHistos.Add(const_cast<TObjArray*>(die->GetHistogramArray()));
-    if (die->GetCFManagerPair()) fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
+    if (die->GetHistogramList())    fListHistos.Add(const_cast<THashList*>(die->GetHistogramList()));
+    if (die->GetHistogramArray())   fListHistos.Add(const_cast<TObjArray*>(die->GetHistogramArray()));
+    if (die->GetQAHistArray())      fListHistos.Add(const_cast<TObjArray*>(die->GetQAHistArray()));
+    if (die->GetCFManagerPair())    fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
   }
 
   Int_t cuts=fListDielectron.GetEntries();
@@ -195,6 +206,9 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
       if (fExcludeTriggerMask && (isSelected&fExcludeTriggerMask)) isRejected=kTRUE;
       if (fTriggerLogic==kAny) isSelected&=fTriggerMask;
       else if (fTriggerLogic==kExact) isSelected=((isSelected&fTriggerMask)==fTriggerMask);
+   
+      TString firedTriggerClasses=InputEvent()->GetFiredTriggerClasses();
+      if(!fFiredTrigger.IsNull()) isSelected=(firedTriggerClasses.Contains(fFiredTrigger))^fFiredExclude;
     }
    }
  
@@ -223,24 +237,19 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
   //Fill Event histograms before the event filter
   TIter nextDie(&fListDielectron);
   AliDielectron *die=0;
-  Double_t values[AliDielectronVarManager::kNMaxValues]={0};
-  Double_t valuesMC[AliDielectronVarManager::kNMaxValues]={0};
-  AliDielectronVarManager::SetEvent(InputEvent());
-  AliDielectronVarManager::Fill(InputEvent(),values);
-  AliDielectronVarManager::Fill(InputEvent(),valuesMC);
   Bool_t hasMC=AliDielectronMC::Instance()->HasMC();
-  if (hasMC) {
-    if (AliDielectronMC::Instance()->ConnectMCEvent())
-      AliDielectronVarManager::Fill(AliDielectronMC::Instance()->GetMCEvent(),valuesMC);
-  }
-
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
     AliDielectronHistos *h=die->GetHistoManager();
     if (h){
-      if (h->GetHistogramList()->FindObject("Event_noCuts"))
-        h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,values);
-      if (hasMC && h->GetHistogramList()->FindObject("MCEvent_noCuts"))
-        h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,valuesMC);
+      AliDielectronVarManager::SetFillMap(h->GetUsedVars());
+      if (hasMC && AliDielectronMC::Instance()->ConnectMCEvent() && h->GetHistogramList()->FindObject("MCEvent_noCuts")) {
+       AliDielectronVarManager::SetEvent(AliDielectronMC::Instance()->GetMCEvent());
+        h->FillClass("MCEvent_noCuts",AliDielectronVarManager::kNMaxValues,AliDielectronVarManager::GetData());
+      }
+      if (h->GetHistogramList()->FindObject("Event_noCuts")) {
+       AliDielectronVarManager::SetEvent(InputEvent());
+        h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,AliDielectronVarManager::GetData());
+      }
     }
   }
   nextDie.Reset();
@@ -267,9 +276,22 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
   //Process event in all AliDielectron instances
   //   TIter nextDie(&fListDielectron);
   //   AliDielectron *die=0;
+  Bool_t sel=kFALSE;
   Int_t idie=0;
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
-    die->Process(InputEvent());
+    if(die->DoEventProcess()) {
+      sel= die->Process(InputEvent());
+      // input for internal train
+      if(die->DontClearArrays()) {
+       fPairArray = (*(die->GetPairArraysPointer()));
+
+      }
+    }
+    else {
+      // internal train
+      if(sel) die->Process(fPairArray);
+    }
+
     if (die->HasCandidates()){
       Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast();
       if (ncandidates==1) fEventStat->Fill((kNbinsEvent)+2*idie);
@@ -277,7 +299,7 @@ void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
     }
     ++idie;
   }
-  
+
   PostData(1, &fListHistos);
   PostData(2, &fListCF);
   PostData(3,fEventStat);
@@ -290,13 +312,49 @@ void AliAnalysisTaskMultiDielectron::FinishTaskOutput()
   // Write debug tree
   //
   TIter nextDie(&fListDielectron);
+  Int_t ic=0;
   AliDielectron *die=0;
+  AliDielectron *die2=0;
+  fPairArray=0x0;
+
+  // main loop
   while ( (die=static_cast<AliDielectron*>(nextDie())) ){
+    ic++;
+
+    // debug tree
     die->SaveDebugTree();
+
+    // skip internal train tasks in main loop
+    if(!die->DoEventProcess()) continue;
+
+    // mix remaining
     AliDielectronMixingHandler *mix=die->GetMixingHandler();
-//    printf("\n\n\n===============\ncall mix in Terminate: %p (%p)\n=================\n\n",mix,die);
-    if (mix) mix->MixRemaining(die);
+    if (!mix || !mix->GetMixUncomplete()) continue;
+
+    // loop over all pools
+    for (Int_t ipool=0; ipool<mix->GetNumberOfBins(); ++ipool){
+      //      printf("mix remaining %04d/%04d \n",ipool,mix->GetNumberOfBins());
+      if(! mix->MixRemaining(die, ipool) ) { fPairArray=0x0;  continue; }
+
+      fPairArray = (*(die->GetPairArraysPointer()));
+      if(!fPairArray) continue;
+
+      // loop over internal train task candidates
+      for(Int_t i=ic; i<fListDielectron.GetEntries(); i++) {
+       die2 = static_cast<AliDielectron*>(fListDielectron.At(i));
+       // abort if tasks following are not internal wagons
+       if(die2->DoEventProcess()) break;
+       // fill internal train output
+       die2->SetPairArraysPointer(fPairArray);
+       //      printf(" --> fill internal train output %s \n",die2->GetName());
+       die2->FillHistogramsFromPairArray(kTRUE);
+      }
+      // printf("\n\n\n===============\ncall mix in Terminate: %p (%p)\n=================\n\n",mix,die);
+
+    }
+
   }
+
   PostData(1, &fListHistos);
   PostData(2, &fListCF);
 }