fVZEevent(NULL),\r
fCandidates(NULL),\r
fList(NULL),\r
+ fRunNumber(-1),\r
fDebug(0),\r
fQAlevel(0),\r
fReadESD(kFALSE),\r
fAvoidExec(kFALSE),\r
fSkipSelection(kFALSE),\r
fSkipFlow(kFALSE),\r
+ fSkipDHcorr(kTRUE),\r
fUseFP(kFALSE),\r
fRunOnpA(kFALSE),\r
fRunOnpp(kFALSE),\r
fVZEevent(NULL),\r
fCandidates(NULL),\r
fList(NULL),\r
+ fRunNumber(-1),\r
fDebug(0),\r
fQAlevel(0),\r
fReadESD(kFALSE),\r
fAvoidExec(kFALSE),\r
fSkipSelection(kFALSE),\r
fSkipFlow(kFALSE),\r
+ fSkipDHcorr(kTRUE),\r
fUseFP(kFALSE),\r
fRunOnpA(kFALSE),\r
fRunOnpp(kFALSE),\r
TList *tQAEvents=new TList();\r
tQAEvents->SetName("Event");\r
tQAEvents->SetOwner();\r
- tH1D = new TH1D("Events","Number of Events",5,0,5); tQAEvents->Add(tH1D);\r
+ tH1D = new TH1D("Events","Number of Events",6,0,6); tQAEvents->Add(tH1D);\r
tH1D->GetXaxis()->SetBinLabel(1,"exec");\r
tH1D->GetXaxis()->SetBinLabel(2,"userexec");\r
tH1D->GetXaxis()->SetBinLabel(3,"reached");\r
tH1D->GetXaxis()->SetBinLabel(4,"selected");\r
tH1D->GetXaxis()->SetBinLabel(5,"rejectedByLowQw");\r
+ tH1D->GetXaxis()->SetBinLabel(6,"rejectedByErrorLoadVZEcal");\r
tProfile = new TProfile("Configuration","Configuration",20,0,20); tQAEvents->Add(tProfile);\r
tProfile->Fill( 0.5,fCentPerMin,1); tProfile->GetXaxis()->SetBinLabel( 1,"fCentPerMin");\r
tProfile->Fill( 1.5,fCentPerMax,1); tProfile->GetXaxis()->SetBinLabel( 2,"fCentPerMax");\r
TList *tList;\r
TH1D *tH1D;\r
TH2D *tH2D;\r
+ TH3D *tH3D;\r
\r
//reconstruction\r
if(fReadESD) {\r
tList=new TList(); tList->SetName("RecSel"); tList->SetOwner(); AddCandidatesSpy(tList); fList->Add(tList);\r
//daughters\r
tList=new TList(); tList->SetName("TrkDau"); tList->SetOwner(); AddTracksSpy(tList); fList->Add(tList);\r
+ if(!fSkipDHcorr) {\r
+ //corr\r
+ tList=new TList(); tList->SetName("DHCORR"); tList->SetOwner(); \r
+ tH3D = new TH3D("DPHI","DPHI;dPT;dPHI;dETA", 20, -1, +1, 120, -TMath::TwoPi(), TMath::TwoPi(), 16, -1.6, +1.6 ); tList->Add(tH3D);\r
+ fList->Add(tList);\r
+ }\r
if(fQAlevel>1) {\r
// IN-OUT\r
tList=new TList(); tList->SetName("RecAllIP"); tList->SetOwner(); AddCandidatesSpy(tList); fList->Add(tList);\r
AliAnalysisTaskFlowStrange::MyUserExec(option);\r
}\r
//=======================================================================\r
-void AliAnalysisTaskFlowStrange::NotifyRun() {\r
- if(fQAlevel>5) AddVZEQA();\r
+void AliAnalysisTaskFlowStrange::MyNotifyRun() {\r
+ if(fQAlevel>5 && !fReadESD) AddVZEQA();\r
if(fVZEsave) AddVZEROResponse();\r
- if(fVZEload) LoadVZEROResponse();\r
+}\r
+//=======================================================================\r
+Bool_t AliAnalysisTaskFlowStrange::CalibrateEvent() {\r
+ if(fVZEsave) SaveVZEROResponse();\r
+ if(fQAlevel>5 && !fReadESD) SaveVZEROQA(); // 2BIMPROVED\r
+ Bool_t okay=kTRUE;\r
+ if(fVZEload) {\r
+ LoadVZEROResponse();\r
+ if(!fVZEResponse) okay = kFALSE;\r
+ }\r
+ return okay;\r
}\r
//=======================================================================\r
Bool_t AliAnalysisTaskFlowStrange::AcceptAAEvent(AliESDEvent *tESD) {\r
fCandidates->SetLast(-1);\r
AliESDEvent *tESD=dynamic_cast<AliESDEvent*>(InputEvent());\r
AliAODEvent *tAOD=dynamic_cast<AliAODEvent*>(InputEvent());\r
+ Int_t thisRun = fRunNumber;\r
//=>check event\r
Bool_t acceptEvent=kFALSE;\r
if(fReadESD) {\r
- if(!tESD) return;\r
+ if(!tESD) {Publish(); return;}\r
acceptEvent = fRunOnpp?kFALSE:fRunOnpA?kFALSE:AcceptAAEvent(tESD);\r
+ thisRun = tESD->GetRunNumber();\r
} else {\r
- if(!tAOD) return;\r
+ if(!tAOD) {Publish(); return;}\r
acceptEvent = fRunOnpp?AcceptPPEvent(tAOD):fRunOnpA?AcceptPAEvent(tAOD):AcceptAAEvent(tAOD);\r
+ thisRun = tAOD->GetRunNumber();\r
+ }\r
+ if(thisRun!=fRunNumber) {\r
+ fRunNumber = thisRun;\r
+ MyNotifyRun();\r
+ }\r
+ if( !CalibrateEvent() ) {\r
+ ((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("Events"))->Fill(5);\r
+ Publish(); return;\r
}\r
((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("Events"))->Fill(2);\r
//=>does the event clear?\r
- if(!acceptEvent) return;\r
+ if(!acceptEvent) {Publish(); return;}\r
if(!fSkipFlow) {\r
MakeQVectors();\r
if(fPsi2<-0.1) {\r
((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("Events"))->Fill(4);\r
+ Publish();\r
return;\r
}\r
}\r
- SaveVZEROResponse();\r
- if(fQAlevel>5 && !fReadESD) {\r
- SaveVZEROQA();\r
- }\r
//=>great, lets do our stuff!\r
((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("Events"))->Fill(3);\r
//=>load candidates\r
if(fSpecie<10) ReadFromAODv0(tAOD);\r
else ChargeParticles(tAOD);\r
}\r
- if(fUseFP) AddCandidates();\r
+ if(fUseFP) {\r
+ if(!fSkipDHcorr) MakeDHcorr();\r
+ AddCandidates();\r
+ }\r
//=>flow\r
//=>done\r
}\r
tTime.Stop();\r
((TH1D*)((TList*)fList->FindObject("Event"))->FindObject("RealTime"))->Fill( TMath::Log( tTime.RealTime() ) );\r
+ Publish();\r
+}\r
+//=======================================================================\r
+void AliAnalysisTaskFlowStrange::Publish() {\r
PostData(1,fList);\r
if(fUseFP) {\r
PostData(2,fTPCevent);\r
}\r
//=======================================================================\r
void AliAnalysisTaskFlowStrange::LoadVZEROResponse() {\r
- if(fVZEsave) return;\r
- AliVEvent *event = InputEvent();\r
- if(!event) return;\r
- Int_t thisrun = event->GetRunNumber();\r
if(fVZEResponse) {\r
TString run = fVZEResponse->GetTitle();\r
- if( run.Atoi() == thisrun ) return;\r
+ if( run.Atoi() == fRunNumber ) return;\r
fVZEResponse = NULL;\r
}\r
//==>loading\r
- fVZEResponse = dynamic_cast<TH2D*> (fVZEload->FindObject( Form("%d",thisrun) ));\r
- printf("New VZE calibration: run %d -> Entries %.0f\n",thisrun,fVZEResponse->GetEntries());\r
+ fVZEResponse = dynamic_cast<TH2D*> (fVZEload->FindObject( Form("%d",fRunNumber) ));\r
+ printf("New VZE calibration: run %d -> Entries %.0f\n",fRunNumber,fVZEResponse->GetEntries());\r
}\r
//=======================================================================\r
void AliAnalysisTaskFlowStrange::AddVZEQA() {\r
- AliVEvent *event = InputEvent();\r
- if(!event) return;\r
- Int_t thisrun = event->GetRunNumber();\r
-\r
fVZEQA = new TList();\r
- fVZEQA->SetName( Form("VZEQA%d",thisrun) );\r
+ fVZEQA->SetName( Form("VZEQA%d",fRunNumber) );\r
fVZEQA->SetOwner();\r
if(fQAlevel>0) {\r
TProfile2D *prof = new TProfile2D("LINP","LINP;VZEcell;VZEmult;SPDtrkl", 64,0,64,500,0,700,0,10000); fVZEQA->Add( prof );\r
prof = new TProfile2D("MULP","MULP;VZEcell;CENTR;VZEmult", 64,0,64,100,0,100,0,10000); fVZEQA->Add( prof );\r
TH3D *tH3D = new TH3D("EQU","EQU;VZEeqmult;VZEmult",100,0,700,100,0,700,64,0,64); fVZEQA->Add( tH3D );\r
- //tH3D = new TH3D("LIN","LIN;SPDtrkl;VZEmult;VZEcell",2000,0,2000,200,0,700,64,0,64); fVZEQA->Add( tH3D );\r
}\r
fList->Add(fVZEQA);\r
}\r
//=======================================================================\r
void AliAnalysisTaskFlowStrange::SaveVZEROQA() {\r
- if(!fVZEQA) return;\r
AliAODEvent *event = dynamic_cast<AliAODEvent*> (InputEvent());\r
AliVVZERO *vzero = event->GetVZEROData();\r
- //AliAODHeader *header = event->GetHeader();\r
AliAODTracklets *tracklets = event->GetTracklets();\r
if(!event) return;\r
if(!vzero) return;\r
eqmult = event->GetVZEROEqMultiplicity(id);\r
((TProfile2D*) fVZEQA->FindObject( "LINP" ))->Fill(id,mult,trkl,1);\r
((TProfile2D*) fVZEQA->FindObject( "MULP" ))->Fill(id,fThisCent,mult,1);\r
- //((TH3D*) fVZEQA->FindObject("LIN"))->Fill(trkl,mult,id);\r
((TH3D*) fVZEQA->FindObject("EQU"))->Fill(eqmult,mult,id);\r
}\r
}\r
}\r
return found;\r
}\r
-\r
+//=======================================================================\r
+void AliAnalysisTaskFlowStrange::MakeDHcorr() {\r
+ // Adds DH corr\r
+ for(int iCand=0; iCand!=fCandidates->GetEntriesFast(); ++iCand ) {\r
+ AliFlowCandidateTrack *cand = static_cast<AliFlowCandidateTrack*>(fCandidates->At(iCand));\r
+ if(!cand) continue;\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->GetID() == iRP->GetID()) continue; //avoid autocorr\r
+ for(int iDau=0; iDau!=cand->GetNDaughters(); ++iDau) //if it is a decay\r
+ if(cand->GetIDDaughter(iDau) == iRP->GetID()) continue;\r
+ //corr\r
+ Double_t dDPHI = iRP->Phi() - cand->Phi();\r
+ Double_t dDETA = iRP->Eta() - cand->Eta();\r
+ Double_t dDPT = iRP->Pt() - cand->Pt();\r
+ ((TH3D*)((TList*)fList->FindObject("DHCORR"))->FindObject("DPHI"))->Fill( dDPT, dDPHI, dDETA );\r
+ //end of corr\r
+ }\r
+ }\r
+}\r