2 // Di-Jet angular correlations class
3 // Author: Greeshma Koyithatta Meethaleveedu and Ragahva Varma
12 #include "TObjArray.h"
13 #include "THnSparse.h"
15 #include "AliAnalysisTask.h"
16 #include "AliAnalysisManager.h"
17 #include "AliAnalysisTaskSE.h"
18 #include "AliCentrality.h"
19 #include "AliMultiplicity.h"
20 #include "AliESDEvent.h"
21 #include "AliESDtrackCuts.h"
22 #include "AliESDInputHandler.h"
23 #include "AliVEvent.h"
24 #include "AliAODEvent.h"
25 #include "AliVTrack.h"
26 #include "AliAODTrack.h"
27 #include "AliAODHandler.h"
28 #include "AliAODInputHandler.h"
29 #include "AliAODMCParticle.h"
30 #include "AliAODMCHeader.h"
31 #include "AliMCParticle.h"
32 #include "AliMCEvent.h"
34 #include "AliInputEventHandler.h"
35 #include "AliEventPoolManager.h"
37 #include "AliAnalysisTaskDiJetCorrelations.h"
42 ClassImp(AliAnalysisTaskDiJetCorrelations)
44 //_____________________| Constructor
45 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations():
47 fSetSystemValue(kTRUE),
48 fRecoOrMontecarlo(kTRUE),
57 fTrigger1pTHighThr(0),
59 fTrigger2pTHighThr(0),
61 fCutResonances(kTRUE),
62 fCutConversions(kTRUE),
63 ftwoTrackEfficiencyCut(kTRUE),
64 fuseVarCentBins(kFALSE),
65 fuseVarPtBins(kFALSE),
75 fMEMaxPoolEvent(1000),
79 fControlConvResT1(0x0),
80 fControlConvResT2(0x0),
81 fControlConvResMT1(0x0),
82 fControlConvResMT2(0x0)
84 for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
87 //_____________________| Specific Constructor
88 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations(const char *name):
89 AliAnalysisTaskSE(name),
90 fSetSystemValue(kTRUE),
91 fRecoOrMontecarlo(kTRUE),
100 fTrigger1pTHighThr(0),
101 fTrigger2pTLowThr(0),
102 fTrigger2pTHighThr(0),
104 fCutResonances(kTRUE),
105 fCutConversions(kTRUE),
106 ftwoTrackEfficiencyCut(kTRUE),
107 fuseVarCentBins(kFALSE),
108 fuseVarPtBins(kFALSE),
118 fMEMaxPoolEvent(1000),
122 fControlConvResT1(0x0),
123 fControlConvResT2(0x0),
124 fControlConvResMT1(0x0),
125 fControlConvResMT2(0x0)
128 Info("AliAnalysisTaskDiJetCorrelations","Calling Constructor");
129 for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
130 DefineInput(0, TChain::Class());
131 DefineOutput(1, TList::Class()); // Basic output slot (..)
132 DefineOutput(2, TList::Class()); // Correlations form Data and MC
135 //___________________________________| Copy Constructor
136 AliAnalysisTaskDiJetCorrelations::AliAnalysisTaskDiJetCorrelations(const AliAnalysisTaskDiJetCorrelations &source):
137 AliAnalysisTaskSE(source),
138 fSetSystemValue(source.fSetSystemValue),
139 fRecoOrMontecarlo(source.fSetSystemValue),
140 fReadMC(source.fReadMC),
141 fSetFilterBit(source.fSetFilterBit),
143 farrayMC(source.farrayMC),
144 fCentrOrMult(source.fCentrOrMult),
145 fMinCentrality(source.fMinCentrality),
146 fMaxCentrality(source.fMaxCentrality),
147 fTrigger1pTLowThr(source.fTrigger1pTLowThr),
148 fTrigger1pTHighThr(source.fTrigger1pTHighThr),
149 fTrigger2pTLowThr(source.fTrigger2pTLowThr),
150 fTrigger2pTHighThr(source.fTrigger2pTHighThr),
151 fAlpha(source.fAlpha),
152 fCutResonances(source.fCutResonances),
153 fCutConversions(source.fCutConversions),
154 ftwoTrackEfficiencyCut(source.ftwoTrackEfficiencyCut),
155 fuseVarCentBins(source.fuseVarCentBins),
156 fuseVarPtBins(source.fuseVarPtBins),
157 fHistNEvents(source.fHistNEvents),
158 fHistT1CorrTrack(source.fHistT1CorrTrack),
159 fHistT2CorrTrack(source.fHistT2CorrTrack),
160 fOutputQA(source.fOutputQA),
161 fOutputCorr(source.fOutputCorr),
162 f3DEffCor(source.f3DEffCor),
164 fPoolMgr(source.fPoolMgr),
165 fMixedEvent(source.fMixedEvent),
166 fMEMaxPoolEvent(source.fMEMaxPoolEvent),
167 fMEMinTracks(source.fMEMinTracks),
168 fMEMinEventToMix(source.fMEMinEventToMix),
169 fHistTrigDPhi(source.fHistTrigDPhi),
170 fControlConvResT1(source.fControlConvResT1),
171 fControlConvResT2(source.fControlConvResT2),
172 fControlConvResMT1(source.fControlConvResMT1),
173 fControlConvResMT2(source.fControlConvResMT2)
175 for ( Int_t i = 0; i < 9; i++)fHistQA[i] = NULL;
178 //_____________________| Destructor
179 AliAnalysisTaskDiJetCorrelations::~AliAnalysisTaskDiJetCorrelations()
181 if(fOutputQA) {delete fOutputQA; fOutputQA = 0;}
182 if(fOutputCorr) {delete fOutputCorr; fOutputCorr = 0;}
183 if(fHistNEvents) {delete fHistNEvents; fHistNEvents = 0;}
186 //________________________________________| Assignment Constructor
187 AliAnalysisTaskDiJetCorrelations& AliAnalysisTaskDiJetCorrelations::operator=(const AliAnalysisTaskDiJetCorrelations& orig)
189 if (&orig == this) return *this;
190 AliAnalysisTaskSE::operator=(orig);
192 fSetSystemValue= orig.fSetSystemValue;
193 fRecoOrMontecarlo = orig.fRecoOrMontecarlo;
194 fReadMC = orig.fReadMC;
195 fSetFilterBit = orig.fSetFilterBit;
197 farrayMC = orig.farrayMC;
198 fCentrOrMult = orig.fCentrOrMult;
199 fMinCentrality = orig.fMinCentrality;
200 fMaxCentrality = orig.fMaxCentrality;
201 fTrigger1pTLowThr = orig.fTrigger1pTLowThr;
202 fTrigger1pTHighThr = orig.fTrigger1pTHighThr;
203 fTrigger2pTLowThr = orig.fTrigger2pTLowThr;
204 fTrigger2pTHighThr = orig.fTrigger2pTHighThr;
206 fCutResonances = orig.fCutResonances;
207 fCutConversions = orig.fCutConversions;
208 ftwoTrackEfficiencyCut = orig.ftwoTrackEfficiencyCut;
209 fuseVarCentBins = orig.fuseVarCentBins;
210 fuseVarPtBins = orig.fuseVarPtBins;
211 fHistNEvents = orig.fHistNEvents;
212 fHistT1CorrTrack = orig.fHistT1CorrTrack;
213 fHistT2CorrTrack = orig.fHistT2CorrTrack;
214 fOutputQA = orig.fOutputQA;
215 fOutputCorr = orig.fOutputCorr;
216 f3DEffCor = orig.f3DEffCor;
218 fPoolMgr = orig.fPoolMgr;
219 fMixedEvent = orig.fMixedEvent;
220 fMEMaxPoolEvent = orig.fMEMaxPoolEvent;
221 fMEMinTracks = orig.fMEMinTracks;
222 fMEMinEventToMix = orig.fMEMinEventToMix;
226 //_____________________| UserCreate Output
227 void AliAnalysisTaskDiJetCorrelations::UserCreateOutputObjects()
229 fOutputQA = new TList();
230 fOutputQA->SetOwner();
231 fOutputQA->SetName("BasicQAHistograms");
233 fOutputCorr = new TList();
234 fOutputCorr->SetOwner();
235 fOutputCorr->SetName("CorrelationsHistograms");
237 fHistNEvents = new TH1F("fHistNEvents", "number of events ", 10, -0.5, 9.5);
238 fHistNEvents->GetXaxis()->SetBinLabel(1,"nEvents analyzed");
239 fHistNEvents->GetXaxis()->SetBinLabel(2,"Rejected due Null Vtx and B");
240 fHistNEvents->GetXaxis()->SetBinLabel(3,"Within choosen centrality");
241 fHistNEvents->GetXaxis()->SetBinLabel(4,"With Good Vertex");
242 fHistNEvents->GetXaxis()->SetBinLabel(5,"With Good SPDVertex");
243 fHistNEvents->GetXaxis()->SetBinLabel(6,"nTrack all chosen");
244 fHistNEvents->GetXaxis()->SetBinLabel(7,"nTrack Trigger1");
245 fHistNEvents->GetXaxis()->SetBinLabel(8,"nTrack Trigger2");
246 fHistNEvents->GetXaxis()->SetBinLabel(9,"nEvents with T1");
247 fHistNEvents->GetXaxis()->SetBinLabel(10,"number of DiJet");
248 fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
249 fHistNEvents->Sumw2();
250 fHistNEvents->SetMinimum(0);
251 fOutputQA->Add(fHistNEvents);
253 fHistT1CorrTrack = new TH1F("fHistT1CorrTrack", "T1 nCorr tracks ", 5, -0.5, 4.5);
254 fHistT1CorrTrack->GetXaxis()->SetBinLabel(1,"nTrack Total");
255 fHistT1CorrTrack->GetXaxis()->SetBinLabel(2,"after conversion");
256 fHistT1CorrTrack->GetXaxis()->SetBinLabel(3,"after K0 resonance");
257 fHistT1CorrTrack->GetXaxis()->SetBinLabel(4,"after Lambda resonance");
258 fHistT1CorrTrack->GetXaxis()->SetBinLabel(5,"after 2track eff");
259 fHistT1CorrTrack->GetXaxis()->SetNdivisions(1,kFALSE);
260 fHistT1CorrTrack->Sumw2();
261 fHistT1CorrTrack->SetMinimum(0);
262 fOutputQA->Add(fHistT1CorrTrack);
264 fHistT2CorrTrack = new TH1F("fHistT2CorrTrack", "T2 nCorr tracks ", 5, -0.5, 4.5);
265 fHistT2CorrTrack->GetXaxis()->SetBinLabel(1,"nTrack Total");
266 fHistT2CorrTrack->GetXaxis()->SetBinLabel(2,"after conversion");
267 fHistT2CorrTrack->GetXaxis()->SetBinLabel(3,"after K0 resonance");
268 fHistT2CorrTrack->GetXaxis()->SetBinLabel(4,"after Lambda resonance");
269 fHistT2CorrTrack->GetXaxis()->SetBinLabel(5,"after 2track eff");
270 fHistT2CorrTrack->GetXaxis()->SetNdivisions(1,kFALSE);
271 fHistT2CorrTrack->Sumw2();
272 fHistT2CorrTrack->SetMinimum(0);
273 fOutputQA->Add(fHistT2CorrTrack);
277 Bool_t DefPool = DefineMixedEventPool();
279 AliInfo("UserCreateOutput: Pool is not define properly");
283 PostData(1,fOutputQA);
284 PostData(2,fOutputCorr);
288 //_____________________| User Exec Part
289 void AliAnalysisTaskDiJetCorrelations::UserExec(Option_t *)
292 AliAODEvent *aod = dynamic_cast<AliAODEvent*>(InputEvent());
293 if(!aod && AODEvent() && IsStandardAOD()) {
294 aod = dynamic_cast<AliAODEvent*> (AODEvent());
296 printf("AliAnalysisTaskDiJetCorrelations::UserExec: AOD not found!\n");
300 fHistNEvents->Fill(0);
302 if(!fRecoOrMontecarlo){ // MC Kine
303 farrayMC = dynamic_cast<TClonesArray*>(aod->FindListObject(AliAODMCParticle::StdBranchName()));
305 AliError("Array of MC particles not found");
308 AliAODMCHeader *mcHeader = NULL;
309 mcHeader = (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
311 printf("AliAnalysisTaskDiJetCorrelations::UserExec: MC header branch not found!\n");
316 if(!aod->GetPrimaryVertex()||TMath::Abs(aod->GetMagneticField())<0.001) return;
318 bSign = (aod->GetMagneticField() > 0) ? 1 : -1;
319 fHistNEvents->Fill(1);
321 AliCentrality *centralityObj = 0x0;
322 if(fSetSystemValue){ // pPb, PbPb
323 centralityObj = ((AliVAODHeader*)aod->GetHeader())->GetCentralityP();
324 fCentrOrMult = centralityObj->GetCentralityPercentileUnchecked("V0M");
325 if(centralityObj->GetQuality()!=0) return;
326 if((abs(fCentrOrMult)) < 0. || (abs(fCentrOrMult)) > 100.1)return;
328 else if(!fSetSystemValue){ // pp, pPb
329 Double_t count = -1, mineta = -1.0, maxeta = 1.0;
330 AliAODTracklets* tracklets = aod->GetTracklets();
331 Int_t nTr=tracklets->GetNumberOfTracklets();
332 for(Int_t iTr=0; iTr<nTr; iTr++){
333 Double_t theta=tracklets->GetTheta(iTr);
334 Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
335 if(eta>mineta && eta<maxeta) count++;
337 fCentrOrMult = count;
339 fHistNEvents->Fill(2); //
341 AliAODVertex *vtxPrm = (AliAODVertex*)aod->GetPrimaryVertex();
342 Bool_t isGoodVtx=kFALSE;
343 TString primTitle = vtxPrm->GetTitle();
344 if(primTitle.Contains("VertexerTracks") && vtxPrm->GetNContributors()>0) {
346 fHistNEvents->Fill(3);
348 if(!isGoodVtx) return;
350 Float_t zVertex = vtxPrm->GetZ();
351 if (TMath::Abs(zVertex) > 10) return;
352 fHistQA[0]->Fill(zVertex);
354 const AliAODVertex* vtxSPD = aod->GetPrimaryVertexSPD();
355 if(vtxSPD->GetNContributors()<=0) return;
356 TString vtxTyp = vtxSPD->GetTitle();
357 Double_t cov[6] = {0};
358 vtxSPD->GetCovarianceMatrix(cov);
359 Double_t zRes = TMath::Sqrt(cov[5]);
360 if(vtxTyp.Contains("vertexer:Z") && (zRes > 0.25)) return;
361 if(TMath::Abs(vtxSPD->GetZ() - vtxPrm->GetZ()) > 0.5) return;
362 fHistNEvents->Fill(4);
364 TObjArray* fTrackArray = new TObjArray;
365 fTrackArray->SetOwner(kTRUE);
367 Double_t refmaxpT1 = -999, refmaxpT2 = -999;
368 Double_t etaMaxpT1 = -999, etaMaxpT2 = -999;
369 Double_t phiMaxpT1 = -999, phiMaxpT2 = -999;
370 Short_t Charge1 = -999, Charge2 = -999;
372 TString typeData = "";
375 if(fRecoOrMontecarlo){
377 typeData += "Data";//data
379 typeData += "MCrc"; // MC reco
381 typeData += "MCKn"; // MC Generations
386 }else if(fMixedEvent){
393 if(TMath::Abs(zVertex)>=10){
394 AliInfo(Form("Event with Zvertex = %0.2f cm out of pool bounds, SKIPPING",zVertex));
398 fPool= fPoolMgr->GetEventPool(fCentrOrMult, zVertex);
400 AliInfo(Form("No pool found for Event: multiplicity = %f, zVtx = %f cm", fCentrOrMult, zVertex));
405 for (Int_t iTracks = 0; iTracks < aod->GetNumberOfTracks(); iTracks++){
407 AliAODTrack* fAodTracks = (AliAODTrack*)aod->GetTrack(iTracks);
408 if (!fAodTracks)continue;
410 if(fSetFilterBit) if (!fAodTracks->TestFilterBit(fbit)) continue;
411 if(fAodTracks->Eta() < -0.8 || fAodTracks->Eta() > 0.8)continue;
412 if (fAodTracks->Pt() < 0.5 || fAodTracks->Pt() > 30.)continue;
415 fHistNEvents->Fill(5);
416 fHistQA[1]->Fill(fAodTracks->GetTPCClusterInfo(2,1));
417 fHistQA[3]->Fill(fAodTracks->DCA());
418 fHistQA[4]->Fill(fAodTracks->ZAtDCA());
419 fHistQA[5]->Fill(fAodTracks->Chi2perNDF());
420 fHistQA[6]->Fill(fAodTracks->Pt());
421 fHistQA[7]->Fill(fAodTracks->Phi());
422 fHistQA[8]->Fill(fAodTracks->Eta());
424 if(fRecoOrMontecarlo){ // reconstruction of data and MC
426 // is track associated to particle ? if yes + implimenting the physical primary..
427 Int_t label = TMath::Abs(fAodTracks->GetLabel());
429 AliDebug(3,"Particle not matching MC label \n");
433 AliAODMCParticle *mcPart = (AliAODMCParticle*)fMCEvent->GetTrack(label);
434 if (!mcPart->IsPhysicalPrimary()) continue;
435 fTrackArray->Add(fAodTracks);
437 fTrackArray->Add(fAodTracks); //Storing all tracks for Data
440 if(fAodTracks->Pt() >= fTrigger1pTLowThr && fAodTracks->Pt() <= fTrigger1pTHighThr){
441 if(fAodTracks->Pt() > refmaxpT1){
442 refmaxpT1 = fAodTracks->Pt();
443 etaMaxpT1 = fAodTracks->Eta();
444 phiMaxpT1 = fAodTracks->Phi();
445 Charge1 = fAodTracks->Charge();
447 fHistNEvents->Fill(6);//shouldn't the line be here?
452 if(!fMixedEvent)if(refmaxpT1 < fTrigger1pTLowThr || refmaxpT1 > fTrigger1pTHighThr)return;
453 fHistNEvents->Fill(8);
455 for(Int_t entryT2=0; entryT2<fTrackArray->GetEntries(); entryT2++){
457 TObject* obj = fTrackArray->At(entryT2);
458 AliAODTrack* fAodTracksT2 = (AliAODTrack*)obj;
460 if(fAodTracksT2->Pt() >= fTrigger2pTLowThr && fAodTracksT2->Pt() <= fTrigger2pTHighThr){
462 Double_t phiT2 = fAodTracksT2->Phi();
463 Double_t TrigDPhi = phiMaxpT1-phiT2;
465 Double_t TrigDPhi12 = AssignCorrectPhiRange(TrigDPhi);
466 Double_t B2BTrigDPhi = TMath::Abs(TrigDPhi12-fAlpha);
468 if(B2BTrigDPhi > (TMath::Pi())/8)continue;
469 fHistTrigDPhi->Fill(B2BTrigDPhi);
471 if(fAodTracksT2->Pt() > refmaxpT2 ){
472 fHistNEvents->Fill(7);
473 refmaxpT2 = fAodTracksT2->Pt();
474 etaMaxpT2 = fAodTracksT2->Eta();
475 phiMaxpT2 = fAodTracksT2->Phi();
476 Charge2 = fAodTracksT2->Charge();
481 if(!fMixedEvent)if(refmaxpT2 < fTrigger2pTLowThr || refmaxpT2 > fTrigger2pTHighThr)return;
482 fHistNEvents->Fill(9);
484 if (refmaxpT1 != -999 && refmaxpT2 != -999){
486 if(TMath::Abs(zVertex)>=10)AliInfo(Form("Event with Zvertex = %.2f cm out of pool bounds, SKIPPING",zVertex));
488 Double_t fCentZvtxpT1[3] = {fCentrOrMult, zVertex, refmaxpT1};
489 if(!fMixedEvent)((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxpT_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fCentZvtxpT1);
491 Double_t fCentZvtxpT2[3] = {fCentrOrMult, zVertex, refmaxpT2};
492 if(!fMixedEvent)((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxpT_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fCentZvtxpT2);
494 Int_t NofEventsinPool = 1, NumberOfTracksStore=0; // SE
495 if(fMixedEvent){ //ME
496 Bool_t PoolQuality = ProcessMixedEventPool();
498 AliInfo("Mixed event analysis: pool is not ready");
501 NofEventsinPool = fPool->GetCurrentNEvents();
504 TObjArray* SEMEEvtTracks = (TObjArray*)fTrackArray->Clone("SE");
505 for (Int_t jMix =0; jMix < NofEventsinPool; jMix++){
507 if(fMixedEvent)SEMEEvtTracks = fPool->GetEvent(jMix); // replacing from pool
508 if(!SEMEEvtTracks)return;
510 NumberOfTracksStore = SEMEEvtTracks->GetEntriesFast();
511 //cout << "Number of Tracks in this event are = " << NumberOfTracksStore << endl;
512 for(int k=0; k < NumberOfTracksStore; k++){
514 TObject* objSEorME = SEMEEvtTracks->At(k);
515 AliAODTrack* fAodTracksAS = (AliAODTrack*)objSEorME;
516 if(!fAodTracksAS) continue;
517 if (fAodTracksAS->Pt() > refmaxpT1)continue;
520 if(fAodTracksAS->Eta() < -0.8 || fAodTracksAS->Eta() > 0.8)continue;
521 if(fAodTracksAS->Pt() < 0.5 || fAodTracksAS->Pt() > 30)continue;
522 if(fSetFilterBit) if (!fAodTracksAS->TestFilterBit(fbit)) continue;
525 if(fAodTracksAS->Pt() < refmaxpT1){
527 Bool_t CutForConversionResonanceTrg1 = ConversionResonanceCut(refmaxpT1, phiMaxpT1, etaMaxpT1, Charge1, fAodTracksAS,fControlConvResT1, fHistT1CorrTrack);
528 if(fCutConversions || fCutResonances)if(!CutForConversionResonanceTrg1)continue;
530 Bool_t CutForTwoTrackEffiTrg1 = TwoTrackEfficiencyCut(refmaxpT1, phiMaxpT1, etaMaxpT1, Charge1, fAodTracksAS, bSign);
531 if(ftwoTrackEfficiencyCut)if(!CutForTwoTrackEffiTrg1)continue;
532 fHistT1CorrTrack->Fill(4);
534 Double_t deltaPhi1 = AssignCorrectPhiRange(phiMaxpT1 - fAodTracksAS->Phi());
535 Double_t deltaEta1 = etaMaxpT1 - fAodTracksAS->Eta();
537 Double_t ptTrack1 = fAodTracksAS->Pt();
538 Double_t ptLim_Sparse1 = 0.0;
539 ptLim_Sparse1 =((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->GetAxis(4)->GetXmax();
540 if(ptTrack1 > ptLim_Sparse1)ptTrack1 = ptLim_Sparse1-0.01; //filling all pT
542 Double_t CentzVtxDEtaDPhiTrg1[5] = {fCentrOrMult, zVertex, deltaEta1, deltaPhi1, ptTrack1};
543 Double_t effvalueT1 = 1.0;// GetTrackbyTrackEffValue(fAodTracksAS, fCentrOrMult, f3DEffCor);
544 ((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg1CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->Fill(CentzVtxDEtaDPhiTrg1, 1/effvalueT1);
546 //Double_t fBasicsTrg1[5] = {fAodTracksAS->Pt(), fAodTracksAS->Eta(), fCentrOrMult, zVertex, fAodTracksAS->Phi()};
547 //if(!fMixedEvent)((THnSparseD*)fOutputQA->FindObject(Form("ThnTrg1BasicsPlots_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fBasicsTrg1);
551 if (fAodTracksAS->Pt() < refmaxpT2){
553 Bool_t CutForConversionResonanceTrg2 = ConversionResonanceCut(refmaxpT2, phiMaxpT2, etaMaxpT2, Charge2, fAodTracksAS,fControlConvResT2, fHistT2CorrTrack);
554 if(fCutConversions || fCutResonances)if(!CutForConversionResonanceTrg2)continue;
556 Bool_t CutForTwoTrackEffiTrg2 = TwoTrackEfficiencyCut(refmaxpT2, phiMaxpT2, etaMaxpT2, Charge2, fAodTracksAS, bSign);
557 if(ftwoTrackEfficiencyCut)if(!CutForTwoTrackEffiTrg2)continue;
558 fHistT2CorrTrack->Fill(4);
560 Double_t deltaPhi2 = AssignCorrectPhiRange(phiMaxpT2 - fAodTracksAS->Phi());
561 Double_t deltaEta2 = etaMaxpT2 - fAodTracksAS->Eta();
563 Double_t ptLim_Sparse2 = 0.0;
564 Double_t ptTrack2 = fAodTracksAS->Pt();
565 ptLim_Sparse2 =((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->GetAxis(4)->GetXmax();
566 if(ptTrack2 > ptLim_Sparse2) ptTrack2 = ptLim_Sparse2-0.01; //filling all the pT in last bin
568 Double_t CentzVtxDEtaDPhiTrg2[5] = {fCentrOrMult, zVertex, deltaEta2, deltaPhi2,ptTrack2};
569 Double_t effvalueT2 =1.0;// GetTrackbyTrackEffValue(fAodTracksAS, fCentrOrMult,f3DEffCor);
571 ((THnSparseD*)fOutputCorr->FindObject(Form("ThnTrg2CentZvtxDEtaDPhi_%s_%s",typeData.Data(), SEorME.Data())))->Fill(CentzVtxDEtaDPhiTrg2,1/effvalueT2);
573 //Double_t fBasicsTrg2[5] = {fAodTracksAS->Pt(), fAodTracksAS->Eta(), fCentrOrMult, zVertex, fAodTracksAS->Phi()};
574 //if(!fMixedEvent)((THnSparseD*)fOutputQA->FindObject(Form("ThnTrg2BasicsPlots_%s_%s",typeData.Data(), SEorME.Data())))->Fill(fBasicsTrg2);
582 TObjArray* tracksClone = NULL;//
583 tracksClone = (TObjArray*)fTrackArray->Clone();
584 if(fMixedEvent && tracksClone->GetEntriesFast()>0)fPool->UpdatePool(tracksClone);
586 PostData(1, fOutputQA);
587 PostData(2, fOutputCorr);
590 //_____________________|Terminate
591 void AliAnalysisTaskDiJetCorrelations::Terminate(Option_t *){
593 fOutputQA = dynamic_cast<TList*> (GetOutputData(1));
595 printf("ERROR: Output list not available\n");
599 fOutputCorr = dynamic_cast<TList*> (GetOutputData(2));
601 printf("ERROR: fOutputCorr not available\n");
607 //______________________________| Cuts of Resonance and Conversions..
608 Bool_t AliAnalysisTaskDiJetCorrelations::ConversionResonanceCut(Double_t refmaxpT, Double_t phiMaxpT, Double_t etaMaxpT, Double_t Charge, AliAODTrack* AodTracks, TH2F*fControlConvResT, TH1F* fHistTCorrTrack){
610 fHistTCorrTrack->Fill(0); //
612 if(fCutConversions && AodTracks->Charge() * Charge < 0){
613 Float_t mass = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.510e-3, 0.510e-3);
615 mass = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.510e-3, 0.510e-3);
616 fControlConvResT->Fill(0.0, mass);
617 if(mass < 0.04 * 0.04) return kFALSE;
620 fHistTCorrTrack->Fill(1); //
623 if (fCutResonances && AodTracks->Charge() * Charge < 0){
624 Float_t mass = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.1396);
625 const Float_t kK0smass = 0.4976;
626 if (TMath::Abs(mass -kK0smass * kK0smass) < 0.1){
627 mass = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.1396);
628 fControlConvResT->Fill(1, mass -kK0smass * kK0smass);
629 if(mass > (kK0smass-0.02)*(kK0smass-0.02) && mass < (kK0smass+0.02)*(kK0smass+0.02))return kFALSE;
632 fHistTCorrTrack->Fill(2); //
635 if (fCutResonances && AodTracks->Charge() * Charge < 0){
636 Float_t mass1 = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
637 Float_t mass2 = GetInvMassSquaredCheap(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.9383, 0.1396);
638 const Float_t kLambdaMass = 1.115;
639 if (TMath::Abs(mass1 -kLambdaMass * kLambdaMass) < 0.1){
640 mass1 = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
641 fControlConvResT->Fill(2, mass1 - kLambdaMass * kLambdaMass);
642 if(mass1 > (kLambdaMass-0.02)*(kLambdaMass-0.02) && mass1 < (kLambdaMass+0.02)*(kLambdaMass+0.02))return kFALSE;
645 if (TMath::Abs(mass2 -kLambdaMass * kLambdaMass) < 0.1){
646 mass2 = GetInvMassSquared(refmaxpT, etaMaxpT, phiMaxpT, AodTracks->Pt(), AodTracks->Eta(), AodTracks->Phi(), 0.1396, 0.9383);
647 fControlConvResT->Fill(2, mass2 - kLambdaMass * kLambdaMass);
648 if(mass2 > (kLambdaMass-0.02)*(kLambdaMass-0.02) && mass2 < (kLambdaMass+0.02)*(kLambdaMass+0.02))return kFALSE;
652 fHistTCorrTrack->Fill(3); //
656 //_____________________| Two track Efficiency
657 Bool_t AliAnalysisTaskDiJetCorrelations::TwoTrackEfficiencyCut(Double_t refmaxpT, Double_t phiMaxpT, Double_t etaMaxpT, Double_t Charge, AliAODTrack* AodTracks, Float_t bSigntmp){
658 Float_t pt1 = refmaxpT;
659 Float_t phi1 = phiMaxpT;
660 Float_t eta1 = etaMaxpT;
661 Float_t charge1 = Charge;
663 Float_t phi2 = AodTracks->Phi();
664 Float_t eta2 = AodTracks->Eta();
665 Float_t pt2 = AodTracks->Pt();
666 Float_t charge2 = AodTracks->Charge();
668 Float_t deta = eta1 - eta2;
670 if (TMath::Abs(deta) < 0.02 * 2.5 * 3){
671 Float_t dphistar1 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 0.8, bSigntmp);
672 Float_t dphistar2 = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, 2.5, bSigntmp);
674 const Float_t kLimit = 0.02*3;
675 Float_t dphistarminabs = 1e5;
676 //Float_t dphistarmin = 1e5;
678 if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0){
679 for (Double_t rad=0.8; rad<2.51; rad+=0.01){
680 Float_t dphistar = GetDPhiStar(phi1, pt1, charge1, phi2, pt2, charge2, rad, bSigntmp);
681 Float_t dphistarabs = TMath::Abs(dphistar);
682 if (dphistarabs < dphistarminabs){
683 //dphistarmin = dphistar;
684 dphistarminabs = dphistarabs;
688 if (dphistarminabs < 0.02 && TMath::Abs(deta) < 0.02){
697 //______________________________| Nomenclature of Histograms
698 void AliAnalysisTaskDiJetCorrelations::DefineHistoNames(){
700 Double_t Pi = TMath::Pi();
702 fHistQA[0] = new TH1F("fHistZVtx", "Z vertex distribution", 100, -15., 15.);
703 fHistQA[1] = new TH1F("fHistnTPCCluster", "n TPC Cluster", 100, 0., 200.);
704 fHistQA[2] = new TH1F("fHistnTPCClusterF", "n TPC Cluster findable", 100, 0., 200.);
705 fHistQA[3] = new TH1F("fHistDCAXY", "dca-XY", 100, -5., 5.);
706 fHistQA[4] = new TH1F("fHistDCAZ", "dca-Z", 100, -5., 5.);
707 fHistQA[5] = new TH1F("fHistChi2TPC", "Chi2 TPC", 100, 0., 10.);
708 fHistQA[6] = new TH1F("fHistpT", "pT distribution",1000,0.,20.);
709 fHistQA[7] = new TH1F("fHistPhi", "Phi distribution" , 100, -0.5, 2*Pi+0.5);
710 fHistQA[8] = new TH1F("fHistEta", "Eta distribution" , 100, -2, 2);
712 for( Int_t i = 0; i < 9; i++)
715 fOutputQA->Add(fHistQA[i]);
718 //1 SE Distributuons Phi, Eta for Trg1 and Trg2
719 fHistTrigDPhi = new TH1F("fHistTrigDPhi", " Trig Phi Difference Same",100, 0, 0.5);
720 fHistTrigDPhi->Sumw2();
721 fOutputQA->Add(fHistTrigDPhi);
723 fControlConvResT1 = new TH2F("fControlConvResT1", ";id;delta mass;T1", 3, -0.5, 2.5, 100, -0.1, 0.1);
724 fControlConvResT2 = new TH2F("fControlConvResT2", ";id;delta mass;T2", 3, -0.5, 2.5, 100, -0.1, 0.1);
725 fControlConvResT1->Sumw2();
726 fControlConvResT2->Sumw2();
727 fOutputQA->Add(fControlConvResT1);
728 fOutputQA->Add(fControlConvResT2);
730 //Thnsprase Distributuons Phi, Eta for Trg1 and Trg2
731 TString nameThnTrg1CentZvtxDEtaDPhi = "ThnTrg1CentZvtxDEtaDPhi";
732 TString nameThnTrg2CentZvtxDEtaDPhi = "ThnTrg2CentZvtxDEtaDPhi";
733 TString nameThnTrg1CentZvtxpT = "ThnTrg1CentZvtxpT" ;
734 TString nameThnTrg2CentZvtxpT = "ThnTrg2CentZvtxpT" ;
735 //TString nameThnTrg1BasicsPlots = "ThnTrg1BasicsPlots";
736 //TString nameThnTrg2BasicsPlots = "ThnTrg2BasicsPlots";
738 if(fRecoOrMontecarlo){
740 nameThnTrg1CentZvtxDEtaDPhi += "_Data";
741 nameThnTrg2CentZvtxDEtaDPhi += "_Data";
742 nameThnTrg1CentZvtxpT += "_Data";
743 nameThnTrg2CentZvtxpT += "_Data";
744 //nameThnTrg1BasicsPlots += "_Data";
745 //nameThnTrg2BasicsPlots += "_Data";
748 nameThnTrg1CentZvtxDEtaDPhi += "_MCrc";
749 nameThnTrg2CentZvtxDEtaDPhi += "_MCrc";
750 nameThnTrg1CentZvtxpT += "_MCrc";
751 nameThnTrg2CentZvtxpT += "_MCrc";
752 //nameThnTrg1BasicsPlots += "_MCrc";
753 //nameThnTrg2BasicsPlots += "_MCrc";
756 else{ // MC Generations
757 nameThnTrg1CentZvtxDEtaDPhi += "_MCKn";
758 nameThnTrg2CentZvtxDEtaDPhi += "_MCKn";
759 nameThnTrg1CentZvtxpT += "_MCKn";
760 nameThnTrg2CentZvtxpT += "_MCKn";
761 //nameThnTrg1BasicsPlots += "_MCKn";
762 //nameThnTrg2BasicsPlots += "_MCKn";
766 nameThnTrg1CentZvtxDEtaDPhi += "_SE";
767 nameThnTrg2CentZvtxDEtaDPhi += "_SE";
768 nameThnTrg1CentZvtxpT += "_SE";
769 nameThnTrg2CentZvtxpT += "_SE";
770 //nameThnTrg1BasicsPlots += "_SE";
771 //nameThnTrg2BasicsPlots += "_SE";
772 }else if(fMixedEvent){
773 nameThnTrg1CentZvtxDEtaDPhi += "_ME";
774 nameThnTrg2CentZvtxDEtaDPhi += "_ME";
775 nameThnTrg1CentZvtxpT += "_ME";
776 nameThnTrg2CentZvtxpT += "_ME";
779 //Catgry :1 Trigger Particles --> Cent, Zvtx, Trigger_pT
780 //_____________________________________________Trigger-1
781 const Int_t pTbinTrigger1 = Int_t(fTrigger1pTHighThr - fTrigger1pTLowThr);
782 Int_t fBinsTrg1[3] = {12, 10, pTbinTrigger1};
783 Double_t fMinTrg1[3] = {0.0, -10.0, fTrigger1pTLowThr};
784 Double_t fMaxTrg1[3] = {100.0, 10.0, fTrigger1pTHighThr};
785 THnSparseD *THnTrig1CentZvtxpT = new THnSparseD(nameThnTrg1CentZvtxpT.Data(),"Cent-Zvtx-pTtr1",3, fBinsTrg1, fMinTrg1, fMaxTrg1);
786 THnTrig1CentZvtxpT->Sumw2();
787 fOutputCorr->Add(THnTrig1CentZvtxpT);
789 //_____________________________________________Trigger-2
790 const Int_t pTbinTrigger2 = Int_t(fTrigger2pTHighThr - fTrigger2pTLowThr);
791 Int_t fBinsTrg2[3] = {12, 10, pTbinTrigger2};
792 Double_t fMinTrg2[3] = {0.0, -10.0, fTrigger2pTLowThr};
793 Double_t fMaxTrg2[3] = {100.0, 10.0, fTrigger2pTHighThr};
794 THnSparseD *THnTrig2CentZvtxpT = new THnSparseD(nameThnTrg2CentZvtxpT.Data(),"Cent-Zvtx-pTtr2",3, fBinsTrg2, fMinTrg2, fMaxTrg2);
795 THnTrig2CentZvtxpT->Sumw2();
796 fOutputCorr->Add(THnTrig2CentZvtxpT);
799 //Catgry2: Correaltions Plots for SE and ME (T1, T2)
800 Int_t fBins12[5] = {12, 10, 16, 36, 11};
801 Double_t fMin12[5] = {0.0, -10., -1.6, -0.5*TMath::Pi(), 0.5};
802 Double_t fMax12[5] = {100.0, 10., 1.6, 1.5*TMath::Pi(), 6.00};
803 THnSparseD *THnTrig1CentZvtxDEtaDPhi = new THnSparseD(nameThnTrg1CentZvtxDEtaDPhi.Data(),"Cent-zVtx-DEta1-DPhi1-Trk",5, fBins12, fMin12, fMax12);
804 THnSparseD *THnTrig2CentZvtxDEtaDPhi = new THnSparseD(nameThnTrg2CentZvtxDEtaDPhi.Data(),"Cent-zVtx-DEta2-DPhi2-Trk",5, fBins12, fMin12, fMax12);
806 const Int_t nvarBinsCent = 12;
807 Double_t varBinsCent[nvarBinsCent+1] = {0., 1., 2., 3., 4., 5., 7.5, 10., 20., 30., 40., 50., 100.1};
808 THnTrig1CentZvtxDEtaDPhi->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
809 THnTrig2CentZvtxDEtaDPhi->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
810 THnTrig1CentZvtxpT->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
811 THnTrig2CentZvtxpT->GetAxis(0)->Set(nvarBinsCent, varBinsCent);
814 //Munual pT tracks Values
816 const Int_t nvarBinspT = 11;
817 Double_t varBinspT[nvarBinspT+1] = {0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0, 6.0};
818 THnTrig1CentZvtxDEtaDPhi->GetAxis(4)->Set(nvarBinspT, varBinspT);
819 THnTrig2CentZvtxDEtaDPhi->GetAxis(4)->Set(nvarBinspT, varBinspT);
822 THnTrig1CentZvtxDEtaDPhi->Sumw2();
823 THnTrig2CentZvtxDEtaDPhi->Sumw2();
824 fOutputCorr->Add(THnTrig1CentZvtxDEtaDPhi);
825 fOutputCorr->Add(THnTrig2CentZvtxDEtaDPhi);
828 Int_t fBinsTrk[5] = { 20, 16, 10, 10, 36};
829 Double_t fMinTrk[5] = { 0.0, -0.8, 0.0, -10., 0};
830 Double_t fMaxTrk[5] = {20.0, 0.8, 100.1, 10., 2*TMath::Pi()};
831 THnSparseD *THnTrg1BasicsPlots = new THnSparseD(nameThnTrg1BasicsPlots.Data(),"pTtr1-Eta-Cent-zvtx-Phi",5, fBinsTrk, fMinTrk, fMaxTrk);
832 THnSparseD *THnTrg2BasicsPlots = new THnSparseD(nameThnTrg2BasicsPlots.Data(),"pTtr2-Eta-Cent-zvtx-Phi",5, fBinsTrk, fMinTrk, fMaxTrk);
833 //THnTrg1BasicsPlots->Sumw2();
834 //THnTrg2BasicsPlots->Sumw2();
835 //fOutputQA->Add(THnTrg1BasicsPlots);
836 //fOutputQA->Add(THnTrg2BasicsPlots);*/
840 //______________________________| Track Efficiency
841 Double_t AliAnalysisTaskDiJetCorrelations::GetTrackbyTrackEffValue(AliAODTrack* track, Double_t CentrOrMult, TH3F* h){
842 Float_t effvalue = -999.;
844 //if(!h)cout << "Histograms was not there" << endl;
845 Int_t binX = h->GetXaxis()->FindBin(CentrOrMult);
846 Int_t binY = h->GetYaxis()->FindBin(track->Eta());
847 Int_t binZ = h->GetZaxis()->FindBin(track->Pt());
848 effvalue = h->GetBinContent(binX, binY, binZ);
849 cout <<"effi value = "<< effvalue << endl; exit(1);
850 if(effvalue==0) effvalue=1.;
855 //end of file : Greeshma