]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
correct inverted eta-phi variables, add histograms check dedx and EoverP and origin...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 21 Jan 2012 17:02:38 +0000 (17:02 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 21 Jan 2012 17:02:38 +0000 (17:02 +0000)
PWG4/PartCorrBase/AliCaloPID.cxx
PWG4/PartCorrDep/AliAnaInsideClusterInvariantMass.cxx
PWG4/PartCorrDep/AliAnaParticleIsolation.cxx
PWG4/PartCorrDep/AliAnaParticleIsolation.h
PWG4/PartCorrDep/AliAnaPhoton.cxx
PWG4/PartCorrDep/AliAnaPhoton.h
PWG4/PartCorrDep/AliAnaPi0EbE.cxx
PWG4/PartCorrDep/AliAnaPi0EbE.h

index ded215f73fd93c55f2016d85f4e2406449ea93ba..28d6fb859d0ce0e9086a19a526d1466b6da124bd 100755 (executable)
@@ -519,7 +519,7 @@ Bool_t AliCaloPID::IsTrackMatched(AliVCluster* cluster,
     // if track matching was recalculated
     if(cluster->IsEMCAL() && cu && cu->IsRecalculationOfClusterTrackMatchingOn()){
       dR = 2000., dZ = 2000.;
-      cu->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dR,dZ);
+      cu->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
     }
         
     if(cluster->IsPHOS()) {
index e0411dc886c75f590ba88e55caeb20c8540823a7..4c6e73b639efb7ff65422290d8296199f57251ff 100755 (executable)
@@ -612,6 +612,7 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
       else                                                                                mcindex = kmcHadron;
       
       //GetMCAnalysisUtils()->PrintMCTag(tag);
+      //printf("\t MC index Assigned %d \n",mcindex);
       
       fhNLocMax[mcindex]->Fill(en,nMax);
       for(Int_t imax = 0; imax < nMax; imax++)
@@ -743,7 +744,7 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
       else if(nMax==2) {
         fhMassNLocMax2[mcindex]->Fill(en,mass);
         if     (mass < fMassConMax && mass > fMassConMin) fhM02ConLocMax2[mcindex]->Fill(en,l0);
-        else if(mass < fMassPi0Max && mass > fMassPi0Min)fhM02Pi0LocMax2[mcindex]->Fill(en,l0);
+        else if(mass < fMassPi0Max && mass > fMassPi0Min) fhM02Pi0LocMax2[mcindex]->Fill(en,l0);
         else if(mass < fMassEtaMax && mass > fMassEtaMin) fhM02EtaLocMax2[mcindex]->Fill(en,l0);        
       }
       else if(nMax >2) {
index 1606f6238e3524ca88cfafd54a8aed4f78d74e47..8af49aec39847d00bc04b2b92b9cd04af45d872c 100755 (executable)
@@ -78,6 +78,7 @@ ClassImp(AliAnaParticleIsolation)
     fhPtNoIsoPrompt(0),               fhPtIsoMCPhoton(0),              fhPtNoIsoMCPhoton(0),
     fhPtNoIsoConversion(0),           fhPtNoIsoFragmentation(0),       fhPtNoIsoUnknown(0),
     fhTrackMatchedDEta(0x0),          fhTrackMatchedDPhi(0x0),         fhTrackMatchedDEtaDPhi(0x0),
+    fhdEdx(0),                        fhEOverP(0),                     fhTrackMatchedMCParticle(0),
     fhELambda0(0),                    fhELambda1(0), 
     //Histograms settings
     fHistoNPtSumBins(0),              fHistoPtSumMax(0.),              fHistoPtSumMin(0.),
@@ -209,6 +210,14 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
   Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();          
   Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();  
   
+  Int_t   ndedxbins   = GetHistogramRanges()->GetHistodEdxBins();         
+  Float_t dedxmax     = GetHistogramRanges()->GetHistodEdxMax();         
+  Float_t dedxmin     = GetHistogramRanges()->GetHistodEdxMin();
+  Int_t   nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();       
+  Float_t pOverEmax   = GetHistogramRanges()->GetHistoPOverEMax();       
+  Float_t pOverEmin   = GetHistogramRanges()->GetHistoPOverEMin();
+  
+  
   Int_t   nptsumbins    = fHistoNPtSumBins;
   Float_t ptsummax      = fHistoPtSumMax;
   Float_t ptsummin      = fHistoPtSumMin;      
@@ -220,21 +229,21 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
     
     if(fFillTMHisto){
       fhTrackMatchedDEta  = new TH2F
-      ("TrackMatchedDEta",
+      ("hTrackMatchedDEta",
        "d#eta of cluster-track vs cluster energy",
        nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
       fhTrackMatchedDEta->SetYTitle("d#eta");
       fhTrackMatchedDEta->SetXTitle("E_{cluster} (GeV)");
       
       fhTrackMatchedDPhi  = new TH2F
-      ("TrackMatchedDPhi",
+      ("hTrackMatchedDPhi",
        "d#phi of cluster-track vs cluster energy",
        nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
       fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
       fhTrackMatchedDPhi->SetXTitle("E_{cluster} (GeV)");
       
       fhTrackMatchedDEtaDPhi  = new TH2F
-      ("TrackMatchedDEtaDPhi",
+      ("hTrackMatchedDEtaDPhi",
        "d#eta vs d#phi of cluster-track vs cluster energy",
        nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax); 
       fhTrackMatchedDEtaDPhi->SetYTitle("d#phi (rad)");
@@ -243,6 +252,37 @@ TList *  AliAnaParticleIsolation::GetCreateOutputObjects()
       outputContainer->Add(fhTrackMatchedDEta) ; 
       outputContainer->Add(fhTrackMatchedDPhi) ;
       outputContainer->Add(fhTrackMatchedDEtaDPhi) ;
+      
+      fhdEdx  = new TH2F ("hdEdx","matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax); 
+      fhdEdx->SetXTitle("E (GeV)");
+      fhdEdx->SetYTitle("<dE/dx>");
+      outputContainer->Add(fhdEdx);  
+      
+      fhEOverP  = new TH2F ("hEOverP","matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax); 
+      fhEOverP->SetXTitle("E (GeV)");
+      fhEOverP->SetYTitle("E/p");
+      outputContainer->Add(fhEOverP);   
+      
+      if(IsDataMC())
+      {
+        fhTrackMatchedMCParticle  = new TH2F
+        ("hTrackMatchedMCParticle",
+         "Origin of particle vs energy",
+         nptbins,ptmin,ptmax,8,0,8); 
+        fhTrackMatchedMCParticle->SetXTitle("E (GeV)");   
+        //fhTrackMatchedMCParticle->SetYTitle("Particle type");
+        
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(1 ,"Photon");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(2 ,"Electron");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(4 ,"Rest");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
+        fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
+        
+        outputContainer->Add(fhTrackMatchedMCParticle);         
+      }
     }
     
     if(fFillSSHisto){
@@ -928,7 +968,7 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
             
             if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn()){
               dR = 2000., dZ = 2000.;
-              GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dR,dZ);
+              GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
             }
             
             //printf("ParticleIsolation: dPhi %f, dEta %f\n",dR,dZ);
@@ -936,7 +976,55 @@ void  AliAnaParticleIsolation::MakeAnalysisFillHistograms()
               fhTrackMatchedDEta->Fill(energy,dZ);
               fhTrackMatchedDPhi->Fill(energy,dR);
               if(energy > 0.5) fhTrackMatchedDEtaDPhi->Fill(dZ,dR);
-            }  
+            }
+            
+            // Check dEdx and E/p of matched clusters
+            
+            if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
+            {
+              AliVTrack *track = 0;
+              if(!strcmp("AliESDCaloCluster",Form("%s",cluster->ClassName()))){
+                Int_t iESDtrack = cluster->GetTrackMatchedIndex();
+                if(iESDtrack<0) printf("AliAnaParticleIsolation::MakeAnalysisFillHistograms - Wrong track index\n");
+                AliVEvent * event = GetReader()->GetInputEvent();
+                track = dynamic_cast<AliVTrack*> (event->GetTrack(iESDtrack));
+              }
+              else {
+                track = dynamic_cast<AliVTrack*>(cluster->GetTrackMatched(0));
+              }
+              
+              if(track) {
+                
+                Float_t dEdx = track->GetTPCsignal();
+                fhdEdx->Fill(cluster->E(), dEdx);
+                
+                Float_t eOverp = cluster->E()/track->P();
+                fhEOverP->Fill(cluster->E(),  eOverp);
+                
+              }
+              
+              if(IsDataMC()){
+                
+                Int_t tag =aod->GetTag();
+                
+                if  ( !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)  )
+                {
+                  if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                             GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(energy, 2.5 );
+                  else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(energy, 0.5 );
+                  else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(energy, 1.5 );
+                  else                                                                                 fhTrackMatchedMCParticle->Fill(energy, 3.5 );
+                  
+                }
+                else
+                {
+                  if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                             GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(energy, 6.5 );
+                  else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(energy, 4.5 );
+                  else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(energy, 5.5 );
+                  else                                                                                 fhTrackMatchedMCParticle->Fill(energy, 7.5 );
+                }                     }  // MC           
+            } // match window            
           }// TM histos fill
           
           if(fFillSSHisto)
index de8d110326a7c6df8fc6ec4760c5af15e11a4057..da6feadf703c43ca0063b8afecc56113912881b4 100755 (executable)
@@ -188,7 +188,10 @@ class AliAnaParticleIsolation : public AliAnaCaloTrackCorrBaseClass {
   TH2F *   fhTrackMatchedDEta     ;               //! Eta distance between track and cluster vs cluster E
   TH2F *   fhTrackMatchedDPhi     ;               //! Phi distance between track and cluster vs cluster E
   TH2F *   fhTrackMatchedDEtaDPhi ;               //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
-  
+  TH2F *   fhdEdx  ;                              //! matched track dEdx vs cluster E 
+  TH2F *   fhEOverP;                              //! matched track E cluster over P track vs cluster E, after dEdx cut 
+  TH2F *   fhTrackMatchedMCParticle;              //! Trace origin of matched particle
+
   // Shower Shape histograms
   TH2F *   fhELambda0;                            //! Shower shape of isolated photons
   TH2F *   fhELambda1;                            //! Shower shape of isolated photons
@@ -200,11 +203,11 @@ class AliAnaParticleIsolation : public AliAnaCaloTrackCorrBaseClass {
   Int_t    fHistoNPtInConeBins;                   // Number of bins in PtInCone histogram
   Float_t  fHistoPtInConeMax;                     // PtInCone maximum in histogram
   Float_t  fHistoPtInConeMin;                     // PtInCone maximum in histogram 
-  
+
   AliAnaParticleIsolation(              const AliAnaParticleIsolation & iso) ; // cpy ctor
   AliAnaParticleIsolation & operator = (const AliAnaParticleIsolation & iso) ; // cpy assignment
   
-  ClassDef(AliAnaParticleIsolation,7)
+  ClassDef(AliAnaParticleIsolation,8)
 } ;
 
 
index 7dc253339d8ac288060fffc91a7aafc4aed0d026..250429547ffe225d2c21a2f055295d9f694a2f4c 100755 (executable)
@@ -88,7 +88,10 @@ AliAnaPhoton::AliAnaPhoton() :
     fhEmbedPi0ELambda0FullSignal(0),    fhEmbedPi0ELambda0MostlySignal(0),    
     fhEmbedPi0ELambda0MostlyBkg(0),     fhEmbedPi0ELambda0FullBkg(0),
     fhTrackMatchedDEta(0x0),            fhTrackMatchedDPhi(0x0),              fhTrackMatchedDEtaDPhi(0x0),
-    fhTrackMatchedDEtaNoCut(0x0),       fhTrackMatchedDPhiNoCut(0x0),         fhTrackMatchedDEtaDPhiNoCut(0x0)
+    fhTrackMatchedDEtaNoCut(0x0),       fhTrackMatchedDPhiNoCut(0x0),         fhTrackMatchedDEtaDPhiNoCut(0x0),
+    fhdEdx(0),                          fhEOverP(0),                         
+    fhdEdxNoCut(0),                     fhEOverPNoCut(0),                     
+    fhTrackMatchedMCParticle(0),        fhTrackMatchedMCParticleNoCut(0)                    
 {
   //default ctor
   
@@ -193,7 +196,7 @@ Bool_t  AliAnaPhoton::ClusterSelected(AliVCluster* calo, TLorentzVector mom)
 
     if(calo->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn()){
       dR = 2000., dZ = 2000.;
-      GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(calo->GetID(),dR,dZ);
+      GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(calo->GetID(),dZ,dR);
     }    
     
     if(fhTrackMatchedDEtaNoCut && TMath::Abs(dR) < 999){
@@ -201,7 +204,57 @@ Bool_t  AliAnaPhoton::ClusterSelected(AliVCluster* calo, TLorentzVector mom)
       fhTrackMatchedDPhiNoCut->Fill(calo->E(),dR);
       if(calo->E() > 0.5) fhTrackMatchedDEtaDPhiNoCut->Fill(dZ,dR);
     }
-  }
+    
+    // Check dEdx and E/p of matched clusters
+    
+    if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
+    {
+      AliVTrack *track = 0;
+      if(!strcmp("AliESDCaloCluster",Form("%s",calo->ClassName()))){
+        Int_t iESDtrack = calo->GetTrackMatchedIndex();
+        if(iESDtrack<0) printf("AliAnaPhoton::ClusterSelected - Wrong track index\n");
+        AliVEvent * event = GetReader()->GetInputEvent();
+        track = dynamic_cast<AliVTrack*> (event->GetTrack(iESDtrack));
+      }
+      else {
+        track = dynamic_cast<AliVTrack*>(calo->GetTrackMatched(0));
+      }
+      
+      if(track) {
+        
+        Float_t dEdx = track->GetTPCsignal();
+        fhdEdxNoCut->Fill(calo->E(), dEdx);
+        
+        Float_t eOverp = calo->E()/track->P();
+        fhEOverPNoCut->Fill(calo->E(),  eOverp);
+      }
+      
+      if(IsDataMC()){
+        Int_t tag = GetMCAnalysisUtils()->CheckOrigin(calo->GetLabels(),calo->GetNLabels(),GetReader(), 0);
+        if  ( !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)  ){
+          
+          if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 2.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 0.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 1.5 );
+          else                                                                                 fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 3.5 );
+          
+        }
+        else{
+          
+          if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 6.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 4.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 5.5 );
+          else                                                                                 fhTrackMatchedMCParticleNoCut->Fill(calo->E(), 7.5 );
+          
+        }
+        
+      } // MC 
+      
+    } // residuals window
+    
+  }// Fill track matching histograms
   
   if(fRejectTrackMatch){
     if(IsTrackMatched(calo,GetReader()->GetInputEvent())) {
@@ -996,6 +1049,12 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
   Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();          
   Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
   
+  Int_t   ndedxbins   = GetHistogramRanges()->GetHistodEdxBins();         
+  Float_t dedxmax     = GetHistogramRanges()->GetHistodEdxMax();         
+  Float_t dedxmin     = GetHistogramRanges()->GetHistodEdxMin();
+  Int_t   nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();       
+  Float_t pOverEmax   = GetHistogramRanges()->GetHistoPOverEMax();       
+  Float_t pOverEmin   = GetHistogramRanges()->GetHistoPOverEMin();
   
   TString cut[] = {"Open","Reader","E","Time","NCells","Fidutial","Matching","Bad","PID"};
   for (Int_t i = 0; i < 9 ;  i++) 
@@ -1180,21 +1239,21 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
   
   if(fFillTMHisto){
     fhTrackMatchedDEta  = new TH2F
-    ("TrackMatchedDEta",
+    ("hTrackMatchedDEta",
      "d#eta of cluster-track vs cluster energy",
      nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
     fhTrackMatchedDEta->SetYTitle("d#eta");
     fhTrackMatchedDEta->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDPhi  = new TH2F
-    ("TrackMatchedDPhi",
+    ("hTrackMatchedDPhi",
      "d#phi of cluster-track vs cluster energy",
      nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
     fhTrackMatchedDPhi->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDEtaDPhi  = new TH2F
-    ("TrackMatchedDEtaDPhi",
+    ("hTrackMatchedDEtaDPhi",
      "d#eta vs d#phi of cluster-track vs cluster energy",
      nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDEtaDPhi->SetYTitle("d#phi (rad)");
@@ -1205,21 +1264,21 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
     outputContainer->Add(fhTrackMatchedDEtaDPhi) ;    
     
     fhTrackMatchedDEtaNoCut  = new TH2F
-    ("TrackMatchedDEtaNoCut",
+    ("hTrackMatchedDEtaNoCut",
      "d#eta of cluster-track vs cluster energy, no photon cuts",
      nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
     fhTrackMatchedDEtaNoCut->SetYTitle("d#eta");
     fhTrackMatchedDEtaNoCut->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDPhiNoCut  = new TH2F
-    ("TrackMatchedDPhiNoCut",
+    ("hTrackMatchedDPhiNoCut",
      "d#phi of cluster-track vs cluster energy, no photon cuts",
      nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDPhiNoCut->SetYTitle("d#phi (rad)");
     fhTrackMatchedDPhiNoCut->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDEtaDPhiNoCut  = new TH2F
-    ("TrackMatchedDEtaDPhiNoCut",
+    ("hTrackMatchedDEtaDPhiNoCut",
      "d#eta vs d#phi of cluster-track vs cluster energy, no photon cuts",
      nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDEtaDPhiNoCut->SetYTitle("d#phi (rad)");
@@ -1228,6 +1287,65 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
     outputContainer->Add(fhTrackMatchedDEtaNoCut) ; 
     outputContainer->Add(fhTrackMatchedDPhiNoCut) ;
     outputContainer->Add(fhTrackMatchedDEtaDPhiNoCut) ;
+    
+    fhdEdx  = new TH2F ("hdEdx","matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax); 
+    fhdEdx->SetXTitle("E (GeV)");
+    fhdEdx->SetYTitle("<dE/dx>");
+    outputContainer->Add(fhdEdx);  
+
+    fhEOverP  = new TH2F ("hEOverP","matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax); 
+    fhEOverP->SetXTitle("E (GeV)");
+    fhEOverP->SetYTitle("E/p");
+    outputContainer->Add(fhEOverP);  
+    
+    fhdEdxNoCut  = new TH2F ("hdEdxNoCut","matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax); 
+    fhdEdxNoCut->SetXTitle("E (GeV)");
+    fhdEdxNoCut->SetYTitle("<dE/dx>");
+    outputContainer->Add(fhdEdxNoCut);  
+    
+    fhEOverPNoCut  = new TH2F ("hEOverPNoCut","matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax); 
+    fhEOverPNoCut->SetXTitle("E (GeV)");
+    fhEOverPNoCut->SetYTitle("E/p");
+    outputContainer->Add(fhEOverPNoCut);  
+
+    if(IsDataMC())
+    {
+      fhTrackMatchedMCParticle  = new TH2F
+      ("hTrackMatchedMCParticle",
+       "Origin of particle vs energy",
+       nptbins,ptmin,ptmax,8,0,8); 
+      fhTrackMatchedMCParticle->SetXTitle("E (GeV)");   
+      //fhTrackMatchedMCParticle->SetYTitle("Particle type");
+      
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(1 ,"Photon");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(2 ,"Electron");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(4 ,"Rest");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
+      
+      outputContainer->Add(fhTrackMatchedMCParticle);            
+      
+      fhTrackMatchedMCParticleNoCut  = new TH2F
+      ("hTrackMatchedMCParticleNoCut",
+       "Origin of particle vs energy",
+       nptbins,ptmin,ptmax,8,0,8); 
+      fhTrackMatchedMCParticleNoCut->SetXTitle("E (GeV)");   
+      //fhTrackMatchedMCParticleNoCut->SetYTitle("Particle type");
+      
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(1 ,"Photon");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(2 ,"Electron");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(4 ,"Rest");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
+      fhTrackMatchedMCParticleNoCut->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
+      
+      outputContainer->Add(fhTrackMatchedMCParticleNoCut);         
+    }
   }  
   
   
@@ -1736,7 +1854,7 @@ void  AliAnaPhoton::MakeAnalysisFillAOD()
       
       if(calo->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn()){
         dR = 2000., dZ = 2000.;
-        GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(calo->GetID(),dR,dZ);
+        GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(calo->GetID(),dZ,dR);
       }    
       
       if(TMath::Abs(dR) < 999){
@@ -1744,7 +1862,58 @@ void  AliAnaPhoton::MakeAnalysisFillAOD()
         fhTrackMatchedDPhi->Fill(calo->E(),dR);
         if(calo->E() > 0.5) fhTrackMatchedDEtaDPhi->Fill(dZ,dR);
       }
-    }
+      
+      // Check dEdx and E/p of matched clusters
+      
+      if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
+      {
+        AliVTrack *track = 0;
+        if(!strcmp("AliESDCaloCluster",Form("%s",calo->ClassName()))){
+          Int_t iESDtrack = calo->GetTrackMatchedIndex();
+          if(iESDtrack<0) printf("AliAnaPhoton::MakeAnalysisFillAOD - Wrong track index\n");
+          AliVEvent * event = GetReader()->GetInputEvent();
+          track = dynamic_cast<AliVTrack*> (event->GetTrack(iESDtrack));
+        }
+        else {
+          track = dynamic_cast<AliVTrack*>(calo->GetTrackMatched(0));
+        }
+        
+        if(track) {
+          
+          Float_t dEdx = track->GetTPCsignal();
+          fhdEdx->Fill(calo->E(), dEdx);
+          
+          Float_t eOverp = calo->E()/track->P();
+          fhEOverP->Fill(calo->E(),  eOverp);
+          
+        }
+        
+        if(IsDataMC()){
+          Int_t tag = GetMCAnalysisUtils()->CheckOrigin(calo->GetLabels(),calo->GetNLabels(),GetReader(), 0);
+          if  ( !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)  ){
+            
+            if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                       GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(calo->E(), 2.5 );
+            else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(calo->E(), 0.5 );
+            else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(calo->E(), 1.5 );
+            else                                                                                 fhTrackMatchedMCParticle->Fill(calo->E(), 3.5 );
+            
+          }
+          else{
+            
+            if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                       GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(calo->E(), 6.5 );
+            else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(calo->E(), 4.5 );
+            else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(calo->E(), 5.5 );
+            else                                                                                 fhTrackMatchedMCParticle->Fill(calo->E(), 7.5 );
+            
+          }        
+          
+        } // MC
+        
+      } // residual window
+      
+    } // Fill Track matching histo
     
     //--------------------------------------------------------------------------------------
     //Play with the MC stack if available
index 55e6ae29ceed54f4cc3ae378fe6fc591d01634f8..f879c44ab36f6e0fe882f43493483718a22885e6 100755 (executable)
@@ -214,17 +214,24 @@ class AliAnaPhoton : public AliAnaCaloTrackCorrBaseClass {
   TH2F * fhEmbedPi0ELambda0FullBkg ;            //!  Lambda0 vs E for embedded photons with less than 10% of the cluster energy
   
   // Track Matching
-  TH2F * fhTrackMatchedDEta          ;          //! Eta distance between track and cluster vs cluster E
-  TH2F * fhTrackMatchedDPhi          ;          //! Phi distance between track and cluster vs cluster E
-  TH2F * fhTrackMatchedDEtaDPhi      ;          //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
+  TH2F * fhTrackMatchedDEta          ;          //! Eta distance between track and cluster vs cluster E, after photon cuts
+  TH2F * fhTrackMatchedDPhi          ;          //! Phi distance between track and cluster vs cluster E, after photon cuts
+  TH2F * fhTrackMatchedDEtaDPhi      ;          //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after photon cuts
   TH2F * fhTrackMatchedDEtaNoCut     ;          //! Eta distance between track and cluster vs cluster E
   TH2F * fhTrackMatchedDPhiNoCut     ;          //! Phi distance between track and cluster vs cluster E
   TH2F * fhTrackMatchedDEtaDPhiNoCut ;          //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
   
+  TH2F * fhdEdx;                                //! matched track dEdx vs cluster E, after photon cuts 
+  TH2F * fhEOverP;                              //! matched track E cluster over P track vs cluster E, after dEdx cut, after photon cuts 
+  TH2F * fhdEdxNoCut;                           //! matched track dEdx vs cluster E, after photon cuts 
+  TH2F * fhEOverPNoCut;                         //! matched track E cluster over P track vs cluster E, after dEdx cut 
+  TH2F * fhTrackMatchedMCParticle;              //! Trace origin of matched particle
+  TH2F * fhTrackMatchedMCParticleNoCut;         //! Trace origin of matched particle
+
   AliAnaPhoton(              const AliAnaPhoton & g) ; // cpy ctor
   AliAnaPhoton & operator = (const AliAnaPhoton & g) ; // cpy assignment
   
-  ClassDef(AliAnaPhoton,20)
+  ClassDef(AliAnaPhoton,21)
 
 } ;
  
index 43e550fd2e2b345a6824f587115a43b90bb32088..4623f105381494cdb4dc100ccf6b6f5d70fc230a 100755 (executable)
@@ -66,7 +66,8 @@ AliAnaPi0EbE::AliAnaPi0EbE() :
     // Weight studies
     fhECellClusterRatio(0),        fhECellClusterLogRatio(0),                 
     fhEMaxCellClusterRatio(0),     fhEMaxCellClusterLogRatio(0),
-    fhTrackMatchedDEta(0x0),       fhTrackMatchedDPhi(0x0),      fhTrackMatchedDEtaDPhi(0x0)
+    fhTrackMatchedDEta(0),         fhTrackMatchedDPhi(0),        fhTrackMatchedDEtaDPhi(0),
+    fhdEdx(0),                     fhEOverP(0),                  fhTrackMatchedMCParticle(0)
 {
   //default ctor
   
@@ -135,7 +136,7 @@ void AliAnaPi0EbE::FillSelectedClusterHistograms(AliVCluster* cluster, const Int
 
     if(cluster->IsEMCAL() && GetCaloUtils()->IsRecalculationOfClusterTrackMatchingOn()){
       dR = 2000., dZ = 2000.;
-      GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dR,dZ);
+      GetCaloUtils()->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dZ,dR);
     }    
     //printf("Pi0EbE: dPhi %f, dEta %f\n",dR,dZ);
 
@@ -144,6 +145,52 @@ void AliAnaPi0EbE::FillSelectedClusterHistograms(AliVCluster* cluster, const Int
       fhTrackMatchedDPhi->Fill(e,dR);
       if(e > 0.5) fhTrackMatchedDEtaDPhi->Fill(dZ,dR);
     }
+    
+    // Check dEdx and E/p of matched clusters
+    
+    if(TMath::Abs(dZ) < 0.05 && TMath::Abs(dR) < 0.05)
+    {
+      AliVTrack *track = 0;
+      if(!strcmp("AliESDCaloCluster",Form("%s",cluster->ClassName()))){
+        Int_t iESDtrack = cluster->GetTrackMatchedIndex();
+        if(iESDtrack<0) printf("AliAnaPi0EbE::FillSelectedCluster - Wrong track index\n");
+        AliVEvent * event = GetReader()->GetInputEvent();
+        track = dynamic_cast<AliVTrack*> (event->GetTrack(iESDtrack));
+      }
+      else {
+        track = dynamic_cast<AliVTrack*>(cluster->GetTrackMatched(0));
+      }
+      
+      if(track) {
+        
+        Float_t dEdx = track->GetTPCsignal();
+        fhdEdx->Fill(e, dEdx);
+        
+        Float_t eOverp = e/track->P();
+        fhEOverP->Fill(e,  eOverp);
+        
+      }
+      
+      if(IsDataMC()){
+        if  ( !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)  )
+        {
+          if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(e, 2.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(e, 0.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(e, 1.5 );
+          else                                                                                 fhTrackMatchedMCParticle->Fill(e, 3.5 );
+          
+        }
+        else
+        {
+          if       ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0)      ||
+                     GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEta)       ) fhTrackMatchedMCParticle->Fill(e, 6.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPhoton)    ) fhTrackMatchedMCParticle->Fill(e, 4.5 );
+          else if  ( GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)  ) fhTrackMatchedMCParticle->Fill(e, 5.5 );
+          else                                                                                 fhTrackMatchedMCParticle->Fill(e, 7.5 );
+        }        
+      }  // MC              
+    }
   }// Track matching histograms   
   
   if(IsDataMC()) {
@@ -343,6 +390,14 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
   Float_t resphimax   = GetHistogramRanges()->GetHistoTrackResidualPhiMax();          
   Float_t resphimin   = GetHistogramRanges()->GetHistoTrackResidualPhiMin();
   
+  Int_t   ndedxbins   = GetHistogramRanges()->GetHistodEdxBins();         
+  Float_t dedxmax     = GetHistogramRanges()->GetHistodEdxMax();         
+  Float_t dedxmin     = GetHistogramRanges()->GetHistodEdxMin();
+  Int_t   nPoverEbins = GetHistogramRanges()->GetHistoPOverEBins();       
+  Float_t pOverEmax   = GetHistogramRanges()->GetHistoPOverEMax();       
+  Float_t pOverEmin   = GetHistogramRanges()->GetHistoPOverEMin();
+  
+  
   fhPt  = new TH1F("hPt","Number of identified  #pi^{0} (#eta) decay",nptbins,ptmin,ptmax); 
   fhPt->SetYTitle("N");
   fhPt->SetXTitle("p_{T} (GeV/c)");
@@ -450,21 +505,21 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
   
   if(fFillTMHisto){
     fhTrackMatchedDEta  = new TH2F
-    ("TrackMatchedDEta",
+    ("hTrackMatchedDEta",
      "d#eta of cluster-track vs cluster energy",
      nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax); 
     fhTrackMatchedDEta->SetYTitle("d#eta");
     fhTrackMatchedDEta->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDPhi  = new TH2F
-    ("TrackMatchedDPhi",
+    ("hTrackMatchedDPhi",
      "d#phi of cluster-track vs cluster energy",
      nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
     fhTrackMatchedDPhi->SetXTitle("E_{cluster} (GeV)");
     
     fhTrackMatchedDEtaDPhi  = new TH2F
-    ("TrackMatchedDEtaDPhi",
+    ("hTrackMatchedDEtaDPhi",
      "d#eta vs d#phi of cluster-track vs cluster energy",
      nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax); 
     fhTrackMatchedDEtaDPhi->SetYTitle("d#phi (rad)");
@@ -473,6 +528,37 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
     outputContainer->Add(fhTrackMatchedDEta) ; 
     outputContainer->Add(fhTrackMatchedDPhi) ;
     outputContainer->Add(fhTrackMatchedDEtaDPhi) ;
+    
+    fhdEdx  = new TH2F ("hdEdx","matched track <dE/dx> vs cluster E ", nptbins,ptmin,ptmax,ndedxbins, dedxmin, dedxmax); 
+    fhdEdx->SetXTitle("E (GeV)");
+    fhdEdx->SetYTitle("<dE/dx>");
+    outputContainer->Add(fhdEdx);  
+    
+    fhEOverP  = new TH2F ("hEOverP","matched track E/p vs cluster E ", nptbins,ptmin,ptmax,nPoverEbins,pOverEmin,pOverEmax); 
+    fhEOverP->SetXTitle("E (GeV)");
+    fhEOverP->SetYTitle("E/p");
+    outputContainer->Add(fhEOverP);   
+    
+    if(IsDataMC())
+    {
+      fhTrackMatchedMCParticle  = new TH2F
+      ("hTrackMatchedMCParticle",
+       "Origin of particle vs energy",
+       nptbins,ptmin,ptmax,8,0,8); 
+      fhTrackMatchedMCParticle->SetXTitle("E (GeV)");   
+      //fhTrackMatchedMCParticle->SetYTitle("Particle type");
+      
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(1 ,"Photon");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(2 ,"Electron");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(3 ,"Meson Merged");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(4 ,"Rest");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(5 ,"Conv. Photon");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(6 ,"Conv. Electron");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(7 ,"Conv. Merged");
+      fhTrackMatchedMCParticle->GetYaxis()->SetBinLabel(8 ,"Conv. Rest");
+      
+      outputContainer->Add(fhTrackMatchedMCParticle);   
+    }
   }  
   
   if(fFillWeightHistograms){
index 5b5dcfad38907f0e80fd60c024a3cf2167d7f642..9a00ddf66580de5d4f874b1f7bd33403b20baca6 100755 (executable)
@@ -149,7 +149,9 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   TH2F         * fhTrackMatchedDEta     ;  //! Eta distance between track and cluster vs cluster E
   TH2F         * fhTrackMatchedDPhi     ;  //! Phi distance between track and cluster vs cluster E
   TH2F         * fhTrackMatchedDEtaDPhi ;  //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
-  
+  TH2F         * fhdEdx  ;                 //! matched track dEdx vs cluster E 
+  TH2F         * fhEOverP;                 //! matched track E cluster over P track vs cluster E, after dEdx cut 
+  TH2F         * fhTrackMatchedMCParticle; //! Trace origin of matched particle
   
   AliAnaPi0EbE(              const AliAnaPi0EbE & g) ; // cpy ctor
   AliAnaPi0EbE & operator = (const AliAnaPi0EbE & g) ; // cpy assignment