// c++ headers
#include <iostream>
#include <string.h>
+#include <bitset>
// root headers
#include "TH1I.h"
#include "TTree.h"
#include "TClonesArray.h"
#include "TParticle.h"
-#include "TObjString.h"
+#include "TString.h"
#include "TFile.h"
#include "TDatabasePDG.h"
#include "TLorentzVector.h"
//_____________________________________________________________________________
AliAnalysisTaskUpcK0sK0s::AliAnalysisTaskUpcK0sK0s()
- : AliAnalysisTaskSE(),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),hCounter(0),fK0sTree(0),
+ : AliAnalysisTaskSE(),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fK0sTree(0),
fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),fVtxContrib(0),fBCrossNum(0),fNtracklets(0),
fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
fDataFilnam(0),fRecoPass(0),fEvtNum(0),
//_____________________________________________________________________________
AliAnalysisTaskUpcK0sK0s::AliAnalysisTaskUpcK0sK0s(const char *name)
- : AliAnalysisTaskSE(name),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),hCounter(0),fK0sTree(0),
+ : AliAnalysisTaskSE(name),fType(0),fRunTree(kTRUE),fRunHist(kTRUE),fK0sTree(0),
fRunNum(0),fPerNum(0),fOrbNum(0),fL0inputs(0),fL1inputs(0),fVtxContrib(0),fBCrossNum(0),fNtracklets(0),
fZDCAenergy(0),fZDCCenergy(0),fV0Adecision(0),fV0Cdecision(0),
fDataFilnam(0),fRecoPass(0),fEvtNum(0),
Init();
DefineOutput(1, TTree::Class());
- DefineOutput(2, TH1I::Class());
- DefineOutput(3, TList::Class());
+ DefineOutput(2, TList::Class());
}//AliAnalysisTaskUpcK0sK0s
delete fK0sTree;
fK0sTree = 0x0;
}
- if(hCounter){
- delete hCounter;
- hCounter = 0x0;
- }
if(fListHist){
delete fListHist;
fListHist = 0x0;
//_____________________________________________________________________________
void AliAnalysisTaskUpcK0sK0s::UserCreateOutputObjects()
{
- hCounter = new TH1I("hCounter", "hCounter", 34000, 1., 34001.);
-
- //input file
- fDataFilnam = new TObjString();
- fDataFilnam->SetString("");
//vertices
fK0sAODv0s = new TClonesArray("AliAODv0", 1000);
fHistTriggersPerRun = new TH1D("fHistTriggersPerRun", "fHistTriggersPerRun", 3000, 167000.5, 170000.5);
fListHist->Add(fHistTriggersPerRun);
- fHistK0sMass = new TH1D("fHistK0sMass","fHistK0sMass",200,0.4,0.6);
+ fHistK0sMass = new TH2D("fHistK0sMass","fHistK0sMass",20,0.45,0.55,20,0.45,0.55);
fListHist->Add(fHistK0sMass);
PostData(1, fK0sTree);
- PostData(2, hCounter);
- PostData(3, fListHist);
+ PostData(2, fListHist);
}//UserCreateOutputObjects
//_____________________________________________________________________________
void AliAnalysisTaskUpcK0sK0s::RunAODhist()
{
-
+
//input event
AliAODEvent *aod = (AliAODEvent*) InputEvent();
if(!aod) return;
-
-
+
//Trigger
TString trigger = aod->GetFiredTriggerClasses();
- if( !trigger.Contains("CCUP4-B") ) return;
+ if( !trigger.Contains("CCUP") ) return;
fRunNum = aod ->GetRunNumber();
fHistTriggersPerRun->Fill(fRunNum);
-
//primary vertex
AliAODVertex *fAODVertex = aod->GetPrimaryVertex();
fVtxContrib = fAODVertex->GetNContributors();
fZDCAenergy = fZDCdata->GetZNATowerEnergy()[0];
fZDCCenergy = fZDCdata->GetZNCTowerEnergy()[0];
- if( fZDCAenergy > 6000 || fZDCCenergy > 6000) return;
+ if( fZDCAenergy > 8200 || fZDCCenergy > 8200) return;
Int_t nGoodV0s=0;
Int_t V0Index[3] = {-1,-1,-1};
if ( pTrack->Charge() == nTrack->Charge())continue;
+ if(!(pTrack->TestFilterBit(1<<0))) continue;
+ if(!(nTrack->TestFilterBit(1<<0))) continue;
+ if(!(pTrack->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+ if(!(nTrack->GetStatus() & AliESDtrack::kITSrefit) ) continue;
if(!(pTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
if(!(nTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
if(pTrack->GetTPCNcls() < 50)continue;
V0Index[nGoodV0s] = iV0;
V0TrackID[2*nGoodV0s] = pTrack->GetID();
V0TrackID[2*nGoodV0s+1] = nTrack->GetID();
+
nGoodV0s++;
if(nGoodV0s > 2) break;
}//V0s loop
for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
AliAODTrack *trk = aod->GetTrack(itr);
if( !trk ) continue;
+ if(!(trk->TestFilterBit(1<<0))) continue;
if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
}//Track loop
if(nGoodV0s == 2 && nGoodTracks == 4){
- //SortArray(TrackID);
- //SortArray(V0TrackID);
- //for(Int_t i=0; i<4; i++) if (TrackID[i] != V0TrackID[i]) return;
- for(Int_t i=0; i<2; i++){
- AliAODv0 *v0 = aod->GetV0(V0Index[i]);
- fHistK0sMass->Fill(v0->MassK0Short());
- }
+ SortArray(TrackID);
+ SortArray(V0TrackID);
+ for(Int_t i=0; i<4; i++) if (TrackID[i] != V0TrackID[i]) return;
+
+ AliAODv0 *v00 = aod->GetV0(V0Index[0]);
+ AliAODv0 *v01 = aod->GetV0(V0Index[1]);
+ fHistK0sMass->Fill(v00->MassK0Short(),v01->MassK0Short());
+
}
-
- PostData(3, fListHist);
+ PostData(2, fListHist);
}
if(!aod) return;
//input data
- const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
- fDataFilnam->Clear();
- fDataFilnam->SetString(filnam);
- fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
- fRunNum = aod ->GetRunNumber();
-
- hCounter->Fill( 1 );
+ fDataFilnam = aod->GetHeader()->GetESDFileName();
+ fEvtNum = aod->GetHeader()->GetEventNumberESDFile();
+ fRunNum = aod->GetRunNumber();
+
+ //Trigger
//Trigger
TString trigger = aod->GetFiredTriggerClasses();
- if( !trigger.Contains("CCUP4-B") ) return;
-
- Bool_t isTRG = kFALSE;
- for(Int_t i=1; i<ntrg; i++) {
- if( fTrigger[i] ) {isTRG = kTRUE; hCounter->Fill( fRunNum - 167806 + 1 + i*2000 );}
+ fTrigger[0] = trigger.Contains("CCUP4-B"); // Central UPC Pb-Pb 2011
+ fTrigger[1] = trigger.Contains("CCUP2-B"); // Double gap
+ fTrigger[2] = trigger.Contains("CCUP7-B"); // Central UPC p-Pb 2013
+
+ Bool_t isTriggered = kFALSE;
+ for(Int_t i=0; i<ntrg; i++) {
+ if( fTrigger[i] ) isTriggered = kTRUE;
}
- if( !isTRG ) {PostData(2, hCounter); return;}
-
- hCounter->Fill( 2 );
+ if(!isTriggered ) return;
//trigger inputs
fL0inputs = aod->GetHeader()->GetL0TriggerInputs();
if ( pTrack->Charge() == nTrack->Charge())continue;
+ if(!(pTrack->TestFilterBit(1<<0))) continue;
+ if(!(nTrack->TestFilterBit(1<<0))) continue;
if(!(pTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
if(!(nTrack->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
+ if(!(pTrack->GetStatus() & AliESDtrack::kITSrefit) ) continue;
+ if(!(nTrack->GetStatus() & AliESDtrack::kITSrefit) ) continue;
if(pTrack->GetTPCNcls() < 50)continue;
if(nTrack->GetTPCNcls() < 50)continue;
if(pTrack->Chi2perNDF() > 4)continue;
for(Int_t itr=0; itr<aod ->GetNumberOfTracks(); itr++) {
AliAODTrack *trk = aod->GetTrack(itr);
if( !trk ) continue;
+ if(!(trk->TestFilterBit(1<<0))) continue;
if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
if(nGoodV0s == 2 && nGoodTracks == 4){
//SortArray(TrackID);
//SortArray(V0TrackID);
- //for{Int_t i=0; i<4; i++} if (TrackID[i] != V0TrackID[i]) {PostData(2, hCounter); return;}
+ //for{Int_t i=0; i<4; i++} if (TrackID[i] != V0TrackID[i]) return;
for(Int_t i=0; i<2; i++){
AliAODv0 *v0 = aod->GetV0(V0Index[i]);
AliAODTrack *pTrack=(AliAODTrack *)v0->GetDaughter(0); //0->Positive Daughter
}
PostData(1, fK0sTree);
- PostData(2, hCounter);
}//RunAOD
//_____________________________________________________________________________
-void AliAnalysisTaskUpcK0sK0s::SortArray(Double_t *dArray) {
+void AliAnalysisTaskUpcK0sK0s::SortArray(Int_t *dArray) {
for (Int_t i = 3; i > 0; --i) {
for (Int_t j = 0; j < i; ++j) {
if (dArray[j] > dArray[j+1]) {
- Double_t dTemp = dArray[j];
+ Int_t dTemp = dArray[j];
dArray[j] = dArray[j+1];
dArray[j+1] = dTemp;
}
void AliAnalysisTaskUpcK0sK0s::RunESD()
{
- /*/input event
- AliESDEvent *esd = (AliESDEvent*) InputEvent();
- if(!esd) return;
-
- //input data
- const char *filnam = ((TTree*) GetInputData(0))->GetCurrentFile()->GetName();
- fDataFilnam->Clear();
- fDataFilnam->SetString(filnam);
- fEvtNum = ((TTree*) GetInputData(0))->GetTree()->GetReadEntry();
- fRunNum = esd->GetRunNumber();
-
- hCounter->Fill( 1 );
-
- //Trigger
- TString trigger = esd->GetFiredTriggerClasses();
-
- fTrigger[0] = trigger.Contains("CINT7-B");
- fTrigger[1] = trigger.Contains("CCUP4-B"); // CE
- fTrigger[2] = trigger.Contains("CCUP4-E"); // CE
-
- Bool_t isTRG = kFALSE;
- for(Int_t i=1; i<ntrg; i++) {
- if( fTrigger[i] ) {isTRG = kTRUE; hCounter->Fill( fRunNum - 167806 + 1 + i*2000 );}
- }
- if( !isTRG ) {PostData(3, hCounter); return;}
-
- hCounter->Fill( 2 );
-
- //trigger inputs
- fL0inputs = esd->GetHeader()->GetL0TriggerInputs();
- fL1inputs = esd->GetHeader()->GetL1TriggerInputs();
-
- //Event identification
- fPerNum = esd->GetPeriodNumber();
- fOrbNum = esd->GetOrbitNumber();
- fBCrossNum = esd->GetBunchCrossNumber();
-
- //primary vertex
- AliESDVertex *fESDVertex = (AliESDVertex*) esd->GetPrimaryVertex();
- fVtxContrib = fESDVertex->GetNContributors();
-
- //Tracklets
- fNtracklets = esd->GetMultiplicity()->GetNumberOfTracklets();
-
- //VZERO, ZDC
- AliESDVZERO *fV0data = esd->GetVZEROData();
- AliESDZDC *fZDCdata = esd->GetESDZDC();
-
- fV0Adecision = fV0data->GetV0ADecision();
- fV0Cdecision = fV0data->GetV0CDecision();
- fZDCAenergy = fZDCdata->GetZN2TowerEnergy()[0];
- fZDCCenergy = fZDCdata->GetZN1TowerEnergy()[0];
-
- Int_t nGoodTracks=0;
- Int_t TrackIndex[5] = {-1,-1,-1,-1,-1};
-
- //Track loop
- for(Int_t itr=0; itr<esd ->GetNumberOfTracks(); itr++) {
- AliESDtrack *trk = esd->GetTrack(itr);
- if( !trk ) continue;
-
- if(!(trk->GetStatus() & AliESDtrack::kTPCrefit) ) continue;
- if(!(trk->GetStatus() & AliESDtrack::kITSrefit) ) continue;
- if(trk->GetTPCNcls() < 50)continue;
- if(trk->GetTPCchi2()/trk->GetTPCNcls() > 4)continue;
- Float_t dca[2] = {0.0,0.0}; AliExternalTrackParam cParam;
- if(!trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam)) continue;
- trk->GetImpactParameters(dca[0],dca[1]);
- if(TMath::Abs(dca[1]) > 2) continue;
-
- TrackIndex[nGoodTracks] = itr;
- nGoodTracks++;
- if(nGoodTracks > 4) break;
- }//Track loop
-
- if(nGoodTracks == 2){
- for(Int_t i=0; i<2; i++){
- AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
-
- AliExternalTrackParam cParam;
- trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
-
- new((*fJPsiESDTracks)[i]) AliESDtrack(*trk);
-
- }
- fJPsiTree ->Fill();
- PostData(1, fJPsiTree);
- }
-
- if(nGoodTracks == 4){
- for(Int_t i=0; i<4; i++){
- AliESDtrack *trk = esd->GetTrack(TrackIndex[i]);
-
- AliExternalTrackParam cParam;
- trk->RelateToVertex(fESDVertex, esd->GetMagneticField(),300.,&cParam);// to get trk->GetImpactParameters(DCAxy,DCAz);
-
- new((*fPsi2sESDTracks)[i]) AliESDtrack(*trk);
-
- }
- fPsi2sTree ->Fill();
- PostData(2, fPsi2sTree);
- }
-
- PostData(3, hCounter);
-/*/
}//RunESD
//_____________________________________________________________________________
cout<<"Analysis complete."<<endl;
}//Terminate
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-