/**************************************************************************
-* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
-* *
-* Author: The ALICE Off-line Project. *
-* Contributors are mentioned in the code where appropriate. *
-* *
-* Permission to use, copy, modify and distribute this software and its *
-* documentation strictly for non-commercial purposes is hereby granted *
-* without fee, provided that the above copyright notice appears in all *
-* copies and that both the copyright notice and this permission notice *
-* appear in the supporting documentation. The authors make no claims *
-* about the suitability of this software for any purpose. It is *
-* provided "as is" without express or implied warranty. *
-**************************************************************************/
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
#include "iostream"
#include "TSystem.h"
ClassImp(AliAnalysisTaskFilteredTree)
-//_____________________________________________________________________________
-AliAnalysisTaskFilteredTree::AliAnalysisTaskFilteredTree(const char *name)
+ //_____________________________________________________________________________
+ AliAnalysisTaskFilteredTree::AliAnalysisTaskFilteredTree(const char *name)
: AliAnalysisTaskSE(name)
, fESD(0)
, fMC(0)
, fPtResEtaPtTPCITS(0)
, fPtResCentPtTPC(0)
, fPtResCentPtTPCc(0)
- , fPtResCentPtTPCITS(0)
+ , fPtResCentPtTPCITS(0)
{
// Constructor
Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());
}
-return kTRUE;
+ return kTRUE;
}
//_____________________________________________________________________________
//get the output file to make sure the trees will be associated to it
OpenFile(1);
fTreeSRedirector = new TTreeSRedirector();
-
+
//
// Create trees
fV0Tree = ((*fTreeSRedirector)<<"V0s").GetTree();
Double_t maxPhi = 6.5;
Int_t nbinsPhi = 100;
Double_t binsPhi[101];
- for (Int_t i=0;i<=nbinsPhi;i++) {
+ for (Int_t i=0;i<=nbinsPhi;i++) {
binsPhi[i] = minPhi + i*(maxPhi-minPhi)/nbinsPhi;
}
for (Int_t i=0;i<=nbinsCent;i++) {
binsCent[i] = minCent + i*(maxCent-minCent)/nbinsCent;
}
-
+
fPtResPhiPtTPC = new TH3D("fPtResPhiPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
fPtResPhiPtTPCc = new TH3D("fPtResPhiPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
fPtResPhiPtTPCITS = new TH3D("fPtResPhiPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);
-
-fPtResEtaPtTPC = new TH3D("fPtResEtaPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
+
+ fPtResEtaPtTPC = new TH3D("fPtResEtaPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
fPtResEtaPtTPCc = new TH3D("fPtResEtaPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
fPtResEtaPtTPCITS = new TH3D("fPtResEtaPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);
-
-fPtResCentPtTPC = new TH3D("fPtResCentPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
+
+ fPtResCentPtTPC = new TH3D("fPtResCentPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
fPtResCentPtTPCc = new TH3D("fPtResCentPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
fPtResCentPtTPCITS = new TH3D("fPtResCentPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);
-
+
fOutput = new TList;
if(!fOutput) return;
fOutput->SetOwner();
// return;
// }
//}
-
+
//if MC info available - use it.
fMC = MCEvent();
if(fUseESDfriends) {
- fESDfriend = static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
- if(!fESDfriend) {
- Printf("ERROR: ESD friends not available");
+ //fESDfriend = dynamic_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
+ fESDfriend = ESDfriend();
+
+ if(!fESDfriend) {
+ Printf("ERROR: ESD friends not available");
}
}
ProcessLaser(fESD,fMC,fESDfriend);
ProcessdEdx(fESD,fMC,fESDfriend);
- if (fProcessCosmics) { ProcessCosmics(fESD); }
+ if (fProcessCosmics) { ProcessCosmics(fESD,fESDfriend); }
if(fMC) { ProcessMCEff(fESD,fMC,fESDfriend);}
}
//_____________________________________________________________________________
-void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event)
+void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event, AliESDfriend* esdFriend)
{
//
// Select real events with high-pT tracks
Printf("ERROR: Could not receive input handler");
return;
}
-
+
// get file name
TTree *chain = (TChain*)GetInputData(0);
if(!chain) {
TObjString fileName(chain->GetCurrentFile()->GetName());
- // check for cosmic pairs
- //
- // find cosmic pairs trigger by random trigger
- //
+ // check for cosmic pairs
+ //
+ // find cosmic pairs trigger by random trigger
+ //
+ //
+ AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD();
+ AliESDVertex *vertexTPC = (AliESDVertex *)event->GetPrimaryVertexTPC();
+ const Double_t kMinPt=0.8;
+ const Double_t kMinPtMax=0.8;
+ const Double_t kMinNcl=50;
+ const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1};
+ Int_t ntracks=event->GetNumberOfTracks();
+ // Float_t dcaTPC[2]={0,0};
+ // Float_t covTPC[3]={0,0,0};
+
+ UInt_t specie = event->GetEventSpecie(); // skip laser events
+ if (specie==AliRecoParam::kCalib) return;
+
+
+
+ for (Int_t itrack0=0;itrack0<ntracks;itrack0++) {
+ AliESDtrack *track0 = event->GetTrack(itrack0);
+ if (!track0) continue;
+ if (!track0->IsOn(AliESDtrack::kTPCrefit)) continue;
+
+ if (TMath::Abs(AliTracker::GetBz())>1 && track0->Pt() < kMinPt) continue;
+ if (track0->Pt() < kMinPt) continue;
+ if (track0->GetTPCncls() < kMinNcl) continue;
+ if (TMath::Abs(track0->GetY())<kMaxDelta[0]) continue;
+ if (track0->GetKinkIndex(0)>0) continue;
+ const Double_t * par0=track0->GetParameter(); //track param at rhe DCA
+ //rm primaries
//
- AliESDVertex *vertexSPD = (AliESDVertex *)event->GetPrimaryVertexSPD();
- AliESDVertex *vertexTPC = (AliESDVertex *)event->GetPrimaryVertexTPC();
- const Double_t kMinPt=0.8;
- const Double_t kMinPtMax=0.8;
- const Double_t kMinNcl=50;
- const Double_t kMaxDelta[5]={2,600,0.02,0.02,0.1};
- Int_t ntracks=event->GetNumberOfTracks();
- // Float_t dcaTPC[2]={0,0};
- // Float_t covTPC[3]={0,0,0};
-
- UInt_t specie = event->GetEventSpecie(); // skip laser events
- if (specie==AliRecoParam::kCalib) return;
-
-
-
- for (Int_t itrack0=0;itrack0<ntracks;itrack0++) {
- AliESDtrack *track0 = event->GetTrack(itrack0);
- if (!track0) continue;
- if (!track0->IsOn(AliESDtrack::kTPCrefit)) continue;
-
- if (TMath::Abs(AliTracker::GetBz())>1 && track0->Pt() < kMinPt) continue;
- if (track0->Pt() < kMinPt) continue;
- if (track0->GetTPCncls() < kMinNcl) continue;
- if (TMath::Abs(track0->GetY())<kMaxDelta[0]) continue;
- if (track0->GetKinkIndex(0)>0) continue;
- const Double_t * par0=track0->GetParameter(); //track param at rhe DCA
- //rm primaries
- //
- //track0->GetImpactParametersTPC(dcaTPC,covTPC);
- //if (TMath::Abs(dcaTPC[0])<kMaxDelta[0]) continue;
+ //track0->GetImpactParametersTPC(dcaTPC,covTPC);
+ //if (TMath::Abs(dcaTPC[0])<kMaxDelta[0]) continue;
+ //if (TMath::Abs(dcaTPC[1])<kMaxDelta[0]*2) continue;
+ // const AliExternalTrackParam * trackIn0 = track0->GetInnerParam();
+ Bool_t newFriendTrack0=kFALSE;
+ AliESDfriendTrack* friendTrack0=NULL;
+ if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack0 = esdFriend->GetTrack(itrack0);} //this guy can be NULL
+ if (!friendTrack0) {friendTrack0=new AliESDfriendTrack(); newFriendTrack0=kTRUE;}
+
+ for (Int_t itrack1=itrack0+1;itrack1<ntracks;itrack1++) {
+ AliESDtrack *track1 = event->GetTrack(itrack1);
+ if (!track1) continue;
+ if (!track1->IsOn(AliESDtrack::kTPCrefit)) continue;
+ if (track1->GetKinkIndex(0)>0) continue;
+ if ((TMath::Abs(AliTracker::GetBz())>1) && (track1->Pt() < kMinPt)) continue;
+ if (track1->Pt() < kMinPt) continue;
+ if (track1->GetTPCncls()<kMinNcl) continue;
+ if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Max(track1->Pt(), track0->Pt())<kMinPtMax) continue;
+ if (TMath::Abs(track1->GetY())<kMaxDelta[0]) continue;
+ //track1->GetImpactParametersTPC(dcaTPC,covTPC);
+ // if (TMath::Abs(dcaTPC[0])<kMaxDelta[0]) continue;
//if (TMath::Abs(dcaTPC[1])<kMaxDelta[0]*2) continue;
- // const AliExternalTrackParam * trackIn0 = track0->GetInnerParam();
- for (Int_t itrack1=itrack0+1;itrack1<ntracks;itrack1++) {
- AliESDtrack *track1 = event->GetTrack(itrack1);
- if (!track1) continue;
- if (!track1->IsOn(AliESDtrack::kTPCrefit)) continue;
- if (track1->GetKinkIndex(0)>0) continue;
- if ((TMath::Abs(AliTracker::GetBz())>1) && (track1->Pt() < kMinPt)) continue;
- if (track1->Pt() < kMinPt) continue;
- if (track1->GetTPCncls()<kMinNcl) continue;
- if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Max(track1->Pt(), track0->Pt())<kMinPtMax) continue;
- if (TMath::Abs(track1->GetY())<kMaxDelta[0]) continue;
- //track1->GetImpactParametersTPC(dcaTPC,covTPC);
- // if (TMath::Abs(dcaTPC[0])<kMaxDelta[0]) continue;
- //if (TMath::Abs(dcaTPC[1])<kMaxDelta[0]*2) continue;
- //
- const Double_t* par1=track1->GetParameter(); //track param at rhe DCA
- //
- Bool_t isPair=kTRUE;
- for (Int_t ipar=0; ipar<5; ipar++){
- if (ipar==4&&TMath::Abs(AliTracker::GetBz())<1) continue; // 1/pt not defined for B field off
- if (TMath::Abs(TMath::Abs(par0[ipar])-TMath::Abs(par1[ipar]))>kMaxDelta[ipar]) isPair=kFALSE;
- }
- if (!isPair) continue;
- if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE;
- //delta with correct sign
- /*
- TCut cut0="abs(t1.fP[0]+t0.fP[0])<2"
- TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02"
- TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2"
- */
- if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE; //delta y opposite sign
- if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE; //delta tgl opposite sign
- if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE; //delta 1/pt opposite sign
- if (!isPair) continue;
- TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
- Int_t eventNumber = event->GetEventNumberInFile();
- //Bool_t hasFriend = kFALSE;
- //Bool_t hasITS=(track0->GetNcls(0)+track1->GetNcls(0)>4);
- //printf("DUMPHPTCosmic:%s|%f|%d|%d|%d\n",filename.Data(),(TMath::Min(track0->Pt(),track1->Pt())), eventNumber,hasFriend,hasITS);
- // const AliExternalTrackParam * trackIn1 = track1->GetInnerParam();
- //
- //
- Int_t ntracksSPD = vertexSPD->GetNContributors();
- Int_t ntracksTPC = vertexTPC->GetNContributors();
- Int_t runNumber = event->GetRunNumber();
- Int_t timeStamp = event->GetTimeStamp();
- ULong64_t triggerMask = event->GetTriggerMask();
- Float_t magField = event->GetMagneticField();
- TObjString triggerClass = event->GetFiredTriggerClasses().Data();
-
- //
+ //
+ const Double_t* par1=track1->GetParameter(); //track param at rhe DCA
+ //
+ Bool_t isPair=kTRUE;
+ for (Int_t ipar=0; ipar<5; ipar++){
+ if (ipar==4&&TMath::Abs(AliTracker::GetBz())<1) continue; // 1/pt not defined for B field off
+ if (TMath::Abs(TMath::Abs(par0[ipar])-TMath::Abs(par1[ipar]))>kMaxDelta[ipar]) isPair=kFALSE;
+ }
+ if (!isPair) continue;
+ if (TMath::Abs(TMath::Abs(track0->GetAlpha()-track1->GetAlpha())-TMath::Pi())>kMaxDelta[2]) isPair=kFALSE;
+ //delta with correct sign
+ /*
+ TCut cut0="abs(t1.fP[0]+t0.fP[0])<2"
+ TCut cut3="abs(t1.fP[3]+t0.fP[3])<0.02"
+ TCut cut4="abs(t1.fP[4]+t0.fP[4])<0.2"
+ */
+ if (TMath::Abs(par0[0]+par1[0])>kMaxDelta[0]) isPair=kFALSE; //delta y opposite sign
+ if (TMath::Abs(par0[3]+par1[3])>kMaxDelta[3]) isPair=kFALSE; //delta tgl opposite sign
+ if (TMath::Abs(AliTracker::GetBz())>1 && TMath::Abs(par0[4]+par1[4])>kMaxDelta[4]) isPair=kFALSE; //delta 1/pt opposite sign
+ if (!isPair) continue;
+ TString filename(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
+ Int_t eventNumber = event->GetEventNumberInFile();
+ //Bool_t hasFriend = kFALSE;
+ //Bool_t hasITS=(track0->GetNcls(0)+track1->GetNcls(0)>4);
+ //printf("DUMPHPTCosmic:%s|%f|%d|%d|%d\n",filename.Data(),(TMath::Min(track0->Pt(),track1->Pt())), eventNumber,hasFriend,hasITS);
+ // const AliExternalTrackParam * trackIn1 = track1->GetInnerParam();
+ //
+ //
+ Int_t ntracksSPD = vertexSPD->GetNContributors();
+ Int_t ntracksTPC = vertexTPC->GetNContributors();
+ Int_t runNumber = event->GetRunNumber();
+ Int_t timeStamp = event->GetTimeStamp();
+ ULong64_t triggerMask = event->GetTriggerMask();
+ Float_t magField = event->GetMagneticField();
+ TObjString triggerClass = event->GetFiredTriggerClasses().Data();
+
+ //
// Dump to the tree
// vertex
// TPC-ITS tracks
//
//fCosmicPairsTree->Fill();
+ Bool_t newFriendTrack1=kFALSE;
+ AliESDfriendTrack* friendTrack1=NULL;
+ if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack1 = esdFriend->GetTrack(itrack1);} //this guy can be NULL
+ if (!friendTrack1) {friendTrack1=new AliESDfriendTrack(); newFriendTrack1=kTRUE;}
+
if(!fFillTree) return;
if(!fTreeSRedirector) return;
- (*fTreeSRedirector)<<"CosmicPairs"<<
- "fileName.="<<&fileName<< // file name
- "runNumber="<<runNumber<< // run number
- "evtTimeStamp="<<timeStamp<< // time stamp of event
- "evtNumberInFile="<<eventNumber<< // event number
- "trigger="<<triggerMask<< // trigger
- "triggerClass="<<&triggerClass<< // trigger
- "Bz="<<magField<< // magnetic field
- //
- "multSPD="<<ntracksSPD<<
- "multTPC="<<ntracksTPC<<
- "vertSPD.="<<vertexSPD<< //primary vertex -SPD
- "vertTPC.="<<vertexTPC<< //primary vertex -TPC
- "t0.="<<track0<< //track0
- "t1.="<<track1<< //track1
- "\n";
- }
- }
+ (*fTreeSRedirector)<<"CosmicPairs"<<
+ "fileName.="<<&fileName<< // file name
+ "runNumber="<<runNumber<< // run number
+ "evtTimeStamp="<<timeStamp<< // time stamp of event
+ "evtNumberInFile="<<eventNumber<< // event number
+ "trigger="<<triggerMask<< // trigger
+ "triggerClass="<<&triggerClass<< // trigger
+ "Bz="<<magField<< // magnetic field
+ //
+ "multSPD="<<ntracksSPD<<
+ "multTPC="<<ntracksTPC<<
+ "vertSPD.="<<vertexSPD<< //primary vertex -SPD
+ "vertTPC.="<<vertexTPC<< //primary vertex -TPC
+ "t0.="<<track0<< //track0
+ "t1.="<<track1<< //track1
+ "friendTrack0.="<<friendTrack0<<
+ "friendTrack1.="<<friendTrack1<<
+ "\n";
+ if (newFriendTrack1) {delete friendTrack1; friendTrack1=NULL;}
+ }
+ if (newFriendTrack0) {delete friendTrack0; friendTrack0=NULL;}
+ }
}
Printf("ERROR: Could not receive input handler");
return;
}
-
+
// get file name
TTree *chain = (TChain*)GetInputData(0);
if(!chain) {
//const AliESDVertex* vtxESD = 0;
AliESDVertex* vtxESD = 0;
if(GetAnalysisMode() == kTPCAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
}
else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
}
else {
- return;
+ return;
}
AliESDVertex* vtxTPC = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
if(track->Charge()==0) continue;
if(!esdTrackCuts->AcceptTrack(track)) continue;
if(!accCuts->AcceptTrack(track)) continue;
-
+
// downscale low-pT tracks
Double_t scalempt= TMath::Min(track->Pt(),10.);
Double_t downscaleF = gRandom->Rndm();
"runNumber="<<runNumber<<
"evtTimeStamp="<<evtTimeStamp<<
"evtNumberInFile="<<evtNumberInFile<<
- "triggerClass="<<&triggerClass<< // trigger
+ "triggerClass="<<&triggerClass<< // trigger
"Bz="<<bz<< // magnetic field
"vtxESD.="<<vtxESD<<
- "ntracksESD="<<ntracks<< // number of tracks in the ESD
- // "vtxESDx="<<vtxX<<
- // "vtxESDy="<<vtxY<<
- // "vtxESDz="<<vtxZ<<
- "IRtot="<<ir1<< // interaction record history info
- "IRint2="<<ir2<<
+ "ntracksESD="<<ntracks<< // number of tracks in the ESD
+ // "vtxESDx="<<vtxX<<
+ // "vtxESDy="<<vtxY<<
+ // "vtxESDz="<<vtxZ<<
+ "IRtot="<<ir1<< // interaction record history info
+ "IRint2="<<ir2<<
"mult="<<mult<< // multiplicity of tracks pointing to the primary vertex
"multSPD="<<multSPD<< // multiplicity of tracks pointing to the SPD primary vertex
"multTPC="<<multTPC<< // multiplicity of tracks pointing to the TPC primary vertex
"\n";
}
}
-
+
}
//_____________________________________________________________________________
-void AliAnalysisTaskFilteredTree::ProcessLaser(AliESDEvent *const esdEvent, AliMCEvent * const /*mcEvent*/, AliESDfriend *const /*esdFriend*/)
+void AliAnalysisTaskFilteredTree::ProcessLaser(AliESDEvent *const esdEvent, AliMCEvent * const /*mcEvent*/, AliESDfriend *const esdFriend)
{
//
// Process laser events
}
TObjString fileName(chain->GetCurrentFile()->GetName());
+ if(!fFillTree) return;
+ if(!fTreeSRedirector) return;
+
// laser events
const AliESDHeader* esdHeader = esdEvent->GetHeader();
if(esdHeader && esdHeader->GetEventSpecie()==AliRecoParam::kCalib)
{
Int_t countLaserTracks = 0;
+ Int_t runNumber = esdEvent->GetRunNumber();
+ Int_t evtTimeStamp = esdEvent->GetTimeStamp();
+ Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
+ Float_t bz = esdEvent->GetMagneticField();
+ TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
+
for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
{
AliESDtrack *track = esdEvent->GetTrack(iTrack);
if(!track) continue;
if(track->GetTPCInnerParam()) countLaserTracks++;
- }
-
- if(countLaserTracks > 100)
- {
- Int_t runNumber = esdEvent->GetRunNumber();
- Int_t evtTimeStamp = esdEvent->GetTimeStamp();
- Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
- Float_t bz = esdEvent->GetMagneticField();
- TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
-
- //fLaserTree->Branch("fileName",&fileName,32000,0);
- //fLaserTree->Branch("runNumber",&runNumber,"runNumber/I");
- //fLaserTree->Branch("evtTimeStamp",&evtTimeStamp,"evtTimeStamp/I");
- //fLaserTree->Branch("evtNumberInFile",&evtNumberInFile,"evtNumberInFile/I");
- //fLaserTree->Branch("triggerClass",&triggerClass,32000,0);
- //fLaserTree->Branch("Bz",&bz,"Bz/F");
- //fLaserTree->Branch("multTPCtracks",&countLaserTracks,"multTPCtracks/I");
-
- //fLaserTree->Fill();
-
- if(!fFillTree) return;
- if(!fTreeSRedirector) return;
+
+ Bool_t newFriendTrack=kFALSE;
+ AliESDfriendTrack* friendTrack=NULL;
+ if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL
+ if (!friendTrack) {friendTrack=new AliESDfriendTrack(); newFriendTrack=kTRUE;}
+
(*fTreeSRedirector)<<"Laser"<<
"fileName.="<<&fileName<<
"runNumber="<<runNumber<<
"evtTimeStamp="<<evtTimeStamp<<
"evtNumberInFile="<<evtNumberInFile<<
- "triggerClass="<<&triggerClass<< // trigger
+ "triggerClass="<<&triggerClass<< // trigger
"Bz="<<bz<<
"multTPCtracks="<<countLaserTracks<<
+ "friendTrack.="<<friendTrack<<
"\n";
+ if (newFriendTrack) {delete friendTrack; friendTrack=NULL;}
}
}
}
Printf("ERROR: Could not receive input handler");
return;
}
-
+
// get file name
TTree *chain = (TChain*)GetInputData(0);
if(!chain) {
//const AliESDVertex* vtxESD = 0;
AliESDVertex* vtxESD = 0;
if(GetAnalysisMode() == kTPCAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
}
else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
}
else {
AliInfo("no ESD vertex");
- return;
+ return;
}
if(!vtxESD) return;
Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD);
-
+
//
// Vertex info comparison and track multiplicity
//
if (track->IsOn(AliVTrack::kTPCrefit)) ntracksTPC++;
if (track->IsOn(AliVTrack::kITSrefit)) ntracksITS++;
}
-
+
//printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);
//printf("GetAnalysisMode() %d \n",GetAnalysisMode());
for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++)
{
AliESDtrack *track = esdEvent->GetTrack(iTrack);
+ AliESDfriendTrack* friendTrack=NULL;
+ if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL
if(!track) continue;
if(track->Charge()==0) continue;
if(!esdTrackCuts->AcceptTrack(track)) continue;
if(!accCuts->AcceptTrack(track)) continue;
-
+
// downscale low-pT tracks
Double_t scalempt= TMath::Min(track->Pt(),10.);
Double_t downscaleF = gRandom->Rndm();
// chi2 distance between TPC refitted constrained and TPC-ITS tracks
// chi2 distance between ITSout and InnerParams tracks
// MC information
-
+
Double_t x[3]; track->GetXYZ(x);
Double_t b[3]; AliTracker::GetBxByBz(x,b);
isOKtrackInnerC = trackInnerC->Rotate(track->GetAlpha());
isOKtrackInnerC = trackInnerC->PropagateTo(track->GetX(),esdEvent->GetMagneticField());
}
-
+
//
// calculate chi2 between vi and vj vectors
// with covi and covj covariance matrices
{
for (Int_t ipar=0; ipar<5; ipar++) {
deltaT(ipar,0)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
- delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
+ delta(0,ipar)=tpcInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
deltaTtrackC(ipar,0)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
- deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
+ deltatrackC(0,ipar)=trackInnerC->GetParameter()[ipar]-track->GetParameter()[ipar];
for (Int_t jpar=0; jpar<5; jpar++) {
- Int_t index=track->GetIndex(ipar,jpar);
- covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];
- covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index];
+ Int_t index=track->GetIndex(ipar,jpar);
+ covarM(ipar,jpar)=track->GetCovariance()[index]+tpcInnerC->GetCovariance()[index];
+ covarMtrackC(ipar,jpar)=track->GetCovariance()[index]+trackInnerC->GetCovariance()[index];
}
}
AliExternalTrackParam *outerITSc = NULL;
TMatrixD chi2OuterITS(1,1);
- if(esdFriend && esdFriend->TestSkipBit()==kFALSE)
+ if(esdFriend && !esdFriend->TestSkipBit())
{
// propagate ITSout to TPC inner wall
- AliESDfriendTrack *friendTrack = esdFriend->GetTrack(iTrack);
-
if(friendTrack)
- {
- outerITSc = new AliExternalTrackParam(*friendTrack->GetITSOut());
+ {
+
+ outerITSc = NULL;
+ if (friendTrack->GetITSOut()) outerITSc = new AliExternalTrackParam(*(friendTrack->GetITSOut()));
if(outerITSc)
- {
+ {
isOKouterITSc = AliTracker::PropagateTrackToBxByBz(outerITSc,kTPCRadius,track->GetMass(),kStep,kFALSE);
isOKouterITSc = outerITSc->Rotate(trackInnerC2->GetAlpha());
isOKouterITSc = outerITSc->PropagateTo(trackInnerC2->GetX(),esdEvent->GetMagneticField());
- //
+ //
// calculate chi2 between outerITS and innerParams
- // cov without z-coordinate at the moment
- //
+ // cov without z-coordinate at the moment
+ //
TMatrixD deltaTouterITS(4,1);
TMatrixD deltaouterITS(1,4);
TMatrixD covarMouterITS(4,4);
if(isOKtrackInnerC2 && isOKouterITSc) {
- Int_t kipar = 0;
- Int_t kjpar = 0;
+ Int_t kipar = 0;
+ Int_t kjpar = 0;
for (Int_t ipar=0; ipar<5; ipar++) {
- if(ipar!=1) {
+ if(ipar!=1) {
deltaTouterITS(kipar,0)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
- deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
- }
+ deltaouterITS(0,kipar)=outerITSc->GetParameter()[ipar]-trackInnerC2->GetParameter()[ipar];
+ }
kjpar=0;
for (Int_t jpar=0; jpar<5; jpar++) {
- Int_t index=outerITSc->GetIndex(ipar,jpar);
- if(ipar !=1 || jpar!=1) {
- covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index];
- }
+ Int_t index=outerITSc->GetIndex(ipar,jpar);
+ if(ipar !=1 || jpar!=1) {
+ covarMouterITS(kipar,kjpar)=outerITSc->GetCovariance()[index]+trackInnerC2->GetCovariance()[index];
+ }
if(jpar!=1) kjpar++;
- }
- if(ipar!=1) kipar++;
- }
+ }
+ if(ipar!=1) kipar++;
+ }
// chi2 distance ITSout and InnerParams
TMatrixD covarMInvouterITS = covarMouterITS.Invert();
TMatrixD mat2outerITS = covarMInvouterITS*deltaTouterITS;
chi2OuterITS = deltaouterITS*mat2outerITS;
//chi2OuterITS.Print();
- }
+ }
}
}
}
if(mcEvent)
{
if(!stack) return;
- multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
+ multMCTrueTracks = GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);
//
// global track
- //
+ //
Int_t label = TMath::Abs(track->GetLabel());
if (label >= mcStackSize) continue;
particle = stack->Particle(label);
if (!particle) continue;
if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0.)
- {
- particleMother = GetMother(particle,stack);
+ {
+ particleMother = GetMother(particle,stack);
mech = particle->GetUniqueID();
isPrim = stack->IsPhysicalPrimary(label);
- isFromStrangess = IsFromStrangeness(label,stack);
- isFromConversion = IsFromConversion(label,stack);
+ isFromStrangess = IsFromStrangeness(label,stack);
+ isFromConversion = IsFromConversion(label,stack);
isFromMaterial = IsFromMaterial(label,stack);
- }
+ }
//
- // TPC track
- //
- Int_t labelTPC = TMath::Abs(track->GetTPCLabel());
+ // TPC track
+ //
+ Int_t labelTPC = TMath::Abs(track->GetTPCLabel());
if (labelTPC >= mcStackSize) continue;
particleTPC = stack->Particle(labelTPC);
if (!particleTPC) continue;
if(particleTPC && particleTPC->GetPDG() && particleTPC->GetPDG()->Charge()!=0.)
- {
- particleMotherTPC = GetMother(particleTPC,stack);
+ {
+ particleMotherTPC = GetMother(particleTPC,stack);
mechTPC = particleTPC->GetUniqueID();
isPrimTPC = stack->IsPhysicalPrimary(labelTPC);
- isFromStrangessTPC = IsFromStrangeness(labelTPC,stack);
- isFromConversionTPC = IsFromConversion(labelTPC,stack);
+ isFromStrangessTPC = IsFromStrangeness(labelTPC,stack);
+ isFromConversionTPC = IsFromConversion(labelTPC,stack);
isFromMaterialTPC = IsFromMaterial(labelTPC,stack);
- }
+ }
//
// store first track reference
- // for TPC track
- //
+ // for TPC track
+ //
TParticle *part=0;
TClonesArray *trefs=0;
Int_t status = mcEvent->GetParticleAndTR(TMath::Abs(labelTPC), part, trefs);
- if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.)
- {
- Int_t nTrackRef = trefs->GetEntries();
- //printf("nTrackRef %d \n",nTrackRef);
+ if(status>0 && part && trefs && part->GetPDG() && part->GetPDG()->Charge()!=0.)
+ {
+ Int_t nTrackRef = trefs->GetEntries();
+ //printf("nTrackRef %d \n",nTrackRef);
Int_t countITS = 0;
- for (Int_t iref = 0; iref < nTrackRef; iref++)
+ for (Int_t iref = 0; iref < nTrackRef; iref++)
{
AliTrackReference *ref = (AliTrackReference *)trefs->At(iref);
- // Ref. in the middle ITS
+ // Ref. in the middle ITS
if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kITS)
{
- nrefITS++;
- if(!refITS && countITS==2) {
- refITS = ref;
- //printf("refITS %p \n",refITS);
- }
- countITS++;
+ nrefITS++;
+ if(!refITS && countITS==2) {
+ refITS = ref;
+ //printf("refITS %p \n",refITS);
+ }
+ countITS++;
}
// TPC
if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kTPC)
{
- nrefTPC++;
- refTPCOut=ref;
- if(!refTPCIn) {
- refTPCIn = ref;
- //printf("refTPCIn %p \n",refTPCIn);
- //break;
- }
+ nrefTPC++;
+ refTPCOut=ref;
+ if(!refTPCIn) {
+ refTPCIn = ref;
+ //printf("refTPCIn %p \n",refTPCIn);
+ //break;
+ }
}
// TRD
if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kTRD)
{
- nrefTRD++;
- if(!refTRD) {
- refTRD = ref;
- }
+ nrefTRD++;
+ if(!refTRD) {
+ refTRD = ref;
+ }
}
// TOF
if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kTOF)
{
- nrefTOF++;
- if(!refTOF) {
- refTOF = ref;
- }
+ nrefTOF++;
+ if(!refTOF) {
+ refTOF = ref;
+ }
}
// EMCAL
if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kEMCAL)
{
- nrefEMCAL++;
- if(!refEMCAL) {
- refEMCAL = ref;
- }
+ nrefEMCAL++;
+ if(!refEMCAL) {
+ refEMCAL = ref;
+ }
}
// PHOS
- // if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kPHOS)
-// {
-// nrefPHOS++;
-// if(!refPHOS) {
-// refPHOS = ref;
-// }
-// }
- }
+ // if(ref && ref->Label()==label && ref->DetectorId()==AliTrackReference::kPHOS)
+ // {
+ // nrefPHOS++;
+ // if(!refPHOS) {
+ // refPHOS = ref;
+ // }
+ // }
+ }
// transform inner params to TrackRef
- // reference frame
+ // reference frame
if(refTPCIn && trackInnerC3)
- {
- Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X());
+ {
+ Double_t kRefPhi = TMath::ATan2(refTPCIn->Y(),refTPCIn->X());
isOKtrackInnerC3 = trackInnerC3->Rotate(kRefPhi);
isOKtrackInnerC3 = AliTracker::PropagateTrackToBxByBz(trackInnerC3,refTPCIn->R(),track->GetMass(),kStep,kFALSE);
- }
+ }
}
//
- // ITS track
- //
- Int_t labelITS = TMath::Abs(track->GetITSLabel());
+ // ITS track
+ //
+ Int_t labelITS = TMath::Abs(track->GetITSLabel());
if (labelITS >= mcStackSize) continue;
particleITS = stack->Particle(labelITS);
if (!particleITS) continue;
if(particleITS && particleITS->GetPDG() && particleITS->GetPDG()->Charge()!=0.)
- {
- particleMotherITS = GetMother(particleITS,stack);
+ {
+ particleMotherITS = GetMother(particleITS,stack);
mechITS = particleITS->GetUniqueID();
isPrimITS = stack->IsPhysicalPrimary(labelITS);
- isFromStrangessITS = IsFromStrangeness(labelITS,stack);
- isFromConversionITS = IsFromConversion(labelITS,stack);
+ isFromStrangessITS = IsFromStrangeness(labelITS,stack);
+ isFromConversionITS = IsFromConversion(labelITS,stack);
isFromMaterialITS = IsFromMaterial(labelITS,stack);
}
}
//
Bool_t dumpToTree=kFALSE;
-
+
if(isOKtpcInnerC && isOKtrackInnerC) dumpToTree = kTRUE;
- if(fUseESDfriends && isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE;
+ //if(fUseESDfriends && isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE;
+ if(isOKtrackInnerC2 && isOKouterITSc) dumpToTree = kTRUE;
if(mcEvent && isOKtrackInnerC3) dumpToTree = kTRUE;
TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
if (fReducePileUp){
- //
- // 18.03 - Reduce pile-up chunks, done outside of the ESDTrackCuts for 2012/2013 data pile-up about 95 % of tracks
- // Done only in case no MC info
- //
- Float_t dcaTPC[2];
- track->GetImpactParametersTPC(dcaTPC[0],dcaTPC[1]);
- Bool_t isRoughPrimary = TMath::Abs(dcaTPC[1])<10;
- Bool_t hasOuter=(track->IsOn(AliVTrack::kITSin))||(track->IsOn(AliVTrack::kTOFout))||(track->IsOn(AliVTrack::kTRDin));
- Bool_t keepPileUp=gRandom->Rndm()<0.05;
- if ( (!hasOuter) && (!isRoughPrimary) && (!keepPileUp)){
- dumpToTree=kFALSE;
- }
+ //
+ // 18.03 - Reduce pile-up chunks, done outside of the ESDTrackCuts for 2012/2013 data pile-up about 95 % of tracks
+ // Done only in case no MC info
+ //
+ Float_t dcaTPC[2];
+ track->GetImpactParametersTPC(dcaTPC[0],dcaTPC[1]);
+ Bool_t isRoughPrimary = TMath::Abs(dcaTPC[1])<10;
+ Bool_t hasOuter=(track->IsOn(AliVTrack::kITSin))||(track->IsOn(AliVTrack::kTOFout))||(track->IsOn(AliVTrack::kTRDin));
+ Bool_t keepPileUp=gRandom->Rndm()<0.05;
+ if ( (!hasOuter) && (!isRoughPrimary) && (!keepPileUp)){
+ dumpToTree=kFALSE;
+ }
}
/////////////////
//book keeping of created dummy objects (to avoid NULL in trees)
Bool_t newparticleMotherTPC=kFALSE;
Bool_t newparticleITS=kFALSE;
Bool_t newparticleMotherITS=kFALSE;
-
+ Bool_t newFriendTrack=kFALSE;
+
//check that the vertex is there and that it is OK,
//i.e. no null member arrays, otherwise a problem with merging
//later on.
}
//
if (!track) {track=new AliESDtrack();newtrack=kTRUE;}
+ if (!friendTrack) {friendTrack=new AliESDfriendTrack(); newFriendTrack=kTRUE;}
if (!tpcInnerC) {tpcInnerC=new AliExternalTrackParam();newtpcInnerC=kTRUE;}
if (!trackInnerC) {trackInnerC=new AliExternalTrackParam();newtrackInnerC=kTRUE;}
if (!trackInnerC2) {trackInnerC2=new AliExternalTrackParam();newtrackInnerC2=kTRUE;}
//AliExternalTrackParam* ptrackInnerC3 = new AliExternalTrackParam(*trackInnerC3);
Int_t ntracks = esdEvent->GetNumberOfTracks();
-
+
// fill histograms
FillHistograms(track, tpcInnerC, centralityF, (Double_t)chi2(0,0));
{
(*fTreeSRedirector)<<"highPt"<<
- "fileName.="<<&fileName<< // name of the chunk file (hopefully full)
- "runNumber="<<runNumber<< // runNumber
- "evtTimeStamp="<<evtTimeStamp<< // time stamp of event (in seconds)
- "evtNumberInFile="<<evtNumberInFile<< // event number
- "triggerClass="<<&triggerClass<< // trigger class as a string
- "Bz="<<bz<< // solenoid magnetic field in the z direction (in kGaus)
- "vtxESD.="<<vtxESD<< // vertexer ESD tracks (can be biased by TPC pileup tracks)
- //"vtxESDx="<<vtxX<<
- //"vtxESDy="<<vtxY<<
- //"vtxESDz="<<vtxZ<<
- "IRtot="<<ir1<< // interaction record (trigger) counters - coutner 1
- "IRint2="<<ir2<< // interaction record (trigger) coutners - counter 2
- "mult="<<mult<< // multiplicity of tracks pointing to the primary vertex
- "ntracks="<<ntracks<< // number of the esd tracks (to take into account the pileup in the TPC)
- // important variables for the pile-up studies
- "contTPC="<< contTPC<< // number of contributors to the TPC primary vertex candidate
- "contSPD="<< contSPD<< // number of contributors to the SPD primary vertex candidate
- "vertexPosTPC.="<<&vertexPosTPC<< // TPC vertex position
- "vertexPosSPD.="<<&vertexPosSPD<< // SPD vertex position
- "ntracksTPC="<<ntracksTPC<< // total number of the TPC tracks which were refitted
- "ntracksITS="<<ntracksITS<< // total number of the ITS tracks which were refitted
- //
- "esdTrack.="<<track<< // esdTrack as used in the physical analysis
- "extTPCInnerC.="<<tpcInnerC<< // ???
- "extInnerParamC.="<<trackInnerC<< // ???
- "extInnerParam.="<<trackInnerC2<< // ???
- "extOuterITS.="<<outerITSc<< // ???
- "extInnerParamRef.="<<trackInnerC3<< // ???
- "chi2TPCInnerC="<<chi2(0,0)<< // chi2 of tracks ???
- "chi2InnerC="<<chi2trackC(0,0)<< // chi2s of tracks TPCinner to the combined
- "chi2OuterITS="<<chi2OuterITS(0,0)<< // chi2s of tracks TPC at inner wall to the ITSout
- "centralityF="<<centralityF;
+ "fileName.="<<&fileName<< // name of the chunk file (hopefully full)
+ "runNumber="<<runNumber<< // runNumber
+ "evtTimeStamp="<<evtTimeStamp<< // time stamp of event (in seconds)
+ "evtNumberInFile="<<evtNumberInFile<< // event number
+ "triggerClass="<<&triggerClass<< // trigger class as a string
+ "Bz="<<bz<< // solenoid magnetic field in the z direction (in kGaus)
+ "vtxESD.="<<vtxESD<< // vertexer ESD tracks (can be biased by TPC pileup tracks)
+ //"vtxESDx="<<vtxX<<
+ //"vtxESDy="<<vtxY<<
+ //"vtxESDz="<<vtxZ<<
+ "IRtot="<<ir1<< // interaction record (trigger) counters - coutner 1
+ "IRint2="<<ir2<< // interaction record (trigger) coutners - counter 2
+ "mult="<<mult<< // multiplicity of tracks pointing to the primary vertex
+ "ntracks="<<ntracks<< // number of the esd tracks (to take into account the pileup in the TPC)
+ // important variables for the pile-up studies
+ "contTPC="<< contTPC<< // number of contributors to the TPC primary vertex candidate
+ "contSPD="<< contSPD<< // number of contributors to the SPD primary vertex candidate
+ "vertexPosTPC.="<<&vertexPosTPC<< // TPC vertex position
+ "vertexPosSPD.="<<&vertexPosSPD<< // SPD vertex position
+ "ntracksTPC="<<ntracksTPC<< // total number of the TPC tracks which were refitted
+ "ntracksITS="<<ntracksITS<< // total number of the ITS tracks which were refitted
+ //
+ "esdTrack.="<<track<< // esdTrack as used in the physical analysis
+ "friendTrack.="<<friendTrack<< // esdFriendTrack associated to the esdTrack
+ "extTPCInnerC.="<<tpcInnerC<< // ???
+ "extInnerParamC.="<<trackInnerC<< // ???
+ "extInnerParam.="<<trackInnerC2<< // ???
+ "extOuterITS.="<<outerITSc<< // ???
+ "extInnerParamRef.="<<trackInnerC3<< // ???
+ "chi2TPCInnerC="<<chi2(0,0)<< // chi2 of tracks ???
+ "chi2InnerC="<<chi2trackC(0,0)<< // chi2s of tracks TPCinner to the combined
+ "chi2OuterITS="<<chi2OuterITS(0,0)<< // chi2s of tracks TPC at inner wall to the ITSout
+ "centralityF="<<centralityF;
if (mcEvent)
{
- AliTrackReference refDummy;
- if (!refITS) refITS = &refDummy;
- if (!refTRD) refTRD = &refDummy;
- if (!refTOF) refTOF = &refDummy;
- if (!refEMCAL) refEMCAL = &refDummy;
- if (!refPHOS) refPHOS = &refDummy;
+ AliTrackReference refDummy;
+ if (!refITS) refITS = &refDummy;
+ if (!refTRD) refTRD = &refDummy;
+ if (!refTOF) refTOF = &refDummy;
+ if (!refEMCAL) refEMCAL = &refDummy;
+ if (!refPHOS) refPHOS = &refDummy;
(*fTreeSRedirector)<<"highPt"<<
- "multMCTrueTracks="<<multMCTrueTracks<< // mC track multiplicities
- "nrefITS="<<nrefITS<< // number of track references in the ITS
- "nrefTPC="<<nrefTPC<< // number of track references in the TPC
- "nrefTRD="<<nrefTRD<< // number of track references in the TRD
- "nrefTOF="<<nrefTOF<< // number of track references in the TOF
- "nrefEMCAL="<<nrefEMCAL<< // number of track references in the TOF
- "nrefPHOS="<<nrefPHOS<< // number of track references in the TOF
- "refTPCIn.="<<refTPCIn<<
- "refTPCOut.="<<refTPCOut<<
- "refITS.="<<refITS<<
- "refTRD.="<<refTRD<<
- "refTOF.="<<refTOF<<
- "refEMCAL.="<<refEMCAL<<
- "refPHOS.="<<refPHOS<<
- "particle.="<<particle<<
- "particleMother.="<<particleMother<<
- "mech="<<mech<<
- "isPrim="<<isPrim<<
- "isFromStrangess="<<isFromStrangess<<
- "isFromConversion="<<isFromConversion<<
- "isFromMaterial="<<isFromMaterial<<
- "particleTPC.="<<particleTPC<<
- "particleMotherTPC.="<<particleMotherTPC<<
- "mechTPC="<<mechTPC<<
- "isPrimTPC="<<isPrimTPC<<
- "isFromStrangessTPC="<<isFromStrangessTPC<<
- "isFromConversionTPC="<<isFromConversionTPC<<
- "isFromMaterialTPC="<<isFromMaterialTPC<<
- "particleITS.="<<particleITS<<
- "particleMotherITS.="<<particleMotherITS<<
- "mechITS="<<mechITS<<
- "isPrimITS="<<isPrimITS<<
- "isFromStrangessITS="<<isFromStrangessITS<<
- "isFromConversionITS="<<isFromConversionITS<<
- "isFromMaterialITS="<<isFromMaterialITS;
+ "multMCTrueTracks="<<multMCTrueTracks<< // mC track multiplicities
+ "nrefITS="<<nrefITS<< // number of track references in the ITS
+ "nrefTPC="<<nrefTPC<< // number of track references in the TPC
+ "nrefTRD="<<nrefTRD<< // number of track references in the TRD
+ "nrefTOF="<<nrefTOF<< // number of track references in the TOF
+ "nrefEMCAL="<<nrefEMCAL<< // number of track references in the TOF
+ "nrefPHOS="<<nrefPHOS<< // number of track references in the TOF
+ "refTPCIn.="<<refTPCIn<<
+ "refTPCOut.="<<refTPCOut<<
+ "refITS.="<<refITS<<
+ "refTRD.="<<refTRD<<
+ "refTOF.="<<refTOF<<
+ "refEMCAL.="<<refEMCAL<<
+ "refPHOS.="<<refPHOS<<
+ "particle.="<<particle<<
+ "particleMother.="<<particleMother<<
+ "mech="<<mech<<
+ "isPrim="<<isPrim<<
+ "isFromStrangess="<<isFromStrangess<<
+ "isFromConversion="<<isFromConversion<<
+ "isFromMaterial="<<isFromMaterial<<
+ "particleTPC.="<<particleTPC<<
+ "particleMotherTPC.="<<particleMotherTPC<<
+ "mechTPC="<<mechTPC<<
+ "isPrimTPC="<<isPrimTPC<<
+ "isFromStrangessTPC="<<isFromStrangessTPC<<
+ "isFromConversionTPC="<<isFromConversionTPC<<
+ "isFromMaterialTPC="<<isFromMaterialTPC<<
+ "particleITS.="<<particleITS<<
+ "particleMotherITS.="<<particleMotherITS<<
+ "mechITS="<<mechITS<<
+ "isPrimITS="<<isPrimITS<<
+ "isFromStrangessITS="<<isFromStrangessITS<<
+ "isFromConversionITS="<<isFromConversionITS<<
+ "isFromMaterialITS="<<isFromMaterialITS;
}
//finish writing the entry
AliInfo("writing tree highPt");
//delete the dummy objects we might have created.
if (newvtxESD) {delete vtxESD; vtxESD=NULL;}
if (newtrack) {delete track; track=NULL;}
+ if (newFriendTrack) {delete friendTrack; friendTrack=NULL;}
if (newtpcInnerC) {delete tpcInnerC; tpcInnerC=NULL;}
if (newtrackInnerC) {delete trackInnerC; trackInnerC=NULL;}
if (newtrackInnerC2) {delete trackInnerC2; trackInnerC2=NULL;}
Double_t runNumber = esdEvent->GetRunNumber();
Double_t evtTimeStamp = esdEvent->GetTimeStamp();
Int_t evtNumberInFile = esdEvent->GetEventNumberInFile();
- // loop over MC stack
+ // loop over MC stack
for (Int_t iMc = 0; iMc < mcStackSize; ++iMc)
{
particle = stack->Particle(iMc);
AliESDtrack *track = esdEvent->GetTrack(iTrack);
if(!track) continue;
if(track->Charge()==0) continue;
- //
- Int_t label = TMath::Abs(track->GetLabel());
- if (label >= mcStackSize) continue;
- if(label == iMc) {
- Bool_t isAcc=esdTrackCuts->AcceptTrack(track);
- if (isAcc) isESDtrackCut=1;
- if (accCuts->AcceptTrack(track)) isAccCuts=1;
- isRec = kTRUE;
+ //
+ Int_t label = TMath::Abs(track->GetLabel());
+ if (label >= mcStackSize) continue;
+ if(label == iMc) {
+ Bool_t isAcc=esdTrackCuts->AcceptTrack(track);
+ if (isAcc) isESDtrackCut=1;
+ if (accCuts->AcceptTrack(track)) isAccCuts=1;
+ isRec = kTRUE;
trackIndex = iTrack;
- if (recTrack){
- if (track->GetTPCncls()<recTrack->GetTPCncls()) continue; // in case looper tracks use longer track
- if (!isAcc) continue;
- trackLoopIndex = iTrack;
- }
- recTrack = esdEvent->GetTrack(trackIndex);
+ if (recTrack){
+ if (track->GetTPCncls()<recTrack->GetTPCncls()) continue; // in case looper tracks use longer track
+ if (!isAcc) continue;
+ trackLoopIndex = iTrack;
+ }
+ recTrack = esdEvent->GetTrack(trackIndex);
nRec++;
if(track->GetLabel()<0) nFakes++;
- continue;
- }
+ continue;
+ }
}
-
+
// Store information in the output tree
if (trackLoopIndex>-1) {
recTrack = esdEvent->GetTrack(trackLoopIndex);
"evtNumberInFile="<<evtNumberInFile<< //
"Bz="<<bz<< // magnetic field
"vtxESD.="<<vtxESD<< // vertex info
- //
+ //
"mult="<<mult<< // primary vertex 9whatewe found) multiplicity
- "multMCTrueTracks="<<multMCTrueTracks<< // mC track multiplicities
- // important variables for the pile-up studies
- "contTPC="<< contTPC<< // number of contributors to the TPC primary vertex candidate
- "contSPD="<< contSPD<< // number of contributors to the SPD primary vertex candidate
- "vertexPosTPC.="<<&vertexPosTPC<< // TPC vertex position
- "vertexPosSPD.="<<&vertexPosSPD<< // SPD vertex position
- "ntracksTPC="<<ntracksTPC<< // total number of the TPC tracks which were refitted
- "ntracksITS="<<ntracksITS<< // total number of the ITS tracks which were refitted
- //
- //
- "isAcc0="<<isESDtrackCut<< // track accepted by ESD track cuts
- "isAcc1="<<isAccCuts<< // track accepted by acceptance cuts flag
+ "multMCTrueTracks="<<multMCTrueTracks<< // mC track multiplicities
+ // important variables for the pile-up studies
+ "contTPC="<< contTPC<< // number of contributors to the TPC primary vertex candidate
+ "contSPD="<< contSPD<< // number of contributors to the SPD primary vertex candidate
+ "vertexPosTPC.="<<&vertexPosTPC<< // TPC vertex position
+ "vertexPosSPD.="<<&vertexPosSPD<< // SPD vertex position
+ "ntracksTPC="<<ntracksTPC<< // total number of the TPC tracks which were refitted
+ "ntracksITS="<<ntracksITS<< // total number of the ITS tracks which were refitted
+ //
+ //
+ "isAcc0="<<isESDtrackCut<< // track accepted by ESD track cuts
+ "isAcc1="<<isAccCuts<< // track accepted by acceptance cuts flag
"esdTrack.="<<recTrack<< // reconstructed track (only the longest from the loopers)
"isRec="<<isRec<< // track was reconstructed
"tpcTrackLength="<<tpcTrackLength<< // track length in the TPC r projection
}
//_____________________________________________________________________________
-void AliAnalysisTaskFilteredTree::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const /*esdFriend*/)
+void AliAnalysisTaskFilteredTree::ProcessV0(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)
{
//
// Select real events with V0 (K0s and Lambda and Gamma) high-pT candidates
Printf("ERROR: Could not receive input handler");
return;
}
-
+
// get file name
TTree *chain = (TChain*)GetInputData(0);
if(!chain) {
//const AliESDVertex* vtxESD = 0;
AliESDVertex* vtxESD = 0;
if(GetAnalysisMode() == kTPCAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
}
else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
}
else {
- return;
+ return;
}
if(!vtxESD) return;
// check event cuts
if(isEventOK && isEventTriggered) {
- //
- // Dump the pt downscaled V0 into the tree
- //
- Int_t ntracks = esdEvent->GetNumberOfTracks();
- Int_t nV0s = esdEvent->GetNumberOfV0s();
- Int_t run = esdEvent->GetRunNumber();
- Int_t time= esdEvent->GetTimeStamp();
- Int_t evNr=esdEvent->GetEventNumberInFile();
- Double_t bz = esdEvent->GetMagneticField();
-
-
- for (Int_t iv0=0; iv0<nV0s; iv0++){
- AliESDv0 * v0 = esdEvent->GetV0(iv0);
- if (!v0) continue;
- AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0));
- AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1));
- if (!track0) continue;
- if (!track1) continue;
- if (track0->GetSign()<0) {
- track1 = esdEvent->GetTrack(v0->GetIndex(0));
- track0 = esdEvent->GetTrack(v0->GetIndex(1));
- }
//
- Bool_t isDownscaled = IsV0Downscaled(v0);
- if (isDownscaled) continue;
- AliKFParticle kfparticle; //
- Int_t type=GetKFParticle(v0,esdEvent,kfparticle);
- if (type==0) continue;
- TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
+ // Dump the pt downscaled V0 into the tree
+ //
+ Int_t ntracks = esdEvent->GetNumberOfTracks();
+ Int_t nV0s = esdEvent->GetNumberOfV0s();
+ Int_t run = esdEvent->GetRunNumber();
+ Int_t time= esdEvent->GetTimeStamp();
+ Int_t evNr=esdEvent->GetEventNumberInFile();
+ Double_t bz = esdEvent->GetMagneticField();
- if(!fFillTree) return;
- if(!fTreeSRedirector) return;
- (*fTreeSRedirector)<<"V0s"<<
- "isDownscaled="<<isDownscaled<<
- "triggerClass="<<&triggerClass<< // trigger
- "Bz="<<bz<<
- "fileName.="<<&fileName<<
- "runNumber="<<run<<
- "evtTimeStamp="<<time<<
- "evtNumberInFile="<<evNr<<
- "type="<<type<<
- "ntracks="<<ntracks<<
- "v0.="<<v0<<
- "kf.="<<&kfparticle<<
- "track0.="<<track0<<
- "track1.="<<track1<<
- "centralityF="<<centralityF<<
- "\n";
- }
+
+ for (Int_t iv0=0; iv0<nV0s; iv0++){
+
+ AliESDv0 * v0 = esdEvent->GetV0(iv0);
+ if (!v0) continue;
+ AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0));
+ AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1));
+ if (!track0) continue;
+ if (!track1) continue;
+ AliESDfriendTrack* friendTrack0=NULL;
+ AliESDfriendTrack* friendTrack1=NULL;
+ if (esdFriend)
+ {
+ if (!esdFriend->TestSkipBit())
+ {
+ friendTrack0 = esdFriend->GetTrack(v0->GetIndex(0)); //this guy can be NULL
+ friendTrack1 = esdFriend->GetTrack(v0->GetIndex(1)); //this guy can be NULL
+ }
+ }
+ Bool_t newFriendTrack0=kFALSE;
+ Bool_t newFriendTrack1=kFALSE;
+ if (!friendTrack0) {friendTrack0=new AliESDfriendTrack(); newFriendTrack0=kTRUE;}
+ if (!friendTrack1) {friendTrack1=new AliESDfriendTrack(); newFriendTrack1=kTRUE;}
+ if (track0->GetSign()<0) {
+ track1 = esdEvent->GetTrack(v0->GetIndex(0));
+ track0 = esdEvent->GetTrack(v0->GetIndex(1));
+ }
+ //
+ Bool_t isDownscaled = IsV0Downscaled(v0);
+ if (isDownscaled) continue;
+ AliKFParticle kfparticle; //
+ Int_t type=GetKFParticle(v0,esdEvent,kfparticle);
+ if (type==0) continue;
+ TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();
+
+ if(!fFillTree) return;
+ if(!fTreeSRedirector) return;
+ (*fTreeSRedirector)<<"V0s"<<
+ "isDownscaled="<<isDownscaled<<
+ "triggerClass="<<&triggerClass<< // trigger
+ "Bz="<<bz<<
+ "fileName.="<<&fileName<<
+ "runNumber="<<run<<
+ "evtTimeStamp="<<time<<
+ "evtNumberInFile="<<evNr<<
+ "type="<<type<<
+ "ntracks="<<ntracks<<
+ "v0.="<<v0<<
+ "kf.="<<&kfparticle<<
+ "track0.="<<track0<<
+ "track1.="<<track1<<
+ "friendTrack0.="<<friendTrack0<<
+ "friendTrack1.="<<friendTrack1<<
+ "centralityF="<<centralityF<<
+ "\n";
+ if (newFriendTrack0) {delete friendTrack0;}
+ if (newFriendTrack1) {delete friendTrack1;}
+ }
}
}
//_____________________________________________________________________________
-void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const /*esdFriend*/)
+void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMCEvent * const mcEvent, AliESDfriend *const esdFriend)
{
//
// Select real events with large TPC dEdx signal
// get reconstructed vertex
AliESDVertex* vtxESD = 0;
if(GetAnalysisMode() == kTPCAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTPC();
}
else if(GetAnalysisMode() == kTPCITSAnalysisMode) {
- vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
+ vtxESD = (AliESDVertex*)esdEvent->GetPrimaryVertexTracks();
}
else {
- return;
+ return;
}
if(!vtxESD) return;
{
AliESDtrack *track = esdEvent->GetTrack(iTrack);
if(!track) continue;
+ Bool_t newFriendTrack=kFALSE;
+ AliESDfriendTrack* friendTrack=NULL;
+ if (esdFriend) {if (!esdFriend->TestSkipBit()) friendTrack = esdFriend->GetTrack(iTrack);} //this guy can be NULL
+ if (!friendTrack) {friendTrack=new AliESDfriendTrack(); newFriendTrack=kTRUE;}
if(track->Charge()==0) continue;
if(!esdTrackCuts->AcceptTrack(track)) continue;
if(!accCuts->AcceptTrack(track)) continue;
if(!fFillTree) return;
if(!fTreeSRedirector) return;
(*fTreeSRedirector)<<"dEdx"<<
- "fileName.="<<&fileName<<
- "runNumber="<<runNumber<<
- "evtTimeStamp="<<evtTimeStamp<<
- "evtNumberInFile="<<evtNumberInFile<<
- "triggerClass="<<&triggerClass<< // trigger
- "Bz="<<bz<<
- "vtxESD.="<<vtxESD<<
- "mult="<<mult<<
- "esdTrack.="<<track<<
- "\n";
+ "fileName.="<<&fileName<<
+ "runNumber="<<runNumber<<
+ "evtTimeStamp="<<evtTimeStamp<<
+ "evtNumberInFile="<<evtNumberInFile<<
+ "triggerClass="<<&triggerClass<< // trigger
+ "Bz="<<bz<<
+ "vtxESD.="<<vtxESD<<
+ "mult="<<mult<<
+ "esdTrack.="<<track<<
+ "friendTrack.="<<friendTrack<<
+ "\n";
+ if (newFriendTrack) delete friendTrack;
}
}
}
AliESDtrack * track0 = event->GetTrack(v0->GetIndex(0));
AliESDtrack * track1 = event->GetTrack(v0->GetIndex(1));
/*
- TCut cutD="abs(track0.fD/sqrt(track0.fCdd))>2&&abs(track1.fD/sqrt(track1.fCdd))>2";
- TCut cutTheta="abs(track0.fP[3])<1&&abs(track1.fP[3])<1";
- TCut cutNcl="track0.GetTPCClusterInfo(2,1)>100&&track1.GetTPCClusterInfo(2,1)>100";
- */
+ TCut cutD="abs(track0.fD/sqrt(track0.fCdd))>2&&abs(track1.fD/sqrt(track1.fCdd))>2";
+ TCut cutTheta="abs(track0.fP[3])<1&&abs(track1.fP[3])<1";
+ TCut cutNcl="track0.GetTPCClusterInfo(2,1)>100&&track1.GetTPCClusterInfo(2,1)>100";
+ */
if (TMath::Abs(track0->GetTgl())>1) return 0;
if (TMath::Abs(track1->GetTgl())>1) return 0;
if ((track0->GetTPCClusterInfo(2,1))<100) return 0;
return kFALSE;
/*
- TH1F his1("his1","his1",100,0,10);
- TH1F his2("his2","his2",100,0,10);
- {for (Int_t i=0; i<10000; i++){
- Double_t rnd=gRandom->Exp(1);
- Bool_t isDownscaled =TMath::Exp(rnd)<100*gRandom->Rndm();
- his1->Fill(rnd);
- if (!isDownscaled) his2->Fill(rnd);
- }}
+ TH1F his1("his1","his1",100,0,10);
+ TH1F his2("his2","his2",100,0,10);
+ {for (Int_t i=0; i<10000; i++){
+ Double_t rnd=gRandom->Exp(1);
+ Bool_t isDownscaled =TMath::Exp(rnd)<100*gRandom->Rndm();
+ his1->Fill(rnd);
+ if (!isDownscaled) his2->Fill(rnd);
+ }}
- */
+*/
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskFilteredTree::ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3])
{
- // Constrain TPC inner params constrained
- //
- if(!tpcInnerC) return kFALSE;
- if(!vtx) return kFALSE;
+ // Constrain TPC inner params constrained
+ //
+ if(!tpcInnerC) return kFALSE;
+ if(!vtx) return kFALSE;
- Double_t dz[2],cov[3];
- //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();
- //if(!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE;
- //if(!tpcInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE;
- if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE;
+ Double_t dz[2],cov[3];
+ //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();
+ //if(!tpcInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE;
+ //if(!tpcInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE;
+ if(!tpcInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE;
- Double_t covar[6]; vtx->GetCovMatrix(covar);
- Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};
- Double_t c[3]={covar[2],0.,covar[5]};
- Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);
- if (chi2C>kVeryBig) return kFALSE;
+ Double_t covar[6]; vtx->GetCovMatrix(covar);
+ Double_t p[2]={tpcInnerC->GetParameter()[0]-dz[0],tpcInnerC->GetParameter()[1]-dz[1]};
+ Double_t c[3]={covar[2],0.,covar[5]};
+ Double_t chi2C=tpcInnerC->GetPredictedChi2(p,c);
+ if (chi2C>kVeryBig) return kFALSE;
- if(!tpcInnerC->Update(p,c)) return kFALSE;
+ if(!tpcInnerC->Update(p,c)) return kFALSE;
return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskFilteredTree::ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3])
{
- // Constrain TPC inner params constrained
- //
- if(!trackInnerC) return kFALSE;
- if(!vtx) return kFALSE;
+ // Constrain TPC inner params constrained
+ //
+ if(!trackInnerC) return kFALSE;
+ if(!vtx) return kFALSE;
- const Double_t kRadius = 2.8;
- const Double_t kMaxStep = 1.0;
+ const Double_t kRadius = 2.8;
+ const Double_t kMaxStep = 1.0;
- Double_t dz[2],cov[3];
+ Double_t dz[2],cov[3];
- //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();
- //if(!trackInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE;
- //if(!trackInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE;
+ //AliESDVertex *vtx= (AliESDVertex *)esdEvent->GetPrimaryVertex();
+ //if(!trackInnerC->PropagateToDCA(vtx, esdEvent->GetMagneticField(), 3, dz, cov)) return kFALSE;
+ //if(!trackInnerC->PropagateToDCA(vtx, Bz, 3, dz, cov)) return kFALSE;
- if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE)) return kFALSE;
- if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE;
+ if(!AliTracker::PropagateTrackToBxByBz(trackInnerC,kRadius,mass,kMaxStep,kFALSE)) return kFALSE;
+ if(!trackInnerC->PropagateToDCABxByBz(vtx, b, 3, dz, cov)) return kFALSE;
- //
- Double_t covar[6]; vtx->GetCovMatrix(covar);
- Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]};
- Double_t c[3]={covar[2],0.,covar[5]};
- Double_t chi2C=trackInnerC->GetPredictedChi2(p,c);
- if (chi2C>kVeryBig) return kFALSE;
+ //
+ Double_t covar[6]; vtx->GetCovMatrix(covar);
+ Double_t p[2]={trackInnerC->GetParameter()[0]-dz[0],trackInnerC->GetParameter()[1]-dz[1]};
+ Double_t c[3]={covar[2],0.,covar[5]};
+ Double_t chi2C=trackInnerC->GetPredictedChi2(p,c);
+ if (chi2C>kVeryBig) return kFALSE;
- if(!trackInnerC->Update(p,c)) return kFALSE;
+ if(!trackInnerC->Update(p,c)) return kFALSE;
return kTRUE;
}
if (motherLabel>=mcStackSize) return NULL;
mother = stack->Particle(motherLabel);
-return mother;
+ return mother;
}
//_____________________________________________________________________________
if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
{
- Int_t mech = particle->GetUniqueID(); // production mechanism
- Bool_t isPrim = stack->IsPhysicalPrimary(label);
+ Int_t mech = particle->GetUniqueID(); // production mechanism
+ Bool_t isPrim = stack->IsPhysicalPrimary(label);
- Int_t motherLabel = TMath::Abs(particle->GetMother(0));
- if (motherLabel>=mcStackSize) return kFALSE;
- TParticle* mother = stack->Particle(motherLabel);
- if(mother) {
- Int_t motherPdg = mother->GetPdgCode();
+ Int_t motherLabel = TMath::Abs(particle->GetMother(0));
+ if (motherLabel>=mcStackSize) return kFALSE;
+ TParticle* mother = stack->Particle(motherLabel);
+ if(mother) {
+ Int_t motherPdg = mother->GetPdgCode();
- if(!isPrim && mech==5 && motherPdg==kGamma) {
- isFromConversion=kTRUE;
- }
- }
+ if(!isPrim && mech==5 && motherPdg==kGamma) {
+ isFromConversion=kTRUE;
+ }
+ }
}
}
if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
{
- Int_t mech = particle->GetUniqueID(); // production mechanism
- Bool_t isPrim = stack->IsPhysicalPrimary(label);
-
- Int_t motherLabel = TMath::Abs(particle->GetMother(0));
- if (motherLabel>=mcStackSize) return kFALSE;
- TParticle* mother = stack->Particle(motherLabel);
- if(mother) {
- if(!isPrim && mech==13) {
- isFromMaterial=kTRUE;
- }
- }
- }
+ Int_t mech = particle->GetUniqueID(); // production mechanism
+ Bool_t isPrim = stack->IsPhysicalPrimary(label);
+
+ Int_t motherLabel = TMath::Abs(particle->GetMother(0));
+ if (motherLabel>=mcStackSize) return kFALSE;
+ TParticle* mother = stack->Particle(motherLabel);
+ if(mother) {
+ if(!isPrim && mech==13) {
+ isFromMaterial=kTRUE;
+ }
+ }
+ }
}
return isFromMaterial;
if(particle && particle->GetPDG() && particle->GetPDG()->Charge()!=0)
{
- Int_t mech = particle->GetUniqueID(); // production mechanism
- Bool_t isPrim = stack->IsPhysicalPrimary(label);
-
- Int_t motherLabel = TMath::Abs(particle->GetMother(0));
- if (motherLabel>=mcStackSize) return kFALSE;
- TParticle* mother = stack->Particle(motherLabel);
- if(mother) {
- Int_t motherPdg = mother->GetPdgCode();
-
- // K+-, lambda, antilambda, K0s decays
- if(!isPrim && mech==4 &&
- (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))
- {
- isFromStrangeness = kTRUE;
- }
- }
+ Int_t mech = particle->GetUniqueID(); // production mechanism
+ Bool_t isPrim = stack->IsPhysicalPrimary(label);
+
+ Int_t motherLabel = TMath::Abs(particle->GetMother(0));
+ if (motherLabel>=mcStackSize) return kFALSE;
+ TParticle* mother = stack->Particle(motherLabel);
+ if(mother) {
+ Int_t motherPdg = mother->GetPdgCode();
+
+ // K+-, lambda, antilambda, K0s decays
+ if(!isPrim && mech==4 &&
+ (TMath::Abs(motherPdg)==kKPlus || TMath::Abs(motherPdg)==kLambda0 || motherPdg==kK0Short))
+ {
+ isFromStrangeness = kTRUE;
+ }
+ }
}
}
if ((AliAnalysisManager::GetAnalysisManager()))
{
if (AliAnalysisManager::GetAnalysisManager()->GetAnalysisType() ==
- AliAnalysisManager::kProofAnalysis)
+ AliAnalysisManager::kProofAnalysis)
deleteTrees=kFALSE;
}
if (deleteTrees) delete fTreeSRedirector;
{
// Called one at the end
/*
- fOutputSummary = dynamic_cast<TTree*> (GetOutputData(1));
- if(fOutputSummary) delete fOutputSummary; fOutputSummary=0;
- TChain* chain = new TChain("highPt");
- if(!chain) return;
- chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root");
- TTree *tree = chain->CopyTree("1");
- if (chain) { delete chain; chain=0; }
- if(!tree) return;
- tree->Print();
- fOutputSummary = tree;
-
- if (!fOutputSummary) {
- Printf("ERROR: AliAnalysisTaskFilteredTree::Terminate(): Output data not avaiable %p \n", GetOutputData(1));
- return;
- }
- */
-
+ fOutputSummary = dynamic_cast<TTree*> (GetOutputData(1));
+ if(fOutputSummary) delete fOutputSummary; fOutputSummary=0;
+ TChain* chain = new TChain("highPt");
+ if(!chain) return;
+ chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root");
+ TTree *tree = chain->CopyTree("1");
+ if (chain) { delete chain; chain=0; }
+ if(!tree) return;
+ tree->Print();
+ fOutputSummary = tree;
+
+ if (!fOutputSummary) {
+ Printf("ERROR: AliAnalysisTaskFilteredTree::Terminate(): Output data not avaiable %p \n", GetOutputData(1));
+ return;
+ }
+ */
+
}
//_____________________________________________________________________________
Int_t nPart = stack->GetNtrack();
for (Int_t iMc = 0; iMc < nPart; ++iMc)
{
- TParticle* particle = stack->Particle(iMc);
- if (!particle)
- continue;
-
- // only charged particles
- if(!particle->GetPDG()) continue;
- Double_t charge = particle->GetPDG()->Charge()/3.;
- if (TMath::Abs(charge) < 0.001)
- continue;
-
- // physical primary
- Bool_t prim = stack->IsPhysicalPrimary(iMc);
- if(!prim) continue;
-
- // checked accepted without pt cut
- //if(accCuts->AcceptTrack(particle))
- if( particle->Eta() > accCuts->GetMinEta() && particle->Eta() < accCuts->GetMaxEta() )
- {
- mult++;
- }
+ TParticle* particle = stack->Particle(iMc);
+ if (!particle)
+ continue;
+
+ // only charged particles
+ if(!particle->GetPDG()) continue;
+ Double_t charge = particle->GetPDG()->Charge()/3.;
+ if (TMath::Abs(charge) < 0.001)
+ continue;
+
+ // physical primary
+ Bool_t prim = stack->IsPhysicalPrimary(iMc);
+ if(!prim) continue;
+
+ // checked accepted without pt cut
+ //if(accCuts->AcceptTrack(particle))
+ if( particle->Eta() > accCuts->GetMinEta() && particle->Eta() < accCuts->GetMaxEta() )
+ {
+ mult++;
+ }
}
-return mult;
+ return mult;
}
//_____________________________________________________________________________
void AliAnalysisTaskFilteredTree::FillHistograms(AliESDtrack* const ptrack, AliExternalTrackParam* const ptpcInnerC, const Double_t centralityF, const Double_t chi2TPCInnerC)
{
-//
-// Fill pT relative resolution histograms for
-// TPC only, TPC only constrained to vertex and TPC+ITS tracking
-//
- if(!ptrack) return;
- if(!ptpcInnerC) return;
-
- const AliExternalTrackParam * innerParam = (AliExternalTrackParam *) ptrack->GetInnerParam();
- if(!innerParam) return;
-
- Float_t dxy, dz;
- ptrack->GetImpactParameters(dxy,dz);
-
-// TPC+ITS primary tracks
-if( abs(ptrack->Eta())<0.8 &&
- ptrack->GetTPCClusterInfo(3,1)>120 &&
- ptrack->IsOn(0x40) &&
- ptrack->GetTPCclusters(0)>0.0 &&
- ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
- //abs(innerParam->GetX())>0.0 &&
- //abs(innerParam->GetY()/innerParam->GetX())<0.14 &&
- //abs(innerParam->GetTgl())<0.85 &&
- ptrack->IsOn(0x0004) &&
- ptrack->GetNcls(0)>0 &&
- ptrack->GetITSchi2()>0 &&
- sqrt(ptrack->GetITSchi2()/ptrack->GetNcls(0))<6 &&
- sqrt(chi2TPCInnerC)<6 &&
- (ptrack->HasPointOnITSLayer(0) || ptrack->HasPointOnITSLayer(1)) &&
- abs(dz)<2.0 &&
- abs(dxy)<(0.018+0.035*abs(ptrack->GetSigned1Pt())) )
- {
- fPtResPhiPtTPCITS->Fill(ptrack->Pt(),ptrack->Phi(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
- fPtResEtaPtTPCITS->Fill(ptrack->Pt(),ptrack->Eta(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
- fPtResCentPtTPCITS->Fill(ptrack->Pt(),centralityF,1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
- }
+ //
+ // Fill pT relative resolution histograms for
+ // TPC only, TPC only constrained to vertex and TPC+ITS tracking
+ //
+ if(!ptrack) return;
+ if(!ptpcInnerC) return;
+
+ const AliExternalTrackParam * innerParam = (AliExternalTrackParam *) ptrack->GetInnerParam();
+ if(!innerParam) return;
+
+ Float_t dxy, dz;
+ ptrack->GetImpactParameters(dxy,dz);
+
+ // TPC+ITS primary tracks
+ if( abs(ptrack->Eta())<0.8 &&
+ ptrack->GetTPCClusterInfo(3,1)>120 &&
+ ptrack->IsOn(0x40) &&
+ ptrack->GetTPCclusters(0)>0.0 &&
+ ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
+ //abs(innerParam->GetX())>0.0 &&
+ //abs(innerParam->GetY()/innerParam->GetX())<0.14 &&
+ //abs(innerParam->GetTgl())<0.85 &&
+ ptrack->IsOn(0x0004) &&
+ ptrack->GetNcls(0)>0 &&
+ ptrack->GetITSchi2()>0 &&
+ sqrt(ptrack->GetITSchi2()/ptrack->GetNcls(0))<6 &&
+ sqrt(chi2TPCInnerC)<6 &&
+ (ptrack->HasPointOnITSLayer(0) || ptrack->HasPointOnITSLayer(1)) &&
+ abs(dz)<2.0 &&
+ abs(dxy)<(0.018+0.035*abs(ptrack->GetSigned1Pt())) )
+ {
+ fPtResPhiPtTPCITS->Fill(ptrack->Pt(),ptrack->Phi(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
+ fPtResEtaPtTPCITS->Fill(ptrack->Pt(),ptrack->Eta(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
+ fPtResCentPtTPCITS->Fill(ptrack->Pt(),centralityF,1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));
+ }
-// TPC primary tracks
-// and TPC constrained primary tracks
+ // TPC primary tracks
+ // and TPC constrained primary tracks
- AliExternalTrackParam *ptpcInner = (AliExternalTrackParam *) ptrack->GetTPCInnerParam();
- if(!ptpcInner) return;
+ AliExternalTrackParam *ptpcInner = (AliExternalTrackParam *) ptrack->GetTPCInnerParam();
+ if(!ptpcInner) return;
- Float_t dxyTPC, dzTPC;
- ptrack->GetImpactParametersTPC(dxyTPC,dzTPC);
+ Float_t dxyTPC, dzTPC;
+ ptrack->GetImpactParametersTPC(dxyTPC,dzTPC);
-if( abs(ptrack->Eta())<0.8 &&
- ptrack->GetTPCClusterInfo(3,1)>120 &&
- ptrack->IsOn(0x40)&&
- ptrack->GetTPCclusters(0)>0.0 &&
- ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
- //abs(innerParam->GetX())>0.0 &&
- //abs(innerParam->GetY()/innerParam->GetX())<0.14 &&
- //abs(innerParam->GetTgl())<0.85 &&
- abs(dzTPC)<3.2 &&
- abs(dxyTPC)<2.4 )
- {
- // TPC only
- fPtResPhiPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Phi(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
- fPtResEtaPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Eta(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
- fPtResCentPtTPC->Fill(ptpcInner->Pt(),centralityF,1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
-
- // TPC constrained to vertex
- fPtResPhiPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Phi(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
- fPtResEtaPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Eta(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
- fPtResCentPtTPCc->Fill(ptpcInnerC->Pt(),centralityF,1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
- }
+ if( abs(ptrack->Eta())<0.8 &&
+ ptrack->GetTPCClusterInfo(3,1)>120 &&
+ ptrack->IsOn(0x40)&&
+ ptrack->GetTPCclusters(0)>0.0 &&
+ ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.4 &&
+ //abs(innerParam->GetX())>0.0 &&
+ //abs(innerParam->GetY()/innerParam->GetX())<0.14 &&
+ //abs(innerParam->GetTgl())<0.85 &&
+ abs(dzTPC)<3.2 &&
+ abs(dxyTPC)<2.4 )
+ {
+ // TPC only
+ fPtResPhiPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Phi(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
+ fPtResEtaPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Eta(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
+ fPtResCentPtTPC->Fill(ptpcInner->Pt(),centralityF,1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));
+
+ // TPC constrained to vertex
+ fPtResPhiPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Phi(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
+ fPtResEtaPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Eta(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
+ fPtResCentPtTPCc->Fill(ptpcInnerC->Pt(),centralityF,1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));
+ }
}