#include "AliJFilter.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisTaskSE.h"
#include "AliESDEvent.h"
#include "AliMCEvent.h"
#include "AliStack.h"
#include "AliGenEventHeader.h"
#include "AliGenCocktailEventHeader.h"
#include "AliGenPythiaEventHeader.h"
#include "AliInputEventHandler.h"
#include "AliESDCaloCluster.h"
#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODHandler.h"
#include "AliLog.h"
#include "AliESDVertex.h"
#include "AliESDtrack.h"
#include "AliAODTrack.h"
#include "AliAnalysisFilter.h"
#include "AliESDtrackCuts.h"
#include "AliAODVertex.h"
#include "AliAODTracklets.h"
#include "AliAODPid.h"
#include "AliAODMCHeader.h"
#include "AliAODMCParticle.h"
#include "AliESDUtils.h"
#include "AliCentrality.h"
#include "AliAODTracklets.h"
#include "AliMultiplicity.h"
#include "AliJConst.h"
#include "AliESDRun.h"
#include "AliDAQ.h"
#include "AliESDVZERO.h"
#include "AliExternalTrackParam.h"
#include "AliHeader.h"
#include "AliESDCaloCluster.h"
#include "AliEMCALGeometry.h"
#include "AliVCluster.h"
#include "AliVCaloCells.h"
#include "AliEMCALRecoUtils.h"
#include "AliEMCALPIDUtils.h"
#include "AliJTrack.h"
#include "AliJMCTrack.h"
#include "AliJPhoton.h"
#include "AliJEventHeader.h"
#include "AliJRunHeader.h"
#include "AliPIDResponse.h"
#include "AliPIDCombined.h"
#include "AliPHOSGeoUtils.h"
#include "AliAnalysisUtils.h"
ClassImp(AliJFilter);
AliJFilter::AliJFilter() :
TNamed(),
fEsdTrackCuts(0x0),
fESDFilter(0x0),
fIsRealOrMC(0),
fStoreEventPlaneSource(0),
fOADBPath(),
fCaloClustersArr(0),
fClusterThreshold(0),
fTrackThreshold(0),
fEventSuccess(0),
fMcMap(0),
fTrackList(0),
fMCTrackList(0x0),
fPhotonList(0x0),
fCaloCellList(0x0),
fHeaderList(0x0),
fRunInfoList(0x0),
fPIDResponse(0x0),
fPIDCombined(0x0),
fVZEROData(0x0),
fTZEROData(0x0),
fZDCData(0x0),
fEMCLabels(0),
fEMCTreeLabels(0),
fAliJRunHeader(0x0),
fEMCALGeometry(0x0),
fEMCALRecoUtils(0x0),
fPHOSGeom(0x0),
fAnaUtils(0x0),
fMyTask(0x0)
{
}
AliJFilter::AliJFilter(const char *name,AliAnalysisTaskSE *task):
TNamed(name,name),
fEsdTrackCuts(0x0),
fESDFilter(0x0),
fIsRealOrMC(0),
fStoreEventPlaneSource(0),
fOADBPath(),
fCaloClustersArr(0),
fClusterThreshold(0),
fTrackThreshold(0),
fEventSuccess(0),
fMcMap(0),
fTrackList(0),
fMCTrackList(0x0),
fPhotonList(0x0),
fCaloCellList(0x0),
fHeaderList(0x0),
fRunInfoList(0x0),
fPIDResponse(0x0),
fPIDCombined(0x0),
fVZEROData(0x0),
fTZEROData(0x0),
fZDCData(0x0),
fEMCLabels(0),
fEMCTreeLabels(0),
fAliJRunHeader(0x0),
fEMCALGeometry(0x0),
fEMCALRecoUtils(0x0),
fPHOSGeom(0x0),
fAnaUtils(0x0),
fMyTask(0x0)
{
if(task->DebugLevel() > 5) cout << "---- AliJFilter Constructor ----"<<endl;
}
AliJFilter::AliJFilter(const AliJFilter& ap) :
TNamed(ap.GetName(), ap.GetTitle()),
fEsdTrackCuts(ap.fEsdTrackCuts),
fESDFilter(ap.fESDFilter),
fIsRealOrMC(ap.fIsRealOrMC),
fStoreEventPlaneSource(ap.fStoreEventPlaneSource),
fOADBPath(ap.fOADBPath),
fCaloClustersArr(ap.fCaloClustersArr),
fClusterThreshold(ap.fClusterThreshold),
fTrackThreshold(ap.fTrackThreshold),
fEventSuccess(ap.fEventSuccess),
fMcMap(ap.fMcMap),
fTrackList(ap.fTrackList),
fMCTrackList(ap.fMCTrackList),
fPhotonList(ap.fPhotonList),
fCaloCellList(ap.fCaloCellList),
fHeaderList(ap.fHeaderList),
fRunInfoList(ap.fRunInfoList),
fPIDResponse(ap.fPIDResponse),
fPIDCombined(ap.fPIDCombined),
fVZEROData(ap.fVZEROData),
fTZEROData(ap.fTZEROData),
fZDCData(ap.fZDCData),
fEMCLabels(ap.fEMCLabels),
fEMCTreeLabels(ap.fEMCTreeLabels),
fAliJRunHeader(ap.fAliJRunHeader),
fEMCALGeometry(ap.fEMCALGeometry),
fEMCALRecoUtils(ap.fEMCALRecoUtils),
fPHOSGeom(ap.fPHOSGeom),
fAnaUtils(ap.fAnaUtils),
fMyTask(ap.fMyTask)
{
}
AliJFilter& AliJFilter::operator = (const AliJFilter& ap)
{
this->~AliJFilter();
new(this) AliJFilter(ap);
return *this;
}
AliJFilter::~AliJFilter()
{
delete fMcMap;
delete fTrackList;
delete fMCTrackList;
delete fPhotonList;
delete fCaloCellList;
delete fHeaderList;
delete fAliJRunHeader;
delete fRunInfoList;
delete fPIDResponse;
delete fPIDCombined;
delete fEMCALRecoUtils;
delete fEMCALGeometry;
delete fPHOSGeom;
delete fAnaUtils;
delete fVZEROData;
delete fTZEROData;
delete fZDCData;
}
void AliJFilter::UserCreateOutputObjects()
{
if(fMyTask->DebugLevel() > 1) printf("AliJFilter::UserCreateOutPutData() \n");
cout<<"TEST2 "<<fAliJRunHeader<<endl;
if(!fAliJRunHeader) fAliJRunHeader = new AliJRunHeader();
fRunInfoList = new TList();
fRunInfoList->SetName("RunInfoList");
fRunInfoList->SetOwner();
fRunInfoList->Clear();
fRunInfoList->Add(fAliJRunHeader);
fCaloClustersArr = new TRefArray();
fEMCALGeometry = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");
fEMCALRecoUtils = new AliEMCALRecoUtils();
fPHOSGeom = new AliPHOSGeoUtils();
fAnaUtils = new AliAnalysisUtils();
fAnaUtils->SetUseOutOfBunchPileUp( kTRUE );
fMcMap = new TArrayI();
AddList("AliJTrackList", "AliJTrack", &fTrackList, 1000);
if( fAliJRunHeader->GetStoreEMCalInfo() ){
AddList("AliJPhotonList", "AliJPhoton", &fPhotonList, 1000);
}
if( IsMC() )
AddList("AliJMCTrackList", "AliJMCTrack", &fMCTrackList, 1000);
AddList("AliJEventHeaderList", "AliJEventHeader", &fHeaderList, 1000);
if( fAliJRunHeader->GetStoreEventPlaneSource() ){
fVZEROData = new AliESDVZERO;
fTZEROData = new AliESDTZERO;
fZDCData = new AliESDZDC;
}
cout << "Add(fAliJRunHeader) in UserCreateObject() ======= " << endl;
}
void AliJFilter::UserExec(Option_t* )
{
AliJRunHeader *runh = fAliJRunHeader;
Bool_t hasGoodTrack, hasGoodCluster;
fEventSuccess = kFALSE;
DEBUG( 5, 1, "------- AliJFilter Exec-------" );
if(!((fMyTask->Entry()-1)%100)) AliInfo(Form(" Processing event # %lld", fMyTask->Entry()));
fTrackList->Clear();
if( IsMC() ){
fMCTrackList->Clear();
fEMCLabels.clear();
fEMCTreeLabels.clear();
}
if( fAliJRunHeader->GetStoreEMCalInfo() ){
fPhotonList->Clear("C");
fCaloCellList->Clear();
}
fHeaderList->Clear();
hasGoodCluster = kTRUE;
hasGoodTrack = kTRUE;
if( !Event() ) return;
if( FromESD() ) {
DEBUG( 5, 1, "\t------- Start ESD " );
if( !ESDEvent() ) return;
if( runh->GetWithoutSDD() && !(ESDEvent()->GetTriggerMask() & (1<<13)) ) return;
if( IsMC() ){
if( ! MCEvent() ) return;
}
}
if( FromAOD() ) {
DEBUG( 5, 1, "\t------- Start AOD " );
if( !AODEvent() ) return;
}
if( fAnaUtils->IsPileUpEvent( Event() ))
return;
if(!runh->GetRunNumber()){
runh->SetRunNumber( Event()->GetRunNumber() );
if( FromESD() ){
runh->SetBeamEnergy( ESDEvent()->GetBeamEnergy() );
runh->SetBeamType( ESDEvent()->GetBeamType() );
if( ESDEvent()->GetCurrentL3() > 0 ) runh->SetL3MagnetFieldPolarity(1);
if( ESDEvent()->GetCurrentL3() < 0 ) runh->SetL3MagnetFieldPolarity(-1);
runh->SetL3MagnetFieldIntensity( ESDEvent()->GetMagneticField() );
runh->SetCurrentL3( ESDEvent()->GetCurrentL3() );
runh->SetCurrentDip( ESDEvent()->GetCurrentDip() );
runh->SetUniformBMap( ESDEvent()->IsUniformBMap() );
const AliESDRun* esdRun = ESDEvent()->GetESDRun();
for(Int_t triggerBit=0; triggerBit<kRangeTriggerTableAlice; triggerBit++){
runh->SetActiveTriggersAlice( triggerBit, esdRun->GetTriggerClass(triggerBit) );
}
}
else if( FromAOD() ){
cout << "Run # = "<< AODEvent()->GetRunNumber() << endl;
runh->SetRunNumber( AODEvent()->GetRunNumber() );
runh->SetL3MagnetFieldIntensity( AODEvent()->GetMagneticField() );
runh->SetCurrentL3( AODEvent()->GetMagneticField()*30000.0/5.00668 );
runh->SetCurrentDip( AODEvent()->GetMuonMagFieldScale()*6000.0 );
runh->SetUniformBMap( kFALSE );
}
cout << "Add(fAliJRunHeader) is done =============" << endl;
}
if( FromESD() ){
DEBUG( 5, 1, "\t------- Start READ ESD " );
ReadESDHeader( ESDEvent() );
ReadESDTracks( ESDEvent() );
if( fAliJRunHeader->GetStoreEMCalInfo() ){
ReadESDCaloClusters( ESDEvent() );
ReadESDCaloCells( ESDEvent() );
}
if( IsMC() ){
ReadMCTracksFromESD();
}
}else if( FromAOD() ){
DEBUG( 5, 1, "\t------- Start READ AOD " );
ReadAODHeader( AODEvent() );
ReadAODTracks( AODEvent() );
if( fAliJRunHeader->GetStoreEMCalInfo() ){
ReadAODCaloClusters( AODEvent() );
ReadAODCaloCells( AODEvent() );
}
if( IsMC() ){
ReadMCTracksFromAOD();
}
}else{
cout << "Error: Not correct InputDataFormat especified " << endl;
return;
}
if( hasGoodCluster || hasGoodTrack ){
AliAODHandler* outputHandler =
(AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
outputHandler->SetFillAOD(kTRUE);
outputHandler->SetFillExtension(kTRUE);
fEventSuccess = kTRUE;
}
else{
fTrackList->Clear();
if( IsMC() ){
fMCTrackList->Clear();
fEMCLabels.clear();
fEMCTreeLabels.clear();
}
if( fAliJRunHeader->GetStoreEMCalInfo() ){
fPhotonList->Clear("C");
fCaloCellList->Clear();
}
fHeaderList->Clear();
}
DEBUG( 5, 1, "\t------- End UserExec " );
}
void AliJFilter::Init()
{
AliInfo("Doing initialization") ;
}
void AliJFilter::Terminate(Option_t *)
{
fTrackList->Clear();
if( IsMC() ) fMCTrackList->Clear();
if( fAliJRunHeader->GetStoreEMCalInfo() ){
fPhotonList->Clear();
fCaloCellList->Clear();
}
fHeaderList->Clear();
cout<<"PWG4JCORRAN Analysis DONE !!"<<endl;
}
void AliJFilter::ReadESDTracks(AliESDEvent * esd)
{
Int_t nt = esd->GetNumberOfTracks();
DEBUG( 5, 1 , Form("ESD::NumberOfTracks = %d",nt), "AliJFilter::ReadESDTracks" );
Float_t ptMaxTPC = 0;
Float_t ptMinTPC = 1E10;
Float_t ptMaxGCG = 0;
Float_t ptMinGCG = 1E10;
for(int i = 0;i<32;i++){
AliESDtrackCuts* cuts = (AliESDtrackCuts*)fESDFilter->GetCuts()->At(i);
if(!cuts) continue;
Float_t tmp1= 0,tmp2 = 0;
cuts->GetPtRange(tmp1,tmp2);
if( TESTBIT ( fAliJRunHeader->GetStoreTPCTrackBitMask(), i ) ){
if(tmp1<ptMinTPC)ptMinTPC=tmp1;
if(tmp2>ptMaxTPC)ptMaxTPC=tmp2;
}
if( TESTBIT(fAliJRunHeader->GetStoreGCGTrackBitMask() , i ) ){
if(tmp1<ptMinGCG)ptMinGCG=tmp1;
if(tmp2>ptMaxGCG)ptMaxGCG=tmp2;
}
}
for(Int_t it = 0; it < nt; it++) {
AliESDtrack *track = esd->GetTrack(it);
if( !track ) continue;
UInt_t filterMap = fESDFilter->IsSelected( track );
if(! filterMap ) continue;
AliJTrack * ctrack = new( (*fTrackList)[fTrackList->GetEntriesFast()] ) AliJTrack;
ctrack->SetPxPyPzE(track->Px(), track->Py(), track->Pz(), 0 );
Double32_t pos[3];
track->GetXYZ(pos);
ctrack->SetTrackPos( pos );
ctrack->SetTPCdEdx( track->GetTPCsignal() );
ctrack->SetParticleType(kJNone);
ctrack->SetCharge(track->Charge());
ctrack->SetFilterMap( filterMap );
ctrack->SetLabel( track->GetLabel() );
ReadESDPID( track, ctrack );
if( filterMap & fAliJRunHeader->GetStoreTPCTrackBitMask() ) {
ConvertESDTPCOnlyTracks( esd, it, ctrack, ptMinTPC, ptMaxTPC );
}
if( filterMap & fAliJRunHeader->GetStoreGCGTrackBitMask() ) {
ConvertESDGCGTracks( esd, it, ctrack, ptMinGCG, ptMaxGCG );
}
Float_t b[2];
Float_t bCov[3];
track->GetImpactParameters(b,bCov);
}
}
void AliJFilter::ConvertESDTPCOnlyTracks(AliESDEvent* esd, int iTrack, AliJTrack * ctrack, double ptmin, double ptmax)
{
const AliESDVertex *vtxSPD = esd->GetPrimaryVertexSPD();
Double_t pos[3] = { 0. };
Double_t covTr[21]={0.};
Double_t p[3] = { 0. };
Double_t pDCA[3] = { 0. };
Double_t rDCA[3] = { 0. };
Float_t dDCA[2] = {0.};
Float_t cDCA[3] = {0.};
AliESDtrack* esdTrack = esd->GetTrack(iTrack);
AliESDtrack *track = AliESDtrackCuts::GetTPCOnlyTrack(const_cast<AliESDEvent*>(esd),esdTrack->GetID());
if(!track) return;
if(track->Pt()>0.)
{
AliExternalTrackParam exParam;
Bool_t relate = false;
relate = track->RelateToVertexTPC(vtxSPD,esd->GetMagneticField(),kVeryBig,&exParam);
if(!relate){
delete track;
return;
}
if(track->GetTPCInnerParam()){
track->GetTPCInnerParam()->GetPxPyPz(pDCA);
track->GetTPCInnerParam()->GetXYZ(rDCA);
}
track->GetImpactParametersTPC(dDCA,cDCA);
track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());
}
track->GetPxPyPz(p);
double p2[3];
esdTrack->GetInnerPxPyPz(p2);
Float_t pT = track->Pt();
if(pT<ptmin||pT>ptmax){
delete track;
return;
}
track->GetXYZ(pos);
track->GetCovarianceXYZPxPyPz(covTr);
ctrack->SetTPCTrack(p[0], p[1], p[2]);
delete track;
}
void AliJFilter::ConvertESDGCGTracks(AliESDEvent *esd, int iTrack, AliJTrack *ctrack, double ptMin, double ptMax)
{
Double_t pos[3] = { 0. };
Double_t covTr[21]={0.};
Double_t p[3] = { 0. };
Double_t pDCA[3] = { 0. };
Double_t rDCA[3] = { 0. };
Float_t dDCA[2] = {0.};
Float_t cDCA[3] = {0.};
AliESDtrack* esdTrack = esd->GetTrack(iTrack);
const AliExternalTrackParam * exParamGC = esdTrack->GetConstrainedParam();
if(!exParamGC) return;
esdTrack->GetPxPyPz(pDCA);
esdTrack->GetXYZ(rDCA);
esdTrack->GetImpactParameters(dDCA,cDCA);
if (!esdTrack->GetConstrainedPxPyPz(p)) return;
Float_t pT = exParamGC->Pt();
if(pT<ptMin||pT>ptMax){
return;
}
esdTrack->GetConstrainedXYZ(pos);
exParamGC->GetCovarianceXYZPxPyPz(covTr);
ctrack->SetGCGTrack(p[0], p[1], p[2]);
}
void AliJFilter::ReadESDPID(AliESDtrack *track, AliJTrack *ctrack)
{
Double_t times[AliPID::kSPECIES];
track->GetIntegratedTimes(times);
for(int ip=0; ip < (AliJTrack::kNAliJTrkPID); ip++) {
ctrack->SetExpectedTOFsignal(AliJTrack::AliJTrkPID(ip), times[ip]);
}
Double_t momTPC = track->GetTPCmomentum();
ctrack->SetTPCmomentum(momTPC);
}
Bool_t AliJFilter::ReadAODTracks(const AliAODEvent * aod)
{
Bool_t hasGoodTrack;
hasGoodTrack = kFALSE;
Int_t nt = aod->GetNumberOfTracks();
Int_t listnt = 0;
DEBUG(5, 1, Form("AOD::NumberOfTracks = %d",nt) );
for(Int_t it = 0; it < nt; it++) {
AliAODTrack *track = dynamic_cast<AliAODTrack*>(aod->GetTrack(it));
if(!track) AliFatal("Not a standard AOD track");
AliJTrack * ctrack = new( (*fTrackList)[listnt++] ) AliJTrack;
ctrack->SetID( track->GetID() );
ctrack->SetPxPyPzE(track->Px(), track->Py(), track->Pz(), 0 );
Double32_t pos[3];
track->GetXYZ(pos);
ctrack->SetTrackPos( pos );
ctrack->SetParticleType(kJNone);
ctrack->SetCharge(track->Charge());
ctrack->SetStatus(track->GetStatus());
ctrack->SetFlags( track->GetFlags() );
ctrack->SetLabel( track->GetLabel() );
ctrack->SetFilterMap( track->GetFilterMap() );
double const * pid = track->PID();
ctrack->SetPID(AliJTrack::kElectronAliJ,pid[AliAODTrack::kElectron],AliJTrack::kTOF);
ctrack->SetPID(AliJTrack::kMuonAliJ, pid[AliAODTrack::kMuon], AliJTrack::kTOF);
ctrack->SetPID(AliJTrack::kPionAliJ, pid[AliAODTrack::kPion], AliJTrack::kTOF);
ctrack->SetPID(AliJTrack::kKaonAliJ, pid[AliAODTrack::kKaon], AliJTrack::kTOF);
ctrack->SetPID(AliJTrack::kProtonAliJ, pid[AliAODTrack::kProton], AliJTrack::kTOF);
ctrack->SetTPCnClust(track->GetTPCNcls());
ctrack->SetTPCdEdx( track->GetTPCsignal() );
ctrack->SetTOFsignal( track->GetTOFsignal() );
ctrack->SetLabel( track->GetLabel() );
for( int i=0;i<int(sizeof(UInt_t)*8);i++ ){
ctrack->SetBit( i, track->TestBit( i ));
}
if( track->Pt() > fTrackThreshold )
hasGoodTrack = kTRUE;
}
return hasGoodTrack;
}
AliJEventHeader* AliJFilter::ReadCommonHeader(AliVEvent *event){
AliJEventHeader *hdr = new( (*fHeaderList)[fHeaderList->GetEntriesFast()] ) AliJEventHeader;
AliCentrality *cent = event->GetCentrality();
if( cent ){
hdr->SetCentrality( cent->GetCentralityPercentile("V0M"));
hdr->SetCentralityArray(AliJEventHeader::kcV0M, cent->GetCentralityPercentile("V0M"));
hdr->SetCentralityArray(AliJEventHeader::kcFMD, cent->GetCentralityPercentile("FMD"));
hdr->SetCentralityArray(AliJEventHeader::kcTRK, cent->GetCentralityPercentile("TRK"));
hdr->SetCentralityArray(AliJEventHeader::kcTKL, cent->GetCentralityPercentile("TKL"));
hdr->SetCentralityArray(AliJEventHeader::kcCL0, cent->GetCentralityPercentile("CL0"));
hdr->SetCentralityArray(AliJEventHeader::kcCL1, cent->GetCentralityPercentile("CL1"));
hdr->SetCentralityArray(AliJEventHeader::kcV0MvsFMD, cent->GetCentralityPercentile("V0MvsFMD"));
hdr->SetCentralityArray(AliJEventHeader::kcTKLvsV0, cent->GetCentralityPercentile("TKLvsV0"));
hdr->SetCentralityArray(AliJEventHeader::kcZEMvsZDC, cent->GetCentralityPercentile("ZEMvsZDC"));
hdr->SetCentralityArray(AliJEventHeader::kcV0A, cent->GetCentralityPercentile("V0A"));
hdr->SetCentralityArray(AliJEventHeader::kcV0C, cent->GetCentralityPercentile("V0C"));
}
hdr->SetTriggerMaskAlice(event->GetTriggerMask());
hdr->SetTriggerMaskJCorran(ConvertTriggerMask());
hdr->SetEventType(event->GetEventType());
hdr->SetBunchCrossNumber(event->GetBunchCrossNumber());
int ncontributors = 0;
const AliVVertex * vtxESD = event->GetPrimaryVertex();
if(vtxESD){
hdr->SetXVertex(vtxESD->GetX());
hdr->SetYVertex(vtxESD->GetY());
hdr->SetZVertex(vtxESD->GetZ());
double covMat[6];
vtxESD->GetCovarianceMatrix(covMat);
hdr->SetZVertexErr(TMath::Sqrt(covMat[5]));
ncontributors = vtxESD->GetNContributors();
hdr->SetVtxMult( vtxESD->GetNContributors() );
}else{
hdr->SetZVertex(9999);
hdr->SetZVertexErr(9999);
}
hdr->SetVtxMult(ncontributors);
return hdr;
}
void AliJFilter::ReadESDHeader(AliESDEvent *esd)
{
if(!esd) return;
if( fAliJRunHeader->GetRefitESDVertexTracks() )
AliESDUtils::RefitESDVertexTracks( esd );
AliJEventHeader *hdr = ReadCommonHeader( esd );
AliESDVZERO *v0 = esd->GetVZEROData();
if( v0 ) hdr->SetV0Mult(v0->GetMTotV0A() + v0->GetMTotV0C());
if( v0 ) hdr->SetV0AMult(v0->GetMTotV0A());
if( v0 ) hdr->SetV0CMult(v0->GetMTotV0C());
const AliESDRun* esdRun = esd->GetESDRun();
if(esdRun->GetDetectorsInReco() & AliDAQ::kSPD) hdr->SetSPDTrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTracklets, 1.0 ));
if((esdRun->GetDetectorsInReco() & AliDAQ::kSSD) || (esdRun->GetDetectorsInReco() & AliDAQ::kSDD)) hdr->SetITSSATrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTrackletsITSSA, 1.0 ));
if(esdRun->GetDetectorsInReco() & AliDAQ::kTPC) hdr->SetITSTPCTrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTrackletsITSTPC, 1.0 ));
if( fAliJRunHeader->GetStoreEventPlaneSource() ){
*fVZEROData = *esd->GetVZEROData();
*fTZEROData = AliESDTZERO(*esd->GetESDTZERO());
*fZDCData = *esd->GetESDZDC();
}
hdr->SetEventID( esd->GetEventNumberInFile());
if( IsMC() ){
const AliVVertex * primaryMCVertex = MCEvent()->GetPrimaryVertex();
if( primaryMCVertex ){
hdr->SetXVertexMC( primaryMCVertex->GetX() );
hdr->SetYVertexMC( primaryMCVertex->GetY() );
hdr->SetZVertexMC( primaryMCVertex->GetZ() );
}
AliESDHeader * esdHeader = esd->GetHeader();
hdr->SetL0TriggerInputs( esdHeader->GetL0TriggerInputs() );
}
}
void AliJFilter::ReadAODHeader(AliAODEvent *aod)
{
AliJEventHeader *hdr = ReadCommonHeader( aod );
const AliAODTracklets *trackletsSPD = aod->GetTracklets();
if(trackletsSPD){
hdr->SetSPDTrackletMult(trackletsSPD->GetNumberOfTracklets());
}
hdr->SetFiredTriggers( aod->GetFiredTriggerClasses() );
if( IsMC() ){
AliAODMCHeader *aodMCheader = (AliAODMCHeader *) aod->FindListObject(AliAODMCHeader::StdBranchName());
hdr->SetXVertexMC( aodMCheader->GetVtxX() );
hdr->SetYVertexMC( aodMCheader->GetVtxY() );
hdr->SetZVertexMC( aodMCheader->GetVtxZ() );
}
AliAODHeader * ah = dynamic_cast<AliAODHeader*>(aod->GetHeader());
if(!ah) AliFatal("Not a standard AOD");
hdr->SetESDFileName( ah->GetESDFileName() );
hdr->SetEventNumberESDFile( ah->GetEventNumberESDFile() );
}
Int_t AliJFilter::GetSuperModuleNumber(bool isemcal, AliVCluster *cluster, AliVCaloCells *cells, Int_t absId)
{
if(isemcal){
Int_t absIdMax = -1, iSM =-1, ieta = -1, iphi = -1;
Bool_t shared = kFALSE;
fEMCALRecoUtils->GetMaxEnergyCell(fEMCALGeometry, cells, cluster, absIdMax, iSM, ieta, iphi, shared);
if(iSM < 0 || iphi < 0 || ieta < 0 )
{
AliFatal(Form("Negative value for super module: %d, or cell ieta: %d, or cell iphi: %d, check EMCAL geometry name\n",
iSM,ieta,iphi));
}
return iSM ;
} else {
Int_t relId[4];
if ( absId >= 0) {
fPHOSGeom->AbsToRelNumbering(absId,relId);
fPHOSGeom->AbsToRelNumbering(absId,relId);
return relId[0]-1;
} else return -1;
}
return -1;
}
Double_t * AliJFilter::GetCellsAmplitude( bool isemcal, AliVCluster *cluster, AliVCaloCells *emCells, AliVCaloCells *phoCells )
{
Int_t iCell, nCell;
UShort_t *cellAddrs;
Double_t *amps;
nCell = cluster->GetNCells();
amps = new Double_t[nCell];
cellAddrs = cluster->GetCellsAbsId();
for( iCell = 0; iCell < nCell; iCell++ ){
if( isemcal )
amps[iCell] = emCells->GetCellAmplitude( cellAddrs[iCell] );
else
amps[iCell] = phoCells->GetCellAmplitude( cellAddrs[iCell] );
}
return amps;
}
UInt_t AliJFilter::ConvertTriggerMask(){
UInt_t triggerMaskJC=0;
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kMB){
triggerMaskJC |= (1<<kMinBiasTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kMinBiasTriggerBitJCorran, "MinBiasTriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kHighMult){
triggerMaskJC |= (1<<kHighMultTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kHighMultTriggerBitJCorran,"HighMultTriggerBitJCorran");
}
if((((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kEMC1) ||
(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kEMC7 )){
triggerMaskJC |= (1<<kEmc0TriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kEmc0TriggerBitJCorran,"Emc0TriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kEMCEGA){
triggerMaskJC |= (1<<kEmc1GammaTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kEmc1GammaTriggerBitJCorran,"Emc1GammaTriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kEMCEJE){
triggerMaskJC |= (1<<kEmc1JetTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kEmc1JetTriggerBitJCorran,"Emc1JetTriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kCentral){
triggerMaskJC |= (1<<kCentralTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kCentralTriggerBitJCorran,"CentralTriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kSemiCentral){
triggerMaskJC |= (1<<kSemiCentralTriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kSemiCentralTriggerBitJCorran,"SemiCentralTriggerBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kFastOnly){
triggerMaskJC |= (1<<kFastOnlyBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kFastOnlyBitJCorran ,"FastOnlyBitJCorran");
}
if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
->IsEventSelected() & AliVEvent::kINT7){
triggerMaskJC |= (1<<kINT7TriggerBitJCorran);
fAliJRunHeader->SetActiveTriggersJCorran( kINT7TriggerBitJCorran, "INT7TriggerBitJCorran");
}
return triggerMaskJC;
}
void AliJFilter::ReadMCTracksFromESD(){
if(!MCEvent()) return;
AliStack *stack = MCEvent()->Stack();
if(!stack) return;
Int_t np = MCEvent()->GetNumberOfTracks();
Long64_t ntrack = 0;
for(Long64_t iTrack = 0; iTrack < np; iTrack++){
AliMCParticle *track = (AliMCParticle*) MCEvent()->GetTrack(iTrack);
if(!track){
Printf("ERROR: Could not receive track %d",(int) iTrack);
continue;
}
Bool_t isPrimary = stack->IsPhysicalPrimary(iTrack);
if(isPrimary){
AliJMCTrack *ctrack = new( (*fMCTrackList)[ntrack++] ) AliJMCTrack;
TParticle *partStack = stack->Particle(iTrack);
Int_t pdg = partStack->GetPdgCode();
Char_t ch = (Char_t) partStack->GetPDG()->Charge();
Int_t label = track->GetLabel();
ctrack->SetLabel(label);
ctrack->SetPdgCode(pdg);
ctrack->SetPxPyPzE( partStack->Px(), partStack->Py(), partStack->Pz(), partStack->Energy());
ctrack->SetCharge(ch);
ctrack->SetFlag(AliJMCTrack::kPrimary, isPrimary);
ctrack->SetProductionVertex(partStack->Vx(),partStack->Vy(),partStack->Vz());
}
}
}
void AliJFilter::ReadMCTracksFromAOD(){
if(!AODEvent()) return; TClonesArray *mcArray = (TClonesArray*) AODEvent()->
FindListObject(AliAODMCParticle::StdBranchName());
if(!mcArray){
Printf("No MC particle branch found");
return;
}
Long64_t ntrack = 0;
Long64_t np = mcArray->GetEntriesFast();
for(Long64_t it = 0; it < np; it++) {
AliAODMCParticle *track = (AliAODMCParticle*) mcArray->At(it);
if(!track){
Error("ReadEventAODMC", "Could not receive particle %d",(int) it);
continue;
}
bool isPrimary = track->IsPhysicalPrimary();
if(isPrimary){
AliJMCTrack *ctrack = new ((*fMCTrackList)[ntrack++]) AliJMCTrack;;
Int_t pdg = track->GetPdgCode();
Char_t ch = (Char_t) track->Charge();
Int_t label = track->GetLabel();
ctrack->SetLabel(label);
ctrack->SetPdgCode(pdg);
ctrack->SetPxPyPzE( track->Px(), track->Py(), track->Pz(), track->E());
ctrack->SetCharge(ch);
ctrack->SetFlag(AliJMCTrack::kPrimary, isPrimary);
ctrack->SetProductionVertex(track->Xv(),track->Yv(),track->Zv());
}
}
}
void AliJFilter::RemapMCLabels(){
Int_t i, j, label, mother0, mother1;
AliJTrack *track;
AliJPhoton *cluster;
AliJMCTrack *mctrack;
for( i = 0; i < fTrackList->GetEntries(); i++ ){
track = (AliJTrack*)fTrackList->At( i );
track->SetLabel( fMcMap->At( track->GetLabel() ));
}
if( fAliJRunHeader->GetStoreEMCalInfo() ){
for( i = 0; i < fPhotonList->GetEntries(); i++ ){
cluster = (AliJPhoton*)fPhotonList->At( i );
for( j = 0; j < cluster->GetNEMCLabel(); j++ ){
label = cluster->GetEMCLabel( j );
if( label >= 0 )
cluster->SetEMCLabel( j, fMcMap->At( label ));
}
}
}
for( i = 0; i < fMCTrackList->GetEntries(); i++ ){
mctrack = (AliJMCTrack*)fMCTrackList->At( i );
mother0 = mctrack->GetMother( 0 );
mother1 = mctrack->GetMother( 1 );
if( mother0 >= 0 )
mother0 = fMcMap->At( mother0 );
if( mother1 >= 0 )
mother1 = fMcMap->At( mother1 );
mctrack->SetMother( mother0, mother1 );
}
}
void AliJFilter::PrintOut() const {
}
void AliJFilter::AddList(const char* aname, const char* cname, TClonesArray **obj, int nlist){
*obj = new TClonesArray(cname, nlist);
(*obj)->SetName(aname);
(*obj)->SetOwner();
}