// efficiency calculation.
// prototype version by S.Arcelli silvia.arcelli@cern.ch
///////////////////////////////////////////////////////////////////////////
-#include "TBits.h"
-#include "TList.h"
-#include "TH1.h"
-#include "AliLog.h"
#include "AliCFCutBase.h"
#include "AliCFManager.h"
//_____________________________________________________________________________
AliCFManager::AliCFManager() :
TNamed(),
+ fNStepEvt(0),
+ fNStepPart(0),
fEvtContainer(0x0),
fPartContainer(0x0),
- fhQABits(0x0)
-
+ fEvtCutList(0x0),
+ fPartCutList(0x0)
{
//
// ctor
//
- for(Int_t i=0;i<kNEvtSel;i++)fEvtCutList[i]=0x0;
- for(Int_t i=0;i<kNPartSel;i++)fPartCutList[i]=0x0;
- fhQABits=new TBits(0);
}
//_____________________________________________________________________________
AliCFManager::AliCFManager(Char_t* name, Char_t* title) :
TNamed(name,title),
+ fNStepEvt(0),
+ fNStepPart(0),
fEvtContainer(0x0),
fPartContainer(0x0),
- fhQABits(0x0)
- {
+ fEvtCutList(0x0),
+ fPartCutList(0x0)
+{
//
// ctor
//
- for(Int_t i=0;i<kNEvtSel;i++)fEvtCutList[i]=0x0;
- for(Int_t i=0;i<kNPartSel;i++)fPartCutList[i]=0x0;
- fhQABits=new TBits(0);
}
//_____________________________________________________________________________
AliCFManager::AliCFManager(const AliCFManager& c) :
TNamed(c),
+ fNStepEvt(c.fNStepEvt),
+ fNStepPart(c.fNStepPart),
fEvtContainer(c.fEvtContainer),
fPartContainer(c.fPartContainer),
- fhQABits(c.fhQABits)
- {
+ fEvtCutList(c.fEvtCutList),
+ fPartCutList(c.fPartCutList)
+{
//
//copy ctor
//
- for(Int_t i=0;i<kNEvtSel;i++)fEvtCutList[i]=c.fEvtCutList[i];
- for(Int_t i=0;i<kNPartSel;i++)fPartCutList[i]=c.fPartCutList[i];
- }
+}
//_____________________________________________________________________________
AliCFManager& AliCFManager::operator=(const AliCFManager& c)
{
if (this != &c) {
TNamed::operator=(c) ;
}
-
+
+ this->fNStepEvt=c.fNStepEvt;
+ this->fNStepPart=c.fNStepPart;
this->fEvtContainer=c.fEvtContainer;
this->fPartContainer=c.fPartContainer;
- this->fhQABits=c.fhQABits;
- for(Int_t i=0;i<kNEvtSel;i++)this->fEvtCutList[i]=c.fEvtCutList[i];
- for(Int_t i=0;i<kNPartSel;i++)this->fPartCutList[i]=c.fPartCutList[i];
+ this->fEvtCutList=c.fEvtCutList;
+ this->fPartCutList=c.fPartCutList;
return *this ;
}
//
//dtor
//
- if(fhQABits) delete fhQABits;
}
//_____________________________________________________________________________
// check whether object obj passes particle-level selection isel
//
- if(isel>=kNPartSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNPartSel));
- return kTRUE;
+ if(isel>=fNStepPart){
+ AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepPart));
+ return kTRUE;
}
if(!fPartCutList[isel])return kTRUE;
TObjArrayIter iter(fPartCutList[isel]);
// check whether object obj passes event-level selection isel
//
- if(isel>=kNEvtSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNEvtSel));
+ if(isel>=fNStepEvt){
+ AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepEvt));
return kTRUE;
}
if(!fEvtCutList[isel])return kTRUE;
}
//_____________________________________________________________________________
-void AliCFManager::FillQABeforeParticleCuts(Int_t isel, TObject *obj) const{
- //
- // Fill QA histos before cuts at particle selection level isel are applied
- //
+void AliCFManager::SetMCEventInfo(const TObject *obj) const {
- if(isel>=kNPartSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNPartSel));
- return;
- }
- if(!fPartCutList[isel])return;
+ //Particle level cuts
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->FillHistogramsBeforeCuts(obj);
+ if (!fPartCutList) {
+ AliWarning("No particle cut list found");
}
-}
-//_____________________________________________________________________________
-void AliCFManager::FillQAAfterParticleCuts(Int_t isel, TObject *obj) const{
- //
- // Fill QA histos after cuts at particle selection level isel are applied
- //
- if(isel>=kNPartSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNPartSel));
- return;
+ else {
+ for(Int_t isel=0;isel<fNStepPart; isel++){
+ if(!fPartCutList[isel])continue;
+ TObjArrayIter iter(fPartCutList[isel]);
+ AliCFCutBase *cut = 0;
+ while ( (cut = (AliCFCutBase*)iter.Next()) ) {
+ cut->SetMCEventInfo(obj);
+ }
+ }
}
- if(!fPartCutList[isel])return;
-
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->FillHistogramsAfterCuts(obj);
+
+ //Event level cuts
+
+ if (!fEvtCutList) {
+ AliWarning("No event cut list found");
+ }
+ else {
+ for(Int_t isel=0;isel<fNStepEvt; isel++){
+ if(!fEvtCutList[isel])continue;
+ TObjArrayIter iter(fEvtCutList[isel]);
+ AliCFCutBase *cut = 0;
+ while ( (cut = (AliCFCutBase*)iter.Next()) ) {
+ cut->SetMCEventInfo(obj);
+ }
+ }
}
}
-
//_____________________________________________________________________________
-void AliCFManager::FillQABeforeEventCuts(Int_t isel, TObject *obj) const{
- //
- // Fill QA histos before cuts at event selection level isel are applied
- //
+void AliCFManager::SetRecEventInfo(const TObject *obj) const {
- if(isel>=kNEvtSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNEvtSel));
- return;
- }
- if(!fEvtCutList[isel])return;
+ //Particle level cuts
- TObjArrayIter iter(fEvtCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->FillHistogramsBeforeCuts(obj);
+ if (!fPartCutList) {
+ AliWarning("No particle cut list found");
}
-}
-
-//_____________________________________________________________________________
-void AliCFManager::FillQAAfterEventCuts(Int_t isel, TObject *obj) const{
- //
- // Fill QA histos after cuts at event selection level isel are applied
- //
-
- if(isel>=kNEvtSel){
- AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,kNEvtSel));
- return;
+ else {
+ for(Int_t isel=0;isel<fNStepPart; isel++){
+ if(!fPartCutList[isel])continue;
+ TObjArrayIter iter(fPartCutList[isel]);
+ AliCFCutBase *cut = 0;
+ while ( (cut = (AliCFCutBase*)iter.Next()) ) {
+ cut->SetRecEventInfo(obj);
+ }
+ }
}
- if(!fEvtCutList[isel])return;
-
- TObjArrayIter iter(fEvtCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->FillHistogramsAfterCuts(obj);
+
+ //Event level cuts
+
+ if (!fEvtCutList) {
+ AliWarning("No event cut list found");
+ }
+ else {
+ for(Int_t isel=0;isel<fNStepEvt; isel++){
+ if(!fEvtCutList[isel])continue;
+ TObjArrayIter iter(fEvtCutList[isel]);
+ AliCFCutBase *cut = 0;
+ while ( (cut = (AliCFCutBase*)iter.Next()) ) {
+ cut->SetRecEventInfo(obj);
+ }
+ }
}
}
//_____________________________________________________________________________
-void AliCFManager::AddQAHistosToList(TList *list) const {
+Bool_t AliCFManager::CompareStrings(const TString &cutname,const TString &selcuts) const{
//
- // Add to list the full list of QA histograms to be written to the output
+ // compare two strings
//
- for(Int_t isel=0;isel<kNPartSel; isel++){
- if(!fPartCutList[isel])continue;
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->AddQAHistograms(list);
- }
- }
+ if(selcuts.Contains("all"))return kTRUE;
+ if ( selcuts.CompareTo(cutname) == 0 ||
+ selcuts.BeginsWith(cutname+" ") ||
+ selcuts.EndsWith(" "+cutname) ||
+ selcuts.Contains(" "+cutname+" ")) return kTRUE;
+ return kFALSE;
+}
- //Event-level cuts QA
- for(Int_t isel=0;isel<kNEvtSel; isel++){
- if(!fEvtCutList[isel])continue;
- TObjArrayIter iter(fEvtCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->AddQAHistograms(list);
- }
- }
-}
//_____________________________________________________________________________
-TBits* AliCFManager::GetQAParticleSelBits(Int_t isel, TObject *obj) {
+void AliCFManager::SetEventCutsList(Int_t isel, TObjArray* array) {
//
- // Get the full list of QA histograms to be written to the output
+ //Setter for event-level selection cut list at selection step isel
//
- fhQABits->Clear(); //reset the list
-
- //Particle-level cuts QA
-
- if(fPartCutList[isel]){
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn()){
- TBits *qalist=new TBits(0);
- cut->GetBitMap(obj,qalist);
- for(UInt_t icut=0;icut<qalist->GetNbits();icut++){
- fhQABits->SetBitNumber(icut,qalist->TestBitNumber(icut));
- }
- delete qalist;
- }
- }
+ if (!fEvtContainer) {
+ AliWarning("No event container defined, you may need to set it first!");
}
- return fhQABits;
+ Int_t nstep = fNStepEvt;
+ if (!fEvtCutList) {
+ fEvtCutList = new TObjArray*[nstep] ;
+ for (Int_t i=0; i<nstep; ++i) fEvtCutList[i] = 0;
+ }
+ if (isel >= nstep) {
+ AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
+ return;
+ }
+ fEvtCutList[isel] = array;
}
//_____________________________________________________________________________
-void AliCFManager::SetEventInfo(TObject *obj) const {
-
- //Particle level cuts
+void AliCFManager::SetParticleCutsList(Int_t isel, TObjArray* array) {
+ //
+ //Setter for particle-level selection cut list at selection step isel
+ //
- for(Int_t isel=0;isel<kNPartSel; isel++){
- if(!fPartCutList[isel])continue;
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- cut->SetEvtInfo(obj);
- }
+ if (!fPartContainer) {
+ AliWarning("No particle container defined, you may need to set it first!");
}
- //Event level cuts
-
- for(Int_t isel=0;isel<kNEvtSel; isel++){
- if(!fEvtCutList[isel])continue;
- TObjArrayIter iter(fEvtCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- cut->SetEvtInfo(obj);
- }
- }
-}
-//_____________________________________________________________________________
-void AliCFManager::InitQAHistos() const {
-
- //Particle level cuts
-
- for(Int_t isel=0;isel<kNPartSel; isel++){
- if(!fPartCutList[isel])continue;
- TObjArrayIter iter(fPartCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->Init();
- }
+ Int_t nstep = fNStepPart ;
+
+ if (!fPartCutList) {
+ fPartCutList = new TObjArray*[nstep] ;
+ for (Int_t istep = 0; istep < nstep; istep++) fPartCutList[istep] = 0;
}
- //Event level cuts
-
- for(Int_t isel=0;isel<kNEvtSel; isel++){
- if(!fEvtCutList[isel])continue;
- TObjArrayIter iter(fEvtCutList[isel]);
- AliCFCutBase *cut = 0;
- while ( (cut = (AliCFCutBase*)iter.Next()) ) {
- if(cut->IsQAOn())cut->Init();
- }
+ if (isel >= nstep) {
+ AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
+ return;
}
+ fPartCutList[isel] = array;
}
-
-//_____________________________________________________________________________
-Bool_t AliCFManager::CompareStrings(const TString &cutname,const TString &selcuts) const{
- //
- // compare two strings
- //
-
- if(selcuts.Contains("all"))return kTRUE;
- if ( selcuts.CompareTo(cutname) == 0 ||
- selcuts.BeginsWith(cutname+" ") ||
- selcuts.EndsWith(" "+cutname) ||
- selcuts.Contains(" "+cutname+" ")) return kTRUE;
- return kFALSE;
-}
-
-