1 /**************************************************************************
2 * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // Comment describing what this class does needed!
18 #include "AliJCorrelations.h"
19 #include "AliJDataManager.h"
21 #include "AliJCorrelations.h"
22 #include "AliJHistos.h"
23 #include "AliJBaseTrack.h"
25 #include "AliJHistos.h"
26 #include "AliJRunTable.h"
30 //==========================================================================
31 // don't count the trigger here ! You'll miss the not associated triggers
32 // but you will miss them in the main code too, unles you loop over those
33 // fevent with no cgl (set the masMix to 1)
34 //==========================================================================
37 AliJCorrelations::AliJCorrelations( AliJCard *cardIn, AliJHistos *histosIn) :
42 fsumTriggerAndAssoc(0),
43 fsamplingMethod(0), // flat by default
51 fTrackPairEfficiency(0),
52 fIsIsolatedTrigger(false),
70 fGeometricAcceptanceCorrection(1)
74 fsumTriggerAndAssoc = int( fcard->Get("sumTriggerAndAssoc") );
75 fmaxEtaRange = fcard->Get("EtaRange");
76 fRSignalBin = int(fcard->Get("EtaGapSignalBin"));
78 fDPhiUERegion[0] = fcard->Get("DPhiUERegion",0);
79 fDPhiUERegion[1] = fcard->Get("DPhiUERegion",1);
80 cout << fmaxEtaRange <<" fDPhiUERegion[0]="<< fDPhiUERegion[0] <<" fDPhiUERegion[1]="<< fDPhiUERegion[1] <<endl;
81 fIsHeavyIon = AliJRunTable::GetInstance().IsHeavyIon();
83 // -----------------------------------------------------------------------------------------------
84 // HARD CODED NUMBERS - VIOLATIONS - BREAKS the code when only on bin used in card.input!!!
85 // Who did this? Further more it us unused variable !!!!
87 //fawayPhiGap = fcard->GetBinBorder(kEtaGapType, 2);
88 // -----------------------------------------------------------------------------------------------
90 for(int iRGap=0; iRGap < fcard->GetNoOfBins(kRGapType); iRGap++)
91 fRGap[iRGap] = fcard->GetBinBorder( kRGapType, iRGap);
93 //dPhiRange = fhistos->GetDphiRange();
94 frandom = new TRandom3(); //FK// frandom generator for jt flow UE
95 frandom->SetSeed(0); //FK//
99 AliJCorrelations::AliJCorrelations() :
104 fsumTriggerAndAssoc(0),
105 fsamplingMethod(0), // flat by default
113 fTrackPairEfficiency(0),
114 fIsIsolatedTrigger(false),
132 fGeometricAcceptanceCorrection(1)
134 // default constructor
137 AliJCorrelations::AliJCorrelations(const AliJCorrelations& in) :
142 fsumTriggerAndAssoc(in.fsumTriggerAndAssoc),
143 fsamplingMethod(in.fsamplingMethod),
144 fIsHeavyIon(in.fIsHeavyIon),
145 fawayPhiGap(in.fawayPhiGap),
146 fmaxEtaRange(in.fmaxEtaRange),
147 fRSignalBin(in.fRSignalBin),
151 fTrackPairEfficiency(in.fTrackPairEfficiency),
152 fIsIsolatedTrigger(in.fIsIsolatedTrigger),
155 fPhiTrigger(in.fPhiTrigger),
156 fPhiAssoc(in.fPhiAssoc),
157 fDeltaPhi(in.fDeltaPhi),
158 fDeltaPhiPiPi(in.fDeltaPhiPiPi),
159 fDeltaEta(in.fDeltaEta),
161 fNearSide(in.fNearSide),
162 fEtaGapBin(in.fEtaGapBin),
163 fPhiGapBinNear(in.fPhiGapBinNear),
164 fPhiGapBinAway(in.fPhiGapBinAway),
165 fRGapBinNear(in.fRGapBinNear),
166 fRGapBinAway(in.fRGapBinAway),
167 fCentralityBin(in.fCentralityBin),
168 fXlongBin(in.fXlongBin),
169 fIsLikeSign(in.fIsLikeSign),
170 fGeometricAcceptanceCorrection(in.fGeometricAcceptanceCorrection)
172 // The pointers to card and histos are just copied. I think this is safe, since they are not created by
173 // AliJCorrelations and thus should not disappear if the AliJCorrelation managing them is destroyed.
175 fDPhiUERegion[0] = in.fDPhiUERegion[0];
176 fDPhiUERegion[1] = in.fDPhiUERegion[1];
178 for(int iRGap=0; iRGap < fcard->GetNoOfBins(kRGapType); iRGap++){
179 fRGap[iRGap] = in.fRGap[iRGap];
182 frandom = new TRandom3(); // frandom generator for jt flow UE
186 AliJCorrelations& AliJCorrelations::operator=(const AliJCorrelations& in){
187 // Assingment operator
189 if (&in==this) return *this;
193 fTrackPairEfficiency = in.fTrackPairEfficiency;
194 fIsIsolatedTrigger = in.fIsIsolatedTrigger;
195 fpttBin = in.fpttBin;
196 fptaBin = in.fptaBin;
197 fPhiTrigger = in.fPhiTrigger;
198 fPhiAssoc = in.fPhiAssoc;
199 fDeltaPhi = in.fDeltaPhi;
200 fDeltaPhiPiPi = in.fDeltaPhiPiPi;
201 fDeltaEta = in.fDeltaEta;
203 fNearSide = in.fNearSide;
204 fEtaGapBin = in.fEtaGapBin;
205 fPhiGapBinNear = in.fPhiGapBinNear;
206 fPhiGapBinAway = in.fPhiGapBinAway;
207 fRGapBinNear = in.fRGapBinNear;
208 fRGapBinAway = in.fRGapBinAway;
209 fCentralityBin = in.fCentralityBin;
210 fXlongBin = in.fXlongBin;
211 fIsLikeSign = in.fIsLikeSign;
212 fGeometricAcceptanceCorrection = in.fGeometricAcceptanceCorrection;
215 fsumTriggerAndAssoc = in.fsumTriggerAndAssoc;
216 fsamplingMethod = in.fsamplingMethod;
217 fIsHeavyIon = in.fIsHeavyIon;
218 fawayPhiGap = in.fawayPhiGap;
219 fmaxEtaRange = in.fmaxEtaRange;
220 fRSignalBin = in.fRSignalBin;
222 // The pointers to card and histos are just copied. I think this is safe, since they are not created by
223 // AliJCorrelations and thus should not disappear if the AliJCorrelation managing them is destroyed.
225 fhistos = in.fhistos;
227 fDPhiUERegion[0] = in.fDPhiUERegion[0];
228 fDPhiUERegion[1] = in.fDPhiUERegion[1];
230 for(int iRGap=0; iRGap < fcard->GetNoOfBins(kRGapType); iRGap++){
231 fRGap[iRGap] = in.fRGap[iRGap];
234 frandom = new TRandom3(); // frandom generator for jt flow UE
242 void AliJCorrelations::FillHisto(corrFillType cFTyp, fillType fTyp, int cBin, int zBin, AliJBaseTrack *ftk1, AliJBaseTrack *ftk2){
244 if( cFTyp == kAzimuthFill )
245 FillAzimuthHistos( fTyp, cBin, zBin, ftk1, ftk2);
249 //=============================================================================================
250 void AliJCorrelations::FillAzimuthHistos(fillType fTyp, int CentBin, int ZBin, AliJBaseTrack *ftk1, AliJBaseTrack *ftk2)
251 //=============================================================================================
254 bool twoTracks = false;
255 if(ftk1->GetParticleType()==kJHadron && ftk2->GetParticleType()==kJHadron) twoTracks =true;
257 //double-counting check
258 if(fTyp == kReal && twoTracks && ftk1->GetID()==ftk2->GetID()) return;
260 // Check the signs of the paired particles
262 if(ftk1->GetCharge() > 0 && ftk2->GetCharge() > 0) fIsLikeSign = true;
263 if(ftk1->GetCharge() < 0 && ftk2->GetCharge() < 0) fIsLikeSign = true;
265 //----------------------------------------------------------------
269 fTrackPairEfficiency = 1./( ftk1->GetTrackEff() * ftk2->GetTrackEff() );
271 fIsIsolatedTrigger = ftk1->GetIsIsolated()>0 ? true : false; //FK// trigger particle is isolated hadron
273 //phit= ftk1->Phi(); //for RP
274 fpttBin = ftk1->GetTriggBin();
275 fptaBin = ftk2->GetAssocBin();
276 fPhiTrigger = ftk1->Phi();
277 fPhiAssoc = ftk2->Phi();
278 fDeltaPhi = DeltaPhi(fPhiTrigger, fPhiAssoc); //radians
279 fDeltaPhiPiPi = atan2(sin(fPhiTrigger-fPhiAssoc), cos(fPhiTrigger-fPhiAssoc));
280 fDeltaEta = ftk1->Eta() - ftk2->Eta();
281 //double dEtaFar = ftk1->Eta() + ftk2->Eta();
283 fNearSide = cos(fPhiTrigger-fPhiAssoc) > 0 ? true : false;
285 fEtaGapBin = fcard->GetBin( kEtaGapType, fabs(fDeltaEta));
286 fPhiGapBinNear = fcard->GetBin( kEtaGapType, fabs(fDeltaPhiPiPi) );
287 fPhiGapBinAway = fcard->GetBin( kEtaGapType, fabs(fDeltaPhi-kJPi) ); //here the angle must be 0-2pi and not (-pi,pi)
288 fRGapBinNear = fcard->GetBin( kRGapType, fabs(ftk1->DeltaR(*ftk2)));
289 fRGapBinAway = fcard->GetBin( kRGapType, sqrt(pow(fDeltaPhi-kJPi,2)+fDeltaEta*fDeltaEta) );
290 fCentralityBin = CentBin;
292 TLorentzVector vTrigger = ftk1->GetLorentzVector(), vAssoc = ftk2->GetLorentzVector(); // Lorentz vectors for trigger and associated particles
293 fXlong = vTrigger.Vect().Dot(vAssoc.Vect())/pow(vTrigger.P(),2);
294 fXlongBin = fcard->GetBin(kXeType, TMath::Abs(fXlong));
296 //if( rGapBin != fRGapBinNear ) cout<<"dR vs fRGapBinNear = "<<rGapBin<<"\t"<<fRGapBinNear<<endl;
297 //if( rGapBin != fRGapBinAway ) cout<<"dR vs fRGapBinAway = "<<rGapBin<<"\t"<<fRGapBinAway<<endl;
298 //----------------------------------------------------------------
300 //acceptance correction triangle or mixed fevent
301 // fGeometricAcceptanceCorrection = 1;
302 fGeometricAcceptanceCorrection = ( fsamplingMethod == 0 ) ? GetGeoAccCorrFlat(fDeltaEta) : GetGeoAccCorrIncl(fDeltaEta);
305 if(fpttBin<0 || fptaBin<0 || fEtaGapBin<0 ){
306 cout<<"Error in FillAzimuthHistos: some pT or eta out of bin. pttBin="<<fpttBin<<" pTaBin="<<fptaBin <<" etaGapBin="<< fEtaGapBin << endl;
313 if(fDeltaPhi==0) cout <<" fdphi=0; fptt="<< fptt<<" fpta="<<fpta<<" TID="<<ftk1->GetID()<<" AID="<<ftk2->GetID() <<" tphi="<< fPhiTrigger <<" aphi="<< fPhiAssoc << endl;
315 // ===================================================================
316 // ===================== Fill Histograms ===========================
317 // ===================================================================
319 bool fill2DBackgroundQualityControlHistograms = false; // Choose whether to fill the DeltaPhi DeltaEta histograms for jT background
321 //FillPairPtAndCosThetaStarHistograms(fTyp, ftk1, ftk2); // Fill the pair pT and cos(theta*) histograms TODO: Does not work! Needs debugging
322 FillXeHistograms(fTyp); // Fill the xE and xLong histograms
323 FillJtHistograms(fTyp, ftk1, ftk2, fill2DBackgroundQualityControlHistograms); // Fill the jT and pout histograms togerher with some background quality assurance histograms
324 FillDeltaEtaHistograms(fTyp, ZBin); // Fill all the delta eta histograms
325 FillDeltaPhiHistograms(fTyp); // Fill the azimuthal correlation functions
326 FillPtaHistograms(fTyp); // Fill various pTa histograms
327 FillIAAAndMoonHistograms(fTyp, ZBin); // Fill the I_AA and moon histograms
332 void AliJCorrelations::FillPairPtAndCosThetaStarHistograms(fillType fTyp, AliJBaseTrack *ftk1, AliJBaseTrack *ftk2)
334 // This method fills the pair pT and Cos(thata*) histograms
336 TVector3 v3trigg = ftk1->GetLorentzVector().Vect();
337 TVector3 v3assoc = ftk2->GetLorentzVector().Vect();
338 double pairMass = sqrt(2*v3trigg.Mag()*v3assoc.Mag()*(1-cos(v3trigg.Angle(v3assoc))));
339 int imass = fcard->GetBin(kMassType, pairMass);
340 TVector3 v3pairPt = v3trigg + v3assoc;
341 double pairPt = v3pairPt.Perp();
342 double wPairPt = pairPt>0 ? 1/pairPt : 0;
344 //================================
345 // Pair pT and cos(Theta^star) === // TODO: Needs debugging, the code below does not work!
346 //================================
349 fhistos->fhPairPt[fTyp][fpttBin][fptaBin]->Fill( pairPt, fTrackPairEfficiency);
350 double pairDphi = v3pairPt.DeltaPhi(v3trigg);
351 if(pairDphi<-kJPi/3.0) pairDphi += kJTwoPi;
352 fhistos->fhPairPtDphi[fTyp][fpttBin][fptaBin]->Fill( pairDphi/kJPi );
355 if ( fTyp == kReal ) {
356 //cout<<" fptt="<< fptt <<" fpta="<< fpta <<" fdphi="<< fDeltaPhi <<" pairPt="<< pairPt << endl;
358 int ipairPt = fcard->IsLessThanUpperPairPtCut(pairPt);
359 //cout<<"ppt="<<pairPt<<" mass="<<pairMass<<" ip="<<ipairPt<<" im="<<imass<<endl;
361 fhistos->fhPairPtMass[imass]->Fill( pairPt, fTrackPairEfficiency*wPairPt );
362 fhistos->fhPairDPhi[imass]->Fill( fDeltaPhi/kJPi, fTrackPairEfficiency );
363 fhistos->fhPairDpT[imass]->Fill( fptt-fpta, fTrackPairEfficiency );
365 if(imass>=0 && ipairPt>=0 ){
366 double cmsRap = (ftk1->Eta()+ftk2->Eta())/2.;
367 double cosThetaStar = fabs(cos(2*atan(exp(-ftk1->Eta()+cmsRap))));
368 fhistos->fhCosThetaStar[fTyp][ipairPt][imass]->Fill( cosThetaStar, fTrackPairEfficiency );
370 //frandom boost, Let's try just trigger phi as a cms boost.
371 cosThetaStar = fabs(cos(2*atan(exp(-ftk1->Eta()+fPhiTrigger))));
372 fhistos->fhCosThetaStar[kMixed][ipairPt][imass]->Fill( cosThetaStar, fTrackPairEfficiency );
374 fhistos->fhInvMass[ipairPt]->Fill(pairMass, fTrackPairEfficiency);
375 fhistos->fhCMSrap[ipairPt][imass]->Fill( cosThetaStar, cmsRap*fTrackPairEfficiency );
376 fhistos->fpCMSrap->Fill( cosThetaStar, fabs(cmsRap)*fTrackPairEfficiency );
380 //---------------------------------
381 //if(pairMass>10 && fcard->IsLessThanUpperPairPtCut(pairPt) ){
382 // cout<<pairMass<<" e1="<<ftk1->Eta()-cmsRap<<" e2="<<ftk2->Eta()-cmsRap<<" cms="<<cmsRap;
383 // cout<<" ppt="<<pairPt<<" tphi="<<fPhiTrigger<<" aphi="<<fPhiAssoc<<" t1="<<fptt<<" t2="<<fpta<<endl;
384 // double thetaStar = fabs(2*atan(exp(-ftk1->Eta()-cmsRap)));
385 // cout<<thetaStar<<" "<<fabs(cos(thetaStar))<<endl;
388 //---------------------------------
391 void AliJCorrelations::FillXeHistograms(fillType fTyp)
393 // This method fills the xE and xLong histograms
395 double xe = -fpta*cos(fPhiTrigger-fPhiAssoc)/fptt;
397 if( fTyp == kReal ) {
398 fhistos->fhxEPtBin[0][fpttBin][fptaBin]->Fill(fXlong, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
400 fhistos->fhxEPtBin[1][fpttBin][fptaBin]->Fill(fXlong, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
402 fhistos->fhxEPtBin[2][fpttBin][fptaBin]->Fill(fXlong, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
407 fhistos->fhxEN [fTyp][fpttBin]->Fill(-xe, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
409 fhistos->fhxEF [fTyp][fpttBin]->Fill(xe, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
410 if(fIsIsolatedTrigger) fhistos->fhxEFIsolTrigg[fTyp][fpttBin]->Fill(xe, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
414 void AliJCorrelations::FillJtHistograms(fillType fTyp, AliJBaseTrack *ftk1, AliJBaseTrack *ftk2, bool fill2DBackground)
416 // This method fills the jT and pout histograms
418 double pout = fabs(fpta*sin(fPhiTrigger-fPhiAssoc));
422 TLorentzVector vTrigger = ftk1->GetLorentzVector(), vAssoc = ftk2->GetLorentzVector(); // Lorentz vectors for tracks
424 double jt = vAssoc.Perp(vTrigger.Vect());
425 double weight = jt > 1e-3 ? fGeometricAcceptanceCorrection * fTrackPairEfficiency/jt : 0;
427 int iKlongBin = fcard->GetBin(kLongType, vTrigger.Vect().Dot(vAssoc.Vect())/vTrigger.P());
428 double invariantMass = sqrt(2*(vTrigger.P()*vAssoc.P()-vTrigger.Vect().Dot(vAssoc.Vect())));
430 fhistos->fhJTKlong[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(jt, weight);
431 fhistos->fhInvariantMassKlong[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(invariantMass);
433 // Fill also the signed distributions
435 fhistos->fhJTKlongLikeSign[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(jt, weight);
436 fhistos->fhInvariantMassKlongLikeSign[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(invariantMass);
438 fhistos->fhJTKlongUnlikeSign[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(jt, weight);
439 fhistos->fhInvariantMassKlongUnlikeSign[fTyp][fCentralityBin][fpttBin][iKlongBin]->Fill(invariantMass);
443 fhistos->fhJT[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(jt, weight);
444 fhistos->fhInvariantMassXe[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(invariantMass);
446 // Fill also the signed distributions
448 fhistos->fhJTLikeSign[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(jt, weight);
449 fhistos->fhInvariantMassXeLikeSign[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(invariantMass);
451 fhistos->fhJTUnlikeSign[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(jt, weight);
452 fhistos->fhInvariantMassXeUnlikeSign[fTyp][fCentralityBin][fpttBin][fXlongBin]->Fill(invariantMass);
456 fhistos->fhJTPta[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(jt, weight);
457 fhistos->fhInvariantMassPta[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(invariantMass);
459 // Fill also the signed distributions
461 fhistos->fhJTPtaLikeSign[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(jt, weight);
462 fhistos->fhInvariantMassPtaLikeSign[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(invariantMass);
464 fhistos->fhJTPtaUnlikeSign[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(jt, weight);
465 fhistos->fhInvariantMassPtaUnlikeSign[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(invariantMass);
469 TLorentzVector vAssocRndm;
470 TLorentzVector vThrustRndm;
472 //-------------------------------------
473 // Rapidity Gap background
474 // ------------------------------------
475 double etaTriggRndm, etaAssocRndm;
476 double dphiAssocRndm = 0;
478 if(fTyp==kReal && ( fEtaGapBin >=0 || fRGapBinNear >=0 ) ){
479 for(int iEtaGap=0; iEtaGap<=fEtaGapBin; iEtaGap++) fhistos->fhPtaEtaGapN[fCentralityBin][iEtaGap][fpttBin]->Fill(fpta, fTrackPairEfficiency);
480 for(int iRGap=0; iRGap<=fRGapBinNear; iRGap++) fhistos->fhPtaRGapN[fCentralityBin][iRGap][fpttBin]->Fill(fpta, fTrackPairEfficiency);
481 for(int itrial=0; itrial<20; itrial++){ //For each high eta gap track generate ten others
483 if(fsamplingMethod == 0){
484 etaTriggRndm = frandom->Uniform(-fmaxEtaRange, fmaxEtaRange);
485 etaAssocRndm = frandom->Uniform(-fmaxEtaRange, fmaxEtaRange);
487 etaTriggRndm = fhistos->fhIetaTriggFromFile[fCentralityBin][fpttBin]->GetRandom();
488 etaAssocRndm = fhistos->fhIetaAssocFromFile[fCentralityBin][fptaBin]->GetRandom();
490 if( fEtaGapBin >=0 || fRGapBinNear >=0 ) {
491 if( fsamplingMethod == 0) {
492 dphiAssocRndm = kJPi * frandom->Uniform(-0.5, 0.5);
494 dphiAssocRndm = fhistos->fhIphiAssocFromFile[fCentralityBin][fptaBin]->GetRandom();
496 vAssocRndm.SetPtEtaPhiM(fpta, etaAssocRndm, fPhiTrigger + dphiAssocRndm, 0); //set randomized assoc TLorentz vector
498 vAssocRndm.SetPtEtaPhiM(fpta, etaAssocRndm, fPhiAssoc, 0); //set randomized assoc TLorentz vector
501 vThrustRndm.SetPtEtaPhiM(vTrigger.Pt(),etaTriggRndm, fPhiTrigger, 0);
503 double dEtaRndm = etaTriggRndm - etaAssocRndm;
504 double geoAccCorrRndm = (fsamplingMethod == 0 || fPhiGapBinNear<0 ) ? GetGeoAccCorrFlat(dEtaRndm) : GetGeoAccCorrIncl(dEtaRndm);
506 jt = vAssocRndm.Perp(vThrustRndm.Vect());
508 // TODO : shadowing of iKlongBin
509 int jKlongBin = fcard->GetBin(kLongType, vThrustRndm.Vect().Dot(vAssocRndm.Vect())/vThrustRndm.P());
511 if(jt>1e-3) { //here we used and BgFidCut
512 for(int iEtaGap=0; iEtaGap<=fEtaGapBin; iEtaGap++){
513 fhistos->fhJTKlongBg[fCentralityBin][iEtaGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
514 if(fill2DBackground) fhistos->fhDphiDetaKlong[fCentralityBin][iEtaGap][fpttBin][jKlongBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
515 fhistos->fhBgAssocKlong[fCentralityBin][iEtaGap][fpttBin][jKlongBin]->Fill(fpta, fTrackPairEfficiency);
517 // Fill the background histogram for signed pairs
519 fhistos->fhJTKlongBgLikeSign[fCentralityBin][iEtaGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
521 fhistos->fhJTKlongBgUnlikeSign[fCentralityBin][iEtaGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
524 for(int iRGap=0; iRGap<=fRGapBinNear; iRGap++){
525 fhistos->fhJTKlongBgR[fCentralityBin][iRGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
526 if(fill2DBackground) fhistos->fhDphiDetaKlongR[fCentralityBin][iRGap][fpttBin][jKlongBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
527 fhistos->fhBgAssocKlongR[fCentralityBin][iRGap][fpttBin][jKlongBin]->Fill(fpta, fTrackPairEfficiency);
529 // Fill the background histogram for signed pairs
531 fhistos->fhJTKlongBgRLikeSign[fCentralityBin][iRGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
533 fhistos->fhJTKlongBgRUnlikeSign[fCentralityBin][iRGap][fpttBin][jKlongBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
538 int iXeBin = fcard->GetBin(kXeType, vThrustRndm.Vect().Dot(vAssocRndm.Vect())/pow(vThrustRndm.P(),2) );
540 if(jt>1e-3) { //here we used and BgFidCut
541 for(int iEtaGap=0; iEtaGap<=fEtaGapBin; iEtaGap++){
542 fhistos->fhJTBg[fCentralityBin][iEtaGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
543 if(fill2DBackground) fhistos->fhDphiDetaXe[fCentralityBin][iEtaGap][fpttBin][iXeBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
544 fhistos->fhBgAssocXe[fCentralityBin][iEtaGap][fpttBin][iXeBin]->Fill(fpta, fTrackPairEfficiency);
546 // Fill the background histograms for signed pairs
548 fhistos->fhJTBgLikeSign[fCentralityBin][iEtaGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
550 fhistos->fhJTBgUnlikeSign[fCentralityBin][iEtaGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
553 for(int iRGap=0; iRGap<=fRGapBinNear; iRGap++){
554 fhistos->fhJTBgR[fCentralityBin][iRGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
555 if(fill2DBackground) fhistos->fhDphiDetaXeR[fCentralityBin][iRGap][fpttBin][iXeBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
556 fhistos->fhBgAssocXeR[fCentralityBin][iRGap][fpttBin][iXeBin]->Fill(fpta, fTrackPairEfficiency);
558 // Fill the background histograms for signed pairs
560 fhistos->fhJTBgRLikeSign[fCentralityBin][iRGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
562 fhistos->fhJTBgRUnlikeSign[fCentralityBin][iRGap][fpttBin][iXeBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
568 if(jt>1e-3) { //here we used and BgFidCut
569 for(int iEtaGap=0; iEtaGap<=fEtaGapBin; iEtaGap++){
570 fhistos->fhJTPtaBg[fCentralityBin][iEtaGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
571 if(fill2DBackground) fhistos->fhDphiDetaPta[fCentralityBin][iEtaGap][fpttBin][fptaBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
572 fhistos->fhBgAssocPta[fCentralityBin][iEtaGap][fpttBin][fptaBin]->Fill(fpta, fTrackPairEfficiency);
574 //Fill the background histograms for signed pairs
576 fhistos->fhJTPtaBgLikeSign[fCentralityBin][iEtaGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
578 fhistos->fhJTPtaBgUnlikeSign[fCentralityBin][iEtaGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
581 for(int iRGap=0; iRGap<=fRGapBinNear; iRGap++){
582 fhistos->fhJTPtaBgR[fCentralityBin][iRGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
583 if(fill2DBackground) fhistos->fhDphiDetaPtaR[fCentralityBin][iRGap][fpttBin][fptaBin]->Fill(dEtaRndm, dphiAssocRndm, geoAccCorrRndm * fTrackPairEfficiency);
584 fhistos->fhBgAssocPtaR[fCentralityBin][iRGap][fpttBin][fptaBin]->Fill(fpta, fTrackPairEfficiency);
586 //Fill the background histograms for signed pairs
588 fhistos->fhJTPtaBgRLikeSign[fCentralityBin][iRGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
590 fhistos->fhJTPtaBgRUnlikeSign[fCentralityBin][iRGap][fpttBin][fptaBin]->Fill(jt, geoAccCorrRndm * fTrackPairEfficiency/jt);
600 fhistos->fhPoutF[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill(pout, fGeometricAcceptanceCorrection * fTrackPairEfficiency);
604 void AliJCorrelations::FillDeltaEtaHistograms(fillType fTyp, int ZBin)
606 // This method fills the DeltaEta histograms
608 if( fNearSide ){ //one could check the phiGapBin, but in the pi/2 <1.6 and thus phiGap is always>-1
610 fhistos->fhDEtaNear[fCentralityBin][ZBin][fPhiGapBinNear][fpttBin][fptaBin]->Fill( fDeltaEta , fGeometricAcceptanceCorrection * fTrackPairEfficiency );
611 if(fXlongBin>=0) fhistos->fhDEtaNearXEbin[fCentralityBin][ZBin][fPhiGapBinNear][fpttBin][fXlongBin]->Fill( fDeltaEta , fGeometricAcceptanceCorrection * fTrackPairEfficiency );
613 fhistos->fhDEtaNearM[fCentralityBin][ZBin][fPhiGapBinNear][fpttBin][fptaBin]->Fill( fDeltaEta , fGeometricAcceptanceCorrection * fTrackPairEfficiency );
614 if(fXlongBin>=0) fhistos->fhDEtaNearMXEbin[fCentralityBin][ZBin][fPhiGapBinNear][fpttBin][fXlongBin]->Fill( fDeltaEta , fGeometricAcceptanceCorrection * fTrackPairEfficiency );
617 if(fPhiGapBinAway<=3) fhistos->fhDEtaFar[fTyp][fCentralityBin][fpttBin]->Fill( fDeltaEta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
621 void AliJCorrelations::FillDeltaPhiHistograms(fillType fTyp)
623 // This method fills the DeltaPhi histograms
625 // When hists are filled for thresholds they are not properly normalized and need to be subtracted
626 // This induced improper errors - subtraction of not-independent entries
628 fhistos->fhDphiAssoc[fTyp][fCentralityBin][fEtaGapBin][fpttBin][fptaBin]->Fill( fDeltaPhi/kJPi , fGeometricAcceptanceCorrection * fTrackPairEfficiency);
629 if(fXlongBin>=0) fhistos->fhDphiAssocXEbin[fTyp][fCentralityBin][fEtaGapBin][fpttBin][fXlongBin]->Fill( fDeltaPhi/kJPi , fGeometricAcceptanceCorrection * fTrackPairEfficiency);
631 if(fIsIsolatedTrigger) fhistos->fhDphiAssocIsolTrigg[fTyp][fCentralityBin][fpttBin][fptaBin]->Fill( fDeltaPhi/kJPi , fGeometricAcceptanceCorrection * fTrackPairEfficiency); //FK//
634 void AliJCorrelations::FillPtaHistograms(fillType fTyp)
636 // This method fills various pta histograms
638 if ( fTyp == kReal ) {
639 //must be here, not in main, to avoid counting triggers
640 fhistos->fhAssocPtBin[fCentralityBin][fpttBin][fptaBin]->Fill(fpta ); //I think It should not be weighted by Eff
642 //++++++++++++++++++++++++++++++++++++++++++++++++++
643 // in order to get mean pTa in the jet peak one has
644 // to fill fhMeanPtAssoc in |DeltaEta|<0.4
645 // +++++++++++++++++++++++++++++++++++++++++++++++++
646 if(fEtaGapBin>=0 && fEtaGapBin<2){
647 fhistos->fhMeanPtAssoc[fCentralityBin][fpttBin][fptaBin]->Fill( fDeltaPhi/kJPi , fpta );
648 fhistos->fhMeanZtAssoc[fCentralityBin][fpttBin][fptaBin]->Fill( fDeltaPhi/kJPi , fpta/fptt);
652 if(fabs(fDeltaPhiPiPi/kJPi)>fDPhiUERegion[0] && fabs(fDeltaPhiPiPi/kJPi)<fDPhiUERegion[1]){
653 for(int iEtaGap=0; iEtaGap<=fEtaGapBin; iEtaGap++) //FK// UE Pta spectrum for different eta gaps
654 fhistos->fhPtAssocUE[fCentralityBin][iEtaGap][fpttBin]->Fill(fpta, fTrackPairEfficiency);
655 if(fIsIsolatedTrigger){ //FK// trigger is isolated hadron
656 fhistos->fhPtAssocUEIsolTrigg[fpttBin]->Fill(fpta, fTrackPairEfficiency); //FK//
659 if(fabs(fDeltaPhi/kJPi)<0.15) fhistos->fhPtAssocN[fpttBin]->Fill(fpta, fTrackPairEfficiency);
660 if(fabs(fDeltaPhi/kJPi-1)<0.15) fhistos->fhPtAssocF[fpttBin]->Fill(fpta, fTrackPairEfficiency);
668 void AliJCorrelations::FillIAAAndMoonHistograms(fillType fTyp, int ZBin)
670 // This method fills the I_AA and moon histograms
672 fhistos->fhDphiAssoc2DIAA[fTyp][fCentralityBin][ZBin][fpttBin][fptaBin]->Fill( fDeltaEta, fDeltaPhi/kJPi, fTrackPairEfficiency);
675 if(fRGapBinNear <= fRSignalBin) fhistos->fhDRNearPt[fTyp][fCentralityBin][ZBin][fRGapBinNear][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
678 for( int irs = 0; irs <= fRSignalBin;irs++ ){
679 if( fRGapBinNear < irs ) continue;
680 if( fPhiGapBinNear > irs ) continue;
681 for ( int ir1=0;ir1<= fRGapBinNear;ir1++ ){
682 if( irs > ir1 ) continue;
683 if( ir1 > fRGapBinNear ) continue;
684 double rGapS= fRGap[irs+1];
685 double rGap1= fRGap[ir1+1];
686 if( rGap1 < TMath::Abs(fDeltaPhiPiPi) ) continue;
687 if( rGapS < TMath::Abs(fDeltaPhiPiPi) ) continue;
688 double dEtaMin = sqrt(rGap1*rGap1-fDeltaPhiPiPi*fDeltaPhiPiPi);
689 double dEtaMax = dEtaMin + sqrt(rGapS*rGapS-fDeltaPhiPiPi*fDeltaPhiPiPi);
690 double eta = TMath::Abs( fDeltaEta );
691 if( eta > dEtaMin && eta < dEtaMax ){
692 //if( eta > dEtaMin && eta < dEtaMax && fDeltaEta <0 ){
694 // fhistos->hDRNearPtMoon[fTyp][fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
697 fhistos->fhDRNearPtMoon[fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
699 fhistos->fhDRNearPtMoonM[fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
700 if(fTyp == kReal) fhistos->fhDphiAssoc2D[ir1][irs]->Fill( fDeltaEta, fDeltaPhi/kJPi, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
708 if(fRGapBinAway <= fRSignalBin) fhistos->fhDRFarPt[fTyp][fCentralityBin][ZBin][fRGapBinAway][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
711 for( int irs = 0; irs <= fRSignalBin;irs++ ){
712 if( fRGapBinAway < irs ) continue;
713 if( fPhiGapBinAway > irs ) continue;
714 for ( int ir1=0;ir1<= fRGapBinAway;ir1++ ){
715 if( irs > ir1 ) continue;
716 if( ir1 > fRGapBinAway ) continue;
717 double rGapS= fRGap[irs+1];
718 double rGap1= fRGap[ir1+1];
719 if( rGap1 < TMath::Abs(fDeltaPhi-kJPi) ) continue;
720 if( rGapS < TMath::Abs(fDeltaPhi-kJPi) ) continue;
721 double dEtaMin = sqrt(rGap1*rGap1- (fDeltaPhi-kJPi)*(fDeltaPhi-kJPi) );
722 double dEtaMax = dEtaMin + sqrt(rGapS*rGapS-(fDeltaPhi-kJPi)*(fDeltaPhi-kJPi) );
723 double eta = TMath::Abs( fDeltaEta );
724 if( eta > dEtaMin && eta < dEtaMax ){
725 //if( eta > dEtaMin && eta < dEtaMax && fDeltaEta <0 ){
727 // fhistos->hDRFarPtMoon[fTyp][fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
729 fhistos->fhDRFarPtMoon[fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
731 fhistos->fhDRFarPtMoonM[fCentralityBin][ZBin][ir1][irs][fpttBin]->Fill( fpta, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
733 if(fTyp == kReal) fhistos->fhDphiAssoc2D[ir1][irs]->Fill( fDeltaEta, fDeltaPhi/kJPi, fGeometricAcceptanceCorrection * fTrackPairEfficiency );
742 double AliJCorrelations::GetGeoAccCorrFlat(double deltaEta){
743 //FK// calculate acceptance correction on pseudorapidity triangle
744 double absDEta = fabs(deltaEta);
746 double denominator = 1 - absDEta/(2*fmaxEtaRange);
747 //double denominator = 1 - (absDEta - ftriggFiducCut)/(2*fmaxEtaRange-2*ftriggFiducCut);//When Fid>0 max_Deta je mensi nez 2*EtaMax
748 //double denominator = 1 - (absDEta - ftriggFiducCut)/(2*fmaxEtaRange-ftriggFiducCut);
749 if(denominator > 1e-6)
750 return 1.0/denominator;
755 double AliJCorrelations::GetGeoAccCorrIncl(double deltaEta){
758 if(fhistos->fhDEtaNearMixFromFile[fCentralityBin][fpttBin][fptaBin]->GetEntries()<1000) return GetGeoAccCorrFlat(deltaEta);
760 int bin = fhistos->fhDEtaNearMixFromFile[fCentralityBin][fpttBin][fptaBin]->FindBin(deltaEta);
761 double denominator = fhistos->fhDEtaNearMixFromFile[fCentralityBin][fpttBin][fptaBin]->GetBinContent(bin);
762 if(denominator > 1e-6)
763 return 1.0/denominator;
769 double AliJCorrelations::DeltaPhi(double phi1, double phi2) {
771 double res = atan2(sin(phi1-phi2), cos(phi1-phi2));
772 //double res = phi1 - phi2;
773 //return res>-kJPi/3.0 ? res : kJTwoPi+res ;
774 return res>-kJPi*9./20. ? res : kJTwoPi+res ;