]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliDalitzElectronCuts.cxx
added libraries to AddTask in order to include flow package
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliDalitzElectronCuts.cxx
index c6d3d7209a212babfb07882c861ab2fdcce1d5ab..d5def29bb49c24af69bc396507ee7163f3d63141 100644 (file)
@@ -74,9 +74,9 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     fPIDResponse(NULL),
     fesdTrackCuts(NULL),
     fEtaCut(0.9),
-    fEtaShift(0.0),
     fDoEtaCut(kFALSE),
-    fPtCut(0.0),
+    fPtMinCut(0.0),
+    fPtMaxCut(9999),
     fRadiusCut(1000.0),
     fPsiPairCut(0.45),
     fDeltaPhiCutMin(0.),
@@ -108,16 +108,21 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     fPIDMinPProtonRejectionLowP(2.0),
     fPIDMinPPionRejectionLowP(0.5),
     fUseCorrectedTPCClsInfo(kFALSE),
+    fUseCrossedRows(kFALSE),
     fUseTOFpid(kFALSE),
     fRequireTOF(kFALSE),
     fUseTrackMultiplicityForBG(kFALSE),
     fBKGMethod(0),
     fnumberOfRotationEventsForBG(0),
     fDoMassCut(kFALSE),
+    fDoMassMinCut(kFALSE),
     fMassCutLowPt(999.),
     fMassCutHighPt(999.),
     fMassCutPtMin(-100.0),
+    fMassMinCut(-999.),
     fDoWeights(kFALSE),
+    fUseVPhotonMCPSmearing(kFALSE),
+    fUseElectronMCPSmearing(kFALSE),
     fCutString(NULL),
     hCutIndex(NULL),
     hdEdxCuts(NULL),
@@ -134,7 +139,11 @@ AliDalitzElectronCuts::AliDalitzElectronCuts(const char *name,const char *title)
     hTrackDCAzPtbefore(NULL),
     hTrackDCAzPtafter(NULL),
     hTrackNFindClsPtTPCbefore(NULL),
-    hTrackNFindClsPtTPCafter(NULL)
+    hTrackNFindClsPtTPCafter(NULL),
+    hTrackPosEtabeforeDedx(NULL),
+    hTrackNegEtabeforeDedx(NULL),
+    hTrackPosEtaafterDedx(NULL),
+    hTrackNegEtaafterDedx(NULL)
    {
     InitPIDResponse();
     for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
@@ -167,6 +176,8 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
 
     // Initialize Cut Histograms for QA (only initialized and filled if function is called)
 
+     TH1::AddDirectory(kFALSE);
+
      TString cutName = "";
     
      if( cutNumber==""){
@@ -185,6 +196,38 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
        if(name=="")fHistograms->SetName(Form("ElectronCuts_%s",cutName.Data()));
        else fHistograms->SetName(Form("%s_%s",name.Data(),cutName.Data()));
     }
+    
+    
+    Int_t kDedxSignalbins = 200;
+    
+     const Int_t kDCABins=62;
+    
+     Double_t binsDCADummy[63]={-3.0,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,-0.25,-0.2,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01,0.0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.25,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3.0};
+
+     const Int_t kPtBins=110;
+     Double_t binsPtDummy[kPtBins+1];
+     const Int_t kPBins = 109;
+     Double_t binsPDummy[kPBins+1];
+     binsPtDummy[0]=0.0;
+     binsPDummy[0]=0.05;
+     
+        for(Int_t i=1;i<kPtBins+1;i++)
+        {
+                if(binsPtDummy[i-1]+0.05<1.01)
+                        binsPtDummy[i]=binsPtDummy[i-1]+0.05;
+                else
+                        binsPtDummy[i]=binsPtDummy[i-1]+0.1;
+               
+        }
+        for(Int_t i=1; i <kPBins+1;i++){
+                 
+                 if( binsPDummy[i-1]+0.05<1.01)
+                       binsPDummy[i] = binsPDummy[i-1]+0.05;
+                 else
+                       binsPDummy[i] = binsPDummy[i-1]+0.1;
+               
+       }
+       
 
 
     hCutIndex=new TH1F(Form("IsElectronSelected %s",cutName.Data()),"IsElectronSelected",10,-0.5,9.5);
@@ -221,29 +264,29 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
     if(preCut){
 
 
-       hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,150,0.05,20,400,-10,10);
+       hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
        fHistograms->Add(hITSdEdxbefore);
        AxisBeforeITS = hITSdEdxbefore->GetXaxis();
 
-       hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,150,0.05,20,400,-10,10);
+       hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
        fHistograms->Add(hTPCdEdxbefore);
        AxisBeforedEdx = hTPCdEdxbefore->GetXaxis();
 
-       hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,150,0.05,20.0,800,0.0,200);
+       hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
        fHistograms->Add(hTPCdEdxSignalbefore);
        AxisBeforedEdxSignal = hTPCdEdxSignalbefore->GetXaxis();
 
-       hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,150,0.05,20,400,-6,10);
+       hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,kPBins,binsPDummy,200,-10,10);
        fHistograms->Add(hTOFbefore);
        AxisBeforeTOF = hTOFbefore->GetXaxis();
        
-       hTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
+       hTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
        fHistograms->Add(hTrackDCAxyPtbefore);  
        
-       hTrackDCAzPtbefore  = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz  Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
+       hTrackDCAzPtbefore  = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz  Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
        fHistograms->Add(hTrackDCAzPtbefore); 
        
-       hTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",100,0,1,400,0.,10.);
+       hTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",60,0,1.5,kPtBins,binsPtDummy);
        fHistograms->Add(hTrackNFindClsPtTPCbefore); 
        
        
@@ -251,27 +294,39 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
     }
 
 
-    hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,150,0.05,20,400, -10,10);
+    hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
     fHistograms->Add(hITSdEdxafter);
 
-    hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,150,0.05,20,400, -10,10);
+    hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
     fHistograms->Add(hTPCdEdxafter);
 
-    hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,150,0.05,20.0,800,0.0,200);
+    hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
     fHistograms->Add(hTPCdEdxSignalafter);
 
-    hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,150,0.05,20,400,-6,10);
+    hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,kPBins,binsPDummy,200,-6,10);
     fHistograms->Add(hTOFafter);
       
-    hTrackDCAxyPtafter  = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",800,-4.0,4.0,400,0.,10.);
+    hTrackDCAxyPtafter  = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
     fHistograms->Add(hTrackDCAxyPtafter); 
     
-    hTrackDCAzPtafter  = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks  after",800,-4.0,4.0,400,0.,10.);
+    hTrackDCAzPtafter  = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks  after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
     fHistograms->Add(hTrackDCAzPtafter); 
     
-    hTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",100,0,1,400,0.,10.);
+    hTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",60,0,1.5,kPtBins,binsPtDummy);
     fHistograms->Add(hTrackNFindClsPtTPCafter); 
     
+    hTrackPosEtabeforeDedx = new TH1F(Form("hTrack_Pos_Eta_before_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_before_Dedx",600,-1.5,1.5);
+    fHistograms->Add(hTrackPosEtabeforeDedx);
+    
+    hTrackNegEtabeforeDedx = new TH1F(Form("hTrack_Neg_Eta_before_Dedx %s",cutName.Data()),"hTrack_Neg_Eta_before_Dedx",600,-1.5,1.5);
+    fHistograms->Add(hTrackNegEtabeforeDedx);
+    
+    hTrackPosEtaafterDedx  = new TH1F(Form("hTrack_Pos_Eta_after_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_after_Dedx",600,-1.5,1.5);
+    fHistograms->Add(hTrackPosEtaafterDedx);
+    
+    hTrackNegEtaafterDedx  = new TH1F(Form("hTrack_Neg_Eta_afterDedx %s",cutName.Data()),"hTrack_Neg_Eta_after_Dedx",600,-1.5,1.5);
+    fHistograms->Add(hTrackNegEtaafterDedx);
+    
     
 
     TAxis *AxisAfter = hTPCdEdxafter->GetXaxis(); 
@@ -299,7 +354,8 @@ void AliDalitzElectronCuts::InitCutHistograms(TString name, Bool_t preCut,TStrin
     }
     delete [] newBins;
 
-        
+    TH1::AddDirectory(kTRUE);        
+
     // Event Cuts and Info
 }
 
@@ -332,7 +388,7 @@ Bool_t AliDalitzElectronCuts::ElectronIsSelectedMC(Int_t labelParticle,AliStack
         if( TMath::Abs( particle->GetPdgCode() ) != 11 )  return kFALSE;
         
         if( fDoEtaCut ){
-         if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
+         if( particle->Eta() > fEtaCut  || particle->Eta() < -fEtaCut  )
          return kFALSE;
        }
         
@@ -387,13 +443,35 @@ Bool_t AliDalitzElectronCuts::ElectronIsSelected(AliESDtrack* lTrack)
          return kFALSE;
     }
 
-
+    if( lTrack->GetSign() > 0.0 ){
+       
+     if (hTrackPosEtabeforeDedx) hTrackPosEtabeforeDedx->Fill(lTrack->Eta());
+      
+    } else{
+      
+      if(hTrackNegEtabeforeDedx) hTrackNegEtabeforeDedx->Fill(lTrack->Eta());
+      
+    }
+    
+    
     // dEdx Cuts
     if( ! dEdxCuts( track ) ) {
          if(hCutIndex)hCutIndex->Fill(kdEdxCuts);
          return kFALSE;
 
     }
+    
+    if( lTrack->GetSign() > 0.0 ){
+       
+      if( hTrackPosEtaafterDedx) hTrackPosEtaafterDedx->Fill(lTrack->Eta());
+      
+    } else{
+      
+      if( hTrackNegEtaafterDedx) hTrackNegEtaafterDedx->Fill(lTrack->Eta());
+      
+    }
+    
+    
 
     //Electron passed the cuts
     if(hCutIndex)hCutIndex->Fill(kElectronOut);
@@ -420,13 +498,13 @@ Bool_t AliDalitzElectronCuts::TrackIsSelected(AliESDtrack* lTrack) {
     }
     
     if( fDoEtaCut ) {
-      if(  lTrack->Eta() > (fEtaCut + fEtaShift) || lTrack->Eta() < (-fEtaCut + fEtaShift) ) {
+      if(  lTrack->Eta() > fEtaCut  || lTrack->Eta() < -fEtaCut ) {
         return kFALSE;
       }
    }
    
    
-   if( lTrack->Pt() < fPtCut ) {
+   if( lTrack->Pt() < fPtMinCut || lTrack->Pt() > fPtMaxCut ) {
      
        return kFALSE;
        
@@ -660,7 +738,8 @@ Double_t AliDalitzElectronCuts::GetNFindableClustersTPC(AliESDtrack* lTrack){
   
   
   Double_t clsToF=0;
-
+  
+  if( fUseCrossedRows == kFALSE ) {
 
     if ( !fUseCorrectedTPCClsInfo ){
         if(lTrack->GetTPCNclsF()!=0){
@@ -674,6 +753,14 @@ Double_t AliDalitzElectronCuts::GetNFindableClustersTPC(AliESDtrack* lTrack){
               clsToF = lTrack->GetTPCClusterInfo(2,0); //NOTE ask friederike
                 
     }
+  } else  {
+   
+        Float_t nCrossedRowsTPC = lTrack->GetTPCCrossedRows();
+        clsToF = 1.0;
+         if ( lTrack->GetTPCNclsF()>0 ) {
+             clsToF = nCrossedRowsTPC / lTrack->GetTPCNclsF();
+         }     
+    }
   
   return clsToF;
    
@@ -725,10 +812,10 @@ Bool_t AliDalitzElectronCuts::UpdateCutString(cutIds cutID, Int_t value) {
 ///Update the cut string (if it has been created yet)
 
   if(fCutString && fCutString->GetString().Length() == kNCuts) {
-//         cout << "Updating cut id in spot number " << cutID << " to " << value << endl;
+         cout << "Updating cut id in spot number " << cutID << " to " << value << endl;
        fCutString->SetString(GetCutNumber());
   } else {
-//         cout << "fCutString not yet initialized, will not be updated" << endl;
+         cout << "fCutString not yet initialized, will not be updated" << endl;
        return kFALSE;
   }
  // cout << fCutString->GetString().Data() << endl;
@@ -913,7 +1000,14 @@ Bool_t AliDalitzElectronCuts::SetCut(cutIds cutID, const Int_t value) {
                         return kTRUE;
                 } else return kFALSE;
                
-               
+  case kuseVPhotonMCPSmearing:
+    
+                 if( SetUseVPhotonMCPmearing(value)) {
+                        fCuts[kuseVPhotonMCPSmearing] = value;
+                        UpdateCutString(cutID, value);
+                        return kTRUE;
+                  } else return kFALSE;
+                 
   case kNCuts:
                cout << "Error:: Cut id out of range"<< endl;
                return kFALSE;
@@ -1175,6 +1269,15 @@ Bool_t AliDalitzElectronCuts::SetITSClusterCut(Int_t clsITSCut){
                 fesdTrackCuts->SetMinNClustersITS(5);
                 // 5 hits in total in the ITS. At least 1 hit in any layer of SPD
                 break;
+       case 7: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
+                fesdTrackCuts->SetMinNClustersITS(4);
+               break;
+       case 8: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
+                break;
+        case 9: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
+               fesdTrackCuts->SetMinNClustersITS(4);
+                break;
+               
        default:
                cout<<"Warning: clsITSCut not defined "<<clsITSCut<<endl;
                return kFALSE;
@@ -1199,9 +1302,11 @@ Bool_t AliDalitzElectronCuts::SetTPCClusterCut(Int_t clsTPCCut)
                fMinClsTPC= 80.;
                fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
                break;
-       case 3:  // 100
-               fMinClsTPC= 100.;
-               fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
+       case 3:  // Changed 2014-02-04  before fMinClsTPC = 50.;
+               fMinClsTPCToF = 0.8;
+               fesdTrackCuts->SetMinNCrossedRowsTPC(70);
+               fesdTrackCuts->SetMinNClustersTPC(0);
+               fUseCrossedRows = kTRUE;
                break;
        case 4:  // 0% of findable clusters
                fMinClsTPC= 70.;  
@@ -1221,11 +1326,12 @@ Bool_t AliDalitzElectronCuts::SetTPCClusterCut(Int_t clsTPCCut)
                fMinClsTPCToF= 0.6;
                fUseCorrectedTPCClsInfo=0;
                break;
-       case 7:  // 70% of findable clusters
-               fMinClsTPC= 70.;  
-               fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
-               fMinClsTPCToF= 0.7;
-               fUseCorrectedTPCClsInfo=0;
+       case 7:  // 60% Changed 2014-02-04 before fMinClsTPC = 0.7 fUseCorrectedTPCClsInfo = 0
+                // Changed 2014-02-04  before fMinClsTPC = 50.;
+               fMinClsTPCToF = 0.6;
+               fesdTrackCuts->SetMinNCrossedRowsTPC(70);
+               fesdTrackCuts->SetMinNClustersTPC(0);
+               fUseCrossedRows = kTRUE;
                break;
        case 8: fMinClsTPC = 0.;  
                fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
@@ -1286,6 +1392,9 @@ Bool_t AliDalitzElectronCuts::SetEtaCut(Int_t etaCut)
        case 8: fEtaCut = 0.4;
                fDoEtaCut = kTRUE;
                break;
+       case 9: fEtaCut = 0.65;
+               fDoEtaCut = kTRUE; 
+               break;
        default:
                cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
                return kFALSE;
@@ -1301,16 +1410,28 @@ Bool_t AliDalitzElectronCuts::SetPtCut(Int_t ptCut)
   
        switch(ptCut){
          
-       case 0: fPtCut = 0.075;         
+       case 0: fPtMinCut = 0.075;
+               fPtMaxCut = 9999;
                break;
        case 1:  // 0.1
-               fPtCut  = 0.1;  
+               fPtMinCut  = 0.1;       
+               fPtMaxCut  = 9999;
                break;
        case 2:  // 0.125 GeV
-               fPtCut  = 0.125;                
+               fPtMinCut = 0.125;              
+               fPtMaxCut = 9999;
                break;
        case 3: // 0.15 GeV
-               fPtCut  = 0.15;
+               fPtMinCut = 0.15;
+               fPtMaxCut = 9999;
+               break;
+               // 0.5 - 0.7 
+       case 4: fPtMinCut = 0.5;
+               fPtMaxCut = 0.7;
+               break;
+       case 5: // 0.175 GeV
+               fPtMinCut = 0.175;
+               fPtMaxCut = 9999;
                break;
        default:
                cout<<"Warning: PtCut not defined "<<ptCut<<endl;
@@ -1350,6 +1471,10 @@ Bool_t AliDalitzElectronCuts::SetDCACut(Int_t dcaCut)
                fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
                break; 
                
+       case 3: fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
+               fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
+               break;
+               
        default:
                cout<<"Warning: dcaCut not defined "<<dcaCut<<endl;
                return kFALSE;
@@ -1558,14 +1683,21 @@ Bool_t AliDalitzElectronCuts::SetPsiPairCut(Int_t psiCut) {
         fPsiPairCut = 0.52;
         fDeltaPhiCutMin = 0.0;
         fDeltaPhiCutMax = 0.12;
-        break;
+       break;
   case 4:
         fDoPsiPairCut = kTRUE;
         fPsiPairCut = 0.30;
         fDeltaPhiCutMin = 0.0;
         fDeltaPhiCutMax = 0.12;
         break;
-      
+  case 5:
+       fDoPsiPairCut = kTRUE;
+        fPsiPairCut = 0.60;
+        fDeltaPhiCutMin = 0.0;
+        fDeltaPhiCutMax = 0.06;
+       break;
+       
+    
   default:
       cout<<"Warning: PsiPairCut not defined "<<fPsiPairCut<<endl;
       return kFALSE;
@@ -1713,61 +1845,120 @@ Bool_t AliDalitzElectronCuts::SetMassCut(Int_t massCut)
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  =  999.; //GeV/c^2
                         fMassCutHighPt =  999.; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kFALSE;   
+                       fDoMassMinCut = kFALSE;
                         break;
     case 1:
                         //fMassCut = 0.135;             //GeV/c^2
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.135; //GeV/c^2
                         fMassCutHighPt = 0.135; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break; 
     case 2:
                         //fMassCut = 0.100;     //GeV/c^2
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.100; //GeV/c^2
                         fMassCutHighPt = 0.100; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break;
     case 3:
-                        //fMassCut = 0.075;     //GeV/c^2
+                        /*fMassCut = 0.075;     //GeV/c^2 Changed from Feb 25
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.075; //GeV/c^2
                         fMassCutHighPt = 0.075; //GeV/c^2
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;*/
+                       fMassCutPtMin  = 1.0;   //GeV
+                        fMassCutLowPt  = 0.015; //GeV/c^2
+                        fMassCutHighPt = 0.035; //GeV/c^2
+                        fMassMinCut    = 0.002;
+                        fDoMassCut = kTRUE;
+                       fDoMassMinCut = kTRUE;
                         break;
     case 4:
                         //fMassCut = 0.050;     //GeV/c^2
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.050; //GeV/c^2
                         fMassCutHighPt = 0.050; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break;
     case 5:
                         
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.035; //GeV/c^2
                         fMassCutHighPt = 0.035; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break;
     case 6:
                         fMassCutPtMin  = -999.; //GeV
                         fMassCutLowPt  = 0.015; //GeV/c^2
                         fMassCutHighPt = 0.015; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break;
     case 7:             fMassCutPtMin  = 1.0;   //GeV
                         fMassCutLowPt  = 0.015; //GeV/c^2
                         fMassCutHighPt = 0.035; //GeV/c^2
+                        fMassMinCut = -999;
                         fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
                         break;
+    case 8:             fMassCutPtMin  = 1.0;   //GeV
+                        fMassCutLowPt  = 0.015; //GeV/c^2
+                        fMassCutHighPt = 0.050; //GeV/c^2
+                        fMassMinCut = -999;
+                        fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
+                       break;
+    case 9:             fMassCutPtMin  = 1.0;   //GeV
+                        fMassCutLowPt  = 0.025; //GeV/c^2
+                        fMassCutHighPt = 0.035; //GeV/c^2
+                        fMassMinCut = -999;
+                        fDoMassCut = kTRUE;
+                       fDoMassMinCut = kFALSE;
+                       break;
     default:
                         cout<<"Warning: MassCut not defined "<<massCut<<endl;
                         return kFALSE;
     }
     return kTRUE;
 }
-
+Bool_t AliDalitzElectronCuts::SetUseVPhotonMCPmearing(Int_t useMCPSmearing)
+{// Set Cut
+   switch(useMCPSmearing){
+     
+   case 0:
+      fUseVPhotonMCPSmearing=kFALSE;
+      fUseElectronMCPSmearing=kFALSE;
+      break;
+   case 1:
+      fUseVPhotonMCPSmearing=kTRUE;
+      fUseElectronMCPSmearing=kFALSE;
+      break;
+   case 2:
+      fUseVPhotonMCPSmearing=kFALSE;
+      fUseElectronMCPSmearing=kTRUE;
+      break;
+       
+      
+   default: cout<<"Warning: Virtual Photon SMearing not defined "<<useMCPSmearing<<endl;
+           return kFALSE;
+      
+   }
+   
+   return kTRUE;
+}
 
 
 ///________________________________________________________________________