#include "TString.h"
#include "AliCentrality.h"
#include "AliAnalysisEtSelector.h"
-
- //#include "THnSparse.h"
+#include "AliAnalysisEtTrackMatchCorrections.h"
+#include "AliAnalysisEtRecEffCorrection.h"
+#include "TFile.h"
+#include "TVector3.h"
using namespace std;
ClassImp(AliAnalysisEt);
AliAnalysisEt::AliAnalysisEt() : AliAnalysisEtCommon()
+ ,fTmCorrections(0)
+ ,fReCorrections(0)
,fEventSummaryTree(0)
,fAcceptedTree(0)
,fDepositTree(0)
,fTotEt(0)
+ ,fTotEtAcc(0)
,fTotNeutralEt(0)
+ ,fTotNeutralEtAcc(0)
,fTotChargedEt(0)
+ ,fTotChargedEtAcc(0)
,fMultiplicity(0)
,fChargedMultiplicity(0)
,fNeutralMultiplicity(0)
AliAnalysisEt::~AliAnalysisEt()
{//Destructor
+ delete fTmCorrections;
+ delete fReCorrections;
if(fDepositTree){
fDepositTree->Clear();
delete fDepositTree; // optional TTree
fEventSummaryTree->Clear();
delete fEventSummaryTree;
}
+ if(fAcceptedTree)
+ {
+ fAcceptedTree->Clear();
+ delete fAcceptedTree;
+ }
delete fHistEt; //Et spectrum
delete fHistNeutralMult; //Neutral multiplicity
delete fHistPhivsPtPos; //phi vs pT plot for positive tracks
- delete fHistPhivsPtNeg; //phi vs pT plot for negative tracks
+ delete fHistPhivsPtNeg; //phi vs pT Moplot for negative tracks
//delete fCentrality;//this code does not actually own AliCentrality so we don't have to worry about deleting it... we just borrow it...
+ delete fCutFlow;
+ delete fSelector;
}
void AliAnalysisEt::FillOutputList(TList *list)
void AliAnalysisEt::Init()
{// clear variables, set up cuts and PDG info
AliAnalysisEtCommon::Init();
+ if(ReadCorrections("calocorrections.root") != 0)
+ {
+ // Shouldn't do this, why oh why are exceptions not allowed?
+ exit(-1);
+ }
ResetEventValues();
}
fEventSummaryTree = new TTree(treename, treename);
fEventSummaryTree->Branch("fTotEt",&fTotEt,"fTotEt/D");
+ fEventSummaryTree->Branch("fTotEtAcc",&fTotEtAcc,"fTotEtAcc/D");
fEventSummaryTree->Branch("fTotNeutralEt",&fTotNeutralEt,"fTotNeutralEt/D");
+ fEventSummaryTree->Branch("fTotNeutralEtAcc",&fTotNeutralEtAcc,"fTotNeutralEtAcc/D");
fEventSummaryTree->Branch("fTotChargedEt",&fTotChargedEt,"fTotChargedEt/D");
+ fEventSummaryTree->Branch("fTotChargedEtAcc",&fTotChargedEtAcc,"fTotChargedEtAcc/D");
fEventSummaryTree->Branch("fMultiplicity",&fMultiplicity,"fMultiplicity/I");
fEventSummaryTree->Branch("fChargedMultiplicity",&fChargedMultiplicity,"fChargedMultiplicity/I");
fEventSummaryTree->Branch("fNeutralMultiplicity",&fNeutralMultiplicity,"fNeutralMultiplicity/I");
{ // clear
AliAnalysisEtCommon::ResetEventValues();
fTotEt = 0;
+ fTotEtAcc = 0;
fTotNeutralEt = 0;
- fTotChargedEt = 0;
+ fTotChargedEt = 0;
+ fTotNeutralEtAcc = 0;
+ fTotChargedEtAcc = 0;
fMultiplicity = 0;
fChargedMultiplicity = 0;
fNeutralMultiplicity = 0;
return;
}
-Double_t AliAnalysisEt::CalculateTransverseEnergy(AliESDCaloCluster* cluster)
-{ // based on cluster energy and cluster pos
-
- Float_t pos[3];
- cluster->GetPosition(pos);
- TVector3 cp(pos);
- Double_t corrEnergy = 0;
-
- if(cluster->E() < 1.5)
- {
- corrEnergy =cluster->E()/(0.51 + 0.02*cluster->E());
- }
- else
+Int_t AliAnalysisEt::ReadCorrections(TString filename)
+{
+ TFile *f = TFile::Open(filename, "READ");
+ if(f)
{
- corrEnergy =cluster->E()/(0.51 + 0.02*1.5);
+ TString det = "Phos";
+ if(fHistogramNameSuffix.Contains("Emcal"))
+ {
+ det = "Emcal";
+ }
+ cout<<"Histo name suffix "<<fHistogramNameSuffix<<endl;
+ TString name = "TmCorrections" + det;
+ std::cout << name << std::endl;
+ fTmCorrections = dynamic_cast<AliAnalysisEtTrackMatchCorrections*>(f->Get(name));
+ if(!fTmCorrections)
+ {
+ cout<<"No corrections with name "<<name<<endl;
+ Printf("Could not load TM corrections");
+ return -1;
+ }
+ name = "ReCorrections" + det;
+ fReCorrections = dynamic_cast<AliAnalysisEtRecEffCorrection*>(f->Get(name));
+ if(!fReCorrections)
+ {
+ Printf("Could not load rec eff corrections");
+ return -1;
+ }
+ return 0;
}
- //std::cout << "Original energy: " << cluster->E() << ", corrected energy: " << corrEnergy << std::endl;
+ return -1;
+}
+
+Double_t AliAnalysisEt::CorrectForReconstructionEfficiency(const AliESDCaloCluster& cluster)
+{
+ Float_t pos[3];
+ cluster.GetPosition(pos);
+ TVector3 cp(pos);
+ Double_t corrEnergy = fReCorrections->CorrectedEnergy(cluster.E());
- return corrEnergy * TMath::Sin(cp.Theta());
+ //std::cout << "Original energy: " << cluster.E() << ", corrected energy: " << corrEnergy << std::endl;
+ return TMath::Sin(cp.Theta())*corrEnergy;
}