:AliAnalysisTaskSE(name),
fOutput(0),
fESD(0),
+ fTrackCuts(0),
fEvtSelect(1),
+ fVtxCut(10.),
+ fNcellCut(2), fECut(1), fEtaCut(0.65), fM02Cut(0.5), fPi0AsyCut(0),
fCentrality(99.),
fEPTPC(-999.),
fEPTPCreso(0.),
{
// Dummy constructor ALWAYS needed for I/O.
+ fTrackCuts = new AliESDtrackCuts();
DefineInput(0, TChain::Class());
DefineOutput(1, TList::Class()); // for output list
}
:AliAnalysisTaskSE("default_name"),
fOutput(0),
fESD(0),
+ fTrackCuts(0),
fEvtSelect(1),
+ fVtxCut(10.),
+ fNcellCut(2), fECut(1), fEtaCut(0.65), fM02Cut(0.5), fPi0AsyCut(0),
fCentrality(99.),
fEPTPC(-999.),
fEPTPCreso(0.),
// Define input and output slots here (never in the dummy constructor)
// Input slot #0 works with a TChain - it is connected to the default input container
// Output slot #1 writes into a TH1 container
+ fTrackCuts = new AliESDtrackCuts();
DefineInput(0, TChain::Class());
DefineOutput(1, TList::Class()); // for output list
}
{
// Destructor. Clean-up the output list, but not the histograms that are put inside
// (the list is owner and will clean-up these histograms). Protect in PROOF case.
- delete fOutput;
+ delete fTrackCuts;
+ delete fOutput;
}
//_____________________________________________________________________
Double_t AliAnalysisTaskPi0V2::GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const
AliVCaloCells *cells = 0;
if (fESD)
cells = fESD->GetEMCALCells();
-// else
-// cells = fAOD->GetEMCALCells();
if (!cells)
return 0;
AliVCaloCells *cells = 0;
if (fESD)
cells = fESD->GetEMCALCells();
-// else
-// cells = fAOD->GetEMCALCells();
if (!cells)
return 0;
if(!c)
return kFALSE;
- if(c->GetNCells() < 2)
+ if(c->GetNCells() < fNcellCut)
return kFALSE;
- if(c->E() < 1.)
+ if(c->E() < fECut)
return kFALSE;
Short_t id = -1;
TVector3 clsPos(pos1);
Double_t eta = clsPos.Eta();
- if(eta > 0.65 || eta < -0.65)
+ if(TMath::Abs(eta) > fEtaCut)
return kFALSE;
if (!IsWithinFiducialVolume(id))
return kFALSE;
- if(c->GetM02() >0.5 )
+ if(c->GetM02() >fM02Cut)
return kFALSE;
// if(c->M20 >)
{
// Is good pion?
-
-// Double_t asym = TMath::Abs(p1.E()-p2.E())/(p1.E()+p2.E());
-// if (asym>0.7)
-// return kFALSE;
-
-// if (TMath::Abs(p1.Eta()-p2.Eta())>0.5)
-// return kFALSE;
-
+ if(fPi0AsyCut){
+ Double_t asym = TMath::Abs(p1.E()-p2.E())/(p1.E()+p2.E());
+ if (asym>0.7)
+ return kFALSE;
+ }
TLorentzVector pion;
pion = p1 + p2;
Double_t eta = pion.Eta();
- if (eta<-0.65)
- return kFALSE;
- if (eta>0.65)
+ if(TMath::Abs(eta) > fEtaCut)
return kFALSE;
return kTRUE;
dphiV0C = TVector2::Phi_0_2pi(dphiV0C); if(dphiV0C >TMath::Pi()) dphiV0C -= TMath::Pi();
dphiTPC = TVector2::Phi_0_2pi(dphiTPC); if(dphiTPC >TMath::Pi()) dphiTPC -= TMath::Pi();
- //cout<<"cos2V0: "<<cos2phiV0<<" cos2V0A: "<<cos2phiV0A<<" cos2V0C: "<<cos2phiV0C<<endl;
- //cout<<mass<<" "<<pt<<" "<<phi<<" "<<endl;
- //cout<<" dphiV0: "<<dphiV0<<" dphiV0A: "<<dphiV0A<<" dphiV0C: "<<dphiV0C<<"+++++++"<<endl;
-
Double_t xV0[5]; // Match ndims in fH V0 EP
xV0[0] = mass;
xV0[1] = pt;
if (!event) { Printf("ERROR: Could not retrieve event"); return; }
Bool_t isSelected =0;
- if(fEvtSelect == 2){
+ if(fEvtSelect == 1){ //MB+SemiCentral
isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kMB | AliVEvent::kSemiCentral));
- } else if (fEvtSelect == 1){
+ } else if (fEvtSelect == 2){ //MB+Central+SemiCentral
isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kMB | AliVEvent::kSemiCentral | AliVEvent::kCentral));
+ } else if(fEvtSelect == 3){ //MB
+ isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & (AliVEvent::kMB ));
}
if(!isSelected )
return;
hEvtCount->Fill(1);
const AliESDVertex* fvertex = fESD->GetPrimaryVertex();
- if(TMath::Abs(fvertex->GetZ())>10.)
+ if(TMath::Abs(fvertex->GetZ())>fVtxCut)
return;
Double_t vertex[3] = {fvertex->GetX(), fvertex->GetY(), fvertex->GetZ()};
if(fESD->GetCentrality()) {
fCentrality =
- fESD->GetCentrality()->GetCentralityPercentile("V0M");
+ fESD->GetCentrality()->GetCentralityPercentile("CL1"); //spd vertex
} else{
return;
}
fEPV0CR3 = ep->CalculateVZEROEventPlane(fESD, 3, 2, qx, qy);
}
-//cout<<" fEPV0:"<<fEPV0<<" fEPV0A:"<<fEPV0A<<" fEPV0C:"<<fEPV0C<<" fEPV0Ar:"<<fEPV0Ar<<" fEPV0Cr:"<<fEPV0Cr<<" fEPV0r:"<<fEPV0AR4<<" fEPV0AR7:"<<fEPV0AR7<<" fEPV0CR0:"<<fEPV0CR0<<" fEPV0CR3:"<<fEPV0CR3<<"--------------------------------------------"<<endl;
-
-//cout<<" EPTPC: "<<fEPTPC<<" resoTPC: "<<fEPTPCreso<<"---------------"<<endl;
hEvtCount->Fill(4);
- if( fEPV0A<-2. || fEPV0C<-2. || fEPV0AR4<-2.
- || fEPV0AR7<-2. || fEPV0CR0<-2. || fEPV0CR3<-2.
- || fEPTPC<-2. || fEPV0r<-2. || fEPV0Ar<-2.
- || fEPV0Cr<-2.) return;
+ if( fEPV0A<-2. || fEPV0C<-2. || fEPV0AR4<-2.
+ || fEPV0AR7<-2. || fEPV0CR0<-2. || fEPV0CR3<-2.
+ || fEPTPC<-2. || fEPV0r<-2. || fEPV0Ar<-2.
+ || fEPV0Cr<-2.) return;
hEvtCount->Fill(5);
fEPV0CR0 = TVector2::Phi_0_2pi(fEPV0CR0); if(fEPV0CR0>TMath::Pi()) fEPV0CR0 = fEPV0CR0 - TMath::Pi();
fEPV0CR3 = TVector2::Phi_0_2pi(fEPV0CR3); if(fEPV0CR3>TMath::Pi()) fEPV0CR3 = fEPV0CR3 - TMath::Pi();
-//cout<<" EPTPC: "<<fEPTPC<<" reso: "<<fEPTPCreso<<" -------------------"<<endl;
-//cout<<" cent: "<<fCentrality<<" fEPV0:"<<fEPV0<<" fEPV0A:"<<fEPV0A<<" fEPV0C:"<<fEPV0C<<" fEPV0Ar:"<<fEPV0Ar<<" fEPV0Cr:"<<fEPV0Cr<<" fEPV0r:"<<fEPV0AR4<<" fEPV0AR7:"<<fEPV0AR7<<" fEPV0CR0:"<<fEPV0CR0<<" fEPV0CR3:"<<fEPV0CR3<<"--------------------------------------------"<<endl;
-
if(fEPTPC != -999.)
hEPTPC->Fill(fCentrality, fEPTPC);
if(fEPTPCreso!=-1) hresoTPC->Fill(fCentrality, fEPTPCreso);
hdifV0C_TPC->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPTPC)));
hdifV0C_V0A->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0A)));
// Cluster loop for reconstructed event
-
-
- Int_t nCluster = fESD->GetNumberOfCaloClusters();
- for(Int_t i=0; i<nCluster; ++i){
- AliESDCaloCluster *c1 = fESD->GetCaloCluster(i);
- if(!c1->IsEMCAL()) continue;
- if(!IsGoodCluster(c1)) continue;
- for(Int_t j=i+1; j<nCluster; ++j){
- AliESDCaloCluster *c2 = fESD->GetCaloCluster(j);
- if(!c2->IsEMCAL()) continue;
- if(!IsGoodCluster(c2)) continue;
- TLorentzVector p1;
- GetMom(p1, c1, vertex);
- TLorentzVector p2;
- GetMom(p2, c2, vertex);
- FillPion(p1, p2, fEPV0r, fEPV0A, fEPV0C, fEPTPC);
- }
- }
- Int_t nTrack = fESD->GetNumberOfTracks();
- for(Int_t i=0; i<nTrack; ++i){
- AliESDtrack* esdtrack = fESD->GetTrack(i); // pointer to reconstructed to track
- if(!esdtrack) {
- AliError(Form("ERROR: Could not retrieve esdtrack %d",i));
+ Int_t nCluster = fESD->GetNumberOfCaloClusters();
+ for(Int_t i=0; i<nCluster; ++i){
+ AliESDCaloCluster *c1 = fESD->GetCaloCluster(i);
+ if(!c1->IsEMCAL()) continue;
+ if(!IsGoodCluster(c1)) continue;
+ for(Int_t j=i+1; j<nCluster; ++j){
+ AliESDCaloCluster *c2 = fESD->GetCaloCluster(j);
+ if(!c2->IsEMCAL()) continue;
+ if(!IsGoodCluster(c2)) continue;
+ TLorentzVector p1;
+ GetMom(p1, c1, vertex);
+ TLorentzVector p2;
+ GetMom(p2, c2, vertex);
+ FillPion(p1, p2, fEPV0r, fEPV0A, fEPV0C, fEPTPC);
+ }
+ }
+
+ //for track analysis.
+ fTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ fTrackCuts->SetRequireTPCRefit(kTRUE);
+ fTrackCuts->SetRequireITSRefit(kTRUE);
+ fTrackCuts->SetEtaRange(-0.7,0.7);
+ fTrackCuts->SetRequireSigmaToVertex(kTRUE);
+ fTrackCuts->SetMaxChi2PerClusterTPC(3.5);
+ fTrackCuts->SetMinNClustersTPC(100);
+
+ Int_t nTrack = fESD->GetNumberOfTracks();
+ for(Int_t i=0; i<nTrack; ++i){
+ AliESDtrack* esdtrack = fESD->GetTrack(i); // pointer to reconstructed to track
+ if(!fTrackCuts->AcceptTrack(esdtrack))
+ continue;
+ if(!esdtrack) {
+ AliError(Form("ERROR: Could not retrieve esdtrack %d",i));
continue;
}
Double_t tPhi = esdtrack->Phi();
Bool_t IsGoodPion(const TLorentzVector& p1, const TLorentzVector& p2) const;
void FillPion(const TLorentzVector& p1, const TLorentzVector& p2, Double_t EPV0r, Double_t EPV0A, Double_t EPV0C, Double_t EPTPC);
void GetMom(TLorentzVector& p, const AliESDCaloCluster *c, Double_t *vertex);
- void SetEventMethod(Double_t b ) { fEvtSelect =b ;}
+ void SetEventMethod(Double_t e ) { fEvtSelect =e ;}
+ void SetVtxCut(Double_t v ) { fVtxCut =v ;}
+ void SetClusNcell(Double_t c ) { fNcellCut =c ;}
+ void SetClusE(Double_t e ) { fECut =e ;}
+ void SetClusEta(Double_t e ) { fEtaCut =e ;}
+ void SetClusM02(Double_t m ) { fM02Cut =m ;}
+ void SetPi0Asy(Double_t a ) { fPi0AsyCut =a ;}
private:
TList *fOutput; //! Output list
AliESDEvent *fESD; //!ESD object
-
- Double_t fEvtSelect; // 1 = MB+Semi+Central, 2 = MB+Semi;
- // NEW HISTO to be declared here
+ AliESDtrackCuts *fTrackCuts; //! ESD track cuts
+ Double_t fEvtSelect; // 1 = MB+Semi+Central, 2 = MB+Semi, 3 = MB;
+ Double_t fVtxCut; // vertex cut
+ Double_t fNcellCut; // N cells Cut
+ Double_t fECut; // Cluster E cut
+ Double_t fEtaCut; // Cluster Eta Cut
+ Double_t fM02Cut; // Cluster long axis cut
+ Bool_t fPi0AsyCut; // pion Asymetry cut 0=off 1=on
Double_t fCentrality; //! Centrality
Double_t fEPTPC; //! Evt plane TPC
Double_t fEPTPCreso; //! resolution of TPC method