]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGUD/UPC/AliAnalysisTaskUpcPsi2s.cxx
Updating ESD side of the QA part
[u/mrichter/AliRoot.git] / PWGUD / UPC / AliAnalysisTaskUpcPsi2s.cxx
index 0c4b8cefbc7f9d053829bbd17ad1124fad829407..4975d7922e7efdd2891d4509bd1e9e4978b74a9d 100644 (file)
@@ -61,14 +61,14 @@ using std::endl;
 
 //_____________________________________________________________________________
 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s() 
-  : AliAnalysisTaskSE(),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),hCounter(0),fJPsiTree(0),fPsi2sTree(0),
+  : AliAnalysisTaskSE(),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fJPsiTree(0),fPsi2sTree(0),
     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),fVtxContrib(0),fBCrossNum(0),fNtracklets(0),
     fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
     fDataFilnam(0),fRecoPass(0),fEvtNum(0),
     fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),
-    fListHist(0),fHistTriggersPerRun(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
-    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
-    fHistK0sMass(0)
+    fListTrig(0),fHistUpcTriggersPerRun(0),fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0),
+    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
+    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
 
 {
 
@@ -79,14 +79,14 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s()
 
 //_____________________________________________________________________________
 AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name) 
-  : AliAnalysisTaskSE(name),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),hCounter(0),fJPsiTree(0),fPsi2sTree(0),
+  : AliAnalysisTaskSE(name),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fJPsiTree(0),fPsi2sTree(0),
     fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),fVtxContrib(0),fBCrossNum(0),fNtracklets(0),
     fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
     fDataFilnam(0),fRecoPass(0),fEvtNum(0),
     fJPsiAODTracks(0),fJPsiESDTracks(0),fPsi2sAODTracks(0),fPsi2sESDTracks(0),
-    fListHist(0),fHistTriggersPerRun(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
-    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0),
-    fHistK0sMass(0)
+    fListTrig(0),fHistUpcTriggersPerRun(0),fHistZedTriggersPerRun(0),fHistCvlnTriggersPerRun(0),
+    fListHist(0),fHistNeventsJPsi(0),fHistTPCsignalJPsi(0),fHistDiLeptonPtJPsi(0),fHistDiElectronMass(0),fHistDiMuonMass(0),
+    fHistNeventsPsi2s(0),fHistPsi2sMassVsPt(0),fHistPsi2sMassCoherent(0)
 
 {
 
@@ -98,7 +98,7 @@ AliAnalysisTaskUpcPsi2s::AliAnalysisTaskUpcPsi2s(const char *name)
 
   DefineOutput(1, TTree::Class());
   DefineOutput(2, TTree::Class());
-  DefineOutput(3, TH1I::Class());
+  DefineOutput(3, TList::Class());
   DefineOutput(4, TList::Class());
 
 }//AliAnalysisTaskUpcPsi2s
@@ -123,9 +123,9 @@ AliAnalysisTaskUpcPsi2s::~AliAnalysisTaskUpcPsi2s()
      delete fPsi2sTree;
      fPsi2sTree = 0x0;
   }
-  if(hCounter){
-     delete hCounter;
-     hCounter = 0x0;
+  if(fListTrig){
+     delete fListTrig;
+     fListTrig = 0x0;
   }
   if(fListHist){
      delete fListHist;
@@ -138,8 +138,6 @@ AliAnalysisTaskUpcPsi2s::~AliAnalysisTaskUpcPsi2s()
 //_____________________________________________________________________________
 void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
 {
-   hCounter = new TH1I("hCounter", "hCounter", 34000, 1., 34001.);
-
   //input file
   fDataFilnam = new TObjString();
   fDataFilnam->SetString("");
@@ -202,12 +200,21 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
     fPsi2sTree ->Branch("fPsi2sAODTracks", &fPsi2sAODTracks);
   }
   
+  fListTrig = new TList();
+  fListTrig ->SetOwner();
+  
+  fHistUpcTriggersPerRun = new TH1D("fHistUpcTriggersPerRun", "fHistUpcTriggersPerRun", 3000, 167000.5, 170000.5);
+  fListTrig->Add(fHistUpcTriggersPerRun);
+  
+  fHistZedTriggersPerRun = new TH1D("fHistZedTriggersPerRun", "fHistZedTriggersPerRun", 3000, 167000.5, 170000.5);
+  fListTrig->Add(fHistZedTriggersPerRun);
+
+  fHistCvlnTriggersPerRun = new TH1D("fHistCvlnTriggersPerRun", "fHistCvlnTriggersPerRun", 3000, 167000.5, 170000.5);
+  fListTrig->Add(fHistCvlnTriggersPerRun);
+  
   fListHist = new TList();
   fListHist ->SetOwner();
   
-  fHistTriggersPerRun = new TH1D("fHistTriggersPerRun", "fHistTriggersPerRun", 3000, 167000.5, 170000.5);
-  fListHist->Add(fHistTriggersPerRun);
-  
   TString CutNameJPsi[12] = {"Analyzed","Triggered","Vertex cut","V0 decision","Two good tracks",
                                "Like sign","Oposite sign","One p_{T}>1", "Both p_{T}>1","PID","Dimuom","Dielectron"};
   fHistNeventsJPsi = new TH1D("fHistNeventsJPsi","fHistNeventsPsi2s",12,0.5,12.5);
@@ -244,12 +251,9 @@ void AliAnalysisTaskUpcPsi2s::UserCreateOutputObjects()
   fHistPsi2sMassCoherent->GetXaxis()->SetTitle("Invariant mass(l^{+}l^{-}#pi^{+}#pi^{-}) (GeV/c)");
   fListHist->Add(fHistPsi2sMassCoherent);
   
-  fHistK0sMass = new TH1D("fHistK0sMass","fHistK0sMass",200,0.4,0.6);
-  fListHist->Add(fHistK0sMass);
-  
   PostData(1, fJPsiTree);
   PostData(2, fPsi2sTree);
-  PostData(3, hCounter);
+  PostData(3, fListTrig);
   PostData(4, fListHist);
 
 }//UserCreateOutputObjects
@@ -260,14 +264,44 @@ void AliAnalysisTaskUpcPsi2s::UserExec(Option_t *)
 
   //cout<<"#################### Next event ##################"<<endl;
 
-  if( fType == 0 ) RunESD();
-  if( fType == 1 ){ 
+  if( fType == 0 ){
+       RunESDtrig(); 
+       if(fRunHist) RunESDhist();
+       if(fRunTree) RunESDtree();
+       }
+
+  if( fType == 1 ){
+       RunAODtrig(); 
        if(fRunHist) RunAODhist();
        if(fRunTree) RunAODtree();
        }
 
 }//UserExec
 //_____________________________________________________________________________
+void AliAnalysisTaskUpcPsi2s::RunAODtrig()
+{
+
+  //input event
+  AliAODEvent *aod = (AliAODEvent*) InputEvent();
+  if(!aod) return;
+
+  fRunNum = aod ->GetRunNumber();
+  //Trigger
+  TString trigger = aod->GetFiredTriggerClasses();
+  
+  if(trigger.Contains("CCUP4-B")) fHistUpcTriggersPerRun->Fill(fRunNum); //Upc triggers
+  
+  if(trigger.Contains("CVLN-B")) {fHistCvlnTriggersPerRun->Fill(fRunNum); cout<<"!!! CLVN-B CLASS FIRED !!!"<<endl;} //CVLN-B triggers
+  
+  //if(aod->GetHeader()->IsTriggerInputFired("1ZED")) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
+  
+  fL1inputs = aod->GetHeader()->GetL1TriggerInputs();
+  if(fL1inputs & (1 << 18)) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
+
+PostData(3, fListTrig);
+
+}
+//_____________________________________________________________________________
 void AliAnalysisTaskUpcPsi2s::RunAODhist()
 {
 
@@ -294,9 +328,6 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   
   if( !trigger.Contains("CCUP4-B") ) return;
   
-  fRunNum = aod ->GetRunNumber();
-  fHistTriggersPerRun->Fill(fRunNum);
-  
   fHistNeventsJPsi->Fill(2);
   fHistNeventsPsi2s->Fill(2);
 
@@ -308,15 +339,19 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
   fHistNeventsJPsi->Fill(3);
   fHistNeventsPsi2s->Fill(3);
 
-
   //VZERO, ZDC
   AliAODVZERO *fV0data = aod ->GetVZEROData();
-  //AliAODZDC *fZDCdata = aod->GetZDCData();
+  AliAODZDC *fZDCdata = aod->GetZDCData();
   
   fV0Adecision = fV0data->GetV0ADecision();
   fV0Cdecision = fV0data->GetV0CDecision();
   if(fV0Adecision != AliAODVZERO::kV0Empty || fV0Cdecision != AliAODVZERO::kV0Empty) return;
   
+  fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
+  fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
+
+  if( fZDCAenergy > 12000 || fZDCCenergy > 12000) return;
+  
   fHistNeventsJPsi->Fill(4);
   fHistNeventsPsi2s->Fill(4);
 
@@ -440,46 +475,6 @@ void AliAnalysisTaskUpcPsi2s::RunAODhist()
                }
   }
   
-  
-   //---------------------------------K0s + K0s loop - very experimental-------------------- 
-   nGoodTracks = 0;
-  //V0s loop
-  for(Int_t iV0=0; iV0<aod ->GetNumberOfV0s(); iV0++) {
-    AliAODv0 *v0 = aod->GetV0(iV0);
-    if( !v0 ) continue;
-    Bool_t lOnFlyStatus = v0->GetOnFlyStatus();
-    if (lOnFlyStatus) continue;
-    
-    AliAODTrack *pTrack=(AliAODTrack *)v0->GetDaughter(0); //0->Positive Daughter
-    AliAODTrack *nTrack=(AliAODTrack *)v0->GetDaughter(1); //1->Negative Daughter
-    if (!pTrack || !nTrack) continue;
-
-    if ( pTrack->Charge() == nTrack->Charge())continue;
-
-      if(!(pTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
-      if(!(nTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
-      if(pTrack->GetTPCNcls() < 50)continue;
-      if(nTrack->GetTPCNcls() < 50)continue;
-      if(pTrack->Chi2perNDF() > 4)continue;
-      if(nTrack->Chi2perNDF() > 4)continue;
-      
-      Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
-      if(!pTrack->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
-      if(TMath::Abs(dca[1]) > 2) continue;
-      if(!nTrack->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov)) continue;
-      if(TMath::Abs(dca[1]) > 2) continue;
-      
-      TrackIndex[nGoodTracks] = iV0;
-      nGoodTracks++; 
-      if(nGoodTracks > 2) break;
-  }//V0s loop
-  if(nGoodTracks == 2){
-       for(Int_t i=0; i<2; i++){
-               AliAODv0 *v0 = aod->GetV0(TrackIndex[i]);
-               fHistK0sMass->Fill(v0->MassK0Short());
-               }
-  }
-  
   PostData(4, fListHist);
 
 }
@@ -498,22 +493,10 @@ void AliAnalysisTaskUpcPsi2s::RunAODtree()
   fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
   fRunNum = aod ->GetRunNumber();
 
-  hCounter->Fill( 1 );
-
   //Trigger
   TString trigger = aod->GetFiredTriggerClasses();
   
-  fTrigger[0]   = trigger.Contains("CINT7-B");
-  fTrigger[1]   = trigger.Contains("CCUP4-B"); // CE 
-  fTrigger[2]   = trigger.Contains("CCUP4-E"); // CE 
-
-  Bool_t isTRG = kFALSE;
-  for(Int_t i=1; i<ntrg; i++) {
-    if( fTrigger[i] ) {isTRG = kTRUE; hCounter->Fill( fRunNum - 167806 + 1 + i*2000 );}
-  }
-  if( !isTRG ) {PostData(3, hCounter); return;}
-
-  hCounter->Fill( 2 );
+  if( !trigger.Contains("CCUP4-B") ) return;
 
   //trigger inputs
   fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
@@ -569,7 +552,7 @@ void AliAnalysisTaskUpcPsi2s::RunAODtree()
                Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
                trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov);
                                
-               trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZatDCA();
+               trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
                new((*fJPsiAODTracks)[i]) AliAODTrack(*trk); 
                
                }
@@ -584,20 +567,216 @@ void AliAnalysisTaskUpcPsi2s::RunAODtree()
                Double_t dca[2] = {0.0,0.0}, cov[3] = {0.0,0.0,0.0};
                trk->PropagateToDCA(fAODVertex,aod->GetMagneticField(),300.,dca,cov);
                
-               trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZatDCA();
+               trk->SetDCA(dca[0],dca[1]); //to get DCAxy trk->DCA(); to get DCAz trk->ZAtDCA();
                new((*fPsi2sAODTracks)[i]) AliAODTrack(*trk); 
                
                }
   fPsi2sTree ->Fill();
   PostData(2, fPsi2sTree);
   }
-    
-  PostData(3, hCounter);
 
 }//RunAOD
 
 //_____________________________________________________________________________
-void AliAnalysisTaskUpcPsi2s::RunESD()
+void AliAnalysisTaskUpcPsi2s::RunESDtrig()
+{
+
+  //input event
+  AliESDEvent *esd = (AliESDEvent*) InputEvent();
+  if(!esd) return;
+
+  fRunNum = esd ->GetRunNumber();
+  //Trigger
+  TString trigger = esd->GetFiredTriggerClasses();
+  
+  if(trigger.Contains("CCUP4-B")) fHistUpcTriggersPerRun->Fill(fRunNum); //Upc triggers
+  
+  if(trigger.Contains("CVLN-B")) fHistCvlnTriggersPerRun->Fill(fRunNum); //CVLN-B triggers
+  
+  if(esd->GetHeader()->IsTriggerInputFired("1ZED")) fHistZedTriggersPerRun->Fill(fRunNum); //1ZED trigger inputs
+  
+PostData(3, fListTrig);
+
+}
+//_____________________________________________________________________________
+void AliAnalysisTaskUpcPsi2s::RunESDhist()
+{
+
+  TDatabasePDG *pdgdat = TDatabasePDG::Instance();
+  
+  TParticlePDG *partMuon = pdgdat->GetParticle( 13 );
+  Double_t muonMass = partMuon->Mass();
+  
+  TParticlePDG *partElectron = pdgdat->GetParticle( 11 );
+  Double_t electronMass = partElectron->Mass();
+  
+  TParticlePDG *partPion = pdgdat->GetParticle( 211 );
+  Double_t pionMass = partPion->Mass();
+
+  //input event
+  AliESDEvent *esd = (AliESDEvent*) InputEvent();
+  if(!esd) return;
+
+  fHistNeventsJPsi->Fill(1);
+  fHistNeventsPsi2s->Fill(1);
+
+  //Trigger
+  TString trigger = esd->GetFiredTriggerClasses();
+  
+  if( !trigger.Contains("CCUP4-B") ) return;
+  
+  fHistNeventsJPsi->Fill(2);
+  fHistNeventsPsi2s->Fill(2);
+
+  //primary vertex
+  AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
+  fVtxContrib = fESDVertex->GetNContributors();
+  if(fVtxContrib < 2) return;
+  
+  fHistNeventsJPsi->Fill(3);
+  fHistNeventsPsi2s->Fill(3);
+
+  //VZERO, ZDC
+  AliESDVZERO *fV0data = esd->GetVZEROData();
+  AliESDZDC *fZDCdata = esd->GetESDZDC();
+  
+  fV0Adecision = fV0data->GetV0ADecision();
+  fV0Cdecision = fV0data->GetV0CDecision();
+  if(fV0Adecision != AliESDVZERO::kV0Empty || fV0Cdecision != AliESDVZERO::kV0Empty) return;
+  
+  fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
+  fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
+  if( fZDCAenergy > 12000 || fZDCCenergy > 12000) return;
+  
+  fHistNeventsJPsi->Fill(4);
+  fHistNeventsPsi2s->Fill(4);
+
+   Int_t nGoodTracks=0;
+  //Two tracks loop
+  Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
+  
+  TLorentzVector vLepton[4], vPion[4], vCandidate, vDilepton;
+  Short_t qLepton[4], qPion[4];
+  UInt_t nLepton=0, nPion=0, nHighPt=0;
+  Double_t jRecTPCsignal[5];
+  Int_t mass[3]={-1,-1,-1};
+
+  //Track loop
+  for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
+    AliESDtrack *trk = esd->GetTrack(itr);
+    if( !trk ) continue;
+
+      if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+      if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+      if(trk->GetTPCNcls() < 50)continue;
+      if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
+      Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
+      if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
+      trk->GetImpactParameters(dca[0],dca[1]);
+      if(TMath::Abs(dca[1]) > 2) continue;
+      
+      TrackIndex[nGoodTracks] = itr;
+      nGoodTracks++;
+      if(nGoodTracks > 4) break;   
+  }//Track loop
+  
+  if(nGoodTracks == 2){
+         fHistNeventsJPsi->Fill(5);
+         for(Int_t i=0; i<2; i++){
+               AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);                
+               if(trk->Pt() > 1) nHighPt++;     
+               jRecTPCsignal[nLepton] = trk->GetTPCsignal();     
+               qLepton[nLepton] = trk->Charge();
+               if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                               mass[nLepton] = 0;
+                               }
+               if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
+                               vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                               mass[nLepton] = 1;
+                               }
+                       nLepton++;              
+               }               
+       if(nLepton == 2){
+               if(qLepton[0]*qLepton[1] > 0) fHistNeventsJPsi->Fill(6);
+               if(qLepton[0]*qLepton[1] < 0){
+                       fHistNeventsJPsi->Fill(7);
+                       if(nHighPt > 0){
+                               fHistNeventsJPsi->Fill(8);
+                               fHistTPCsignalJPsi->Fill(jRecTPCsignal[0],jRecTPCsignal[1]);
+                               if(nHighPt == 2) fHistNeventsJPsi->Fill(9);
+                               if(mass[0] == mass[1] && mass[0] != -1) {
+                                       fHistNeventsJPsi->Fill(10);
+                                       vCandidate = vLepton[0]+vLepton[1];
+                                       if( vCandidate.M() > 2.8 && vCandidate.M() < 3.2) fHistDiLeptonPtJPsi->Fill(vLepton[0].Pt(),vLepton[1].Pt());
+                                       if(mass[0] == 0) {
+                                               fHistDiMuonMass->Fill(vCandidate.M());
+                                               fHistNeventsJPsi->Fill(11);
+                                               }
+                                       if(mass[0] == 1) {
+                                               fHistDiElectronMass->Fill(vCandidate.M());
+                                               fHistNeventsJPsi->Fill(12);
+                                               }
+                                       }
+                               }
+                       }
+               }
+  }
+  nLepton=0; nPion=0; nHighPt=0;
+  mass[0]= -1; mass[1]= -1, mass[2]= -1;
+  
+  if(nGoodTracks == 4){
+         fHistNeventsPsi2s->Fill(5);
+         for(Int_t i=0; i<4; i++){
+               AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
+               
+               if(trk->Pt() > 1){   
+                       jRecTPCsignal[nLepton] = trk->GetTPCsignal();      
+                       qLepton[nLepton] = trk->Charge();
+                       if(jRecTPCsignal[nLepton] > 40 && jRecTPCsignal[nLepton] < 70){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), muonMass);
+                                       mass[nLepton] = 0;
+                                       }
+                       if(jRecTPCsignal[nLepton] > 70 && jRecTPCsignal[nLepton] < 100){
+                                       vLepton[nLepton].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), electronMass);
+                                       mass[nLepton] = 1;
+                                       }
+                       nLepton++;
+                       }
+               else{
+                       qPion[nPion] = trk->Charge();
+                       vPion[nPion].SetPtEtaPhiM(trk->Pt(), trk->Eta(), trk->Phi(), pionMass);
+                       nPion++;
+                       }
+                                     
+               if(nLepton > 2 || nPion > 2) break;
+               }
+       if((nLepton == 2) && (nPion == 2)){
+               fHistNeventsPsi2s->Fill(6);
+               if(qLepton[0]*qLepton[1] > 0) fHistNeventsPsi2s->Fill(7);
+               if(qPion[0]*qPion[1] > 0) fHistNeventsPsi2s->Fill(8);
+               if((qLepton[0]*qLepton[1] > 0) && (qPion[0]*qPion[1] > 0)) fHistNeventsPsi2s->Fill(9);
+               if((qLepton[0]*qLepton[1] < 0) && (qPion[0]*qPion[1] < 0)){
+                       fHistNeventsPsi2s->Fill(10);
+                       if(mass[0] == mass[1]) {
+                               fHistNeventsPsi2s->Fill(11); 
+                               vCandidate = vLepton[0]+vLepton[1]+vPion[0]+vPion[1];
+                               vDilepton = vLepton[0]+vLepton[1];
+                               fHistPsi2sMassVsPt->Fill(vCandidate.M(),vCandidate.Pt());
+                               if(vCandidate.Pt() < 0.15) fHistPsi2sMassCoherent->Fill(vCandidate.M());
+                               if(mass[0] == 0) fHistNeventsPsi2s->Fill(12);   
+                               if(mass[0] == 1) fHistNeventsPsi2s->Fill(13);
+                               }
+                       }
+               }
+  }
+  
+  PostData(4, fListHist);
+
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskUpcPsi2s::RunESDtree()
 {
 
   //input event
@@ -611,22 +790,10 @@ void AliAnalysisTaskUpcPsi2s::RunESD()
   fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
   fRunNum = esd->GetRunNumber();
 
-  hCounter->Fill( 1 );
-
   //Trigger
   TString trigger = esd->GetFiredTriggerClasses();
   
-  fTrigger[0]   = trigger.Contains("CINT7-B");
-  fTrigger[1]   = trigger.Contains("CCUP4-B"); // CE 
-  fTrigger[2]   = trigger.Contains("CCUP4-E"); // CE 
-
-  Bool_t isTRG = kFALSE;
-  for(Int_t i=1; i<ntrg; i++) {
-    if( fTrigger[i] ) {isTRG = kTRUE; hCounter->Fill( fRunNum - 167806 + 1 + i*2000 );}
-  }
-  if( !isTRG ) {PostData(3, hCounter); return;}
-
-  hCounter->Fill( 2 );
+  if( !trigger.Contains("CCUP4-B") ) return;
 
   //trigger inputs
   fL0inputs = esd->GetHeader()->GetL0TriggerInputs();
@@ -702,8 +869,6 @@ void AliAnalysisTaskUpcPsi2s::RunESD()
   fPsi2sTree ->Fill();
   PostData(2, fPsi2sTree);
   }
-    
-  PostData(3, hCounter);
 
 }//RunESD