#include "AliAODTracklets.h"\r
#include "AliAODHeader.h"\r
\r
+#include "AliAODMCHeader.h"\r
#include "AliAODMCParticle.h"\r
#include "TClonesArray.h"\r
#include "TDatabasePDG.h"\r
fVZEload(NULL),\r
fVZEResponse(NULL),\r
fVZEmb(kFALSE),\r
+ fVZEByDisk(kTRUE),\r
fVZEQA(NULL),\r
fPsi2(0.0),\r
+ fMCEP(0.0),\r
fMassBins(0),\r
fMinMass(0.0),\r
fMaxMass(0.0),\r
fDecayAlpha(0.0),\r
fDecayRapidity(0.0),\r
fDecayProductIPXY(0.0),\r
- fDecayIDneg(0),\r
- fDecayIDpos(0),\r
+ fDecayIDneg(-1),\r
+ fDecayIDpos(-1),\r
+ fDecayID(-1),\r
fDecayMinEta(0.0),\r
fDecayMaxEta(0.0),\r
fDecayMinPt(0.0),\r
fVZEload(NULL),\r
fVZEResponse(NULL),\r
fVZEmb(kFALSE),\r
+ fVZEByDisk(kTRUE),\r
fVZEQA(NULL),\r
fPsi2(0.0),\r
+ fMCEP(0.0),\r
fMassBins(0),\r
fMinMass(0.0),\r
fMaxMass(0.0),\r
fDecayAlpha(0.0),\r
fDecayRapidity(0.0),\r
fDecayProductIPXY(0.0),\r
- fDecayIDneg(0),\r
- fDecayIDpos(0),\r
+ fDecayIDneg(-1),\r
+ fDecayIDpos(-1),\r
+ fDecayID(-1),\r
fDecayMinEta(0.0),\r
fDecayMaxEta(0.0),\r
fDecayMinPt(0.0),\r
if(fReadESD) MakeFilterBits();\r
\r
AliFlowCommonConstants *cc = AliFlowCommonConstants::GetMaster();\r
- cc->SetNbinsMult(100); cc->SetMultMin(0); cc->SetMultMax(4000);\r
+ cc->SetNbinsMult(3000); cc->SetMultMin(0); cc->SetMultMax(30000);\r
cc->SetNbinsPt(200); cc->SetPtMin(0.0); cc->SetPtMax(20.0);\r
cc->SetNbinsPhi(100); cc->SetPhiMin(0.0); cc->SetPhiMax(TMath::TwoPi());\r
cc->SetNbinsEta(100); cc->SetEtaMin(-5.0); cc->SetEtaMax(+5.0);\r
}\r
//=======================================================================\r
void AliAnalysisTaskFlowStrange::AddEventSpy() {\r
+ TH1D *tH1D;\r
TH2D *tH2D;\r
TList *tList=new TList();\r
tList->SetName("EventSpy");\r
tH2D = new TH2D("VTXZ","VTXZ;Global||SPD;SPD",60,-25,+25,60,-25,+25); tList->Add( tH2D );\r
tH2D = new TH2D("CCCC","CCCC;V0M;TRK",60,-10,110,60,-10,110); tList->Add( tH2D );\r
tH2D = new TH2D("REFM","REFM;TPC;GLOBAL",100,0,3000,100,0,3000); tList->Add( tH2D );\r
+ if(fReadMC) {\r
+ tH1D = new TH1D("MCCC","MCCC;Xsection",100,-10,110); tList->Add( tH1D );\r
+ tH1D = new TH1D("MCEP","MCEP;MCEP",100,-TMath::TwoPi(),TMath::TwoPi()); tList->Add( tH1D );\r
+ }\r
}\r
fList->Add(tList);\r
}\r
if(fReadMC) {\r
tList=new TList(); tList->SetName("RecMth"); tList->SetOwner(); AddCandidatesSpy(tList); fList->Add(tList);\r
tH1D = new TH1D("MCOrigin", "MCOrigin;Rad2",1000,0,100); tList->Add(tH1D);\r
- tH2D = new TH2D("PTRes", "PTRes;MCPt;|DAT-MC|/MC",100,0,20,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("ETARes","ETARes;MCETA;|DAT-MC|/MC",16,0,0.8,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("RXYRes","RXYRes;MCRXY;|DAT-MC|/MC",100,0,20,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("DLERes","DLERes;MCDLE;|DAT-MC|/MC",100,0,20,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("RAPRes","RAPRes;MCRAP;|DAT-MC|/MC",10,0,0.5,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("APARes","APARes;MCAPA;|DAT-MC|/MC",24,-1.2,1.2,50,0,1); tList->Add(tH2D);\r
- tH2D = new TH2D("APQRes","APQRes;MCAPQ;|DAT-MC|/MC",25,0,0.25,50,0,1); tList->Add(tH2D);\r
+ tH2D = new TH2D("PTRes", "PTRes;MCPt;DAT-MC/MC", 100, 0, 20,100,-0.2,+0.2); tList->Add(tH2D);\r
+ tH2D = new TH2D("ETARes","ETARes;MCETA;DAT-MC/MC", 16, 0, 0.8,100,-0.5,+0.5); tList->Add(tH2D);\r
+ tH2D = new TH2D("RXYRes","RXYRes;MCRXY;DAT-MC/MC",100, 0, 20,100,-1,1); tList->Add(tH2D);\r
+ tH2D = new TH2D("DLERes","DLERes;MCDLE;DAT-MC/MC",100, 0, 20,100,-1,1); tList->Add(tH2D);\r
+ tH2D = new TH2D("RAPRes","RAPRes;MCRAP;DAT-MC/MC", 10, 0, 0.5,100,-0.5,+0.5); tList->Add(tH2D);\r
+ tH2D = new TH2D("APARes","APARes;MCAPA;DAT-MC/MC", 24,-1.2, 1.2,100,-0.5,+0.5); tList->Add(tH2D);\r
+ tH2D = new TH2D("APQRes","APQRes;MCAPQ;DAT-MC/MC", 25, 0,0.25,100,-0.3,+0.3); tList->Add(tH2D);\r
\r
tList=new TList(); tList->SetName("TrkMth"); tList->SetOwner(); AddTracksSpy(tList); fList->Add(tList);\r
tList=new TList(); tList->SetName("MthFDW"); tList->SetOwner(); AddCandidatesSpy(tList); fList->Add(tList);\r
mycent = "V0M";\r
}\r
fThisCent = cent->GetCentralityPercentile( mycent );\r
+\r
+ Double_t xsec=0;\r
+ if(fReadMC) {\r
+ AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(tAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));\r
+ if (!mcHeader) {\r
+ return kFALSE;\r
+ }\r
+ xsec = mcHeader->GetCrossSection();\r
+ fMCEP = mcHeader->GetReactionPlaneAngle();\r
+ }\r
+\r
acceptEvent = (fThisCent<fCentPerMin||fThisCent>fCentPerMax)?kFALSE:acceptEvent;\r
acceptEvent = TMath::Abs(tVtxZ-tSPDVtxZ)>0.5?kFALSE:acceptEvent;\r
acceptEvent = TMath::Abs(tVtxZ)>10.0?kFALSE:acceptEvent;\r
- if(fQAlevel>0) ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("VTXZ"))->Fill( tVtxZ, tSPDVtxZ );\r
- if(fQAlevel>0) ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("CCCC"))->Fill( cc1, cc2 );\r
- if(fQAlevel>0) ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("REFM"))->Fill( tpc, glo );\r
+ if(fQAlevel>0) {\r
+ ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("VTXZ"))->Fill( tVtxZ, tSPDVtxZ );\r
+ ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("CCCC"))->Fill( cc1, cc2 );\r
+ ((TH2D*)((TList*)fList->FindObject("EventSpy"))->FindObject("REFM"))->Fill( tpc, glo );\r
+ if(fReadMC) {\r
+ ((TH1D*)((TList*)fList->FindObject("EventSpy"))->FindObject("MCCC"))->Fill( xsec );\r
+ ((TH1D*)((TList*)fList->FindObject("EventSpy"))->FindObject("MCEP"))->Fill( fMCEP );\r
+ }\r
+ }\r
// EndOfCuts\r
return acceptEvent;\r
}\r
mcPt = mcmot->Pt();\r
mcEta = TMath::Abs( mcmot->Eta() );\r
mcRap = TMath::Abs( mcmot->Y() );\r
- if(!TMath::AreEqualAbs(mcPt,0,1e-6)) resPt = TMath::Abs(fDecayPt - mcPt) / mcPt;\r
- if(!TMath::AreEqualAbs(mcEta,0,1e-6)) resEta = TMath::Abs(fDecayEta - mcEta) / mcEta;\r
- if(!TMath::AreEqualAbs(mcRap,0,1e-6)) resRap = TMath::Abs(fDecayRapidity - mcRap) / mcRap;\r
+ if(!TMath::AreEqualAbs(mcPt,0,1e-6)) resPt = (fDecayPt - mcPt) / mcPt;\r
+ if(!TMath::AreEqualAbs(mcEta,0,1e-6)) resEta = (fDecayEta - mcEta) / mcEta;\r
+ if(!TMath::AreEqualAbs(mcRap,0,1e-6)) resRap = (fDecayRapidity - mcRap) / mcRap;\r
if( TMath::Abs(mcmot->GetPdgCode())==mompdg) {\r
if(mcmot->GetNDaughters()==2) {\r
matched=true;\r
Double_t mcGamma = mcmot->E() / mcmot->GetCalcMass();\r
mcRxy = TMath::Sqrt( dx*dx + dy*dy );\r
mcDle = TMath::Sqrt(dx*dx+dy*dy+dz*dz)/mcGamma;\r
- if(!TMath::AreEqualAbs(mcRxy,0,1e-6)) resRxy = TMath::Abs(fDecayRadXY - mcRxy) / mcRxy;\r
- if(!TMath::AreEqualAbs(mcDle,0,1e-6)) resDle = TMath::Abs(fDecayDecayLength - mcDle) / mcDle;\r
+ if(!TMath::AreEqualAbs(mcRxy,0,1e-6)) resRxy = (fDecayRadXY - mcRxy) / mcRxy;\r
+ if(!TMath::AreEqualAbs(mcDle,0,1e-6)) resDle = (fDecayDecayLength - mcDle) / mcDle;\r
TVector3 momPos(mcpos->Px(),mcpos->Py(),mcpos->Pz());\r
TVector3 momNeg(mcneg->Px(),mcneg->Py(),mcneg->Pz());\r
TVector3 momTot(mcmot->Px(),mcmot->Py(),mcmot->Pz());\r
Double_t qlneg = momNeg.Dot(momTot)/momTot.Mag();\r
mcApq = momPos.Perp(momTot);\r
mcApa = 1.-2./(1.+qlpos/qlneg);\r
- if(!TMath::AreEqualAbs(mcApq,0,1e-6)) resApq = TMath::Abs(fDecayQt - mcApq) / mcApq;\r
- if(!TMath::AreEqualAbs(mcApa,0,1e-6)) resApa = TMath::Abs(fDecayAlpha - mcApa) / mcApa;\r
+ if(!TMath::AreEqualAbs(mcApq,0,1e-6)) resApq = (fDecayQt - mcApq) / mcApq;\r
+ if(!TMath::AreEqualAbs(mcApa,0,1e-6)) resApa = (fDecayAlpha - mcApa) / mcApa;\r
}\r
if(mcmot->GetMother()>0) {\r
AliAODMCParticle *mcfdw = (AliAODMCParticle*) mcArray->At( mcmot->GetMother() );\r
fDecayPt=t->Pt();\r
fDecayPhi=t->Phi();\r
fDecayEta=t->Eta();\r
- fDecayIDpos=-1;\r
- fDecayIDneg=-1;\r
+ fDecayID=t->GetID();\r
\r
FillCandidateSpy("RecAll");\r
if(!pass) continue;\r
oTrack->SetPt(fDecayPt);\r
oTrack->SetPhi(fDecayPhi);\r
oTrack->SetEta(fDecayEta);\r
- oTrack->AddDaughter(fDecayIDpos);\r
- oTrack->AddDaughter(fDecayIDneg);\r
+ if(fSpecie<10) {\r
+ oTrack->AddDaughter(fDecayIDpos);\r
+ oTrack->AddDaughter(fDecayIDneg);\r
+ } else {\r
+ oTrack->SetID( fDecayID );\r
+ }\r
oTrack->SetForPOISelection(kTRUE);\r
oTrack->SetForRPSelection(kFALSE);\r
if(overwrite) {\r
for(int iCand=0; iCand!=fCandidates->GetEntriesFast(); ++iCand ) {\r
AliFlowCandidateTrack *cand = static_cast<AliFlowCandidateTrack*>(fCandidates->At(iCand));\r
if(!cand) continue;\r
+ cand->SetForPOISelection(kTRUE);\r
+ cand->SetForRPSelection(kFALSE);\r
+ poi++;\r
if(fDebug) printf(" >Checking at candidate %d with %d daughters: mass %f\n",\r
iCand,cand->GetNDaughters(),cand->Mass());\r
- // untagging ===>\r
- for(int iDau=0; iDau!=cand->GetNDaughters(); ++iDau) {\r
- if(fDebug) printf(" >Daughter %d with fID %d", iDau, cand->GetIDDaughter(iDau));\r
+ if(fSpecie<10) { // DECAYS\r
+ // untagging ===>\r
+ for(int iDau=0; iDau!=cand->GetNDaughters(); ++iDau) {\r
+ if(fDebug) printf(" >Daughter %d with fID %d", iDau, cand->GetIDDaughter(iDau));\r
+ for(int iRPs=0; iRPs!=fTPCevent->NumberOfTracks(); ++iRPs ) {\r
+ AliFlowTrack *iRP = static_cast<AliFlowTrack*>(fTPCevent->GetTrack( iRPs ));\r
+ if(!iRP) continue;\r
+ if(!iRP->InRPSelection()) continue;\r
+ if(cand->GetIDDaughter(iDau) == iRP->GetID()) {\r
+ if(fDebug) printf(" was in RP set");\r
+ ++untagged;\r
+ iRP->SetForRPSelection(kFALSE);\r
+ fTPCevent->SetNumberOfRPs( fTPCevent->GetNumberOfRPs() -1 );\r
+ }\r
+ }\r
+ if(fDebug) printf("\n");\r
+ }\r
+ // <=== untagging \r
+ fTPCevent->InsertTrack( ((AliFlowTrack*) cand) );\r
+ } else { // CHARGED\r
+ // adding only new tracks and tagging accordingly ===>\r
+ Bool_t found=kFALSE;\r
for(int iRPs=0; iRPs!=fTPCevent->NumberOfTracks(); ++iRPs ) {\r
AliFlowTrack *iRP = static_cast<AliFlowTrack*>(fTPCevent->GetTrack( iRPs ));\r
if(!iRP) continue;\r
if(!iRP->InRPSelection()) continue;\r
- if(cand->GetIDDaughter(iDau) == iRP->GetID()) {\r
- if(fDebug) printf(" was in RP set");\r
- ++untagged;\r
- iRP->SetForRPSelection(kFALSE);\r
- fTPCevent->SetNumberOfRPs( fTPCevent->GetNumberOfRPs() -1 );\r
+ if(cand->GetID() == iRP->GetID()) {\r
+ if(fDebug) printf(" >charged track (%d) was also found in RP set (adding poi tag)\n",cand->GetID());\r
+ iRP->SetForPOISelection(kTRUE);\r
+ found = kTRUE;\r
}\r
}\r
- if(fDebug) printf("\n");\r
+ if(!found) // not found adding track\r
+ fTPCevent->InsertTrack( ((AliFlowTrack*) cand) );\r
}\r
- // <=== untagging \r
- poi++;\r
- cand->SetForPOISelection(kTRUE);\r
- fTPCevent->InsertTrack( ((AliFlowTrack*) cand) );\r
fVZEevent->InsertTrack( ((AliFlowTrack*) cand) );\r
- }\r
+ } //END OF LOOP\r
fTPCevent->SetNumberOfPOIs( poi );\r
fVZEevent->SetNumberOfPOIs( poi );\r
((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("POI"))->Fill( poi );\r
ring[j]=0;\r
for(int i=0;i!=8;++i) ring[j] += extW[j*8+i];\r
}\r
+ Double_t disk[2];\r
+ disk[0] = fVZEResponse->Integral(1,32,ybinmin,ybinmax)/(maxC-minC);\r
+ disk[1] = fVZEResponse->Integral(33,64,ybinmin,ybinmax)/(maxC-minC);\r
//for(int i=0;i!=64;++i) printf("CELL %d -> W = %f ||",i,extW[i]);\r
- for(int i=0;i!=64;++i) extW[i] = ring[i/8]/extW[i]/8.0;\r
+ if(fVZEByDisk) {\r
+ for(int i=0;i!=64;++i) extW[i] = disk[i/32]/extW[i]/8.0;\r
+ } else {\r
+ for(int i=0;i!=64;++i) extW[i] = ring[i/8]/extW[i]/8.0;\r
+ }\r
//for(int i=0;i!=64;++i) printf(" W = %f \n",extW[i]);\r
}\r
//=>computing\r
//=======================================================================\r
void AliAnalysisTaskFlowStrange::AddMCParticleSpy(TList *me) {\r
TH1D *tH1D;\r
+ TH2D *tH2D;\r
tH1D = new TH1D("Pt", "Pt", 100,0.0,20); me->Add(tH1D);\r
tH1D = new TH1D("Phi", "Phi", 100,0,TMath::TwoPi()); me->Add(tH1D);\r
tH1D = new TH1D("Eta", "Eta", 100,-1,+1); me->Add(tH1D);\r
tH1D = new TH1D("Rad2", "Rad2", 1000,0,+100); me->Add(tH1D);\r
+ tH2D = new TH2D("Dphi", "phi-MCEP;pt;dphi",100,0,20, 72,0,TMath::Pi()); me->Add(tH2D);\r
return;\r
}\r
//=======================================================================\r
((TH1D*)((TList*)fList->FindObject(listName.Data()))->FindObject("Phi" ))->Fill( p->Phi() );\r
((TH1D*)((TList*)fList->FindObject(listName.Data()))->FindObject("Rad2" ))->Fill( TMath::Sqrt( p->Xv()*p->Xv() +\r
p->Yv()*p->Yv() ) );\r
+ ((TH1D*)((TList*)fList->FindObject(listName.Data()))->FindObject("Dphi" ))->Fill( p->Pt(), GetMCDPHI(p->Phi()) );\r
return;\r
}\r
//=======================================================================\r
+Double_t AliAnalysisTaskFlowStrange::GetMCDPHI(Double_t phi) {\r
+ Double_t dDPHI = phi - fMCEP;\r
+ if( dDPHI < 0 ) dDPHI += TMath::TwoPi();\r
+ if( dDPHI > TMath::Pi() ) dDPHI = TMath::TwoPi()-dDPHI;\r
+ return dDPHI;\r
+}\r
+//=======================================================================\r
void AliAnalysisTaskFlowStrange::FillMCParticleSpy(TString listName, TParticle *p) {\r
((TH1D*)((TList*)fList->FindObject(listName.Data()))->FindObject("Pt" ))->Fill( p->Pt() );\r
((TH1D*)((TList*)fList->FindObject(listName.Data()))->FindObject("Eta" ))->Fill( p->Eta() );\r
tH2D = new TH2D("APPOS", "APPOS;alphaPOS;QtPOS",100,-2,+2,100,0,0.3); me->Add(tH2D);\r
tH2D = new TH2D("D0PD0N", "D0PD0N;D0P;D0N", 200,-10,+10,200,-10,+10); me->Add(tH2D);\r
tH2D = new TH2D("XPOSXNEG","XPOSXNEG;XPOS;XNEG", 200,-50,+50,200,-50,+50); me->Add(tH2D);\r
+ tH2D = new TH2D("PTDPHIMC","PtDPHIMC;Pt;PHI-MCEP",100,0,20,72,0,TMath::Pi()); me->Add(tH2D);\r
return;\r
}\r
//=======================================================================\r
((TH2D*)((TList*)fList->FindObject(listName.Data()))->FindObject("PtDL" ))->Fill( fDecayPt, fDecayDecayLength );\r
((TH2D*)((TList*)fList->FindObject(listName.Data()))->FindObject("PtMASS"))->Fill( fDecayPt, fDecayMass );\r
((TH2D*)((TList*)fList->FindObject(listName.Data()))->FindObject("APPOS" ))->Fill( fDecayAlpha, fDecayQt );\r
+ ((TH2D*)((TList*)fList->FindObject(listName.Data()))->FindObject("PTDPHIMC" ))->Fill( fDecayPt, GetMCDPHI( fDecayPhi ) );\r
}\r
//=======================================================================\r
Bool_t AliAnalysisTaskFlowStrange::AcceptCandidate() {\r