]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Update (Francesco, Gian Michele)
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Apr 2011 21:01:00 +0000 (21:01 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Apr 2011 21:01:00 +0000 (21:01 +0000)
PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx
PWG3/vertexingHF/AliAnalysisTaskSEDs.h
PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx
PWG3/vertexingHF/AliAnalysisTaskSESignificance.h

index 0a8e67d1d6df7eff7f81d467c2920d425ff947cd..89854e21c1c6b742ab57539b892ebdb67ef996d2 100644 (file)
@@ -197,6 +197,9 @@ void AliAnalysisTaskSEDs::Init()
   if(fDebug > 1) printf("AnalysisTaskSEDs::Init() \n");
 
   fListCuts=new TList();
+  fListCuts->SetOwner();
+  fListCuts->SetName("CutObjects");
+
   AliRDHFCutsDstoKKpi *production = new AliRDHFCutsDstoKKpi(*fProdCuts);
   production->SetName("ProductionCuts");
   AliRDHFCutsDstoKKpi *analysis = new AliRDHFCutsDstoKKpi(*fAnalysisCuts);
@@ -250,10 +253,10 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
       fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
       fMassHist[index]->Sumw2();
       hisname.Form("hMass%sPt%dphi",htype.Data(),i);
-      fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),100,minMass,maxMass);
+      fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
       fMassHistPhi[index]->Sumw2();
       hisname.Form("hMass%sPt%dk0st",htype.Data(),i);
-      fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),100,minMass,maxMass);
+      fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass);
       fMassHistK0st[index]->Sumw2();
       hisname.Form("hCosP%sPt%d",htype.Data(),i);
       fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.);
@@ -316,10 +319,10 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
     fOutput->Add(fDalitzK0st[i]);
   }
 
-  fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",16,-0.5,15.5);
-  fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",16,-0.5,15.5);
-  fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",16,-0.5,15.5);
-  fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",16,-0.5,15.5);
+  fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5);
+  fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",64,-0.5,63.5);
+  fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",64,-0.5,63.5);
+  fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",64,-0.5,63.5);
   for(Int_t i=0;i<4;i++){
     fChanHist[i]->Sumw2();
     fChanHist[i]->SetMinimum(0);
@@ -454,8 +457,10 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
 
     Int_t isKKpi=retCodeAnalysisCuts&1;
     Int_t ispiKK=retCodeAnalysisCuts&2;
-    Int_t isPhi=retCodeAnalysisCuts&4;
-    Int_t isK0star=retCodeAnalysisCuts&8;
+    Int_t isPhiKKpi=retCodeAnalysisCuts&4;
+    Int_t isPhipiKK=retCodeAnalysisCuts&8;
+    Int_t isK0starKKpi=retCodeAnalysisCuts&16;    
+    Int_t isK0starpiKK=retCodeAnalysisCuts&32;
 
     fChanHist[0]->Fill(retCodeAnalysisCuts);
  
@@ -500,24 +505,24 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
       Double_t invMass=d->InvMassDsKKpi();
       fMassHist[index]->Fill(invMass);
       fPtVsMass->Fill(invMass,ptCand);
-      if(isPhi) fMassHistPhi[index]->Fill(invMass);
-      if(isK0star) fMassHistK0st[index]->Fill(invMass);
+      if(isPhiKKpi) fMassHistPhi[index]->Fill(invMass);
+      if(isK0starKKpi) fMassHistK0st[index]->Fill(invMass);
       if(fReadMC  && indexMCKKpi!=-1){
        fMassHist[indexMCKKpi]->Fill(invMass);
-       if(isPhi) fMassHistPhi[indexMCKKpi]->Fill(invMass);
-       if(isK0star) fMassHistK0st[indexMCKKpi]->Fill(invMass);   
+       if(isPhiKKpi) fMassHistPhi[indexMCKKpi]->Fill(invMass);
+       if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass);       
       }
     }
     if(ispiKK){
       Double_t invMass=d->InvMassDspiKK();
       fMassHist[index]->Fill(invMass);
       fPtVsMass->Fill(invMass,ptCand);
-      if(isPhi) fMassHistPhi[index]->Fill(invMass);
-      if(isK0star) fMassHistK0st[index]->Fill(invMass);
+      if(isPhipiKK) fMassHistPhi[index]->Fill(invMass);
+      if(isK0starpiKK) fMassHistK0st[index]->Fill(invMass);
       if(fReadMC  && indexMCpiKK!=-1){
        fMassHist[indexMCpiKK]->Fill(invMass);
-       if(isPhi) fMassHistPhi[indexMCpiKK]->Fill(invMass);
-       if(isK0star) fMassHistK0st[indexMCpiKK]->Fill(invMass);      
+       if(isPhipiKK) fMassHistPhi[indexMCpiKK]->Fill(invMass);
+       if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass);      
       }
     }
 
@@ -547,12 +552,12 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
        Double_t massKK=d->InvMass2Prongs(0,1,321,321);
        Double_t massKp=d->InvMass2Prongs(1,2,321,211);
        fDalitz[index]->Fill(massKK,massKp);
-       if(isPhi) fDalitzPhi[index]->Fill(massKK,massKp);
-       if(isK0star) fDalitzK0st[index]->Fill(massKK,massKp);
+       if(isPhiKKpi) fDalitzPhi[index]->Fill(massKK,massKp);
+       if(isK0starKKpi) fDalitzK0st[index]->Fill(massKK,massKp);
        if(fReadMC && indexMCKKpi!=-1){
          fDalitz[indexMCKKpi]->Fill(massKK,massKp);
-         if(isPhi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp);
-         if(isK0star) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp);
+         if(isPhiKKpi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp);
+         if(isK0starKKpi) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp);
          fCosPHist[indexMCKKpi]->Fill(cosp);
          fDLenHist[indexMCKKpi]->Fill(dlen);
          fSigVertHist[indexMCKKpi]->Fill(sigvert);
@@ -569,12 +574,12 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
        Double_t massKK=d->InvMass2Prongs(1,2,321,321);
        Double_t massKp=d->InvMass2Prongs(0,1,211,321);
        fDalitz[index]->Fill(massKK,massKp);
-       if(isPhi) fDalitzPhi[index]->Fill(massKK,massKp);
-       if(isK0star) fDalitzK0st[index]->Fill(massKK,massKp);
+       if(isPhipiKK) fDalitzPhi[index]->Fill(massKK,massKp);
+       if(isK0starpiKK) fDalitzK0st[index]->Fill(massKK,massKp);
        if(fReadMC && indexMCpiKK!=-1){
          fDalitz[indexMCpiKK]->Fill(massKK,massKp);
-         if(isPhi) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp);
-         if(isK0star) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp);
+         if(isPhipiKK) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp);
+         if(isK0starpiKK) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp);
          fCosPHist[indexMCpiKK]->Fill(cosp);
          fDLenHist[indexMCpiKK]->Fill(dlen);
          fSigVertHist[indexMCpiKK]->Fill(sigvert);
index 68dd11228e9827aa1314062f9691a49207b43b86..6e108abdc9ca29473bbd924a25bf8a0cfe1287b4 100644 (file)
@@ -51,7 +51,7 @@ class AliAnalysisTaskSEDs : public AliAnalysisTaskSE
   Int_t GetBackgroundHistoIndex(Int_t iPtBin) const { return iPtBin*4+2;}
   Int_t GetReflSignalHistoIndex(Int_t iPtBin) const { return iPtBin*4+3;}
 
-  enum {kMaxPtBins=10};
+  enum {kMaxPtBins=20};
 
   AliAnalysisTaskSEDs(const AliAnalysisTaskSEDs &source);
   AliAnalysisTaskSEDs& operator=(const AliAnalysisTaskSEDs& source); 
index 71b1cd15f259c0ca00f281c9efdd1779eca708c7..3f7e741e63bccf2bf9b821b61e413421b7560b60 100644 (file)
@@ -81,10 +81,12 @@ AliAnalysisTaskSESignificance::AliAnalysisTaskSESignificance():
   fSelectionlevel(0),
   fNVars(0),
   fNBins(100),
-  fPartOrAndAntiPart(0)
+  fPartOrAndAntiPart(0),
+  fDsChannel(0)
 {
   // Default constructor
   SetPDGCodes();
+  SetDsChannel(kPhi);
 }
 
 //________________________________________________________________________
@@ -106,10 +108,12 @@ AliAnalysisTaskSESignificance::AliAnalysisTaskSESignificance(const char *name, T
   fSelectionlevel(selectionlevel),
   fNVars(0),
   fNBins(100),
-  fPartOrAndAntiPart(0)
+  fPartOrAndAntiPart(0),
+  fDsChannel(0)
 {
 
   SetPDGCodes();
+  SetDsChannel(kPhi);
   SetMassLimits(0.15,fPDGmother); //check range
   fNPtBins=fRDCuts->GetNPtBins();
 
@@ -533,11 +537,13 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
       if(fDebug>1) printf("+++++++Is Selected\n");
     
       Int_t nVals=0;
+      if(fDecChannel==3) SetPDGdaughterDstoKKpi();
       fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters);
       Int_t ptbin=fRDCuts->PtBin(d->Pt());
       if(ptbin==-1) continue;
       TString mdvname=Form("multiDimVectorPtBin%d",ptbin);
       AliMultiDimVector* muvec=(AliMultiDimVector*)fCutList->FindObject(mdvname.Data());
+
       ULong64_t *addresses = muvec->GetGlobalAddressesAboveCuts(fVars,(Float_t)d->Pt(),nVals);
       if(fDebug>1)printf("nvals = %d\n",nVals);
       for(Int_t ivals=0;ivals<nVals;ivals++){
@@ -546,9 +552,9 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
          delete [] addresses;
          return;
        }
-
+       
        fHistNEvents->Fill(3);
-
+       
        //fill the histograms with the appropriate method
        switch (fDecChannel){
        case 0:
@@ -561,7 +567,9 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
          FillDstar(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected);
          break;
        case 3:
-         FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected);
+         if(isSelected&1){
+           FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected,1);
+         }
          break;
        case 4:
          FillD04p(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected);
@@ -574,6 +582,25 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/)
        }
        
       }
+      
+      if (fDecChannel==3 && isSelected&2){
+       SetPDGdaughterDstopiKK();
+       nVals=0;
+       fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters);
+       addresses = muvec->GetGlobalAddressesAboveCuts(fVars,(Float_t)d->Pt(),nVals);
+       if(fDebug>1)printf("nvals = %d\n",nVals);
+       for(Int_t ivals=0;ivals<nVals;ivals++){
+         if(addresses[ivals]>=muvec->GetNTotCells()){
+           if (fDebug>1) printf("Overflow!!\n");
+           delete [] addresses;            
+           return;
+         }
+         FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected,0);      
+         
+       }
+
+      }
+      
       delete [] addresses;
     }// end if selected
     
@@ -680,9 +707,9 @@ void AliAnalysisTaskSESignificance::FillDstar(AliAODRecoDecayHF* /*d*/,TClonesAr
 }
 
 
-void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel){
+void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay){
 
-  //AliInfo("Ds channel not implemented\n");
+  // Fill Ds histos
 
 
   Int_t pdgDsKKpi[3]={321,321,211};//K,K,pi 
@@ -695,53 +722,65 @@ void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *ar
   if(fReadMC){
     labDs = d->MatchToMC(431,arrayMC,3,pdgDsKKpi);
   }
-  
-  
-  if(isSel&1  && fPartOrAndAntiPart*d->GetCharge()>=0) {
-    
-    fMassHist[index]->Fill(masses[0]); 
-        
-    if(fReadMC){
 
-      if(labDs>=0){
-       Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
-       AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
-       Int_t pdgCode0=TMath::Abs(p->GetPdgCode());
-       
-       if(pdgCode0==321) {       
-         
-         fSigHist[index]->Fill(masses[0]); //signal
+  Int_t isKKpi=isSel&1;
+  Int_t ispiKK=isSel&2;
+  Int_t isPhiKKpi=isSel&4;
+  Int_t isPhipiKK=isSel&8;
+  Int_t isK0starKKpi=isSel&16;
+  Int_t isK0starpiKK=isSel&32;
+
+
+  if(fDsChannel==kPhi && (isPhiKKpi==0 && isPhipiKK==0)) return;
+  if(fDsChannel==kK0star && (isK0starKKpi==0 && isK0starpiKK==0)) return;
+   
+  if (optDecay==1){ 
+    if(isKKpi  && fPartOrAndAntiPart*d->GetCharge()>=0) {
+      if(fDsChannel==kPhi && isPhiKKpi==0) return;
+      if(fDsChannel==kK0star && isK0starKKpi==0) return;
+      
+      fMassHist[index]->Fill(masses[0]); 
+      
+      if(fReadMC){
+       if(labDs>=0){
+         Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
+         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
+         Int_t pdgCode0=TMath::Abs(p->GetPdgCode());
+         if(pdgCode0==321) {
+           fSigHist[index]->Fill(masses[0]); //signal
+         }else{
+           fRflHist[index]->Fill(masses[0]); //Reflected signal
+         }
        }else{
-         fRflHist[index]->Fill(masses[0]); //Reflected signal
+         fBkgHist[index]->Fill(masses[0]); // Background
        }
-      }else{
-       fBkgHist[index]->Fill(masses[0]); // Background
       }
     }
   }
   
-  if(isSel&2 && fPartOrAndAntiPart*d->GetCharge()>=0){
-    fMassHist[index]->Fill(masses[1]);
-    if(fReadMC){
-      if(labDs>=0){
-       Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
-       AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
-       Int_t pdgCode0=TMath::Abs(p->GetPdgCode());
-       
-       if(pdgCode0==211) {       
-         
-         fSigHist[index]->Fill(masses[1]);
+  if (optDecay==0){ 
+    if(ispiKK && fPartOrAndAntiPart*d->GetCharge()>=0){
+      if(fDsChannel==kPhi && isPhipiKK==0) return;
+      if(fDsChannel==kK0star && isK0starpiKK==0) return;
+      
+      fMassHist[index]->Fill(masses[1]);
+      
+      if(fReadMC){
+       if(labDs>=0){
+         Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
+         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
+         Int_t pdgCode0=TMath::Abs(p->GetPdgCode());   
+         if(pdgCode0==211) {             
+           fSigHist[index]->Fill(masses[1]);
+         }else{
+           fRflHist[index]->Fill(masses[1]);
+         }
        }else{
-         fRflHist[index]->Fill(masses[1]);
+         fBkgHist[index]->Fill(masses[1]);
        }
-      }else{
-       fBkgHist[index]->Fill(masses[1]);
       }
     }
   }
-  
-     
-
 }
 
 void AliAnalysisTaskSESignificance::FillD04p(AliAODRecoDecayHF* /*d*/,TClonesArray */*arrayMC*/,Int_t /*index*/,Int_t /*matchtoMC*/){
index 3c4d186444ed69724d740692547c363da8307837..2a94b713d26a4f18a0ab18ef8bad5a58e2e621ab 100644 (file)
@@ -27,6 +27,7 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
  public:
 
   enum FeedDownEnum {kBoth,kCharmOnly,kBeautyOnly};
+  enum ChanDs {kAllReson,kPhi,kK0star};
 
   AliAnalysisTaskSESignificance();
   AliAnalysisTaskSESignificance(const char *name, TList *listMDV,AliRDHFCuts *RDCuts, Int_t decaychannel,Int_t selectionlevel=AliRDHFCuts::kAll);
@@ -42,12 +43,15 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
   void SetMassLimits(Float_t lowlimit, Float_t uplimit);
   void SetNBins(Int_t nbins){fNBins=nbins;}
   void SetFillWithPartAntiPartBoth(Int_t value){fPartOrAndAntiPart=value;}
+  void SetDsChannel(Int_t chan){fDsChannel=chan;}
+
   //void SetMultiVector(const AliMultiDimVector *MultiDimVec){fMultiDimVec->CopyStructure(MultiDimVec);}
   Float_t GetUpperMassLimit()const {return fUpmasslimit;}
   Float_t GetLowerMassLimit()const {return fLowmasslimit;}
   Int_t GetNBins()const {return fNBins;}
   Int_t GetFillWithPartAntiPartBoth()const {return fPartOrAndAntiPart;}
   Int_t GetBFeedDown()const {return fBFeedDown;}
+  Int_t GetDsChannel()const {return fDsChannel;}
 
   // Implementation of interface methods
   virtual void UserCreateOutputObjects();
@@ -57,6 +61,19 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
     
  private:
 
+  void SetPDGdaughterDstoKKpi(){
+    fPDGdaughters[0]=321;//K
+    fPDGdaughters[1]=321;//K
+    fPDGdaughters[2]=211;//pi
+    fPDGdaughters[3]=0; //empty
+  }
+  void SetPDGdaughterDstopiKK(){
+    fPDGdaughters[0]=211;//pi
+    fPDGdaughters[1]=321;//K
+    fPDGdaughters[2]=321;//K
+    fPDGdaughters[3]=0; //empty
+  }
+
   AliAnalysisTaskSESignificance(const AliAnalysisTaskSESignificance &source);
   AliAnalysisTaskSESignificance& operator=(const AliAnalysisTaskSESignificance& source);
   void SetPDGCodes();
@@ -68,7 +85,7 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
 
   void FillDplus(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
   void FillD02p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
-  void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
+  void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay);
   void FillDstar(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
   void FillD04p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel);
   void FillLambdac(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel);
@@ -103,10 +120,10 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE
   Float_t fVars[kMaxCutVar];       // array with values of cut variables
   Int_t fNBins;  //number of bins in the mass histograms
   Int_t fPartOrAndAntiPart;  //fill histograms with particle only (+1), antiparticle only (-1), both (0)
+  Int_t fDsChannel;          // Ds resonant channel selected
 
-  ClassDef(AliAnalysisTaskSESignificance,3); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
+  ClassDef(AliAnalysisTaskSESignificance,4); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
 };
 
 #endif
 
-