--- /dev/null
+AliAnalysisTask *AddTaskJPSIFilter(Bool_t storeLS = kTRUE, Bool_t hasMC_aod = kFALSE){
+ //get the current analysis manager
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTaskJPSIFilter", "No analysis manager found.");
+ return 0;
+ }
+
+ //check for output aod handler
+ if (!mgr->GetOutputEventHandler()||mgr->GetOutputEventHandler()->IsA()!=AliAODHandler::Class()) {
+ Warning("AddTaskJPSIFilter","No AOD output handler available. Not adding the task!");
+ return 0;
+ }
+
+ //Do we have an MC handler?
+ Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0)||hasMC_aod;
+
+ //Do we run on AOD?
+ Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
+
+ //gROOT->LoadMacro("$ALICE_ROOT/PWGDQ/dielectron/macros/ConfigBJpsi_ff_PbPbFilter.C");
+ gROOT->LoadMacro("ConfigBJpsi_ff_PbPbFilter.C");
+ AliDielectron *jpsi=ConfigBJpsi_ff_PbPbFilter(0,hasMC);
+
+ if(isAOD) {
+ //add options to AliAODHandler to duplicate input event
+ AliAODHandler *aodHandler = (AliAODHandler*)mgr->GetOutputEventHandler();
+ aodHandler->SetCreateNonStandardAOD();
+ aodHandler->SetNeedsHeaderReplication();
+ aodHandler->SetNeedsTOFHeaderReplication();
+ aodHandler->SetNeedsVZEROReplication();
+ /*aodHandler->SetNeedsTracksBranchReplication();
+ aodHandler->SetNeedsCaloClustersBranchReplication();
+ aodHandler->SetNeedsVerticesBranchReplication();
+ aodHandler->SetNeedsV0sBranchReplication();
+ aodHandler->SetNeedsCascadesBranchReplication();
+ aodHandler->SetNeedsTrackletsBranchReplication();
+ aodHandler->SetNeedsPMDClustersBranchReplication();
+ aodHandler->SetNeedsJetsBranchReplication();
+ aodHandler->SetNeedsFMDClustersBranchReplication();
+ //aodHandler->SetNeedsMCParticlesBranchReplication();
+ aodHandler->SetNeedsDimuonsBranchReplication();*/
+ if(hasMC) aodHandler->SetNeedsMCParticlesBranchReplication();
+ jpsi->SetHasMC(hasMC);
+ }
+
+ //Create task and add it to the analysis manager
+ AliAnalysisTaskDielectronFilter *task=new AliAnalysisTaskDielectronFilter("jpsi_DielectronFilter");
+ task->SetTriggerMask(AliVEvent::kMB+AliVEvent::kCentral+AliVEvent::kSemiCentral);
+ if (!hasMC) task->UsePhysicsSelection();
+
+ //Add event filter
+ AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
+ if(!hasMC) eventCuts->SetRequireVertex();
+ if (isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
+ eventCuts->SetMinVtxContributors(1);
+ eventCuts->SetVertexZ(-10.,10.);
+ eventCuts->SetCentralityRange(0.0,80.0);
+ task->SetEventFilter(eventCuts);
+
+ task->SetDielectron(jpsi);
+ if(storeLS) task->SetStoreLikeSignCandidates(storeLS);
+ task->SetStoreTrackLegs(kTRUE);
+ mgr->AddTask(task);
+
+ //----------------------
+ //create data containers
+ //----------------------
+
+
+ TString containerName = mgr->GetCommonFileName();
+ containerName += ":PWGDQ_dielectronFilter";
+
+ //create output container
+
+ AliAnalysisDataContainer *cOutputHist1 =
+ mgr->CreateContainer("jpsi_FilterQA",
+ THashList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ containerName.Data());
+
+ AliAnalysisDataContainer *cOutputHist2 =
+ mgr->CreateContainer("jpsi_FilterEventStat",
+ TH1D::Class(),
+ AliAnalysisManager::kOutputContainer,
+ containerName.Data());
+
+
+ mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(task, 1, cOutputHist1);
+ mgr->ConnectOutput(task, 2, cOutputHist2);
+
+ return task;
+}
--- /dev/null
+AliAnalysisTask *AddTask_jpsi_JPsiME(TString prod="",
+ Bool_t gridconf=kFALSE,
+ ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB) {
+
+ //get the current analysis manager
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ Error("AddTask_jpsi_JPsiME", "No analysis manager found.");
+ return 0;
+ }
+
+ //Do we have an MC handler?
+ Bool_t hasMC = kFALSE;
+ TString list = gSystem->Getenv("LIST");
+ if( list.IsNull()) list=prod;
+ 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 (!trainRoot.IsNull())
+ configFile="$TRAIN_ROOT/jbook_jpsi/ConfigJpsiME_jpsi_PbPb.C"; // gsi config
+ else if(!gSystem->Exec("alien_cp alien:///alice/cern.ch/user/j/jbook/PWGDQ/dielectron/macrosJPSI/ConfigJpsiME_jpsi_PbPb.C ."))
+ configFile=Form("%s/ConfigJpsiME_jpsi_PbPb.C",gSystem->pwd()); // alien config
+
+ if(!gridconf)
+ configFile="$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/ConfigJpsiME_jpsi_PbPb.C"; // aliroot config
+
+ //create task and add it to the manager
+ AliAnalysisTaskMultiDielectron *task;
+
+ // trigger selection
+ ULong64_t triggerSets[]={AliVEvent::kCentral , AliVEvent::kSemiCentral , AliVEvent::kMB,
+ AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB};
+ const char* triggerNames[]={"Central","SemiCentral","MB","MB+Cent+SemiCent"};
+
+ // find out the configured triggers
+ Int_t j=0;
+ for(j=0; j<4; j++) {
+ if(triggers!=triggerSets[j]) continue;
+ else break;
+ }
+
+ // print task 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);
+
+ task = new AliAnalysisTaskMultiDielectron((Form("MultiDieJB_%s",triggerNames[j])));
+ task->SetBeamEnergy(1380.);
+ task->SetTriggerMask(triggers);
+ if (!hasMC) task->UsePhysicsSelection();
+ mgr->AddTask(task);
+
+ //load dielectron configuration file
+ TString checkconfig="ConfigJpsiME_jpsi_PbPb";
+ if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data()))
+ gROOT->LoadMacro(configFile.Data());
+
+ //add dielectron analysis with different cuts to the task
+ for (Int_t i=0; i<nDie; ++i) { //nDie defined in config file
+ AliDielectron *jpsi=ConfigJpsiME_jpsi_PbPb(i,list,triggers);
+ if (jpsi ) task->AddDielectron(jpsi);
+ if (jpsi ) printf(" %s added\n",jpsi->GetName());
+ }
+
+ //create output container
+ AliAnalysisDataContainer *cOutputHist1 =
+ mgr->CreateContainer(Form("jpsiME_QA_%s",triggerNames[j]),
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("jpsiME_%s.root",triggerNames[j]));
+
+ AliAnalysisDataContainer *cOutputHist2 =
+ mgr->CreateContainer(Form("jpsiME_CF_%s",triggerNames[j]),
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("jpsiME_%s.root",triggerNames[j]));
+
+ AliAnalysisDataContainer *cOutputHist3 =
+ mgr->CreateContainer(Form("jpsiME_EventStat_%s",triggerNames[j]),
+ TH1D::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("jpsiME_%s.root",triggerNames[j]));
+
+ 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;
+}
return 0;
}
- if (mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class()){
- ::Info("AddTask_mwinn_JPsi", "Not used in AOD!!!");
- return 0;
- }
+ //Do we have an MC handler?
+ Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+
//Get the current train configuration
- //NOTE train config not there on grid, PbPb anyhow not used for correlations
- //TString trainConfig=gSystem->Getenv("CONFIG_FILE");
-
+ TString trainConfig=gSystem->Getenv("CONFIG_FILE");
+
//set config file name
- //for grid running: "$ALICE_ROOT/PWGDQ/dielectron/macros/ConfigJpsi2eeDebugTree.C"
- //for gsi running "$TRAIN_ROOT/jpsi_JPSI/ConfigJpsi2eeDebugTree.C"
- TString configFile("$ALICE_ROOT/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mw_pp.C");
- //NOTE train config not there on grid, PbPb anyhow not used for correlations
- //if ( trainConfig.Contains("PbPb") ) configFile="$TRAIN_ROOT/jpsi_JPSI/ConfigJpsi2eeDebugTreePbPb.C";
+ // TString configFile("$TRAIN_ROOT/mwinn_jpsiCorr/ConfigJpsi2eeData.C");
+ TString configFile("$ALICE_ROOT/PWGDQ/dielectron/macros/ConfigJpsi_mw_pPb.C");
+ //TString configFile("$TRAIN_ROOT/jpsi_JPSI/ConfigJpsiStandard.C");
+ // if ( trainConfig.Contains("PbPb") ) configFile="$TRAIN_ROOT/jpsi_JPSI/ConfigJpsi2eePbPb.C";
- //load dielectron configuration file
- gROOT->LoadMacro(configFile.Data());
+ //if (mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class()){
+ // ::Info("AddTaskJPSI", "Using AOD configuration");
+ // configFile="$TRAIN_ROOT/util/dielectron/dielectron/macros/ConfigJpsi2eeDataAOD.C";
+ // }
-
- //Do we have an MC handler?
- Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
-
+ TString list=gSystem->Getenv("LIST");
//create task and add it to the manager
- AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("mwinn_JPsi");
- if (!hasMC) task->UsePhysicsSelection();
- //NOTE trigger selection for EMCAL triggered data...
- task->SetTriggerMask(AliVEvent::kEMC7);
+ AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("MultiDieData");
+ if (!hasMC&&(!list.Contains("LHC12h")) ) task->UsePhysicsSelection();//taking out for testing
+ task->SelectCollisionCandidates(AliVEvent::kINT7); //kINT7?, MB-trigger for MB pPb
+ if (list.Contains("LHC11d")) task->SetTriggerMask(AliVEvent::kEMCEJE+AliVEvent::kEMC7+AliVEvent::kEMCEGA);
+ //if (list.Contains("LHC12h")) task->SetTRDtrigger(1+2);
mgr->AddTask(task);
+
- //load dielectron configuration file, already done before!
- //gROOT->LoadMacro(configFile.Data());
+ //load dielectron configuration file
+ gROOT->LoadMacro(configFile.Data());
//add dielectron analysis with different cuts to the task
- //NOTE: for 11d running just taking one single configuration, see configjpsi2eeDebugTree
+ cout << "!!!!!!!!!!!! nDie = " << nDie << endl;
for (Int_t i=0; i<nDie; ++i){ //nDie defined in config file
- AliDielectron *jpsi=ConfigJpsi_mw_pp(i);
- if(jpsi) {
- jpsi->SetDontClearArrays();
- task->AddDielectron(jpsi);
- }
+ AliDielectron *jpsi=ConfigJpsi_mw_pPb(i);
+ if (!jpsi) continue;
+ task->AddDielectron(jpsi);
+// printf("add: %s\n",jpsi->GetName());
}
-
//Add event filter
AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
- eventCuts->SetRequireVertex();
+ eventCuts->SetRequireVertex();//NOTE: all of these cuts can for some reasons not be applied to self-filtered AODs by mwinn in
+ //(list/hera/alice/mwinn/mwinn/train/lists/...)
eventCuts->SetMinVtxContributors(1);
eventCuts->SetVertexZ(-10.,10.);
- //NOTE train config not there on grid, PbPb anyhow not used for correlations
- // if ( trainConfig.Contains("PbPb") ) eventCuts->SetCentralityRange(40.,80.);
- task->SetEventFilter(eventCuts);
-
- // task->SetTriggerOnV0AND();
+// eventCuts->SetVertexType(AliDielectronEventCuts::kVtxTracksOrSPD);
+// eventCuts->SetRequireV0and();
+// if ( trainConfig=="PbPb" ){
+// eventCuts->SetCutOnMultipicityITSTPC();
+// }
+ task->SetEventFilter(eventCuts);
+
+// task->SetTriggerOnV0AND();
+ if ( trainConfig=="pp" ) task->SetRejectPileup();
//create output container
AliAnalysisDataContainer *coutput1 =
- mgr->CreateContainer("mwinn_tree",
+ mgr->CreateContainer("jpsi_mwinn_tree",
TTree::Class(),
AliAnalysisManager::kExchangeContainer,
- "mwinn_default");
-
+ "jpsi_mwinn_default");
+
AliAnalysisDataContainer *cOutputHist1 =
- mgr->CreateContainer("mwinn_QA",
+ mgr->CreateContainer("jpsi_mwinn_QA",
TList::Class(),
AliAnalysisManager::kOutputContainer,
- "mwinn.root");
+ "jpsi_mwinn.root");
AliAnalysisDataContainer *cOutputHist2 =
- mgr->CreateContainer("mwinn_CF",
+ mgr->CreateContainer("jpsi_mwinn_CF",
TList::Class(),
- AliAnalysisManager::kExchangeContainer,
- "mwinn.root");
-
-
-
+ AliAnalysisManager::kOutputContainer,
+ "jpsi_mwinn.root");
+
AliAnalysisDataContainer *cOutputHist3 =
- mgr->CreateContainer("mwinn_EventStat",
+ mgr->CreateContainer("jpsi_mwinn_EventStat",
TH1D::Class(),
AliAnalysisManager::kOutputContainer,
- "mwinn.root");
-
-
- //is the first output type a problem??!
+ "jpsi_mwinn.root");
+
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;
}
--- /dev/null
+void InitHistograms(AliDielectron *die, Int_t cutDefinition);
+
+void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition);
+void SetupPairCuts(AliDielectron *die, Int_t cutDefinition);
+
+void AddMCSignals(AliDielectron *die);
+void SetEtaCorrection();
+
+TString names=("TOFTRDany");
+enum { kTOFTRD};
+
+TObjArray *arrNames=names.Tokenize(";");
+const Int_t nDie=arrNames->GetEntries();
+
+Bool_t hasMC=kFALSE;
+
+AliDielectron* ConfigBJpsi_ff_PbPbFilter(Int_t cutDefinition, Bool_t isMC=kFALSE)
+{
+ //
+ // Setup the instance of AliDielectron
+ //
+
+
+ // MC event handler?
+ hasMC=isMC;
+ //(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+
+ //ESD handler?
+ Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
+
+
+ // create the actual framework object
+ TString name=Form("%02d",cutDefinition);
+ if (cutDefinition<arrNames->GetEntriesFast()){
+ name=arrNames->At(cutDefinition)->GetName();
+ }
+ AliDielectron *die = new AliDielectron(Form("%s",name.Data()),
+ Form("Track cuts: %s",name.Data()));
+
+ // Monte Carlo Signals and TRD efficiency tables
+ if(hasMC) {
+ AddMCSignals(die);
+
+ // trd tables
+ TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root";
+ TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
+ if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root";
+
+ if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data())))
+ Error("ConfigPbPb","PID table not found: %s",pidTab.Data());
+ else
+ die->SetTRDcorrectionFilename(pidTab.Data());
+ }
+
+ // cut setup
+ SetupTrackCuts(isESD,die,cutDefinition);
+ SetupPairCuts(die,cutDefinition);
+
+ // histogram setup
+ if(cutDefinition == kTOFTRD)
+ InitHistograms(die,cutDefinition);
+
+ // setup eta correction
+ SetEtaCorrection();
+
+ return die;
+}
+
+//______________________________________________________________________________________
+void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Setup the track cuts
+ //
+
+ // Quality cuts
+ AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
+ die->GetTrackFilter().AddCuts(cuts);
+
+ //Pt cut, should make execution a bit faster
+ AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.85","Pt>.85");
+ pt->AddCut(AliDielectronVarManager::kPt,0.85,1e30);
+ cuts->AddCut(pt);
+
+ // track cuts ESD and AOD
+ AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
+ varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
+ varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
+ varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
+ varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
+ varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
+ varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
+
+ AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
+ varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany
+
+ cuts->AddCut(varCuts);
+
+ trkCuts->SetRequireITSRefit(kTRUE);
+ trkCuts->SetRequireTPCRefit(kTRUE);
+ cuts->AddCut(trkCuts);
+
+ //Do we have an MC handler?
+ // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+
+ /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+ AliDielectronPID *pid = new AliDielectronPID("PID","PID");
+
+ ////////////////////////////////// DATA
+ if(!hasMC) {
+
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.0,3.0,0.,0.,kTRUE);
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.0,3.0,0.,0.,kTRUE);
+ }
+
+ ////////////////////////////////// MC
+ if(hasMC) {
+
+ // electron
+ Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5;
+ Double_t resolution=0.0549;
+ Double_t BBpro[5] = {0};
+ Double_t BBpio[5] = {0};
+
+ for(Int_t icent=0; icent<8; icent++) {
+
+ switch (icent) {
+ case 0: // 0-10%
+ BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
+ BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108;
+ break;
+ case 1: // 10-20%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
+ break;
+ case 2: // 20-30%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459;
+ break;
+ case 3: // 30-40%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301;
+ break;
+ case 4: // 40-50%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
+ break;
+ case 5: // 50-60%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
+ break;
+ case 6: // 60-70%
+ BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848;
+ BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094;
+ break;
+ case 7: // 70-80%
+ BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999;
+ BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363;
+ break;
+ case 8: // 80-90%
+ BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986;
+ BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093;
+ break;
+ case 9: // 90-100%
+ BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388;
+ BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372;
+ break;
+ }
+
+
+ TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
+
+ TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.);
+
+ TString list=gSystem->Getenv("LIST");
+
+ //LHC11a10b
+ if (list.Contains("LHC11a10b") || list.IsNull()) {
+ printf("LHC11a10b parameters\n");
+ ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]);
+ ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]);
+
+ // proton cut
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10,
+ kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
+ // pion cut
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10,
+ kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality);
+ }
+ }
+
+ // shifts for the nSigma electrons
+ TGraph* nSigmaCorrection = new TGraph();
+ // LHC11a10b
+ if (list.Contains("LHC11a10b") || list.IsNull()) {
+ nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28));
+ nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28));
+ pid->SetCorrGraph(nSigmaCorrection);
+ }
+
+ } //hasMC
+
+ ////////////////////////////////// DATA + MC
+ // pid cuts TPC + TOF
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
+ pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
+
+ cuts->AddCut(pid);
+ /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
+
+
+ // exclude conversion electrons selected by the tender
+ AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
+ noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
+ cuts->AddCut(noconv);
+
+}
+
+//______________________________________________________________________________________
+void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Setup the pair cuts
+ //
+
+ // conversion rejection
+ Double_t gCut = 0.05; // default
+
+ AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
+ gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut);
+ die->GetPairPreFilter().AddCuts(gammaCut);
+
+
+}
+
+//______________________________________________________________________________________
+void InitHistograms(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Initialise the histograms
+ //
+ // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+
+ //Setup histogram Manager
+ AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
+
+
+ //add histograms to event class
+ histos->AddClass("Event");
+ histos->AddClass("Event_noCuts");
+ histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)",
+ 300,-15.,15.,AliDielectronVarManager::kZvPrim);
+ histos->UserHistogram("Event_noCuts","VtxZ","Vertex Z;z (cm)",
+ 300,-15.,15.,AliDielectronVarManager::kZvPrim);
+
+ histos->UserHistogram("Event","Centrality","Centrality;centrality (%)",
+ 20,0.,100.,AliDielectronVarManager::kCentrality);
+
+ histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0",
+ 500,0.,25000., AliDielectronVarManager::kMultV0);
+ histos->UserHistogram("Event","Multiplicity_nTracks","Multiplicity V0 vs #tracks; #tracks; Multiplicity V0;",
+ 500,0.,25000.,500,0.,25000.,AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0);
+
+ histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0",
+ 10,0.,100., 500,0.,500.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0);
+ histos->UserProfile("Event","Cent_Nacc",
+ "accepted tracks;centrality (%)",
+ AliDielectronVarManager::kNacc,
+ "0.,5.,10.,20.,40.,50.,60.,80.,100.",
+ AliDielectronVarManager::kCentrality);
+ histos->UserProfile("Event","Cent_NVtxContrib",
+ "number of vertex contributors;centrality (%)",
+ AliDielectronVarManager::kNVtxContrib,
+ "0.,5.,10.,20.,40.,50.,60.,80.,100.",
+ AliDielectronVarManager::kCentrality);
+
+
+
+
+
+ //Initialise histogram classes
+ histos->SetReservedWords("Track;Pair");
+
+
+ //Pair classes
+ // to fill also mixed event histograms loop until 10
+ for (Int_t i=0; i<3; ++i){
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
+ }
+
+ if(cutDefinition <= kTOFTRD) {
+
+ //legs from pair
+ for (Int_t i=0; i<3; ++i){
+ histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
+ }
+
+ //Track classes
+ //to fill also track info from 2nd event loop until 2
+ for (Int_t i=0; i<2; ++i){
+ histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
+ }
+
+ //add histograms to Track classes
+ //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit);
+ histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",
+ 400,0,20.,
+ AliDielectronVarManager::kPt);
+
+ histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",
+ 160,-0.5,159.5,
+ AliDielectronVarManager::kNclsTPC);
+ histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks",
+ 160,-0.5,159.5,
+ AliDielectronVarManager::kTPCsignalN);
+
+ histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",
+ 500,-1.,1.,
+ AliDielectronVarManager::kImpactParXY);
+ histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",
+ 600,-3.,3.,
+ AliDielectronVarManager::kImpactParZ);
+
+ histos->UserHistogram("Track","Centrality_Eta_Nsigma","Cent_Eta_nSigma; Centrality; #eta; TPCnSigma_Electron",20,0.,100.,200,-1.,1.,200,-10.,10.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle);
+
+ histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
+ 200,-1,1,200,0,6.285,
+ AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
+
+ histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
+ 400,0.2,20.,200,0.,200.,
+ AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
+
+ histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+
+ histos->UserHistogram("Track","nSigmaTOF_P","TOF sigmas Electrons;P [GeV];TOF number of sigmas Electrons;#tracks", 400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaEle,kTRUE);
+
+ histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC",
+ 160,-0.5,159.5,
+ AliDielectronVarManager::kNclsTPC);
+ histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC",
+ 160,-0.5,159.5,
+ AliDielectronVarManager::kNFclsTPCr);
+ histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters",
+ 160,-0.5,159.5,160,-0.5,159.5,
+ AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr);
+ histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD",
+ 8,-0.5,7.5,
+ AliDielectronVarManager::kTRDpidQuality);
+
+ //add histograms to Pair classes
+ histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
+ 300,.0,300*0.04,
+ AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
+ histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
+ 100,-1.,1.,
+ AliDielectronVarManager::kY);
+ histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
+ 100,0.,3.15,
+ AliDielectronVarManager::kOpeningAngle);
+ histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF",
+ 100,0.,20,
+ AliDielectronVarManager::kChi2NDF);
+
+ histos->UserHistogram("Pair","PseudoProperTime","Pseudoproper decay length; pseudoproper-decay-length[#mum];Entries/40#mum",
+ 150,-0.3.,0.3,AliDielectronVarManager::kPseudoProperTime);
+
+
+ }
+
+ die->SetHistogramManager(histos);
+}
+
+
+void AddMCSignals(AliDielectron *die){
+ //Do we have an MC handler?
+ //Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+ if (!hasMC) return;
+
+ AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi");
+ inclusiveJpsi->SetLegPDGs(11,-11);
+ inclusiveJpsi->SetMotherPDGs(443,443);
+ inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+ inclusiveJpsi->SetFillPureMCStep(kTRUE);
+ inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+ inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+ die->AddSignalMC(inclusiveJpsi);
+
+ AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays)
+ promptJpsi->SetLegPDGs(11,-11);
+ promptJpsi->SetMotherPDGs(443,443);
+ promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons
+ promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+ promptJpsi->SetFillPureMCStep(kTRUE);
+ promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+ promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+ promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+ promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
+ die->AddSignalMC(promptJpsi);
+
+ AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi");
+ beautyJpsi->SetLegPDGs(11,-11);
+ beautyJpsi->SetMotherPDGs(443,443);
+ beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+ beautyJpsi->SetGrandMotherPDGs(500,500);
+ beautyJpsi->SetFillPureMCStep(kTRUE);
+ beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+ beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+ beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE);
+ die->AddSignalMC(beautyJpsi);
+
+ AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi
+ directJpsi->SetLegPDGs(11,-11);
+ directJpsi->SetMotherPDGs(443,443);
+ directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame);
+ directJpsi->SetFillPureMCStep(kTRUE);
+ directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState);
+ directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect);
+ directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE);
+ directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE);
+ die->AddSignalMC(directJpsi);
+}
+
+void SetEtaCorrection()
+{
+
+ if (AliDielectronPID::GetEtaCorrFunction()) return;
+
+ //TString list=gSystem->Getenv("LIST");
+ TString list="LHC11h.pass2";
+
+ //TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root";
+ //TString trainRoot=gSystem->Getenv("TRAIN_ROOT");
+ //if (trainRoot.IsNull())
+ TString etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root";
+ if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){
+ Error("ConfigPbPb","Eta map not found: %s",etaMap.Data());
+ return;
+ }
+
+ TFile f(etaMap.Data());
+ if (!f.IsOpen()) return;
+ TList *keys=f.GetListOfKeys();
+
+
+ for (Int_t i=0; i<keys->GetEntries(); ++i){
+ TString kName=keys->At(i)->GetName();
+ TPRegexp reg(kName);
+ if (reg.MatchB(list)){
+ printf("Using Eta Correction Function: %s\n",kName.Data());
+ AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data()));
+ }
+ }
+}
+
--- /dev/null
+void InitHistograms(AliDielectron *die, Int_t cutDefinition);
+
+void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition);
+void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition);
+void SetupPairCuts( AliDielectron *die, Int_t cutDefinition);
+
+void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition);
+void ConfigBgrd( AliDielectron *die, Int_t cutDefinition);
+
+TString names=("NoBins;Zvtx;ZvtxCent;ZvtxNcontr;ZvtxNcontrPE;ZvtxNcontrPEepTPC;ZvtxNcontrPEepTPCmag");
+enum { kNoBins=0, kZvtx, kZvtxCent, kZvtxNcontr, kZvtxNcontrPE, kZvtxNcontrPEepTPC, kZvtxNcontrPEepTPCmag};
+
+TObjArray *arrNames=names.Tokenize(";");
+const Int_t nDie=arrNames->GetEntries();
+
+Bool_t isESD = kTRUE;
+Bool_t hasMC = kFALSE;
+TString list = gSystem->Getenv("LIST");
+
+AliDielectron* ConfigJpsiME_jpsi_PbPb(Int_t cutDefinition, TString prod="", ULong64_t triggers=AliVEvent::kCentral | AliVEvent::kSemiCentral | AliVEvent::kMB)
+{
+ //
+ // Setup the instance of AliDielectron
+ //
+
+ // gsi train?
+ TString trainRoot = gSystem->Getenv("TRAIN_ROOT");
+ Bool_t isGSItrain = (trainRoot.IsNull()?kFALSE:kTRUE);
+
+ // find mc or not?
+ if( list.IsNull()) list=prod;
+ if( list.Contains("LHC10h") || list.Contains("LHC11h") ) hasMC=kFALSE;
+ if( list.Contains("LHC11a10") || list.Contains("LHC12a17") ) hasMC=kTRUE;
+
+ //ESD handler?
+ isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class());
+
+ // task name
+ TString name=Form("%02d",cutDefinition);
+ if (cutDefinition<arrNames->GetEntriesFast()) name=arrNames->At(cutDefinition)->GetName();
+ printf(" Adding %s%s config %s for %s \n",(isESD?"ESD":"AOD"),(hasMC?" MC":""),name.Data(),list.Data());
+
+ // init AliDielectron
+ AliDielectron *die = new AliDielectron(Form("%s",name.Data()), Form("ME config: %s",name.Data()));
+ die->SetHasMC(hasMC);
+
+ // cut setup
+ SetupEventCuts(die,triggers,cutDefinition);
+ SetupTrackCuts(die,cutDefinition);
+ SetupPairCuts(die,cutDefinition);
+
+ // histogram setup
+ InitHistograms(die,cutDefinition);
+ printf(" Add %d class types to the histo manager \n",die->GetHistogramList()->GetEntries());
+
+ // bgrd estimators
+ ConfigBgrd(die,cutDefinition);
+
+ // tpc event plane configuration
+ ConfigEvtPlane(die,cutDefinition);
+
+ // prefilter settings
+ die->SetPreFilterUnlikeOnly();
+ //die->SetPreFilterAllSigns();
+ //die->SetNoPairing();
+
+ return die;
+}
+
+//______________________________________________________________________________________
+void SetupEventCuts(AliDielectron *die, ULong64_t triggers, Int_t cutDefinition)
+{
+ //
+ // Setup the event cuts
+ //
+
+ // trigger specific centrality cuts (reject trigger inefficiencies)
+ Double_t minCent=0.0, maxCent=100.;
+ if(!hasMC) {
+ switch(triggers) {
+ case AliVEvent::kCentral: minCent= 0.; maxCent= 9.; break;
+ case AliVEvent::kSemiCentral: minCent=12.; maxCent=53.; break;
+ case AliVEvent::kMB: minCent= 0.; maxCent=80.; break;
+ default: minCent= 0.; maxCent=80.; break;
+ }
+ }
+
+ // VZERO multiplicity vs. number ob global tracks cut
+ TF1 *fMean = new TF1("fMean", "pol1", 0,25e+3);
+ fMean->SetParameters(691.633, 1.4892);
+ TF1 *fSigma = new TF1("fSigma","[0]+sqrt([1]*x+[2])",0,25e+3);
+ fSigma->SetParameters(-83.6599, 36.7677, 69530.7);
+
+ // number of vertex contributors TPC vs. global cut
+ TF1* vtxContribUp = new TF1("vtxContribUp","pol1",0.,20000.);
+ vtxContribUp->SetParameters(0.,1.38); // --> strong cut, removes about 40% of events
+ TF1* vtxContribLow= new TF1("vtxContribLow","pol1",0.,20000.);
+ vtxContribLow->SetParameters(-100.,1.2);
+
+ AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","eventCuts");
+ if(!isESD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
+ eventCuts->SetRequireVertex();
+ eventCuts->SetMinVtxContributors(1);
+ eventCuts->SetVertexZ(-10.,+10.);
+ eventCuts->SetCentralityRange(minCent,maxCent);
+
+ // apply pile-up event (PE) rejection
+ switch(cutDefinition) {
+ case kZvtxNcontrPE:
+ case kZvtxNcontrPEepTPC:
+ case kZvtxNcontrPEepTPCmag:
+ eventCuts->SetCutOnV0MultipicityNTrks(fMean, fSigma, 4.0);
+ // eventCuts->SetCutOnNVtxContributorsGloablTPC(vtxContribLow, vtxContribUp);
+ }
+ eventCuts->Print();
+ die->GetEventFilter().AddCuts(eventCuts);
+
+}
+
+//______________________________________________________________________________________
+void SetupTrackCuts(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Setup the track cuts
+ //
+
+ // Quality cuts
+ AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
+ die->GetTrackFilter().AddCuts(cuts);
+
+ // AOD track filter (needs to be first cut to speed up)
+ AliDielectronTrackCuts *trkFilter = new AliDielectronTrackCuts("TrkFilter","TrkFilter");
+ trkFilter->SetAODFilterBit(AliDielectronTrackCuts::kTPCqual);
+ // trkFilter->SetMinNCrossedRowsOverFindable(0.6);
+ if(!isESD) cuts->AddCut(trkFilter);
+
+ //Pt cut, should make execution a bit faster
+ AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
+ pt->AddCut(AliDielectronVarManager::kPt,1.1,1e30); //0.8
+ cuts->AddCut(pt);
+
+ // track cuts ESD and AOD
+ AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
+ varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
+ varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
+ varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); // -0.9, 0.9
+ varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
+ varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
+ varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
+ varCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
+ cuts->AddCut(varCuts);
+ varCuts->Print();
+
+ AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
+ trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 3); // ITS-4 = 1+2+4+8
+ trkCuts->SetRequireITSRefit(kTRUE);
+ trkCuts->SetRequireTPCRefit(kTRUE);
+ cuts->AddCut(trkCuts);
+
+ /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
+ AliDielectronPID *pid = new AliDielectronPID("PID","PID");
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-100.,4.0,0.,0.,kTRUE);
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-100.,3.5,0.,0.,kTRUE);
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.);
+ pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable);
+ cuts->AddCut(pid);
+ /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
+
+ // exclude conversion electrons selected by the tender
+ AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
+ noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
+ // cuts->AddCut(noconv);
+
+}
+
+//______________________________________________________________________________________
+void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Setup the pair cuts
+ //
+
+ // conversion rejection
+ Double_t gCut = 0.05;
+ AliDielectronVarCuts *gammaCuts = new AliDielectronVarCuts("GammaCuts","GammaCuts");
+// gammaCuts->AddCut(AliDielectronVarManager::kOpeningAngle, 0.0, 0.1, kTRUE);
+// gammaCuts->AddCut(AliDielectronVarManager::kLegDist, 0.0, 0.25, kTRUE);
+// gammaCuts->AddCut(AliDielectronVarManager::kR, 3.0, 90.0, kTRUE);
+// gammaCuts->AddCut(AliDielectronVarManager::kPsiPair, 0.0, 0.05, kTRUE);
+// gammaCuts->AddCut(AliDielectronVarManager::kChi2NDF, 0.0, 10.0, kTRUE);
+ gammaCuts->AddCut(AliDielectronVarManager::kM, 0.0, gCut);
+ die->GetPairPreFilter().AddCuts(gammaCuts);
+
+ // rapidity selection
+ // AliDielectronVarCuts *rapCut=new AliDielectronVarCuts("|Y|<.9","|Y|<.9");
+ // rapCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
+ // die->GetPairFilter().AddCuts(rapCut);
+
+}
+
+//______________________________________________________________________________________
+void ConfigBgrd(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Configurate the background estimators
+ //
+
+ // add mixed events
+ AliDielectronMixingHandler *mix=new AliDielectronMixingHandler;
+
+ // mixing handler
+ switch(cutDefinition) {
+ case kNoBins: /* */ break;
+ case kZvtx:
+ mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+ break;
+ case kZvtxCent:
+ mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+ mix->AddVariable(AliDielectronVarManager::kCentrality, 8, 0.,80.);
+ break;
+ case kZvtxNcontrPEepTPCmag:
+ mix->AddVariable(AliDielectronVarManager::kTPCmagH2, "0.,20.,50.,80.,110.,150.,500.");
+ case kZvtxNcontrPEepTPC:
+ mix->AddVariable(AliDielectronVarManager::kTPCrpH2, 8, TMath::Pi()/-2., TMath::Pi()/2.);
+ case kZvtxNcontrPE:
+ case kZvtxNcontr:
+ mix->AddVariable(AliDielectronVarManager::kNVtxContrib, 32, 0.,3200.);
+ mix->AddVariable(AliDielectronVarManager::kZvPrim, "-10.,-5.,-4.,-3.,-2.,-1.,0.,1.,2.,3.,4.,5.,10.");
+ break;
+ }
+ mix->SetMixType(AliDielectronMixingHandler::kOSonly);
+ mix->SetDepth(150);
+ mix->Print();
+
+ die->SetMixingHandler(mix);
+}
+
+//______________________________________________________________________________________
+void ConfigEvtPlane(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Configurate the TPC event plane
+ //
+
+ if(cutDefinition!=kZvtxNcontrPEepTPC && cutDefinition!=kZvtxNcontrPEepTPCmag) return;
+
+ Double_t gGap = 0.0;
+ AliDielectronVarCuts *poi = new AliDielectronVarCuts("PoI","PoI");
+ poi->AddCut(AliDielectronVarManager::kM,2.92,3.20); // particles of interest, jpsi mass window
+ die->GetEventPlanePOIPreFilter().AddCuts(poi);
+
+ // eta gap in tpc event plane
+ //AliDielectronVarCuts *etaGap = new AliDielectronVarCuts(AliDielectronVarManager::GetValueName(AliDielectronVarManager::kEta),"etaGap");
+ //etaGap->AddCut(AliDielectronVarManager::kEta,-1*gGap,gGap,kTRUE);
+ //die->GetEventPlanePreFilter().AddCuts(etaGap);
+ //if(cutDefinition==kSubLS) die->SetLikeSignSubEvents();
+
+ die->SetPreFilterEventPlane();
+}
+
+//______________________________________________________________________________________
+void InitHistograms(AliDielectron *die, Int_t cutDefinition)
+{
+ //
+ // Initialise the histograms
+ //
+
+ //Setup histogram Manager
+ AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle());
+
+ //add histograms to event class
+ histos->AddClass("Event");
+
+
+ switch(cutDefinition) {
+ case kNoBins: /* */ break;
+ case kZvtxCent:
+ histos->UserHistogram("Event","","", 200,-10., 10., AliDielectronVarManager::kZvPrim);
+ histos->UserHistogram("Event","","", 100, 0.0, 100.0, AliDielectronVarManager::kCentrality);
+ break;
+ case kZvtxNcontrPEepTPCmag:
+ histos->UserHistogram("Event","","", 250, 0., 500., AliDielectronVarManager::kTPCmagH2);
+ case kZvtxNcontrPEepTPC:
+ histos->UserHistogram("Event","","", 16, TMath::Pi()/-2., TMath::Pi()/2., AliDielectronVarManager::kTPCrpH2);
+ case kZvtxNcontrPE:
+ case kZvtxNcontr:
+ histos->UserHistogram("Event","","", 200, 0., 4000., AliDielectronVarManager::kNVtxContrib);
+ case kZvtx:
+ histos->UserHistogram("Event","","", 200,-10., 10., AliDielectronVarManager::kZvPrim);
+ break;
+ }
+
+ //Initialise histogram classes
+ histos->SetReservedWords("Pair");
+ //Pair classes inclusive mixed events
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(0)));
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(1)));
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(2)));
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(4)));
+
+ ///// add histograms to Pair classes /////
+ histos->UserHistogram("Pair","","", 300,.0,300*0.04, AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2
+ histos->UserHistogram("Pair","","", 100,-1.,1., AliDielectronVarManager::kY);
+ histos->UserHistogram("Pair","","", 400,0,20., AliDielectronVarManager::kPt);
+
+
+ //legs from pair (fill SE)
+ // for (Int_t i=0; i<3; ++i){
+ // histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
+ // }
+ //Track classes
+ //to fill also track info from 2nd event loop until 2
+ //for (Int_t i=0; i<2; ++i){
+ // histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
+ //}
+
+
+ die->SetHistogramManager(histos);
+}
void AddMCSignals(AliDielectron *die);
-void SetupNanoTrackCuts(AliDielectron *die, Int_t cutDefinition);
-
void SetEtaCorrection();
TVectorD *GetRunNumbers();
// cut setup
SetupEventCuts(die,triggers);
- //SetupTrackCuts(die,cutDefinition);
- SetupNanoTrackCuts(die,cutDefinition);
- // SetupPairCuts(die,cutDefinition);
+ SetupTrackCuts(die,cutDefinition);
+ SetupPairCuts(die,cutDefinition);
// MC signals
if(hasMC) {
// track cuts ESD and AOD
AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
- //varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
- //varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
- // varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
+ varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
+ varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
+ varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
//varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 50.0, 160.0);
- //varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
+ varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
//varCuts->AddCut(AliDielectronVarManager::kTOFbeta, 0.2, 0.9, kTRUE);
- //varCuts->Print();
+ varCuts->Print();
cuts->AddCut(varCuts);
/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
}
-void SetupNanoTrackCuts(AliDielectron *die, Int_t cutDefinition)
-{
- //
- // Setup the track cuts
- //
-
- // Quality cuts
- AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND);
- die->GetTrackFilter().AddCuts(cuts);
-
- AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
- //trkCuts->SetITSclusterCut(AliDielectronTrackCuts::kOneOf, 15); // ITS-4 = 1+2+4+8
- trkCuts->SetRequireITSRefit(kTRUE);
- trkCuts->SetRequireTPCRefit(kTRUE);
- // cuts->AddCut(trkCuts);
-
- //Pt cut, should make execution a bit faster
- AliDielectronVarCuts *pt = new AliDielectronVarCuts("PtCut","PtCut");
- pt->AddCut(AliDielectronVarManager::kPt,0.7,1e30); //1.1
- cuts->AddCut(pt);
- pt->Print();
-
- // track cuts ESD and AOD
- AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
- varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0);
- varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0);
- varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9);
- varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0);
- varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0);
- //varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0);
- varCuts->AddCut(AliDielectronVarManager::kTPCnSigmaEle,-3.2, 4.0);
- //varCuts->Print();
- //cuts->AddCut(varCuts);
-
-}
-
//______________________________________________________________________________________
void SetupPairCuts(AliDielectron *die, Int_t cutDefinition)
{
GetRunNumbers(),
AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0C, AliDielectronVarManager::kRunNumber);
-
+ histos->UserHistogram("Event","","", 110,0.,1.1, AliDielectronVarManager::kMatchEffITSTPC);
+ histos->UserHistogram("Event","","", 200,0.,20000., 110,0.,1.1,
+ AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMatchEffITSTPC);
histos->UserHistogram("Event","","", 80.,0.,80., 80.,0.,80., AliDielectronVarManager::kCentrality, AliDielectronVarManager::kCentralitySPD);
--- /dev/null
+void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD);
+
+//AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition);
+
+TString namesDieleData=("basicQ+SPDfirst+pt>1+PID; basicQ+SPDany+pt>1+PID; basicQ+ITS012+pt>1+PID; basiQ+SPDany+pt>1+p>1.2+TPCsignalfrom70to110");
+//TString namesDieleData=("basicQ+SPDfirst+pt>1+PID");
+
+TObjArray *arrNamesDieleData=namesDieleData.Tokenize("; ");
+
+const Int_t nDie=arrNamesDieleData->GetEntries();
+
+AliDielectron* ConfigJpsi_mw_pPb(Int_t cutDefinition, Bool_t isAOD=kFALSE/*must be kTRUE for AODs old setting*/)
+{
+ //
+ // Setup the instance of AliDielectron
+ //
+
+ // create the actual framework object
+ TString name=Form("%02d",cutDefinition);
+ if (cutDefinition<arrNamesDieleData->GetEntriesFast()){
+ name=arrNamesDieleData->At(cutDefinition)->GetName();
+ }
+ AliDielectron *diele = new AliDielectron(Form("%s",name.Data()),
+ Form("Track cuts: %s",name.Data()));
+
+
+ // estimators filename
+ //NOTE: what does this mean?: estimator for pp multiplicity, not needed for instance for my pA-purpose(mwinn 16.1.2012)..
+ diele->SetEstimatorFilename("$ALICE_ROOT/PWGDQ/dielectron/files/estimators.root");
+ //diele->SetEstimatorFilename("estimators.root");
+ // cut setup
+ SetupTrackCutsDieleData(diele, cutDefinition, isAOD);
+ SetupPairCutsDieleData(diele, cutDefinition, isAOD);
+ //
+ // histogram setup
+ // only if an AliDielectronHistos object is attached to the
+ // dielelectron framework histograms will be filled
+ //
+ InitHistogramsDieleData(diele, cutDefinition, isAOD);
+
+ // the last definition uses no cuts and only the QA histograms should be filled!, now for all cuts
+ if(cutDefinition == 0 || cutDefinition == 1 || cutDefinition == 2 || cutDefinition == 3) InitCFDieleData(diele, cutDefinition, isAOD);
+
+ AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
+ if(cutDefinition == 0 || cutDefinition == 1 || cutDefinition == 2 || cutDefinition == 3) rot->SetConeAnglePhi(TMath::Pi());
+ //else if(cutDefinition == 2) rot->SetConeAnglePhi(TMath::Pi()/180.*135.);
+ //rot->SetIterations(10);
+ rot->SetIterations(20);
+ diele->SetTrackRotator(rot);
+
+
+ return diele;
+}
+
+//______________________________________________________________________________________
+void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+ //
+ // Setup the track cuts
+ //
+
+ if (!isAOD) {
+ //exclude conversion electrons selected by the tender
+ AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv");
+ noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE);
+ diele->GetTrackFilter().AddCuts(noconv);
+ }/* else {
+ //this is only for AODs
+ AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts");
+ if (cutDefinition==0)
+ trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+ else if ((cutDefinition==1)||(cutDefinition ==3))
+ trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+ trackCuts->SetRequireTPCRefit(kTRUE);
+ trackCuts->SetRequireITSRefit(kTRUE);
+ diele->GetTrackFilter().AddCuts(trackCuts);
+ }*/
+ AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("ITSandgeneral_trackCuts","ITSandgeneral_trackCuts");
+ //ITS related cuts
+ if (cutDefinition==0)
+ trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+ else if ((cutDefinition==1)||(cutDefinition ==3))
+ trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+ trackCuts->SetRequireTPCRefit(kTRUE);
+ trackCuts->SetRequireITSRefit(kTRUE);
+ diele->GetTrackFilter().AddCuts(trackCuts);
+
+ //Pt cut ----------------------------------------------------------
+ AliDielectronVarCuts *pt = new AliDielectronVarCuts("trackkineandTPCQ","trackkine_and_TPCQ");
+ pt->AddCut(AliDielectronVarManager::kPt,1.,1e30);
+ pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
+ // ITS 0 1 2 : only for third variant
+ if (cutDefinition==2) pt->AddCut(AliDielectronVarManager::kITSLayerFirstCls,0.,2.5);
+ //AOD additions since there are no AliESDtrackCuts -----------------
+ //
+ // TPC #clusteres cut
+ pt->AddCut(AliDielectronVarManager::kNclsTPC,70.,160.);
+ //chi square cut TOC missing...
+ pt->AddCut(AliDielectronVarManager::kTPCchi2Cl,0.,4.);
+ pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
+ //TODO: DCA cuts to be investigated!!! NOTE: why?? (mwinn, 15.01.2013)
+ pt->AddCut(AliDielectronVarManager::kImpactParXY,-1.,1.);
+ pt->AddCut(AliDielectronVarManager::kImpactParZ,-3.,3.);
+
+ diele->GetTrackFilter().AddCuts(pt);
+
+ // PID cuts --------------------------------------------------------
+ if(cutDefinition ==0 || cutDefinition ==1 ||cutDefinition ==2){
+ AliDielectronPID *pid = new AliDielectronPID("PID10","TPC nSigma |e|<3 + |Pi|>3.5 + P>3");
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.5,3.5,0.,0.,kTRUE);
+ pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-20.,3.,0.,0.,kTRUE);
+ diele->GetTrackFilter().AddCuts(pid);
+ }
+ if(cutDefinition ==3){
+ AliDielectronVarCuts *pidsubs = new AliDielectronVarCuts("pidSubs","pidsubs cut");
+ pidsubs->AddCut(AliDielectronVarManager::kP,1.2,1e30);
+ pidsubs->AddCut(AliDielectronVarManager::kTPCsignal,70.,110.);
+ diele->GetTrackFilter().AddCuts(pidsubs);
+ }
+}
+
+//______________________________________________________________________________________
+void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+ //
+ // Setup the pair cuts
+ //
+ // conversion rejection
+ //Double_t gCut = 0.05; // default
+ Double_t gCut = 0.100; // default
+
+ AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut");
+ gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut);
+ diele->GetPairPreFilter().AddCuts(gammaCut);
+ diele->SetPreFilterUnlikeOnly();
+
+
+ //Invariant mass and rapidity selection
+ AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("2<M<4+|Y|<.9","2<M<4 + |Y|<.9");
+ // pairCut->AddCut(AliDielectronVarManager::kM,2.,4.);
+ pairCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
+ diele->GetPairFilter().AddCuts(pairCut);
+}
+/*
+//______________________________________________________________________________________
+AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition)
+{
+ //
+ // Setup default AliESDtrackCuts
+ //
+ AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
+
+ // basic track quality cuts (basicQ)
+ //done esdTrackCuts->SetMaxDCAToVertexZ(3.0);
+ //done esdTrackCuts->SetMaxDCAToVertexXY(1.0);
+
+//done esdTrackCuts->SetEtaRange( -0.9 , 0.9 );
+
+//done esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+//done esdTrackCuts->SetRequireITSRefit(kTRUE);
+//done esdTrackCuts->SetRequireTPCRefit(kTRUE);
+
+//done esdTrackCuts->SetPtRange(1.,1e30);
+
+
+//done esdTrackCuts->SetMinNClustersTPC(70);
+
+//done esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+ // default SPD any
+ if ((cutDefinition==1)||(cutDefinition==3)) esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+
+ if (cutDefinition==0)
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+
+ return esdTrackCuts;
+}
+*/
+
+//______________________________________________________________________________________
+void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+ //
+ // Initialise the histograms
+ //
+
+ //Setup histogram Manager
+ AliDielectronHistos *histos=new AliDielectronHistos(diele->GetName(),diele->GetTitle());
+
+ //Initialise histogram classes
+ histos->SetReservedWords("Track;Pair");
+
+ //Track classes
+ //to fill also track info from 2nd event loop until 2
+ for (Int_t i=0; i<2; ++i){
+ histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i)));
+ }
+
+ //Pair classes
+ // to fill also mixed event histograms loop until 10
+ for (Int_t i=0; i<3; ++i){
+ histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i)));
+ }
+
+ //legs from pair
+ for (Int_t i=0; i<3; ++i){
+ histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i)));
+ }
+
+ //track rotation
+ histos->AddClass(Form("Pair_%s",PairClassName(AliDielectron::kEv1PMRot)));
+ histos->AddClass(Form("Track_Legs_%s",PairClassName(AliDielectron::kEv1PMRot)));
+
+
+ //add histograms to event class
+ if (cutDefinition==0) {
+ histos->AddClass("Event");
+ histos->AddClass("Event_noCuts");
+ histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
+ // nAcc
+ histos->UserHistogram("Event","NAccRaw","Accepted raw SPD tracklets, |y|<1; nTrackl; #Entries",101,-0.5,100.5, AliDielectronVarManager::kNaccTrckltsEsd10);
+ histos->UserHistogram("Event","NAccCorr","Accepted corr SPD tracklets, |y|<1; nTrackl; #Entries",101,-0.5,100.5, AliDielectronVarManager::kNaccTrckltsEsd10Corr);
+ // nAcc vs Zvtx
+ histos->UserHistogram("Event","NAccRaw_vs_Zvtx","Accepted raw SPD tracklets vs Z vtx, |y|<1; Zvtx[cm]; nTrackl ",300,-15.,15.,101,-0.5,100.5, AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kNaccTrckltsEsd10);
+ histos->UserHistogram("Event","NAccCorr_vs_Zvtx","Accepted corr SPD tracklets vs Z vtx, |y|<1; Zvtx[cm]; nTrackl ",300,-15.,15.,101,-0.5,100.5, AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kNaccTrckltsEsd10Corr);
+
+
+ // no event cuts
+ histos->UserHistogram("Event_noCuts","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
+ // nAcc
+ histos->UserHistogram("Event_noCuts","NAccRaw","Accepted raw SPD tracklets, |y|<1; nTrackl; #Entries",101,-0.5,100.5, AliDielectronVarManager::kNaccTrckltsEsd10);
+ histos->UserHistogram("Event_noCuts","NAccCorr","Accepted corr SPD tracklets, |y|<1; nTrackl; #Entries",101,-0.5,100.5, AliDielectronVarManager::kNaccTrckltsEsd10Corr);
+ // nAcc vs Zvtx
+ histos->UserHistogram("Event_noCuts","NAccRaw_vs_Zvtx","Accepted raw SPD tracklets vs Z vtx, |y|<1; Zvtx[cm]; nTrackl ",300,-15.,15.,101,-0.5,100.5, AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kNaccTrckltsEsd10);
+ histos->UserHistogram("Event_noCuts","NAccCorr_vs_Zvtx","Accepted corr SPD tracklets vs Z vtx, |y|<1; Zvtx[cm]; nTrackl ",300,-15.,15.,101,-0.5,100.5, AliDielectronVarManager::kZvPrim,AliDielectronVarManager::kNaccTrckltsEsd10Corr);
+
+ }
+
+ //add histograms to Track classes
+ histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt);
+ histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC);
+
+ histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY);
+ histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ);
+ histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks",
+ 100,-1,1,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi);
+
+ histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks",
+ 200,0.2,20.,100,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE);
+ histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",
+ 200,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE);
+
+ //add histograms to Pair classes
+ histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs",
+ 125,0.,125*.04,AliDielectronVarManager::kM);
+ histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs",
+ 100,-1.,1.,AliDielectronVarManager::kY);
+ histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle",
+ 100,0.,3.15,AliDielectronVarManager::kOpeningAngle);
+
+
+ // 3D histos: invMass - Multiplicity - ptJpsi
+ histos->UserHistogram("Pair","InvMass_NaccRaw_PtJpsi","Inv.Mass - NaccRaw - PtJpsi;Inv. Mass [GeV];NaccRaw; pTJpsi[GeV/c]", 125,0.,125*.04,101,-0.5,100.5, 100, 0.,10., AliDielectronVarManager::kM,AliDielectronVarManager::kNaccTrckltsEsd10, AliDielectronVarManager::kPt);
+ histos->UserHistogram("Pair","InvMass_NaccCorr_PtJpsi","Inv.Mass - NaccCorr - PtJpsi;Inv. Mass [GeV];NaccCor; pTJpsi[GeV/c]", 125,0.,125*.04,101,-0.5,100.5,100,0.,10., AliDielectronVarManager::kM,AliDielectronVarManager::kNaccTrckltsEsd10Corr, AliDielectronVarManager::kPt);
+
+ diele->SetHistogramManager(histos);
+}
+
+
+void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+ //
+ // Setupd the CF Manager if needed
+ //
+
+ AliDielectronCF *cf=new AliDielectronCF(diele->GetName(),diele->GetTitle());
+
+ //pair variables
+ cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 1.0, 1.3, 2.0, 3.0, 5., 7.0, 10.0, 100.0");
+ cf->AddVariable(AliDielectronVarManager::kY,"-5,-1,-0.9,-0.8,-0.7,-0.5,-0.3,0.3,0.5,0.7,0.8,0.9,1.0,5");
+ cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps
+ cf->AddVariable(AliDielectronVarManager::kPseudoProperTime,150,-0.3,0.3);
+ cf->AddVariable(AliDielectronVarManager::kPseudoProperTimeErr,600,0.,0.3);
+ cf->AddVariable(AliDielectronVarManager::kPairType,"-0.5,0.5,1.5,2.5,9.5,10.5");
+
+
+ //leg variables
+ cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 0.9, 0.95, 1.0, 1.05, 1.1, 1.2, 100.0",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 75, 80, 85, 90, 100, 120, 160",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kTPCchi2Cl,"0, 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4.",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kEta,"-5,-1,-0.9,-0.85,-0.8,-0.75,0.75,0.8,0.85,0.9,1.0,5",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-2.5,-2,-1.5,-1,-0.5,4.",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.,3.5,4.,100",kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kITSLayerFirstCls,6,-0.5,5.5,kTRUE);
+
+ //event variables
+ //cf->AddVariable(AliDielectronVarManager::kNaccTrcklts,"0.0, 9.0, 17.0, 25.0, 36.0, 55.0, 500.0");
+ cf->AddVariable(AliDielectronVarManager::kNaccTrckltsEsd10,101,-0.5,100.5);
+ cf->AddVariable(AliDielectronVarManager::kNaccTrckltsEsd10Corr,101,-0.5,100.5);
+ cf->AddVariable(AliDielectronVarManager::kZvPrim,"-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.");
+ if (!isAOD){
+ Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
+ if (hasMC){
+ cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE);
+ cf->AddVariable(AliDielectronVarManager::kPdgCodeGrandMother,10000,-5000.5,4999.5,kTRUE);
+ }
+ }
+
+ //only in this case write MC truth info
+ //if (cutDefinition==0){
+ // cf->SetStepForMCtruth();
+ //}
+
+ diele->SetCFManagerPair(cf);
+
+}
+