]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisTaskSE.cxx
warnings fixed
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisTaskSE.cxx
index da11178b900fac20d9b834615594bf06e4f1d78f..a90246603d87ea575e8c7f937c33a4915c0dd5d0 100644 (file)
@@ -186,7 +186,7 @@ void AliAnalysisTaskSE::CreateOutputObjects()
 //  Default AOD
     if (fDebug > 1) printf("AnalysisTaskSE::CreateOutPutData() \n");
 
-    AliAODHandler* handler = (AliAODHandler*) 
+    AliAODHandler* handler = dynamic_cast<AliAODHandler*> 
          ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
     
     Bool_t merging = kFALSE;
@@ -299,10 +299,14 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
 {
 //
 // Exec analysis of one event
+    if ( fDebug >= 10)
+      printf("Task is active %5d\n", IsActive());
+    
     if (fDebug > 1) AliInfo("AliAnalysisTaskSE::Exec() \n");
 //
-    AliAODHandler* handler = (AliAODHandler*) 
+    AliAODHandler* handler = dynamic_cast<AliAODHandler*> 
        ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
+
     AliAODInputHandler* aodH = dynamic_cast<AliAODInputHandler*>(fInputHandler);
 //
 // Was event selected ?
@@ -313,11 +317,14 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
 
     if (handler) handler->SetFillAOD(isSelected);
 
-    if( fInputHandler ) fEntry = fInputHandler->GetReadEntry();
-  
+    if( fInputHandler ) {
+       fEntry = fInputHandler->GetReadEntry();
+       fESDfriend = ((AliESDInputHandler*)fInputHandler)->GetESDfriend();
+    }
+    
 
 // Notify the change of run number
-    if (InputEvent()->GetRunNumber() != fCurrentRunNumber) {
+    if (InputEvent() && (InputEvent()->GetRunNumber() != fCurrentRunNumber)) {
        fCurrentRunNumber = InputEvent()->GetRunNumber();
        NotifyRun();
     }    
@@ -388,10 +395,36 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
            
            if ((handler->NeedsDimuonsBranchReplication() || merging) && (fgAODDimuons))
            {
-               TClonesArray* dimuons = (dynamic_cast<AliAODEvent*>(InputEvent()))->GetDimuons();
-               new (fgAODDimuons) TClonesArray(*dimuons);
+               fgAODDimuons->Clear();
+               TClonesArray& dimuons = *fgAODDimuons;
+               TClonesArray& tracksnew = *fgAODTracks;
+               
+                Int_t nMuonTrack[10]; 
+                for(Int_t imuon = 0; imuon < 10; imuon++) nMuonTrack[imuon] = 0;
+                Int_t nMuons=0;
+               for(Int_t ii=0; ii < fgAODTracks->GetEntries(); ii++){
+                   AliAODTrack *track = (AliAODTrack*) fgAODTracks->At(ii);
+                   if(track->IsMuonTrack()) {
+                       nMuonTrack[nMuons]= ii;
+                       nMuons++;
+                   }  
+               }
+                Int_t jDimuons=0;
+               if(nMuons >= 2){
+                   for(Int_t i = 0; i < nMuons; i++){
+                       Int_t index0 = nMuonTrack[i];
+                       for(Int_t j = i+1; j < nMuons; j++){
+                           Int_t index1 = nMuonTrack[j];
+                           tracksnew.At(index0)->ResetBit(kIsReferenced);
+                           tracksnew.At(index0)->SetUniqueID(0); 
+                           tracksnew.At(index1)->ResetBit(kIsReferenced);
+                           tracksnew.At(index1)->SetUniqueID(0);
+                           new(dimuons[jDimuons++]) AliAODDimuon(tracksnew.At(index0),tracksnew.At(index1));
+                       }
+                   }    
+               }
            }
-
+           
            // Additional merging if needed
            if (merging) {
                // mcParticles
@@ -412,7 +445,6 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
                for (Int_t i = 0; i < ntr; i++) {
                    AliAODTrack*    track = (AliAODTrack*) tracks->At(i);
                    AliAODTrack* newtrack = new((*fgAODTracks)[nc++]) AliAODTrack(*track);
-
                    newtrack->SetLabel(newtrack->GetLabel() + nc0);
                }
 
@@ -458,8 +490,16 @@ void AliAnalysisTaskSE::Exec(Option_t* option)
     }
 
 // Call the user analysis    
-    if (!fSelectCollisions || isSelected) 
-       UserExec(option);
+    AliMCEventHandler*    mcH = 0;
+    mcH = (AliMCEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
+
+    if (!mcH) {
+       if (!fSelectCollisions || isSelected) 
+           UserExec(option);
+    } else {
+       if ((!fSelectCollisions || isSelected) && (mcH->InitOk())) 
+           UserExec(option);
+    }
     
 // Added protection in case the derived task is not an AOD producer.
     AliAnalysisDataSlot *out0 = GetOutputSlot(0);
@@ -479,7 +519,7 @@ const char* AliAnalysisTaskSE::CurrentFileName()
 void AliAnalysisTaskSE::AddAODBranch(const char* cname, void* addobj, const char *fname)
 {
     // Add a new branch to the aod tree
-    AliAODHandler* handler = (AliAODHandler*) 
+    AliAODHandler* handler = dynamic_cast<AliAODHandler*> 
        ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
     if (handler) {
        handler->AddBranch(cname, addobj, fname);
@@ -490,7 +530,7 @@ Bool_t AliAnalysisTaskSE::IsStandardAOD() const
 {
 // Check if the output AOD handler is configured for standard or delta AOD.
 // Users should first check that AODEvent() returns non-null.
-    AliAODHandler* handler = (AliAODHandler*) 
+    AliAODHandler* handler = dynamic_cast<AliAODHandler*> 
          ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
     if (!handler) {
        Error("IsStandardAOD", "No AOD handler. Please use AODEvent() to check this first");