//*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
//_________________________________________________________________________
#include "AliAnalysisEtReconstructedPhos.h"
+#include "AliAnalysisEtSelectorPhos.h"
#include "AliAnalysisEtCuts.h"
#include "AliESDtrack.h"
+#include <fstream>
+#include <iostream>
+#include <AliPHOSGeoUtils.h>
+#include "AliPHOSGeometry.h"
+#include <vector>
+#include "TH2I.h"
+
using namespace std;
ClassImp(AliAnalysisEtReconstructedPhos);
const Double_t kMEANNEUTRAL = 0.434;
const Double_t kMEANGAMMA = 0.374;
-// Best case (pions and K0s):
+// Best case (pions and K0s):
const Double_t kMEANCHARGED = 0.304;
const Double_t kMEANNEUTRAL = 0.3356;
const Double_t kMEANGAMMA = 0.374;
*/
// Simulated case:
-const Double_t kMEANCHARGED = 0.307;
-const Double_t kMEANNEUTRAL = 0.407;
-const Double_t kMEANGAMMA = 0.374;
+//corrEnergy =cluster->E()/(0.31 + 0.02*cluster->E());
+const Double_t kMEANCHARGED = 0.48/(0.31 + 0.00*0.48);
+const Double_t kMEANNEUTRAL = 0.53/(0.31 + 0.00*0.53);
+const Double_t kMEANGAMMA = 0.51/(0.31 + 0.00*0.31);
AliAnalysisEtReconstructedPhos::AliAnalysisEtReconstructedPhos() :
-AliAnalysisEtReconstructed()
-{
- fHistogramNameSuffix = TString("PhosRec");
+ AliAnalysisEtReconstructed()
+{ // ctor
+ fHistogramNameSuffix = TString("PhosRec");
+
+// fChargedContributionCorrectionParameters[0] = -0.017;
+// fChargedContributionCorrectionParameters[1] = 0.065;
+//
+// fNeutralContributionCorrectionParameters[0] = -0.002;
+// fNeutralContributionCorrectionParameters[1] = 0.017;
+// fNeutralContributionCorrectionParameters[2] = -3.6e-5;
+//
+// fRemovedGammaContributionCorrectionParameters[0] = 0.001;
+// fRemovedGammaContributionCorrectionParameters[1] = 0.37e-5;
+// fRemovedGammaContributionCorrectionParameters[2] = 0.0003;
+
+ fChargedContributionCorrectionParameters[0] = -0.06;
+ fChargedContributionCorrectionParameters[1] = 0.316;
+ fChargedContributionCorrectionParameters[2] = 0.0022;
+
+ fNeutralContributionCorrectionParameters[0] = -0.003;
+ fNeutralContributionCorrectionParameters[1] = 0.232;
+ fNeutralContributionCorrectionParameters[2] = 0.002;
+
+ fRemovedGammaContributionCorrectionParameters[0] = 0.001;
+ fRemovedGammaContributionCorrectionParameters[1] = 0.009;
+ fRemovedGammaContributionCorrectionParameters[2] = 0.0;
+
+ fSecondaryContributionCorrectionParameters[0] = -0.03;
+ fSecondaryContributionCorrectionParameters[1] = 0.221;
+ fSecondaryContributionCorrectionParameters[2] = 0.002;
+
}
-AliAnalysisEtReconstructedPhos::~AliAnalysisEtReconstructedPhos()
+AliAnalysisEtReconstructedPhos::~AliAnalysisEtReconstructedPhos()
{
}
void AliAnalysisEtReconstructedPhos::Init()
{ // Init
- AliAnalysisEtReconstructed::Init();
+ AliAnalysisEtReconstructed::Init();
+
- fDetectorRadius = fCuts->GetGeometryPhosDetectorRadius();
- fEtaCutAcc = fCuts->GetGeometryPhosEtaAccCut();
- fPhiCutAccMax = fCuts->GetGeometryPhosPhiAccMaxCut() * TMath::Pi()/180.;
- fPhiCutAccMin = fCuts->GetGeometryPhosPhiAccMinCut() * TMath::Pi()/180.;
- fClusterEnergyCut = fCuts->GetReconstructedPhosClusterEnergyCut();
- fSingleCellEnergyCut = fCuts->GetReconstructedPhosSingleCellEnergyCut();
-
- fClusterType = fCuts->GetReconstructedPhosClusterType();
- fTrackDistanceCut = fCuts->GetPhosTrackDistanceCut();
- fTrackDxCut = fCuts->GetPhosTrackDxCut();
- fTrackDzCut = fCuts->GetPhosTrackDzCut();
-
- fDetector = fCuts->GetDetectorPhos();
-
- fGeomCorrection = 1.0/0.036;
-
- fEMinCorrection = 1.0;
+ fDetectorRadius = fCuts->GetGeometryPhosDetectorRadius();
+ fSingleCellEnergyCut = fCuts->GetReconstructedPhosSingleCellEnergyCut();
+ fSelector = new AliAnalysisEtSelectorPhos(fCuts);
}
bool AliAnalysisEtReconstructedPhos::TrackHitsCalorimeter(AliVParticle* track, Double_t magField)
-{
- return AliAnalysisEtReconstructed::TrackHitsCalorimeter(track, magField);
+{
+ return AliAnalysisEtReconstructed::TrackHitsCalorimeter(track, magField);
}
-Double_t AliAnalysisEtReconstructedPhos::GetChargedContribution(Int_t clusterMult)
-{ // Charged contrib
- if(clusterMult > 0)
- {
- Double_t nPart = 0.067 + 0.137*clusterMult;
-
- Double_t contr = nPart*kMEANCHARGED;
-
- return contr;
- }
- return 0;
-
-}
-Double_t AliAnalysisEtReconstructedPhos::GetNeutralContribution(Int_t clusterMult)
-{ // Neutral contrib
- if(clusterMult > 0)
- {
- Double_t nPart = 0.012 + 0.024*clusterMult - 0.00006*clusterMult*clusterMult;
-
- Double_t contr = nPart*kMEANNEUTRAL;
-
- return contr;
+
+void AliAnalysisEtReconstructedPhos::CreateHistograms()
+{ // add some extra histograms & objects to the ones from base class
+ if(!fSelector){
+ cout<<__FILE__<<" "<<"Creating new fSelector"<<endl;
+ fSelector = new AliAnalysisEtSelectorPhos(fCuts);
}
- return 0;
+ AliAnalysisEtReconstructed::CreateHistograms();
}
-Double_t AliAnalysisEtReconstructedPhos::GetGammaContribution(Int_t clusterMult)
-{ // Gamma contrib
- if(clusterMult > 0)
- {
- Double_t nPart = -0.008 + 0.0057*clusterMult + 0.0002*clusterMult*clusterMult;
-
- Double_t contr = nPart*kMEANGAMMA;
-
- return contr;
+Double_t AliAnalysisEtReconstructedPhos::GetCorrectionModification(const AliESDCaloCluster& cluster,Int_t nonLinCorr, Int_t effCorr, Int_t cent){//nonLinCorr 0 = nominal 1 = high -1 = low, effCorr 0 = nominal 1 = high -1 = low
+ Double_t factor = 1.0;
+ if(nonLinCorr!=0){
+ if(nonLinCorr==1){//high bound on nonlinearity
+ Double_t a1=0.045-0.010;
+ Double_t a2=0.045+0.010;
+ Double_t b1=1.055-0.450 ;
+ Double_t b2=1.055+0.450 ;
+ Double_t y = (1+a2/(1+cluster.E()*cluster.E()/b2/b2))/(1+a1/(1+cluster.E()*cluster.E()/b1/b1)) ;
+ factor *=y*GetCorrectionModification(cluster,0,0,cent);
+ }
+ else{//nonLinCorr==-1
+ Double_t a1=0.045-0.010;
+ Double_t a2=0.045+0.010;
+ Double_t b1=1.055-0.450 ;
+ Double_t b2=1.055+0.450 ;
+ Double_t y = (1+a1/(1+cluster.E()*cluster.E()/b1/b1))/(1+a2/(1+cluster.E()*cluster.E()/b2/b2)) ;
+ factor *=y*GetCorrectionModification(cluster,0,0,cent);
+ }
}
- return 0;
+ else{//nonlinearity correction
+ factor = 0.9728*(1+0.02/(1+cluster.E()*cluster.E()/1.5));
+ }
+ if(effCorr!=0){
+ if(effCorr==1){//high bound
+ factor *=1.005*GetCorrectionModification(cluster,0,0,cent);
+ }
+ else{//low bound
+ factor *=0.995*GetCorrectionModification(cluster,0,0,cent);
+ }
+ if(cent<0){//this condition will never be met but it will stop a compiler warning that results in Coverity sending me an email about once every two weeks.
+ Double_t E = cluster.E();
+ factor = 1.0*E;
+ }
+ }
+ return factor;
}
-
-
-
-
-
-