/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * *
- * Author: The ALICE Off-line Project. *
- * Contributors are mentioned in the code where appropriate. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
+* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+* *
+* Author: The ALICE Off-line Project. *
+* Contributors are mentioned in the code where appropriate. *
+* *
+* Permission to use, copy, modify and distribute this software and its *
+* documentation strictly for non-commercial purposes is hereby granted *
+* without fee, provided that the above copyright notice appears in all *
+* copies and that both the copyright notice and this permission notice *
+* appear in the supporting documentation. The authors make no claims *
+* about the suitability of this software for any purpose. It is *
+* provided "as is" without express or implied warranty. *
+**************************************************************************/
//------------------------------------------------------------------------------
// AlidNdPtAnalysisPbPbAOD class.
//
// Author: P. Luettig, 15.05.2013
-// last modified: 18.02.2014
+// last modified: 10.06.2014
//------------------------------------------------------------------------------
/*
- * This task analysis measured data in PbPb collisions stored in AODs and extract
- * transverse momentum spectra for unidentified charged hadrons vs. centrality.
- * Based on MC the efficiency and secondary contamination are determined,
- * to correct the measured pT distribution.
- * Histograms for the pT resolution correction are also filled.
- *
- */
+* This task analysis measured data in PbPb collisions stored in AODs and extract
+* transverse momentum spectra for unidentified charged hadrons vs. centrality.
+* Based on MC the efficiency and secondary contamination are determined,
+* to correct the measured pT distribution.
+* Histograms for the pT resolution correction are also filled.
+*
+*/
#include "AlidNdPtAnalysisPbPbAOD.h"
fEventplaneDist(0),
fMCEventplaneDist(0),
fCorrelEventplaneMCDATA(0),
+// cross check for event plane resolution
+fEPDistCent(0),
+fPhiCent(0),
+fPcosEPCent(0),
+fPsinEPCent(0),
+fPcosPhiCent(0),
+fPsinPhiCent(0),
//global
fIsMonteCarlo(0),
fEPselector("Q"),
if (!fBinsPtCheck) { SetBinsPtCheck(20,binsPtCheckDefault); }
if (!fBinsEta) { SetBinsEta(31,binsEtaDefault); }
if (!fBinsEtaCheck) { SetBinsEtaCheck(7,binsEtaCheckDefault); }
- if (!fBinsZv) { SetBinsZv(13,binsZvDefault); }
+ if (!fBinsZv) { SetBinsZv(7,binsZvDefault); }
if (!fBinsCentrality) { SetBinsCentrality(12,binsCentralityDefault); }
if (!fBinsPhi) { SetBinsPhi(37,binsPhiDefault); }
fCorrelEventplaneMCDATA->GetYaxis()->SetTitle("#phi (MC event plane)");
fCorrelEventplaneMCDATA->Sumw2();
+ // cross check for event plane resolution
+ fEPDistCent = new TH2F("fEPDistCent","fEPDistCent",20, -1.*TMath::Pi(), TMath::Pi(), fCentralityNbins-1, fBinsCentrality);
+ fEPDistCent->GetXaxis()->SetTitle("#phi (#Psi_{EP})");
+ fEPDistCent->GetYaxis()->SetTitle("Centrality");
+ fEPDistCent->Sumw2();
+
+ fPhiCent = new TH2F("fPhiCent","fPhiCent",200, -2.*TMath::Pi(), 2.*TMath::Pi(), fCentralityNbins-1, fBinsCentrality);
+ fPhiCent->GetXaxis()->SetTitle("#phi");
+ fPhiCent->GetYaxis()->SetTitle("Centrality");
+ fPhiCent->Sumw2();
+
+ fPcosEPCent = new TProfile("fPcosEPCent","fPcosEPCent", 100,0,100);
+ fPcosEPCent->GetXaxis()->SetTitle("Centrality");
+ fPcosEPCent->GetYaxis()->SetTitle("#LT cos 2 #Psi_{EP} #GT");
+ fPcosEPCent->Sumw2();
+
+ fPsinEPCent = new TProfile("fPsinEPCent","fPsinEPCent", 100,0,100);
+ fPsinEPCent->GetXaxis()->SetTitle("Centrality");
+ fPsinEPCent->GetYaxis()->SetTitle("#LT sin 2 #Psi_{EP} #GT");
+ fPsinEPCent->Sumw2();
+
+ fPcosPhiCent = new TProfile("fPcosPhiCent","fPcosPhiCent", 100,0,100);
+ fPcosPhiCent->GetXaxis()->SetTitle("Centrality");
+ fPcosPhiCent->GetYaxis()->SetTitle("#LT cos 2 #phi #GT");
+ fPcosPhiCent->Sumw2();
+
+ fPsinPhiCent = new TProfile("fPsinPhiCent","fPsinPhiCent", 100,0,100);
+ fPsinPhiCent->GetXaxis()->SetTitle("Centrality");
+ fPsinPhiCent->GetYaxis()->SetTitle("#LT sin 2 #phi #GT");
+ fPsinPhiCent->Sumw2();
+
// Add Histos, Profiles etc to List
fOutputList->Add(fZvPtEtaCent);
fOutputList->Add(fDeltaphiPtEtaCent);
fOutputList->Add(fMCEventplaneDist);
fOutputList->Add(fCorrelEventplaneMCDATA);
+ fOutputList->Add(fEPDistCent);
+ fOutputList->Add(fPhiCent);
+ fOutputList->Add(fPcosEPCent);
+ fOutputList->Add(fPsinEPCent);
+ fOutputList->Add(fPcosPhiCent);
+ fOutputList->Add(fPsinPhiCent);
+
StoreCutSettingsToHistogram();
PostData(1, fOutputList);
// only take tracks of events, which are triggered
if(nTriggerFired == 0) { return; }
+
// if( !bIsEventSelected || nTriggerFired>1 ) return;
// fEventStatistics->Fill("events with only coll. cand.", 1);
Double_t dCentrality = aCentrality->GetCentralityPercentile("V0M");
if( dCentrality < 0 ) return;
+
+ // protection for bias on pt spectra if all triggers selected
+ // if( (bIsEventSelectedCentral) /*&& (!bIsEventSelectedSemi) && (!bIsEventSelectedMB)*/ && (dCentrality > 10) ) return;
+ // if( /*(!bIsEventSelectedCentral) &&*/ (bIsEventSelectedSemi) /*&& (!bIsEventSelectedMB)*/ && (dCentrality < 20) && (dCentrality > 50)) return;
+ if( (bIsEventSelectedCentral) && (dCentrality > 10) ) return;
+ if( (bIsEventSelectedSemi) && ((dCentrality < 20) || (dCentrality > 50))) return;
+
fEventStatistics->Fill("after centrality selection",1);
// get event plane Angle from AODHeader, default is Q
// cout << dEventplaneAngle << endl;
fEventplaneDist->Fill(dEventplaneAngle);
+ // fill crosscheck histos
+ fEPDistCent->Fill(dEventplaneAngle, dCentrality);
+ fPcosEPCent->Fill(dCentrality, TMath::Cos(2.*dEventplaneAngle));
+ fPsinEPCent->Fill(dCentrality, TMath::Sin(2.*dEventplaneAngle));
+
// start with MC truth analysis
if(fIsMonteCarlo)
{
fMCGenZvPtEtaCent->Fill(dMCTrackZvPtEtaCent);
dMCTrackPhiPtEtaCent[0] = RotatePhi(mcPart->Phi(), dEventplaneAngle); // use eventplane and not reactionplan, similar to centrality vs impact paramter
-// if( dMCTrackPhiPtEtaCent[0] < 0) dMCTrackPhiPtEtaCent[0] += 2.*TMath::Pi();
-// else if( dMCTrackPhiPtEtaCent[0] > 2.*TMath::Pi()) dMCTrackPhiPtEtaCent[0] -= 2.*TMath::Pi();
+ // if( dMCTrackPhiPtEtaCent[0] < 0) dMCTrackPhiPtEtaCent[0] += 2.*TMath::Pi();
+ // else if( dMCTrackPhiPtEtaCent[0] > 2.*TMath::Pi()) dMCTrackPhiPtEtaCent[0] -= 2.*TMath::Pi();
dMCTrackPhiPtEtaCent[1] = mcPart->Pt();
dMCTrackPhiPtEtaCent[2] = mcPart->Eta();
dMCTrackPhiPtEtaCent[3] = dCentrality;
bEventHasATrackInRange = kTRUE;
fPt->Fill(track->Pt());
fCharge->Fill(track->Charge());
+
+ fPhiCent->Fill(track->Phi(), dCentrality);
+ fPcosPhiCent->Fill(dCentrality, TMath::Cos(2.*track->Phi()));
+ fPsinPhiCent->Fill(dCentrality, TMath::Sin(2.*track->Phi()));
}
} // end track loop
Double_t dPhi = 0;
dPhi = phiTrack - phiEP;
if ((dPhi >= -1./2. * TMath::Pi() ) &&
- (dPhi <= 1./2. * TMath::Pi() ) )
+ (dPhi <= 1./2. * TMath::Pi() ) )
{
return dPhi;
}
}
if ((dPhi > 0) &&
- (dPhi > 1./2. * TMath::Pi() ) &&
- (dPhi <= 3./2. * TMath::Pi() ) )
+ (dPhi > 1./2. * TMath::Pi() ) &&
+ (dPhi <= 3./2. * TMath::Pi() ) )
{
dPhi -= TMath::Pi();
return dPhi;
}
if ((dPhi > 0) &&
- (dPhi > 3./2. * TMath::Pi() ))
+ (dPhi > 3./2. * TMath::Pi() ))
{
dPhi -= 2.*TMath::Pi();
return dPhi;
}
-// Printf("[E] dphi = %.4f , phiTrack = %.4f, phiEP = %.4f", dPhi, phiTrack, phiEP);
+ // Printf("[E] dphi = %.4f , phiTrack = %.4f, phiEP = %.4f", dPhi, phiTrack, phiEP);
return -9999.;
}
if(dNClustersTPC < GetCutMinNClustersTPC()) { return kFALSE; }
if (IsITSRefitRequired() && !(tr->GetStatus() & AliVTrack::kITSrefit)) { return kFALSE; } // no ITS refit
-
- // do a relativ cut in Nclusters, both time at 80% of mean
- // if(fIsMonteCarlo)
- // {
- // if(dNClustersTPC < 88) { return kFALSE; }
- // }
- // else
- // {
- // if(dNClustersTPC < 76) { return kFALSE; }
- // }
-
- // fill histogram for pT resolution correction
- Double_t dPtResolutionHisto[3] = { dOneOverPt, dSigmaOneOverPt, dCentrality };
- fPtResptCent->Fill(dPtResolutionHisto);
-
- // fill debug histogram for all accepted tracks
- FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
-
- // delete pointers
-
- return kTRUE;
+
+ // do a relativ cut in Nclusters, both time at 80% of mean
+ // if(fIsMonteCarlo)
+ // {
+ // if(dNClustersTPC < 88) { return kFALSE; }
+ // }
+ // else
+ // {
+ // if(dNClustersTPC < 76) { return kFALSE; }
+ // }
+
+ // fill histogram for pT resolution correction
+ Double_t dPtResolutionHisto[3] = { dOneOverPt, dSigmaOneOverPt, dCentrality };
+ fPtResptCent->Fill(dPtResolutionHisto);
+
+ // fill debug histogram for all accepted tracks
+ FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
+
+ // delete pointers
+
+ return kTRUE;
}
Bool_t AlidNdPtAnalysisPbPbAOD::FillDebugHisto(Double_t *dCrossCheckVar, Double_t *dKineVar, Double_t dCentrality, Bool_t bIsAccepted)