o updates for AOD MC (Julian)
authorwiechula <wiechula@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Jun 2012 13:44:59 +0000 (13:44 +0000)
committerwiechula <wiechula@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 18 Jun 2012 13:44:59 +0000 (13:44 +0000)
PWGDQ/dielectron/AliDielectron.cxx
PWGDQ/dielectron/AliDielectronHelper.cxx
PWGDQ/dielectron/AliDielectronMC.cxx
PWGDQ/dielectron/AliDielectronVarManager.h

index 7c0f9ae..a8ac940 100644 (file)
@@ -230,11 +230,7 @@ void AliDielectron::Process(AliVEvent *ev1, AliVEvent *ev2)
   }
 
   //in case we have MC load the MC event and process the MC particles
-  if (AliDielectronMC::Instance()->HasMC()) {
-    if (!AliDielectronMC::Instance()->ConnectMCEvent()){
-      AliError("Could not properly connect the MC event, skipping this event!");
-      return;
-    }
+  if (AliDielectronMC::Instance()->ConnectMCEvent()){
     ProcessMC(ev1);
   }
   
index 7418b80..cb7719d 100644 (file)
@@ -346,6 +346,7 @@ void AliDielectronHelper::RotateKFParticle(AliKFParticle * kfParticle,Double_t a
 
 //_____________________________________________________________________________
 Int_t AliDielectronHelper::GetNMothers(const AliMCEvent *ev, Double_t etaRange, Int_t pdgMother, Int_t pdgDaughter, Int_t prim){
+  // TODO: add AODs
   // counting number of mother particles generated in given eta range and 2 particle decay
   if (!ev || ev->IsA()!=AliMCEvent::Class()) return -1;
   
index d90e54f..eb56285 100644 (file)
@@ -160,7 +160,8 @@ AliVParticle* AliDielectronMC::GetMCTrackFromMCEvent(Int_t itrk) const
     if (!fMCEvent){ AliError("No fMCEvent"); return NULL;}
     track = fMCEvent->GetTrack(itrk); //  tracks from MC event (ESD)
   } else if(fAnaType == kAOD) {
-    if (!fMcArray){ AliError("No fMCEvent"); return NULL;}
+    if (!fMcArray){ AliError("No fMcArray"); return NULL;}
+    if (itrk>fMcArray->GetEntriesFast()) { AliWarning(Form("track %d out of array size %d",itrk,fMcArray->GetEntriesFast())); return NULL;}
     track = (AliVParticle*)fMcArray->At(itrk); //  tracks from MC event (AOD)
   }
   return track;
@@ -175,13 +176,13 @@ Bool_t AliDielectronMC::ConnectMCEvent()
   if(fAnaType == kESD){
     fMCEvent=0x0;
     AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
-    if (!mcHandler){ AliError("Could not retrive MC event handler!"); return kFALSE; }
+    if (!mcHandler){ /*AliError("Could not retrive MC event handler!");*/ return kFALSE; }
     if (!mcHandler->InitOk() ) return kFALSE;
     if (!mcHandler->TreeK() )  return kFALSE;
     if (!mcHandler->TreeTR() ) return kFALSE;
     
     AliMCEvent* mcEvent = mcHandler->MCEvent();
-    if (!mcEvent){ AliError("Could not retrieve MC event!"); return kFALSE; }
+    if (!mcEvent){ /*AliError("Could not retrieve MC event!");*/ return kFALSE; }
     fMCEvent = mcEvent;
     
     if (!UpdateStack()) return kFALSE;
@@ -191,7 +192,8 @@ Bool_t AliDielectronMC::ConnectMCEvent()
     fMcArray = 0x0;
     AliAODEvent *aod=((AliAODInputHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()))->GetEvent();
     fMcArray = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
-    if(!fMcArray) return kFALSE;
+    if (!fMcArray){ /*AliError("Could not retrieve MC array!");*/ return kFALSE; }
+    else fHasMC=kTRUE;
   }
   return kTRUE;
 }
@@ -232,9 +234,9 @@ AliAODMCParticle* AliDielectronMC::GetMCTrack( const AliAODTrack* _track)
   //
   // return MC track
   //
- if(!fMcArray) { AliError("No fMCArray"); return NULL;}
+ if(!fMcArray) { AliError("No fMcArray"); return NULL;}
  Int_t label = _track->GetLabel();
- if(label < 0) return NULL;
+ if(label < 0 || label > fMcArray->GetEntriesFast()) return NULL;
  AliAODMCParticle *mctrack = (AliAODMCParticle*)fMcArray->At(label);
  return mctrack; 
 }
index 56dbc7d..6e8eb62 100644 (file)
@@ -402,7 +402,7 @@ inline void AliDielectronVarManager::Fill(const TObject* object, Double_t * cons
   //
   // Main function to fill all available variables according to the type of particle
   //
-//   if (!object) return;
+  if (!object) return;
   if      (object->IsA() == AliESDtrack::Class())       FillVarESDtrack(static_cast<const AliESDtrack*>(object), values);
   else if (object->IsA() == AliAODTrack::Class())       FillVarAODTrack(static_cast<const AliAODTrack*>(object), values);
   else if (object->IsA() == AliMCParticle::Class())     FillVarMCParticle(static_cast<const AliMCParticle*>(object), values);
@@ -1104,7 +1104,8 @@ inline void AliDielectronVarManager::FillVarDielectronPair(const AliDielectronPa
       if(pair->GetFirstDaughter()->GetLabel() > 0) {
         const AliVParticle* d1 = mc->GetMCTrackFromMCEvent(pair->GetFirstDaughter()->GetLabel());
         const AliVParticle* motherMC = mc->GetMCTrackFromMCEvent(((AliMCParticle*)d1)->GetMother());
-        const AliVVertex* mcVtx = mc->GetMCEvent()->GetPrimaryVertex();
+        const AliMCEvent *mcevent = mc->GetMCEvent();
+       const AliVVertex* mcVtx = mcevent ? mcevent->GetPrimaryVertex() : 0x0;
        if(motherMC && mcVtx) {
          const Double_t lxyMC = ( (motherMC->Xv() - mcVtx->GetX()) * motherMC->Px() +
                                    (motherMC->Yv() - mcVtx->GetY()) * motherMC->Py()   ) / motherMC->Pt();