, fPlugins(0)
, fFillSignalOnly(kTRUE)
, fFillNoCuts(kFALSE)
- , fUseFlagAOD(kTRUE)
+ , fUseFilterAOD(kTRUE)
, fApplyCutAOD(kFALSE)
- , fFlags(1<<4)
+ , fFilter(1<<4)
, fBackGroundFactorApply(kFALSE)
, fRemovePileUp(kFALSE)
, fIdentifiedAsPileUp(kFALSE)
, fHistSECVTX(NULL)
, fHistELECBACKGROUND(NULL)
, fQACollection(NULL)
+ , fQAAODCollection(NULL)
{
//
// Dummy constructor
, fPlugins(0)
, fFillSignalOnly(kTRUE)
, fFillNoCuts(kFALSE)
- , fUseFlagAOD(kTRUE)
+ , fUseFilterAOD(kTRUE)
, fApplyCutAOD(kFALSE)
- , fFlags(1<<4)
+ , fFilter(1<<4)
, fBackGroundFactorApply(kFALSE)
, fRemovePileUp(kFALSE)
, fIdentifiedAsPileUp(kFALSE)
, fHistSECVTX(NULL)
, fHistELECBACKGROUND(NULL)
, fQACollection(0x0)
+ , fQAAODCollection(NULL)
{
//
// Default constructor
, fPlugins(0)
, fFillSignalOnly(ref.fFillSignalOnly)
, fFillNoCuts(ref.fFillNoCuts)
- , fUseFlagAOD(ref.fUseFlagAOD)
+ , fUseFilterAOD(ref.fUseFilterAOD)
, fApplyCutAOD(ref.fApplyCutAOD)
- , fFlags(ref.fFlags)
+ , fFilter(ref.fFilter)
, fBackGroundFactorApply(ref.fBackGroundFactorApply)
, fRemovePileUp(ref.fRemovePileUp)
, fIdentifiedAsPileUp(ref.fIdentifiedAsPileUp)
, fHistSECVTX(NULL)
, fHistELECBACKGROUND(NULL)
, fQACollection(NULL)
+ , fQAAODCollection(NULL)
{
//
// Copy Constructor
target.fPlugins = fPlugins;
target.fFillSignalOnly = fFillSignalOnly;
target.fFillNoCuts = fFillNoCuts;
- target.fUseFlagAOD = fUseFlagAOD;
+ target.fUseFilterAOD = fUseFilterAOD;
target.fApplyCutAOD = fApplyCutAOD;
- target.fFlags = fFlags;
+ target.fFilter = fFilter;
target.fBackGroundFactorApply = fBackGroundFactorApply;
target.fRemovePileUp = fRemovePileUp;
target.fIdentifiedAsPileUp = fIdentifiedAsPileUp;
target.fHistSECVTX = fHistSECVTX;
target.fHistELECBACKGROUND = fHistELECBACKGROUND;
target.fQACollection = fQACollection;
+ target.fQAAODCollection = fQAAODCollection;
}
//____________________________________________________________
// Called once per worker
//
AliDebug(3, "Creating Output Objects");
+
+ // Make lists for Output
+ if(!fQA) fQA = new TList;
+ fQA->SetOwner();
+ if(!fOutput) fOutput = new TList;
+ fOutput->SetOwner();
+
// Automatic determination of the analysis mode
AliVEventHandler *inputHandler = dynamic_cast<AliVEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
if(!TString(inputHandler->IsA()->GetName()).CompareTo("AliAODInputHandler")){
}
printf("Analysis Mode: %s Analysis\n", IsAODanalysis() ? "AOD" : "ESD");
if(IsAODanalysis()) {
- printf("AOD filter: %s \n", fUseFlagAOD ? "Yes" : "No");
- if(fUseFlagAOD) printf("AOD filter used: %lu \n", fFlags);
+ printf("AOD filter: %s \n", fUseFilterAOD ? "Yes" : "No");
+ if(fUseFilterAOD) printf("AOD filter used: %d \n", fFilter);
+ // First Part: Make QA histograms
+ fQAAODCollection = new AliHFEcollection("TaskQAAOD", "QA histos from the AOD Electron Task");
+ fQAAODCollection->CreateTH1F("Filterorigin", "AOD filter of tracks at the origin", 21, -1, 20);
+ fQAAODCollection->CreateTH1F("Filterend", "AOD filter of tracks after all cuts", 21, -1, 20);
+ fQA->Add(fQAAODCollection);
}
printf("MC Data available %s\n", HasMCData() ? "Yes" : "No");
fTriggerAnalysis->EnableHistograms();
fTriggerAnalysis->SetAnalyzeMC(HasMCData());
-
- // Make lists for Output
- if(!fQA) fQA = new TList;
- fQA->SetOwner();
- if(!fOutput) fOutput = new TList;
- fOutput->SetOwner();
-
// First Part: Make QA histograms
fQACollection = new AliHFEcollection("TaskQA", "QA histos from the Electron Task");
fQACollection->CreateTH1F("nElectronTracksEvent", "Number of Electron Candidates", 100, 0, 100);
for(Int_t itrack = 0; itrack < fAOD->GetNumberOfTracks(); itrack++){
track = fAOD->GetTrack(itrack); mctrack = NULL;
if(!track) continue;
- if(fUseFlagAOD){
- if(track->GetFlags() != fFlags) continue; // Only process AOD tracks where the HFE is set
+ // Begining
+ Bool_t passone = kFALSE;
+ fQAAODCollection->Fill("Filterorigin", -1);
+ for(Int_t k=0; k<20; k++) {
+ Int_t u = 1<<k;
+ if((track->TestFilterBit(u))) {
+ fQAAODCollection->Fill("Filterorigin", k);
+ passone = kTRUE;
+ }
}
- //printf("Pass the flag\n");
+ //if(!passone) printf("what is the filter %d\n",track->GetFilterMap());
+ if(fUseFilterAOD){
+ //printf("Filter of the track %d\n",track->GetFilterMap());
+ if(!(track->TestFilterBit(fFilter))) continue; // Only process AOD tracks where the HFE is set
+ }
+ //printf("Pass the flag\n");
+
signal = kTRUE;
if(HasMCData()){
}
if(fApplyCutAOD) {
+ //printf("Apply cuts\n");
// RecKine: ITSTPC cuts
if(!ProcessCutStep(AliHFEcuts::kStepRecKineITSTPC, track)) continue;
fPID->SetVarManager(fVarManager);
if(!fPID->IsSelected(&hfetrack, fContainer, "recTrackCont", fPIDqa)) continue; // we will do PID here as soon as possible
-
+ // end AOD QA
+ fQAAODCollection->Fill("Filterend", -1);
+ for(Int_t k=0; k<20; k++) {
+ Int_t u = 1<<k;
+ if((track->TestFilterBit(u))) {
+ fQAAODCollection->Fill("Filterend", k);
+ }
+ }
+
// Apply weight for background contamination
//Double_t weightBackGround = 1.0;
if(signal) {
void SetFillSignalOnly(Bool_t signalOnly) { fFillSignalOnly = signalOnly; }
void SetFillNoCuts(Bool_t fillNoCuts) { fFillNoCuts = fillNoCuts; }
- void SetUseFlagAOD(Bool_t useFlagAOD) { fUseFlagAOD = useFlagAOD; }
- void SetApplyCutAOD(Bool_t applyCutAOD) { fApplyCutAOD = applyCutAOD; }
- void SetFlags(ULong_t flags) { fFlags = flags; }
+ void SetUseFilterAOD(Bool_t useFilterAOD) { fUseFilterAOD = useFilterAOD; }
+ void SetApplyCutAOD(Bool_t applyCutAOD) { fApplyCutAOD = applyCutAOD; }
+ void SetFilter(UInt_t filter) { fFilter = filter; }
void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
void SetPIDPreselect(AliHFEpid * const cuts) { fPIDpreselect = cuts; };
void SetAODAnalysis() { SetBit(kAODanalysis, kTRUE); };
UShort_t fPlugins; // Enabled Plugins
Bool_t fFillSignalOnly; // Fill container only with MC Signal Tracks
Bool_t fFillNoCuts; // Fill container before any cut
- Bool_t fUseFlagAOD; // Use the preselected AOD track
+ Bool_t fUseFilterAOD; // Use the preselected AOD track
Bool_t fApplyCutAOD; // Apply the analysis cut for AOD tracks
- ULong_t fFlags; // reconstruction AOD status flags
+ UInt_t fFilter; // filter AOD status
Bool_t fBackGroundFactorApply; // Apply Background Function Subtraction, MF: To be removed when transition to OADB container is finished
Bool_t fRemovePileUp; // Remove Pile Up
Bool_t fIdentifiedAsPileUp; // Identified as pile-up
TList *fHistSECVTX; //! Output container for sec. vertexing results
TList *fHistELECBACKGROUND; //! Output container for electron background analysis
AliHFEcollection *fQACollection; //! Tasks own QA collection
+ AliHFEcollection *fQAAODCollection; //! Task own QA AOD collection
//---------------------------------------
ClassDef(AliAnalysisTaskHFE, 2) // The electron Analysis Task
-AliAnalysisTask *AddTaskHFEtpctof(Bool_t isMC,Bool_t kAnalyseTaggedTracks = kFALSE, Bool_t kMCQA = kFALSE, Bool_t kDEStep = kFALSE, Long_t aodfilter=-1, Int_t tpcCls=110, Int_t tpcClsPID = 70, Int_t itsCls=4, Double_t dcaxy=1.0, Double_t dcaz=2.0, Double_t tpcs=0., Double_t tpcu=3., Double_t tofs=3., Double_t ipSig=3.0, Bool_t prodcut = kFALSE, Bool_t ipAbs = kFALSE, Int_t itspixelcut=AliHFEextraCuts::kBoth, Bool_t withetacorrection=kFALSE, TString listname="", Int_t ptbin=0){
+AliAnalysisTask *AddTaskHFEtpctof(Bool_t isMC,Bool_t kAnalyseTaggedTracks = kFALSE, Bool_t kMCQA = kFALSE, Bool_t kDEStep = kFALSE, Int_t aodfilter=-1, Int_t tpcCls=110, Int_t tpcClsPID = 70, Int_t itsCls=4, Double_t dcaxy=1.0, Double_t dcaz=2.0, Double_t tpcs=0., Double_t tpcu=3., Double_t tofs=3., Double_t ipSig=3.0, Bool_t prodcut = kFALSE, Bool_t ipAbs = kFALSE, Int_t itspixelcut=AliHFEextraCuts::kAny, Bool_t withetacorrection=kFALSE, TString listname="", Int_t ptbin=0){
// libraries in case
gSystem->Load("libANALYSIS.so");
if (inputDataType == "AOD"){
task->SetAODAnalysis();
task->SetFillNoCuts(kTRUE);
- task->SetUseFlagAOD(kFALSE);
+ //task->SetUseFilterAOD(kFALSE);
task->SetApplyCutAOD(kTRUE);
}
task->SelectCollisionCandidates();
-AliAnalysisTask *AddTaskHFEtpctofPbPb(Bool_t beauty=kTRUE, Int_t tpcCls=110, Int_t tpcClsPID = 70, Double_t tpcClsRatio = 0.6, Double_t tpcClShared = 0.1, Int_t itsCls=4, Double_t itsChi2PerClusters=36., Double_t dcaxy=1.0, Double_t dcaz=2.0, Double_t tofs=3., Double_t ipSig=3.0, Bool_t syst = kFALSE, Int_t itspixelcut=AliHFEextraCuts::kBoth, Float_t prodlow=0., Float_t prodhigh=100., Int_t addflag=0.,Int_t etacor){
+AliAnalysisTask *AddTaskHFEtpctofPbPb(Bool_t isMC,Int_t aodfilter=-1, Int_t tpcCls=110, Int_t tpcClsPID = 70, Double_t tpcClsRatio = 0.6, Double_t tpcClShared = 0.1, Int_t itsCls=4,Double_t itsChi2PerClusters=36.,Int_t itspixelcut=AliHFEextraCuts::kAny, Double_t dcaxy=1.0, Double_t dcaz=2.0, Double_t tofs=3., Double_t ipSig=3.0, Float_t prodlow=0., Float_t prodhigh=100., Bool_t beauty=kTRUE,Bool_t kMCQA = kFALSE, Bool_t kDEStep = kFALSE, Int_t addflag=0,Int_t etacor=0,TString listname="",){
// libraries in case
gSystem->Load("libANALYSIS.so");
//set config file name
TString configFile("$ALICE_ROOT/PWGHF/hfe/macros/configs/PbPb/ConfigHFEpbpb.C");
- //TString configFile("/d/alice12/bailhache/AliRootInstallations/07_06_2012/AliRoot/PWGHF/hfe/macros/configs/PbPb/ConfigHFEpbpb.C");
+ //TString configFile("/d/alice12/bailhache/AliRootInstallations/11_09_2012/AliRoot/PWGHF/hfe/macros/configs/PbPb/ConfigHFEpbpb.C");
TString checkconfig="ConfigHFEpbpb";
if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
gROOT->LoadMacro(configFile.Data());
- TString appendix(TString::Format("TPC%dpid%dClShared%dratio%dITS%dITSChi%dITScut%dDCAr%dz%dIP%dTOF%dProdlow%dProdhigh%daddflag%ietacor%i",
- tpcCls,tpcClsPID,(Int_t)(tpcClShared*100),(Int_t)(tpcClsRatio*100),itsCls,(Int_t)itsChi2PerClusters,itspixelcut,(Int_t)dcaxy,(Int_t)dcaz,(Int_t)ipSig,(Int_t)(tofs*10),(Int_t)prodlow,(Int_t)prodhigh,addflag,etacor));
+
+ // Name of the directory
+ Int_t itpcClsRatio = (Int_t) tpcClsRatio*10;
+ Int_t itpcClShared = (Int_t) tpcClShared*10;
+ Int_t iitsChi2PerClusters = (Int_t) itsChi2PerClusters*10;
+ Int_t idcaxy = (Int_t) dcaxy*10;
+ Int_t idcaz = (Int_t) dcaz*10;
+ Int_t itofs = (Int_t) tofs*10;
+ Int_t iipSig = (Int_t) ipSig;
+ Int_t iprodlow = (Int_t) prodlow;
+ Int_t iprodhigh = (Int_t) prodhigh*10;
+ Int_t ibeauty = 0;
+ Int_t iMCQA = 0;
+ Int_t iDEStep = 0;
+ if(beauty) ibeauty = 1;
+ if(kMCQA) iMCQA = 1;
+ if(kDEStep) iDEStep = 1;
+
+
+ TString appendix(TString::Format("a%dT%dTP%dTR%dTS%dI%dIC%dIp%dDCAx%dz%dTOF%dIP%dprodL%dH%dB%dM%dD%da%de%d",aodfilter,tpcCls,tpcClsPID,itpcClsRatio,itpcClShared,itsCls,iitsChi2PerClusters,itspixelcut,idcaxy,idcaz,itofs,iipSig,iprodlow,iprodhigh,ibeauty,iMCQA,iDEStep,addflag,etacor));
printf("appendix %s\n", appendix.Data());
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
// Check the analysis type using the event handlers connected to the analysis manager.
//==============================================================================
if (!mgr->GetInputEventHandler()) {
- ::Error("AddTaskEventplane", "This task requires an input event handler");
+ printf("AddTaskEventplane", "This task requires an input event handler");
return NULL;
}
TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
- AliAnalysisTaskHFE *task = ConfigHFEpbpb(kFALSE,beauty,tpcCls,tpcClsPID,tpcClsRatio,tpcClShared,itsCls,itsChi2PerClusters,dcaxy,dcaz,tofs,ipSig,itspixelcut,appendix,prodlow,prodhigh,addflag,0,etacor);
+ AliAnalysisTaskHFE *task = ConfigHFEpbpb(isMC,appendix,aodfilter,tpcCls,tpcClsPID,tpcClsRatio,tpcClShared,itsCls,itsChi2PerClusters,itspixelcut,dcaxy,dcaz,tofs,ipSig,prodlow,prodhigh,beauty,kMCQA,kDEStep,addflag,0,etacor,listname);
if (inputDataType == "AOD"){
task->SetFillNoCuts(kTRUE);
- task->SetUseFlagAOD(kFALSE);
task->SetApplyCutAOD(kTRUE);
}
containerName += appendix.Data();
AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
- mgr->ConnectOutput(task,1, mgr->CreateContainer(Form("HFEtpctof_%s", appendix.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data()));
+ mgr->ConnectOutput(task,1, mgr->CreateContainer(Form("HFE_Results_%s", appendix.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data()));
+ mgr->ConnectOutput(task,2, mgr->CreateContainer(Form("HFE_QA_%s", appendix.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data()));
mgr->ConnectInput(task,0, cinput );
return NULL;
-TF1* GetEtaCorrection(){
- TString list=gSystem->Getenv("LIST");
-
+TF1* GetEtaCorrection(TString listname){
+
TString etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
for (Int_t i=0; i<keys->GetEntries(); ++i){
TString kName=keys->At(i)->GetName();
TPRegexp reg(kName);
- if (reg.MatchB(list)){
+ if (reg.MatchB(listname)){
printf("Using Eta Correction Function: %s\n",kName.Data());
return (TF1*)f.Get(kName.Data());
}
}
-AliAnalysisTaskHFE* ConfigHFEpbpb(Bool_t useMC=kFALSE, Bool_t beauty=kFALSE,
+AliAnalysisTaskHFE* ConfigHFEpbpb(Bool_t useMC=kFALSE,
+ TString appendix,
+ Int_t aodfilter=-1,
UChar_t TPCcl=70, UChar_t TPCclPID = 80,
Double_t TPCclRatio = 0.6, Double_t TPCclshared = 1.1,
UChar_t ITScl=3, Double_t ITSchi2perclusters=99999999.,
+ Int_t itspixelcut=AliHFEextraCuts::kFirst,
Double_t dcaxy=1.0, Double_t dcaz=2.0,
- Double_t TOFs=3.,Double_t IpSig=3., Int_t itspixelcut=AliHFEextraCuts::kFirst, TString appendix,
- Float_t prodlow=0., Float_t prodhigh=100., Int_t addflag=0., Int_t ptbin=0, Int_t etacor=0,
+ Double_t TOFs=3.,
+ Double_t IpSig=3.,
+ Float_t prodlow=0., Float_t prodhigh=100.,
+ Bool_t beauty=kFALSE,
+ Bool_t kMCQA = kFALSE,
+ Bool_t kDEStep = kFALSE,
+ Int_t addflag=0, Int_t ptbin=0,
+ Int_t etacor=0, TString listname="",
Int_t nondefaultcentr=0, Float_t* arraycentr=NULL,
Double_t* tpcdEdxcut=NULL,Double_t tpcu=3.0){
//
task->SetPbPbAnalysis(kTRUE);
task->SetRemovePileUp(kFALSE);
task->GetPIDQAManager()->SetHighResolutionHistos();
+ if(useMC) task->SetHasMCData(kTRUE); // necessary for AOD
+ printf("AOD filter %d On/OFF?\n",aodfilter);
+ if(aodfilter > 0) {
+ printf("ON AOD filter %d\n",aodfilter);
+ task->SetUseFilterAOD(kTRUE);
+ task->SetFilter(aodfilter);
+ }
if((nondefaultcentr!=0) && arraycentr) {
{
// Apply eta correction
AliHFEpidTPC *tpcpid = pid->GetDetPID(AliHFEpid::kTPCpid);
- TF1 *etacorrection = GetEtaCorrection();
+ TF1 *etacorrection = GetEtaCorrection(listname);
if(etacorrection) tpcpid->SetEtaCorrection(etacorrection);
}
// QA
task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
//task->SetFillSignalOnly(kFALSE); // for DE pluging for MC
- task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
+ if(kMCQA) task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
//task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
//task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
- task->SwitchOnPlugin(AliAnalysisTaskHFE::kDEstep);
+ if(kDEStep) task->SwitchOnPlugin(AliAnalysisTaskHFE::kDEstep);
if(useMC && addflag==1) task->SetDebugStreaming();
task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral);
task->SetRemovePileUp(kTRUE);
task->GetPIDQAManager()->SetHighResolutionHistos();
if(useMC) task->SetHasMCData(kTRUE); // necessary for AOD
+ printf("AOD filter %d On/OFF?\n",aodfilter);
if(aodfilter > 0) {
- task->SetUseFlagAOD(kTRUE);
- task->SetFlags(aodfilter);
+ printf("ON AOD filter %d\n",aodfilter);
+ task->SetUseFilterAOD(kTRUE);
+ task->SetFilter(aodfilter);
}