]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/totEt/AliAnalysisEtReconstructedPhos.cxx
Merge remote-tracking branch 'origin/master' into flatdev
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisEtReconstructedPhos.cxx
index c2b2c7bbc31afc6b52e956570d6a7c0a89f69296..dbec5cad61b1161cdb416fdef785aeb1b70f2196 100644 (file)
@@ -7,8 +7,16 @@
 //*-- 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);
@@ -18,98 +26,117 @@ const Double_t kMEANCHARGED = 0.335;
 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;
 }
-
-
-
-
-
-