Skip to content

Commit

Permalink
Merge pull request alisw#229 from m-c-danisch/master
Browse files Browse the repository at this point in the history
add option 'addPCMV0s' for ESD Filter
  • Loading branch information
alibuild authored Jun 6, 2017
2 parents 35d41aa + ea432e9 commit c3a7a89
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 9 deletions.
98 changes: 92 additions & 6 deletions ANALYSIS/ESDfilter/AliAnalysisTaskESDfilter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,12 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
fRefitVertexTracks(-1),
fRefitVertexTracksNCuts(0),
fRefitVertexTracksCuts(0),
fIsMuonCaloPass(kFALSE)
fIsMuonCaloPass(kFALSE),
fAddPCMv0s(kFALSE),
fbitfieldPCMv0sA(NULL),
fbitfieldPCMv0sB(NULL),
fv0Histos(NULL),
fHistov0List(NULL)
{
// Default constructor
fV0Cuts[0] = 33. ; // max allowed chi2
Expand All @@ -152,7 +157,7 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter():
}

//______________________________________________________________________________
AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name, Bool_t addPCMv0s):
AliAnalysisTaskSE(name),
fTrackFilter(0x0),
fKinkFilter(0x0),
Expand Down Expand Up @@ -209,7 +214,12 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
fRefitVertexTracks(-1),
fRefitVertexTracksNCuts(0),
fRefitVertexTracksCuts(0),
fIsMuonCaloPass(kFALSE)
fIsMuonCaloPass(kFALSE),
fAddPCMv0s(addPCMv0s),
fbitfieldPCMv0sA(NULL),
fbitfieldPCMv0sB(NULL),
fv0Histos(NULL),
fHistov0List(NULL)
{
// Constructor

Expand All @@ -229,6 +239,11 @@ AliAnalysisTaskESDfilter::AliAnalysisTaskESDfilter(const char* name):
fCascadeCuts[5] = 0.999; // min allowed cosine of the cascade pointing angle
fCascadeCuts[6] = 0.9 ; // min radius of the fiducial volume
fCascadeCuts[7] = 100. ; // max radius of the fiducial volume
if(fAddPCMv0s){
DefineInput(1,TBits::Class()); //Bit field for pcm v0s OfflineV0Finder
DefineInput(2,TBits::Class()); //Bit field for pcm v0s On-FlyV0Finder
DefineOutput(1,TList::Class()); //TList containing PCM v0 histos for consistency checks
}
}

AliAnalysisTaskESDfilter::~AliAnalysisTaskESDfilter()
Expand All @@ -242,7 +257,24 @@ void AliAnalysisTaskESDfilter::UserCreateOutputObjects()
{
//
// Create Output Objects conenct filter to outputtree
//
//
if (fAddPCMv0s){
fHistov0List = new TList();
fHistov0List->SetName("PCMv0Checks");
fv0Histos = new TH1D("v0CheckHisto","",8,1,9);
fv0Histos->GetXaxis()->SetBinLabel(1,"All PCM On-Fly");
fv0Histos->GetXaxis()->SetBinLabel(2,"All PCM Offline");
fv0Histos->GetXaxis()->SetBinLabel(3,"PCM On-Fly & v0filter");
fv0Histos->GetXaxis()->SetBinLabel(4,"PCM Offline & v0filter");
fv0Histos->GetXaxis()->SetBinLabel(5,"PCM On-Fly & v0 cascades");
fv0Histos->GetXaxis()->SetBinLabel(6,"PCM Offline & v0 cascades");
fv0Histos->GetXaxis()->SetBinLabel(7,"PCM On-Fly not selected by filter");
fv0Histos->GetXaxis()->SetBinLabel(8,"PCM Offline not selected by filter");
fHistov0List->Add(fv0Histos);
fHistov0List->SetOwner(kTRUE);
PostData(1,fHistov0List);
}

if(OutputTree())
{
OutputTree()->GetUserInfo()->Add(fTrackFilter);
Expand Down Expand Up @@ -343,6 +375,7 @@ void AliAnalysisTaskESDfilter::UserExec(Option_t */*option*/)
AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillExtension(kTRUE);
}
ConvertESDtoAOD();
if(fAddPCMv0s) PostData(1,fHistov0List);
}

//______________________________________________________________________________
Expand Down Expand Up @@ -892,8 +925,30 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd)
Double_t momPosAtV0vtx[3]={0.};
Double_t momNegAtV0vtx[3]={0.};
Int_t tofLabel[3] = {0};

if (fAddPCMv0s){
fbitfieldPCMv0sA = (TBits*) GetInputData(1);
fbitfieldPCMv0sB = (TBits*) GetInputData(2);
}
UInt_t posInt;

for (Int_t nV0 = 0; nV0 < esd.GetNumberOfV0s(); ++nV0) {
if (fUsedV0[nV0]) continue; // skip if already added to the AOD
if (fAddPCMv0s) {posInt = (UInt_t) nV0;}
if (fUsedV0[nV0]){
if(fbitfieldPCMv0sA){
if(fbitfieldPCMv0sA->TestBitNumber(posInt) && posInt <= fbitfieldPCMv0sA->GetNbits()){
fv0Histos->Fill(5);
fv0Histos->Fill(1);
}
}
if(fbitfieldPCMv0sB){
if(fbitfieldPCMv0sB->TestBitNumber(posInt) && posInt <= fbitfieldPCMv0sB->GetNbits()){
fv0Histos->Fill(6);
fv0Histos->Fill(2);
}
}
continue; // skip if already added to the AOD
}

AliESDv0 *v0 = esd.GetV0(nV0);
Int_t posFromV0 = v0->GetPindex();
Expand All @@ -910,8 +965,22 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd)
v0objects.AddAt(esdV0Neg, 2);
v0objects.AddAt(esdVtx, 3);
UInt_t selectV0 = 0;

//Add PCM V0s
if(fbitfieldPCMv0sA){
if(fbitfieldPCMv0sA->TestBitNumber(posInt) && posInt <= fbitfieldPCMv0sA->GetNbits()){
selectV0 = 2;
fv0Histos->Fill(1);
}
}
if(fbitfieldPCMv0sB){
if(fbitfieldPCMv0sB->TestBitNumber(posInt) && posInt <= fbitfieldPCMv0sB->GetNbits()){
selectV0 = 2;
fv0Histos->Fill(2);
}
}
if (fV0Filter) {
selectV0 = fV0Filter->IsSelected(&v0objects);
selectV0 |= fV0Filter->IsSelected(&v0objects);
// this is a little awkward but otherwise the
// list wants to access the pointer (delete it)
// again when going out of scope
Expand All @@ -924,6 +993,23 @@ void AliAnalysisTaskESDfilter::ConvertV0s(const AliESDEvent& esd)
esdVtx = 0;
}

if (fbitfieldPCMv0sA){
if (selectV0==3 && fbitfieldPCMv0sA->TestBitNumber(posInt)){
fv0Histos->Fill(3);
}
else if (selectV0==2 && fbitfieldPCMv0sA->TestBitNumber(posInt)){
fv0Histos->Fill(7);
}
}
if (fbitfieldPCMv0sB){
if (selectV0==3 && fbitfieldPCMv0sB->TestBitNumber(posInt)){
fv0Histos->Fill(4);
}
else if (selectV0==2 && fbitfieldPCMv0sB->TestBitNumber(posInt)){
fv0Histos->Fill(8);
}
}

v0->GetXYZ(pos[0], pos[1], pos[2]);

if (!fOldESDformat) {
Expand Down
8 changes: 7 additions & 1 deletion ANALYSIS/ESDfilter/AliAnalysisTaskESDfilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
{
public:
AliAnalysisTaskESDfilter();
AliAnalysisTaskESDfilter(const char* name);
AliAnalysisTaskESDfilter(const char* name, Bool_t addPCMv0s = kFALSE);
virtual ~AliAnalysisTaskESDfilter();
// Implementation of interface methods
virtual void UserCreateOutputObjects();
Expand Down Expand Up @@ -80,6 +80,7 @@ class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
void SetRefitVertexTracks(Int_t algo=6, Double_t* cuts=0);

void SetMuonCaloPass();
void SetAddPCMv0s(Bool_t addPCMv0s) {fAddPCMv0s=addPCMv0s;}

private:
AliAnalysisTaskESDfilter(const AliAnalysisTaskESDfilter&);
Expand Down Expand Up @@ -174,6 +175,11 @@ class AliAnalysisTaskESDfilter : public AliAnalysisTaskSE
Int_t fRefitVertexTracksNCuts; // number of cut parameters
Double_t* fRefitVertexTracksCuts; //[fRefitVertexTracksNCuts] optional cuts for vertex refit
Bool_t fIsMuonCaloPass; /// whether or not this filtering is used on a muon_calo ESD
Bool_t fAddPCMv0s; // Add pcm v0s when v0filter is switched on
TBits* fbitfieldPCMv0sA; // Bitfield with PCM v0s from on-fly v0 finder
TBits* fbitfieldPCMv0sB; // Bitfield with PCM v0s from offline v0 finder
TH1D* fv0Histos; // v0 histos for PCM consistency checks
TList* fHistov0List; // TList containing PCM histos

ClassDef(AliAnalysisTaskESDfilter, 21); // Analysis task for standard ESD filtering
};
Expand Down
34 changes: 32 additions & 2 deletions ANALYSIS/ESDfilter/macros/AddTaskESDFilter.C
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
Int_t muonMCMode = 3 ,
Bool_t useV0Filter=kTRUE,
Bool_t muonWithSPDTracklets=kTRUE,
Bool_t isMuonCaloPass=kFALSE)
Bool_t isMuonCaloPass=kFALSE,
Bool_t addPCMv0s=kTRUE)
{
// Creates a filter task and adds it to the analysis manager.
// Get the pointer to the existing analysis manager via the static access method.
Expand Down Expand Up @@ -53,7 +54,7 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
// Create the task, add it to the manager and configure it.
//===========================================================================
// Barrel tracks filter
AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter", addPCMv0s);
if (disableCascades) esdfilter->DisableCascades();
if (disableKinks) esdfilter->DisableKinks();

Expand Down Expand Up @@ -121,6 +122,7 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
v0Filter->AddCuts(esdV0Cuts);

esdfilter->SetV0Filter(v0Filter);
esdfilter->SetAddPCMv0s(addPCMv0s);
}

// Enable writing of Muon AODs
Expand All @@ -132,6 +134,34 @@ AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
mgr->ConnectInput (esdfilter, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput (esdfilter, 0, mgr->GetCommonOutputContainer());
mgr->ConnectInput (esdmuonfilter, 0, mgr->GetCommonInputContainer());

if (addPCMv0s){
TObjArray *allContainers = mgr->GetContainers();
Int_t containersSize = allContainers->GetSize();
TString containerName;
AliAnalysisDataContainer* cinputPCMv0sA;
AliAnalysisDataContainer* cinputPCMv0sB;
for (Int_t i=0;i<containersSize;i++){
if (allContainers->At(i)){
containerName = allContainers->At(i)->GetName();
if (containerName.CompareTo("PCM offlineV0Finder container")==0){
cinputPCMv0sA = allContainers->At(i);
}
else{
cout << "No container for offline v0s" << endl;}
if (containerName.CompareTo("PCM onflyV0Finder container")==0){
cinputPCMv0sB = allContainers->At(i);
}
else{
cout << "No container for onfly v0s found" << endl;
}
}
}
mgr->ConnectInput(esdfilter, 1, cinputPCMv0sA);
mgr->ConnectInput(esdfilter, 2, cinputPCMv0sB);
mgr->ConnectOutput(esdfilter ,1, mgr->CreateContainer("v0ConsistencyChecks", TList::Class(), AliAnalysisManager::kOutputContainer, "PCMv0Checks.root")) ;
}

if (useKineFilter) {
mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer());
Expand Down

0 comments on commit c3a7a89

Please sign in to comment.