//_________________________________________________________________________
// Class for the analysis of gamma-jet correlations
-//
+// Basically it seaches for a prompt photon in the PHOS acceptance,
+// if so we construct a jet around the highest pt particle in the opposite
+// side in azimuth, inside the TPC and EMCAL acceptances. First the leading
+// particle and then the jet have to fullfill several conditions
+// (energy, direction ..) to be accepted. Then the fragmentation function
+// of this jet is constructed
//
//*-- Author: Gustavo Conesa & Yves Schutz (IFIC, CERN)
//////////////////////////////////////////////////////////////////////////////
// --- ROOT system ---
-#include "TString.h"
-#include "TFile.h"
-#include "TLorentzVector.h"
-#include "TList.h"
-#include "TTree.h"
-#include "TNtuple.h"
#include "TParticle.h"
#include "TCanvas.h"
#include "TPaveLabel.h"
#include "TPad.h"
-#include "TArrayC.h"
-#include "AliRun.h"
#include "AliPHOSGammaJet.h"
#include "AliPHOSGetter.h"
+#include "TH2.h"
#include "AliPHOSGeometry.h"
-#include "TF1.h"
-#include "Riostream.h"
-#include "../PYTHIA6/AliGenPythia.h"
+#include "AliPHOSFastGlobalReconstruction.h"
+//#include "Riostream.h"
+//#include "../PYTHIA6/AliGenPythia.h"
ClassImp(AliPHOSGammaJet)
// ctor
fAngleMaxParam.Set(4) ;
fAngleMaxParam.Reset(0.);
- fAnyConeOrPt = kFALSE ;
+ fAnyConeOrPt = 0 ;
fEtaCut = 0. ;
- fFastRec = 0 ;
+ fFastRec = 0 ;
fInvMassMaxCut = 0. ;
fInvMassMinCut = 0. ;
fJetRatioMaxCut = 0. ;
fJetTPCRatioMaxCut = 0. ;
fJetTPCRatioMinCut = 0. ;
fMinDistance = 0. ;
- fNEvent = 0 ;
- fNCone = 0 ;
- fNPt = 0 ;
- fOnlyCharged = kFALSE ;
- fOptFast = kFALSE ;
+ fNEvent = 0 ;
+ fNCone = 0 ;
+ fNPt = 0 ;
+ fOnlyCharged = 0 ;
+ fOptFast = 0 ;
fPhiMaxCut = 0. ;
fPhiMinCut = 0. ;
fPtCut = 0. ;
fRatioMinCut = 0. ;
fCone = 0 ;
fPtThreshold = 0 ;
- fTPCCutsLikeEMCAL = kFALSE ;
- fSelect = kFALSE ;
+ fTPCCutsLikeEMCAL = 0 ;
+ fSelect = 0 ;
for(Int_t i = 0; i<10; i++){
fCones[i] = 0.0 ;
fNameCones[i] = "" ;
}
}
- fOption = "" ;
+ fOptionGJ = "" ;
fOutputFile = new TFile(gDirectory->GetName()) ;
fInputFileName = gDirectory->GetName() ;
fOutputFileName = gDirectory->GetName() ;
fInvMassMaxCut = gj.fInvMassMaxCut ;
fInvMassMinCut = gj.fInvMassMinCut ;
fFastRec = gj.fFastRec ;
- fOption = gj.fOption ;
+ fOptionGJ = gj.fOptionGJ ;
fMinDistance = gj.fMinDistance ;
fOptFast = gj.fOptFast ;
fOnlyCharged = gj.fOnlyCharged ;
Char_t fi[100];
sprintf(fi,"bgrd/%d/list.root",iEvent);
TFile * f = TFile::Open(fi) ;
- cout<<f->GetName()<<endl;
+ //cout<<f->GetName()<<endl;
TParticle *particle = new TParticle();
- TTree *T = (TTree*) f->Get("T");
- TBranch *branch = T->GetBranch("primaries");
+ TTree *t = (TTree*) f->Get("T");
+ TBranch *branch = t->GetBranch("primaries");
branch->SetAddress(&particle);
Int_t index = particleList->GetEntries() ;
Int_t iParticle = 0 ;
Int_t m = 0;
Double_t x = 0., z = 0.;
- // cout<<"bkg entries "<<T->GetEntries()<<endl;
+ // cout<<"bkg entries "<<t->GetEntries()<<endl;
if(!fOptFast){
- for (iParticle=0 ; iParticle < T->GetEntries() ; iParticle++) {
- T->GetEvent(iParticle) ;
+ for (iParticle=0 ; iParticle < t->GetEntries() ; iParticle++) {
+ t->GetEvent(iParticle) ;
m = 0 ;
x = 0. ;
(dynamic_cast<TParticle*>(plCh->At(indexCh)))->SetStatusCode(0) ;
indexCh++ ;
- if(strstr(fOption,"deb all")||strstr(fOption,"deb")){
+ if(strstr(fOptionGJ,"deb all")||strstr(fOptionGJ,"deb")){
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
}
if(m != 0)
{//Is in PHOS
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
if((particle->Phi()>fPhiEMCALCut[0]) &&
(particle->Phi()<fPhiEMCALCut[1]) && m == 0)
{//Is in EMCAL
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
// fFastRec = new AliPHOSFastGlobalReconstruction(fHIJINGFileName);
// fFastRec->FastReconstruction(iiEvent);
- for (iParticle=0 ; iParticle < T->GetEntries() ; iParticle++) {
- T->GetEvent(iParticle) ;
+ for (iParticle=0 ; iParticle < t->GetEntries() ; iParticle++) {
+ t->GetEvent(iParticle) ;
m = 0 ;
x = 0. ;
z = 0. ;
//Check if decay photons are too close for PHOS
cellDistance = angle*460; //cm
if (cellDistance < fMinDistance) {
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
indexNe++ ;
}
if(m != 0){
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
new((*plNePHOS)[indexNePHOS]) TParticle(*particle) ;
geom->ImpactOnEmc(photon1->Theta(),photon1->Phi(), m,z,x);
if( photon1->Phi()>fPhiEMCALCut[0] && photon1->Phi()<fPhiEMCALCut[1]
&& m == 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon1->Pt());
new((*particleList)[index]) TParticle(*photon1) ;
p1 = kTRUE;
}
if(m != 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon1->Pt());
new((*plNePHOS)[indexNePHOS]) TParticle(*photon1) ;
geom->ImpactOnEmc(photon2->Theta(),photon2->Phi(), m,z,x);
if(photon2->Phi()>fPhiEMCALCut[0] &&
photon2->Phi()<fPhiEMCALCut[1] && m == 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon2->Pt());
new((*particleList)[index]) TParticle(*photon2) ;
indexNe++ ;
}
if(m != 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon2->Pt());
new((*plNePHOS)[indexNePHOS]) TParticle(*photon2) ;
const Double_t *x) {
//Info("CalculateLimit","x1 %f, x2%f",x[0],x[1]);
- Double_t Epp = par[0] + par[1] * ptg ;
- Double_t Spp = par[2] + par[3] * ptg ;
+ Double_t epp = par[0] + par[1] * ptg ;
+ Double_t spp = par[2] + par[3] * ptg ;
Double_t f = x[0] + x[1] * ptg ;
- Double_t Epb = Epp + par[4] ;
- Double_t Spb = TMath::Sqrt(Spp*Spp+ par[5]*par[5]) ;
- Double_t rat = (Epb - Spb * f) / ptg ;
- //Info("CalculateLimit","Epp %f, Spp %f, f %f", Epp, Spp, f);
- //Info("CalculateLimit","Epb %f, Spb %f, rat %f", Epb, Spb, rat);
+ Double_t epb = epp + par[4] ;
+ Double_t spb = TMath::Sqrt(spp*spp+ par[5]*par[5]) ;
+ Double_t rat = (epb - spb * f) / ptg ;
+ //Info("CalculateLimit","epp %f, spp %f, f %f", epp, spp, f);
+ //Info("CalculateLimit","epb %f, spb %f, rat %f", epb, spb, rat);
return rat ;
}
->GetParticle(particle->GetPdgCode())->Charge();
if((charge != 0) && (particle->Pt() > fChargedPtCut)){
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
new((*plCh)[indexCh++]) TParticle(*particle) ;
geom->ImpactOnEmc(particle->Theta(),particle->Phi(), m,z,x);
if(m != 0)
{//Is in PHOS
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
if((particle->Phi()>fPhiEMCALCut[0]) &&
(particle->Phi()<fPhiEMCALCut[1]) && m == 0)
{//Is in EMCAL
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
new((*plNe)[indexNe++]) TParticle(*particle) ;
if(part.Pt() > fNeutralPtCut){
if(particle->Phi()>fPhiEMCALCut[0] &&
particle->Phi()<fPhiEMCALCut[1] && m == 0){
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
indexNe++;
}//InEMCAL
if(m != 0){
- if(strstr(fOption,"deb all")|| strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all")|| strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(particle->Pt());
new((*plNePHOS)[indexNePHOS]) TParticle(*particle) ;
geom->ImpactOnEmc(photon1->Theta(),photon1->Phi(), m,z,x);
if( photon1->Phi()>fPhiEMCALCut[0] && photon1->Phi()<fPhiEMCALCut[1]
&& m == 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon1->Pt());
new((*plNe)[indexNe++]) TParticle(*photon1) ;
p1 = kTRUE;
}
if(m != 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon1->Pt());
new((*plNePHOS)[indexNePHOS++]) TParticle(*photon1) ;
geom->ImpactOnEmc(photon2->Theta(),photon2->Phi(), m,z,x);
if(photon2->Phi()>fPhiEMCALCut[0] &&
photon2->Phi()<fPhiEMCALCut[1] && m == 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon2->Pt());
new((*plNe)[indexNe++]) TParticle(*photon2) ;
new((*particleList)[index++]) TParticle(*photon2) ;
}
if(m != 0){
- if(strstr(fOption,"deb all") || strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb all") || strstr(fOptionGJ,"deb"))
dynamic_cast<TH1F*>(fListHistos->FindObject("PtSpectra"))->
Fill(photon2->Pt());
new((*plNePHOS)[indexNePHOS++]) TParticle(*photon2) ;
void AliPHOSGammaJet::Exec(Option_t *option)
{
// does the job
- fOption = option;
+ fOptionGJ = option;
MakeHistos() ;
AliPHOSGetter * gime = AliPHOSGetter::Instance() ;
TClonesArray * plNePHOS = new TClonesArray("TParticle",1000);
for (Int_t iEvent = 0 ; iEvent < fNEvent ; iEvent++) {
- if(strstr(fOption,"deb")||strstr(fOption,"deb all"))
+ if(strstr(fOptionGJ,"deb")||strstr(fOptionGJ,"deb all"))
Info("Exec", "Event %d", iEvent) ;
fRan.SetSeed(0);
AddHIJINGToList(iEvent, particleList, plCh,plNe, plNePHOS, geom);
- Bool_t IsInPHOS = kFALSE ;
- GetGammaJet(plNePHOS, ptg, phig, etag, IsInPHOS) ;
+ Bool_t iIsInPHOS = kFALSE ;
+ GetGammaJet(plNePHOS, ptg, phig, etag, iIsInPHOS) ;
- if(IsInPHOS){
+ if(iIsInPHOS){
//Info("Exec"," In PHOS") ;
dynamic_cast<TH1F*>(fListHistos->FindObject("NGamma"))->Fill(ptg);
->Fill(ptg,phig);
dynamic_cast<TH2F*>(fListHistos->FindObject("EtaGamma"))
->Fill(ptg,etag);
- if(strstr(fOption,"deb")||strstr(fOption,"deb all"))
+ if(strstr(fOptionGJ,"deb")||strstr(fOptionGJ,"deb all"))
Info("Exec", "Gamma: pt %f, phi %f, eta %f", ptg,
phig,etag) ;
->Fill(ptg,phig-phich);
dynamic_cast<TH2F*>(fListHistos->FindObject("DeltaEtaCharge"))
->Fill(ptg,etag-etach);
- if(strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb"))
Info("Exec"," Charged Leading") ;
}
if((ptpi > ptch) && insidepi){
dynamic_cast<TH2F*>(fListHistos->FindObject("DeltaEtaPi0"))
->Fill(ptg,etag-etapi);
- if(ptpi > 0. && strstr(fOption,"deb"))
+ if(ptpi > 0. && strstr(fOptionGJ,"deb"))
Info("Exec"," Pi0 Leading") ;
}
- if(strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb"))
Info("Exec","Leading pt %f, phi %f",ptl,phil);
if(insidech || insidepi){
if(!fAnyConeOrPt){
MakeJet(particleList, ptg, phig, ptl, phil, etal, "", jet);
- if(strstr(fOption,"deb")){
+ if(strstr(fOptionGJ,"deb")){
// Info("Exec","Pythia Jet: Phi %f, Eta %f, Pt %f",
// pyjet.Phi(),pyjet.Eta(),pyjet.Pt());
Info("Exec","TPC+EMCAL Jet: Phi %f, Eta %f, Pt %f",
//TPC
if(fOnlyCharged && ptch > 0.)
{
- if(strstr(fOption,"deb"))
+ if(strstr(fOptionGJ,"deb"))
Info("Exec","Leading TPC pt %f, phi %f",ptch,phich);
dynamic_cast<TH2F*>(fListHistos->FindObject("TPCRatio"))
MakeJet(plCh, ptg, phig, ptch, phich, etach, "TPC",jettpc);
- if(strstr(fOption,"deb")){
+ if(strstr(fOptionGJ,"deb")){
// Info("Exec","Pythia Jet: Phi %f, Eta %f, Pt %f",
// pyjet.Phi(),pyjet.Eta(),pyjet.Pt());
Info("Exec","TPC Jet: Phi %f, Eta %f, Pt %f",
void AliPHOSGammaJet::FillJetHistos(TClonesArray * pl, Double_t ptg,
TString conf, TString type)
{
-
+ //Fill jet fragmentation histograms if !fAnyCone,
+ //only for fCone and fPtThres
TParticle * particle = 0 ;
Int_t ipr = -1 ;
Float_t charge = 0;
TString conf, TString type,
TString cone, TString ptcut)
{
-
+ //Fill jet fragmentation histograms if fAnyCone,
+ //for several cones and pt thresholds
TParticle *particle = 0;
Int_t ipr=-1;
Float_t charge = 0;
//____________________________________________________________________________
void AliPHOSGammaJet::GetGammaJet(TClonesArray * pl, Double_t &pt,
- Double_t &phi, Double_t &eta, Bool_t &Is)
-
+ Double_t &phi, Double_t &eta, Bool_t &Is) const
{
+ //Search for the prompt photon in PHOS with pt > fPtCut
pt = -10.;
eta = -10.;
phi = -10.;
//____________________________________________________________________________
void AliPHOSGammaJet::GetLeadingCharge(TClonesArray * pl,
Double_t ptg, Double_t phig,
- Double_t &pt, Double_t &eta, Double_t &phi)
+ Double_t &pt, Double_t &eta, Double_t &phi) const
{
-
+ //Search for the charged particle with highest with
+ //Phi=Phi_gamma-Pi and pT=0.1E_gamma
pt = -100.;
eta = -100;
phi = -100;
//____________________________________________________________________________
void AliPHOSGammaJet::GetLeadingPi0(TClonesArray * pl,
Double_t ptg, Double_t phig,
- Double_t &pt, Double_t &eta, Double_t &phi)
+ Double_t &pt, Double_t &eta, Double_t &phi)
{
+
+ //Search for the neutral pion with highest with
+ //Phi=Phi_gamma-Pi and pT=0.1E_gamma
pt = -100.;
eta = -100.;
phi = -100.;
//____________________________________________________________________________
void AliPHOSGammaJet::InitParameters()
{
+
+ //Initialize the parameters of the analysis.
+
fAngleMaxParam.Set(4) ;
fAngleMaxParam.AddAt(0.4,0);//={0.4,-0.25,0.025,-2e-4};
fAngleMaxParam.AddAt(-0.25,1) ;
fAngleMaxParam.AddAt(-2e-4,3) ;
fAnyConeOrPt = kFALSE ;
fOutputFileName = "GammaJet.root" ;
- fOption = "";
+ fOptionGJ = "";
fHIJINGFileName = "galice.root" ;
fHIJING = kFALSE ;
fMinDistance = 3.6 ;
}
//__________________________________________________________________________-
-Bool_t AliPHOSGammaJet::IsAngleInWindow(const Float_t angle,const Float_t e){
+Bool_t AliPHOSGammaJet::IsAngleInWindow(const Float_t angle,const Float_t e) {
+ //Check if the opening angle of the candidate pairs is inside
+ //our selection windowd
Bool_t result = kFALSE;
Double_t mpi0 = 0.1349766;
Double_t max = fAngleMaxParam.At(0)*TMath::Exp(fAngleMaxParam.At(1)*e)
//__________________________________________________________________________-
Bool_t AliPHOSGammaJet::IsJetSelected(const Double_t ptg, const Double_t ptj,
const TString type ){
+ //Check if the energy of the reconstructed jet is within an energy window
Double_t par[6];
Double_t xmax[2];
Double_t ptl, Double_t phil, Double_t etal,
TString conf, TLorentzVector & jet)
{
-
+ //Fill the jet with the particles around the leading particle with
+ //R=fCone and pt_th = fPtThres. Calculate the energy of the jet and
+ //check if we select it. Fill jet histograms
Float_t ptcut = 0. ;
if(fHIJING){
if(ptg > fPtJetSelectionCut) ptcut = 2. ;
ptjet = jet.Pt();
ptbkg = bkg.Pt();
- if(strstr(fOption,"deb") || strstr(fOption,"deb all"))
+ if(strstr(fOptionGJ,"deb") || strstr(fOptionGJ,"deb all"))
Info("MakeJet","Gamma pt %f, Jet pt %f, Bkg pt %f",ptg,ptjet,ptbkg);
if(IsJetSelected(ptg,ptjet,conf) || fSelect){
- if(strstr(fOption,"deb") || strstr(fOption,"deb all"))
+ if(strstr(fOptionGJ,"deb") || strstr(fOptionGJ,"deb all"))
Info("MakeJet","JetSelected");
dynamic_cast<TH1F*>(fListHistos->FindObject("N"+conf+"Jet"))->
Fill(ptg);
Double_t phig, Double_t ptl,
Double_t phil, Double_t etal,
TString conf){
+
+ //Fill the jet with the particles around the leading particle with
+ //R=fCone(i) and pt_th = fPtThres(i). Calculate the energy of the jet and
+ //check if we select it. Fill jet i histograms
TClonesArray * jetList = new TClonesArray("TParticle",1000);
TClonesArray * bkgList = new TClonesArray("TParticle",1000);
//Fill histograms
if(ptjet > 0.) {
- if(strstr(fOption,"deb")){
+ if(strstr(fOptionGJ,"deb")){
Info("MakeJetAnyPt","cone %f, ptcut %f",fCones[icone],fPtThres[ipt]);
Info("MakeJetAnyPt","pT: Gamma %f, Jet %f, Bkg %f",ptg,ptjet,ptbkg);
}
//____________________________________________________________________________
void AliPHOSGammaJet::MakePhoton(TLorentzVector & particle)
{
-
+ //Fast reconstruction for photons
Double_t energy = particle.E() ;
Double_t modenergy = MakeEnergy(energy) ;
//Info("MakePhoton","Energy %f, Modif %f",energy,modenergy);
//____________________________________________________________________________
void AliPHOSGammaJet::Plot(TString what, Option_t * option) const
{
+ //Plot some relevant histograms of the analysis
TH2F * h = dynamic_cast<TH2F*>(fOutputFile->Get(what));
if(h){
h->Draw();
//____________________________________________________________________________
void AliPHOSGammaJet::Print(char * opt)
{
+
+ //Print some relevant parameters set for the analysis
if(! opt)
return;
- // Print
Info("Print", "%s %s", GetName(), GetTitle() ) ;
printf("Eta cut : %f\n", fEtaCut) ;
void AliPHOSGammaJet::SetJet(TParticle * part, Bool_t & b, Float_t cone,
Double_t eta, Double_t phi)
{
-
+
+ //Check if the particle is inside the cone defined by the leading particle
b = kFALSE;
if(phi > TMath::TwoPi())
/* $Id$ */
//_________________________________________________________________________
-// Class for the analysis of gamma-jet correlations
-//
+// Class for the analysis of gamma-jet correlations.
+// Basically it seaches for a prompt photon in the PHOS acceptance,
+// if so we construct a jet around the highest pt particle in the opposite
+// side in azimuth. This jet has to fullfill several conditions to be
+// accepted. Then the fragmentation function of this jet is constructed
+
//*-- Author: Gustavo Conesa & Yves Schutz (IFIC, CERN)
// --- ROOT system ---
#include "TTask.h"
-#include "TH1.h"
-#include "TH2.h"
-#include "TMatrix.h"
-#include "TList.h"
-#include "AliPHOSGeometry.h"
-#include "AliPHOSFastGlobalReconstruction.h"
-#include "../PYTHIA6/AliGenPythia.h"
+#include "TRandom.h"
+#include "TArrayD.h"
+class AliPHOSGeometry ;
+class AliPHOSFastGlobalReconstruction ;
+//#include "../PYTHIA6/AliGenPythia.h"
// --- AliRoot header files ---
class AliPHOSGammaJet : public TTask {
AliPHOSGammaJet() ; // default ctor
AliPHOSGammaJet(const TString inputfilename) ; //ctor
AliPHOSGammaJet(const AliPHOSGammaJet & gj) ; // cpy ctor
- ~AliPHOSGammaJet() ; // dtor
+ AliPHOSGammaJet & operator = (const AliPHOSGammaJet & /*rvalue*/)
+ { return *this ;} //assignement operator requested by coding convention but not needed
+ virtual ~AliPHOSGammaJet() ; //virtual dtor
virtual void Exec(Option_t *option);
void List() const;
- Double_t GetAngleMaxParam(Int_t i){return fAngleMaxParam.At(i) ; }
- Double_t GetEtaCut(){return fEtaCut;}
- Double_t GetPhiEMCALCut(Int_t i){return fPhiEMCALCut[i];}
- TString GetHIJINGFileName(){return fHIJINGFileName ; }
- TString GetHistosFileName(){return fOutputFileName ; }
- Double_t GetInvMassMaxCut(){return fInvMassMaxCut ; }
- Double_t GetInvMassMinCut(){return fInvMassMinCut ; }
- Double_t GetPhiMaxCut(){return fPhiMaxCut ; }
- Double_t GetPhiMinCut(){return fPhiMinCut ; }
- Double_t GetPtCut(){return fPtCut ; }
- Double_t GetNeutralPtCut(){return fNeutralPtCut ; }
- Double_t GetChargedPtCut(){return fChargedPtCut ; }
- Double_t GetPtJetSelectionCut(){return fPtJetSelectionCut ; }
- Double_t GetMinDistance(){return fMinDistance ; }
- Double_t GetJetRatioMaxCut(){return fJetRatioMaxCut ; }
- Double_t GetJetRatioMinCut(){return fJetRatioMinCut ; }
- Double_t GetRatioMaxCut(){return fRatioMaxCut ; }
- Double_t GetRatioMinCut(){return fRatioMinCut ; }
- Int_t GetNEvent(){return fNEvent ; }
- Int_t GetNCones(){return fNCone ; }
- Int_t GetNPtThres(){return fNPt ; }
- Float_t GetCone(){return fCone ; }
- Float_t GetPtThreshold(){return fPtThreshold ; }
- Float_t GetCones(Int_t i){return fCones[i] ; }
- Float_t GetPtThreshold(Int_t i){return fPtThres[i] ; }
- TString GetConeName(Int_t i){return fNameCones[i] ; }
- TString GetPtThresName(Int_t i){return fNamePtThres[i] ; }
- Bool_t GetTPCCutsLikeEMCAL(){return fTPCCutsLikeEMCAL ; }
-
-
- Bool_t IsAnyConeOrPt(){return fAnyConeOrPt ; }
- Bool_t IsFastReconstruction(){return fOptFast ; }
- Bool_t IsHIJING(){return fHIJING ; }
- Bool_t IsOnlyCharged(){return fOnlyCharged ; }
+ Double_t GetAngleMaxParam(Int_t i) const {return fAngleMaxParam.At(i) ; }
+ Double_t GetEtaCut() const {return fEtaCut;}
+ Double_t GetPhiEMCALCut(Int_t i) const {return fPhiEMCALCut[i];}
+ TString GetHIJINGFileName() const {return fHIJINGFileName ; }
+ TString GetHistosFileName() const {return fOutputFileName ; }
+ Double_t GetInvMassMaxCut() const {return fInvMassMaxCut ; }
+ Double_t GetInvMassMinCut() const {return fInvMassMinCut ; }
+ Double_t GetPhiMaxCut() const {return fPhiMaxCut ; }
+ Double_t GetPhiMinCut() const {return fPhiMinCut ; }
+ Double_t GetPtCut() const {return fPtCut ; }
+ Double_t GetNeutralPtCut() const {return fNeutralPtCut ; }
+ Double_t GetChargedPtCut() const {return fChargedPtCut ; }
+ Double_t GetPtJetSelectionCut() const {return fPtJetSelectionCut ; }
+ Double_t GetMinDistance() const {return fMinDistance ; }
+ Double_t GetJetRatioMaxCut() const {return fJetRatioMaxCut ; }
+ Double_t GetJetRatioMinCut() const {return fJetRatioMinCut ; }
+ Double_t GetRatioMaxCut() const {return fRatioMaxCut ; }
+ Double_t GetRatioMinCut() const {return fRatioMinCut ; }
+ Int_t GetNEvent() const {return fNEvent ; }
+ Int_t GetNCones() const {return fNCone ; }
+ Int_t GetNPtThres() const {return fNPt ; }
+ Float_t GetCone() const {return fCone ; }
+ Float_t GetPtThreshold() const {return fPtThreshold ; }
+ Float_t GetCones(Int_t i) const {return fCones[i] ; }
+ Float_t GetPtThreshold(Int_t i) const {return fPtThres[i] ; }
+ TString GetConeName(Int_t i) const {return fNameCones[i] ; }
+ TString GetPtThresName(Int_t i) const {return fNamePtThres[i] ; }
+ Bool_t GetTPCCutsLikeEMCAL() const {return fTPCCutsLikeEMCAL ; }
+
+ Bool_t IsAnyConeOrPt() const {return fAnyConeOrPt ; }
+ Bool_t IsFastReconstruction() const {return fOptFast ; }
+ Bool_t IsHIJING() const {return fHIJING ; }
+ Bool_t IsOnlyCharged() const {return fOnlyCharged ; }
void Plot(TString what="all", Option_t *option="") const;
void Print(char * opt);
Double_t phil, Double_t ptl, Double_t phil,
Double_t etal, TString type);
void GetGammaJet(TClonesArray * pl, Double_t &pt,
- Double_t &phi, Double_t &eta, Bool_t &Is) ;
+ Double_t &phi, Double_t &eta, Bool_t &Is) const;
void GetLeadingCharge(TClonesArray * pl,
Double_t ptg, Double_t phig,
- Double_t &pt, Double_t &eta, Double_t &phi) ;
+ Double_t &pt, Double_t &eta, Double_t &phi) const ;
void GetLeadingPi0 (TClonesArray * pl,
Double_t ptg, Double_t phig,
- Double_t &pt, Double_t &eta, Double_t &phi) ;
+ Double_t &pt, Double_t &eta, Double_t &phi) ;
void InitParameters();
Double_t MakeEnergy(const Double_t energy) ;
Double_t phi);
private:
- Bool_t fAnyConeOrPt;
- Option_t * fOption ; //! Fill most interesting histograms
+ Bool_t fAnyConeOrPt; // To play with the jet cone size and pt th.
+ Option_t * fOptionGJ ; //! Fill most interesting histograms
// and give interesting information
TFile * fOutputFile ; //! Output file
TString fOutputFileName; //! Output file Name
TString fInputFileName; //!
TString fHIJINGFileName; //!
- Bool_t fHIJING;
+ Bool_t fHIJING; // Add HIJING event to PYTHIA event?
Double_t fEtaCut ; // Eta cut
Bool_t fOnlyCharged ; // Only jets of charged particles
Double_t fPhiEMCALCut[2] ; // Phi cut maximum
Double_t fJetRatioMinCut ; // Jet/gamma Ratio cut minimum
//Cuts depending on jet pt
- Double_t fJetE1[2];
- Double_t fJetE2[2];
- Double_t fJetSigma1[2];
- Double_t fJetSigma2[2];
- Double_t fBkgMean[6];
- Double_t fBkgRMS[6];
- Double_t fJetXMin1[6];
- Double_t fJetXMin2[6];
- Double_t fJetXMax1[6];
- Double_t fJetXMax2[6];
-
- Int_t fNEvent ; // Number of events to analyze
- Int_t fNCone ; // Number of jet cones sizes
- Int_t fNPt ; // Number of jet particle pT threshold
- Double_t fCone ; // Jet cone sizes under study
- Double_t fCones[10]; // Jet cone sizes under study
- TString fNameCones[10];
- Double_t fPtThreshold;
- Double_t fPtThres[10]; // Jet pT threshold under study
- Double_t fPtJetSelectionCut; // Jet pT threshold under study
- TString fNamePtThres[10];
- TObjArray * fListHistos ; //! list of Histograms
- AliPHOSFastGlobalReconstruction * fFastRec;
- Bool_t fOptFast;
+ Double_t fJetE1[2]; //Rec. jet energy parameters
+ Double_t fJetE2[2]; //Rec. jet energy parameters
+ Double_t fJetSigma1[2];//Rec. sigma of jet energy parameters
+ Double_t fJetSigma2[2];//Rec. sigma of jet energy parameters
+ Double_t fBkgMean[6]; //Background mean energy
+ Double_t fBkgRMS[6]; //Background RMS
+ Double_t fJetXMin1[6]; //X Factor to set jet min limit for pp
+ Double_t fJetXMin2[6]; //X Factor to set jet min limit for PbPb
+ Double_t fJetXMax1[6]; //X Factor to set jet max limit for pp
+ Double_t fJetXMax2[6]; //X Factor to set jet max limit for PbPb
+
+ Int_t fNEvent ; // Number of events to analyze
+ Int_t fNCone ; // Number of jet cones sizes
+ Int_t fNPt ; // Number of jet particle pT threshold
+ Double_t fCone ; // Jet cone sizes under study (!fAnyConeSize)
+ Double_t fCones[10]; // Jet cone sizes under study (fAnyConeSize)
+ TString fNameCones[10]; // String name of cone to append to histos
+ Double_t fPtThreshold; // Jet pT threshold under study(!fAnyConeSize)
+ Double_t fPtThres[10]; // Jet pT threshold under study(fAnyConeSize)
+ Double_t fPtJetSelectionCut; // Jet pt to change to low pt jets analysis
+ TString fNamePtThres[10]; // String name of pt th to append to histos
+ TObjArray * fListHistos ; //! list of Histograms
+ AliPHOSFastGlobalReconstruction * fFastRec; //Pointer to fast recons.
+ Bool_t fOptFast; // Do we want fast Rec?
TRandom fRan ; //! random number generator
//Energy and position parameters
Double_t fResPara1 ; // parameter for the energy resolution dependence
Double_t fResPara3 ; // parameter for the energy resolution dependence
Double_t fPosParaA ; // parameter for the position resolution
Double_t fPosParaB ; // parameter for the position resolution
- TArrayD fAngleMaxParam ;
+ TArrayD fAngleMaxParam ; //Max opening angle selection parameters
Bool_t fSelect ; //Select jet within limits
ClassDef(AliPHOSGammaJet,2)