#include "AliAODHandler.h"
#include "AliAODJet.h"
#include "AliVVertex.h"
+#include "AliVTrack.h"
#include "AliAnalysisTaskJetCorePP.h"
#include "AliHeader.h" //KF//
fhDphiTriggerJetAccept(0x0),
fhCentrality(0x0),
fhCentralityAccept(0x0),
+fhNofMultipleTriggers(0x0),
+fhNofMultipleTriggersCone(0x0),
+fhNofMultipleTriggersConeLow(0x0),
+fhNofMultipleTriggersConeHigh(0x0),
+fhDeltaRMultTriggers(0x0),
+fhDeltaPhiMultTriggers(0x0),
//fHJetPtRaw(0x0),
//fHLeadingJetPtRaw(0x0),
//fHDphiVsJetPtAll(0x0),
fhEntriesToMedianGen(0x0),
fhCellAreaToMedian(0x0),
fhCellAreaToMedianGen(0x0),
+fhNofMultipleTriggersGen(0x0),
+fhNofMultipleTriggersConeGen(0x0),
+fhNofMultipleTriggersConeGenLow(0x0),
+fhNofMultipleTriggersConeGenHigh(0x0),
+fhDeltaRMultTriggersGen(0x0),
+fhDeltaPhiMultTriggersGen(0x0),
+fhNofMultipleTriggersConeGenA(0x0),
+fhNofMultipleTriggersConeGenALow(0x0),
+fhNofMultipleTriggersConeGenAHigh(0x0),
+fhNofMultipleTriggersConeGenB(0x0),
+fhNofMultipleTriggersConeGenBLow(0x0),
+fhNofMultipleTriggersConeGenBHigh(0x0),
fIsChargedMC(0),
fIsKine(0),
fIsFullMC(0),
fhDphiTriggerJetAccept(0x0),
fhCentrality(0x0),
fhCentralityAccept(0x0),
+fhNofMultipleTriggers(0x0),
+fhNofMultipleTriggersCone(0x0),
+fhNofMultipleTriggersConeLow(0x0),
+fhNofMultipleTriggersConeHigh(0x0),
+fhDeltaRMultTriggers(0x0),
+fhDeltaPhiMultTriggers(0x0),
//fHJetPtRaw(0x0),
//fHLeadingJetPtRaw(0x0),
//fHDphiVsJetPtAll(0x0),
fhEntriesToMedianGen(0x0),
fhCellAreaToMedian(0x0),
fhCellAreaToMedianGen(0x0),
+fhNofMultipleTriggersGen(0x0),
+fhNofMultipleTriggersConeGen(0x0),
+fhNofMultipleTriggersConeGenLow(0x0),
+fhNofMultipleTriggersConeGenHigh(0x0),
+fhDeltaRMultTriggersGen(0x0),
+fhDeltaPhiMultTriggersGen(0x0),
+fhNofMultipleTriggersConeGenA(0x0),
+fhNofMultipleTriggersConeGenALow(0x0),
+fhNofMultipleTriggersConeGenAHigh(0x0),
+fhNofMultipleTriggersConeGenB(0x0),
+fhNofMultipleTriggersConeGenBLow(0x0),
+fhNofMultipleTriggersConeGenBHigh(0x0),
fIsChargedMC(0),
fIsKine(0),
fIsFullMC(0),
fhDphiTriggerJetAccept(a.fhDphiTriggerJetAccept),
fhCentrality(a.fhCentrality),
fhCentralityAccept(a.fhCentralityAccept),
+fhNofMultipleTriggers(a.fhNofMultipleTriggers),
+fhNofMultipleTriggersCone(a.fhNofMultipleTriggersCone),
+fhNofMultipleTriggersConeLow(a.fhNofMultipleTriggersConeLow),
+fhNofMultipleTriggersConeHigh(a.fhNofMultipleTriggersConeHigh),
+fhDeltaRMultTriggers(a.fhDeltaRMultTriggers),
+fhDeltaPhiMultTriggers(a.fhDeltaPhiMultTriggers),
//fHJetPtRaw(a.fHJetPtRaw),
//fHLeadingJetPtRaw(a.fHLeadingJetPtRaw),
//fHDphiVsJetPtAll(a.fHDphiVsJetPtAll),
fhEntriesToMedianGen(a.fhEntriesToMedianGen),
fhCellAreaToMedian(a.fhCellAreaToMedian),
fhCellAreaToMedianGen(a.fhCellAreaToMedianGen),
+fhNofMultipleTriggersGen(a.fhNofMultipleTriggersGen),
+fhNofMultipleTriggersConeGen(a.fhNofMultipleTriggersConeGen),
+fhNofMultipleTriggersConeGenLow(a.fhNofMultipleTriggersConeGenLow),
+fhNofMultipleTriggersConeGenHigh(a.fhNofMultipleTriggersConeGenHigh),
+fhDeltaRMultTriggersGen(a.fhDeltaRMultTriggersGen),
+fhDeltaPhiMultTriggersGen(a.fhDeltaPhiMultTriggersGen),
+fhNofMultipleTriggersConeGenA(a.fhNofMultipleTriggersConeGenA),
+fhNofMultipleTriggersConeGenALow(a.fhNofMultipleTriggersConeGenALow),
+fhNofMultipleTriggersConeGenAHigh(a.fhNofMultipleTriggersConeGenAHigh),
+fhNofMultipleTriggersConeGenB(a.fhNofMultipleTriggersConeGenB),
+fhNofMultipleTriggersConeGenBLow(a.fhNofMultipleTriggersConeGenBLow),
+fhNofMultipleTriggersConeGenBHigh(a.fhNofMultipleTriggersConeGenBHigh),
fIsChargedMC(a.fIsChargedMC),
fIsKine(a.fIsKine),
fIsFullMC(a.fIsFullMC),
fhEntriesToMedian = new TH1D("fhEntriesToMedian","fhEntriesToMedian",30,0,30);
fhCellAreaToMedian = new TH1D("fhCellAreaToMedian", "fhCellAreaToMedian", 75,0,1.5);
+ fhNofMultipleTriggers = new TH1D("fhNofMultipleTriggers","fhNofMultipleTriggers",20,0,20);
+ fhNofMultipleTriggersCone = new TH1D("fhNofMultipleTriggersCone","fhNofMultipleTriggersCone R<0.4",20,0,20);
+ fhNofMultipleTriggersConeLow = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConepTa15to20");
+ fhNofMultipleTriggersConeHigh = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConepTa20to50");
+ fhDeltaRMultTriggers = new TH1D("fhDeltaRMultTriggers","fhDeltaRMultTriggers", 100,0,4);
+ fhDeltaPhiMultTriggers = new TH1D("fhDeltaPhiMultTriggers","fhDeltaPhiRultTriggers", 100,-TMath::Pi(),TMath::Pi());
+
if(!fIsKine){
fOutputList->Add(fhJetPhi);
fOutputList->Add(fhTriggerPhi);
fOutputList->Add(fhCentralityAccept);
fOutputList->Add(fhEntriesToMedian);
fOutputList->Add(fhCellAreaToMedian);
+ fOutputList->Add(fhNofMultipleTriggers);
+ fOutputList->Add(fhNofMultipleTriggersCone);
+ fOutputList->Add(fhNofMultipleTriggersConeLow);
+ fOutputList->Add(fhNofMultipleTriggersConeHigh);
+ fOutputList->Add(fhDeltaRMultTriggers);
+ fOutputList->Add(fhDeltaPhiMultTriggers);
}
// raw spectra of INCLUSIVE jets
//Centrality, pTjet, A
fhCellAreaToMedianGen = (TH1D*) fhCellAreaToMedian->Clone("fhCellAreaToMedianGen");
fhCellAreaToMedianGen->SetTitle(Form("%s Gen MC", fhCellAreaToMedian->GetTitle()));
fOutputList->Add(fhCellAreaToMedianGen);
+
+ fhNofMultipleTriggersGen = (TH1D*) fhNofMultipleTriggers->Clone("fhNofMultipleTriggersGen");
+ fOutputList->Add(fhNofMultipleTriggersGen);
+
+ fhNofMultipleTriggersConeGen = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConeGen");
+ fOutputList->Add(fhNofMultipleTriggersConeGen);
+
+ fhNofMultipleTriggersConeGenLow = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConeGenpta15to20");
+ fOutputList->Add(fhNofMultipleTriggersConeGenLow);
+
+ fhNofMultipleTriggersConeGenHigh = (TH1D*) fhNofMultipleTriggersCone->Clone("fhNofMultipleTriggersConeGenpta20to50");
+ fOutputList->Add(fhNofMultipleTriggersConeGenHigh);
+
+
+
+ fhDeltaRMultTriggersGen = (TH1D*) fhDeltaRMultTriggers->Clone("fhDeltaRMultTriggersGen");
+ fOutputList->Add(fhDeltaRMultTriggersGen);
+
+ fhDeltaPhiMultTriggersGen = (TH1D*) fhDeltaPhiMultTriggers->Clone("fhDeltaPhiMultTriggersGen");
+ fOutputList->Add(fhDeltaPhiMultTriggersGen);
+
+
+ fhNofMultipleTriggersConeGenA = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen10");
+ fOutputList->Add(fhNofMultipleTriggersConeGenA);
+
+ fhNofMultipleTriggersConeGenALow = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen10pTa15to20");
+ fOutputList->Add(fhNofMultipleTriggersConeGenALow);
+
+ fhNofMultipleTriggersConeGenAHigh = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen10pTa20to50");
+ fOutputList->Add(fhNofMultipleTriggersConeGenAHigh);
+
+ fhNofMultipleTriggersConeGenB = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen5");
+ fOutputList->Add(fhNofMultipleTriggersConeGenB);
+
+ fhNofMultipleTriggersConeGenBLow = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen5pTa15to20");
+ fOutputList->Add(fhNofMultipleTriggersConeGenBLow);
+
+ fhNofMultipleTriggersConeGenBHigh = (TH1D*) fhNofMultipleTriggersConeGen->Clone("fhNofMultipleTriggersConeGen5pTa20to50");
+ fOutputList->Add(fhNofMultipleTriggersConeGenBHigh);
+
+
+
}
//-------------------------------------
// pythia histograms
cent = fESD->GetCentrality();
if(cent) centValue = cent->GetCentralityPercentile("V0M");
}else{
- centValue = aod->GetHeader()->GetCentrality();
+ //centValue = aod->GetHeader()->GetCentrality();
+ centValue = ((AliVAODHeader*)aod->GetHeader())->GetCentrality();
}
if(fDebug) printf("centrality: %f\n", centValue);
//Input events
//-----------------select disjunct event subsamples ----------------
if(!fIsKine){ //reconstructed data
- Int_t eventnum = aod->GetHeader()->GetEventNumberESDFile();
+ //Int_t eventnum = aod->GetHeader()->GetEventNumberESDFile();
+ AliAODHeader * header = dynamic_cast<AliAODHeader*>(aod->GetHeader());
+ if(!header) AliFatal("Not a standard AOD");
+
+ Int_t eventnum = header->GetEventNumberESDFile();
Int_t lastdigit = eventnum % 10;
if(!(fEventNumberRangeLow<=lastdigit && lastdigit<=fEventNumberRangeHigh)){
fHistEvtSelection->Fill(5);
PostData(1, fOutputList);
return;
- }
+ }
}
if(fDebug) std::cout<<" ACCEPTED EVENT "<<endl;
//============== analyze generator level MC ================
TList particleListGen; //list of tracks in MC
-
if(fIsChargedMC || fIsKine){
if(fIsKine){ //pure kine
Int_t iCounterGen = 0; //number of entries in particleListGen array
Int_t triggersMC[200];//list of trigger candidates
Int_t ntriggersMC = 0; //index in triggers array
+ Int_t triggersMCa[200]; //list of trigger candidates 10%eloss
+ Int_t ntriggersMCa = 0; //index in triggers array 10%eloss
+ Int_t triggersMCb[200]; //list of trigger candidates 5%eloss
+ Int_t ntriggersMCb = 0; //index in triggers array 5%eloss
+
if(!fIsKine){
if(fESD){//ESD input
}
}
}
-
+
+ if(fHardest==0){
+ Int_t npar = particleListGen.GetEntries();
+ for(Int_t ip=0; ip < npar; ip++){
+ AliVParticle *part = (AliVParticle*) particleListGen.At(ip);
+ if(!part) continue;
+
+ Double_t pta = 0.9 * part->Pt(); //10% energy loss
+ Double_t ptb = 0.95 * part->Pt(); //5% energy loss
+ if(fTriggerPtRangeLow <= pta && pta < fTriggerPtRangeHigh && ntriggersMCa<200){
+ triggersMCa[ntriggersMCa] = ip;
+ ntriggersMCa++;
+ }
+
+ if(fTriggerPtRangeLow <= ptb && ptb < fTriggerPtRangeHigh && ntriggersMCb<200){
+ triggersMCb[ntriggersMCb] = ip;
+ ntriggersMCb++;
+ }
+ }
+
+ if(ntriggersMCa>0){
+ Int_t rnda = fRandom->Integer(ntriggersMCa); //0 to ntriggers-1
+ Int_t indexTriggGena = triggersMCa[rnda];
+
+ Double_t deltaPhia, deltaEtaa, deltaRa;
+ Int_t aaLow = 0;
+ Int_t aaHigh = 0;
+
+ //Correlation with single inclusive TRIGGER
+ AliVParticle* tGenTa = (AliVParticle*) particleListGen.At(indexTriggGena);
+ if(tGenTa){
+ //for(Int_t ia=0; ia<ntriggersMCa; ia++)
+ for(Int_t ia=0; ia< npar; ia++){
+ //if(indexTriggGena == triggersMCa[ia]) continue;
+ if(indexTriggGena == ia) continue;
+
+ //AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(triggersMCa[ia]);
+ AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(ia);
+ if(!tGenTz) continue;
+ if(tGenTz->Pt()*0.9<15.0) continue;
+ if(tGenTz->Pt()*0.9>50.0) continue;
+
+ deltaPhia = RelativePhi(tGenTa->Phi(),tGenTz->Phi());
+ deltaEtaa = tGenTa->Eta()-tGenTz->Eta();
+ deltaRa = sqrt(deltaPhia*deltaPhia + deltaEtaa*deltaEtaa);
+
+ if(deltaRa<0.4){
+ if(tGenTz->Pt()*0.9<20.0) aaLow++; //15-20
+ else aaHigh++; //20-50
+ }
+ }
+ }
+ fhNofMultipleTriggersConeGenA->Fill(aaLow+aaHigh); // 15-50
+ fhNofMultipleTriggersConeGenALow->Fill(aaLow); //15-20
+ fhNofMultipleTriggersConeGenAHigh->Fill(aaHigh);//20-50
+ }
+
+ if(ntriggersMCb>0){
+ Int_t rndb = fRandom->Integer(ntriggersMCb); //0 to ntriggers-1
+ Int_t indexTriggGenb = triggersMCb[rndb];
+
+ Double_t deltaPhib, deltaEtab, deltaRb;
+ Int_t bbLow = 0;
+ Int_t bbHigh = 0;
+
+ //Correlation with single inclusive TRIGGER
+ AliVParticle* tGenTb = (AliVParticle*) particleListGen.At(indexTriggGenb);
+ if(tGenTb){
+ //for(Int_t ib=0; ib<ntriggersMCb; ib++)
+ for(Int_t ib=0; ib<npar; ib++){
+ //if(indexTriggGenb == triggersMCb[ib]) continue;
+ if(indexTriggGenb == ib) continue;
+
+ //AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(triggersMCb[ib]);
+ AliVParticle* tGenTz = (AliVParticle*) particleListGen.At(ib);
+ if(!tGenTz) continue;
+ if(tGenTz->Pt()*0.95<15.0) continue;
+ if(tGenTz->Pt()*0.95>50.0) continue;
+
+ deltaPhib = RelativePhi(tGenTb->Phi(),tGenTz->Phi());
+ deltaEtab = tGenTb->Eta()-tGenTz->Eta();
+ deltaRb = sqrt(deltaPhib*deltaPhib + deltaEtab*deltaEtab);
+
+ if(deltaRb<0.4){
+ if(tGenTz->Pt()*0.95<20.0) bbLow++; //15-20
+ else bbHigh++;
+ }
+ }
+ }
+ fhNofMultipleTriggersConeGenB->Fill(bbLow+bbHigh); //15-50
+ fhNofMultipleTriggersConeGenBLow->Fill(bbLow);//15-20
+ fhNofMultipleTriggersConeGenBHigh->Fill(bbHigh);//20-50
+ }
+ }
+
+
+
//============== Estimate bg in generated events ==============
Double_t rhoFromCellMedianGen=0.0, rhoConeGen=0.0;
if(ntriggersMC>0){ //there is at least one trigger
Int_t rnd = fRandom->Integer(ntriggersMC); //0 to ntriggers-1
indexTriggGen = triggersMC[rnd];
+
+ fhNofMultipleTriggersGen->Fill(ntriggersMC-1);
+
+ Double_t deltaPhi, deltaEta, deltaR;
+ Int_t iLow = 0;
+ Int_t iHigh = 0;
+
+ //Correlation with single inclusive TRIGGER
+ AliVParticle* tGenT1 = (AliVParticle*) particleListGen.At(indexTriggGen);
+ if(tGenT1){
+ //for(Int_t ia=0; ia<ntriggersMC; ia++)
+ for(Int_t ia=0; ia< particleListGen.GetEntries(); ia++){
+ //if(indexTriggGen == triggersMC[ia]) continue;
+ if(indexTriggGen == ia) continue;
+
+ //AliVParticle* tGenT2 = (AliVParticle*) particleListGen.At(triggersMC[ia]);
+ AliVParticle* tGenT2 = (AliVParticle*) particleListGen.At(ia);
+ if(!tGenT2) continue;
+ if(tGenT2->Pt()<15.0) continue;
+ if(tGenT2->Pt()>50.0) continue;
+ deltaPhi = RelativePhi(tGenT1->Phi(),tGenT2->Phi());
+ deltaEta = tGenT1->Eta()-tGenT2->Eta();
+ deltaR = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+
+ fhDeltaRMultTriggersGen->Fill(deltaR);
+ fhDeltaPhiMultTriggersGen->Fill(deltaPhi);
+
+ if(deltaR<0.4){
+ if(tGenT2->Pt()<20.0) iLow++;
+ else iHigh++;
+ }
+ }
+ }
+ fhNofMultipleTriggersConeGen->Fill(iLow+iHigh);
+ fhNofMultipleTriggersConeGenLow->Fill(iLow);
+ fhNofMultipleTriggersConeGenHigh->Fill(iHigh);
+
}else{
indexTriggGen = -1; //trigger not found
}
Double_t ptmax = -10;
Int_t triggers[200];
Int_t ntriggers = 0; //index in triggers array
+
for(Int_t it = 0; it < aodevt->GetNumberOfTracks(); it++){
- AliAODTrack *tr = aodevt->GetTrack(it);
-
+ //AliAODTrack *tr = aodevt->GetTrack(it);
+ AliAODTrack *tr = dynamic_cast<AliAODTrack*>(aodevt->GetTrack(it));
+ if(!tr) AliFatal("Not a standard AOD");
+
if((fFilterMask > 0) && !(tr->TestFilterBit(fFilterMask))) continue;
//if((fFilterMask > 0) && !(tr->IsHybridGlobalConstrainedGlobal())) continue;
if(TMath::Abs((Float_t) tr->Eta()) > fTrackEtaCut) continue;
if(fHardest==0 && ntriggers>0){ //select random inclusive trigger
Int_t rnd = fRandom->Integer(ntriggers); //0 to ntriggers-1
index = triggers[rnd];
+
+ fhNofMultipleTriggers->Fill(ntriggers-1);
+
+ Double_t deltaPhi, deltaEta, deltaR;
+ Int_t iLow=0;
+ Int_t iHigh=0;
+ //Correlation with single inclusive trigger
+ AliVParticle* tGent1 = (AliVParticle*) list->At(index);
+ if(tGent1){
+ //for(Int_t ia=0; ia<ntriggers; ia++)
+ for(Int_t ia=0; ia<list->GetEntries(); ia++){
+ //if(triggers[ia]==index) continue;
+ if(ia==index) continue;
+ //AliVParticle* tGent2 = (AliVParticle*) list->At(triggers[ia]);
+ AliVParticle* tGent2 = (AliVParticle*) list->At(ia);
+ if(!tGent2) continue;
+ if(tGent2->Pt()<15.0) continue;
+ if(tGent2->Pt()>50.0) continue;
+ deltaPhi = RelativePhi(tGent1->Phi(),tGent2->Phi());
+ deltaEta = tGent1->Eta()-tGent2->Eta();
+ deltaR = sqrt(deltaPhi*deltaPhi + deltaEta*deltaEta);
+
+ fhDeltaRMultTriggers->Fill(deltaR);
+ fhDeltaPhiMultTriggers->Fill(deltaPhi);
+
+ if(deltaR<0.4){
+ if(tGent2->Pt()<20.0) iLow++;
+ else iHigh++;
+ }
+ }
+ }
+ fhNofMultipleTriggersCone->Fill(iLow+iHigh);
+ fhNofMultipleTriggersConeLow->Fill(iLow);
+ fhNofMultipleTriggersConeHigh->Fill(iHigh);
+
}
return index;