]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/correlationHF/macros/AddTaskDStarCorrelations.C
fix: parse the delimiter correctly
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / macros / AddTaskDStarCorrelations.C
index e3d37ca091bfe988313f3b3b7e62c463bab4abdf..00748db72d70a0885aa06ded659cad1cd9a0c2ad 100644 (file)
 
 /* $Id$ */
 
-AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(Bool_t runOnPbPb,Bool_t theMCon, Bool_t mixing, Bool_t UseReco = kTRUE, Int_t trackselect =1, Int_t usedispl =0, TString DCutObjNamePrefix = "_corr", TString TrackCutObjNamePrefix = "")
+AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(AliAnalysisTaskDStarCorrelations::CollSyst syst, 
+                                                            Bool_t theMCon, Bool_t mixing, Bool_t UseReco=kTRUE,Bool_t UseHadChannelinMC,Bool_t fullmode = kFALSE,Bool_t UseEffic=kFALSE,Bool_t UseDEffic = kFALSE, Bool_t useDStarSidebands = kFALSE,
+                                                        AliAnalysisTaskDStarCorrelations::DEffVariable var,
+                                                            Int_t trackselect =1, Int_t usedispl =0, Int_t nbins, Float_t DStarSigma, Float_t D0Sigma, Float_t D0SBSigmaLow, Float_t D0SBSigmaHigh, Float_t eta,
+                                                                     TString DStarCutsFile, TString TrackCutsFile,
+                                                                     TString suffix = "")
 {
 
+    
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
     ::Error(" AliAnalysisTaskDStarCorrelations", "No analysis manager to connect to.");
     return NULL;
   } 
 
-       
-       TString DCutObjPath = "~/CorrelationAnalysis/CutObjects/DStar/";
-       
-       
-       
-       TString DCutObjName = "DStartoKpipiCuts";
-       DCutObjName += DCutObjNamePrefix;
-       DCutObjName += ".root";
-       
-       DCutObjName.Prepend(DCutObjPath.Data());
-       
-       cout << "D* cut object is " << DCutObjName << endl;
-  TFile* filecuts=new TFile(DCutObjName.Data());
-  if(!filecuts->IsOpen()){
+       cout << "==========================================================" << endl;
+    cout << "Set Inputs : " << endl;
+    cout << " " << endl;
+    if(syst == AliAnalysisTaskDStarCorrelations::pp) cout << "Running on pp @ 7 TeV" << endl;
+    if(syst == AliAnalysisTaskDStarCorrelations::pA) cout << "Running on pPb @ 5.02 TeV" << endl;
+    if(syst == AliAnalysisTaskDStarCorrelations::AA) cout << "Running on PbPb @ 2.76 TeV" << endl;
+    
+    if(theMCon) cout << "Analysis on MonteCarlo" << endl;
+    else cout << "Analysis on Data" << endl;
+    
+    if(mixing) cout << "Analysis on Mixed Events" << endl;
+    else cout << "Analysis on Single Events" << endl;
+    
+    if(UseReco) cout << "Using Reconstructed objects" << endl;
+    else cout << "Using Pure MC information " << endl;
+
+    if(fullmode) cout << "Running in full mode" << endl;
+    else cout << "Running in fast mode " << endl;
+    
+    if(UseEffic) cout << "Using single track efficiency map" << endl;
+    else cout << "Not Using single track efficiency map " << endl;
+    
+    if(UseDEffic) cout << "Using Dmeson efficiency map" << endl;
+    else cout << "Not Using Dmeson efficiency map " << endl;
+    
+    if(var == AliAnalysisTaskDStarCorrelations::kNone) cout << "Applying D Efficiency map vs pT " << endl;
+    if(var == AliAnalysisTaskDStarCorrelations::kMult) cout << "Applying D Efficiency map vs pT vs Multiplicity" << endl;
+    if(var == AliAnalysisTaskDStarCorrelations::kCentr) cout << "Applying D Efficiency map vs pT vs Centrality" << endl;
+    if(var == AliAnalysisTaskDStarCorrelations::kRapidity) cout << "Applying D Efficiency map vs pT vs Rapidity" << endl;
+    if(var == AliAnalysisTaskDStarCorrelations::kEta) cout << "Applying D Efficiency map vs pT vs Eta" << endl;
+
+    if(trackselect == 1) cout << "Correlating with hadrons" << endl;
+    if(trackselect == 2) cout << "Correlating with kaons" << endl;
+    if(trackselect == 3) cout << "Correlating with kzeros" << endl;
+    
+    if(usedispl == 0) cout << "Not using displacement cut" << endl;
+    if(usedispl == 1) cout << "Using absolute displacement cut" << endl;
+    if(usedispl == 2) cout << "Using relative displacement cut" << endl;
+    
+    
+    cout << "Number of bins in deltaphi = " << nbins << endl;
+    
+    cout << "N of Sigmas in D* selection =" << DStarSigma << endl;
+    cout << "N of Sigmas in D0 selection = " << D0Sigma << endl;
+    cout << "D0 Sidebands taken from  = " << D0SBSigmaLow << " - " << D0SBSigmaHigh << " sigmas " << endl; endl;
+    
+   
+    
+    cout << "DStar cut object:     " << DStarCutsFile << endl;
+    cout << "Tracks cut object:    " << TrackCutsFile << endl;
+  
+    
+    cout << "==========================================================" << endl;
+    //gSystem->Sleep(2000);
+    
+//     TString DCutObjPath = "CutObjects/DStar/";
+               
+       
+// ******************************** OPENING THE D* CUTS ************************************
+    cout << "Getting D meson cut object from file \n" << DStarCutsFile.Data() << "\n " << endl;
+    TFile* filecuts=TFile::Open(DStarCutsFile.Data());
+    if(!filecuts->IsOpen()){
     cout<<"DStar cut object file not found: exit"<<endl;
     return;
-  }  
-       
-       TString TrackCutObjPath = "~/CorrelationAnalysis/CutObjects/AssocTracks/";
-       
-       TString TrackCutObjName = "AssocPartCuts";
-       TrackCutObjName += TrackCutObjNamePrefix;
-       TrackCutObjName += ".root";
-       
-       TrackCutObjName.Prepend(TrackCutObjPath.Data());
-       
-       cout << "tracks cut object is " << TrackCutObjName << endl;
-         TFile* filecuts2=new TFile(TrackCutObjName.Data());
+    }
+    
+    AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi();
+    RDHFDStartoKpipi = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
+    RDHFDStartoKpipi->SetName("DStartoKpipiCuts");
+    
+    // mm let's see if everything is ok
+       if(!RDHFDStartoKpipi){
+               cout<<"Specific AliRDHFCuts not found"<<endl;
+               return;
+       }
+    
+        
+       // RDHFDStartoKpipi->SetTriggerClass("");
+       // RDHFDStartoKpipi->SetTriggerMask(AliVEvent::kCentral);
+    
+    
+       
+// ******************************** OPENING THE ASSOCIATED TRACK CUTS ************************************
+       cout << "Getting associated track cut object from file \n" << TrackCutsFile.Data() << "\n " << endl;
+       TFile* filecuts2=TFile::Open(TrackCutsFile.Data());
          if(!filecuts2->IsOpen()){
                  cout<<"Track cut object file not found: exit"<<endl;
                  return;
-  }
-
-  AliRDHFCutsDStartoKpipi* RDHFDStartoKpipi=new AliRDHFCutsDStartoKpipi();
-  RDHFDStartoKpipi = (AliRDHFCutsDStartoKpipi*)filecuts->Get("DStartoKpipiCuts");
-  RDHFDStartoKpipi->SetName("DStartoKpipiCuts");
-       
-       
-       AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();
+    }
+       AliHFAssociatedTrackCuts* corrCuts=new AliHFAssociatedTrackCuts();
        corrCuts = (AliHFAssociatedTrackCuts*)filecuts2->Get("AssociatedCuts");
        corrCuts->SetName("AssociatedCuts");
        corrCuts->PrintAll();
-       
-       // mm let's see if everything is ok
-       if(!RDHFDStartoKpipi){
-               cout<<"Specific AliRDHFCuts not found"<<endl;
-               return;
-       } 
-       
        if(!corrCuts){
                cout<<"Specific associated track cuts not found"<<endl;
                return;
-       } 
+       }
        
+
+// ******************************** SELECTING THE MC PROCESS  ************************************
+
        TString selectMCproc = "";
        
        Int_t NMCevents = corrCuts->GetNofMCEventType();
@@ -74,30 +129,47 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(Bool_t runOnPbPb,Bool
                selectMCproc += Form("%d",MCEventType[k]);
        }
 
-       cout << "Select process string = " << selectMCproc << endl;
+        cout << "Select process string = " << selectMCproc << endl;
        
 
 
-  //CREATE THE TASK
-  printf("CREATE TASK \n");
+// ******************************** CREATING THE TASK ************************************
+    printf("CREATE TASK \n");
   // create the task
-  AliAnalysisTaskDStarCorrelations *task = new AliAnalysisTaskDStarCorrelations("AliAnalysisTaskDStarCorrelations",RDHFDStartoKpipi,corrCuts);
+  AliAnalysisTaskDStarCorrelations *task = new AliAnalysisTaskDStarCorrelations("AliAnalysisTaskDStarCorrelations",RDHFDStartoKpipi,corrCuts,syst,fullmode);
        
        // Setters
 
        if(!theMCon) {
                printf("Analysis on Data - reconstruction only!");
                UseReco = kTRUE;
+        printf("Analysis on Data - hadronic channel only!");
+               UseHadChannelinMC = kFALSE;
        }
+    
+    
+
        
+    task->SetNofPhiBins(nbins);
        task->SetMonteCarlo(theMCon);
        task->SetUseMixing(mixing);
        task->SetCorrelator(trackselect) ;
        task->SetUseDisplacement(usedispl);
-       task->SetRunPbPb(runOnPbPb);
+       //task->SetCollSys(syst);
        task->SetLevelOfDebug(2);
        task->SetUseReconstruction(UseReco); // set kTRUE for Using Reconstruction, kFALSe for MC Truth
-       
+    task->SetDMesonSigmas(DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
+       //task->SetDMesonSigmas(sigmas);
+    //task->SetDMesonSigmas(sigmas);
+    task->SetUseEfficiencyCorrection(UseEffic);
+    task->SetUseDmesonEfficiencyCorrection(UseDEffic);
+    
+    task->SetEfficiencyVariable(var);
+    task->SetMaxDStarEta(eta);
+    task->SetUseHadronicChannelAtKineLevel(UseHadChannelinMC);
+       if(useDStarSidebands)task->SetBkgEstimationMethod(AliAnalysisTaskDStarCorrelations::kDStarSB);
+    if(!useDStarSidebands)task->SetBkgEstimationMethod(AliAnalysisTaskDStarCorrelations::kDZeroSB);
 
        if(trackselect == 1) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged hadrons \n");
        else if(trackselect == 2) Info(" AliAnalysisTaskDStarCorrelations","Correlating D* with charged kaons \n");
@@ -108,97 +180,155 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(Bool_t runOnPbPb,Bool
 
   // Create and connect containers for input/output
        //TString dcavalue = " ";
-       if(!theMCon) TString contname = "Data";
-       if(theMCon) TString contname = "MonteCarlo";
-       TString contname2 = "MC";
-       if(trackselect ==1) TString particle = "Hadron";
-       if(trackselect ==2) TString particle = "Kaon";
-       if(trackselect ==3) TString particle = "KZero";
-       
-       TString cutname = "cuts" ;
+    
+  TString contname1 = "OutputEvent";
+    TString contname2 = "OutputDmeson";
+    TString contname3 = "OutputTracks";
+    TString contname4 = "OutputEventMixing";
+    TString contname5 = "OutputCorrelations";
+    TString contname6 = "OutputMC";
+    TString counter = "NormCounter";
+    TString cutname1 = "Dcuts" ;
        TString cutname2 = "hadroncuts" ;
+    
+    //if(suffix != ""){
+        contname1 += suffix;
+        contname2 += suffix;
+        contname3 += suffix;
+        contname4 += suffix;
+        contname5 += suffix;
+         contname6 += suffix;
+        counter += suffix;
+        cutname1 += suffix;
+        cutname2 += suffix;
+        
+        
+   // }
+    
+   // else{
+    
+       //if(!theMCon) TString contname = "Data";
+       //if(theMCon) TString contname = "MonteCarlo";
+       //TString contname2 = "MC";
+       //if(trackselect ==1) TString particle = "Hadron";
+       //if(trackselect ==2) TString particle = "Kaon";
+       //if(trackselect ==3) TString particle = "KZero";
+       
+       
        TString outputfile = AliAnalysisManager::GetCommonFileName();
-       TString outputfileMC = AliAnalysisManager::GetCommonFileName();
-       TString counter = "NormCounter";
-       outputfile += ":PWGHF_D2H_";
-       outputfileMC += ":PWGHF_D2H_";
+       //TString outputfileMC = AliAnalysisManager::GetCommonFileName();
+       //TString counter = "NormCounter";
+       outputfile += ":PWGHF_HFCJ_";
+       //outputfileMC += ":PWGHF_HFCJ_";
        
        if(!mixing) {
                outputfile += "SE";
-               outputfileMC += "SE";
-               contname += "SE";
+               //outputfileMC += "SE";
+               /*contname1 += "SE";
                contname2 += "SE";
-               cutname += "SE";
-               cutname2 += "SE";
-               counter+= "SE";
+        contname3 += "SE";
+        contname4 += "SE";
+        contname5 += "SE";
+        counter+= "SE";
+        cutname1 += "SE";
+               cutname2 += "SE";*/
+               
        }
        if(mixing){
                outputfile += "ME";
-               outputfileMC += "ME";
-               contname += "ME";
-               contname2 += "ME";
-               cutname += "ME";
-               cutname2 += "ME";
-               counter+= "ME";
+               //outputfileMC += "ME";
+               
        }
-       outputfile += "Dphi_DStar";
-       outputfileMC += "Dphi_DStar";
+    
+
+    
+       /*outputfile += "Dphi_DStar";
+       //outputfileMC += "Dphi_DStar";
        outputfile += particle;
-       outputfileMC += particle;
-       cutname += particle;
-       cutname2 += particle;
-       contname += particle;
-       contname2 += particle;
-       counter+= particle;
-       
+       //outputfileMC += particle;
+       */
+    if(UseEffic){
+        outputfile += "_EffY_";
+               //outputfileMC += "_EffY_";
+       
+    }
+    
+    if(!UseEffic){
+        outputfile += "_EffN_";
+               //outputfileMC += "_EffN_";
+               
+    }
+    
+    if(UseDEffic){
+        TString string = "DEffY_";
+        
+        if(var == AliAnalysisTaskDStarCorrelations::kNone) string += "vsPt_";
+        if(var == AliAnalysisTaskDStarCorrelations::kMult) string += "vsPtMult_";
+        if(var == AliAnalysisTaskDStarCorrelations::kCentr) string += "vsPCentrt_";
+        if(var == AliAnalysisTaskDStarCorrelations::kRapidity) string += "vsPtY_";
+        if(var == AliAnalysisTaskDStarCorrelations::kEta) string += "vsPtEta_";
+        
+        outputfile += string;
+               //outputfileMC += string;
+               
+    }
+    
+    if(!UseDEffic){
+        outputfile += "DEffN_";
+               //outputfileMC += "DEffN_";
+               
+    }
+       
+    
+    outputfile += Form("%d_bins_",nbins);
+       //outputfileMC += Form("%d_bins_",nbins);
+
+    
        
+       outputfile += suffix;
+       //outputfileMC += Form("task_%d",tasknumber);
        
-       outputfile += DCutObjNamePrefix;
-       outputfileMC += DCutObjNamePrefix;
-       cutname += DCutObjNamePrefix;
-       cutname2 += DCutObjNamePrefix;
-       contname += DCutObjNamePrefix;
-       contname2 += DCutObjNamePrefix;
-       counter+= DCutObjNamePrefix;
        
-       outputfile += TrackCutObjNamePrefix;
-       outputfileMC += TrackCutObjNamePrefix;
+/*     outputfile += TrackCutObjNamePrefix;
+       //outputfileMC += TrackCutObjNamePrefix;
        cutname += TrackCutObjNamePrefix;
        cutname2 += TrackCutObjNamePrefix;
        contname += TrackCutObjNamePrefix;
        contname2 += TrackCutObjNamePrefix;
        counter+= TrackCutObjNamePrefix;
-       
+*/     
        outputfile += selectMCproc;
-       outputfileMC += selectMCproc;
-       cutname += selectMCproc;
-       cutname2 += selectMCproc;
-       contname += selectMCproc;
-       contname2 += selectMCproc;
-       counter+= selectMCproc;
+       //outputfileMC += selectMCproc;
+       
        
        TString reco = "";
        
        if(UseReco) reco = "_reco";
-       if(!UseReco) reco = "_MCTruth";
-       
+       if(!UseReco) {
+        if(UseHadChannelinMC) reco = "_MCTruthHadChan";
+        if(!UseHadChannelinMC) reco = "_MCTruthAllChan";
+       }
        outputfile += reco;
-       outputfileMC += reco;
-       cutname += reco;
-       cutname2 += reco;
-       contname += reco;
-       contname2 += reco;
-       counter+= reco;
+       //outputfileMC += reco;
+
        
+       TString nsigma = Form("_%.0f_%.0f%.0f%.0f_sigmas",DStarSigma,D0Sigma,D0SBSigmaLow,D0SBSigmaHigh);
        
+       //cout << "nsigma string = "<< nsigma << endl;
+       
+       outputfile += nsigma;
+       //outputfileMC += nsigma;
+
+       
+       /*
        cout << contname << endl;
        cout << contname2 << endl;
        cout << cutname << endl;
        cout << cutname2 << endl;
        cout << counter << endl;
-       cout << outputfile << endl;
+       cout << outputfile << endl;*/
        //return;
-       
+       //}// end else
   mgr->AddTask(task);
   // ------ input data ------
   AliAnalysisDataContainer *cinput0  = mgr->GetCommonInputContainer();
@@ -208,13 +338,18 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(Bool_t runOnPbPb,Bool
   // output TH1I for event counting
        
        //TLists
-  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
-  AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contname2, TList::Class(),AliAnalysisManager::kOutputContainer,outputfileMC.Data());
+  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(contname1, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+  AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(contname2, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+    AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(contname3, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+     AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(contname4, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+     AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(contname5, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+    AliAnalysisDataContainer *coutput6 = mgr->CreateContainer(contname6, TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
+    // Normalization Counter
+    AliAnalysisDataContainer *coutput7 = mgr->CreateContainer(counter,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());
    // Cut Objects
-  AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(cutname,AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts D
-  AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(cutname2,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts tracks
-   // Normalization Counter
-  AliAnalysisDataContainer *coutput5 = mgr->CreateContainer(counter,AliNormalizationCounter::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());
+  AliAnalysisDataContainer *coutput8 = mgr->CreateContainer(cutname1,AliRDHFCutsDStartoKpipi::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts D
+  AliAnalysisDataContainer *coutput9 = mgr->CreateContainer(cutname2,AliHFAssociatedTrackCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data()); //cuts tracks
+
   
        
   mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
@@ -223,6 +358,10 @@ AliAnalysisTaskDStarCorrelations *AddTaskDStarCorrelations(Bool_t runOnPbPb,Bool
   mgr->ConnectOutput(task,3,coutput3);
   mgr->ConnectOutput(task,4,coutput4);
   mgr->ConnectOutput(task,5,coutput5);
+     mgr->ConnectOutput(task,6,coutput6);
+    mgr->ConnectOutput(task,7,coutput7);
+    mgr->ConnectOutput(task,8,coutput8);
+    mgr->ConnectOutput(task,9,coutput9);
 
   return task ;