]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliAnalysisTaskMultiDielectronTG.cxx
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliAnalysisTaskMultiDielectronTG.cxx
index b7f0d98dbe01ebd6f2eec2e0ef2fb1e95b075f38..2ab96b032f87cb5194775386f7e2025a000d0257 100644 (file)
@@ -49,9 +49,6 @@
 #include <cstdlib> 
 #include <TRandom.h>
 
-using std::vector;
-using std::deque;
-
 const char* kPairClassNamesTG[7] = {
   "unlike",
   "like_pp",
@@ -98,6 +95,7 @@ AliAnalysisTaskMultiDielectronTG::AliAnalysisTaskMultiDielectronTG() :
   fVemtmp(0x0),
   fVeptmp(0x0),
   fdconvphiv(acos(-1.0)),
+  fdconvMee(100),
   fdop(0),
   fbz(0),
   fdv0mixing(kTRUE),
@@ -141,6 +139,7 @@ AliAnalysisTaskMultiDielectronTG::AliAnalysisTaskMultiDielectronTG(const char *n
   fVemtmp(0x0),
   fVeptmp(0x0),
   fdconvphiv(acos(-1.0)),
+  fdconvMee(100),
   fdop(0),
   fbz(0),
   fdv0mixing(kTRUE),
@@ -623,7 +622,10 @@ void AliAnalysisTaskMultiDielectronTG::FinishTaskOutput()
     die->SaveDebugTree();
     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) continue;
+    for (Int_t ipool=0; ipool<mix->GetNumberOfBins(); ++ipool){
+      mix->MixRemaining(die, ipool);
+    }
   }
   PostData(1, &fListHistos);
   PostData(2, &fListCF);
@@ -968,7 +970,7 @@ void AliAnalysisTaskMultiDielectronTG::FillPair(AliDielectronSingleTG *iep,
   Bool_t pairClass1=fHistos->GetHistogramList()->FindObject(className1.Data())!=0x0;
   Bool_t pairClass2=fHistos->GetHistogramList()->FindObject(className2.Data())!=0x0;
 
-  if (pairClass1 && PairTrackcut(dphiv, dcos, idie)==true){
+  if (pairClass1 && PairTrackcut(dphiv, dcos, dmass, idie)==true){
     ///import pair variables to values!!
     values[AliDielectronVarManager::kPx] = dpxpair;
     values[AliDielectronVarManager::kPy] = dpypair;
@@ -990,7 +992,7 @@ void AliAnalysisTaskMultiDielectronTG::FillPair(AliDielectronSingleTG *iep,
   }
 
 
-  if (pairClass2 && PairTrackcut(dphiv, dopeningangle, idie)==true){
+  if (pairClass2 && PairTrackcut(dphiv, dopeningangle, dv0mass, idie)==true){
     values[AliDielectronVarManager::kPx] = dv0pxpair;
     values[AliDielectronVarManager::kPy] = dv0pypair;
     values[AliDielectronVarManager::kPz] = dv0pzpair;
@@ -1015,7 +1017,7 @@ void AliAnalysisTaskMultiDielectronTG::FillPair(AliDielectronSingleTG *iep,
 }
 
 //_________________________________________________________________________________
-bool AliAnalysisTaskMultiDielectronTG::PairTrackcut(double phiv, double op, int idie)
+bool AliAnalysisTaskMultiDielectronTG::PairTrackcut(double phiv, double op, double mass, int idie)
 {
 
   //
@@ -1028,9 +1030,9 @@ bool AliAnalysisTaskMultiDielectronTG::PairTrackcut(double phiv, double op, int
   if(fRejectPairFlag[idie] == 1 || fRejectPairFlag[idie] == 2 ||
      fRejectPairFlag[idie] == 3 || fRejectPairFlag[idie] == 4 ){
     if(fRejectPairFlag[idie] == 2 || fRejectPairFlag[idie] == 4 ){
-      if(fbz>0 && phiv>fdconvphiv){
+      if(fbz>0 && (phiv>fdconvphiv && mass < fdconvMee) ){
        pairOK = false;
-      }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv){
+      }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv  && mass < fdconvMee){
        pairOK = false;
       }
     }else if(fRejectPairFlag[idie] == 1 || fRejectPairFlag[idie] == 3){
@@ -1067,9 +1069,7 @@ void AliAnalysisTaskMultiDielectronTG::CalcVars(AliDielectronSingleTG *iep, AliD
     + sqrt(me*me+iem->Px()*iem->Px()+iem->Py()*iem->Py()+iem->Pz()*iem->Pz());
   
   mass =  e*e-px*px-py*py-pz*pz;
-  if(mass<0){
-    mass = mass;
-  }else{
+  if(mass>=0){
     mass = sqrt(mass);
   }
    
@@ -1180,10 +1180,11 @@ void AliAnalysisTaskMultiDielectronTG::RejectPairs(vector<AliDielectronSingleTG*
          }
        }else if(fRejectPairFlag[idie]==2){
          Double_t phiv = GetPhiv(e1[i1], e2[i2]);
-         if(fbz>0 && phiv>fdconvphiv){
+         Double_t mee = GetMass(e1[i1], e2[i2]);
+         if(fbz>0 && ( phiv>fdconvphiv && mee < fdconvMee) ){
            e1[i1]->SetConvFlag(0);
            e2[i2]->SetConvFlag(0);
-         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv){
+         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv && mee < fdconvMee){
            e1[i1]->SetConvFlag(0);
            e2[i2]->SetConvFlag(0);
          }
@@ -1191,7 +1192,6 @@ void AliAnalysisTaskMultiDielectronTG::RejectPairs(vector<AliDielectronSingleTG*
       }
     }
   }
-  /////// this is really necessary??????
   if(e1.size()>0){
     for(int i1=0; i1<(int)e1.size(); i1++){
       for(int i2=i1+1; i2<(int)e1.size(); i2++){
@@ -1203,10 +1203,11 @@ void AliAnalysisTaskMultiDielectronTG::RejectPairs(vector<AliDielectronSingleTG*
          }
        }else if(fRejectPairFlag[idie]==2){
          Double_t phiv = GetPhiv(e1[i1], e1[i2]);
-         if(fbz>0 && phiv>fdconvphiv){
+         Double_t mee = GetMass(e1[i1], e1[i2]);
+         if(fbz>0 && phiv>fdconvphiv && mee < fdconvMee){
            e1[i1]->SetConvFlag(0);
            e1[i2]->SetConvFlag(0);
-         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv){
+         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv && mee < fdconvMee){
            e1[i1]->SetConvFlag(0);
            e1[i2]->SetConvFlag(0);
          }
@@ -1226,10 +1227,11 @@ void AliAnalysisTaskMultiDielectronTG::RejectPairs(vector<AliDielectronSingleTG*
          }
        }else if(fRejectPairFlag[idie]==2){
          Double_t phiv = GetPhiv(e2[i1], e2[i2]);
-         if(fbz>0 && phiv>fdconvphiv){
+         Double_t mee = GetMass(e2[i1], e2[i2]);
+         if(fbz>0 && phiv>fdconvphiv && mee < fdconvMee){
            e2[i1]->SetConvFlag(0);
            e2[i2]->SetConvFlag(0);
-         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv){
+         }else if(fbz<0 && phiv<acos(-1.0)-fdconvphiv && mee < fdconvMee){
            e2[i1]->SetConvFlag(0);
            e2[i2]->SetConvFlag(0);
          }
@@ -1260,7 +1262,7 @@ Double_t AliAnalysisTaskMultiDielectronTG::GetOpeningAngle(AliDielectronSingleTG
 Double_t AliAnalysisTaskMultiDielectronTG::GetPhiv(AliDielectronSingleTG* e1, AliDielectronSingleTG* e2){
 
   //////////////////////
-  //////// calculate pairs and get opening angle 
+  //////// calculate pairs and get phiv
   //////////////////////
 
   double dmass, dphiv, dpxpair, dpypair, dpzpair;
@@ -1271,3 +1273,19 @@ Double_t AliAnalysisTaskMultiDielectronTG::GetPhiv(AliDielectronSingleTG* e1, Al
 
   return dphiv;
 }
+
+//_________________________________________________________________________________
+Double_t AliAnalysisTaskMultiDielectronTG::GetMass(AliDielectronSingleTG* e1, AliDielectronSingleTG* e2){
+
+  //////////////////////
+  //////// calculate pairs and get mass
+  //////////////////////
+
+  double dmass, dphiv, dpxpair, dpypair, dpzpair;
+  double dptpair, depair, dphipair, detapair, dcos, dpsi;
+  
+  CalcVars(e1, e2, dmass, dphiv, dpxpair, dpypair, dpzpair, 
+            dptpair, depair, dphipair, detapair, dcos, dpsi);
+
+  return dmass;
+}