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!
19 // used in local and grid execution
25 #include "AliJCORRAN.h"
27 #include "AliJTrackCounter.h"
28 #include <TClonesArray.h>
31 #include "AliJHistos.h"
32 #include "AliJCorrelations.h"
33 #include "AliJEventPool.h"
34 #include "AliJDataManager.h"
36 #include "AliJEventHeader.h"
37 #include "AliJRunHeader.h"
38 #include "AliJTrack.h"
39 #include "AliJPhoton.h"
40 #include "AliJMCTrack.h"
41 #include "AliJConst.h"
46 #include "AliJEfficiency.h"
51 AliJCORRAN::AliJCORRAN() :
55 fjtrigg((particleType)-100),
56 fjassoc((particleType)-100),
66 fchargedHadronList(0),
86 flowerPtAssocBoarder(0),
94 fHadronSelectionCut(0)
99 AliJCORRAN::AliJCORRAN(Bool_t execLocal) :
101 fExecLocal(execLocal),
103 fjtrigg((particleType)-100),
104 fjassoc((particleType)-100),
114 fchargedHadronList(0),
134 flowerPtAssocBoarder(0),
142 fHadronSelectionCut(0)
147 AliJCORRAN::~AliJCORRAN(){
151 AliJCORRAN::AliJCORRAN(const AliJCORRAN& obj) :
153 fExecLocal(obj.fExecLocal),
154 fFirstEvent(obj.fFirstEvent),
155 fjtrigg(obj.fjtrigg),
156 fjassoc(obj.fjassoc),
158 finputFile(obj.finputFile),
159 fInclusiveFile(obj.fInclusiveFile),
161 fhistos(obj.fhistos),
162 fcorrelations(obj.fcorrelations),
163 fphotonPool(obj.fphotonPool),
164 fassocPool(obj.fassocPool),
165 fphotonList(obj.fphotonList),
166 fchargedHadronList(obj.fchargedHadronList),
167 fpizeroList(obj.fpizeroList),
168 ftriggList(obj.ftriggList),
169 fassocList(obj.fassocList),
170 fpairList(obj.fpairList),
171 fpairCounterList(obj.fpairCounterList),
172 finputList(obj.finputList),
174 feventHeader(obj.feventHeader),
175 frunHeader(obj.frunHeader),
176 fnumberEvents(obj.fnumberEvents),
178 fEventCounter(obj.fEventCounter),
181 fnPttBin(obj.fnPttBin),
182 fbTriggCorrel(obj.fbTriggCorrel),
183 fbLPCorrel(obj.fbLPCorrel),
184 fbLPpairCorrel(obj.fbLPpairCorrel),
185 fTrackEtaRange(obj.fTrackEtaRange),
186 flowerPtAssocBoarder(obj.flowerPtAssocBoarder),
187 fCentMultLow(obj.fCentMultLow),
188 fCentMultHigh(obj.fCentMultHigh),
189 fEventBC(obj.fEventBC),
191 fEfficiency(obj.fEfficiency),
192 fRunTable(obj.fRunTable),
193 fIsolationR(obj.fIsolationR),
194 fHadronSelectionCut(obj.fHadronSelectionCut)
200 AliJCORRAN& AliJCORRAN::operator=(const AliJCORRAN& obj){
207 void AliJCORRAN::Initialize() const{
212 void AliJCORRAN::UserCreateOutputObjects(){
216 cout << "jcorran user create output objects ----------------" << endl;
218 fHadronSelectionCut =int ( fcard->Get("HadronSelectionCut"));
219 fIsolationR = fcard->Get("IsolationR");
221 fhistos = new AliJHistos( fcard );
222 fhistos->CreateEventTrackHistos();
223 fhistos->CreateAzimuthCorrHistos();
224 fhistos->CreateIAAMoons();
225 fhistos->CreateXEHistos();
226 fhistos->CreateXtHistos();
227 fhistos->CreatePairPtCosThetaStar();
229 fhistos->fHMG->Print();
231 fEventBC = (Int_t)(fcard->Get( "eventBC" ));
235 //TODO: inclusive fhistos shipping along
237 fcorrelations = new AliJCorrelations( fcard, fhistos);
238 cout<<endl<< " -----" <<endl;
239 if( fInclusiveFile.Length() ) {
240 fhistos->ReadInclusiveHistos(fInclusiveFile);
241 fcorrelations->SetSampligInclusive(); //kperp background and triangle. Default is flat
242 cout<<"Sampling kperp and triangle from " << fInclusiveFile <<endl;
243 } else cout << "Sampling kperp and triangle from flat" <<endl;
244 cout<< " -----" <<endl <<endl;
246 //==================================
248 //cout<<kParticleTypeStrName[kPhoton]<<" "<<kParticleTypeStrName[fjtrigg]<<endl;
249 // EventPool for Mixing
250 fphotonPool = new AliJEventPool( fcard, fhistos, fcorrelations, kJPhoton); // for pi0 mass
251 fassocPool = new AliJEventPool( fcard, fhistos, fcorrelations, fjassoc);
253 fphotonList = new TClonesArray(kParticleProtoType[kJPhoton],1500);
254 // TClonesArray *cellList = new TClonesArray("AliJCaloCell",1500);
255 fchargedHadronList = new TClonesArray(kParticleProtoType[kJHadron],1500);
256 fpizeroList = new TClonesArray(kParticleProtoType[kJPizero],1500);
257 ftriggList = new TClonesArray(kParticleProtoType[fjtrigg],1500);
258 fassocList = new TClonesArray(kParticleProtoType[fjassoc],1500);
259 fpairList = new TClonesArray(kParticleProtoType[fjtrigg],1500);
260 fpairCounterList = new TClonesArray("AliJTrackCounter",1500);
262 //TClonesArray *isolPizeroList = new TClonesArray("AliPhJPiZero",1500);
264 fdmg = new AliJDataManager(fcard, fhistos, fcorrelations, fExecLocal);
265 fdmg->SetExecLocal( fExecLocal );
267 //==== Read the Data files =====
269 fdmg->ChainInputStream(finputFile);
270 // TODO: run header is not supposed to be here
271 // doesn't work fSQRTS = 2.*frunHeader->GetBeamEnergy();
273 // for grid running, numberEvents is filled by the encapsulating
274 // grid task, which has access to the input handlers and can
275 // extract event numbers out of it
276 fnumberEvents = fdmg->GetNEvents();
277 fieout = fnumberEvents/20;
278 frunHeader = fdmg->GetRunHeader();
279 cout<<"RunID = "<<frunHeader->GetRunNumber()<< " Looping over "<<fnumberEvents<<" events"<<endl;
282 fdmg->SetRunHeader( frunHeader );
283 frunHeader = fdmg->GetRunHeader();
286 //==== Efficiency ====
287 fEfficiency = new AliJEfficiency;
288 fEfficiency->SetMode( fcard->Get("EfficiencyMode") ); // 0:NoEff, 1:Period 2:RunNum 3:Auto
290 fEfficiency->SetDataPath("/mnt/flustre/alice/taxi_jcorran/2013/EFF/data"); // Efficiency root file location local or alien
292 fEfficiency->SetDataPath("alien:///alice/cern.ch/user/d/djkim/legotrain/efficieny/data"); // Efficiency root file location local or alien
295 //-------------------------------------------------------------------
299 fncBin = fcard->GetNoOfBins( kCentrType );
300 fnPttBin = fcard->GetNoOfBins( kTriggType );
302 fbTriggCorrel = fcard->Get("CorrelationType")==0;
303 fbLPCorrel = fcard->Get("CorrelationType")==1;
304 fbLPpairCorrel = fcard->Get("CorrelationType")==2;
305 fTrackEtaRange = fcard->Get("EtaRange");
306 flowerPtAssocBoarder = fcard->GetBinBorder(kAssocType, 0);
308 //==== Limit the no of track for each fcentrality ======
309 fCentMultLow = new TF1("fCentMultLow","[0]*sqrt([1]-x)+[2]", 0, 75);
310 fCentMultHigh = new TF1("fCentMultHigh","[0]*sqrt([1]-x)+[2]", 0, 90);
312 // fast parameter load
315 fhistos->fHMG->WriteConfig();
319 cout << "end of jcorran user create output objects ----------------" << endl;
323 void AliJCORRAN::UserExec(){
327 // TODO Add train mode if( !fExecLocal && fFirstEvent ){
328 if( 0 && !fExecLocal && fFirstEvent ){
329 fdmg->ChainInputStream("");
330 fieout = fnumberEvents/20;
331 if (fieout<1) fieout=1;
332 cout<<"RunID = "<<frunHeader->GetRunNumber()<< " Looping over "<<fnumberEvents<<" events"<<endl;
334 //==== Efficiency ====
335 // TODO run can be different in a job?
336 fhistos->fhEventPerRun->Fill(fnumberEvents>0?log(fnumberEvents):1);
337 fFirstEvent = kFALSE;
342 if(fevt % fieout == 0) cout << fevt << "\t" << int(float(fevt)/fnumberEvents*100) << "%" << endl ;
347 fRunTable = & AliJRunTable::GetSpecialInstance();
348 fRunTable->SetRunNumber( frunHeader->GetRunNumber() );
349 fSQRTS = fRunTable->GetBeamEnergy(fRunTable->GetPeriod());
350 cout << "sqrts = "<< fSQRTS << ",runnumber = "<< frunHeader->GetRunNumber() << endl;
351 fEfficiency->SetRunNumber( frunHeader->GetRunNumber() );
353 fFirstEvent = kFALSE;
356 if(fRunTable->IsHeavyIon()){
357 fCentMultLow->SetParameters( fcard->Get("CentMultCutLow",0), fcard->Get("CentMultCutLow",1), fcard->Get("CentMultCutLow",2) );
358 fCentMultHigh->SetParameters(fcard->Get("CentMultCutHigh",0), fcard->Get("CentMultCutHigh",1), fcard->Get("CentMultCutHigh",2) );
359 //fCentMultLow->Print();
360 //fCentMultHigh->Print();
363 fdmg->LoadEvent(fevt); // to be here to load EventHeader
364 fhistos->fhEvents->Fill( 0 );
366 if(!fdmg->IsGoodEvent()) return; // Vertex cut applied in IsGoodEvent and histo saved there too
368 feventHeader = fdmg->GetEventHeader();
369 double zVert = feventHeader->GetZVertex();
370 //----------------------------------------------------------
372 UInt_t triggermaskJCorran = feventHeader->GetTriggerMaskJCorran();
373 //cout << fevt <<"\t"<< zVert << "\t"<< triggermaskJCorran << endl;
375 if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
376 fhistos->fhEvents->Fill( 5 );
378 // select only some BC%4
379 if( feventHeader->GetBunchCrossNumber() % 4 != fEventBC &&
383 if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
384 fhistos->fhEvents->Fill( 6 );
386 if(fRunTable->IsHeavyIon() || fRunTable->IsPA()){
387 fcent = feventHeader->GetCentrality();
389 fcent = 1; //ntracks;
392 //cout<<"evt="<<fevt <<" c="<< fcent <<endl;
393 int cBin = fcard->GetBin(kCentrType, fcent);
396 if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
397 fhistos->fhEvents->Fill( 7 );
399 int zBin = fcard->GetBin(kZVertType, zVert); //should be alway >0; checked in fdmg->IsGoodEvent()
401 // do not fill MB in case of MB mixing
402 if( fdmg->IsSelectedTrigger((int) triggermaskJCorran))
403 fhistos->fhZVert[cBin]->Fill(zVert);
405 //temporary fevent skip
406 //Trigger to be selected from the JCorran trigger mask is specified in the fCard
407 // if(! fdmg->IsSelectedTrigger((int) triggermaskJCorran))
413 fhistos->fhV0AMult[cBin]->Fill( feventHeader->GetV0AMult() );
415 //------------------------------------------------------------------
416 // Triggers and associated
417 //----------------------ooooo---------------------------------------
419 if(fjtrigg==kJPizero || fjassoc==kJPizero || fjtrigg==kJPhoton || fjassoc==kJPhoton){
420 } // pizero || photon
421 if(fjtrigg==kJHadron || fjassoc==kJHadron){
422 fchargedHadronList->Clear();
423 fdmg->RegisterList(fchargedHadronList, NULL, cBin, zBin, kJHadron);
424 // apply efficiencies
426 for( int i = 0; i < fchargedHadronList->GetEntries(); i++ ){
428 AliJBaseTrack *triggTr = (AliJBaseTrack*)fchargedHadronList->At(i);
429 double ptt = triggTr->Pt();
431 double effCorr = 1./fEfficiency->GetCorrection(ptt, fHadronSelectionCut, fcent); // here you generate warning if ptt>30
432 fhistos->fhTrackingEfficiency[cBin]->Fill( ptt, 1./effCorr );
433 triggTr->SetTrackEff( 1./effCorr );
437 //---- assign input list ----
438 if(fjtrigg==kJPizero) finputList = fpizeroList;
439 else if(fjtrigg==kJHadron) finputList = fchargedHadronList;
440 else if(fjtrigg==kJPhoton) finputList = fphotonList;
441 int noAllTriggTracks = finputList->GetEntries();
442 int noAllChargedTracks = fchargedHadronList->GetEntries();
443 fhistos->fhChargedMult[cBin]->Fill(noAllChargedTracks);
444 fhistos->fhChargedMultCent->Fill(fcent, noAllChargedTracks>0 ? log(noAllChargedTracks) : 0);
446 //---------------------------------------------
447 //-- Check fcentrality outliers ---
448 //-- and count enevents only here ---
449 //---------------------------------------------
450 if(fRunTable->IsHeavyIon() && fCentMultLow->GetParameter(0) >0 ){
451 double logMult = noAllChargedTracks>0 ? log(noAllChargedTracks) : 0 ;
452 if( fcent<fCentMultLow->GetParameter(1) && logMult <fCentMultLow->Eval(fcent) ) return;
453 if( fCentMultHigh->Eval(fcent) < logMult) return;
455 fhistos->fhChargedMultCut[cBin]->Fill(noAllChargedTracks);
456 fhistos->fhCentr->Fill(fcent);
457 fhistos->fhiCentr->Fill(cBin);
459 // ------------------------------
460 // --- calculate e-b-e vn
461 // ------------------------------
462 if(fRunTable->IsHeavyIon()){
463 double vdelta[2] = {0};
465 for(int it1=0; it1<noAllTriggTracks-1; it1++){
466 AliJBaseTrack *ftk1 = (AliJBaseTrack*)finputList->At(it1);
467 if(ftk1->Pt()<flowerPtAssocBoarder) continue;
468 for(int it2=it1+1; it2<noAllTriggTracks; it2++){
469 AliJBaseTrack *ftk2 = (AliJBaseTrack*)finputList->At(it2);
470 if(ftk2->Pt()<flowerPtAssocBoarder) continue;
471 if(fabs(ftk1->Eta() - ftk2->Eta())<1.0) continue;
472 double fdphi = ftk1->DeltaPhi(*ftk2);
473 fhistos->fhVN[cBin]->Fill(fdphi);
474 vdelta[0] += cos(2*fdphi);
475 vdelta[1] += cos(3*fdphi);
476 //cout<< ftk1->Pt() <<" "<< ftk2->Pt() <<" "<< fabs(ftk1->Eta() - ftk2->Eta()) <<" "<< 2*fdphi <<" "<< 3*fdphi <<endl;
480 vdelta[0] = vdeltaNorm>0 ? vdelta[0]/vdeltaNorm : 0;
481 vdelta[1] = vdeltaNorm>0 ? vdelta[1]/vdeltaNorm : 0;
482 fhistos->fhVdelta2[cBin]->Fill(vdelta[0]*100);
483 fhistos->fhVdelta3[cBin]->Fill(vdelta[1]*100);
484 if(vdelta[0]>0) fhistos->fpV2->Fill( fcent, sqrt(vdelta[0])*100 );
486 fhistos->fpV3->Fill( fcent, sqrt(vdelta[1])*100 );
487 fcard->SetEventV3kv(vdelta[1]);
489 fhistos->fpVdeltaNorm->Fill( fcent, vdeltaNorm );
492 //----------------------------------------------------
493 //----- Generate trigg list and find LP --
494 //----- Fiducial cut should be used in AliJCorrelations--
495 //----------------------------------------------------
496 AliJTrackCounter *lpTrackCounter = new AliJTrackCounter(), *lpPairCounter = new AliJTrackCounter();
497 AliJBaseTrack *lPTr = NULL;
500 for(int itrack=0; itrack<noAllTriggTracks; itrack++){
501 AliJBaseTrack *triggTr = (AliJBaseTrack*)finputList->At(itrack);
502 triggTr->SetTriggBin( fcard->GetBin(kTriggType, triggTr->Pt()) );
504 double ptt = triggTr->Pt();
505 double etat = triggTr->Eta();
508 double effCorr = 1.0/triggTr->GetTrackEff();
510 if( ptt>flowerPtAssocBoarder ){
511 //FK//double effCorr = 1./fcard->TrackEfficiency(ptt, fcent); // here you generate warning if ptt>30
512 //double effCorr = 1./fcard->TrackEfficiency(ptt, etat, cBin); // here you generate warning if ptt>30
513 fhistos->fhChargedPt[cBin]->Fill(ptt, effCorr );
514 fhistos->fhChargedPtNoCorr[cBin]->Fill( ptt );
515 fhistos->fhChargedEta->Fill(triggTr->Eta(), effCorr);
516 //fhistos->fhChargedPtJacek[cBin]->Fill(ptt, effCorr );
517 fhistos->fhChargedPtJacek[cBin]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0); //One CANNOT do 1/ptt here!! First unfold.
518 if( -0.8<etat && etat<-0.2) fhistos->fhChargedPtJacekEta[cBin][0]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
519 if( -0.2<etat && etat< 0.3) fhistos->fhChargedPtJacekEta[cBin][1]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
520 if( 0.3<etat && etat< 0.8) fhistos->fhChargedPtJacekEta[cBin][2]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
521 fhistos->fhChargedPtFiete->Fill(ptt, effCorr );
524 if( !triggTr->IsInTriggerBin() ) continue;
525 //FK//triggTr->SetTrackEff( fcard->TrackEfficiency(triggTr->Pt(), fcent) );
526 int iptt = triggTr->GetTriggBin();
527 fhistos->fhIphiTrigg[cBin][iptt]->Fill( triggTr->Phi(), effCorr);
528 fhistos->fhIetaTrigg[cBin][iptt]->Fill( triggTr->Eta(), effCorr);
530 if( ptt > lpTrackCounter->Pt() ) {
531 lpTrackCounter->Store(noTriggs, ptt, iptt);
534 //cout <<"1 ptt="<< triggTr->Pt() <<" bin="<< triggTr->GetTriggBin() << " st=" << triggTr->GetStatus() << " trigg eff=" << triggTr->GetTrackEff() << endl;
535 new ((*ftriggList)[noTriggs++]) AliJBaseTrack(*triggTr);
536 fhistos->fhTriggMult[cBin][iptt]->Fill(noAllTriggTracks);
539 //----------------------------------------------------
540 //----- Find sum of two leading particles ------------
541 //----------------------------------------------------
545 fpairCounterList->Clear();
546 for(int ii=0;ii<noTriggs-1;ii++){
547 AliJBaseTrack *triggTr1 = (AliJBaseTrack*)ftriggList->At(ii);
548 for(int jj=ii+1;jj<noTriggs;jj++){
549 AliJBaseTrack *triggTr2 = (AliJBaseTrack*)ftriggList->At(jj);
550 TLorentzVector lVPair = triggTr1->GetLorentzVector()+triggTr2->GetLorentzVector();
551 double fdphi = DeltaPhi(triggTr1->Phi(), triggTr2->Phi());
552 new ((*fpairList)[noPairs]) AliJBaseTrack(lVPair);
553 new ((*fpairCounterList)[noPairs++])
554 AliJTrackCounter( triggTr1->GetID(), triggTr2->GetID(), ii, jj, fdphi );
558 // ----- Find the Leading Pair --------------------------
559 AliJBaseTrack *pairTr = NULL;
560 for(int ii=0;ii<noPairs;ii++){
561 pairTr = (AliJBaseTrack*)fpairList->At(ii);
562 AliJTrackCounter *pairCounter = (AliJTrackCounter*)fpairCounterList->At(ii);
563 //cout<<pairTr->Pt()<<endl; pairCounter->Print();
564 if(pairTr->Pt() > lpPairCounter->Pt() && fabs(pairCounter->GetPairDPhi())<1.0) {
565 int iptt = fcard->GetBin(kTriggType, pairTr->Pt());
566 lpPairCounter = pairCounter;
567 lpPairCounter->Store(ii, pairTr->Pt(), iptt);
570 if(lpPairCounter->Exists()){
571 pairTr->SetParticleType(kJHadron);
572 //double effCorr = 1./fcard->TrackEfficiency(lpTrackCounter->GetLPpt());
573 fhistos->fhLPpairPt->Fill(pairTr->Pt());
577 //--------------------------------------------------
578 //--- Generate assoc list and pool ---
579 //--------------------------------------------------
582 double sumPtAroundLP = 0;
583 if(fjassoc==kJPizero) finputList = fpizeroList;
584 else if(fjassoc==kJHadron) finputList = fchargedHadronList;
585 else if(fjassoc==kJPhoton) finputList = fphotonList;
587 int noAllAssocTracks = finputList->GetEntries();
590 for(int itrack=0;itrack<noAllAssocTracks; itrack++){
592 AliJBaseTrack *assocTr = (AliJBaseTrack*)finputList->At(itrack);
593 assocTr->SetAssocBin( fcard->GetBin(kAssocType, assocTr->Pt()) );
595 if(assocTr->IsInAssocBin()){
597 int ipta = assocTr->GetAssocBin();
598 double effCorr = 1.0/assocTr->GetTrackEff();
599 fhistos->fhIphiAssoc[cBin][ipta]->Fill( assocTr->Phi(), effCorr);
600 fhistos->fhIetaAssoc[cBin][ipta]->Fill( assocTr->Eta(), effCorr);
601 new ((*fassocList)[noAssocs++]) AliJBaseTrack(*assocTr);
603 // determine an activity in the cone around trigger
604 if(lpTrackCounter->Exists() && (lPTr->GetID()!=assocTr->GetID()) && (0.5 < assocTr->Pt())){
605 double dPhi = DeltaPhi( assocTr->Phi(), lPTr->Phi() );
606 double dEta = assocTr->Eta() - lPTr->Eta();
607 if(fIsolationR > sqrt(dPhi*dPhi+dEta*dEta)) sumPtAroundLP += assocTr->Pt();//FK//
611 FillXtHistos(finputList, lpTrackCounter);
613 //-----------------------------------------------
614 // Set the isolation flag
615 //-----------------------------------------------
616 if( lpTrackCounter->Exists() ){
617 //double effCorr = 1./fcard->TrackEfficiency(lpTrackCounter->Pt(), fcent);
618 //TODO ??? AGAIN AGAIN???
619 double effCorr = 1./fEfficiency->GetCorrection(lpTrackCounter->Pt(), fHadronSelectionCut, fcent );
620 fhistos->fhLPpt->Fill(lpTrackCounter->Pt(), effCorr);
621 fhistos->fhLPeta->Fill(lPTr->Eta(), effCorr);
622 fhistos->fhBkgActivity[lpTrackCounter->GetPtBin()]->Fill(sumPtAroundLP/lpTrackCounter->Pt());
624 if( sumPtAroundLP/lpTrackCounter->Pt()< fcard->GetCutOnBkgActivity() && ///relative activity
625 ( fabs(lPTr->Eta()) < (fTrackEtaRange - fIsolationR) ) ){ //fiducial cut
627 fhistos->fhIsolatedLPpt->Fill(lpTrackCounter->Pt(), effCorr );
629 AliJBaseTrack* lpTrigger = (AliJBaseTrack*) ftriggList->At(lpTrackCounter->GetIndex());
630 lpTrigger->SetIsIsolated(1);
634 fhistos->fhAssocMult->Fill(noAssocs);
635 //cout<"Triggs = "<<<noTriggs<<" Assoc = "<<noAssocs<<" all = "<<noAllTracks<<endl;
637 //============================================================
638 //there is obviously a problem when you do "fixed" correlation.
639 //In this case the noTriggs==0 condition is never fullfilled
640 //============================================================
641 //if(noTriggs==0 || ((fjtrigg==kPizero) && (fjassoc==kPizero)) )
642 //if(leadingPt<1.5) //should be fixed
643 //if(noTriggs==0 && noAssocs>0 ){}
644 if(noAssocs>0 ) fassocPool->AcceptList(fassocList, fcent, zVert, noAllChargedTracks, fevt);
646 //------------------------------------------------------------------
647 // Do the Correlation
648 //----------------------ooooo---------------------------------------
650 noTriggTracs = fbTriggCorrel ? noTriggs : 1;
651 if(fbLPCorrel && !lpTrackCounter->Exists()) return;
652 if(fbLPpairCorrel && !lpPairCounter->Exists()) return;
653 AliJBaseTrack *triggTr = NULL;
655 for(int ii=0;ii<noTriggTracs;ii++){ // trigger loop
656 if (fbTriggCorrel) triggTr = (AliJBaseTrack*)ftriggList->At(ii);
657 if (fbLPCorrel) triggTr = (AliJBaseTrack*)ftriggList->At(lpTrackCounter->GetIndex());
658 if (fbLPpairCorrel) triggTr = (AliJBaseTrack*)fpairList->At(lpPairCounter->GetIndex());
659 //for(int ii=0;ii<noIsolPizero;ii++){ // trigger loop }
660 //AliJBaseTrack *triggTr = (AliJBaseTrack*)isolPizeroList->At(ii);
661 double ptt = triggTr->Pt();
662 int iptt = triggTr->GetTriggBin();
664 cout<<"Not registered trigger ! I better stop here." <<endl;
667 double effCorr = 1.0/triggTr->GetTrackEff();
668 fhistos->fhTriggPtBin[cBin][zBin][iptt]->Fill(ptt, effCorr);//inclusive
670 if(triggTr->GetIsIsolated()>0) fhistos->fhTriggPtBinIsolTrigg[kReal][cBin][iptt]->Fill(ptt, effCorr);
672 for(int jj=0;jj<noAssocs;jj++){ // assoc loop
673 AliJBaseTrack *assocTr = (AliJBaseTrack*)fassocList->At(jj);
674 //assocTr->PrintOut("assoc track");
676 (assocTr->GetID()==lpPairCounter->GetPairTrackID(0) ||
677 assocTr->GetID()==lpPairCounter->GetPairTrackID(1)) ) continue;
678 //-------------------------------------------------------------
679 fcorrelations->FillAzimuthHistos(kReal, cBin, zBin, triggTr, assocTr);
680 //-------------------------------------------------------------
683 // == mix trigg with assoc
685 fassocPool->Mix(fpairList, kAzimuthFill, fcent, zVert, noAllChargedTracks, fevt);
687 fassocPool->Mix(ftriggList, kAzimuthFill, fcent, zVert, noAllChargedTracks, fevt);
689 //--------------------------------------------------------------
690 // End of the Correlation
691 //--------------------------------------------------------------
697 void AliJCORRAN::Terminate() {
701 for (int hic = 0;hic < fcard->GetNoOfBins(kCentrType);hic++){
702 ScaleNotEquidistantHisto( fhistos->fhChargedPt[hic], 1);
703 ScaleNotEquidistantHisto( fhistos->fhChargedPtNoCorr[hic], 1);
704 ScaleNotEquidistantHisto( fhistos->fhChargedPtJacek[hic], 1);
706 ScaleNotEquidistantHisto( fhistos->fhLPpt, 1);
707 ScaleNotEquidistantHisto( fhistos->fhLPpairPt, 1);
708 ScaleNotEquidistantHisto( fhistos->fhIsolatedLPpt, 1);
709 ScaleNotEquidistantHisto( fhistos->fhChargedPtFiete, 1);
712 // cout<<"MB's="<<noMB<<" "<<" ERT's="<<noERT<<endl;
713 fcorrelations->PrintOut();
714 fassocPool->PrintOut();
715 fEfficiency->Write();
716 fhistos->fHMG->Print();
717 //fhistos->fHMG->Write();
720 particleType AliJCORRAN::GetParticleType(char *inchar){
722 for(int i=0;i<kNumberOfParticleTypes;i++) {
723 //cout<<"<"<<inchar<<"> <"<<particleTypeStr[i]<<"> "<<strcmp(inchar,particleTypeStr[i])<<" "<<(particleType)i<<endl;
724 if(strcmp(inchar,kParticleTypeStrName[i])==0) return (particleType)i;
726 std::cout<<"Particle type <"<<inchar<<"> not recognized"<<std::endl;
730 double AliJCORRAN::DeltaPhi(double phi1, double phi2) {
732 double res = atan2(sin(phi1-phi2), cos(phi1-phi2));
733 //return res>-kJPi/3.0 ? res : kJTwoPi+res ;
734 return res>-kJPi*9./20. ? res : kJTwoPi+res ;
737 void AliJCORRAN::ScaleNotEquidistantHisto(TH1D *hid, const double sc=1){
739 for(int i=1;i<= hid->GetNbinsX();i++){
740 hid->SetBinContent(i,hid->GetBinContent(i)*sc/hid->GetBinWidth(i));
741 hid->SetBinError(i,hid->GetBinError(i)*sc/hid->GetBinWidth(i));
745 // Fill xT histograms (Esko)
746 void AliJCORRAN::FillXtHistos(TClonesArray *inputList, AliJTrackCounter *lpTrackCounter){
747 // Here should be a comment describing this method
748 JUNUSED(lpTrackCounter);
750 enum xTtype { kInclusive=0, kIsolated=1, kIsolatedLP=2} ;
751 double lowerPtCut = 0.2;
752 double isolationR = 0.4;
753 double fCutOnBkgActivity = 0.10;
754 int cBin = fcard->GetBin(kCentrType, fcent);
755 double sqrts = fSQRTS;
756 int noAllTriggTracks = inputList->GetEntries();
757 //cout << "Entering Esko's analysis loop" << endl;
758 //cout << "Sqrts = " << sqrts << " pT = " << ptt << " xT = " << xtt << endl;
759 for(int itrack=0; itrack<noAllTriggTracks; itrack++){
760 AliJBaseTrack *triggTr = (AliJBaseTrack*)inputList->At(itrack);
761 double sumPtAroundTrigger = 0;
762 double ptt = triggTr->Pt();
763 double xtt = 2.0 * ptt / (1.0 * sqrts);
764 double effCorr = 1.0/triggTr->GetTrackEff();
765 fhistos->fhPtForXt[kInclusive][cBin]->Fill(ptt, ptt>0 ? 1./ptt*effCorr : 0);
766 fhistos->fhXt[kInclusive][cBin]->Fill(xtt, effCorr );
767 fhistos->fhXtWeighted[kInclusive][cBin]->Fill(xtt, effCorr*1.0/xtt );
769 for(int jj=0;jj<inputList->GetEntriesFast();jj++){ // assoc loop
770 AliJBaseTrack *assocTr = (AliJBaseTrack*)inputList->At(jj);
771 if(triggTr->GetID()==assocTr->GetID()) continue;
772 double pta = assocTr->Pt();
773 // determine the activity in the cone around trigger (Esko)
774 if( lowerPtCut < pta ){
775 double dPhi = DeltaPhi( assocTr->Phi(), triggTr->Phi() );
776 double dEta = assocTr->Eta() - triggTr->Eta();
777 if(isolationR > sqrt(dPhi*dPhi+dEta*dEta)) sumPtAroundTrigger += assocTr->Pt();//FK//
779 //cout << " Assoc number " << assocCounter++ << endl;
781 // If pT sum is below the limit, fill to the isolated histos
782 if( sumPtAroundTrigger/ptt < fCutOnBkgActivity && ///relative activity
783 ( fabs(triggTr->Eta()) < (fTrackEtaRange - isolationR) ) ){ //fiducial cut
785 // kInclusive kIsolated, kLPIsolated
786 fhistos->fhPtForXt[kIsolated][cBin]->Fill(ptt,effCorr*1.0/ptt);
787 fhistos->fhXt[kIsolated][cBin]->Fill(xtt, effCorr );
788 fhistos->fhXtWeighted[kIsolated][cBin]->Fill(xtt,effCorr*1.0/xtt);
790 //cout<<"pT sum around trigger = " << sumPtAroundTrigger << endl;
793 } // end FillXtHistos