]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/muon/AnalysisTrainMuonComp.C
Tasks for comparing ESD and AOD information (Mercedes)
[u/mrichter/AliRoot.git] / PWG3 / muon / AnalysisTrainMuonComp.C
diff --git a/PWG3/muon/AnalysisTrainMuonComp.C b/PWG3/muon/AnalysisTrainMuonComp.C
new file mode 100644 (file)
index 0000000..6bff019
--- /dev/null
@@ -0,0 +1,145 @@
+void AnalysisTrainMuonComp(){
+  TStopwatch timer;
+  timer.Start();
+
+  printf("*** Connect to AliEn ***\n");
+  TGrid::Connect("alien://");
+
+  gSystem->Load("libTree.so");
+  gSystem->Load("libGeom.so");
+  gSystem->Load("libVMC.so");
+  gSystem->Load("libPhysics.so");
+  
+  // Common packages
+  SetupPar("STEERBase");
+  gSystem->Load("libSTEERBase.so");
+  SetupPar("ESD");
+  gSystem->Load("libVMC.so");
+  gSystem->Load("libESD.so");
+  SetupPar("AOD");
+  gSystem->Load("libAOD.so");
+  SetupPar("ANALYSIS");
+  gSystem->Load("libANALYSIS.so");
+  SetupPar("ANALYSISalice");
+  gSystem->Load("libANALYSISalice.so");
+  // Analysis-specific packages
+  SetupPar("PWG3muon");      
+  gSystem->Load("libPWG3muon.so");
+  
+  gROOT->LoadMacro("AliAnalysisTaskAODvsESD.cxx+");  
+
+  const char *collectionfile = "wn.xml";
+
+  //Usage of event tags
+  AliTagAnalysis *analysis = new AliTagAnalysis(); 
+  
+  TChain* chain = 0x0;
+  chain = analysis->GetChainFromCollection(collectionfile,"esdTree");
+  chain->SetBranchStatus("*Calo*",0);
+
+  // Define the analysis manager
+  AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Analysis train");
+
+  // ESD input handler
+  AliESDInputHandler *esdHandler = new AliESDInputHandler();
+  esdHandler->SetInactiveBranches("FMD CaloCluster");
+  mgr->SetInputEventHandler(esdHandler);
+
+  // AOD output handler
+  AliAODHandler* aodHandler = new AliAODHandler();  
+  aodHandler->SetOutputFileName("AOD.root");  
+  mgr->SetOutputEventHandler(aodHandler);
+  
+  // Set of cuts for the ESD filter
+  // standard cuts
+  AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");
+  esdTrackCutsL->SetMinNClustersTPC(50);
+  esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
+  esdTrackCutsL->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
+  esdTrackCutsL->SetRequireTPCRefit(kTRUE);
+  esdTrackCutsL->SetMinNsigmaToVertex(3);
+  esdTrackCutsL->SetRequireSigmaToVertex(kTRUE);
+  esdTrackCutsL->SetAcceptKingDaughters(kFALSE);
+  // hard cuts
+  AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");
+  esdTrackCutsH->SetMinNClustersTPC(100);
+  esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);
+  esdTrackCutsH->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
+  esdTrackCutsH->SetRequireTPCRefit(kTRUE);
+  esdTrackCutsH->SetMinNsigmaToVertex(2);
+  esdTrackCutsH->SetRequireSigmaToVertex(kTRUE);
+  esdTrackCutsH->SetAcceptKingDaughters(kFALSE);
+  
+  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
+  trackFilter->AddCuts(esdTrackCutsL);
+  trackFilter->AddCuts(esdTrackCutsH);
+  
+   // first task - ESD filter task putting standard info in the output generic AOD 
+  AliAnalysisTaskESDfilter *esdFilter = new AliAnalysisTaskESDfilter("ESD Filter");
+  //esdFilter->SetTrackFilter(trackFilter);
+  mgr->AddTask(esdFilter);
+  
+  // second task - ESD filter task putting muon info in the output generic AOD 
+  AliAnalysisTaskESDMuonFilter *esdMuonFilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
+  mgr->AddTask(esdMuonFilter);
+  
+  // third task - compare created AOD and exixting ESDs
+  AliAnalysisTaskAODvsESD *AODvsESD = new AliAnalysisTaskAODvsESD("aodVsEsd");
+  mgr->AddTask(AODvsESD);
+
+  // Input ESD container
+  AliAnalysisDataContainer *esdIn = mgr->CreateContainer("input1",TChain::Class(), AliAnalysisManager::kInputContainer);
+  // Output AOD container. 
+  AliAnalysisDataContainer *aodOut = mgr->CreateContainer("output1", TTree::Class(), AliAnalysisManager::kOutputContainer, "default");
+  // Output comparison
+  AliAnalysisDataContainer *listOut = mgr->CreateContainer("output2", TList::Class(), AliAnalysisManager::kOutputContainer, "AODvsESDoutput.root");
+
+  // Connect containers to tasks slots
+  mgr->ConnectInput(esdFilter,0,esdIn); 
+  mgr->ConnectOutput(esdFilter,0,aodOut);
+  
+  mgr->ConnectInput(esdMuonFilter,0,esdIn);
+  mgr->ConnectOutput(esdMuonFilter,0,aodOut);
+
+  mgr->ConnectInput(AODvsESD,0,esdIn);
+  mgr->ConnectOutput(AODvsESD,0,listOut);
+  
+  // Run the analysis
+  if (mgr->InitAnalysis()){
+    mgr->PrintStatus();
+    mgr->StartAnalysis("local",chain);
+  }   
+  timer.Stop();
+  timer.Print();
+}
+
+//______________________________________________________________________________
+void SetupPar(char* pararchivename)
+{
+  if (pararchivename) {
+    char processline[1024];
+    sprintf(processline,".! tar xvzf %s.par",pararchivename);
+    gROOT->ProcessLine(processline);
+    TString ocwd = gSystem->WorkingDirectory();
+    gSystem->ChangeDirectory(pararchivename);
+    
+    // check for BUILD.sh and execute
+    if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
+      printf("*** Building PAR archive    ***\n");
+      
+      if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
+       Error("runProcess","Cannot Build the PAR Archive! - Abort!");
+       return -1;
+      }
+    }
+    // check for SETUP.C and execute
+    if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
+      printf("*** Setup PAR archive       ***\n");
+      gROOT->Macro("PROOF-INF/SETUP.C");
+    }
+    
+    gSystem->ChangeDirectory(ocwd.Data());
+    printf("Current dir: %s\n", ocwd.Data());
+  } 
+}
+