]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/AliAnalysisTaskJetCorePP.cxx
Trigger Associated with tracks 15<pT<100
[u/mrichter/AliRoot.git] / PWGJE / AliAnalysisTaskJetCorePP.cxx
index c57c389c4febe3e594729518496b4d9bf54268e2..bddf9df93c3c57d6b971e306187f1f11a4c1bd57 100644 (file)
@@ -61,7 +61,9 @@
 #include "AliAODHandler.h"
 #include "AliAODJet.h"
 #include "AliVVertex.h"
+#include "AliVTrack.h"
 #include "AliAnalysisTaskJetCorePP.h"
+#include "AliHeader.h" //KF//
 
 using std::cout;
 using std::endl;
@@ -136,6 +138,9 @@ fhDphiTriggerJet(0x0),
 fhDphiTriggerJetAccept(0x0),
 fhCentrality(0x0),
 fhCentralityAccept(0x0),
+fhNofMultipleTriggers(0x0),
+fhNofMultipleTriggersCone(0x0),
+fhDeltaRMultTriggers(0x0),
 //fHJetPtRaw(0x0),
 //fHLeadingJetPtRaw(0x0), 
 //fHDphiVsJetPtAll(0x0), 
@@ -164,6 +169,11 @@ fhEntriesToMedian(0x0),
 fhEntriesToMedianGen(0x0),
 fhCellAreaToMedian(0x0),
 fhCellAreaToMedianGen(0x0),
+fhNofMultipleTriggersGen(0x0),
+fhNofMultipleTriggersConeGen(0x0),
+fhDeltaRMultTriggersGen(0x0),
+fhNofMultipleTriggersConeGenA(0x0),
+fhNofMultipleTriggersConeGenB(0x0),
 fIsChargedMC(0),
 fIsKine(0),
 fIsFullMC(0),
@@ -265,6 +275,9 @@ fhDphiTriggerJet(0x0),
 fhDphiTriggerJetAccept(0x0),
 fhCentrality(0x0),
 fhCentralityAccept(0x0),
+fhNofMultipleTriggers(0x0),
+fhNofMultipleTriggersCone(0x0),
+fhDeltaRMultTriggers(0x0),
 //fHJetPtRaw(0x0),
 //fHLeadingJetPtRaw(0x0), 
 //fHDphiVsJetPtAll(0x0), 
@@ -293,6 +306,11 @@ fhEntriesToMedian(0x0),
 fhEntriesToMedianGen(0x0),
 fhCellAreaToMedian(0x0),
 fhCellAreaToMedianGen(0x0),
+fhNofMultipleTriggersGen(0x0),
+fhNofMultipleTriggersConeGen(0x0),
+fhDeltaRMultTriggersGen(0x0),
+fhNofMultipleTriggersConeGenA(0x0),
+fhNofMultipleTriggersConeGenB(0x0),
 fIsChargedMC(0),
 fIsKine(0),
 fIsFullMC(0),
@@ -400,6 +418,9 @@ fhDphiTriggerJet(a.fhDphiTriggerJet),
 fhDphiTriggerJetAccept(a.fhDphiTriggerJetAccept),
 fhCentrality(a.fhCentrality),
 fhCentralityAccept(a.fhCentralityAccept),
+fhNofMultipleTriggers(a.fhNofMultipleTriggers),
+fhNofMultipleTriggersCone(a.fhNofMultipleTriggersCone),
+fhDeltaRMultTriggers(a.fhDeltaRMultTriggers),
 //fHJetPtRaw(a.fHJetPtRaw),
 //fHLeadingJetPtRaw(a.fHLeadingJetPtRaw),
 //fHDphiVsJetPtAll(a.fHDphiVsJetPtAll),
@@ -428,6 +449,11 @@ fhEntriesToMedian(a.fhEntriesToMedian),
 fhEntriesToMedianGen(a.fhEntriesToMedianGen),
 fhCellAreaToMedian(a.fhCellAreaToMedian),
 fhCellAreaToMedianGen(a.fhCellAreaToMedianGen),
+fhNofMultipleTriggersGen(a.fhNofMultipleTriggersGen),
+fhNofMultipleTriggersConeGen(a.fhNofMultipleTriggersConeGen),
+fhDeltaRMultTriggersGen(a.fhDeltaRMultTriggersGen),
+fhNofMultipleTriggersConeGenA(a.fhNofMultipleTriggersConeGenA),
+fhNofMultipleTriggersConeGenB(a.fhNofMultipleTriggersConeGenB),
 fIsChargedMC(a.fIsChargedMC),
 fIsKine(a.fIsKine),
 fIsFullMC(a.fIsFullMC),
@@ -710,6 +736,10 @@ void AliAnalysisTaskJetCorePP::UserCreateOutputObjects()
    fhEntriesToMedian = new TH1D("fhEntriesToMedian","fhEntriesToMedian",30,0,30);
    fhCellAreaToMedian =  new TH1D("fhCellAreaToMedian", "fhCellAreaToMedian", 75,0,1.5);
 
+   fhNofMultipleTriggers = new TH1D("fhNofMultipleTriggers","fhNofMultipleTriggers",100,0,100);
+   fhNofMultipleTriggersCone = new TH1D("fhNofMultipleTriggersCone","fhNofMultipleTriggersCone R<0.4",100,0,100);
+   fhDeltaRMultTriggers = new  TH1D("fhDeltaRMultTriggers","fhDeltaRMultTriggers", 100,0,4);  
+
    if(!fIsKine){
       fOutputList->Add(fhJetPhi);
       fOutputList->Add(fhTriggerPhi);
@@ -727,6 +757,9 @@ void AliAnalysisTaskJetCorePP::UserCreateOutputObjects()
       fOutputList->Add(fhCentralityAccept);
       fOutputList->Add(fhEntriesToMedian);
       fOutputList->Add(fhCellAreaToMedian);
+      fOutputList->Add(fhNofMultipleTriggers);
+      fOutputList->Add(fhNofMultipleTriggersCone);
+      fOutputList->Add(fhDeltaRMultTriggers);
    }
    // raw spectra of INCLUSIVE jets  
    //Centrality, pTjet, A
@@ -854,6 +887,22 @@ void AliAnalysisTaskJetCorePP::UserCreateOutputObjects()
       fhCellAreaToMedianGen  = (TH1D*) fhCellAreaToMedian->Clone("fhCellAreaToMedianGen");
       fhCellAreaToMedianGen->SetTitle(Form("%s Gen MC", fhCellAreaToMedian->GetTitle())); 
       fOutputList->Add(fhCellAreaToMedianGen);
+
+      fhNofMultipleTriggersGen = (TH1D*) fhNofMultipleTriggers->Clone("fhNofMultipleTriggersGen"); 
+      fOutputList->Add(fhNofMultipleTriggersGen);
+
+      fhNofMultipleTriggersConeGen = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConeGen"); 
+      fOutputList->Add(fhNofMultipleTriggersConeGen);
+
+      fhDeltaRMultTriggersGen  = (TH1D*) fhDeltaRMultTriggers->Clone("fhDeltaRMultTriggersGen");
+      fOutputList->Add(fhDeltaRMultTriggersGen);
+
+      fhNofMultipleTriggersConeGenA = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen10"); 
+      fOutputList->Add(fhNofMultipleTriggersConeGenA);
+
+      fhNofMultipleTriggersConeGenB = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen5"); 
+      fOutputList->Add(fhNofMultipleTriggersConeGenB);
+
    }
    //-------------------------------------
    //     pythia histograms
@@ -907,20 +956,6 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
 {
    //User Exec
    
-   if(fIsKine){ //Fill Xsection and number of trials
-      Float_t xsection = 0;
-      Float_t trials  = 0;
-      AliMCEvent *mcEvent = MCEvent();
-      AliGenPythiaEventHeader *genPH = dynamic_cast<AliGenPythiaEventHeader*>(mcEvent->GenEventHeader());
-      if(genPH){
-         xsection = genPH->GetXsection();
-         trials  = genPH->Trials();
-      }
-      fh1Xsec->Fill("<#sigma>",xsection);
-      fh1Trials->Fill("#sum{ntrials}",trials);
-   }//KF//
-
 
    //Event loop
    Double_t eventW  = 1.0;
@@ -966,8 +1001,25 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
          PostData(1, fOutputList);
          return;
       }
+      Float_t xsection = 0;
+      Float_t trials  = 0;
+
+      AliGenPythiaEventHeader *genPH =
+         dynamic_cast<AliGenPythiaEventHeader*> (fMcEvent->GenEventHeader()); 
+      if(genPH){
+         xsection = genPH->GetXsection();
+         trials   = genPH->Trials();
+         ptHard   = genPH->GetPtHard();
+      }
+      fh1Xsec->Fill("<#sigma>",xsection);
+      fh1Trials->Fill("#sum{ntrials}",trials);
+      fh1PtHard->Fill(ptHard,eventW);
+      fh1PtHardNoW->Fill(ptHard,1);
+      fh1PtHardTrials->Fill(ptHard,trials);
    }
 
+
    fESD = dynamic_cast<AliESDEvent*>(InputEvent());
    if(!fESD){
       if(fDebug>1) AliError("ESD not available");
@@ -1074,7 +1126,8 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
          cent = fESD->GetCentrality();
          if(cent) centValue = cent->GetCentralityPercentile("V0M");
       }else{
-         centValue = aod->GetHeader()->GetCentrality();
+         //centValue = aod->GetHeader()->GetCentrality();
+         centValue = ((AliVAODHeader*)aod->GetHeader())->GetCentrality();
       }   
       if(fDebug) printf("centrality: %f\n", centValue);
       //Input events
@@ -1092,13 +1145,17 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
  
    //-----------------select disjunct event subsamples ----------------
    if(!fIsKine){ //reconstructed data
-      Int_t eventnum  = aod->GetHeader()->GetEventNumberESDFile();
+      //Int_t eventnum  = aod->GetHeader()->GetEventNumberESDFile();
+      AliAODHeader * header = dynamic_cast<AliAODHeader*>(aod->GetHeader());
+      if(!header) AliFatal("Not a standard AOD");
+
+      Int_t eventnum  = header->GetEventNumberESDFile();
       Int_t lastdigit = eventnum % 10;
       if(!(fEventNumberRangeLow<=lastdigit && lastdigit<=fEventNumberRangeHigh)){
          fHistEvtSelection->Fill(5);
          PostData(1, fOutputList);
          return;
-      } 
+       
    }  
 
    if(fDebug) std::cout<<" ACCEPTED EVENT "<<endl;
@@ -1130,7 +1187,6 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
    //==============  analyze generator level MC  ================ 
    TList particleListGen; //list of tracks in MC
 
-
    if(fIsChargedMC || fIsKine){
 
       if(fIsKine){  //pure kine
@@ -1155,6 +1211,11 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
       Int_t    iCounterGen   =  0; //number of entries in particleListGen array
       Int_t    triggersMC[200];//list of trigger candidates
       Int_t    ntriggersMC   = 0; //index in triggers array
+      Int_t    triggersMCa[200];   //list of trigger candidates  10%eloss
+      Int_t    ntriggersMCa   = 0; //index in triggers array   10%eloss
+      Int_t    triggersMCb[200];   //list of trigger candidates  5%eloss
+      Int_t    ntriggersMCb   = 0; //index in triggers array     5%eloss
+
 
       if(!fIsKine){  
          if(fESD){//ESD input
@@ -1236,7 +1297,91 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
             }
          }
       }
-  
+      if(fHardest==0){
+         Int_t npar = particleListGen.GetEntries();
+         for(Int_t ip=0; ip < npar; ip++){
+            AliVParticle *part = (AliVParticle*) particleListGen.At(ip);
+            if(!part) continue;
+            
+            Double_t pta = 0.9 * part->Pt(); //10% energy loss 
+            Double_t ptb = 0.95 * part->Pt(); //5% energy loss  
+            if(fTriggerPtRangeLow <= pta && pta < fTriggerPtRangeHigh  &&  ntriggersMCa<200){
+               triggersMCa[ntriggersMCa] = ip;
+               ntriggersMCa++;
+            }
+
+            if(fTriggerPtRangeLow <= ptb && ptb < fTriggerPtRangeHigh  &&  ntriggersMCb<200){
+               triggersMCb[ntriggersMCb] = ip;
+               ntriggersMCb++;
+            }
+         }
+
+         if(ntriggersMCa>0){
+            Int_t rnda     = fRandom->Integer(ntriggersMCa); //0 to ntriggers-1
+            Int_t indexTriggGena = triggersMCa[rnda];
+
+            Double_t deltaPhia, deltaEtaa, deltaRa;
+            Int_t aa = 0; 
+
+            //Correlation with single inclusive  TRIGGER
+            AliVParticle* tGenTa = (AliVParticle*) particleListGen.At(indexTriggGena);  
+            if(tGenTa){
+               //for(Int_t ia=0; ia<ntriggersMCa; ia++)
+               for(Int_t ia=0; ia< npar; ia++){
+                  //if(indexTriggGena == triggersMCa[ia]) continue;
+                  if(indexTriggGena == ia) continue;
+               
+                  //AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(triggersMCa[ia]);  
+                  AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(ia);  
+                  if(!tGenTz) continue;
+                  if(tGenTz->Pt()*0.9<15.0) continue;
+                  if(tGenTz->Pt()*0.9>100.0) continue;
+               
+                  deltaPhia = RelativePhi(tGenTa->Phi(),tGenTz->Phi());
+                  deltaEtaa = tGenTa->Eta()-tGenTz->Eta(); 
+                  deltaRa = sqrt(deltaPhia*deltaPhia + deltaEtaa*deltaEtaa);
+                  
+                  if(deltaRa<0.4) aa++;
+               }
+            }
+            fhNofMultipleTriggersConeGenA->Fill(aa);
+         }
+
+         if(ntriggersMCb>0){
+            Int_t rndb     = fRandom->Integer(ntriggersMCb); //0 to ntriggers-1
+            Int_t indexTriggGenb = triggersMCb[rndb];
+
+            Double_t deltaPhib, deltaEtab, deltaRb;
+            Int_t bb = 0; 
+
+            //Correlation with single inclusive  TRIGGER
+            AliVParticle* tGenTb = (AliVParticle*) particleListGen.At(indexTriggGenb);  
+            if(tGenTb){
+               //for(Int_t ib=0; ib<ntriggersMCb; ib++)
+               for(Int_t ib=0; ib<npar; ib++){
+                  //if(indexTriggGenb == triggersMCb[ib]) continue;
+                  if(indexTriggGenb == ib) continue;
+               
+                  //AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(triggersMCb[ib]);  
+                  AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(ib);  
+                  if(!tGenTz) continue;
+                  if(tGenTz->Pt()*0.95<15.0) continue;
+                  if(tGenTz->Pt()*0.95>100.0) continue;
+               
+                  deltaPhib = RelativePhi(tGenTb->Phi(),tGenTz->Phi());
+                  deltaEtab = tGenTb->Eta()-tGenTz->Eta(); 
+                  deltaRb = sqrt(deltaPhib*deltaPhib + deltaEtab*deltaEtab);
+                  
+                  if(deltaRb<0.4) bb++;
+               }
+            }
+            fhNofMultipleTriggersConeGenB->Fill(bb);
+         }
+      }
+
+
       //==============  Estimate bg in generated events ==============
       Double_t rhoFromCellMedianGen=0.0, rhoConeGen=0.0;
 
@@ -1251,6 +1396,51 @@ void AliAnalysisTaskJetCorePP::UserExec(Option_t *)
          if(ntriggersMC>0){ //there is at least one trigger 
             Int_t rnd     = fRandom->Integer(ntriggersMC); //0 to ntriggers-1
             indexTriggGen = triggersMC[rnd];
+
+            fhNofMultipleTriggersGen->Fill(ntriggersMC-1);
+
+            Double_t deltaPhi, deltaEta, deltaR;
+            Int_t k = 0; 
+
+            //Correlation with single inclusive  TRIGGER
+            AliVParticle* tGenT1 = (AliVParticle*) particleListGen.At(indexTriggGen);  
+            if(tGenT1){
+               //for(Int_t ia=0; ia<ntriggersMC; ia++)
+               for(Int_t ia=0; ia< particleListGen.GetEntries(); ia++){
+                  //if(indexTriggGen == triggersMC[ia]) continue;
+                  if(indexTriggGen == ia) continue;
+               
+                  //AliVParticle* tGenT2 = (AliVParticle*) particleListGen.At(triggersMC[ia]);  
+                  AliVParticle* tGenT2 = (AliVParticle*) particleListGen.At(ia);  
+                  if(!tGenT2) continue;
+                  if(tGenT2->Pt()<15.0) continue; 
+                  if(tGenT2->Pt()>100.0) continue; 
+                  deltaPhi = RelativePhi(tGenT1->Phi(),tGenT2->Phi());
+                  deltaEta = tGenT1->Eta()-tGenT2->Eta(); 
+                  deltaR = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+                  
+                  if(deltaR<0.4) k++;
+               }
+            }
+            fhNofMultipleTriggersConeGen->Fill(k);
+
+            if(ntriggersMC>1){
+               //Correlation of each trigger with any other trigger
+               for(Int_t ia=0; ia<ntriggersMC-1; ia++){
+                  AliVParticle* tGenI = (AliVParticle*) particleListGen.At(triggersMC[ia]);  
+                  if(!tGenI) continue;
+                  for(Int_t ib=ia+1; ib<ntriggersMC; ib++){
+                     AliVParticle* tGenII = (AliVParticle*) particleListGen.At(triggersMC[ib]);  
+                     if(!tGenII) continue;
+                        
+                        deltaPhi = RelativePhi(tGenI->Phi(),tGenII->Phi());
+                        deltaEta = tGenI->Eta()-tGenII->Eta(); 
+                        deltaR = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+                        fhDeltaRMultTriggersGen->Fill(deltaR);
+                  }
+               }
+            } 
+
          }else{
             indexTriggGen = -1; //trigger not found
          }
@@ -1738,10 +1928,13 @@ Int_t  AliAnalysisTaskJetCorePP::GetListOfTracks(TList *list){
    Double_t ptmax = -10;
    Int_t    triggers[200];
    Int_t    ntriggers = 0; //index in triggers array
 
    for(Int_t it = 0; it < aodevt->GetNumberOfTracks(); it++){
-      AliAODTrack *tr = aodevt->GetTrack(it);
-      
+      //AliAODTrack *tr = aodevt->GetTrack(it);
+      AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aodevt->GetTrack(it));
+      if(!tr) AliFatal("Not a standard AOD");
+
       if((fFilterMask > 0) && !(tr->TestFilterBit(fFilterMask))) continue;
       //if((fFilterMask > 0) && !(tr->IsHybridGlobalConstrainedGlobal())) continue;
       if(TMath::Abs((Float_t) tr->Eta()) > fTrackEtaCut) continue;
@@ -1770,6 +1963,46 @@ Int_t  AliAnalysisTaskJetCorePP::GetListOfTracks(TList *list){
    if(fHardest==0 && ntriggers>0){ //select random inclusive trigger
       Int_t rnd = fRandom->Integer(ntriggers); //0 to ntriggers-1
       index     = triggers[rnd];
+
+      fhNofMultipleTriggers->Fill(ntriggers-1);
+     
+      Double_t deltaPhi, deltaEta, deltaR;
+      Int_t k=0;
+      //Correlation with single inclusive trigger
+      AliVParticle* tGent1 = (AliVParticle*) list->At(index);  
+      if(tGent1){
+         //for(Int_t ia=0; ia<ntriggers; ia++)
+         for(Int_t ia=0; ia<list->GetEntries(); ia++){
+            //if(triggers[ia]==index) continue;
+            if(ia==index) continue;
+            //AliVParticle* tGent2 = (AliVParticle*) list->At(triggers[ia]);  
+            AliVParticle* tGent2 = (AliVParticle*) list->At(ia);  
+            if(!tGent2) continue;
+            if(tGent2->Pt()<15.0) continue;
+            if(tGent2->Pt()>100.0) continue;
+            deltaPhi = RelativePhi(tGent1->Phi(),tGent2->Phi());
+            deltaEta = tGent1->Eta()-tGent2->Eta(); 
+            deltaR   = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+            if(deltaR<0.4) k++;
+         } 
+      }
+      fhNofMultipleTriggersCone->Fill(k);
+
+      if(ntriggers>1){
+         //Correlation with any other trigger
+         for(Int_t ia=0; ia<ntriggers-1; ia++){
+            AliVParticle* tGeni = (AliVParticle*) list->At(triggers[ia]);  
+            if(!tGeni) continue;
+            for(Int_t ib=ia+1; ib<ntriggers; ib++){
+               AliVParticle* tGenii = (AliVParticle*) list->At(triggers[ib]);  
+               if(!tGenii) continue;
+               deltaPhi = RelativePhi(tGeni->Phi(),tGenii->Phi());
+               deltaEta = tGeni->Eta()-tGenii->Eta(); 
+               deltaR   = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+               fhDeltaRMultTriggers->Fill(deltaR);
+            }
+         }
+      }
    }
 
    return index;