]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
-add dir for jpsi macros
authorjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 May 2012 14:10:27 +0000 (14:10 +0000)
committerjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 May 2012 14:10:27 +0000 (14:10 +0000)
-add user task of marcel

PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C [new file with mode: 0644]
PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C [new file with mode: 0644]

diff --git a/PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C b/PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C
new file mode 100644 (file)
index 0000000..24d859f
--- /dev/null
@@ -0,0 +1,77 @@
+AliAnalysisTask *AddTask_mfigueredo_JPsi(Bool_t hasMC_aod = kFALSE){
+  //get the current analysis manager
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    ::Error("AddTask_mfigueredo_JPsi", "No analysis manager found.");
+    return NULL;
+  }
+  if (!mgr->GetInputEventHandler()) {
+    ::Error("AddTask_mfigueredo_JPsi", "This task requires an input event handler");
+    return NULL;
+  }
+
+  //Do we have an MC handler?
+  Bool_t hasMC=(mgr->GetMCtruthEventHandler()!=0x0);
+  
+  TString configFile("ConfigJpsi_mf_pp.C");
+  if (hasMC) configFile="../PWGDQ/dielectron/macros/ConfigJpsi2eeEff.C";
+  Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
+
+  //create task and add it to the manager
+  AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("MultiDie");
+  mgr->AddTask(task);
+  
+  //load dielectron configuration file
+  TString checkconfig="ConfigJpsi_mf_pp";
+  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=ConfigJpsi_mf_pp(i,isAOD);
+    if (isAOD) jpsi->SetHasMC(hasMC_aod);
+    if (jpsi) task->AddDielectron(jpsi);
+  }
+
+  //Add event filter
+  AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0");
+  if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny);
+  eventCuts->SetRequireVertex();
+  eventCuts->SetMinVtxContributors(1);
+  eventCuts->SetVertexZ(-10.,10.);
+//   eventCuts->SetCentralityRange(0.,20.);
+  // add event filter
+//   task->SetEventFilter(eventCuts);
+
+  // pileup rejection
+//   task->SetRejectPileup();
+   task->SetTriggerMask(AliVEvent::kEMCEGA);
+   task->UsePhysicsSelection();
+  //----------------------
+  //create data containers
+  //----------------------
+  
+  TString containerName = mgr->GetCommonFileName();
+  containerName += ":PWGDQ_dielectron";
+    
+  //create output container
+  
+  AliAnalysisDataContainer *cOutputHist1 =
+    mgr->CreateContainer("mfigueredo_QA", TList::Class(), AliAnalysisManager::kOutputContainer,
+                         containerName.Data());
+  
+  AliAnalysisDataContainer *cOutputHist2 =
+    mgr->CreateContainer("mfigueredo_CF", TList::Class(), AliAnalysisManager::kOutputContainer,
+                         containerName.Data());
+
+  AliAnalysisDataContainer *cOutputHist3 =
+    mgr->CreateContainer("mfigueredo_EventStat", TH1D::Class(), AliAnalysisManager::kOutputContainer,
+                         containerName.Data());
+  
+  mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
+  mgr->ConnectOutput(task, 1, cOutputHist1);
+  mgr->ConnectOutput(task, 2, cOutputHist2);
+  mgr->ConnectOutput(task, 3, cOutputHist3);
+  
+  return task;
+}
diff --git a/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C b/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C
new file mode 100644 (file)
index 0000000..2586ac2
--- /dev/null
@@ -0,0 +1,283 @@
+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+SPDAny+pt>1+PID;basicQ+EMCal+SPDAny+pt6_20;basicQ+EMCal+SPDAny+pt8_20;EMCal+SPDAny+pt6_20;EMCal+SPDAny+pt8_20;EMCal+SPDFirst+pt6_20;EMCal+SPDFirst+pt8_20;EMCal+SPDAny");
+TObjArray *arrNamesDieleData=namesDieleData.Tokenize("; ");
+
+const Int_t nDie=arrNamesDieleData->GetEntries();
+
+AliDielectron* ConfigJpsi_mf_pp(Int_t cutDefinition, Bool_t isAOD=kFALSE)
+{
+  //
+  // 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()));
+
+  // cut setup
+  SetupEventCutsDieleFilter(diele, cutDefinition, isAOD);
+  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!
+  if (cutDefinition==nDie-1) InitCFDieleData(diele, cutDefinition, isAOD);
+
+  AliDielectronTrackRotator *rot=new AliDielectronTrackRotator;
+  rot->SetConeAnglePhi(TMath::Pi());
+  rot->SetIterations(10);
+  diele->SetTrackRotator(rot);
+  return diele;
+}
+
+//______________________________________________________________________________________
+void SetupEventCutsDieleFilter(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD=kFALSE)
+{
+  //
+  // Setup the event cuts
+  //
+  AliDielectronVarCuts *vtxZ = new AliDielectronVarCuts("vtxZ","Vertex z cut");
+  vtxZ->AddCut(AliDielectronVarManager::kZvPrim,-10.,10.);
+  
+  AliDielectronVarCuts *Centrality = new AliDielectronVarCuts("Centrality","Centrality Percentile");
+  Centrality->AddCut(AliDielectronVarManager::kCentrality,0.,40.);
+  
+  diele->GetEventFilter().AddCuts(vtxZ);
+  if(cutDefinition<nDie-1) diele->GetEventFilter().AddCuts(Centrality);
+  
+  
+}
+
+
+//______________________________________________________________________________________
+void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+  //
+  // Setup the track cuts
+  //
+  
+  //ESD quality cuts DielectronTrackCuts
+  if (!isAOD) {
+    diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleData(cutDefinition));
+  } else {
+    AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts");
+    if (cutDefinition==5||cutDefinition==6)
+      trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+    else 
+      trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+    trackCuts->SetRequireTPCRefit(kTRUE);
+    trackCuts->SetRequireITSRefit(kTRUE);
+    diele->GetTrackFilter().AddCuts(trackCuts);
+  }
+
+  //Pt cut ----------------------------------------------------------
+  AliDielectronVarCuts *pt = new AliDielectronVarCuts("ptCut","pt cut");
+  pt->AddCut(AliDielectronVarManager::kPt,1.,1e30);
+  pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.);
+  //AOD additions since there are no AliESDtrackCuts -----------------
+  pt->AddCut(AliDielectronVarManager::kNclsTPC,60.,160.);
+  pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9);
+  if(cutDefinition>2&&cutDefinition!=nDie-1) pt->AddCut(AliDielectronVarManager::kTPCsignal,70.,120.);
+  if(cutDefinition==nDie-1) pt->AddCut(AliDielectronVarManager::kTPCsignal,50.,150.); 
+
+  diele->GetTrackFilter().AddCuts(pt);
+
+  // PID cuts --------------------------------------------------------
+  AliDielectronPID *pid = new AliDielectronPID("PID10","TPC nSigma |e|<3 + |Pi|>3 + |P|>3 + TOF nSigma |e|<3");
+  pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
+  pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE);
+  pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-20.,3.,0.,0.,kTRUE);
+  if(cutDefinition==0) diele->GetTrackFilter().AddCuts(pid);
+  // PID cuts 2 ---- For EMCal purposes (all electron band) ----------------------------------------------------
+  AliDielectronPID *pid2 = new AliDielectronPID("PIDforemcal","TPC nSigma |e|<3");
+  pid2->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.);
+  if(cutDefinition==1||cutDefinition==2) diele->GetTrackFilter().AddCuts(pid2);
+  
+}
+
+//______________________________________________________________________________________
+void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD)
+{
+  //
+  // Setup the pair cuts
+  //
+  //Invariant mass and rapidity selection
+  AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("0<M<5+|Y|<.9+PtEMCalleg","0<M<5 + |Y|<.9+PtEMCalleg");
+  pairCut->AddCut(AliDielectronVarManager::kM,0.,5.);
+  pairCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9);
+  if(cutDefinition==1&&cutDefinition==3&&cutDefinition==5)     pairCut->AddCut(AliDielectronVarManager::kPt,6.,20.);
+  if(cutDefinition==2&&cutDefinition==4&&cutDefinition==6)     pairCut->AddCut(AliDielectronVarManager::kPt,8.,20.);
+  if(cutDefinition==nDie-1)                                    pairCut->AddCut(AliDielectronVarManager::kPt,2.,100.);
+  diele->GetPairFilter().AddCuts(pairCut);
+  
+  if(cutDefinition>1){
+         AliDielectronVarCuts *mycut = new AliDielectronVarCuts("ptCutEMCAL","cut for EMCal");
+         mycut->AddCut(AliDielectronVarManager::kEMCALnSigmaEle,-3.,3.);
+         mycut->AddCut(AliDielectronVarManager::kP,5.,1e30);
+         AliDielectronPairLegCuts *varpair=new AliDielectronPairLegCuts();
+         varpair->GetLeg1Filter().AddCuts(mycut);
+         diele->GetPairFilter().AddCuts(varpair);
+  }
+  
+}
+
+//______________________________________________________________________________________
+AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition)
+{
+  //
+  // Setup default AliESDtrackCuts
+  //
+  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts;
+
+  // basic track quality cuts  (basicQ)
+  esdTrackCuts->SetMaxDCAToVertexZ(3.0);
+  esdTrackCuts->SetMaxDCAToVertexXY(1.0);
+  esdTrackCuts->SetEtaRange( -0.9 , 0.9 );
+  esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE);
+  esdTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdTrackCuts->SetPtRange(.8,1e30);
+  esdTrackCuts->SetMinNClustersTPC(70);
+  esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+
+  if (cutDefinition==5||cutDefinition==6)
+       esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
+       else esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);  
+
+  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->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim);
+    histos->UserHistogram("Event","Centrality","Centrality;Cent(%)",100,0.,100.,AliDielectronVarManager::kCentrality);
+//   }
+  
+  //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","dEdx_Phi","dEdx;P [GeV];TPC signal (arb units);#tracks",
+                        200,0.,2*TMath::Pi(),100,0.,200.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCsignal,kTRUE);
+
+  histos->UserHistogram("Track","dEdx_nSigmaEMCal","dEdx;NsigmaEmcal;TPC signal (arb units);#tracks",
+                        200,-10.,10.,100,0.,200.,AliDielectronVarManager::kEMCALnSigmaEle,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",
+                        251,-.01,5.01,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);
+  
+  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,"2.0, 4.0, 6., 8.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::kPairType,11,0,11);
+  cf->AddVariable(AliDielectronVarManager::kOpeningAngle,"0.,0.2,0.5,1.,2.,3.14");
+  //leg variables
+  cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 100.0",kTRUE);
+  cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 75, 80, 85, 90, 100, 120, 160",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::kTPCsignal,"60.,65.,68.,70.,80.,90.,100.,120.,150.",kTRUE);
+
+  //event variables
+  cf->AddVariable(AliDielectronVarManager::kNaccTrcklts,"0.0, 9.0, 17.0, 25.0, 36.0, 55.0, 500.0");
+  cf->AddVariable(AliDielectronVarManager::kCentrality,"0.0,20.0,40.0,80.0");
+  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);
+  
+}
+