18 #include <TGeoManager.h>
19 #include <TStreamerInfo.h>
22 #include "AliMCEvent.h"
23 #include "AliAODMCHeader.h"
24 #include "AliGenPythiaEventHeader.h"
25 #include "AliGenCocktailEventHeader.h"
26 #include "AliGenHijingEventHeader.h"
27 #include "AliESDEvent.h"
28 #include "AliAODEvent.h"
29 #include "AliVTrack.h"
30 #include "AliVParticle.h"
31 #include "AliMixedEvent.h"
33 #include "AliESDVZERO.h"
34 #include "AliVCaloCells.h"
35 #include "AliAnalysisManager.h"
36 #include "AliInputEventHandler.h"
37 #include "AliAODMCParticle.h"
42 #include "AliPHOSGeoUtils.h"
43 #include "AliEMCALGeometry.h"
44 #include "AliEMCALRecoUtils.h"
50 #include "AliAODJet.h"
51 #include "AliAODJetEventBackground.h"
61 TObject(), fEventNumber(-1),
62 fDataType(0), fDebug(0),
63 fFiducialCut(0x0), fCheckFidCut(kFALSE),
64 fComparePtHardAndJetPt(0), fPtHardAndJetPtFactor(0),
65 fComparePtHardAndClusterPt(0),fPtHardAndClusterPtFactor(0),
66 fCTSPtMin(0), fEMCALPtMin(0), fPHOSPtMin(0),
67 fCTSPtMax(0), fEMCALPtMax(0), fPHOSPtMax(0),
68 fUseEMCALTimeCut(1), fUseParamTimeCut(0),
69 fUseTrackTimeCut(0), fAccessTrackTOF(0),
70 fEMCALTimeCutMin(-10000), fEMCALTimeCutMax(10000),
71 fEMCALParamTimeCutMin(), fEMCALParamTimeCutMax(),
72 fTrackTimeCutMin(-10000), fTrackTimeCutMax(10000),
75 fCTSTracks(0x0), fEMCALClusters(0x0),
76 fDCALClusters(0x0), fPHOSClusters(0x0),
77 fEMCALCells(0x0), fPHOSCells(0x0),
78 fInputEvent(0x0), fOutputEvent(0x0),fMC(0x0),
79 fFillCTS(0), fFillEMCAL(0),
80 fFillDCAL(0), fFillPHOS(0),
81 fFillEMCALCells(0), fFillPHOSCells(0),
82 fRecalculateClusters(kFALSE),fCorrectELinearity(kTRUE),
83 fSelectEmbeddedClusters(kFALSE),
84 fSmearShowerShape(0), fSmearShowerShapeWidth(0), fRandom(),
85 fTrackStatus(0), fSelectSPDHitTracks(0),
86 fTrackMult(0), fTrackMultEtaCut(0.9),
87 fReadStack(kFALSE), fReadAODMCParticles(kFALSE),
88 fDeltaAODFileName(
""), fFiredTriggerClassName(
""),
90 fEventTriggerMask(0), fMixEventTriggerMask(0), fEventTriggerAtSE(0),
91 fEventTrigMinBias(0), fEventTrigCentral(0),
92 fEventTrigSemiCentral(0), fEventTrigEMCALL0(0),
93 fEventTrigEMCALL1Gamma1(0), fEventTrigEMCALL1Gamma2(0),
94 fEventTrigEMCALL1Jet1(0), fEventTrigEMCALL1Jet2(0),
95 fBitEGA(0), fBitEJE(0),
98 fTaskName(
""), fCaloUtils(0x0),
99 fMixedEvent(NULL), fNMixedEvent(0), fVertex(NULL),
100 fListMixedTracksEvents(), fListMixedCaloEvents(),
101 fLastMixedTracksEvent(-1), fLastMixedCaloEvent(-1),
102 fWriteOutputDeltaAOD(kFALSE),
103 fEMCALClustersListName(
""), fZvtxCut(0.),
104 fAcceptFastCluster(kFALSE), fRemoveLEDEvents(kTRUE),
106 fRemoveBadTriggerEvents(0), fTriggerPatchClusterMatch(1),
107 fTriggerPatchTimeWindow(), fTriggerL0EventThreshold(0),
108 fTriggerL1EventThreshold(0), fTriggerL1EventThresholdFix(0),
109 fTriggerClusterBC(0), fTriggerClusterIndex(0), fTriggerClusterId(0),
110 fIsExoticEvent(0), fIsBadCellEvent(0), fIsBadMaxCellEvent(0),
111 fIsTriggerMatch(0), fIsTriggerMatchOpenCut(),
112 fTriggerClusterTimeRecal(kTRUE), fRemoveUnMatchedTriggers(kTRUE),
113 fDoPileUpEventRejection(kFALSE), fDoV0ANDEventSelection(kFALSE),
114 fDoVertexBCEventSelection(kFALSE),
115 fDoRejectNoTrackEvents(kFALSE),
116 fUseEventsWithPrimaryVertex(kFALSE),
118 fTimeStampEventSelect(0),
119 fTimeStampEventFracMin(0), fTimeStampEventFracMax(0),
120 fTimeStampRunMin(0), fTimeStampRunMax(0),
121 fNPileUpClusters(-1), fNNonPileUpClusters(-1), fNPileUpClustersCut(3),
122 fVertexBC(-200), fRecalculateVertexBC(0),
123 fCentralityClass(
""), fCentralityOpt(0),
124 fEventPlaneMethod(
""),
125 fAcceptOnlyHIJINGLabels(0), fNMCProducedMin(0), fNMCProducedMax(0),
126 fFillInputNonStandardJetBranch(kFALSE),
127 fNonStandardJets(new TClonesArray(
"AliAODJet",100)),fInputNonStandardJetBranchName(
"jets"),
128 fFillInputBackgroundJetBranch(kFALSE),
129 fBackgroundJets(0x0),fInputBackgroundJetBranchName(
"jets"),
130 fAcceptEventsWithBit(0), fRejectEventsWithBit(0), fRejectEMCalTriggerEventsWith2Tresholds(0),
226 if(TMath::Abs(dca) < cut)
245 UInt_t trigFired = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
247 for(Int_t ibit = 0; ibit < nAccept; ibit++)
252 if(accept)
return kTRUE ;
271 UInt_t trigFired = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
273 for(Int_t ibit = 0; ibit < nReject; ibit++)
278 if(reject)
return kFALSE ;
297 eventType = ((AliVHeader*)
fInputEvent->GetHeader())->GetEventType();
305 AliDebug(1,Form(
"FiredTriggerClass <%s>, selected class <%s>, compare name %d",
310 else AliDebug(1,
"Accepted triggered event");
329 if(eventType!=8)
return kFALSE;
332 AliDebug(1,
"Pass Trigger name rejection");
337 UInt_t isTrigger = kFALSE;
338 UInt_t isMB = kFALSE;
345 AliAnalysisManager *manager = AliAnalysisManager::GetAnalysisManager();
346 AliInputEventHandler *inputHandler =
dynamic_cast<AliInputEventHandler*
>(manager->GetInputEventHandler());
348 if(!inputHandler)
return kFALSE ;
353 if(!isTrigger && !isMB)
return kFALSE;
356 AliDebug(0,
"Pass uninteresting triggered events rejection in case of mixing analysis");
368 if(!okA || !okR)
return kFALSE;
370 AliDebug(1,
"Pass event bit rejection");
403 AliDebug(1,Form(
"ACCEPT triggered event? \n exotic? %d - bad cell %d - bad Max cell %d - BC %d - Matched %d\n",
412 AliDebug(1,
"Pass EMCal triggered event rejection \n");
420 AliDebug(1,Form(
"Do not count events from fast cluster, trigger name %s\n",
fFiredTriggerClassName.Data()));
434 if(reject)
return kFALSE;
436 AliDebug(1,
"Pass LED event rejection");
457 Int_t nTriggerJets = pygeh->NTriggerJets();
458 Float_t ptHard = pygeh->GetPtHard();
460 AliDebug(1,Form(
"Njets: %d, pT Hard %f",nTriggerJets, ptHard));
462 Float_t tmpjet[]={0,0,0,0};
463 for(Int_t ijet = 0; ijet< nTriggerJets; ijet++)
465 pygeh->TriggerJet(ijet, tmpjet);
466 jet =
new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);
468 AliDebug(1,Form(
"jet %d; pycell jet pT %f",ijet, jet->Pt()));
473 AliInfo(Form(
"Reject jet event with : pT Hard %2.2f, pycell jet pT %2.2f, rejection factor %1.1f\n",
496 Float_t ptHard = pygeh->GetPtHard();
498 Int_t nclusters =
fInputEvent->GetNumberOfCaloClusters();
499 for (Int_t iclus = 0; iclus < nclusters; iclus++)
501 AliVCluster * clus =
fInputEvent->GetCaloCluster(iclus) ;
502 Float_t ecluster = clus->E();
506 AliInfo(Form(
"Reject : ecluster %2.2f, calo %d, factor %2.2f, ptHard %f",ecluster,clus->GetType(),
fPtHardAndClusterPtFactor,ptHard));
526 AliDebug(1,
"Stack is not available");
538 return fMC->Header();
542 AliInfo(
"Header is not available");
559 AliGenEventHeader * eventHeader =
fMC->GenEventHeader();
565 AliGenCocktailEventHeader *cocktail =
dynamic_cast<AliGenCocktailEventHeader *
>(eventHeader);
567 if(!cocktail) return ;
569 TList *genHeaders = cocktail->GetHeaders();
571 Int_t nGenerators = genHeaders->GetEntries();
574 for(Int_t igen = 0; igen < nGenerators; igen++)
576 AliGenEventHeader * eventHeader2 = (AliGenEventHeader*)genHeaders->At(igen) ;
577 TString name = eventHeader2->GetName();
584 if(name.Contains(
"Hijing",TString::kIgnoreCase))
return ;
593 if( nGenerators <= 0) return ;
597 for(Int_t igen = 0; igen < nGenerators; igen++)
599 AliGenEventHeader * eventHeader =
GetAODMCHeader()->GetCocktailHeader(igen) ;
600 TString name = eventHeader->GetName();
607 if(name.Contains(
"Hijing",TString::kIgnoreCase))
return ;
621 AliGenEventHeader * eventHeader =
fMC->GenEventHeader();
627 AliGenCocktailEventHeader *cocktail =
dynamic_cast<AliGenCocktailEventHeader *
>(eventHeader);
629 if(!cocktail)
return 0x0 ;
631 TList *genHeaders = cocktail->GetHeaders();
633 Int_t nGenerators = genHeaders->GetEntries();
636 for(Int_t igen = 0; igen < nGenerators; igen++)
638 AliGenEventHeader * eventHeader2 = (AliGenEventHeader*)genHeaders->At(igen) ;
639 TString name = eventHeader2->GetName();
643 if(name.Contains(
"Hijing",TString::kIgnoreCase))
return eventHeader2 ;
654 if( nGenerators <= 0)
return 0x0;
658 for(Int_t igen = 0; igen < nGenerators; igen++)
660 AliGenEventHeader * eventHeader =
GetAODMCHeader()->GetCocktailHeader(igen) ;
661 TString name = eventHeader->GetName();
665 if(name.Contains(
"Hijing",TString::kIgnoreCase))
return eventHeader ;
684 AliInfo(
"Input are not AODs");
695 AliInfo(
"Input are not AODs");
711 Int_t vertexBC=vtx->GetBC();
722 for(Int_t i = 0 ; i < ntr ; i++)
724 AliVTrack * track = (AliVTrack*) (
GetCTSTracks()->At(i));
727 ULong_t status = track->GetStatus();
728 Bool_t okTOF = (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ;
729 vertexBC = track->GetTOFBunchCrossing(bz);
730 Float_t pt = track->Pt();
735 Double_t dca[2] = {1e6,1e6};
736 Double_t covar[3] = {1e6,1e6,1e6};
737 track->PropagateToDCA(vtx,bz,100.,dca,covar);
741 if (vertexBC !=0 &&
fVertexBC != AliVTrack::kTOFBCNA)
return vertexBC;
742 else if(vertexBC == 0) bc0 = kTRUE;
746 if( bc0 ) vertexBC = 0 ;
747 else vertexBC = AliVTrack::kTOFBCNA ;
760 AliInfo(
"Cannot access stack and mcparticles at the same time, change them");
850 for(Int_t i = 0; i < 19; i++)
887 AliGenHijingEventHeader* hijingHeader =
dynamic_cast<AliGenHijingEventHeader *
> (
GetGenEventHeader());
891 if(!hijingHeader || label < 0 )
return kFALSE;
907 Int_t nprimaries =
GetStack()->GetNtrack();
909 if(label > nprimaries)
return kFALSE;
911 TParticle * mom =
GetStack()->Particle(label);
914 Int_t iParent = mom->GetFirstMother();
925 iParent = mom->GetFirstMother();
935 if(!mcparticles)
return kFALSE;
937 Int_t nprimaries = mcparticles->GetEntriesFast();
939 if(label > nprimaries)
return kFALSE;
949 AliAODMCParticle * mom = (AliAODMCParticle *) mcparticles->At(label);
952 Int_t iParent = mom->GetMother();
962 mom = (AliAODMCParticle *) mcparticles->At(iMom);
963 iParent = mom->GetMother();
986 if( tof < minCut || tof > maxCut )
return kFALSE ;
1002 fPileUpParamSPD[2] , fPileUpParamSPD[3] , fPileUpParamSPD[4] );
1087 AliInfo(
"Input event not available, skip event analysis");
1098 if(!accept)
return kFALSE;
1100 AliDebug(1,
"Pass Event trigger selection");
1110 AliDebug(1,
"Pass Pt Hard - Jet rejection");
1116 AliDebug(1,
"Pass Pt Hard - Cluster rejection");
1125 AliESDEvent* esd =
dynamic_cast<AliESDEvent*
> (
fInputEvent);
1128 Int_t timeStamp = esd->GetTimeStamp();
1136 AliDebug(1,
"Pass Time Stamp rejection");
1151 if( TMath::Abs(
fVertex[0][0] ) < 1.e-6 &&
1152 TMath::Abs(
fVertex[0][1] ) < 1.e-6 &&
1153 TMath::Abs(
fVertex[0][2] ) < 1.e-6 )
return kFALSE;
1156 AliDebug(1,
"Pass primary vertex rejection");
1166 if(bPileup)
return kFALSE;
1168 AliDebug(1,
"Pass Pile-Up event rejection");
1175 Bool_t bV0AND = ((v0->GetV0ADecision()==1) && (v0->GetV0CDecision()==1));
1181 AliDebug(1,
"Reject event by V0AND");
1185 AliDebug(1,
"Pass V0AND event rejection");
1199 AliDebug(1,
"Pass centrality rejection");
1226 AliDebug(1,
"Pass rejection of null track events");
1233 AliDebug(1,
"Pass rejection of events with vertex at BC!=0");
1256 AliDebug(1,
"Event accepted for analysis");
1274 AliInfo(Form(
"Unknown centrality option %d, use 10, 20 or 100\n",
fCentralityOpt));
1291 AliDebug(1,Form(
"Bad EP for <Q> method : %f\n",ep));
1296 if((ep > TMath::Pi()/2 || ep < -TMath::Pi()/2))
1305 AliDebug(3,Form(
"Event plane angle %f",ep));
1331 vertex[0] =
fVertex[evtIndex][0];
1332 vertex[1] =
fVertex[evtIndex][1];
1333 vertex[2] =
fVertex[evtIndex][2];
1355 fVertex[i] =
new Double_t[3] ;
1372 AliWarning(
"NULL primary vertex");
1390 AliWarning(
"No vertex found");
1392 AliDebug(1,Form(
"Multi Event %d Vertex : %f,%f,%f",iev,
fVertex[iev][0],
fVertex[iev][1],
fVertex[iev][2]));
1406 AliDebug(1,
"Begin");
1408 Double_t pTrack[3] = {0,0,0};
1410 Int_t nTracks =
fInputEvent->GetNumberOfTracks() ;
1415 for(Int_t i = 0; i < 19; i++)
1421 Bool_t bc0 = kFALSE;
1424 for (Int_t itrack = 0; itrack < nTracks; itrack++)
1426 AliVTrack * track = (AliVTrack*)
fInputEvent->GetTrack(itrack) ;
1431 ULong_t status = track->GetStatus();
1442 Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
1443 Double_t tof = -1000;
1444 Int_t trackBC = -1000 ;
1450 trackBC = track->GetTOFBunchCrossing(bz);
1453 tof = track->GetTOFsignal()*1e-3;
1458 if (trackBC != 0 && trackBC != AliVTrack::kTOFBCNA)
fVertexBC = trackBC;
1459 else if(trackBC == 0) bc0 = kTRUE;
1472 fMomentum.SetPxPyPzE(pTrack[0],pTrack[1],pTrack[2],0);
1478 Float_t dcaTPC =-999;
1480 if(
fDataType ==
kAOD ) dcaTPC = ((AliAODTrack*) track)->DCA();
1485 Double_t dca[2] = {1e6,1e6};
1486 Double_t covar[3] = {1e6,1e6,1e6};
1487 Bool_t okDCA = track->PropagateToDCA(
fInputEvent->GetPrimaryVertex(),bz,100.,dca,covar);
1507 AliDebug(2,Form(
"Selected tracks pt %3.2f, phi %3.2f, eta %3.2f",
1523 AliDebug(1,Form(
"AOD entries %d, input tracks %d, pass status %d, multipliticy %d",
fCTSTracks->GetEntriesFast(), nTracks, nstatus,
fTrackMult));
1541 vindex =
fMixedEvent->EventIndexForCaloCluster(iclus);
1547 AliDebug(2,Form(
"Input cluster E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
1569 if(
GetCaloUtils()->IsRecalculationOfClusterPositionOn())
1577 if(
GetCaloUtils()->GetEMCALRecoUtils()->IsTimeRecalibrationOn())
1579 Double_t tof = clus->GetTOF();
1603 AliDebug(2,Form(
"Bad cluster E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
1616 Bool_t shared = kFALSE;
1618 if(
GetCaloUtils()->MaskFrameCluster(iSupMod, ieta))
return;
1623 if(clus->GetNLabels()==0 || clus->GetLabel() < 0)
return;
1637 AliDebug(5,Form(
"Correct Non Lin: Old E %3.2f, New E %3.2f",
1642 if(
GetCaloUtils()->GetEMCALRecoUtils()->IsClusterEnergySmeared() )
1647 AliDebug(5,Form(
"Smear energy: Old E %3.2f, New E %3.2f",clus->E(),rdmEnergy));
1649 clus->SetE(rdmEnergy);
1653 Double_t tof = clus->GetTOF()*1e9;
1655 Int_t bc = TMath::Nint(tof/50) + 9;
1675 AliDebug(2,Form(
"Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
1679 clus->SetID(iclus) ;
1682 Bool_t bEMCAL = kFALSE;
1683 Bool_t bDCAL = kFALSE;
1698 AliDebug(2,Form(
"Smear shower shape - Original: %2.4f\n", clus->GetM02()));
1719 AliDebug(1,
"Begin");
1729 for(Int_t i = 0; i < 19; i++)
1738 Int_t nclusters =
fInputEvent->GetNumberOfCaloClusters();
1739 for (Int_t iclus = 0; iclus < nclusters; iclus++)
1741 AliVCluster * clus = 0;
1742 if ( (clus =
fInputEvent->GetCaloCluster(iclus)) )
1744 if (clus->IsEMCAL())
1757 TClonesArray * clusterList = 0x0;
1774 Int_t nclusters = clusterList->GetEntriesFast();
1775 for (Int_t iclus = 0; iclus < nclusters; iclus++)
1777 AliVCluster * clus =
dynamic_cast<AliVCluster*
> (clusterList->At(iclus));
1780 else AliWarning(
"Null cluster in list!");
1788 for(Int_t i = 0; i < 19; i++)
1794 for (Int_t iclus = 0; iclus <
fInputEvent->GetNumberOfCaloClusters(); iclus++)
1796 AliVCluster * clus = 0;
1798 if ( (clus =
fInputEvent->GetCaloCluster(iclus)) )
1800 if (clus->IsEMCAL())
1805 Double_t tof = clus->GetTOF();
1814 Int_t bc = TMath::Nint(tof/50) + 9;
1850 AliDebug(1,
"Begin");
1853 Int_t nclusters =
fInputEvent->GetNumberOfCaloClusters();
1854 for (Int_t iclus = 0; iclus < nclusters; iclus++)
1856 AliVCluster * clus = 0;
1857 if ( (clus =
fInputEvent->GetCaloCluster(iclus)) )
1866 vindex =
fMixedEvent->EventIndexForCaloCluster(iclus);
1867 if(
GetCaloUtils()->ClusterContainsBadChannel(
kPHOS,clus->GetCellsAbsId(), clus->GetNCells()))
1889 AliDebug(2,Form(
"Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
1894 clus->SetID(iclus) ;
1903 AliDebug(1,Form(
"AOD entries %d",
fPHOSClusters->GetEntriesFast()));
1934 AliESDVZERO* esdV0 =
dynamic_cast<AliESDVZERO*
> (v0);
1935 for (Int_t i = 0; i < 32; i++)
1939 fV0ADC[0] += (Int_t)esdV0->GetAdcV0C(i);
1940 fV0ADC[1] += (Int_t)esdV0->GetAdcV0A(i);
1943 fV0Mul[0] += (Int_t)v0->GetMultiplicityV0C(i);
1944 fV0Mul[1] += (Int_t)v0->GetMultiplicityV0A(i);
1951 AliDebug(1,
"Cannot retrieve V0 ESD! Run w/ null V0 charges");
1962 AliDebug(2,
"Begin");
1969 AliFatal(
"No non-standard jet branch name specified. Specify among existing ones.");
1994 AliDebug(1,
"Begin");
2001 AliFatal(
"No background jet branch name specified. Specify among existing ones.");
2015 AliDebug(1,
"FillInputBackgroundJets");
2026 Int_t trigtimes[30], globCol, globRow,ntimes, i;
2033 AliVCaloTrigger *caloTrigger =
GetInputEvent()->GetCaloTrigger(
"EMCAL" );
2038 if( caloTrigger->GetEntries() > 0 )
2041 caloTrigger->Reset();
2044 while( caloTrigger->Next() )
2047 caloTrigger->GetPosition( globCol, globRow );
2053 caloTrigger->GetNL0Times( ntimes );
2061 caloTrigger->GetL0Times( trigtimes );
2065 for( i = 0; i < ntimes; i++ )
2068 if( trigtimes[i] >= tmin && trigtimes[i] <= tmax )
2074 patches.Set(nPatch+1);
2075 patches.AddAt(absId,nPatch++);
2082 caloTrigger->GetTriggerBits(bit);
2085 caloTrigger->GetL1TimeSum(sum);
2095 if(!isEGA1 && !isEJE1 && !isEGA2 && !isEJE2)
continue;
2097 Int_t patchsize = -1;
2098 if (isEGA1 || isEGA2) patchsize = 2;
2099 else if (isEJE1 || isEJE2) patchsize = 16;
2106 for(Int_t irow=0; irow < patchsize; irow++)
2108 for(Int_t icol=0; icol < patchsize; icol++)
2112 patches.Set(nPatch+1);
2113 patches.AddAt(absId,nPatch++);
2122 if(patches.GetSize()<=0) AliInfo(Form(
"No patch found! for triggers: %s and selected <%s>",
2159 TClonesArray * clusterList = 0;
2170 Int_t nclusters =
fInputEvent->GetNumberOfCaloClusters();
2172 nclusters = clusterList->GetEntriesFast();
2174 Int_t nPatch = patches.GetSize();
2178 Float_t tofPatchMax = 100000;
2179 Float_t ePatchMax =-1;
2181 Float_t tofMax = 100000;
2185 Int_t idclusMax =-1;
2186 Bool_t badClMax = kFALSE;
2187 Bool_t badCeMax = kFALSE;
2188 Bool_t exoMax = kFALSE;
2190 Int_t absIdMaxMax = -1;
2192 Int_t nOfHighECl = 0 ;
2202 Float_t minE = triggerThreshold / 2.;
2208 AliDebug(1,Form(
"IsL1Trigger %d, IsL1JetTrigger? %d, IsL0Trigger %d, L1 threshold %2.1f, L0 threshold %2.1f, Min cluster E %2.2f",
IsEventEMCALL1Jet(),
IsEventEMCALL1(),
IsEventEMCALL0(),
fTriggerL1EventThreshold,
fTriggerL0EventThreshold,minE));
2213 for (Int_t iclus = 0; iclus < nclusters; iclus++)
2215 AliVCluster * clus = 0;
2216 if(clusterList) clus = (AliVCluster*) clusterList->At(iclus);
2219 if ( !clus ) continue ;
2221 if ( !clus->IsEMCAL() )
continue ;
2224 if ( clus->E() < minE )
continue ;
2230 clus->GetCellsAbsId(),clus->GetNCells());
2231 UShort_t cellMax[] = {(UShort_t) absIdMax};
2248 if(!exotic && clus->GetNCells() < 2) exotic = kTRUE;
2250 Float_t energy = clus->E();
2251 Int_t idclus = clus->GetID();
2253 Double_t tof = clus->GetTOF();
2267 badClMax = badCluster;
2272 absIdMaxMax = absIdMax;
2277 if(!badCluster && !exotic)
2283 for(Int_t iabsId =0; iabsId < nPatch; iabsId++)
2290 for(Int_t ipatch = 0; ipatch < 4; ipatch++)
2292 if(absIdMax == absIDCell[ipatch])
2295 if(energy > ePatchMax)
2318 tofPatchMax = tofMax;
2327 Double_t tofPatchMaxUS = TMath::Abs(tofPatchMax);
2362 Int_t patchAbsIdOpenTime = -1;
2363 for(Int_t iabsId =0; iabsId < patchOpen.GetSize(); iabsId++)
2366 patchAbsIdOpenTime = patchOpen.At(iabsId);
2371 for(Int_t ipatch = 0; ipatch < 4; ipatch++)
2373 if(absIdMaxMax == absIDCell[ipatch])
2382 Int_t patchAbsId = -1;
2383 Int_t globalCol = -1;
2384 Int_t globalRow = -1;
2389 Int_t patchAbsIdNeigh = -1;
2390 for(Int_t icol = globalCol-1; icol <= globalCol+1; icol++)
2392 if(icol < 0 || icol > 47)
continue;
2394 for(Int_t irow = globalRow; irow <= globalRow+1; irow++)
2396 if(irow < 0 || irow > 63)
continue;
2400 if ( patchAbsIdNeigh < 0 )
continue;
2402 for(Int_t iabsId =0; iabsId < patches.GetSize(); iabsId++)
2404 if(patchAbsIdNeigh == patches.At(iabsId))
2415 Int_t patchAbsIdNeighOpenTime = -1;
2416 for(Int_t icol = globalCol-1; icol <= globalCol+1; icol++)
2418 if(icol < 0 || icol > 47)
continue;
2420 for(Int_t irow = globalRow; irow <= globalRow+1; irow++)
2422 if(irow < 0 || irow > 63)
continue;
2426 if ( patchAbsIdNeighOpenTime < 0 )
continue;
2428 for(Int_t iabsId =0; iabsId < patchOpen.GetSize(); iabsId++)
2430 if(patchAbsIdNeighOpenTime == patchOpen.At(iabsId))
2460 AliVCaloTrigger *caloTrigger =
GetInputEvent()->GetCaloTrigger(
"EMCAL" );
2511 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
2512 printf(
"Task name : %s\n",
fTaskName.Data()) ;
2514 printf(
"CTS Min pT : %2.1f GeV/c\n",
fCTSPtMin) ;
2515 printf(
"EMCAL Min pT : %2.1f GeV/c\n",
fEMCALPtMin) ;
2516 printf(
"PHOS Min pT : %2.1f GeV/c\n",
fPHOSPtMin) ;
2517 printf(
"CTS Max pT : %2.1f GeV/c\n",
fCTSPtMax) ;
2518 printf(
"EMCAL Max pT : %2.1f GeV/c\n",
fEMCALPtMax) ;
2519 printf(
"PHOS Max pT : %2.1f GeV/c\n",
fPHOSPtMax) ;
2521 printf(
"Use CTS = %d\n",
fFillCTS) ;
2534 printf(
"Use Triggers selected in SE base class %d; If not what Trigger Mask? %d; MB Trigger Mask for mixed %d \n",
2558 Int_t ncellsSM3 = 0;
2559 for(Int_t icell = 0; icell <
fInputEvent->GetEMCALCells()->GetNumberOfCells(); icell++)
2561 Int_t absID =
fInputEvent->GetEMCALCells()->GetCellNumber(icell);
2563 if(
fInputEvent->GetEMCALCells()->GetAmplitude(icell) > 0.1 && sm==3) ncellsSM3++;
2566 Int_t ncellcut = 21;
2569 if(ncellsSM3 >= ncellcut)
2571 AliDebug(1,Form(
"Reject event with ncells in SM3 %d, cut %d, trig %s",
2586 if(label < 0) return ;
2588 AliAODEvent * evt =
dynamic_cast<AliAODEvent*
> (
fInputEvent) ;
2591 TClonesArray * arr =
dynamic_cast<TClonesArray*
>(evt->FindListObject(
"mcparticles")) ;
2594 if(label < arr->GetEntriesFast())
2596 AliAODMCParticle * particle =
dynamic_cast<AliAODMCParticle *
>(arr->At(label));
2597 if(!particle) return ;
2599 if(label == particle->Label())
return ;
2605 for(Int_t ind = 0; ind < arr->GetEntriesFast(); ind++ )
2607 AliAODMCParticle * particle =
dynamic_cast<AliAODMCParticle *
>(arr->At(ind));
2608 if(!particle) continue ;
2610 if(label == particle->Label())
2655 AliDebug(1,Form(
"Select trigger mask bit %d - Trigger Event %s - Select <%s>",
2773 AliDebug(1,Form(
"Event bits: \n \t MB %d, Cen %d, Sem %d, L0 %d, L1G1 %d, L1G2 %d, L1J1 %d, L1J2 %d",
2793 TFile* file = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile();
2795 const TList *clist = file->GetStreamerInfoCache();
2799 TStreamerInfo *cinfo = (TStreamerInfo*)clist->FindObject(
"AliESDCaloTrigger");
2803 cinfo = (TStreamerInfo*)clist->FindObject(
"AliAODCaloTrigger");
2809 Int_t classversionid = cinfo->GetClassVersion();
2812 if (classversionid >= verid)
2817 }
else AliInfo(
"AliCaloTrackReader()::SetEventTriggerBit() - Streamer info for trigger class not available, bit not changed");
2818 }
else AliInfo(
"AliCaloTrackReader::SetEventTriggerBit() - Streamer list not available!, bit not changed");
2847 fVertex[i] =
new Double_t[3] ;
Bool_t IsPileUpFromSPD() const
Bool_t fUseTrackDCACut
Do DCA selection.
TArrayI GetTriggerPatches(Int_t tmin, Int_t tmax)
Recover the patches that triggered, either L0 or L1.
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
virtual void FillInputVZERO()
Int_t fV0ADC[2]
Integrated V0 signal.
Bool_t fComparePtHardAndClusterPt
In MonteCarlo, jet events, reject events with too large cluster energy.
AliCalorimeterUtils * GetCaloUtils() const
Float_t fTimeStampEventFracMin
Minimum value of time stamp fraction event.
Bool_t fReadAODMCParticles
Access kine information from filtered AOD MC particles.
virtual void FillInputNonStandardJets()
Double_t fEMCALTimeCutMax
Remove clusters/cells with time larger than this value, in ns.
Int_t fBitEJE
Trigger bit on VCaloTrigger for EJE.
TLorentzVector fMomentum
! Temporal TLorentzVector container, avoid declaration of TLorentzVectors per event.
Double_t fTimeStampRunMin
Minimum value of time stamp in run.
Bool_t fDoPileUpEventRejection
Select pile-up events by SPD.
Bool_t fAcceptOnlyHIJINGLabels
Select clusters or tracks that where generated by HIJING, reject other generators in case of cocktail...
TObjArray * fPHOSClusters
Temporal array with PHOS CaloClusters.
Double_t fTrackDCACut[3]
Remove tracks with DCA larger than cut, parameters of function stored here.
Bool_t fUseEventsWithPrimaryVertex
Select events with primary vertex.
virtual AliVCaloCells * GetPHOSCells() const
Bool_t fIsBadCellEvent
Bad cell triggered event flag, any cell in cluster is bad.
Bool_t IsCorrectionOfClusterEnergyOn() const
Bool_t fEventTrigEMCALL1Gamma1
Event is L1-Gamma, threshold 1 on its name, it should correspond kEMCEGA.
virtual AliHeader * GetHeader() const
Bool_t CheckEventTriggers()
Bool_t IsEventEMCALL1Jet1() const
Bool_t IsEventEMCALL1Gamma1() const
AliEMCALRecoUtils * GetEMCALRecoUtils() const
void SetEMCALTriggerThresholds()
Bool_t ReadAODMCParticles() const
TString fEventPlaneMethod
Name of event plane method, by default "Q".
Int_t fTrackBCEventCut[19]
Fill one entry per event if there is a track in a given BC, depend on track pT, acceptance cut...
Bool_t fDoVertexBCEventSelection
Select events with vertex on BC=0 or -100.
AliMixedEvent * fMixedEvent
! Mixed event object. This class is not the owner.
virtual AliVEvent * GetInputEvent() const
Bool_t IsPileUpFromSPDAndNotEMCal() const
Check if event is from pile-up determined by SPD and not by EMCal.
Bool_t IsEventEMCALL1() const
Float_t fPtHardAndClusterPtFactor
Factor between ptHard and cluster pT to reject/accept event.
Bool_t fAcceptFastCluster
Accept events from fast cluster, exclude these events for LHC11a.
Bool_t fSmearShowerShape
Smear shower shape (use in MC).
AliVEvent * fInputEvent
! pointer to esd or aod input.
virtual void SetInputEvent(AliVEvent *input)
Double_t fTrackTimeCutMax
Remove tracks with time larger than this value, in ns.
Int_t fTriggerClusterBC
Event triggered by a cluster in BC -5 0 to 5.
TString fEMCALClustersListName
Alternative list of clusters produced elsewhere and not from InputEvent.
void RecalculateClusterTrackMatching(AliVEvent *event, TObjArray *clusterArray=0x0)
Recalculate track matching.
Bool_t fWriteOutputDeltaAOD
Write the created delta AOD objects into file.
Int_t fV0Mul[2]
Integrated V0 Multiplicity.
void RecalculateClusterDistanceToBadChannel(AliVCaloCells *cells, AliVCluster *clu)
Float_t fEMCALPtMin
pT Threshold on emcal clusters.
Bool_t fTriggerClusterTimeRecal
In case cluster already calibrated, do not try to recalibrate even if recalib on in AliEMCALRecoUtils...
Double_t ** fVertex
! Vertex array 3 dim for each mixed event buffer.
void SetGeneratorMinMaxParticles()
UInt_t fEventTriggerMask
Select this triggerered event.
virtual Int_t GetEventCentrality() const
virtual Bool_t IsHIJINGLabel(Int_t label)
virtual AliGenEventHeader * GetGenEventHeader() const
virtual AliCentrality * GetCentrality() const
AliVCaloCells * fPHOSCells
! Temporal array with PHOS AliVCaloCells.
Bool_t IsEventEMCALL1Gamma2() const
virtual AliMixedEvent * GetMixedEvent() const
Bool_t fFillInputBackgroundJetBranch
Flag to use data from background jets.
void SetTrackEventBC(Int_t bc)
virtual Bool_t ComparePtHardAndClusterPt()
TList * fAODBranchList
List with AOD branches created and needed in analysis.
void RemapMCLabelForAODs(Int_t &label)
Bool_t fEventTrigSemiCentral
Event is AliVEvent::kSemiCentral on its name, it should correspond to PbPb.
TRandom3 fRandom
! Random generator.
Bool_t AcceptDCA(Float_t pt, Float_t dca)
Bool_t IsPileUpFromNotSPDAndNotEMCal() const
Check if event not from pile-up determined neither by SPD nor by EMCal.
Bool_t fFillCTS
Use data from CTS.
virtual void InitParameters()
Initialize the parameters with default.
virtual void GetVertex(Double_t v[3]) const
Bool_t IsRecalibrationOn() const
virtual Bool_t FillInputEvent(Int_t iEntry, const char *currentFileName)
Float_t fPHOSPtMin
pT Threshold on phos clusters.
Bool_t fSelectEmbeddedClusters
Use only simulated clusters that come from embedding.
Bool_t fEventTrigMinBias
Event is min bias on its name, it should correspond to AliVEvent::kMB, AliVEvent::kAnyInt.
Float_t fEMCALParamTimeCutMin[4]
Remove clusters/cells with time smaller than parametrized value, in ns.
Int_t fEventNumber
Event number.
void RecalculateClusterPID(AliVCluster *clu)
TString fTaskName
Name of task that executes the analysis.
Bool_t fRemoveBadTriggerEvents
Remove triggered events because trigger was exotic, bad, or out of BC.
Bool_t IsPileUpFromSPDOrEMCal() const
Check if event is from pile-up determined by SPD or EMCal.
Bool_t IsPileUpFromEMCalAndNotSPD() const
Check if event is from pile-up determined by EMCal, not by SPD.
Bool_t fEventTrigEMCALL1Gamma2
Event is L1-Gamma, threshold 2 on its name, it should correspond kEMCEGA.
Bool_t fEventTrigEMCALL1Jet1
Event is L1-Gamma, threshold 1 on its name, it should correspond kEMCEGA.
Bool_t fFillEMCALCells
Use data from EMCAL.
Int_t fTriggerClusterId
Id of trigger cluster (cluster->GetID()).
Float_t fCTSPtMax
pT Threshold on charged particles.
Double_t fEMCALParamTimeCutMax[4]
Remove clusters/cells with time larger than parametrized value, in ns.
virtual void FillInputEMCALCells()
Connects the array with EMCAL cells and the pointer.
Bool_t fFillPHOSCells
Use data from PHOS.
virtual AliVCaloCells * GetEMCALCells() const
Bool_t fRemoveLEDEvents
Remove events where LED was wrongly firing - EMCAL LHC11a.
AliEMCALGeometry * GetEMCALGeometry() const
Bool_t fIsBadMaxCellEvent
Bad cell triggered event flag, only max energy cell is bad.
void RecalculateClusterShowerShapeParameters(AliVCaloCells *cells, AliVCluster *clu)
TString fFiredTriggerClassName
Name of trigger event type used to do the analysis.
virtual TClonesArray * GetAODMCParticles() const
TString GetFiredTriggerClasses() const
TObjArray * fEMCALClusters
Temporal array with EMCAL CaloClusters.
Bool_t IsEventEMCALL1Jet() const
Float_t fPHOSPtMax
pT Threshold on phos clusters.
Int_t GetMaxEnergyCell(AliVCaloCells *cells, const AliVCluster *clu, Float_t &fraction) const
For a given CaloCluster, it gets the absId of the cell with maximum energy deposit.
Bool_t fAccessTrackTOF
Access the track TOF, in case of problems when accessing GetTOFBunchCrossing.
virtual Bool_t CheckForPrimaryVertex() const
Int_t fEMCalBCEvent[19]
Fill one entry per event if there is a cluster in a given BC.
TString fInputBackgroundJetBranchName
Name of background jet branch.
virtual AliEventplane * GetEventPlane() const
Bool_t fEventTriggerAtSE
Select triggered event at SE base task or here.
Float_t fEMCALPtMax
pT Threshold on emcal clusters.
virtual Bool_t ComparePtHardAndJetPt()
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
Bool_t fEventTrigCentral
Event is AliVEvent::kCentral on its name, it should correspond to PbPb.
Float_t fTrackMultEtaCut
Track multiplicity eta cut.
Int_t fCentralityBin[2]
Minimum and maximum value of the centrality for the analysis.
virtual void FillInputPHOSCells()
Connects the array with PHOS cells and the pointer.
Base class for event, clusters and tracks filtering and preparation for the analysis.
TObjArray * fDCALClusters
Temporal array with DCAL CaloClusters, not needed in the normal case, use just EMCal array with DCal ...
Bool_t fUseTrackTimeCut
Do time cut selection.
virtual TString GetEventPlaneMethod() const
Bool_t AcceptEventWithTriggerBit()
TArrayI fAcceptEventsWithBit
Accept events if trigger bit is on.
virtual void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
void MatchTriggerCluster(TArrayI patches)
Bool_t fTimeStampEventSelect
Select events within a fraction of data taking time.
Double_t fTimeStampRunMax
Maximum value of time stamp in run.
Double_t fEMCALTimeCutMin
Remove clusters/cells with time smaller than this value, in ns.
Bool_t fEventTrigEMCALL1Jet2
Event is L1-Gamma, threshold 2 on its name, it should correspond kEMCEGA.
void SetEMCalEventBCcut(Int_t bc)
Int_t fNPileUpClustersCut
Cut to select event as pile-up.
Bool_t fCheckFidCut
Do analysis for clusters in defined region.
virtual ~AliCaloTrackReader()
Destructor.
Bool_t fEventTrigEMCALL0
Event is EMCal L0 on its name, it should correspond to AliVEvent::kEMC7, AliVEvent::kEMC1.
Int_t fTrackBCEvent[19]
Fill one entry per event if there is a track in a given BC.
virtual void FillInputEMCALAlgorithm(AliVCluster *clus, Int_t iclus)
Bool_t fComparePtHardAndJetPt
In MonteCarlo, jet events, reject fake events with wrong jet energy.
Int_t fNNonPileUpClusters
Number of clusters with time below 20 ns.
Int_t fNMixedEvent
Number of events in mixed event buffer.
Int_t fCentralityOpt
Option for the returned value of the centrality, possible options 5, 10, 100.
Float_t fZvtxCut
Cut on vertex position.
void RecalculateClusterPosition(AliVCaloCells *cells, AliVCluster *clu)
Recalculate EMCAL cluster position.
AliCaloTrackReader()
Constructor. Initialize parameters.
Bool_t fTriggerPatchClusterMatch
Search for the trigger patch and check if associated cluster was the trigger.
Bool_t fUseParamTimeCut
Use simple or parametrized time cut.
AliFiducialCut * fFiducialCut
Acceptance cuts.
Bool_t fRejectEMCalTriggerEventsWith2Tresholds
Reject events EG2 also triggered by EG1 or EJ2 also triggered by EJ1.
virtual void FillInputEMCAL()
Bool_t fFillEMCAL
Use data from EMCAL.
Bool_t fFillPHOS
Use data from PHOS.
AliVCaloCells * fEMCALCells
! Temporal array with EMCAL AliVCaloCells.
virtual AliAODMCHeader * GetAODMCHeader() const
void SetEventTriggerBit()
void CorrectClusterEnergy(AliVCluster *cl)
Correct cluster energy non linearity.
Float_t fCTSPtMin
pT Threshold on charged particles.
virtual AliStack * GetStack() const
Float_t fTriggerL0EventThreshold
L0 Threshold to look for triggered events, set outside.
Float_t fTimeStampEventFracMax
Maximum value of time stamp fraction event.
virtual void ResetLists()
Reset lists, called in AliAnaCaloTrackCorrMaker.
Int_t fNPileUpClusters
Number of clusters with time avobe 20 ns.
Int_t fTrackMult
Track multiplicity.
AliAODEvent * fOutputEvent
! pointer to aod output.
Bool_t fRecalculateClusters
Correct clusters, recalculate them if recalibration parameters is given.
Bool_t fDoRejectNoTrackEvents
Reject events with no selected tracks in event.
Bool_t IsEventEMCALL1Jet2() const
Bool_t fReadStack
Access kine information from stack.
Bool_t fIsTriggerMatchOpenCut[3]
Could not match the event to a trigger patch?, retry opening cuts.
UInt_t fMixEventTriggerMask
Select this triggerered event for mixing, tipically kMB or kAnyINT.
Bool_t fAnaLED
Analyze LED data only.
virtual void FillVertexArray()
Bool_t IsInTimeWindow(Double_t tof, Float_t energy) const
Bool_t fRemoveUnMatchedTriggers
Analyze events where trigger patch and cluster where found or not.
virtual Double_t GetEventPlaneAngle() const
TObjArray * fCTSTracks
Temporal array with tracks.
Int_t fTriggerPatchTimeWindow[2]
Trigger patch selection window.
AliMCEvent * fMC
! Monte Carlo Event Handler.
Float_t fPtHardAndJetPtFactor
Factor between ptHard and jet pT to reject/accept event.
Double_t fPileUpParamSPD[5]
TString fDeltaAODFileName
Delta AOD file name.
Int_t GetVertexBC() const
Bool_t IsPileUpFromEMCal() const
Check if event is from pile-up determined by EMCal.
Bool_t fFillInputNonStandardJetBranch
Flag to use data from non standard jets.
TClonesArray * fNonStandardJets
! Temporal array with jets.
Int_t fEMCalBCEventCut[19]
Fill one entry per event if there is a cluster in a given BC, depend on cluster E, acceptance cut.
Int_t fTriggerClusterIndex
Index in clusters array of trigger cluster.
Bool_t fTriggerL1EventThresholdFix
L1 Threshold is fix and set outside.
Float_t fSmearShowerShapeWidth
Smear shower shape landau function "width" (use in MC).
virtual void FillInputCTS()
Int_t fBitEGA
Trigger bit on VCaloTrigger for EGA.
Bool_t RejectEventWithTriggerBit()
virtual void FillInputBackgroundJets()
Bool_t fDoV0ANDEventSelection
Select events depending on V0AND.
AliAODJetEventBackground * fBackgroundJets
! Background jets.
Bool_t fCorrectELinearity
Correct cluster linearity, always on.
Int_t fVertexBC
Vertex BC.
Bool_t fIsExoticEvent
Exotic trigger event flag.
TString fInputNonStandardJetBranchName
Name of non standard jet branch.
TArrayI fRejectEventsWithBit
Reject events if trigger bit is on.
Bool_t fUseEMCALTimeCut
Do time cut selection.
Int_t fNMCProducedMax
In case of cocktail, select particles in the list with label up to this value.
Int_t fDataType
Select MC: Kinematics, Data: ESD/AOD, MCData: Both.
virtual Bool_t SelectTrack(AliVTrack *, Double_t *)
Bool_t fFillDCAL
Use data from DCAL, not needed in the normal case, use just EMCal array with DCal limits...
void SetTrackEventBCcut(Int_t bc)
Bool_t fIsTriggerMatch
Could match the event to a trigger patch?
Float_t fTriggerL1EventThreshold
L1 Threshold to look for triggered events, set in data.
TString fCentralityClass
Name of selected centrality class.
ULong_t fTrackStatus
Track selection bit, select tracks refitted in TPC, ITS ...
Bool_t IsPileUpFromSPDAndEMCal() const
Check if event is from pile-up determined by SPD and EMCal.
virtual void FillInputPHOS()
Fill the array with PHOS filtered clusters.
Int_t fNMCProducedMin
In case of cocktail, select particles in the list with label from this value.
virtual TObjArray * GetCTSTracks() const
Bool_t fRecalculateVertexBC
Recalculate vertex BC from tracks pointing to vertex.
Float_t RecalibrateClusterEnergy(AliVCluster *cluster, AliVCaloCells *cells)
Recalibrate the cluster energy, considering the recalibration map and the energy of the cells that co...
void SetEMCalEventBC(Int_t bc)
Bool_t CheckCellFiducialRegion(AliVCluster *cluster, AliVCaloCells *cells) const
Bool_t IsEventEMCALL0() const