// 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()) {
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++)
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) {
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.),
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;
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)");
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){
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);
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)
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
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)
} ;
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
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){
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())) {
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++)
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)");
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)");
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);
+ }
}
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){
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
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)
} ;
// 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
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);
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()) {
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)");
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)");
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){
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