+++ /dev/null
-AliAnalysisTask *AddTask_jbook_JPsi(TString config="1",
- TString cfg="ConfigJpsi_jb_PbPb.C",
- Bool_t gridconf=kFALSE,
- Bool_t hasMC=kFALSE,
- ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB,
- Bool_t bMultiToSingle=kTRUE){
-
- //get the current analysis manager
- AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
- if (!mgr) {
- Error("AddTask_jbook_JPsi", "No analysis manager found.");
- return 0;
- }
-
- //Do we have an MC handler?
- TString list = gSystem->Getenv("LIST");
- if(!list.IsNull()) {
- if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
- if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
- }
-
- //Do we have an AOD handler?
- Bool_t isAOD=(mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class() ? kTRUE : kFALSE);
-
- // set AOD debug levels
- if(isAOD) {
- mgr->AddClassDebug("AliAODTrack", AliLog::kFatal);
- mgr->AddClassDebug("AliAODpidUtil", AliLog::kInfo);
- }
-
- //set config file name
- TString configFile("");
- printf("%s \n",gSystem->pwd());
- TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
- if(cfg.IsNull()) cfg="ConfigJpsi_jb_PbPb.C";
-
- // the different paths
- TString gsiPath("$TRAIN_ROOT/jbook_jpsi/");
- TString alienPath("alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/macrosJPSI/");
- TString alirootPath("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/");
-
- ////////// >>>>>>>>>> gsi config
- if (!trainRoot.IsNull()) configFile=gsiPath.Data();
- ////////// >>>>>>>>>> alien config
- else if(!gSystem->Exec(Form("alien_cp %s/%s .",alienPath.Data(),cfg.Data()))) {
- gSystem->Exec(Form("ls -l %s",gSystem->pwd()));
- configFile=gSystem->pwd();
- }
- else {
- printf("ERROR: couldn't copy file %s/%s from grid \n", alienPath.Data(),cfg.Data() );
- return;
- }
- ///////// >>>>>>>>> aliroot config
- if(!gridconf && trainRoot.IsNull()) configFile=alirootPath.Data();
- ///////// add config to path
- configFile+="/";
- configFile+=cfg.Data();
-
- // trigger selection
- ULong64_t triggerSets[]={AliVEvent::kCentral , AliVEvent::kSemiCentral , AliVEvent::kMB,
- AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB};
- const char* triggerNames[]={"Central","SemiCentral","MB","ALL"};
- const char* onlineRejection[]={"","CCENT","",""};
-
- // find out the configured triggers
- Int_t j=0;
- for(j=0; j<4; j++) {
- if(triggers!=triggerSets[j]) continue;
- else break;
- }
-
- // print overall configuration
- printf("production: %s MC: %d \n", list.Data(),hasMC);
- printf("triggers: %s \n", triggerNames[j] );
- printf("config: %s Grid: %d \n",configFile.Data(),gridconf);
-
- //create task(s)
- AliAnalysisTaskMultiDielectron *task;
- if(!bMultiToSingle) {
- // create one multi task
- task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB"));
- task->SetBeamEnergy(1380.);
- task->SetTriggerMask(triggers);
- if(strlen(onlineRejection[j])) task->SetFiredTriggerName(onlineRejection[j],kTRUE);
- if(!hasMC) task->UsePhysicsSelection();
- }
-
- // event filter
- AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("vertex","vertex");
- if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
- eventCuts->SetRequireVertex();
- eventCuts->SetMinVtxContributors(1);
- if(hasMC) eventCuts->SetVertexZ(-10.,+10.); //for data this is done by in the config
- eventCuts->SetCentralityRange(0,90.);
- eventCuts->Print();
- if(!bMultiToSingle) task->SetEventFilter(eventCuts);
-
- //load dielectron configuration file (only once)
- TString checkconfig="ConfigJpsi_jb_PbPb";
- if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
- gROOT->LoadMacro(configFile.Data());
-
- //define default output container
- TString containerName = "JPSI.root";
-
- //add dielectron analysis with different cuts to the task
- for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
-
- //only configs switched ON will pass
- if(config.Length()<=i || config(i,1)!="1") { printf(" %d switched OFF \n",i); continue; }
-
- // load configuration
- AliDielectron *jpsi=ConfigJpsi_jb_PbPb(i,hasMC,triggers);
- if(!jpsi) continue;
-
- // create unique title
- TString unitit = Form("%s_%s",triggerNames[j],jpsi->GetName());
-
- // create single tasks instead of one multi task (decreasing size of CF container)
- if(bMultiToSingle) {
- task = new AliAnalysisTaskMultiDielectron(Form("MultiDieJB_%s",unitit.Data()));
- task->SetBeamEnergy(1380.);
- task->SetTriggerMask(triggers);
- if(strlen(onlineRejection[j])) task->SetFiredTriggerName(onlineRejection[j],kTRUE);
- if(!hasMC) task->UsePhysicsSelection();
- }
-
- // add dielectron to the task and manager
- task->AddDielectron(jpsi);
-
- // multiple output connection
- if(bMultiToSingle) {
- task->SetEventFilter(eventCuts);
- mgr->AddTask(task);
-
- //create output sub containers
- unitit.Prepend("jbook_QA_");
- AliAnalysisDataContainer *cOutputHist1 =
- mgr->CreateContainer(unitit.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data());
- unitit.ReplaceAll("_QA_","_CF_");
- AliAnalysisDataContainer *cOutputHist2 =
- mgr->CreateContainer(unitit.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,containerName.Data());
- unitit.ReplaceAll("_CF_","_EventStat_");
- AliAnalysisDataContainer *cOutputHist3 =
- mgr->CreateContainer(unitit.Data(), TH1D::Class(), AliAnalysisManager::kOutputContainer,containerName.Data());
-
- mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
- // mgr->ConnectOutput(task, 0, coutput1 );
- mgr->ConnectOutput(task, 1, cOutputHist1);
- mgr->ConnectOutput(task, 2, cOutputHist2);
- mgr->ConnectOutput(task, 3, cOutputHist3);
- }
-
- printf(" %s added\n",jpsi->GetName());
-
- } //end : loop over configs
-
-
- // multiple output connection
- if(!bMultiToSingle) {
- mgr->AddTask(task);
-
- //create output sub containers
- AliAnalysisDataContainer *cOutputHist1 =
- mgr->CreateContainer("jbook_QA", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
- AliAnalysisDataContainer *cOutputHist2 =
- mgr->CreateContainer("jbook_CF", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
- AliAnalysisDataContainer *cOutputHist3 =
- mgr->CreateContainer("jbook_EventStat", TH1D::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
-
- mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
- // mgr->ConnectOutput(task, 0, coutput1 );
- mgr->ConnectOutput(task, 1, cOutputHist1);
- mgr->ConnectOutput(task, 2, cOutputHist2);
- mgr->ConnectOutput(task, 3, cOutputHist3);
- }
-
-
- return task;
-}