]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Changes to Ds task (Gian Michele)
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Feb 2011 16:09:58 +0000 (16:09 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Feb 2011 16:09:58 +0000 (16:09 +0000)
PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx
PWG3/vertexingHF/macros/AddTaskDs.C
PWG3/vertexingHF/macros/makeTFile4CutsDstoKKpi.C [new file with mode: 0644]

index 1d1783302fddd735d7833295bd0ab4252092c833..74eaa916cc1be133c07d95f6db041b9dbf29f7ff 100644 (file)
@@ -571,7 +571,7 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
        if(fReadMC){
          if(labDs>=0){
          Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
-         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
+         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
          Int_t pdgCode0=TMath::Abs(p->GetPdgCode());
          //if(labDs>=0){
            if(pdgCode0==321) {   
@@ -633,7 +633,7 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
        if(fReadMC){
           if(labDs>=0) {         
          Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel();
-         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0);
+         AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(TMath::Abs(labDau0));
          Int_t pdgCode0=TMath::Abs(p->GetPdgCode());
          // if(labDs>=0) {       
            if(pdgCode0==211) {   
index 67fdcf9835c5f834ef2aa9d6f326dfb1f5922771..08f502ec47f3513b87886bfcc81d58ac5c788b4c 100644 (file)
@@ -1,98 +1,75 @@
-AliAnalysisTaskSEDs *AddTaskDs(Bool_t readMC=kTRUE)
+AliAnalysisTaskSEDs *AddTaskDs(Bool_t readMC=kFALSE,
+                                    TString filename="DstoKKpiCuts.root")
 {
-  //                                                                           
+  //                                                                                                                                    
   // Test macro for the AliAnalysisTaskSE for Ds candidates 
 
+  //Invariant mass histogram and                                                 
+  // association with MC truth (using MC info in AOD)                                                                                   
+  // Origin: R. Bala, bala@to.infn.it         
+  // Modified for Ds meson: G.M. Innocenti innocent@to.infn.it
+  // Get the pointer to the existing analysis manager via the static access method.                                                     
+  //==============================================================================                                                      
 
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
     ::Error("AddTaskDs", "No analysis manager to connect to.");
-    return NULL;
   }
 
 
-
-  //ptbins
-  const Int_t nptbins=4;
-  Float_t ptbins[nptbins+1]={0.,2.,3.,5.,99999.};
-
-  //setting cut values
-  Int_t nvars=14;
-  Float_t** ancutsval;
-  ancutsval=new Float_t*[nvars];
-  for(Int_t ic=0;ic<nvars;ic++){ancutsval[ic]=new Float_t[nptbins];}  
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    ancutsval[0][ipt]=0.2;
-    ancutsval[1][ipt]=0.4;
-    ancutsval[2][ipt]=0.4;
-    ancutsval[3][ipt]=0.;
-    ancutsval[4][ipt]=0.;
-    ancutsval[5][ipt]=0.005;
-    ancutsval[6][ipt]=0.038;
-    ancutsval[7][ipt]=0.;
-    ancutsval[8][ipt]=0.;
-    ancutsval[9][ipt]=0.95;
-    ancutsval[10][ipt]=0.;
-    ancutsval[11][ipt]=0.1;
-    ancutsval[12][ipt]=0.004;
-    ancutsval[13][ipt]=0.035;
-  }
-  Float_t** prcutsval;
-  prcutsval=new Float_t*[nvars];
-  for(Int_t ic=0;ic<nvars;ic++){prcutsval[ic]=new Float_t[nptbins];}  
-  for(Int_t ipt=0;ipt<nptbins;ipt++){
-    prcutsval[0][ipt]=0.2;
-    prcutsval[1][ipt]=0.4;
-    prcutsval[2][ipt]=0.4;
-    prcutsval[3][ipt]=0.;
-    prcutsval[4][ipt]=0.;
-    prcutsval[5][ipt]=0.005;
-    prcutsval[6][ipt]=0.06;
-    prcutsval[7][ipt]=0.;
-    prcutsval[8][ipt]=0.;
-    prcutsval[9][ipt]=0.85;
-    prcutsval[10][ipt]=0.;
-    prcutsval[11][ipt]=0.1;
-    prcutsval[12][ipt]=0.1;
-    prcutsval[13][ipt]=0.1;
+  TFile* filecuts=new TFile(filename.Data());
+  if(!filecuts->IsOpen()){
+    cout<<"Error: Input file not found!"<<endl;
   }
+  
+  
+  //Analysis Task
 
-  //Analysis cuts
-  AliRDHFCutsDstoKKpi *analysiscuts = new AliRDHFCutsDstoKKpi();
-  analysiscuts->SetPtBins(nptbins+1,ptbins);
-  analysiscuts->SetCuts(nvars,nptbins,ancutsval);
-  AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();
-  prodcuts->SetPtBins(nptbins+1,ptbins);
-  prodcuts->SetCuts(nvars,nptbins,prcutsval);
+  
+  AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
+  analysiscuts = (AliRDHFCutsDstoKKpi*)filecuts->Get("AnalysisCuts");
 
-  // Analysis task                                                                                                                     
+  AliRDHFCutsDstoKKpi* prodcuts=new AliRDHFCutsDstoKKpi();
+  prodcuts = (AliRDHFCutsDstoKKpi*)filecuts->Get("ProdCuts");
+  
+  //AliRDHFCutsDstoKKpi *prodcuts = (AliRDHFCutsDstoKKpi*)fileCuts->Get("ProdCuts");
+  //AliRDHFCutsDstoKKpi *analysiscuts = (AliRDHFCutsDstoKKpi*)fileCuts->Get("AnalysisCuts");
+
+  
   AliAnalysisTaskSEDs *dsTask = new AliAnalysisTaskSEDs("DsAnalysis",prodcuts,analysiscuts);
   dsTask->SetReadMC(readMC);
-  dsTask->SetDebugLevel(0);
+  //dsTask->SetDoLikeSign(kTRUE);
+  //  dsTask->SetUseTPCpid(kTRUE);
+  //dsTask->SetUseTOFpid(kTRUE);
+  dsTask->SetDebugLevel(10);
+  //dsTask->SetMassLimits(0.2);
   mgr->AddTask(dsTask);
-
-  //                                                                                                                                    
-  // Create containers for input/output                                                                                                 
+  
+  // Create containers for input/output 
+  
   AliAnalysisDataContainer *cinputDs = mgr->CreateContainer("cinputDs",TChain::Class(),
-                                                           AliAnalysisManager::kInputContainer);
-
- TString outputfile = AliAnalysisManager::GetCommonFileName(); 
- outputfile += ":PWG3_D2H_InvMassDs";
- AliAnalysisDataContainer *coutputDsCuts = mgr->CreateContainer("coutputDsCuts",TList::Class(),
-                                                            AliAnalysisManager::kOutputContainer,
-                                                               outputfile.Data());
-
+                                                              AliAnalysisManager::kInputContainer);
+  TString outputfile = AliAnalysisManager::GetCommonFileName();
+  outputfile += ":PWG3_D2H_InvMassDs";
+  
+  AliAnalysisDataContainer *coutputDsCuts = mgr->CreateContainer("coutputDsCuts",TList::Class(),
+                                                                   AliAnalysisManager::kOutputContainer,
+                                                                   outputfile.Data());
+  
   AliAnalysisDataContainer *coutputDs = mgr->CreateContainer("coutputDs",TList::Class(),
-                                                            AliAnalysisManager::kOutputContainer,
-                                                            outputfile.Data());
-
-
+                                                               AliAnalysisManager::kOutputContainer,
+                                                               outputfile.Data());
+  AliAnalysisDataContainer *coutputDsNorm = mgr->CreateContainer("coutputDsNorm",AliNormalizationCounter::Class(),
+                                                               AliAnalysisManager::kOutputContainer,
+                                                               outputfile.Data());
+  
   mgr->ConnectInput(dsTask,0,mgr->GetCommonInputContainer());
-
+  
   mgr->ConnectOutput(dsTask,1,coutputDs);
-
+  
   mgr->ConnectOutput(dsTask,2,coutputDsCuts);
+
+  mgr->ConnectOutput(dsTask,3,coutputDsNorm);  
+  
   return dsTask;
 }
diff --git a/PWG3/vertexingHF/macros/makeTFile4CutsDstoKKpi.C b/PWG3/vertexingHF/macros/makeTFile4CutsDstoKKpi.C
new file mode 100644 (file)
index 0000000..d47affc
--- /dev/null
@@ -0,0 +1,258 @@
+#include <Riostream.h>
+#include <TFile.h>
+#include <AliRDHFCutsDstoKKpi.h>
+#include <TClonesArray.h>
+#include <TParameter.h>
+
+//macro to make a .root file which contains an AliRDHFCutsDstoKKpi with loose set of cuts (for significance maximization) and TParameter with the tighest value of these cuts
+//Needed for AliAnalysisTaskSEDs, AliCFTaskVertexingHF3Prong, AliAnalysisTaskSESignificance
+
+//Use:
+//Set hard coded commented with //set this!!
+
+//.L makeTFile4CutsDstoKKpi.C
+// makeInputAliAnalysisTaskSEDs()
+// makeInputAliAnalysisTaskSESignificanceMaximization()
+
+//similar macros for the other D mesons
+
+//Author: Chiara Bianchin, cbianchi@pd.infn.it
+//        Giacomo Ortona, ortona@to.infn.it
+//        Renu Bala [Dplus Analysis and CF]
+
+//Modified for Ds meson: G.M. Innocenti, innocent@to.infn.it
+
+void makeInputAliAnalysisTaskSEDs(){
+
+ //  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g"); 
+
+    
+    AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
+    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+    //default
+    esdTrackCuts->SetRequireTPCRefit(kTRUE);
+    esdTrackCuts->SetRequireITSRefit(kTRUE);
+    //esdTrackCuts->SetMinNClustersITS(4); // default is 5
+    esdTrackCuts->SetMinNClustersTPC(70);
+    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                          AliESDtrackCuts::kAny); 
+    // default is kBoth, otherwise kAny
+    esdTrackCuts->SetMinDCAToVertexXY(0.);
+    esdTrackCuts->SetPtRange(0.3,1.e10);
+    
+    
+    
+    const Int_t nptbins=4;
+    Float_t* ptbins;
+    ptbins=new Float_t[nptbins+1];
+    ptbins[0]=0.;
+    ptbins[1]=2.;
+    ptbins[2]=3.;
+    ptbins[3]=5.;
+    ptbins[4]=99999.;
+    const Int_t nvars=14;
+    
+    // Float_t cutsArrayDstoKKpi[14]={0.2,0.3,0.3,0.,0.,0.005,0.06,0.,0.,0.7,0.,1000.,0.1,0.1};
+    
+    Float_t** prodcutsval;
+    prodcutsval=new Float_t*[nvars];
+    for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  
+    for(Int_t ipt=0;ipt<nptbins;ipt++){
+      prodcutsval[0][ipt]=0.2;
+      prodcutsval[1][ipt]=0.3;
+      prodcutsval[2][ipt]=0.3;
+      prodcutsval[3][ipt]=0.;
+      prodcutsval[4][ipt]=0.;
+      prodcutsval[5][ipt]=0.005;
+      prodcutsval[6][ipt]=0.06;
+      prodcutsval[7][ipt]=0.0;
+      prodcutsval[8][ipt]=0.;
+      prodcutsval[9][ipt]=0.7;
+      prodcutsval[10][ipt]=0.;
+      prodcutsval[11][ipt]=1000.0;
+      prodcutsval[12][ipt]=0.1;
+      prodcutsval[13][ipt]=0.1;
+    }
+    
+    
+    Float_t** anacutsval;
+    anacutsval=new Float_t*[nvars];
+  
+    for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}  
+    for(Int_t ipt=0;ipt<nptbins;ipt++){
+    anacutsval[0][ipt]=0.2;
+    anacutsval[1][ipt]=0.4;
+    anacutsval[2][ipt]=0.4;
+    anacutsval[3][ipt]=0.;
+    anacutsval[4][ipt]=0.;
+    anacutsval[5][ipt]=0.005;
+    anacutsval[6][ipt]=0.038;
+    anacutsval[7][ipt]=0.;
+    anacutsval[8][ipt]=0.;
+    anacutsval[9][ipt]=0.95;
+    anacutsval[10][ipt]=0.;
+    anacutsval[11][ipt]=0.1;
+    anacutsval[12][ipt]=0.004;
+    anacutsval[13][ipt]=0.035;
+    }
+    
+    AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();
+    prodcuts->SetName("ProdCuts");
+    prodcuts->SetPtBins(nptbins+1,ptbins);
+    prodcuts->SetCuts(nvars,nptbins,prodcutsval);
+    
+    
+    AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
+    analysiscuts->SetName("AnalysisCuts");
+    analysiscuts->SetTitle("Cuts for Ds Analysis and CF");
+    analysiscuts->SetPtBins(nptbins+1,ptbins);
+    analysiscuts->SetCuts(nvars,nptbins,anacutsval);
+    analysiscuts->AddTrackCuts(esdTrackCuts);
+    analysiscuts->SetUsePID(kFALSE);
+    cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
+    
+    analysiscuts->PrintAll();
+    TFile* fout=new TFile("DstoKKpiCuts.root","recreate");   
+    fout->cd();
+    prodcuts->Write();
+    analysiscuts->Write();
+    fout->Close();
+    
+    
+}
+
+
+void makeInputAliAnalysisTaskSESignificanceMaximization(){
+  
+  AliRDHFCutsDstoKKpi* RDHFDstoKKpi=new AliRDHFCutsDstoKKpi();
+  RDHFDstoKKpi->SetName("loosercuts");
+  RDHFDstoKKpi->SetTitle("Cuts for significance maximization");
+
+  AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
+  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  //default
+  esdTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE);
+  //esdTrackCuts->SetMinNClustersITS(4); // default is 5
+  esdTrackCuts->SetMinNClustersTPC(70);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                        AliESDtrackCuts::kAny); 
+  // default is kBoth, otherwise kAny
+  esdTrackCuts->SetMinDCAToVertexXY(0.);
+  esdTrackCuts->SetPtRange(0.3,1.e10);
+
+  RDHFDstoKKpi->AddTrackCuts(esdTrackCuts);
+
+  const Int_t nvars=14;
+
+  const Int_t nptbins=4;
+  Float_t* ptbins;
+  ptbins=new Float_t[nptbins+1];
+  ptbins[0]=0.;
+  ptbins[1]=2.;
+  ptbins[2]=3.;
+  ptbins[3]=5.;
+  ptbins[4]=99999.;
+  
+  RDHFDstoKKpi->SetPtBins(nptbins+1,ptbins);
+    
+  //setting my cut values
+    
+  Float_t** prodcutsval;
+  prodcutsval=new Float_t*[nvars];
+  for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  
+  for(Int_t ipt=0;ipt<nptbins;ipt++){
+     prodcutsval[0][ipt]=0.2;
+     prodcutsval[1][ipt]=0.4;
+     prodcutsval[2][ipt]=0.4;
+     prodcutsval[3][ipt]=0.;
+     prodcutsval[4][ipt]=0.;
+     prodcutsval[5][ipt]=0.005;
+     prodcutsval[6][ipt]=0.03;
+     prodcutsval[7][ipt]=0.1;
+     prodcutsval[8][ipt]=0.5;
+     prodcutsval[9][ipt]=0.9;
+     prodcutsval[10][ipt]=0.;
+     prodcutsval[11][ipt]=1000.0;
+     prodcutsval[12][ipt]=0.02;
+     prodcutsval[13][ipt]=0.1;
+  }
+
+  RDHFDstoKKpi->SetCuts(nvars,nptbins,prodcutsval);
+
+  Int_t nvarsforopt=RDHFDstoKKpi->GetNVarsForOpt();
+  const Int_t dim=3; //set this!!
+  Bool_t *boolforopt;
+  boolforopt=new Bool_t[nvars];
+  if(dim>nvarsforopt){
+    cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
+    return;
+  } else {
+    if(dim==nvarsforopt){
+      boolforopt=RDHFDstoKKpi->GetVarsForOpt();
+    }else{
+      TString *names;
+      names=new TString[nvars];
+      TString answer="";
+      Int_t checktrue=0;
+      names=RDHFDstoKKpi->GetVarNames();
+      for(Int_t i=0;i<nvars;i++){
+       cout<<names[i]<<" for opt? (y/n)"<<endl;
+       cin>>answer;
+       if(answer=="y") {
+         boolforopt[i]=kTRUE;
+         checktrue++;
+       }
+       else boolforopt[i]=kFALSE;
+      }
+      if (checktrue!=dim) {
+       cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
+       return;
+      }
+      RDHFDstoKKpi->SetVarsForOpt(dim,boolforopt);
+    }
+  }
+
+
+  Float_t tighterval[dim][nptbins];
+  //sigmavert
+  //costhetapoint
+  //inv. mass (Mphi-MKK)
+
+  //number of steps for each variable is 4 now
+  //set this!!
+
+  // tighterval[var][ptbin]
+  tighterval[0][0]=0.02;
+  tighterval[0][1]=0.02;
+  tighterval[0][2]=0.02;
+  tighterval[0][3]=0.02;
+
+  tighterval[1][0]=1.;
+  tighterval[1][1]=1.;
+  tighterval[1][2]=1.;
+  tighterval[1][3]=1.;
+  
+  tighterval[2][0]=0.004;
+  tighterval[2][1]=0.004;
+  tighterval[2][2]=0.004;
+  tighterval[2][3]=0.004;
+  
+
+  TString name=""; 
+  Int_t arrdim=dim*nptbins;
+  TClonesArray max("TParameter<float>",arrdim);
+  for (Int_t ipt=0;ipt<nptbins;ipt++){
+    for(Int_t ival=0;ival<dim;ival++){
+      name=Form("par%dptbin%d",ival,ipt);
+      new(max[ipt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][ipt]);
+    }
+  }
+
+  TFile* fout=new TFile("cuts4SignifMaximDs.root","recreate");   //set this!! 
+  fout->cd();
+  RDHFDstoKKpi->Write();
+  max.Write();
+  fout->Close();
+
+}