]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/SPECTRA/AliAnalysisTaskSEITSsaSpectra.cxx
pid tuning
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskSEITSsaSpectra.cxx
index fc7d00c7fc2bb8b4fbec642e24153b76ad653774..d37428f1bfb486835ba8ea2396389e398c6df745 100644 (file)
@@ -90,6 +90,7 @@ AliAnalysisTaskSE("Task CFit"),
   fSmeardEdx(0.),
   fRandGener(0),
   fFillNtuple(kFALSE),
+  fLowEnergypp(kFALSE),
   fNtupleNSigma(0),
   fNtupleMC(0)
 {
@@ -250,7 +251,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
   fOutput->SetOwner();
   fOutput->SetName("Spiderman");
   
-  fHistNEvents = new TH1F("fHistNEvents", "Number of processed events",7,-0.5,6.5);
+  fHistNEvents = new TH1F("fHistNEvents", "Number of processed events",8,-1.5,6.5);
   fHistNEvents->Sumw2();
   fHistNEvents->SetMinimum(0);
   fOutput->Add(fHistNEvents);
@@ -395,7 +396,13 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
     fHistMCSecMatDCANegK[i]  = new TH1F(Form("fHistMCSecMatDCANegK%d",i),Form("fHistMCSecMatDCANegK%d",i),2000,-1,1);  
     fHistMCSecMatDCANegP[i]  = new TH1F(Form("fHistMCSecMatDCANegP%d",i),Form("fHistMCSecMatDCANegP%d",i),2000,-1,1);  
     
-    fHistMCPosPiHypPion[i] = new TH1F(Form("fHistMCPosPiHypPion%d",i),Form("fHistMCPosPiHypPion%d",i),175,-3.5,3.5);   //MC truth
+    fHistMCPosOtherHypPion[i] = new TH1F(Form("fHistMCPosOtherHypPion%d",i),Form("fHistMCPosOtherHypPion%d",i),175,-3.5,3.5);  //MC truth
+    fHistMCPosOtherHypKaon[i] = new TH1F(Form("fHistMCPosOtherHypKaon%d",i),Form("fHistMCPosOtherHypKaon%d",i),175,-3.5,3.5);
+    fHistMCPosOtherHypProton[i] = new TH1F(Form("fHistMCPosOtherHypProton%d",i),Form("fHistMCPosOtherHypProton%d",i),175,-3.5,3.5);
+    fHistMCPosElHypPion[i] = new TH1F(Form("fHistMCPosElHypPion%d",i),Form("fHistMCPosElHypPion%d",i),175,-3.5,3.5);   
+    fHistMCPosElHypKaon[i] = new TH1F(Form("fHistMCPosElHypKaon%d",i),Form("fHistMCPosElHypKaon%d",i),175,-3.5,3.5);
+    fHistMCPosElHypProton[i] = new TH1F(Form("fHistMCPosElHypProton%d",i),Form("fHistMCPosElHypProton%d",i),175,-3.5,3.5);
+    fHistMCPosPiHypPion[i] = new TH1F(Form("fHistMCPosPiHypPion%d",i),Form("fHistMCPosPiHypPion%d",i),175,-3.5,3.5);   
     fHistMCPosPiHypKaon[i] = new TH1F(Form("fHistMCPosPiHypKaon%d",i),Form("fHistMCPosPiHypKaon%d",i),175,-3.5,3.5);
     fHistMCPosPiHypProton[i] = new TH1F(Form("fHistMCPosPiHypProton%d",i),Form("fHistMCPosPiHypProton%d",i),175,-3.5,3.5);
     fHistMCPosKHypPion[i] = new TH1F(Form("fHistMCPosKHypPion%d",i),Form("fHistMCPosKHypPion%d",i),175,-3.5,3.5);      
@@ -405,7 +412,13 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
     fHistMCPosPHypKaon[i] = new TH1F(Form("fHistMCPosPHypKaon%d",i),Form("fHistMCPosPHypKaon%d",i),175,-3.5,3.5);
     fHistMCPosPHypProton[i]  = new TH1F(Form("fHistMCPosPHypProton%d",i),Form("fHistMCPosPHypProton%d",i),175,-3.5,3.5);       
     
-    fHistMCNegPiHypPion[i] = new TH1F(Form("fHistMCNegPiHypPion%d",i),Form("fHistMCNegPiHypPion%d",i),175,-3.5,3.5);   //MC truth
+    fHistMCNegOtherHypPion[i] = new TH1F(Form("fHistMCNegOtherHypPion%d",i),Form("fHistMCNegOtherHypPion%d",i),175,-3.5,3.5);  //MC truth
+    fHistMCNegOtherHypKaon[i] = new TH1F(Form("fHistMCNegOtherHypKaon%d",i),Form("fHistMCNegOtherHypKaon%d",i),175,-3.5,3.5);
+    fHistMCNegOtherHypProton[i] = new TH1F(Form("fHistMCNegOtherHypProton%d",i),Form("fHistMCNegOtherHypProton%d",i),175,-3.5,3.5);
+    fHistMCNegElHypPion[i] = new TH1F(Form("fHistMCNegElHypPion%d",i),Form("fHistMCNegElHypPion%d",i),175,-3.5,3.5);
+    fHistMCNegElHypKaon[i] = new TH1F(Form("fHistMCNegElHypKaon%d",i),Form("fHistMCNegElHypKaon%d",i),175,-3.5,3.5);
+    fHistMCNegElHypProton[i] = new TH1F(Form("fHistMCNegElHypProton%d",i),Form("fHistMCNegElHypProton%d",i),175,-3.5,3.5);
+    fHistMCNegPiHypPion[i] = new TH1F(Form("fHistMCNegPiHypPion%d",i),Form("fHistMCNegPiHypPion%d",i),175,-3.5,3.5);
     fHistMCNegPiHypKaon[i] = new TH1F(Form("fHistMCNegPiHypKaon%d",i),Form("fHistMCNegPiHypKaon%d",i),175,-3.5,3.5);
     fHistMCNegPiHypProton[i] = new TH1F(Form("fHistMCNegPiHypProton%d",i),Form("fHistMCNegPiHypProton%d",i),175,-3.5,3.5);
     fHistMCNegKHypPion[i] = new TH1F(Form("fHistMCNegKHypPion%d",i),Form("fHistMCNegKHypPion%d",i),175,-3.5,3.5);      
@@ -451,7 +464,13 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
     fOutput->Add(fHistMCSecMatDCANegK[i]);
     fOutput->Add(fHistMCSecMatDCANegP[i]);
 
-    fOutput->Add(fHistMCPosPiHypPion[i]);//MC truth
+    fOutput->Add(fHistMCPosOtherHypPion[i]);//MC truth
+    fOutput->Add(fHistMCPosOtherHypKaon[i]);
+    fOutput->Add(fHistMCPosOtherHypProton[i]);
+    fOutput->Add(fHistMCPosElHypPion[i]);
+    fOutput->Add(fHistMCPosElHypKaon[i]);
+    fOutput->Add(fHistMCPosElHypProton[i]);
+    fOutput->Add(fHistMCPosPiHypPion[i]);
     fOutput->Add(fHistMCPosPiHypKaon[i]);
     fOutput->Add(fHistMCPosPiHypProton[i]);
     fOutput->Add(fHistMCPosKHypPion[i]);
@@ -461,7 +480,13 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
     fOutput->Add(fHistMCPosPHypKaon[i]);
     fOutput->Add(fHistMCPosPHypProton[i]);
     
-    fOutput->Add(fHistMCNegPiHypPion[i]);//MC truth
+    fOutput->Add(fHistMCNegOtherHypPion[i]);//MC truth
+    fOutput->Add(fHistMCNegOtherHypKaon[i]);
+    fOutput->Add(fHistMCNegOtherHypProton[i]);
+    fOutput->Add(fHistMCNegElHypPion[i]);
+    fOutput->Add(fHistMCNegElHypKaon[i]);
+    fOutput->Add(fHistMCNegElHypProton[i]);
+    fOutput->Add(fHistMCNegPiHypPion[i]);
     fOutput->Add(fHistMCNegPiHypKaon[i]);
     fOutput->Add(fHistMCNegPiHypProton[i]);
     fOutput->Add(fHistMCNegKHypPion[i]);
@@ -512,7 +537,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
 
   }
   
-  fNtupleNSigma = new TNtuple("fNtupleNSigma","fNtupleNSigma","p:pt:dedx:ncls:sign:run:eta:impactXY:impactZ:isph:pdgcode:mfl:chi2ncls");
+  fNtupleNSigma = new TNtuple("fNtupleNSigma","fNtupleNSigma","p:pt:dedx:dedx3:dedx4:dedx5:dedx6:ncls:nclspid:sign:run:eta:impactXY:impactZ:isph:pdgcode:mfl:uniqueID:chi2ncls");
   fOutput->Add(fNtupleNSigma);
   fNtupleMC = new TNtuple("fNtupleMC","fNtupleMC","ptMC:pdgcode:signMC:etaMC:yMC:isph:evSel:run");
   fOutput->Add(fNtupleMC);
@@ -528,20 +553,13 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
   // Main loop
   // Called for each event
   
-  fESD=(AliESDEvent*)InputEvent();
-  if(!fESD) {
-    printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
-    return;
-  } 
-  fHistNEvents->Fill(0);
-  
   ///////////////////////////////////////
   //variables
   Float_t pdgmass[4]={0.13957,0.493677,0.938272,1.8756}; //mass for pi, K, P (Gev/c^2)
   Int_t listcode[3]={211,321,2212};//code for pi, K, P (Gev/c^2)
-  Double_t s[4];
+  Double_t dedxLay[4];
   Float_t ptMC=-999;
-  Int_t code=-999, signMC=-999,isph=-999,mfl=-999;
+  Int_t code=-999, signMC=-999,isph=-999,mfl=-999,uniqueID=-999;
   Float_t impactXY=-999, impactZ=-999;
   Int_t evSel=1;
   AliESDtrack* track;
@@ -551,6 +569,29 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
   TParticlePDG *pdgPart=0;
        
   /////////////////////
+
+  fESD=(AliESDEvent*)InputEvent();
+  if(!fESD) {
+    printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
+    return;
+  } 
+  fHistNEvents->Fill(-1);
+  
+  if(fLowEnergypp){ // remove events without SDD in pp 2.6 TeV
+    Bool_t hasSDD=kFALSE;
+    for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {  
+      track = (AliESDtrack*)fESD->GetTrack(iTrack);      
+      if (!track) continue;
+      UInt_t clumap = track->GetITSClusterMap();
+      if(clumap&4) hasSDD=kTRUE;
+      if(clumap&8) hasSDD=kTRUE;
+      if(hasSDD) break;
+    }
+    if(!hasSDD) return;
+  }
+  fHistNEvents->Fill(0);
+
+
   if(fMC){
     AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
     if (!eventHandler) {
@@ -568,11 +609,11 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
       return;
     }
   }
-  //flags for MC
   if(!fITSPIDResponse){
     fITSPIDResponse=new AliITSPIDResponse(fMC); 
   }
 
+  //flags for MC
   Int_t nTrackMC=0; 
   if(stack) nTrackMC = stack->GetNtrack();     
   const AliESDVertex *vtx =  fESD->GetPrimaryVertexSPD();
@@ -665,8 +706,10 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
       }
     }
   }
-/////first loop on stack, before event selection, filling MC ntuple
-       
+
+
+  /////first loop on stack, before event selection, filling MC ntuple
+  
   for(Int_t imc=0; imc<nTrackMC; imc++){
     part = stack->Particle(imc);
     isph=1;    
@@ -694,6 +737,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
       Float_t codemoth = TMath::Abs(moth->GetPdgCode());
       mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
     }
+    uniqueID = part->GetUniqueID();
     
     //filling MC ntuple
     if(TMath::Abs(code)==211 || TMath::Abs(code)==321 || TMath::Abs(code)==2212){
@@ -720,7 +764,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
          else  fHistPrimMCneg[jpart]->Fill(TMath::Abs(ptMC));
        }
       }else{
-       if(mfl==3){ // strangeness
+       if(mfl==3 && uniqueID == kPDecay){ // If a particle is not a physical primary, check if it comes from weak decay
          if(signMC>0) fHistSecStrMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
          else  fHistSecStrMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));            
          if(evSel==1){
@@ -748,6 +792,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     isph=-999;
     code=-999;
     mfl=-999;
+    uniqueID=-999;
     
     track = (AliESDtrack*)fESD->GetTrack(iTrack);      
     if (!track) continue;
@@ -814,9 +859,9 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
     countBinTrk++;  
     
-    Int_t count=0;
-    for(Int_t j=2;j<6;j++) if(TESTBIT(clumap,j)) count++;
-    if(count<fMinNdEdxSamples) continue; //at least 3 points on SSD/SDD
+    Int_t nPtsForPid=0;
+    for(Int_t j=2;j<6;j++) if(TESTBIT(clumap,j)) nPtsForPid++;
+    if(nPtsForPid<fMinNdEdxSamples) continue; //at least 3 points on SSD/SDD
     
     label="SDD+SSD cls";
     fHistNTracks->Fill(countBinTrk);
@@ -828,7 +873,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     countBinTrk++;  
     
     //chisquare/nclusters      
-    Int_t nclu=nSPD+count;
+    Int_t nclu=nSPD+nPtsForPid;
     if(track->GetITSchi2()/nclu > fMaxChi2Clu) continue; 
     
     label="chi2/ncls";
@@ -853,9 +898,8 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     countBinTrk++;  
     
     //truncated mean
-    //if(fMC) for(Int_t j=0;j<2;j++) s[j]*=3.34/5.43;//correction for SDD miscalibration of the MCpass4
-    track->GetITSdEdxSamples(s);
-    Double_t dedx = CookdEdx(s);
+    track->GetITSdEdxSamples(dedxLay);
+    Double_t dedx = CookdEdx(dedxLay);
     if(dedx<0) continue;
 
     label="de/dx<0";
@@ -894,6 +938,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
            Float_t codemoth = TMath::Abs(moth->GetPdgCode());
            mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
          }
+         uniqueID = part->GetUniqueID();
        }
        
        //Filling DCA distribution with MC truth
@@ -912,7 +957,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
          }
          
          if(isph==0){//primaries in MC
-           if(mfl==3){
+           if(mfl==3 && uniqueID == kPDecay){
              if(track->GetSign()>0){
                if(TMath::Abs(code)==listcode[0]) fHistMCSecStDCAPosPi[theBin]->Fill(impactXY);
                if(TMath::Abs(code)==listcode[1]) fHistMCSecStDCAPosK[theBin]->Fill(impactXY);
@@ -937,12 +982,17 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
        }
       }
     }
-  Float_t xnt[13];
+    Float_t xnt[19];
     Int_t index=0;
     xnt[index++]=(Float_t)track->GetP();
     xnt[index++]=(Float_t)track->Pt();
     xnt[index++]=(Float_t)dedx;
-    xnt[index++]=(Float_t)count;
+    xnt[index++]=(Float_t)dedxLay[0];
+    xnt[index++]=(Float_t)dedxLay[1];
+    xnt[index++]=(Float_t)dedxLay[2];
+    xnt[index++]=(Float_t)dedxLay[3];
+    xnt[index++]=(Float_t)nclu;
+    xnt[index++]=(Float_t)nPtsForPid;
     xnt[index++]=(Float_t)track->GetSign();
     xnt[index++]=(Float_t)fESD->GetRunNumber();
     xnt[index++]=(Float_t)track->Eta();
@@ -951,6 +1001,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     xnt[index++]=(Float_t)isph;
     xnt[index++]=(Float_t)code;
     xnt[index++]=(Float_t)mfl;
+    xnt[index++]=(Float_t)uniqueID;
     xnt[index]=(Float_t)track->GetITSchi2()/nclu;
          
     if(fFillNtuple) fNtupleNSigma->Fill(xnt);
@@ -977,7 +1028,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
       logdiff[i]=TMath::Log(dedx) - TMath::Log(bbtheo[i]);
     }
     
-    Int_t resocls=(Int_t)count-1;
+    Int_t resocls=(Int_t)nPtsForPid-1;
     
     //NSigma Method, with asymmetric bands
     Int_t minPosMean=-1;
@@ -1044,6 +1095,9 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
     fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
     fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
     countBinTrk++;  
+
+
+    Int_t jpart=-1;
     
     //Filling Histos for Reco Efficiency
     //information from the MC kinematics
@@ -1053,33 +1107,34 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
        part = (TParticle*)stack->Particle(track->GetLabel());
        pdgPart = part->GetPDG();
        code = pdgPart->PdgCode();
-       Int_t jpart=-1;
        for(Int_t j=0; j<3; j++){
          if(TMath::Abs(code)==listcode[j]){
            jpart=j;
            break;
          }
        }
-       if(jpart<0) continue;
-       if(pdgPart->Charge()>0) signMC=1;
-       else signMC=-1;
-       ptMC=part->Pt();
-       if(stack->IsPhysicalPrimary(track->GetLabel())){
-         if(signMC>0) fHistPrimMCposReco[jpart]->Fill(TMath::Abs(ptMC));
-         else  fHistPrimMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
-       }else{ 
-         Int_t indexMoth=part->GetFirstMother();
-         if(indexMoth>=0){
-           TParticle* moth = stack->Particle(indexMoth);
-           Float_t codemoth = TMath::Abs(moth->GetPdgCode());
-           mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
-         }
-         if(mfl==3){ // strangeness
-           if(signMC>0) fHistSecStrMCposReco[jpart]->Fill(TMath::Abs(ptMC));
-           else  fHistSecStrMCnegReco[jpart]->Fill(TMath::Abs(ptMC));      
-         }else{
-           if(signMC>0) fHistSecMatMCposReco[jpart]->Fill(TMath::Abs(ptMC));
-           else  fHistSecMatMCnegReco[jpart]->Fill(TMath::Abs(ptMC));      
+       if(jpart>=0){
+         if(pdgPart->Charge()>0) signMC=1;
+         else signMC=-1;
+         ptMC=part->Pt();
+         if(stack->IsPhysicalPrimary(track->GetLabel())){
+           if(signMC>0) fHistPrimMCposReco[jpart]->Fill(TMath::Abs(ptMC));
+           else  fHistPrimMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
+         }else{ 
+           Int_t indexMoth=part->GetFirstMother();
+           if(indexMoth>=0){
+             TParticle* moth = stack->Particle(indexMoth);
+             Float_t codemoth = TMath::Abs(moth->GetPdgCode());
+             mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
+           }
+           uniqueID = part->GetUniqueID();
+           if(mfl==3 && uniqueID == kPDecay){ // strangeness
+             if(signMC>0) fHistSecStrMCposReco[jpart]->Fill(TMath::Abs(ptMC));
+             else  fHistSecStrMCnegReco[jpart]->Fill(TMath::Abs(ptMC));            
+           }else{
+             if(signMC>0) fHistSecMatMCposReco[jpart]->Fill(TMath::Abs(ptMC));
+             else  fHistSecMatMCnegReco[jpart]->Fill(TMath::Abs(ptMC));            
+           }
          }
        }
       }
@@ -1126,7 +1181,7 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
        if(isph==1){
          if(track->GetSign()>0) fHistPosNSigmaPrim[minPos]->Fill(pt);
          else fHistNegNSigmaPrim[minPos]->Fill(pt);
-          //nsigma histos with MC truth on IsPhysicalPrimary and PID
+         //nsigma histos with MC truth on IsPhysicalPrimary and PID
          if(TMath::Abs(code)==listcode[minPos]){
            if(track->GetSign()>0) fHistPosNSigmaPrimMC[minPos]->Fill(pt);
            else fHistNegNSigmaPrimMC[minPos]->Fill(pt);
@@ -1144,19 +1199,25 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
        if(TMath::Abs(y[2]) < fMaxY)fHistPosP[theBin]->Fill(logdiff[2]);
        if(fMC){
          if(TMath::Abs(y[0])<fMaxY){
+           if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypPion[theBin]->Fill(logdiff[0]);
+           if(TMath::Abs(code)==11)fHistMCPosElHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==211)fHistMCPosPiHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==321)fHistMCPosKHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==2212)fHistMCPosPHypPion[theBin]->Fill(logdiff[0]);
          }
          if(TMath::Abs(y[1])<fMaxY){
+           if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypKaon[theBin]->Fill(logdiff[1]);
+           if(TMath::Abs(code)==11)fHistMCPosElHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==211)fHistMCPosPiHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==321)fHistMCPosKHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==2212)fHistMCPosPHypKaon[theBin]->Fill(logdiff[1]);
          }
          if(TMath::Abs(y[2])<fMaxY){
-           if(TMath::Abs(code)==211)fHistMCPosPiHypProton[theBin]->Fill(logdiff[2]);
-           if(TMath::Abs(code)==321)fHistMCPosKHypProton[theBin]->Fill(logdiff[2]);
-           if(TMath::Abs(code)==2212)fHistMCPosPHypProton[theBin]->Fill(logdiff[2]);
+             if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypProton[theBin]->Fill(logdiff[2]);
+             if(TMath::Abs(code)==11)fHistMCPosElHypProton[theBin]->Fill(logdiff[2]);
+             if(TMath::Abs(code)==211)fHistMCPosPiHypProton[theBin]->Fill(logdiff[2]);
+             if(TMath::Abs(code)==321)fHistMCPosKHypProton[theBin]->Fill(logdiff[2]);
+             if(TMath::Abs(code)==2212)fHistMCPosPHypProton[theBin]->Fill(logdiff[2]);
          }
        }
       }else{
@@ -1165,16 +1226,22 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
        if(TMath::Abs(y[2]) < fMaxY)fHistNegP[theBin]->Fill(logdiff[2]);
        if(fMC){
          if(TMath::Abs(y[0])<fMaxY){
+           if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypPion[theBin]->Fill(logdiff[0]);
+           if(TMath::Abs(code)==11)fHistMCNegElHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==211)fHistMCNegPiHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==321)fHistMCNegKHypPion[theBin]->Fill(logdiff[0]);
            if(TMath::Abs(code)==2212)fHistMCNegPHypPion[theBin]->Fill(logdiff[0]);
          }
          if(TMath::Abs(y[1])<fMaxY){
+           if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypKaon[theBin]->Fill(logdiff[1]);
+           if(TMath::Abs(code)==11)fHistMCNegElHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==211)fHistMCNegPiHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==321)fHistMCNegKHypKaon[theBin]->Fill(logdiff[1]);
            if(TMath::Abs(code)==2212)fHistMCNegPHypKaon[theBin]->Fill(logdiff[1]);
          }
          if(TMath::Abs(y[2])<fMaxY){
+           if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypProton[theBin]->Fill(logdiff[2]);
+           if(TMath::Abs(code)==11)fHistMCNegElHypProton[theBin]->Fill(logdiff[2]);
            if(TMath::Abs(code)==211)fHistMCNegPiHypProton[theBin]->Fill(logdiff[2]);
            if(TMath::Abs(code)==321)fHistMCNegKHypProton[theBin]->Fill(logdiff[2]);
            if(TMath::Abs(code)==2212)fHistMCNegPHypProton[theBin]->Fill(logdiff[2]);
@@ -1190,8 +1257,8 @@ void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
          
     //fill charge distribution histo to check the calibration
     for(Int_t j=0;j<4;j++){
-      if(s[j]<5) continue;
-      fHistCharge[j]->Fill(s[j]);
+      if(dedxLay[j]<5) continue;
+      fHistCharge[j]->Fill(dedxLay[j]);
     }
   }
                
@@ -1294,6 +1361,12 @@ void AliAnalysisTaskSEITSsaSpectra::Terminate(Option_t *) {
       fHistMCSecMatDCANegK[i]  = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegK%d",i)));
       fHistMCSecMatDCANegP[i]  = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegP%d",i)));  
       
+      fHistMCPosOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypPion%d",i)));
+      fHistMCPosOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypKaon%d",i)));
+      fHistMCPosOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypProton%d",i)));
+      fHistMCPosElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypPion%d",i)));
+      fHistMCPosElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypKaon%d",i)));
+      fHistMCPosElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypProton%d",i)));
       fHistMCPosPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypPion%d",i)));
       fHistMCPosPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypKaon%d",i)));
       fHistMCPosPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypProton%d",i)));
@@ -1304,6 +1377,12 @@ void AliAnalysisTaskSEITSsaSpectra::Terminate(Option_t *) {
       fHistMCPosPHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypKaon%d",i)));
       fHistMCPosPHypProton[i]  = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypProton%d",i)));
       
+      fHistMCNegOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypPion%d",i)));
+      fHistMCNegOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypKaon%d",i)));
+      fHistMCNegOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypProton%d",i)));
+      fHistMCNegElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypPion%d",i)));
+      fHistMCNegElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypKaon%d",i)));
+      fHistMCNegElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypProton%d",i)));
       fHistMCNegPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypPion%d",i)));
       fHistMCNegPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypKaon%d",i)));
       fHistMCNegPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypProton%d",i)));