new class for omega measurement via 3 pion combination
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Jul 2009 15:45:52 +0000 (15:45 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Jul 2009 15:45:52 +0000 (15:45 +0000)
PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.cxx [new file with mode: 0644]
PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.h [new file with mode: 0644]
PWG4/omega3pi/grid/AnaTaskOmega3pi.C [new file with mode: 0644]
PWG4/omega3pi/grid/Omega.jdl [new file with mode: 0644]
PWG4/omega3pi/grid/README [new file with mode: 0644]
PWG4/omega3pi/grid/ana.sh [new file with mode: 0644]
PWG4/omega3pi/grid/list.txt [new file with mode: 0644]
PWG4/omega3pi/grid/submit.sh [new file with mode: 0644]

diff --git a/PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.cxx b/PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.cxx
new file mode 100644 (file)
index 0000000..4e3fddd
--- /dev/null
@@ -0,0 +1,264 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: Boris Polishchuk (Boris.Polishchuk@cern.ch)                    *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+////////////////////////////////////////////////////////////////////////////
+//------------------------------------------------------------------------// 
+// Class used to do omega(782) -> pi0 pi+ pi- analysis.                   //
+//------------------------------------------------------------------------//
+////////////////////////////////////////////////////////////////////////////
+
+#include "AliAnalysisTaskOmegaPi0PiPi.h"
+#include "TList.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "AliESDEvent.h"
+#include "TRefArray.h"
+#include "TLorentzVector.h"
+#include "AliESDCaloCluster.h"
+#include "AliESDv0.h"
+#include "AliESDtrack.h"
+
+ClassImp(AliAnalysisTaskOmegaPi0PiPi)
+
+AliAnalysisTaskOmegaPi0PiPi::AliAnalysisTaskOmegaPi0PiPi() :
+  AliAnalysisTaskSE(),fOutputContainer(0x0),fhM2piSel(0x0),fhDxy(0x0),fhMggSel(0x0),
+  fhImpXY(0x0),fhM3pi0to2(0x0),fhM3pi2to4(0x0),fhM3pi4to6(0x0),fhM3pi6to8(0x0),
+  fhM3pi8to10(0x0),fhM3pi10to12(0x0),fhM3pi12(0x0),fhM3pi0to8(0x0)
+{
+  //Default constructor.
+}
+
+
+AliAnalysisTaskOmegaPi0PiPi::AliAnalysisTaskOmegaPi0PiPi(const char* name) :
+  AliAnalysisTaskSE(name),fOutputContainer(0x0),fhM2piSel(0x0),fhDxy(0x0),fhMggSel(0x0),
+  fhImpXY(0x0),fhM3pi0to2(0x0),fhM3pi2to4(0x0),fhM3pi4to6(0x0),fhM3pi6to8(0x0),
+  fhM3pi8to10(0x0),fhM3pi10to12(0x0),fhM3pi12(0x0),fhM3pi0to8(0x0)
+{
+  //Constructor used to create a named task.
+
+  DefineOutput(1,TList::Class());
+}
+
+
+AliAnalysisTaskOmegaPi0PiPi::~AliAnalysisTaskOmegaPi0PiPi()
+{
+  //Destructor
+  
+  if(fOutputContainer){
+    fOutputContainer->Delete() ; 
+    delete fOutputContainer ;
+  }
+}
+
+
+void AliAnalysisTaskOmegaPi0PiPi::UserCreateOutputObjects()
+{
+  //Allocates histograms and puts it to the output container.
+  
+  fOutputContainer = new TList();
+  
+  fhM2piSel = new TH1F("hM2pi_sel","V0 inv. mass, Dxy<2cm",100,0.,1.);
+  fOutputContainer->Add(fhM2piSel);
+
+  fhDxy = new TH1F("hDxy","Distance from V0 to primary vertex in XY-plane", 500, 0.,500.);
+  fOutputContainer->Add(fhDxy);
+
+  fhMggSel = new TH1F("hMgg_sel","Inv. mass of two clusters, pT>1GeV",100,0.,0.3);
+  fOutputContainer->Add(fhMggSel);
+
+  fhImpXY = new TH1F("hImpXY","Impact parameters in XY-plane",1000,0.,1.);
+  fOutputContainer->Add(fhImpXY);
+
+
+  //M(3pi) vs pT(3pi), ptrack < 2GeV
+  fhM3pi0to2 = new TH2F("hM3pi_0_2","pTrack: 0-2GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi0to2);
+
+  //M(3pi) vs pT(3pi), 2GeV < ptrack < 4GeV
+  fhM3pi2to4 = new TH2F("hM3pi_2_4","pTrack: 2-4GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi2to4);
+
+  //M(3pi) vs pT(3pi), 4GeV < ptrack < 6GeV
+  fhM3pi4to6 = new TH2F("hM3pi_4_6","pTrack: 4-6GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi4to6);
+
+  //M(3pi) vs pT(3pi), 6GeV < ptrack < 8GeV
+  fhM3pi6to8 = new TH2F("hM3pi_6_8","pTrack: 6-8GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi6to8);
+
+  //M(3pi) vs pT(3pi), 8GeV < ptrack < 10GeV
+  fhM3pi8to10 = new TH2F("hM3pi_8_10","pTrack: 8-10GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi8to10);
+
+  //M(3pi) vs pT(3pi), 10GeV < ptrack < 12GeV
+  fhM3pi10to12 = new TH2F("hM3pi_10_12","pTrack: 10-12GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi10to12);
+
+  //M(3pi) vs pT(3pi), ptrack > 12GeV
+  fhM3pi12 = new TH2F("hM3pi_12","pTrack>12GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi12);
+
+  //M(3pi) vs pT(3pi), ptrack < 8GeV
+  fhM3pi0to8 = new TH2F("hM3pi_0_8","pTrack: 0-8GeV",100,0.,10., 200,0.4,1.);
+  fOutputContainer->Add(fhM3pi0to8);
+
+}
+
+
+void AliAnalysisTaskOmegaPi0PiPi::UserExec(Option_t* /* option */)
+{
+  //Main function that does all the job.
+  
+  printf("We are within AliAnalysisTaskOmegaPi0PiPi::UserExec.");
+
+  AliVEvent* event = InputEvent();
+  AliESDEvent* esd = (AliESDEvent*)event ;
+
+  Double_t v[3] ; //vertex ;
+  esd->GetVertex()->GetXYZ(v) ;
+  TVector3 vtx(v);
+  printf("Vertex: (%.3f,%.3f,%.3f)\n",vtx.X(),vtx.Y(),vtx.Z());
+  
+  TRefArray * caloClustersArr  = new TRefArray();
+  esd->GetPHOSClusters(caloClustersArr);
+
+  const Int_t kNumberOfTracks = esd->GetNumberOfTracks();
+  const Int_t kNumberOfV0s = esd->GetNumberOfV0s();
+  printf("Tracks: %d. V0s: %d\n",kNumberOfTracks,kNumberOfV0s);
+  
+  Float_t xyImp,zImp,imp1,imp2;
+  
+  const Int_t kNumberOfPhosClusters   = caloClustersArr->GetEntries() ;
+  printf("CaloClusters: %d\n", kNumberOfPhosClusters);
+  if(kNumberOfPhosClusters<2) return;
+  
+  TLorentzVector pc1; //4-momentum of PHOS cluster 1
+  TLorentzVector pc2; //4-momentum of PHOS cluster 2
+  TLorentzVector pc12;
+
+  TLorentzVector ppos; //4-momentum of positive track
+  TLorentzVector pneg; //4-momentum of negative track
+  TLorentzVector ptr12;
+
+  TLorentzVector pomega;
+  Double_t etrack;
+  Double_t p1,p2; // 3-momentum of tracks
+
+  const Double_t kMpi = 0.1396;
+
+  for(Int_t iClu=0; iClu<kNumberOfPhosClusters; iClu++) {
+    AliESDCaloCluster *c1 = (AliESDCaloCluster *) caloClustersArr->At(iClu);
+    c1->GetMomentum(pc1,v);
+
+    for (Int_t jClu=iClu; jClu<kNumberOfPhosClusters; jClu++) {
+      AliESDCaloCluster *c2 = (AliESDCaloCluster *) caloClustersArr->At(jClu);
+      if(c2->IsEqual(c1)) continue;
+      c2->GetMomentum(pc2,v);
+
+      pc12 = pc1+pc2;
+      printf("pc12.M(): %.3f\n",pc12.M());
+
+      if(pc12.M()<0.115 || pc12.M()>0.155) continue; //not a pi0 candidate!
+      if(pc12.Pt()<1.) continue; //pT(pi0) > 1GeV
+      
+      fhMggSel->Fill(pc12.M());
+      
+      for(Int_t iTrack=0; iTrack<kNumberOfTracks; iTrack++) {
+       AliESDtrack* tr1 = esd->GetTrack(iTrack);
+       p1 = tr1->P();
+       tr1->GetImpactParameters(xyImp,zImp);
+       imp1 = TMath::Abs(xyImp);
+       fhImpXY->Fill(imp1);
+       Short_t charge = tr1->Charge();
+       if(imp1>0.004) continue; // not from the primary vertex!
+
+       etrack = TMath::Sqrt(p1*p1 + kMpi*kMpi);
+       ppos.SetPxPyPzE(tr1->Px(),tr1->Py(),tr1->Pz(),etrack);
+       
+       for(Int_t jTrack=iTrack; jTrack<kNumberOfTracks; jTrack++) {
+         AliESDtrack* tr2 = esd->GetTrack(jTrack);
+         p2 = tr2->P();
+         if(tr2->Charge()==charge) continue; //same sign track (WRONG!!)
+         tr2->GetImpactParameters(xyImp,zImp);
+         imp2=TMath::Abs(xyImp);
+         if(imp2>0.004) continue; // not from the primary vertex!
+         
+         etrack = TMath::Sqrt(p2*p2 + kMpi*kMpi);
+         pneg.SetPxPyPzE(tr2->Px(),tr2->Py(),tr2->Pz(),etrack);
+
+         ptr12 = ppos + pneg;
+
+//       printf("ptr12.M()=%.3f, xyImp1=%f, xyImp2=%f, ch1=%d, ch2=%d, 
+//                  p1=%.3f, p2=%.3f, m1=%.3f, m2=%.3f\n",
+//              ptr12.M(),imp1,imp2,tr1->Charge(),tr2->Charge(),
+//              tr1->P(),tr2->P(),tr1->M(),tr2->M());
+         
+         pomega = pc12 + ptr12;
+         printf("pomega.M(): %f\n",pomega.M());
+
+         if( p1<2. && p2<2. )
+           fhM3pi0to2->Fill(pomega.Pt(),pomega.M());
+         
+         if( (p1>=2. && p1<4.) && (p2>=2. && p2<4.) ) 
+           fhM3pi2to4->Fill(pomega.Pt(),pomega.M());     
+         
+         if( (p1>=4. && p1<6.) && (p2>=4. && p2<6.) ) 
+           fhM3pi4to6->Fill(pomega.Pt(),pomega.M());
+         
+         if( (p1>=6. && p1<8.) && (p2>=6. && p2<8.) ) 
+           fhM3pi6to8->Fill(pomega.Pt(),pomega.M());
+         
+         if( (p1>=8. && p1<10.) && (p2>=8. && p2<10.) ) 
+           fhM3pi8to10->Fill(pomega.Pt(),pomega.M());
+         
+         if( (p1>=10. && p1<12.) && (p2>=10. && p2<12.) ) 
+           fhM3pi10to12->Fill(pomega.Pt(),pomega.M());
+         
+         if( (p1>=12.) && (p2>=12.) ) 
+           fhM3pi12->Fill(pomega.Pt(),pomega.M());
+         
+         if( p1<8. && p2<8. )
+           fhM3pi0to8->Fill(pomega.Pt(),pomega.M());
+
+       }
+      }
+      
+      for(Int_t iVert=0; iVert<kNumberOfV0s; iVert++) {
+       AliESDv0* v0 = esd->GetV0(iVert);
+       AliESDtrack* ptrack = esd->GetTrack(v0->GetPindex()); //positive track
+       AliESDtrack* ntrack = esd->GetTrack(v0->GetNindex()); //negative track
+
+       etrack = TMath::Sqrt(ptrack->P()*ptrack->P() + kMpi*kMpi);
+       ppos.SetPxPyPzE(ptrack->Px(),ptrack->Py(),ptrack->Pz(),etrack);
+
+       etrack = TMath::Sqrt(ntrack->P()*ntrack->P() + kMpi*kMpi);
+       pneg.SetPxPyPzE(ntrack->Px(),ntrack->Py(),ntrack->Pz(),etrack);
+
+       ptr12 = ppos + pneg;
+
+       Double_t dx = vtx.X() - v0->Xv();
+       Double_t dy = vtx.Y() - v0->Yv();
+       Double_t dxy = TMath::Sqrt(dx*dx + dy*dy);
+       fhDxy->Fill(dxy);
+       printf("V0: dxy=%.3f\n",dxy);
+
+       if(dxy<2.) fhM2piSel->Fill(ptr12.M());
+      } 
+    
+    }
+  }
+  
+  delete caloClustersArr;
+  PostData(1,fOutputContainer);
+}
diff --git a/PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.h b/PWG4/omega3pi/AliAnalysisTaskOmegaPi0PiPi.h
new file mode 100644 (file)
index 0000000..2c35117
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef ALIANALYSISTASKOMEGAPI0PIPI_H
+#define ALIANALYSISTASKOMEGAPI0PIPI_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//---------------------------------------------------------------------------// 
+// omega(782) -> pi0 pi+ pi- analysis.                                       //
+//---------------------------------------------------------------------------//
+
+#include "AliAnalysisTaskSE.h"
+
+class TH1F;
+class TH2F;
+
+class AliAnalysisTaskOmegaPi0PiPi : public AliAnalysisTaskSE
+{
+public:
+
+  AliAnalysisTaskOmegaPi0PiPi();
+  AliAnalysisTaskOmegaPi0PiPi(const char* name);
+  virtual ~AliAnalysisTaskOmegaPi0PiPi();
+
+  // Implementation of interface methods
+  virtual void UserCreateOutputObjects();
+  virtual void UserExec(Option_t * opt);
+  
+private:
+
+  AliAnalysisTaskOmegaPi0PiPi(const AliAnalysisTaskOmegaPi0PiPi&); 
+  AliAnalysisTaskOmegaPi0PiPi& operator=(const AliAnalysisTaskOmegaPi0PiPi&); 
+
+private:
+  
+  TList* fOutputContainer; // List of output histograms
+  TH1F*  fhM2piSel;        // V0 inv. mass, Dxy cut applied
+  TH1F*  fhDxy;            // dxy of V0s
+  TH1F*  fhMggSel;         // two-cluster inv. mass
+  TH1F*  fhImpXY;          // track XY-impact parameters
+
+  TH2F*  fhM3pi0to2;   // M(3pi) vs pT(3pi), 0 < ptrack < 2 GeV
+  TH2F*  fhM3pi2to4;   // M(3pi) vs pT(3pi), 2 < ptrack < 4 GeV
+  TH2F*  fhM3pi4to6;   // M(3pi) vs pT(3pi), 4 < ptrack < 6 GeV
+  TH2F*  fhM3pi6to8;   // M(3pi) vs pT(3pi), 6 < ptrack < 8 GeV
+  TH2F*  fhM3pi8to10;  // M(3pi) vs pT(3pi), 8 < ptrack < 10 GeV
+  TH2F*  fhM3pi10to12; // M(3pi) vs pT(3pi), 10< ptrack < 12 GeV
+  TH2F*  fhM3pi12;     // M(3pi) vs pT(3pi), ptrack > 12 GeV
+  TH2F*  fhM3pi0to8;   // M(3pi) vs pT(3pi), 0 < ptrack < 8 GeV
+
+  ClassDef(AliAnalysisTaskOmegaPi0PiPi,1);
+  
+};
+
+#endif
diff --git a/PWG4/omega3pi/grid/AnaTaskOmega3pi.C b/PWG4/omega3pi/grid/AnaTaskOmega3pi.C
new file mode 100644 (file)
index 0000000..53ce78c
--- /dev/null
@@ -0,0 +1,69 @@
+void AnaTask(const char* dataset="minbias_LHC09a4_81040_81050.xml")
+{
+    
+    gSystem->Load("libTree.so");
+    gSystem->Load("libGeom.so");
+    gSystem->Load("libVMC.so");
+    gSystem->Load("libPhysics.so");
+
+    //load analysis framework
+    gSystem->Load("libANALYSIS");
+    gSystem->Load("libANALYSISalice"); //AliAnalysisTaskSE
+    gSystem->Load("libPWG4Omega3pi");
+    gSystem->AddIncludePath("-I$ALICE_ROOT/include -I$ALICE_ROOT/PHOS");
+
+    // A task can be compiled dynamically with AClic
+    //gROOT->LoadMacro("AliAnalysisTaskOmegaPi0PiPi.cxx+g");
+
+    // Connect to alien
+    TString token = gSystem->Getenv("GRID_TOKEN") ;
+    if ( token == "OK" ) 
+     TGrid::Connect("alien://");
+    else 
+     AliInfo("You are not connected to the GRID") ; 
+
+    // Create the chain
+    TChain* chain = new TChain("esdTree");
+    TGridCollection * collection = dynamic_cast<TGridCollection*>(TAlienCollection::Open(dataset));
+   
+    TAlienResult* result = collection->GetGridResult("",0 ,0);
+    TList* rawFileList = result->GetFileInfoList();
+
+    for (Int_t counter=0 ; counter < rawFileList->GetEntries() ; counter++) {
+     TFileInfo * fi =  static_cast<TFileInfo*>(rawFileList->At(counter)) ; 
+     const char * rawFile = fi->GetCurrentUrl()->GetUrl() ;  
+     printf("Processing %s\n", rawFile) ;
+     chain->Add(rawFile);
+     printf("Chain: %d entries.\n",chain->GetEntries()); 
+    }
+
+    // Make the analysis manager
+    AliAnalysisManager *mgr = new AliAnalysisManager("OmegaPi0Pi+Pi-","Omega->pi0pi+pi- analysis");
+
+    // ESD input handler
+    AliESDInputHandler* esdH = new AliESDInputHandler();
+    mgr->SetInputEventHandler(esdH);
+
+    // Debug level
+    mgr->SetDebugLevel(10);
+
+    // Add task
+    AliAnalysisTaskOmegaPi0PiPi *task = new AliAnalysisTaskOmegaPi0PiPi("OmegaPi0PiPi");
+    mgr->AddTask(task);
+
+    // Create containers for input/output
+    AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
+    AliAnalysisDataContainer *coutput = mgr->CreateContainer("histos",TList::Class(),AliAnalysisManager::kOutputContainer,"histos.root");
+
+    // Connect input/output
+    mgr->ConnectInput(task, 0, cinput);
+    mgr->ConnectOutput(task, 1, coutput);
+
+    if (mgr->InitAnalysis()) {
+            mgr->PrintStatus();
+            mgr->StartAnalysis("local", chain);
+    }
+
+}
+
+
diff --git a/PWG4/omega3pi/grid/Omega.jdl b/PWG4/omega3pi/grid/Omega.jdl
new file mode 100644 (file)
index 0000000..4da148b
--- /dev/null
@@ -0,0 +1,47 @@
+# this is the startup process for root
+Executable="ana.sh";
+Jobtag={"comment:omega(782) -> pi0 pi+ pi- analysis"};
+
+# we split per storage element
+Split="se";
+splitarguments="$1";
+
+# we want each job to read 50 input files
+SplitMaxInputFileNumber="50";
+
+# we need AliRoot and the API service configuration package.
+Packages={"VO_ALICE@APISCONFIG::V2.4","VO_ALICE@AliRoot::v4-17-01"};
+TTL = "18 hours";
+#Price = 10;
+User = "polishch";
+
+#ROOT will read this collection file to know, which files to analyze
+InputDataList="$1.xml";
+
+#ROOT requires the collection file in the xml-single format
+InputDataListFormat="xml-single";
+
+# this is our collection file containing the files to be analyzed
+InputDataCollection="LF:/alice/cern.ch/user/p/polishch/xml/$1.xml,nodownload";
+
+InputFile= {"LF:/alice/cern.ch/user/p/polishch/omega/AnaTaskOmega3pi.C"};
+            
+InputBox=  {"/alice/cern.ch/user/p/polishch/omega/AnaTaskOmega3pi.C"};
+
+# Output archive           
+OutputArchive={"log_archive.zip:stdout,stderr@ALICE::NIHAM::FILE",
+               "root_archive.zip:*.root@ALICE::NIHAM::FILE"};
+
+# Output directory
+OutputDir="/alice/cern.ch/user/p/polishch/omega/output/$1/#alien_counter#";
+
+# Output files
+OutputFile={"histos.root"};
+
+# Merge the output
+Merge={"histos.root:/alice/cern.ch/user/p/polishch/omega/mergerootfile.jdl:histos_merged.root"};
+MergeOutputDir={"/alice/cern.ch/user/p/polishch/omega/output/$1"};
+
+# Validation
+Validationcommand ="/alice/cern.ch/user/p/polishch/bin/validate.sh";
+
diff --git a/PWG4/omega3pi/grid/README b/PWG4/omega3pi/grid/README
new file mode 100644 (file)
index 0000000..cb7c74a
--- /dev/null
@@ -0,0 +1,16 @@
+How to run Omega(782) --> pi0 pi+ pi- analysis in the GRID:
+===========================================================
+
+1. Copy the content of this directory to your AliEn working directory
+(don't forget .rootrc file!). Edit Omega.jdl and replace the path to the 
+/alice/cern.ch/user/p/polishch/omega by the path to your working directory.
+
+2. Copy ana.sh to your ~/bin directory in AliEn.
+
+3. File list.txt contains the list of xml collections you want to analyze.
+This collections should be in your ~/xml directory (edit Omega.jdl properly!).
+
+4. From aliensh run: 
+                    run submit.sh
+                    
+The output files will reside in the directory output/{collection}/{job}/histos.root .
diff --git a/PWG4/omega3pi/grid/ana.sh b/PWG4/omega3pi/grid/ana.sh
new file mode 100644 (file)
index 0000000..e9c6b77
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+export GCLIENT_SERVER_LIST="pcapiserv04.cern.ch:10000|pcapiserv05.cern.ch:10000|pcapiserv06.cern.ch:10000|pcapiserv07.cern.ch:10000"
+export GRID_TOKEN=OK
+echo ===========================
+echo $PATH 
+echo $ROOTSYS
+echo $LD_LIBRARY_PATH
+echo $GRID_TOKEN
+echo dataset = $1.xml
+echo ==========================
+
+aliroot -b -q AnaTaskOmega3pi.C\(\"$1.xml\"\)
+echo "########################    Train finished    ###########################"
+
diff --git a/PWG4/omega3pi/grid/list.txt b/PWG4/omega3pi/grid/list.txt
new file mode 100644 (file)
index 0000000..3b5f167
--- /dev/null
@@ -0,0 +1,9 @@
+minbias_LHC09a4_80180_80190
+minbias_LHC09a4_80170_80180
+minbias_LHC09a4_80160_80170
+minbias_LHC09a4_80150_80160
+minbias_LHC09a4_80140_80150
+minbias_LHC09a4_80130_80140
+minbias_LHC09a4_80120_80130
+minbias_LHC09a4_80060_80070
+minbias_LHC09a4_80050_80060
diff --git a/PWG4/omega3pi/grid/submit.sh b/PWG4/omega3pi/grid/submit.sh
new file mode 100644 (file)
index 0000000..0d6f054
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+#Usage: list.txt is the list of xml collections to process.
+
+runs=`cat list.txt`
+
+for run in $runs; do
+    echo "submit Omega.jdl ${run}"
+    submit Omega.jdl ${run}
+
+done
+