]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/AliAnalysisTaskJetCore.cxx
coverity fixes
[u/mrichter/AliRoot.git] / PWGJE / AliAnalysisTaskJetCore.cxx
index 648c10bc3eb104bcb8b401d92b402609ffb7e74d..4d39131ef0abdf00df6c6e47dec60f75ef4584af 100644 (file)
 
 #include "AliAnalysisTaskJetCore.h"
 
+using std::cout;
+using std::endl;
+
 ClassImp(AliAnalysisTaskJetCore)
 
 AliAnalysisTaskJetCore::AliAnalysisTaskJetCore() :
 AliAnalysisTaskSE(),
 fESD(0x0),
-fAOD(0x0),
+fAODIn(0x0),
+fAODOut(0x0),
 fAODExtension(0x0),
 fBackgroundBranch(""),
 fNonStdFile(""),
@@ -78,11 +82,18 @@ fNInputTracksMax(-1),
 fAngStructCloseTracks(0),
 fCheckMethods(0),
 fDoEventMixing(0), 
+fFlagPhiBkg(0),
+fFlagEtaBkg(0),
+fFlagJetHadron(0),
+fFlagRandom(0),
+fRPAngle(0),
+fNRPBins(3),
 fJetEtaMin(-.5),
 fJetEtaMax(.5),
-fNevents(0x0),
-fTindex(0x0),
-fTrigBufferIndex(0x0),
+fNevents(0),
+fTindex(0),
+fTrigBufferIndex(0),
+fCountAgain(0), 
 fJetPtMin(20.),
 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
 fJetPtFractionMin(0.5),
@@ -104,6 +115,9 @@ fh2JetCoreMethod1C30(0x0),
 fh2JetCoreMethod2C30(0x0),
 fh2JetCoreMethod1C60(0x0),
 fh2JetCoreMethod2C60(0x0),
+fh3JetTrackC3060(0x0),
+fh3JetTrackC20(0x0),
+fh3JetTrackC4080(0x0), 
 fh2AngStructpt1C10(0x0),
 fh2AngStructpt2C10(0x0),
 fh2AngStructpt3C10(0x0),
@@ -120,9 +134,14 @@ fh2AngStructpt1C60(0x0),
 fh2AngStructpt2C60(0x0),
 fh2AngStructpt3C60(0x0),
 fh2AngStructpt4C60(0x0),
-fh3spectriggered(0x0),
-fh3specbiased(0x0),
-fh3spectot(0x0)
+fh2Ntriggers(0x0),
+fh2Ntriggers2(0x0), 
+fh2JetDensity(0x0),
+fh2JetDensityA4(0x0),
+fh2RPJets(0x0),
+fh3spectriggeredC4080(0x0),
+fh3spectriggeredC20(0x0),
+fh3spectriggeredC3060(0x0)
 
  
 {
@@ -131,7 +150,7 @@ fh3spectot(0x0)
 
  // Trigger buffer.
    for(Int_t i=0; i<10; i++) {
-               for(Int_t j=0; j<7; j++) {
+               for(Int_t j=0; j<6; j++) {
                        fTrigBuffer[i][j]=0;
                }                               
        }       
@@ -150,7 +169,8 @@ fh3spectot(0x0)
 AliAnalysisTaskJetCore::AliAnalysisTaskJetCore(const char *name) :
 AliAnalysisTaskSE(name),
 fESD(0x0),
-fAOD(0x0),
+fAODIn(0x0),
+fAODOut(0x0),
 fAODExtension(0x0),
 fBackgroundBranch(""),
 fNonStdFile(""),
@@ -171,11 +191,18 @@ fNInputTracksMax(-1),
 fAngStructCloseTracks(0),
 fCheckMethods(0),
 fDoEventMixing(0),
+fFlagPhiBkg(0),
+fFlagEtaBkg(0),
+fFlagJetHadron(0),
+fFlagRandom(0),
+fRPAngle(0),
+fNRPBins(3),
 fJetEtaMin(-.5),
 fJetEtaMax(.5),
-fNevents(0x0),
-fTindex(0x0),
-fTrigBufferIndex(0x0),
+fNevents(0),
+fTindex(0),
+fTrigBufferIndex(0),
+fCountAgain(0),
 fJetPtMin(20.),
 fJetTriggerExcludeMask(AliAODJet::kHighTrackPtTriggered),
 fJetPtFractionMin(0.5),
@@ -197,6 +224,9 @@ fh2JetCoreMethod1C30(0x0),
 fh2JetCoreMethod2C30(0x0),
 fh2JetCoreMethod1C60(0x0),
 fh2JetCoreMethod2C60(0x0),
+fh3JetTrackC3060(0x0),
+fh3JetTrackC20(0x0),
+fh3JetTrackC4080(0x0), 
 fh2AngStructpt1C10(0x0),
 fh2AngStructpt2C10(0x0),
 fh2AngStructpt3C10(0x0),
@@ -213,16 +243,21 @@ fh2AngStructpt1C60(0x0),
 fh2AngStructpt2C60(0x0),
 fh2AngStructpt3C60(0x0),
 fh2AngStructpt4C60(0x0),    
-fh3spectriggered(0x0),
-fh3specbiased(0x0),
-fh3spectot(0x0)
+fh2Ntriggers(0x0),
+fh2Ntriggers2(0x0),
+fh2JetDensity(0x0),
+fh2JetDensityA4(0x0),
+fh2RPJets(0x0),
+fh3spectriggeredC4080(0x0),
+fh3spectriggeredC20(0x0),
+fh3spectriggeredC3060(0x0)
 
  {
    // Constructor
 
 
     for(Int_t i=0; i<10; i++) {
-       for(Int_t j=0; j<7; j++) {
+       for(Int_t j=0; j<6; j++) {
            fTrigBuffer[i][j]=0;
                }                               
     }  
@@ -283,15 +318,42 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
      UInt_t entries = 0; // bit coded, see GetDimParams() below 
      entries = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 |1<<7; 
      fhnDeltaR = NewTHnSparseF("fhnDeltaR", entries);
-   
+
+     //change binning in pTtrack
+     Double_t *xPt3 = new Double_t[10];
+     xPt3[0] = 0.;
+     for(int i = 1; i<=9;i++){
+      if(xPt3[i-1]<2)xPt3[i] = xPt3[i-1] + 0.4; // 1 - 5
+      else if(xPt3[i-1]<11)xPt3[i] = xPt3[i-1] + 3; // 5 - 12
+      else xPt3[i] = xPt3[i-1] + 150.; // 18 
+     }
+    fhnDeltaR->SetBinEdges(2,xPt3);
+    delete [] xPt3;
+
+    //change binning in HTI
+     Double_t *xPt4 = new Double_t[14];
+     xPt4[0] = 0.;
+     for(int i = 1; i<=13;i++){
+      if(xPt4[i-1]<10)xPt4[i] = xPt4[i-1] + 1; // 1 - 10
+      else if(xPt4[i-1]<20)xPt4[i] = xPt4[i-1] + 5; // 10 - 12
+      else xPt4[i] = xPt4[i-1] + 30.; // 13
+     }
+    fhnDeltaR->SetBinEdges(6,xPt4);
+    delete [] xPt4;
+
     
+
+
+
+
+   
+     if(fDoEventMixing){    
      UInt_t cifras = 0; // bit coded, see GetDimParams() below 
-     cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6 |1<<7; 
-     fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);
+     cifras = 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<7; 
+     fhnMixedEvents = NewTHnSparseF("fhnMixedEvents", cifras);}
 
     if(fCheckMethods){
 
-
     fh2JetCoreMethod1C10 = new TH2F("JetCoreMethod1C10","",150, 0., 150.,100, 0., 1.5);
     fh2JetCoreMethod2C10 = new TH2F("JetCoreMethod2C10","",150, 0., 150.,100, 0., 1.5);
     fh2JetCoreMethod1C20 = new TH2F("JetCoreMethod1C20","",150, 0., 150.,100, 0., 1.5);
@@ -301,7 +363,9 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
     fh2JetCoreMethod1C60 = new TH2F("JetCoreMethod1C60","",150, 0., 150.,100, 0., 1.5);
     fh2JetCoreMethod2C60 = new TH2F("JetCoreMethod2C60","",150, 0., 150.,100, 0., 1.5);}
 
-   
+    fh3JetTrackC3060=new TH3F("JetTrackC3060","",50,0,50,150,0.,150.,34,0,3.4);
+    fh3JetTrackC20=new TH3F("JetTrackC20","",50,0,50,150,0.,150.,34,0,3.4);
+    fh3JetTrackC4080=new TH3F("JetTrackC4080","",50,0,50,150,0.,150.,34,0,3.4);
     if(fAngStructCloseTracks>0){
     fh2AngStructpt1C10 = new TH2F("Ang struct pt1 C10","",15,0.,1.5,150,0.,10.);
     fh2AngStructpt2C10 = new TH2F("Ang struct pt2 C10","",15,0.,1.5,150,0.,10.);
@@ -319,10 +383,21 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
     fh2AngStructpt2C60 = new TH2F("Ang struct pt2 C60","",15,0.,1.5,150,0.,10.);
     fh2AngStructpt3C60 = new TH2F("Ang struct pt3 C60","",15,0.,1.5,150,0.,10.);
     fh2AngStructpt4C60 = new TH2F("Ang struct pt4 C60","",15,0.,1.5,150,0.,10.); }
-    fh3spectriggered = new TH3F("Triggered spectrum","",10,0,100,50,0.,200,50,0.,50.);
-    fh3specbiased = new TH3F("Biased spectrum","",10,0,100,50,0.,200.,50,0.,50.);
-    fh3spectot = new TH3F("Total spectrum","",50,0.,200.,50,0.,50.,50,0.,50.);
 
+   
+
+    fh2Ntriggers=new TH2F("# of triggers","",10,0.,100.,50,0.,50.);
+    fh2Ntriggers2=new TH2F("# of triggers2","",100,0.,4000.,50,0.,50.);
+
+    fh2JetDensity=new TH2F("Jet density vs centrality A>0.4","",100,0.,4000.,100,0.,5.);
+    fh2JetDensityA4=new TH2F("Jet density vs multiplicity A>0.4","",100,0.,4000.,100,0.,5.);
+    fh2RPJets=new TH2F("RPJet","",3,0.,3.,150,0.,150.); 
+    fh3spectriggeredC4080 = new TH3F("Triggered spectrumC4080","",5,0.,1.,140,-80.,200.,50,0.,50.);
+    fh3spectriggeredC20 = new TH3F("Triggered spectrumC20","",5,0.,1.,140,-80.,200.,50,0.,50.);
+    fh3spectriggeredC3060 = new TH3F("Triggered spectrumC3060","",5,0.,1.,140,-80.,200.,50,0.,50.);
+
+    
+    
    fOutputList->Add(fHistEvtSelection);
 
    fOutputList->Add(fhnDeltaR);
@@ -342,7 +417,10 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
       fOutputList->Add(fh2JetCoreMethod1C60);
       fOutputList->Add(fh2JetCoreMethod2C60);}
       
-      
+      fOutputList->Add(fh3JetTrackC3060);
+      fOutputList->Add(fh3JetTrackC20);
+      fOutputList->Add(fh3JetTrackC4080); 
+            
      
 
 
@@ -363,10 +441,21 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
        fOutputList->Add(fh2AngStructpt2C60);
        fOutputList->Add(fh2AngStructpt3C60);
        fOutputList->Add(fh2AngStructpt4C60);}  
-       fOutputList->Add(fh3spectriggered);
-       fOutputList->Add(fh3specbiased);
-       fOutputList->Add(fh3spectot);
 
+
+
+
+       fOutputList->Add(fh2Ntriggers);
+        fOutputList->Add(fh2Ntriggers2);
+        fOutputList->Add(fh2JetDensity);
+        fOutputList->Add(fh2JetDensityA4);
+        fOutputList->Add(fh2RPJets);
+       fOutputList->Add(fh3spectriggeredC4080);
+       fOutputList->Add(fh3spectriggeredC20); 
+       fOutputList->Add(fh3spectriggeredC3060);   
+
+     
    // =========== Switch on Sumw2 for all histos ===========
    for (Int_t i=0; i<fOutputList->GetEntries(); ++i) {
       TH1 *h1 = dynamic_cast<TH1*>(fOutputList->At(i));
@@ -396,10 +485,17 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    fESD=dynamic_cast<AliESDEvent*>(InputEvent());
    if (!fESD) {
       AliError("ESD not available");
-      fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
-   } else {
-      fAOD = dynamic_cast<AliAODEvent*>(AODEvent());
-   }
+      fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
+   } 
+      fAODOut = dynamic_cast<AliAODEvent*>(AODEvent());
+
+       static AliAODEvent* aod = 0;
+       // take all other information from the aod we take the tracks from
+       if(!aod){
+       if(!fESD)aod = fAODIn;
+       else aod = fAODOut;}
+
+   
  
     if(fNonStdFile.Length()!=0){
     // case that we have an AOD extension we need can fetch the jets from the extended output
@@ -428,7 +524,20 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    }
 
    // vertex selection
-   AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
+   if(!aod){
+     if(fDebug) Printf("%s:%d No AOD",(char*)__FILE__,__LINE__);
+     fHistEvtSelection->Fill(3);
+      PostData(1, fOutputList);
+   }
+   AliAODVertex* primVtx = aod->GetPrimaryVertex();
+
+   if(!primVtx){
+     if(fDebug) Printf("%s:%d No primVtx",(char*)__FILE__,__LINE__);
+     fHistEvtSelection->Fill(3);
+     PostData(1, fOutputList);
+     return;
+   }
+
    Int_t nTracksPrim = primVtx->GetNContributors();
    if ((nTracksPrim < fMinContribVtx) ||
          (primVtx->GetZ() < fVtxZMin) ||
@@ -451,14 +560,17 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    // centrality selection
    AliCentrality *cent = 0x0;
    Double_t centValue = 0.; 
-   if(fESD) cent = fESD->GetCentrality();
-   if(cent) centValue = cent->GetCentralityPercentile("V0M");
+   if(fIsPbPb){
+   if(fESD) {cent = fESD->GetCentrality();
+     if(cent) centValue = cent->GetCentralityPercentile("V0M");}
+   else     centValue=aod->GetHeader()->GetCentrality();
+   
    if(fDebug) printf("centrality: %f\n", centValue);
-   if (centValue < fCentMin || centValue > fCentMax){
+      if (centValue < fCentMin || centValue > fCentMax){
       fHistEvtSelection->Fill(4);
       PostData(1, fOutputList);
       return;
-   }
+      }}
 
 
    fHistEvtSelection->Fill(0); 
@@ -467,28 +579,40 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
   
    // get background
    AliAODJetEventBackground* externalBackground = 0;
-   if(fAOD&&!externalBackground&&fBackgroundBranch.Length()){
-      externalBackground =  (AliAODJetEventBackground*)(fAOD->FindListObject(fBackgroundBranch.Data()));
+   if(fAODOut&&!externalBackground&&fBackgroundBranch.Length()){
+      externalBackground =  (AliAODJetEventBackground*)(fAODOut->FindListObject(fBackgroundBranch.Data()));
       if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
    }
    if(fAODExtension&&!externalBackground&&fBackgroundBranch.Length()){
      externalBackground =  (AliAODJetEventBackground*)(fAODExtension->GetAOD()->FindListObject(fBackgroundBranch.Data()));
       if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
    }
+
+    if(fAODIn&&!externalBackground&&fBackgroundBranch.Length()){
+      externalBackground =  (AliAODJetEventBackground*)(fAODIn->FindListObject(fBackgroundBranch.Data()));
+      if(!externalBackground)Printf("%s:%d Background branch not found %s",(char*)__FILE__,__LINE__,fBackgroundBranch.Data());;
+    }
    
    Float_t rho = 0;
-   if(externalBackground)rho = externalBackground->GetBackground(0);
 
+   if(fFlagRandom==0){
+     if(externalBackground)rho = externalBackground->GetBackground(0);}
+   if(fFlagRandom==1){
+      if(externalBackground)rho = externalBackground->GetBackground(2);}
 
    // fetch jets
    TClonesArray *aodJets[2];
    aodJets[0]=0;
-   if(fAOD&&!aodJets[0]){
-   aodJets[0] = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fJetBranchName[0].Data())); 
-   aodJets[1] = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fJetBranchName[1].Data()));  }
+   if(fAODOut&&!aodJets[0]){
+   aodJets[0] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[0].Data())); 
+   aodJets[1] = dynamic_cast<TClonesArray*>(fAODOut->FindListObject(fJetBranchName[1].Data()));  }
    if(fAODExtension && !aodJets[0]){ 
    aodJets[0] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[0].Data())); 
    aodJets[1] = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fJetBranchName[1].Data()));  }
+     if(fAODIn&&!aodJets[0]){
+   aodJets[0] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[0].Data())); 
+   aodJets[1] = dynamic_cast<TClonesArray*>(fAODIn->FindListObject(fJetBranchName[1].Data()));  } 
+
 
    //Double_t ptsub[aodJets[0]->GetEntriesFast()];
    //Int_t inord[aodJets[0]->GetEntriesFast()];
@@ -519,45 +643,77 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    Double_t etasmall=0;
    Double_t ptsmall=0;
    Double_t areasmall=0;
-   //Double_t distr=0.;
    Double_t phismall=0.;
          
   
-   // Double_t up1[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t up2[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t up3[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t up4[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t down1[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t down2[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t down3[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
-   // Double_t down4[15]={0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
+
    Int_t iCount=0; 
    Int_t trigJet=-1;
    Int_t trigBBTrack=-1;
    Int_t trigInTrack=-1;
-     
+   fRPAngle = aod->GetHeader()->GetEventplane();     
+
+  
+   AliVParticle *partback = (AliVParticle*)ParticleList.At(nT);     
+   if(!partback){  
+   PostData(1, fOutputList);
+   return;}
+   fh2Ntriggers->Fill(centValue,partback->Pt());
+   fh2Ntriggers2->Fill(ParticleList.GetEntries(),partback->Pt());
+
+   Double_t accep=2.*TMath::Pi()*1.8;
+   Int_t injet4=0;
+   Int_t injet=0; 
    for(Int_t i=0; i<fListJets[0]->GetEntries(); ++i){
            AliAODJet* jetbig = (AliAODJet*)(fListJets[0]->At(i));
            etabig  = jetbig->Eta();
            phibig  = jetbig->Phi();
            ptbig   = jetbig->Pt();
            if(ptbig==0) continue; 
+           Int_t phiBin = GetPhiBin(phibig-fRPAngle);       
            areabig = jetbig->EffectiveAreaCharged();
            Double_t ptcorr=ptbig-rho*areabig;
-           if(ptcorr<=0) continue;
           if((etabig<fJetEtaMin)||(etabig>fJetEtaMax)) continue;
+           if(areabig>=0.2) injet=injet+1;
+           if(areabig>=0.4) injet4=injet4+1;   
+           Double_t dphi=RelativePhi(partback->Phi(),phibig); 
+
+           if(fFlagEtaBkg!=0){
+          Double_t etadif= partback->Eta()-etabig;
+           if(TMath::Abs(etadif)<=0.5){             
+           if(centValue>40. && centValue<80.) fh3JetTrackC4080->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
+           if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
+           if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}}
+           if(fFlagEtaBkg==0){
+           if(centValue>40. && centValue<80.) fh3JetTrackC4080->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
+           if(centValue<20.) fh3JetTrackC20->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));
+           if(centValue>30. && centValue<60.) fh3JetTrackC3060->Fill(partback->Pt(),ptcorr,TMath::Abs(dphi));}
+
+
+
+           if(fFlagJetHadron==0){
+           if(fFlagPhiBkg!=0) if((TMath::Abs(dphi)<TMath::Pi()/2.-0.1)||(TMath::Abs(dphi)>TMath::Pi()/2.+0.1)) continue;
+           if(fFlagPhiBkg==0) if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;}
+           if(fFlagJetHadron!=0) if(TMath::Abs(dphi)>0.4) continue;
+
+
+                   if(centValue<20.) fh2RPJets->Fill(phiBin, ptcorr);
                    Double_t dismin=100.;
                    Double_t ptmax=-10.; 
                    Int_t index1=-1;
                    Int_t index2=-1;
-                  
-               Int_t point=GetHardestTrackBackToJet(jetbig);    
-              AliVParticle *partback = (AliVParticle*)ParticleList.At(point);                            
-               if(!partback) continue; 
-                  fh3spectriggered->Fill(centValue,ptcorr,partback->Pt());
-                       AliAODTrack* leadtrack; 
+           if(centValue>40. && centValue<80.)  fh3spectriggeredC4080->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
+           if(centValue<20.)  fh3spectriggeredC20->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
+           if(centValue>30. && centValue<60.)  fh3spectriggeredC3060->Fill(jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt());
+
+                   if(ptcorr<=0) continue;
+
+                  
+                       AliAODTrack* leadtrack=0; 
                        Int_t ippt=0;
-                       Double_t ppt=-10;   
+                       Double_t ppt=-10;
+                       if(fFlagJetHadron==0){   
                       TRefArray *genTrackList = jetbig->GetRefTracks();
                        Int_t nTracksGenJet = genTrackList->GetEntriesFast();
                        AliAODTrack* genTrack;
@@ -565,18 +721,28 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
                        genTrack = (AliAODTrack*)(genTrackList->At(ir));
                       if(genTrack->Pt()>ppt){ppt=genTrack->Pt();
                       ippt=ir;}}
-                        leadtrack=(AliAODTrack*)(genTrackList->At(ippt));
-                        if(!leadtrack) continue;
-                        fh3specbiased->Fill(centValue,ptcorr,leadtrack->Pt());
-                        if(centValue<10)fh3spectot->Fill(ptcorr,leadtrack->Pt(),partback->Pt());
+                       leadtrack=(AliAODTrack*)(genTrackList->At(ippt));
+                       if(!leadtrack) continue;}
+
+                      AliVParticle* leadtrackb=0;
+                       if(fFlagJetHadron!=0){
+                        Int_t nTb = GetHardestTrackBackToJet(jetbig);
+                         leadtrackb = (AliVParticle*)ParticleList.At(nTb);
+                         if(!leadtrackb) continue;  
+                      }
+
+
+
+
+                       
                        //store one trigger info                   
-                        if((partback->Pt()>10.)&&(iCount==0)){                        
+                        if(iCount==0){                        
                          trigJet=i;
-                          trigBBTrack=point;
+                          trigBBTrack=nT;
                           trigInTrack=ippt;
                           iCount=iCount+1;} 
 
-
+   
                  if(fCheckMethods){
                   for(Int_t j=0; j<fListJets[1]->GetEntries(); ++j){
                   AliAODJet* jetsmall = (AliAODJet*)(fListJets[1]->At(j));
@@ -604,71 +770,89 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
                   if((centValue>20)&&(centValue<40)) fh2JetCoreMethod2C20->Fill(ptcorr,jetmethod2->Pt()/ptbig); 
                  if((centValue>30)&&(centValue<60)) fh2JetCoreMethod2C30->Fill(ptcorr,jetmethod2->Pt()/ptbig);
                  if(centValue>60) fh2JetCoreMethod2C60->Fill(ptcorr,jetmethod2->Pt()/ptbig); }}  
-
-          for(int it = 0;it<nT;++it){
+       
+                  
+         if(fDoEventMixing==0){
+        for(int it = 0;it<ParticleList.GetEntries();++it){
          AliVParticle *part = (AliVParticle*)ParticleList.At(it);
                  Double_t deltaR = jetbig->DeltaR(part);
           Double_t deltaEta = etabig-part->Eta();
+         
           Double_t deltaPhi=phibig-part->Phi();
           if(deltaPhi<-0.5*TMath::Pi()) deltaPhi+=2.*TMath::Pi();
           if(deltaPhi>3./2.*TMath::Pi()) deltaPhi-=2.*TMath::Pi();
-                 Double_t jetEntries[8] = {centValue,ptcorr,part->Pt(),deltaR,deltaEta,deltaPhi,leadtrack->Pt(),partback->Pt()};                     fhnDeltaR->Fill(jetEntries);
-          }
-          //end of track loop
-          }
+         Double_t pTcont=0;
+          if(fFlagJetHadron==0) pTcont=leadtrack->Pt();
+          if(fFlagJetHadron!=0) pTcont=leadtrackb->Pt(); 
+          Double_t jetEntries[8] = {centValue,ptcorr,part->Pt(),deltaR,deltaEta,deltaPhi,pTcont,partback->Pt()};  
+           fhnDeltaR->Fill(jetEntries);}
+        
+        }
+          //end of track loop, we only do it if EM is switched off
+         
+
+
+
+
+       
+
+
+
+   }
+   if(injet>0) fh2JetDensity->Fill(ParticleList.GetEntries(),injet/accep);
+   if(injet4>0)fh2JetDensityA4->Fill(ParticleList.GetEntries(),injet4/accep);
           //end of jet loop
 
 
 
 
-          if(fDoEventMixing){
+          if(fDoEventMixing>0){
             //check before if the trigger exists
             // fTrigBuffer[i][0] = zvtx
             // fTrigBuffer[i][1] = phi
             // fTrigBuffer[i][2] = eta
             // fTrigBuffer[i][3] = pt_jet
             // fTrigBuffer[i][4] = pt_trig
-            // fTrigBuffer[i][5]= pt_track_in
-            // fTrigBuffer[i][6]= centrality
-           if(fTindex==11) fTindex=0;
+            // fTrigBuffer[i][5]= centrality
+            if(fTindex==10) fTindex=0;
             if(fTrigBuffer[fTindex][3]>0){
            if (TMath::Abs(fTrigBuffer[fTindex][0]-primVtx->GetZ()<2.)){
-           if (TMath::Abs(fTrigBuffer[fTindex][6]-centValue<10)){  
+           if (TMath::Abs(fTrigBuffer[fTindex][5]-centValue<5)){  
              
                         for(int it = 0;it<nT;++it){
-                       AliVParticle *part = (AliVParticle*)ParticleList.At(it);                        Double_t DPhi = fTrigBuffer[fTindex][1] - part->Phi();
+                       AliVParticle *part = (AliVParticle*)ParticleList.At(it);         
+                        Double_t DPhi = fTrigBuffer[fTindex][1] - part->Phi();
                         Double_t DEta = fTrigBuffer[fTindex][2] - part->Eta();
                         Double_t DR=TMath::Sqrt(DPhi*DPhi+DEta*DEta);
                         if(DPhi<-0.5*TMath::Pi()) DPhi+=2.*TMath::Pi();
                         if(DPhi>3./2.*TMath::Pi()) DPhi-=2.*TMath::Pi();
-                        Double_t triggerEntries[8] = {centValue,fTrigBuffer[fTindex][3],part->Pt(),DR,DEta,DPhi,fTrigBuffer[fTindex][4],fTrigBuffer[fTindex][5]};                      
+                        Double_t triggerEntries[7] = {centValue,fTrigBuffer[fTindex][3],part->Pt(),DR,DEta,DPhi,fTrigBuffer[fTindex][4]};                      
                         fhnMixedEvents->Fill(triggerEntries);
                         }
                         fNevents=fNevents+1;  
-                        if(fNevents==9) {fTindex=fTindex+1;
-                       fNevents=0;} 
+                        if(fNevents==10) fTindex=fTindex+1; 
            }}}
-        
+              if(fTindex==10&&fNevents==10) fCountAgain=0;
 
                // Copy the triggers from the current event into the buffer.
                //again, only if the trigger exists:
+              if(fCountAgain==0){
                if(trigJet>-1){
-                AliAODJet* jetT = (AliAODJet*)(fListJets[0]->At(trigJet));                 
-                AliVParticle *partL = (AliVParticle*)ParticleList.At(trigInTrack);
-                AliVParticle *partT = (AliVParticle*)ParticleList.At(trigBBTrack);         
+                AliAODJet* jetT = (AliAODJet*)(fListJets[0]->At(trigJet));                      AliVParticle *partT = (AliVParticle*)ParticleList.At(trigBBTrack);         
                 fTrigBuffer[fTrigBufferIndex][0] = primVtx->GetZ();
                 fTrigBuffer[fTrigBufferIndex][1] = jetT->Phi();
                 fTrigBuffer[fTrigBufferIndex][2] = jetT->Eta();
                 fTrigBuffer[fTrigBufferIndex][3] = jetT->Pt()-rho*jetT->EffectiveAreaCharged();
                 fTrigBuffer[fTrigBufferIndex][4] = partT->Pt();
-                fTrigBuffer[fTrigBufferIndex][5] = partL->Pt();
-                fTrigBuffer[fTrigBufferIndex][6] = centValue;
+                fTrigBuffer[fTrigBufferIndex][5] = centValue;
                 fTrigBufferIndex++;
-               if(fTrigBufferIndex==9) fTrigBufferIndex=0;
+                if(fTrigBufferIndex==9) {fTrigBufferIndex=0; 
+                                        fCountAgain=1;}
                }
-         }
+              }
          
-
+         }
 
 
 
@@ -781,53 +965,62 @@ void AliAnalysisTaskJetCore::Terminate(const Option_t *)
 
 
 
+  
 
 
+Int_t  AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
 
+     Int_t iCount = 0;
+     AliAODEvent *aod = 0;
 
 
 
 
+     if(!fESD)aod = fAODIn;
+     else aod = fAODOut;   
 
-Int_t  AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
+     if(!aod)return iCount;
 
-    Int_t iCount = 0;
-    
-    for(int it = 0;it < fAOD->GetNumberOfTracks();++it){
-      AliAODTrack *tr = fAOD->GetTrack(it);
+     Int_t index=-1;
+     Double_t ptmax=-10;
+    for(int it = 0;it < aod->GetNumberOfTracks();++it){
+      AliAODTrack *tr = aod->GetTrack(it);
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
       list->Add(tr);
-      //cout<<fAOD->GetNumberOfTracks()<<" "<<tr->Pt()<<endl;
       iCount++;
+      if(tr->Pt()>ptmax){ ptmax=tr->Pt();
+      index=iCount-1;}
+      
     }
   
    
-  return iCount;
+  return index;
  
 }
 
    Int_t  AliAnalysisTaskJetCore::GetHardestTrackBackToJet(AliAODJet *jetbig){
-
-   
+    AliAODEvent *aod = 0;
+    if(!fESD)aod = fAODIn;
+    else aod = fAODOut;     
     Int_t index=-1;
     Double_t ptmax=-10;
     Double_t dphi=0;
     Double_t dif=0;
     Int_t iCount=0;
-    for(int it = 0;it < fAOD->GetNumberOfTracks();++it){
-      AliAODTrack *tr = fAOD->GetTrack(it);
+    for(int it = 0;it < aod->GetNumberOfTracks();++it){
+      AliAODTrack *tr = aod->GetTrack(it);
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
       iCount=iCount+1;
       dphi=RelativePhi(tr->Phi(),jetbig->Phi());  
-      if(TMath::Abs(dphi)<TMath::Pi()-0.2) continue;
+      if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;
       if(tr->Pt()>ptmax){ ptmax=tr->Pt();
-       index=iCount;
-        dif=dphi;  }}
+      index=iCount-1;
+      dif=dphi;  }}
   
       return index;
 
@@ -844,10 +1037,12 @@ Int_t  AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
  Int_t  AliAnalysisTaskJetCore::GetListOfTracksCloseToJet(TList *list,AliAODJet *jetbig){
 
     Int_t iCount = 0;
+      AliAODEvent *aod = 0;
+     if(!fESD)aod = fAODIn;
+     else aod = fAODOut;   
   
-    for(int it = 0;it < fAOD->GetNumberOfTracks();++it){
-      AliAODTrack *tr = fAOD->GetTrack(it);
+      for(int it = 0;it < aod->GetNumberOfTracks();++it){
+      AliAODTrack *tr = aod->GetTrack(it);
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
@@ -877,7 +1072,9 @@ Int_t AliAnalysisTaskJetCore::GetNInputTracks()
 {
 
    Int_t nInputTracks = 0;
-
+     AliAODEvent *aod = 0;
+     if(!fESD)aod = fAODIn;
+     else aod = fAODOut;   
    TString jbname(fJetBranchName[1]);
    //needs complete event, use jets without background subtraction
    for(Int_t i=1; i<=3; ++i){
@@ -888,7 +1085,7 @@ Int_t AliAnalysisTaskJetCore::GetNInputTracks()
    if(jbname.Contains("AODextra")) jbname.ReplaceAll("AODextra","AOD");
 
    if(fDebug) Printf("Multiplicity from jet branch %s", jbname.Data());
-   TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(jbname.Data()));
+   TClonesArray *tmpAODjets = dynamic_cast<TClonesArray*>(aod->FindListObject(jbname.Data()));
    if(!tmpAODjets){
       Printf("Jet branch %s not found", jbname.Data());
       Printf("AliAnalysisTaskJetCore::GetNInputTracks FAILED");
@@ -922,6 +1119,17 @@ Double_t AliAnalysisTaskJetCore::RelativePhi(Double_t mphi,Double_t vphi){
   return dphi;//dphi in [-Pi, Pi]
 }
 
+Int_t AliAnalysisTaskJetCore::GetPhiBin(Double_t phi)
+{
+    Int_t phibin=-1;
+    if(!(TMath::Abs(phi)<=2*TMath::Pi())){AliError("phi w.r.t. RP out of defined range");return -1;}
+    Double_t phiwrtrp=TMath::ACos(TMath::Abs(TMath::Cos(phi)));
+    phibin=Int_t(fNRPBins*phiwrtrp/(0.5*TMath::Pi()));
+    if(phibin<0||phibin>=fNRPBins){AliError("Phi Bin not defined");}
+    return phibin;
+}
+
+
 
 
 THnSparse* AliAnalysisTaskJetCore::NewTHnSparseF(const char* name, UInt_t entries)
@@ -978,7 +1186,7 @@ void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &n
       
    case 1:
       label = "corrected jet pt";
-         nbins = 50;
+         nbins = 20;
          xmin = 0.;
          xmax = 200.;
           break;
@@ -987,9 +1195,9 @@ void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &n
    case 2:
       label = "track pT";
      
-         nbins = 1000;
+         nbins = 9;
          xmin = 0.;
-         xmax = 50;
+         xmax = 150;
          break;
       
       
@@ -1004,9 +1212,9 @@ void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &n
 
    case 4:
       label = "deltaEta";
-      nbins = 30;
-      xmin = -1.5;
-      xmax = 1.5;
+      nbins = 8;
+      xmin = -1.6;
+      xmax = 1.6;
       break;
 
 
@@ -1021,7 +1229,7 @@ void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &n
         
     case 6:
       label = "leading track";
-      nbins = 50;
+      nbins = 13;
       xmin = 0;
       xmax = 50;
       break;
@@ -1029,7 +1237,7 @@ void AliAnalysisTaskJetCore::GetDimParams(Int_t iEntry, TString &label, Int_t &n
      case 7:
     
       label = "trigger track";
-      nbins =50;
+      nbins =10;
       xmin = 0;
       xmax = 50;
       break;