#include <TH1D.h>
#include "AliJCORRAN.h"
#include "AliJTrackCounter.h"
#include <TClonesArray.h>
#include "AliJCard.h"
#include "AliJHistos.h"
#include "AliJCorrelations.h"
#include "AliJEventPool.h"
#include "AliJDataManager.h"
#include "AliJEventHeader.h"
#include "AliJRunHeader.h"
#include "AliJTrack.h"
#include "AliJPhoton.h"
#include "AliJMCTrack.h"
#include "AliJConst.h"
#include "AliJEfficiency.h"
#include <iostream>
ClassImp(AliJCORRAN)
AliJCORRAN::AliJCORRAN() :
TObject(),
fExecLocal(kTRUE),
fFirstEvent(kTRUE),
fjtrigg((particleType)-100),
fjassoc((particleType)-100),
fcard(0),
finputFile(0),
fInclusiveFile(""),
fevt(0),
fhistos(0),
fcorrelations(0),
fphotonPool(0),
fassocPool(0),
fphotonList(0),
fchargedHadronList(0),
fpizeroList(0),
ftriggList(0),
fassocList(0),
fpairList(0),
fpairCounterList(0),
finputList(0),
fdmg(0),
feventHeader(0),
frunHeader(0),
fnumberEvents(0),
fieout(0),
fEventCounter(0),
fcent(0),
fncBin(0),
fnPttBin(0),
fbTriggCorrel(0),
fbLPCorrel(0),
fbLPpairCorrel(0),
fTrackEtaRange(0),
flowerPtAssocBoarder(0),
fCentMultLow(0),
fCentMultHigh(0),
fEventBC(0),
fSQRTS(0),
fEfficiency(0),
fRunTable(0),
fIsolationR(0),
fHadronSelectionCut(0)
{
}
AliJCORRAN::AliJCORRAN(Bool_t execLocal) :
TObject(),
fExecLocal(execLocal),
fFirstEvent(kTRUE),
fjtrigg((particleType)-100),
fjassoc((particleType)-100),
fcard(0),
finputFile(0),
fInclusiveFile(""),
fevt(0),
fhistos(0),
fcorrelations(0),
fphotonPool(0),
fassocPool(0),
fphotonList(0),
fchargedHadronList(0),
fpizeroList(0),
ftriggList(0),
fassocList(0),
fpairList(0),
fpairCounterList(0),
finputList(0),
fdmg(0),
feventHeader(0),
frunHeader(0),
fnumberEvents(0),
fieout(0),
fEventCounter(0),
fcent(0),
fncBin(0),
fnPttBin(0),
fbTriggCorrel(0),
fbLPCorrel(0),
fbLPpairCorrel(0),
fTrackEtaRange(0),
flowerPtAssocBoarder(0),
fCentMultLow(0),
fCentMultHigh(0),
fEventBC(0),
fSQRTS(0),
fEfficiency(0),
fRunTable(0),
fIsolationR(0),
fHadronSelectionCut(0)
{
}
AliJCORRAN::~AliJCORRAN(){
}
AliJCORRAN::AliJCORRAN(const AliJCORRAN& obj) :
TObject(),
fExecLocal(obj.fExecLocal),
fFirstEvent(obj.fFirstEvent),
fjtrigg(obj.fjtrigg),
fjassoc(obj.fjassoc),
fcard(obj.fcard),
finputFile(obj.finputFile),
fInclusiveFile(obj.fInclusiveFile),
fevt(obj.fevt),
fhistos(obj.fhistos),
fcorrelations(obj.fcorrelations),
fphotonPool(obj.fphotonPool),
fassocPool(obj.fassocPool),
fphotonList(obj.fphotonList),
fchargedHadronList(obj.fchargedHadronList),
fpizeroList(obj.fpizeroList),
ftriggList(obj.ftriggList),
fassocList(obj.fassocList),
fpairList(obj.fpairList),
fpairCounterList(obj.fpairCounterList),
finputList(obj.finputList),
fdmg(obj.fdmg),
feventHeader(obj.feventHeader),
frunHeader(obj.frunHeader),
fnumberEvents(obj.fnumberEvents),
fieout(obj.fieout),
fEventCounter(obj.fEventCounter),
fcent(obj.fcent),
fncBin(obj.fncBin),
fnPttBin(obj.fnPttBin),
fbTriggCorrel(obj.fbTriggCorrel),
fbLPCorrel(obj.fbLPCorrel),
fbLPpairCorrel(obj.fbLPpairCorrel),
fTrackEtaRange(obj.fTrackEtaRange),
flowerPtAssocBoarder(obj.flowerPtAssocBoarder),
fCentMultLow(obj.fCentMultLow),
fCentMultHigh(obj.fCentMultHigh),
fEventBC(obj.fEventBC),
fSQRTS(obj.fSQRTS),
fEfficiency(obj.fEfficiency),
fRunTable(obj.fRunTable),
fIsolationR(obj.fIsolationR),
fHadronSelectionCut(obj.fHadronSelectionCut)
{
JUNUSED(obj);
}
AliJCORRAN& AliJCORRAN::operator=(const AliJCORRAN& obj){
JUNUSED(obj);
return *this;
}
void AliJCORRAN::Initialize() const{
}
void AliJCORRAN::UserCreateOutputObjects(){
cout << "jcorran user create output objects ----------------" << endl;
fHadronSelectionCut =int ( fcard->Get("HadronSelectionCut"));
fIsolationR = fcard->Get("IsolationR");
fhistos = new AliJHistos( fcard );
fhistos->CreateEventTrackHistos();
fhistos->CreateAzimuthCorrHistos();
fhistos->CreateIAAMoons();
fhistos->CreateXEHistos();
fhistos->CreateXtHistos();
fhistos->CreatePairPtCosThetaStar();
fhistos->fHMG->Print();
fEventBC = (Int_t)(fcard->Get( "eventBC" ));
fSQRTS = 0.;
fcorrelations = new AliJCorrelations( fcard, fhistos);
cout<<endl<< " -----" <<endl;
if( fInclusiveFile.Length() ) {
fhistos->ReadInclusiveHistos(fInclusiveFile);
fcorrelations->SetSampligInclusive();
cout<<"Sampling kperp and triangle from " << fInclusiveFile <<endl;
} else cout << "Sampling kperp and triangle from flat" <<endl;
cout<< " -----" <<endl <<endl;
fphotonPool = new AliJEventPool( fcard, fhistos, fcorrelations, kJPhoton);
fassocPool = new AliJEventPool( fcard, fhistos, fcorrelations, fjassoc);
fphotonList = new TClonesArray(kParticleProtoType[kJPhoton],1500);
fchargedHadronList = new TClonesArray(kParticleProtoType[kJHadron],1500);
fpizeroList = new TClonesArray(kParticleProtoType[kJPizero],1500);
ftriggList = new TClonesArray(kParticleProtoType[fjtrigg],1500);
fassocList = new TClonesArray(kParticleProtoType[fjassoc],1500);
fpairList = new TClonesArray(kParticleProtoType[fjtrigg],1500);
fpairCounterList = new TClonesArray("AliJTrackCounter",1500);
finputList = NULL;
fdmg = new AliJDataManager(fcard, fhistos, fcorrelations, fExecLocal);
fdmg->SetExecLocal( fExecLocal );
if( fExecLocal ){
fdmg->ChainInputStream(finputFile);
fnumberEvents = fdmg->GetNEvents();
fieout = fnumberEvents/20;
frunHeader = fdmg->GetRunHeader();
cout<<"RunID = "<<frunHeader->GetRunNumber()<< " Looping over "<<fnumberEvents<<" events"<<endl;
} else {
fdmg->SetRunHeader( frunHeader );
frunHeader = fdmg->GetRunHeader();
}
fEfficiency = new AliJEfficiency;
fEfficiency->SetMode( fcard->Get("EfficiencyMode") );
if(fExecLocal) {
fEfficiency->SetDataPath("/mnt/flustre/alice/taxi_jcorran/2013/EFF/data");
} else {
fEfficiency->SetDataPath("alien:///alice/cern.ch/user/d/djkim/legotrain/efficieny/data");
}
fEventCounter=0;
fcent = -1;
fncBin = fcard->GetNoOfBins( kCentrType );
fnPttBin = fcard->GetNoOfBins( kTriggType );
fbTriggCorrel = fcard->Get("CorrelationType")==0;
fbLPCorrel = fcard->Get("CorrelationType")==1;
fbLPpairCorrel = fcard->Get("CorrelationType")==2;
fTrackEtaRange = fcard->Get("EtaRange");
flowerPtAssocBoarder = fcard->GetBinBorder(kAssocType, 0);
fCentMultLow = new TF1("fCentMultLow","[0]*sqrt([1]-x)+[2]", 0, 75);
fCentMultHigh = new TF1("fCentMultHigh","[0]*sqrt([1]-x)+[2]", 0, 90);
fhistos->fHMG->WriteConfig();
fFirstEvent = kTRUE;
fevt = -1;
cout << "end of jcorran user create output objects ----------------" << endl;
}
void AliJCORRAN::UserExec(){
fevt++;
if( 0 && !fExecLocal && fFirstEvent ){
fdmg->ChainInputStream("");
fieout = fnumberEvents/20;
if (fieout<1) fieout=1;
cout<<"RunID = "<<frunHeader->GetRunNumber()<< " Looping over "<<fnumberEvents<<" events"<<endl;
fhistos->fhEventPerRun->Fill(fnumberEvents>0?log(fnumberEvents):1);
fFirstEvent = kFALSE;
}
if( fExecLocal ) {
if(fevt % fieout == 0) cout << fevt << "\t" << int(float(fevt)/fnumberEvents*100) << "%" << endl ;
}
if( fFirstEvent ) {
fRunTable = & AliJRunTable::GetSpecialInstance();
fRunTable->SetRunNumber( frunHeader->GetRunNumber() );
fSQRTS = fRunTable->GetBeamEnergy(fRunTable->GetPeriod());
cout << "sqrts = "<< fSQRTS << ",runnumber = "<< frunHeader->GetRunNumber() << endl;
fEfficiency->SetRunNumber( frunHeader->GetRunNumber() );
fEfficiency->Load();
fFirstEvent = kFALSE;
}
if(fRunTable->IsHeavyIon()){
fCentMultLow->SetParameters( fcard->Get("CentMultCutLow",0), fcard->Get("CentMultCutLow",1), fcard->Get("CentMultCutLow",2) );
fCentMultHigh->SetParameters(fcard->Get("CentMultCutHigh",0), fcard->Get("CentMultCutHigh",1), fcard->Get("CentMultCutHigh",2) );
}
fdmg->LoadEvent(fevt);
fhistos->fhEvents->Fill( 0 );
if(!fdmg->IsGoodEvent()) return;
feventHeader = fdmg->GetEventHeader();
double zVert = feventHeader->GetZVertex();
UInt_t triggermaskJCorran = feventHeader->GetTriggerMaskJCorran();
if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
fhistos->fhEvents->Fill( 5 );
if( feventHeader->GetBunchCrossNumber() % 4 != fEventBC &&
fEventBC > -1 )
return;
if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
fhistos->fhEvents->Fill( 6 );
if(fRunTable->IsHeavyIon() || fRunTable->IsPA()){
fcent = feventHeader->GetCentrality();
}else {
fcent = 1;
}
int cBin = fcard->GetBin(kCentrType, fcent);
if(cBin<0) return;
if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
fhistos->fhEvents->Fill( 7 );
int zBin = fcard->GetBin(kZVertType, zVert);
if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
fhistos->fhZVert[cBin]->Fill(zVert);
fEventCounter++;
fhistos->fhV0AMult[cBin]->Fill( feventHeader->GetV0AMult() );
if(fjtrigg==kJPizero || fjassoc==kJPizero || fjtrigg==kJPhoton || fjassoc==kJPhoton){
}
if(fjtrigg==kJHadron || fjassoc==kJHadron){
fchargedHadronList->Clear();
fdmg->RegisterList(fchargedHadronList, NULL, cBin, zBin, kJHadron);
for( int i = 0; i < fchargedHadronList->GetEntries(); i++ ){
AliJBaseTrack *triggTr = (AliJBaseTrack*)fchargedHadronList->At(i);
double ptt = triggTr->Pt();
double effCorr = 1./fEfficiency->GetCorrection(ptt, fHadronSelectionCut, fcent);
fhistos->fhTrackingEfficiency[cBin]->Fill( ptt, 1./effCorr );
triggTr->SetTrackEff( 1./effCorr );
}
}
if(fjtrigg==kJPizero) finputList = fpizeroList;
else if(fjtrigg==kJHadron) finputList = fchargedHadronList;
else if(fjtrigg==kJPhoton) finputList = fphotonList;
int noAllTriggTracks = finputList->GetEntries();
int noAllChargedTracks = fchargedHadronList->GetEntries();
fhistos->fhChargedMult[cBin]->Fill(noAllChargedTracks);
fhistos->fhChargedMultCent->Fill(fcent, noAllChargedTracks>0 ? log(noAllChargedTracks) : 0);
if(fRunTable->IsHeavyIon() && fCentMultLow->GetParameter(0) >0 ){
double logMult = noAllChargedTracks>0 ? log(noAllChargedTracks) : 0 ;
if( fcent<fCentMultLow->GetParameter(1) && logMult <fCentMultLow->Eval(fcent) ) return;
if( fCentMultHigh->Eval(fcent) < logMult) return;
}
fhistos->fhChargedMultCut[cBin]->Fill(noAllChargedTracks);
fhistos->fhCentr->Fill(fcent);
fhistos->fhiCentr->Fill(cBin);
if(fRunTable->IsHeavyIon()){
double vdelta[2] = {0};
int vdeltaNorm = 0;
for(int it1=0; it1<noAllTriggTracks-1; it1++){
AliJBaseTrack *ftk1 = (AliJBaseTrack*)finputList->At(it1);
if(ftk1->Pt()<flowerPtAssocBoarder) continue;
for(int it2=it1+1; it2<noAllTriggTracks; it2++){
AliJBaseTrack *ftk2 = (AliJBaseTrack*)finputList->At(it2);
if(ftk2->Pt()<flowerPtAssocBoarder) continue;
if(fabs(ftk1->Eta() - ftk2->Eta())<1.0) continue;
double fdphi = ftk1->DeltaPhi(*ftk2);
fhistos->fhVN[cBin]->Fill(fdphi);
vdelta[0] += cos(2*fdphi);
vdelta[1] += cos(3*fdphi);
vdeltaNorm++;
}
}
vdelta[0] = vdeltaNorm>0 ? vdelta[0]/vdeltaNorm : 0;
vdelta[1] = vdeltaNorm>0 ? vdelta[1]/vdeltaNorm : 0;
fhistos->fhVdelta2[cBin]->Fill(vdelta[0]*100);
fhistos->fhVdelta3[cBin]->Fill(vdelta[1]*100);
if(vdelta[0]>0) fhistos->fpV2->Fill( fcent, sqrt(vdelta[0])*100 );
if(vdelta[1]>0) {
fhistos->fpV3->Fill( fcent, sqrt(vdelta[1])*100 );
fcard->SetEventV3kv(vdelta[1]);
}
fhistos->fpVdeltaNorm->Fill( fcent, vdeltaNorm );
}
AliJTrackCounter *lpTrackCounter = new AliJTrackCounter(), *lpPairCounter = new AliJTrackCounter();
AliJBaseTrack *lPTr = NULL;
int noTriggs=0;
ftriggList->Clear();
for(int itrack=0; itrack<noAllTriggTracks; itrack++){
AliJBaseTrack *triggTr = (AliJBaseTrack*)finputList->At(itrack);
triggTr->SetTriggBin( fcard->GetBin(kTriggType, triggTr->Pt()) );
double ptt = triggTr->Pt();
double etat = triggTr->Eta();
double effCorr = 1.0/triggTr->GetTrackEff();
if( ptt>flowerPtAssocBoarder ){
fhistos->fhChargedPt[cBin]->Fill(ptt, effCorr );
fhistos->fhChargedPtNoCorr[cBin]->Fill( ptt );
fhistos->fhChargedEta->Fill(triggTr->Eta(), effCorr);
fhistos->fhChargedPtJacek[cBin]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
if( -0.8<etat && etat<-0.2) fhistos->fhChargedPtJacekEta[cBin][0]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
if( -0.2<etat && etat< 0.3) fhistos->fhChargedPtJacekEta[cBin][1]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
if( 0.3<etat && etat< 0.8) fhistos->fhChargedPtJacekEta[cBin][2]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
fhistos->fhChargedPtFiete->Fill(ptt, effCorr );
}
if( !triggTr->IsInTriggerBin() ) continue;
int iptt = triggTr->GetTriggBin();
fhistos->fhIphiTrigg[cBin][iptt]->Fill( triggTr->Phi(), effCorr);
fhistos->fhIetaTrigg[cBin][iptt]->Fill( triggTr->Eta(), effCorr);
if( ptt > lpTrackCounter->Pt() ) {
lpTrackCounter->Store(noTriggs, ptt, iptt);
lPTr = triggTr;
}
new ((*ftriggList)[noTriggs++]) AliJBaseTrack(*triggTr);
fhistos->fhTriggMult[cBin][iptt]->Fill(noAllTriggTracks);
}
if(fbLPpairCorrel){
int noPairs=0;
fpairList->Clear();
fpairCounterList->Clear();
for(int ii=0;ii<noTriggs-1;ii++){
AliJBaseTrack *triggTr1 = (AliJBaseTrack*)ftriggList->At(ii);
for(int jj=ii+1;jj<noTriggs;jj++){
AliJBaseTrack *triggTr2 = (AliJBaseTrack*)ftriggList->At(jj);
TLorentzVector lVPair = triggTr1->GetLorentzVector()+triggTr2->GetLorentzVector();
double fdphi = DeltaPhi(triggTr1->Phi(), triggTr2->Phi());
new ((*fpairList)[noPairs]) AliJBaseTrack(lVPair);
new ((*fpairCounterList)[noPairs++])
AliJTrackCounter( triggTr1->GetID(), triggTr2->GetID(), ii, jj, fdphi );
}
}
AliJBaseTrack *pairTr = NULL;
for(int ii=0;ii<noPairs;ii++){
pairTr = (AliJBaseTrack*)fpairList->At(ii);
AliJTrackCounter *pairCounter = (AliJTrackCounter*)fpairCounterList->At(ii);
if(pairTr->Pt() > lpPairCounter->Pt() && fabs(pairCounter->GetPairDPhi())<1.0) {
int iptt = fcard->GetBin(kTriggType, pairTr->Pt());
lpPairCounter = pairCounter;
lpPairCounter->Store(ii, pairTr->Pt(), iptt);
}
}
if(lpPairCounter->Exists()){
pairTr->SetParticleType(kJHadron);
fhistos->fhLPpairPt->Fill(pairTr->Pt());
}
}
fassocList->Clear();
int noAssocs=0;
double sumPtAroundLP = 0;
if(fjassoc==kJPizero) finputList = fpizeroList;
else if(fjassoc==kJHadron) finputList = fchargedHadronList;
else if(fjassoc==kJPhoton) finputList = fphotonList;
int noAllAssocTracks = finputList->GetEntries();
for(int itrack=0;itrack<noAllAssocTracks; itrack++){
AliJBaseTrack *assocTr = (AliJBaseTrack*)finputList->At(itrack);
assocTr->SetAssocBin( fcard->GetBin(kAssocType, assocTr->Pt()) );
if(assocTr->IsInAssocBin()){
int ipta = assocTr->GetAssocBin();
double effCorr = 1.0/assocTr->GetTrackEff();
fhistos->fhIphiAssoc[cBin][ipta]->Fill( assocTr->Phi(), effCorr);
fhistos->fhIetaAssoc[cBin][ipta]->Fill( assocTr->Eta(), effCorr);
new ((*fassocList)[noAssocs++]) AliJBaseTrack(*assocTr);
}
if(lpTrackCounter->Exists() && (lPTr->GetID()!=assocTr->GetID()) && (0.5 < assocTr->Pt())){
double dPhi = DeltaPhi( assocTr->Phi(), lPTr->Phi() );
double dEta = assocTr->Eta() - lPTr->Eta();
if(fIsolationR > sqrt(dPhi*dPhi+dEta*dEta)) sumPtAroundLP += assocTr->Pt();
}
}
FillXtHistos(finputList, lpTrackCounter);
if( lpTrackCounter->Exists() ){
double effCorr = 1./fEfficiency->GetCorrection(lpTrackCounter->Pt(), fHadronSelectionCut, fcent );
fhistos->fhLPpt->Fill(lpTrackCounter->Pt(), effCorr);
fhistos->fhLPeta->Fill(lPTr->Eta(), effCorr);
fhistos->fhBkgActivity[lpTrackCounter->GetPtBin()]->Fill(sumPtAroundLP/lpTrackCounter->Pt());
if( sumPtAroundLP/lpTrackCounter->Pt()< fcard->GetCutOnBkgActivity() &&
( fabs(lPTr->Eta()) < (fTrackEtaRange - fIsolationR) ) ){
fhistos->fhIsolatedLPpt->Fill(lpTrackCounter->Pt(), effCorr );
AliJBaseTrack* lpTrigger = (AliJBaseTrack*) ftriggList->At(lpTrackCounter->GetIndex());
lpTrigger->SetIsIsolated(1);
}
}
fhistos->fhAssocMult->Fill(noAssocs);
if(noAssocs>0 ) fassocPool->AcceptList(fassocList, fcent, zVert, noAllChargedTracks, fevt);
int noTriggTracs=-1;
noTriggTracs = fbTriggCorrel ? noTriggs : 1;
if(fbLPCorrel && !lpTrackCounter->Exists()) return;
if(fbLPpairCorrel && !lpPairCounter->Exists()) return;
AliJBaseTrack *triggTr = NULL;
for(int ii=0;ii<noTriggTracs;ii++){
if (fbTriggCorrel) triggTr = (AliJBaseTrack*)ftriggList->At(ii);
if (fbLPCorrel) triggTr = (AliJBaseTrack*)ftriggList->At(lpTrackCounter->GetIndex());
if (fbLPpairCorrel) triggTr = (AliJBaseTrack*)fpairList->At(lpPairCounter->GetIndex());
double ptt = triggTr->Pt();
int iptt = triggTr->GetTriggBin();
if(iptt<0) {
cout<<"Not registered trigger ! I better stop here." <<endl;
exit(-1);
}
double effCorr = 1.0/triggTr->GetTrackEff();
fhistos->fhTriggPtBin[cBin][zBin][iptt]->Fill(ptt, effCorr);
if(triggTr->GetIsIsolated()>0) fhistos->fhTriggPtBinIsolTrigg[kReal][cBin][iptt]->Fill(ptt, effCorr);
for(int jj=0;jj<noAssocs;jj++){
AliJBaseTrack *assocTr = (AliJBaseTrack*)fassocList->At(jj);
if(fbLPpairCorrel &&
(assocTr->GetID()==lpPairCounter->GetPairTrackID(0) ||
assocTr->GetID()==lpPairCounter->GetPairTrackID(1)) ) continue;
fcorrelations->FillAzimuthHistos(kReal, cBin, zBin, triggTr, assocTr);
}
}
if (fbLPpairCorrel)
fassocPool->Mix(fpairList, kAzimuthFill, fcent, zVert, noAllChargedTracks, fevt);
else
fassocPool->Mix(ftriggList, kAzimuthFill, fcent, zVert, noAllChargedTracks, fevt);
}
void AliJCORRAN::Terminate() {
fcorrelations->PrintOut();
fassocPool->PrintOut();
fEfficiency->Write();
fhistos->fHMG->Print();
}
particleType AliJCORRAN::GetParticleType(char *inchar){
for(int i=0;i<kNumberOfParticleTypes;i++) {
if(strcmp(inchar,kParticleTypeStrName[i])==0) return (particleType)i;
}
std::cout<<"Particle type <"<<inchar<<"> not recognized"<<std::endl;
exit(1);
}
double AliJCORRAN::DeltaPhi(double phi1, double phi2) {
double res = atan2(sin(phi1-phi2), cos(phi1-phi2));
return res>-kJPi*9./20. ? res : kJTwoPi+res ;
}
void AliJCORRAN::ScaleNotEquidistantHisto(TH1D *hid, const double sc=1){
for(int i=1;i<= hid->GetNbinsX();i++){
hid->SetBinContent(i,hid->GetBinContent(i)*sc/hid->GetBinWidth(i));
hid->SetBinError(i,hid->GetBinError(i)*sc/hid->GetBinWidth(i));
}
}
void AliJCORRAN::FillXtHistos(TClonesArray *inputList, AliJTrackCounter *lpTrackCounter){
JUNUSED(lpTrackCounter);
enum xTtype { kInclusive=0, kIsolated=1, kIsolatedLP=2} ;
double lowerPtCut = 0.2;
double isolationR = 0.4;
double fCutOnBkgActivity = 0.10;
int cBin = fcard->GetBin(kCentrType, fcent);
double sqrts = fSQRTS;
int noAllTriggTracks = inputList->GetEntries();
for(int itrack=0; itrack<noAllTriggTracks; itrack++){
AliJBaseTrack *triggTr = (AliJBaseTrack*)inputList->At(itrack);
double sumPtAroundTrigger = 0;
double ptt = triggTr->Pt();
double xtt = 2.0 * ptt / (1.0 * sqrts);
double effCorr = 1.0/triggTr->GetTrackEff();
fhistos->fhPtForXt[kInclusive][cBin]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
fhistos->fhXt[kInclusive][cBin]->Fill(xtt, effCorr );
fhistos->fhXtWeighted[kInclusive][cBin]->Fill(xtt, effCorr*1.0/xtt );
for(int jj=0;jj<inputList->GetEntriesFast();jj++){
AliJBaseTrack *assocTr = (AliJBaseTrack*)inputList->At(jj);
if(triggTr->GetID()==assocTr->GetID()) continue;
double pta = assocTr->Pt();
if( lowerPtCut < pta ){
double dPhi = DeltaPhi( assocTr->Phi(), triggTr->Phi() );
double dEta = assocTr->Eta() - triggTr->Eta();
if(isolationR > sqrt(dPhi*dPhi+dEta*dEta)) sumPtAroundTrigger += assocTr->Pt();
}
}
if( sumPtAroundTrigger/ptt < fCutOnBkgActivity &&
( fabs(triggTr->Eta()) < (fTrackEtaRange - isolationR) ) ){
fhistos->fhPtForXt[kIsolated][cBin]->Fill(ptt,effCorr*1.0/ptt);
fhistos->fhXt[kIsolated][cBin]->Fill(xtt, effCorr );
fhistos->fhXtWeighted[kIsolated][cBin]->Fill(xtt,effCorr*1.0/xtt);
}
}
}