]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/AliAnalysisTaskJetCore.cxx
Converting PWGCaloTrackCorrBase to native cmake
[u/mrichter/AliRoot.git] / PWGJE / AliAnalysisTaskJetCore.cxx
index 05b8623b28e771b6f23a061e2b30b1bcfcfb7d11..d3e846bb9c86ee64dda62e926001842c1b09073b 100644 (file)
@@ -1,4 +1,3 @@
-
 // ******************************************
 // This task computes several jet observables like 
 // the fraction of energy in inner and outer coronnas,
@@ -82,12 +81,15 @@ fCentMin(0.),
 fCentMax(100.),
 fNInputTracksMin(0),
 fNInputTracksMax(-1),
+fRequireITSRefit(0),
+fApplySharedClusterCut(0),
 fAngStructCloseTracks(0),
 fCheckMethods(0),
 fDoEventMixing(0), 
 fFlagPhiBkg(0),
 fFlagEtaBkg(0),
 fFlagJetHadron(0),
+fDodiHadron(0),
 fFrac(0.8),
 fTTLowRef(11),
 fTTUpRef(13),
@@ -149,6 +151,10 @@ fh2AngStructpt1C60(0x0),
 fh2AngStructpt2C60(0x0),
 fh2AngStructpt3C60(0x0),
 fh2AngStructpt4C60(0x0),
+fh1TrigRef(0x0),
+fh1TrigSig(0x0),
+fh1TrackPhiDistance(0x0),
+fh1TrackRDistance(0x0), 
 fh2Ntriggers(0x0),
 fh2Ntriggers2C10(0x0),
 fh2Ntriggers2C20(0x0), 
@@ -209,12 +215,15 @@ fCentMin(0.),
 fCentMax(100.),
 fNInputTracksMin(0),
 fNInputTracksMax(-1),
+fRequireITSRefit(0),
+fApplySharedClusterCut(0),
 fAngStructCloseTracks(0),
 fCheckMethods(0),
 fDoEventMixing(0),
 fFlagPhiBkg(0),
 fFlagEtaBkg(0),
 fFlagJetHadron(0),
+fDodiHadron(0),
 fFrac(0.8),
 fTTLowRef(11),
 fTTUpRef(13),
@@ -276,6 +285,10 @@ fh2AngStructpt1C60(0x0),
 fh2AngStructpt2C60(0x0),
 fh2AngStructpt3C60(0x0),
 fh2AngStructpt4C60(0x0),    
+fh1TrigRef(0x0),
+fh1TrigSig(0x0),
+fh1TrackPhiDistance(0x0),
+fh1TrackRDistance(0x0), 
 fh2Ntriggers(0x0),
 fh2Ntriggers2C10(0x0),
 fh2Ntriggers2C20(0x0),
@@ -427,7 +440,10 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
     fh2AngStructpt4C60 = new TH2F("Ang struct pt4 C60","",15,0.,1.5,150,0.,10.); }
 
    
-
+    fh1TrigRef=new TH1D("Trig Ref","",10,0.,10);
+    fh1TrigSig=new TH1D("Trig Sig","",10,0.,10);  
+    fh1TrackPhiDistance=new TH1D("PhiDistance","",35,0.,3.5);
+    fh1TrackRDistance=new TH1D("RDistance","",10,0.,1); 
     fh2Ntriggers=new TH2F("# of triggers","",100,0.,100.,50,0.,50.);
     fh2Ntriggers2C10=new TH2F("# of triggers2C10","",50,0.,50.,50,0.,50.);
     fh2Ntriggers2C20=new TH2F("# of triggers2C20","",50,0.,50.,50,0.,50.);
@@ -487,9 +503,11 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
 
 
 
-
-       fOutputList->Add(fh2Ntriggers);
+        fOutputList->Add(fh1TrigRef);
+        fOutputList->Add(fh1TrigSig); 
+        fOutputList->Add(fh1TrackPhiDistance);
+        fOutputList->Add(fh1TrackRDistance);
+               fOutputList->Add(fh2Ntriggers);
         fOutputList->Add(fh2Ntriggers2C10);
         fOutputList->Add(fh2Ntriggers2C20); 
         fOutputList->Add(fh3JetDensity);
@@ -502,7 +520,7 @@ void AliAnalysisTaskJetCore::UserCreateOutputObjects()
         const Int_t dimSpec = 5;
        const Int_t nBinsSpec[dimSpec]     = {100,6, 140, 50, fNRPBins};
        const Double_t lowBinSpec[dimSpec] = {0,0,-80, 0, 0};
-       const Double_t hiBinSpec[dimSpec]  = {100,1, 200, 50, fNRPBins};
+       const Double_t hiBinSpec[dimSpec]  = {100,1, 200, 50,  static_cast<Double_t>(fNRPBins)};
        fHJetSpec = new THnSparseF("fHJetSpec","Recoil jet spectrum",dimSpec,nBinsSpec,lowBinSpec,hiBinSpec);
 
              //change binning in jet area
@@ -593,7 +611,17 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    // -- event selection --
    fHistEvtSelection->Fill(1); // number of events before event selection
 
-   // physics selection
+
+       Bool_t selected=kTRUE;
+       selected = AliAnalysisHelperJetTasks::Selected();
+       if(!selected){
+      // no selection by the service task, we continue
+       PostData(1,fOutputList);
+       return;}
+    
+
+
+  // physics selection: this is now redundant, all should appear as accepted after service task selection
    AliInputEventHandler* inputHandler = (AliInputEventHandler*)
    ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
         std::cout<<inputHandler->IsEventSelected()<<" "<<fOfflineTrgMask<<std::endl;
@@ -604,6 +632,8 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
       return;
    }
 
+
+      
    // vertex selection
    if(!aod){
      if(fDebug) Printf("%s:%d No AOD",(char*)__FILE__,__LINE__);
@@ -644,7 +674,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    if(fIsPbPb){
    if(fESD) {cent = fESD->GetCentrality();
      if(cent) centValue = cent->GetCentralityPercentile("V0M");}
-   else     centValue=aod->GetHeader()->GetCentrality();
+   else     centValue=((AliVAODHeader*)aod->GetHeader())->GetCentrality();
    
    if(fDebug) printf("centrality: %f\n", centValue);
       if (centValue < fCentMin || centValue > fCentMax){
@@ -678,9 +708,10 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
 
    if(fFlagRandom==0){
      if(externalBackground)rho = externalBackground->GetBackground(0);}
-   if(fFlagRandom==1){
+   if(fFlagRandom==2){
       if(externalBackground)rho = externalBackground->GetBackground(2);}
-
+   if(fFlagRandom==3){
+      if(externalBackground)rho = externalBackground->GetBackground(3);}
    // fetch jets
    TClonesArray *aodJets[2];
    aodJets[0]=0;
@@ -700,6 +731,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    TList ParticleList;
    Double_t minT=0;
    Double_t maxT=0;
+   Int_t number=0;
    Double_t dice=fRandom->Uniform(0,1);
    if(dice>fFrac){ minT=fTTLowRef;
                    maxT=fTTUpRef;}
@@ -709,12 +741,13 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
 
 
    if(fHardest==1 || fHardest==2) nT = GetListOfTracks(&ParticleList);
-   if(fHardest==0) nT=SelectTrigger(&ParticleList,minT,maxT);
+   if(fHardest==0) nT=SelectTrigger(&ParticleList,minT,maxT,number);
    if(nT<0){  
    PostData(1, fOutputList);
    return;}   
 
-
+      if(dice>fFrac) fh1TrigRef->Fill(number);
+      if(dice<=fFrac)fh1TrigSig->Fill(number);
 
      for (Int_t iJetType = 0; iJetType < 2; iJetType++) {
       fListJets[iJetType]->Clear();
@@ -733,7 +766,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    Double_t phibig=0.;
    Double_t etasmall=0;
    Double_t ptsmall=0;
-   Double_t areasmall=0;
+   //   Double_t areasmall=0;
    Double_t phismall=0.;
          
   
@@ -741,8 +774,8 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
    Int_t iCount=0; 
    Int_t trigJet=-1;
    Int_t trigBBTrack=-1;
-   Int_t trigInTrack=-1;
-   fRPAngle = aod->GetHeader()->GetEventplane();     
+          // Int_t trigInTrack=-1;
+   fRPAngle = ((AliVAODHeader*)aod->GetHeader())->GetEventplane();     
 
    if(fHardest==0 || fHardest==1){
    AliVParticle *partback = (AliVParticle*)ParticleList.At(nT);     
@@ -764,7 +797,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
      if(fHardest==0||fHardest==1){if(tt!=nT) continue;}
      AliVParticle *partback = (AliVParticle*)ParticleList.At(tt);     
      if(!partback) continue;
-     if(partback->Pt()<10) continue;
+     if(partback->Pt()<8) continue;
 
    Double_t accep=2.*TMath::Pi()*1.8;
    Int_t injet4=0;
@@ -828,7 +861,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
                    if(phitt<0)phitt+=TMath::Pi()*2.; 
                    Int_t phiBintt = GetPhiBin(phitt-fRPAngle);
 
-                  Double_t fillspec[] = {centValue,jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt(),phiBintt};
+                  Double_t fillspec[] = {centValue,jetbig->EffectiveAreaCharged(),ptcorr,partback->Pt(), static_cast<Double_t>(phiBintt)};
                  fHJetSpec->Fill(fillspec);
            
           
@@ -867,7 +900,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
                       if(iCount==0){                        
                         trigJet=i;
                         trigBBTrack=nT;
-                        trigInTrack=ippt;
+                        //                      trigInTrack=ippt;
                         iCount=iCount+1;} 
                       
    
@@ -877,7 +910,7 @@ void AliAnalysisTaskJetCore::UserExec(Option_t *)
                           etasmall  = jetsmall->Eta();
                           phismall = jetsmall->Phi();
                           ptsmall   = jetsmall->Pt();
-                          areasmall = jetsmall->EffectiveAreaCharged();
+                          //                      areasmall = jetsmall->EffectiveAreaCharged();
                           Double_t tmpDeltaR=(phismall-phibig)*(phismall-phibig)+(etasmall-etabig)*(etasmall-etabig);
                           tmpDeltaR=TMath::Sqrt(tmpDeltaR);
                           //Fraction in the jet core  
@@ -1142,14 +1175,20 @@ Int_t  AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
 
     
      for(int it = 0;it < aod->GetNumberOfTracks();++it){
-      AliAODTrack *tr = aod->GetTrack(it);
+      AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aod->GetTrack(it));
+      if(!tr) AliFatal("Not a standard AOD");
       Bool_t bGood = false;
       if(fFilterType == 0)bGood = true;
       else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
       else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();    
-     if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
+      if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
+      if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
       if(bGood==false) continue;
-      if(TMath::Abs(tr->Eta())>0.9)continue;
+      if (fApplySharedClusterCut) {
+           Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls());
+           if (frac > 0.4) continue;
+      }
+     if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
       list->Add(tr);
       iCount++;
@@ -1190,7 +1229,7 @@ Int_t  AliAnalysisTaskJetCore::GetListOfTracks(TList *list){
 
 
 
-Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t maxT){
+Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t maxT,Int_t &number){
      Int_t iCount = 0;
      AliAODEvent *aod = 0;
      if(!fESD)aod = fAODIn;
@@ -1198,30 +1237,64 @@ Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t
      if(!aod)return 0;
      Int_t index=-1;
      Int_t triggers[100];
-     for(Int_t cr=0;cr<100;cr++){triggers[cr]=-1;}
+     Int_t triggers2[100];
+     for(Int_t cr=0;cr<100;cr++){triggers[cr]=-1;
+       triggers2[cr]=-1;}
      Int_t im=0;
+     Int_t im2=0;
      for(int it = 0;it < aod->GetNumberOfTracks();++it){
-      AliAODTrack *tr = aod->GetTrack(it);
+      AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aod->GetTrack(it));
+      if(!tr) AliFatal("Not a standard AOD");
       Bool_t bGood = false;
       if(fFilterType == 0)bGood = true;
       else if(fFilterType == 1)bGood = tr->IsHybridTPCConstrainedGlobal();
       else if(fFilterType == 2)bGood = tr->IsHybridGlobalConstrainedGlobal();
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
+       if(fRequireITSRefit==1){if((tr->GetStatus()&AliESDtrack::kITSrefit)==0)continue;}
       if(bGood==false) continue;
+      if (fApplySharedClusterCut) {
+           Double_t frac = Double_t(tr->GetTPCnclsS()) /Double_t(tr->GetTPCncls());
+           if (frac > 0.4) continue;
+      }
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
       list->Add(tr);
       iCount++;
       
       if(tr->Pt()>=minT && tr->Pt()<maxT){
+        if(tr->Pt()<20){
        triggers[im]=iCount-1;
         im=im+1;}
+       if(tr->Pt()>=20.){triggers2[im2]=iCount-1;
+         im2=im2+1;}
 
-     }
+      }}
+      
+      number=im;
       Int_t rd=0;
-      if(im==0) rd=0;
-      if(im>0) rd=fRandom->Integer(im-1);
-      index=triggers[rd];
+      if(im2==0) rd=0;
+      if(im2>0) rd=fRandom->Integer(im2);
+      index=triggers2[rd];
+      if(index==-1) return index;
+      AliVParticle *tr1 = (AliVParticle*)list->At(index);     
+      if(!tr1) return index;
+    
+
+      for(Int_t kk=0;kk<im;kk++){
+       //if(kk==rd) continue;
+        if(index==triggers[kk]) continue;
+       Int_t lab=triggers[kk];
+         AliVParticle *tr2 = (AliVParticle*)list->At(lab);     
+        if(!tr2) continue;
+       Double_t detat=tr1->Eta()-tr2->Eta();
+       Double_t dphit=RelativePhi(tr1->Phi(),tr2->Phi());
+       Double_t deltaRt=TMath::Sqrt(detat*detat+dphit*dphit);
+       fh1TrackPhiDistance->Fill(TMath::Abs(dphit));
+       fh1TrackRDistance->Fill(deltaRt);
+       
+       if(fDodiHadron==1)  if(deltaRt>0.4) number=number-1;
+       if(fDodiHadron==2) if((deltaRt>0.4) && (TMath::Abs(dphit)>TMath::Pi()-0.6)) number=number-1;}
+
 
      
   
@@ -1254,10 +1327,11 @@ Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t
     Int_t index=-1;
     Double_t ptmax=-10;
     Double_t dphi=0;
-    Double_t dif=0;
+    // Double_t dif=0;
     Int_t iCount=0;
     for(int it = 0;it < aod->GetNumberOfTracks();++it){
-      AliAODTrack *tr = aod->GetTrack(it);
+      AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aod->GetTrack(it));
+      if(!tr) AliFatal("Not a standard AOD");
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;
@@ -1266,7 +1340,8 @@ Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t
       if(TMath::Abs(dphi)<TMath::Pi()-0.6) continue;
       if(tr->Pt()>ptmax){ ptmax=tr->Pt();
       index=iCount-1;
-      dif=dphi;  }}
+      //  dif=dphi; 
+      }}
   
       return index;
 
@@ -1288,7 +1363,8 @@ Int_t  AliAnalysisTaskJetCore::SelectTrigger(TList *list,Double_t minT,Double_t
      else aod = fAODOut;   
   
       for(int it = 0;it < aod->GetNumberOfTracks();++it){
-      AliAODTrack *tr = aod->GetTrack(it);
+      AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aod->GetTrack(it));
+      if(!tr) AliFatal("Not a standard AOD");
       if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask)))continue;
       if(TMath::Abs(tr->Eta())>0.9)continue;
       if(tr->Pt()<0.15)continue;