1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
3 // Base class for MC analysis, for PHOS
7 //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
8 //_________________________________________________________________________
9 #include "AliAnalysisEtMonteCarloPhos.h"
10 #include "AliAnalysisEtSelectorPhos.h"
11 #include "AliAnalysisEtCuts.h"
12 #include "AliESDtrack.h"
14 #include "AliPHOSGeoUtils.h"
17 #include <AliPHOSGeometry.h>
21 ClassImp(AliAnalysisEtMonteCarloPhos);
24 AliAnalysisEtMonteCarloPhos::AliAnalysisEtMonteCarloPhos():AliAnalysisEtMonteCarlo()
29 fHistogramNameSuffix = TString("PhosMC");
32 AliAnalysisEtMonteCarloPhos::~AliAnalysisEtMonteCarloPhos()
37 void AliAnalysisEtMonteCarloPhos::Init()
39 AliAnalysisEtMonteCarlo::Init();
40 fSelector = new AliAnalysisEtSelectorPhos(fCuts);
42 fSelector->Init(137366);
43 fClusterType = fCuts->GetPhosClusterType();
44 fDetectorRadius = fCuts->GetGeometryPhosDetectorRadius();
45 fEtaCutAcc = fCuts->GetGeometryPhosEtaAccCut();
46 fPhiCutAccMax = fCuts->GetGeometryPhosPhiAccMaxCut() * TMath::Pi()/180.;
47 fPhiCutAccMin = fCuts->GetGeometryPhosPhiAccMinCut() * TMath::Pi()/180.;
48 fClusterEnergyCut = fCuts->GetReconstructedPhosClusterEnergyCut();
49 fSingleCellEnergyCut = fCuts->GetReconstructedPhosSingleCellEnergyCut();
51 fTrackDistanceCut = fCuts->GetPhosTrackDistanceCut();
52 fTrackDxCut = fCuts->GetPhosTrackDxCut();
53 fTrackDzCut = fCuts->GetPhosTrackDzCut();
55 fDetector = fCuts->GetDetectorPhos();
57 // ifstream f("badchannels.txt", ios::in);
58 TFile *f = TFile::Open("badchannels.root", "READ");
60 fBadMapM2 = (TH2I*)f->Get("bad_channels_m2");
61 fBadMapM3 = (TH2I*)f->Get("bad_channels_m3");
62 fBadMapM4 = (TH2I*)f->Get("bad_channels_m4");
64 // fGeoUtils = new AliPHOSGeoUtils("PHOS", "noCPV");
65 fGeoUtils = AliPHOSGeometry::GetInstance("IHEP");
70 Bool_t AliAnalysisEtMonteCarloPhos::TooCloseToBadChannel(const AliESDCaloCluster &cluster) const
74 cluster.GetPosition(gPos);
77 fGeoUtils->GlobalPos2RelId(glVec, relId);
80 fGeoUtils->Global2Local(locVec, glVec, relId[0]);
81 // std::cout << fGeoUtils << std::endl;
82 //std::cout << relId[0] << " " << cluster.IsPHOS() << std::endl;
83 //std::cout << locVec[0] << " " << " " << locVec[1] << " " << locVec[2] << std::endl;
84 for (Int_t x = 0; x < fBadMapM2->GetNbinsX(); x++)
86 for (Int_t z = 0; z < fBadMapM2->GetNbinsY(); z++)
90 if (fBadMapM2->GetBinContent(x+1, z+1) != 0)
100 fGeoUtils->RelPosInModule(tmpRel, tmpX, tmpZ);
102 Float_t distance = TMath::Sqrt((tmpX-locVec[0])*(tmpX-locVec[0]) + (tmpZ - locVec[2])*(tmpZ-locVec[2]));
103 //Float_t distance = TMath::Sqrt((x-relId[3])*(x-relId[3]) + (z - relId[2])*(z-relId[2]));
104 if (distance < fCuts->GetPhosBadDistanceCut())
106 // std::cout << "d: " << distance << ", cut: " << fCuts->GetPhosBadDistanceCut() << std::endl;
114 if (fBadMapM3->GetBinContent(x+1, z+1) != 0)
124 fGeoUtils->RelPosInModule(tmpRel, tmpX, tmpZ);
126 Float_t distance = TMath::Sqrt((tmpX-locVec[0])*(tmpX-locVec[0]) + (tmpZ - locVec[2])*(tmpZ-locVec[2]));
128 // Float_t distance = TMath::Sqrt((x-locVec[0])*(x-locVec[0]) + (z - locVec[2])*(z-locVec[2]));
129 //Float_t distance = TMath::Sqrt((x-relId[3])*(x-relId[3]) + (z - relId[2])*(z-relId[2]));
130 if (distance < fCuts->GetPhosBadDistanceCut())
132 // std::cout << "d: " << distance << ", cut: " << fCuts->GetPhosBadDistanceCut() << std::endl;
140 if (fBadMapM4->GetBinContent(x+1, z+1) != 0)
150 fGeoUtils->RelPosInModule(tmpRel, tmpX, tmpZ);
152 Float_t distance = TMath::Sqrt((tmpX-locVec[0])*(tmpX-locVec[0]) + (tmpZ - locVec[2])*(tmpZ-locVec[2]));
154 // Float_t distance = TMath::Sqrt((x-locVec[0])*(x-locVec[0]) + (z - locVec[2])*(z-locVec[2]));
155 //Float_t distance = TMath::Sqrt((x-relId[3])*(x-relId[3]) + (z - relId[2])*(z-relId[2]));
156 if (distance < fCuts->GetPhosBadDistanceCut())
158 // std::cout << "d: " << distance << ", cut: " << fCuts->GetPhosBadDistanceCut() << std::endl;