29-nov-2004 NvE Package containing the classes Wa98Event, Wa98Convert and the usual...
authornick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 29 Nov 2004 07:45:59 +0000 (07:45 +0000)
committernick <nick@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 29 Nov 2004 07:45:59 +0000 (07:45 +0000)
                RWA98Headers.h, RWA98LinkDef.h, history.txt and the sub-directory /scripts
                introduced as a sub-directory /wa98 in the Ralice repository at CERN.

RALICE/wa98/RWA98Headers.h [new file with mode: 0644]
RALICE/wa98/RWA98LinkDef.h [new file with mode: 0644]
RALICE/wa98/Wa98Convert.cxx [new file with mode: 0644]
RALICE/wa98/Wa98Convert.h [new file with mode: 0644]
RALICE/wa98/Wa98Event.cxx [new file with mode: 0644]
RALICE/wa98/Wa98Event.h [new file with mode: 0644]
RALICE/wa98/history.txt [new file with mode: 0644]

diff --git a/RALICE/wa98/RWA98Headers.h b/RALICE/wa98/RWA98Headers.h
new file mode 100644 (file)
index 0000000..1904723
--- /dev/null
@@ -0,0 +1,13 @@
+///////////////////////////////////////////////////////////////////////////
+// All headers of the WA98 analysis software
+// This header list is used to create the RWA98 dictionary via rootcint.
+//
+// Note : Class names have also to be entered into the list
+//        contained in RWA98LinkDef.h
+//
+//--- NvE 24-jan-1999 UU-SAP Utrecht
+///////////////////////////////////////////////////////////////////////////
+#include "Wa98Event.h"
+#include "Wa98Convert.h"
+
diff --git a/RALICE/wa98/RWA98LinkDef.h b/RALICE/wa98/RWA98LinkDef.h
new file mode 100644 (file)
index 0000000..29b988d
--- /dev/null
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////////////////
+// All classes of WA98 analysis software
+// This class list is used to create the RWA98 dictionary via rootcint.
+//
+// Note : Headers have also to be entered into the list
+//        contained in RWA98Headers.h
+//
+//--- NvE 24-jan-1999 UU-SAP Utrecht
+///////////////////////////////////////////////////////////////////////////
+#ifdef __CINT__
+ #pragma link off all globals;
+ #pragma link off all classes;
+ #pragma link off all functions;
+ #pragma link C++ class Wa98Event+;
+ #pragma link C++ class Wa98Convert+;
+#endif
diff --git a/RALICE/wa98/Wa98Convert.cxx b/RALICE/wa98/Wa98Convert.cxx
new file mode 100644 (file)
index 0000000..483dc28
--- /dev/null
@@ -0,0 +1,217 @@
+// $Id$
+
+///////////////////////////////////////////////////////////////////////////
+// Class Wa98Convert
+// Conversion of Wa98 Hbook ntuple data into Wa98Event physics event structures.
+//
+// Usage example :
+// ---------------
+//
+// gSystem->Load("libHbook");
+// gSystem->Load("ralice");
+// gSystem->Load("rwa98");
+//
+// // Input file with ANALYZ produced Hbook ntuple data
+// THbookFile* f=new THbookFile("pb611258.cwn");
+// TTree* h999=(TTree*)f->Get(999);
+//
+// // Output file for the event structures
+// TFile* ofile=new TFile("run11258.root","RECREATE","WA98 data in RALICE event structure");
+// TTree* otree=new TTree("T","Data of the 1996 Pb+Pb run");
+//
+// Int_t nentries=h999->GetEntries();
+// cout << " Number of entries available : " << nentries << endl;
+// cout << endl;
+//
+// // Limit the number of entries for testing
+// nentries=300;
+//
+// // Print frequency to produce a short summary print every printfreq events
+// Int_t printfreq=10;
+//
+// Convert q(h999);
+// q.Loop(otree,nentries,printfreq);
+// 
+// otree->Print();
+//
+// // Close output file
+// ofile->Write();
+// ofile->Close();
+//
+//--- Author: Nick van Eijndhoven 06-jul-2004 Utrecht University
+//- Modified: NvE $Date$ Utrecht University
+///////////////////////////////////////////////////////////////////////////
+#include "Wa98Convert.h"
+#include "Riostream.h"
+
+ClassImp(Wa98Convert) // Class implementation to enable ROOT I/O
+
+Wa98Convert::Wa98Convert(TTree* tree)
+{
+// Default constructor.
+// Initialise the input tree (or chain) to be converted.
+// By default tree=0;
+
+ fChain=tree;
+ if (!fChain) return;
+
+ // Link the variables to the branches of the input tree/chain 
+ fChain->SetBranchAddress("Jrun",&Jrun);
+ fChain->SetBranchAddress("Jevt",&Jevt);
+ fChain->SetBranchAddress("Jdate",&Jdate);
+ fChain->SetBranchAddress("Jtime",&Jtime);
+ fChain->SetBranchAddress("Jevid",&Jevid);
+ fChain->SetBranchAddress("Jwscal",&Jwscal);
+ fChain->SetBranchAddress("Itword",&Itword);
+ fChain->SetBranchAddress("Zdc",&Zdc);
+ fChain->SetBranchAddress("Emir",&Emir);
+ fChain->SetBranchAddress("Emire",&Emire);
+ fChain->SetBranchAddress("Emirh",&Emirh);
+ fChain->SetBranchAddress("Etm",&Etm);
+ fChain->SetBranchAddress("Etme",&Etme);
+ fChain->SetBranchAddress("Etmh",&Etmh);
+ fChain->SetBranchAddress("Nmod",&Nmod);
+ fChain->SetBranchAddress("Irowl",Irowl);
+ fChain->SetBranchAddress("Icoll",Icoll);
+ fChain->SetBranchAddress("Adcl",Adcl);
+ fChain->SetBranchAddress("Nclu",&Nclu);
+ fChain->SetBranchAddress("Irowc",Irowc);
+ fChain->SetBranchAddress("Icolc",Icolc);
+ fChain->SetBranchAddress("Adcc",Adcc);
+ fChain->SetBranchAddress("Ncluv",&Ncluv);
+ fChain->SetBranchAddress("Iadccv",Iadccv);
+ fChain->SetBranchAddress("Thetacv",Thetacv);
+ fChain->SetBranchAddress("Phicv",Phicv);
+}
+///////////////////////////////////////////////////////////////////////////
+Wa98Convert::~Wa98Convert()
+{
+// Default destructor.
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Convert::Loop(TTree* otree,Int_t nentries,Int_t printfreq)
+{
+// Loop over the specified number of entries and convert the 
+// ntuple data into the Wa98Event structure.
+// The output will be written on the output tree specified as "otree".
+// If otree=0, a default standard output tree will be created.
+// If nentries<0 (default) all the entries of the input chain
+// will be processed.
+// Every "printfreq" events a short event summary will be printed.
+// The default value is printfreq=1.
+
+ if (fChain==0) return;
+
+ if (nentries<0) nentries=fChain->GetEntriesFast();
+
+ if (!otree) otree=new TTree("T","Data of the 1996 Pb+Pb run");
+
+ Double_t pi=acos(-1.);
+
+ Double_t me=0.51099890221e-3;
+ Double_t mpi=0.13956995;
+ Double_t mkc=0.493677;
+ Double_t mk0=0.497672;
+ Double_t mp=0.93827231;
+ Double_t mlam=1.115683;
+
+ Wa98Event* evt=new Wa98Event();
+
+ // Branch in the tree for the event structure
+ Int_t split=1;
+ Int_t bsize=32000;
+ otree->Branch("Wa98Event","Wa98Event",&evt,bsize,split); 
+
+ // The LEDA specific output data
+ AliCalorimeter* ledaup=new AliCalorimeter(44,144);
+ AliCalorimeter* ledalw=new AliCalorimeter(40,144);
+
+ ledaup->SetName("LedaUp");
+ ledalw->SetName("LedaDown");
+
+ evt->InitLeda(ledaup);
+ evt->InitLeda(ledalw);
+
+ TDatime datim;
+ Float_t pos[3],costh;
+ AliSignal s;
+ s.SetName("CPV signal ADC");
+
+ for (Int_t jentry=0; jentry<nentries; jentry++)
+ {
+  fChain->GetEntry(jentry);
+
+  // Reset the complete Event structure
+  evt->Reset();
+
+  evt->SetRunNumber(Jrun);
+  evt->SetEventNumber(Jevt);
+  datim.Set(Jdate,Jtime);
+  evt->SetDayTime(datim);
+  evt->SetProjectile(207,82,158);
+  evt->SetTarget(207,82,0);
+  evt->SetWeight(Jwscal);
+  evt->SetTrig(Itword);
+  evt->SetZdc(Zdc*1000.);
+  evt->SetMiracE(1000.*Emir,Emire,Emirh);
+  evt->SetMiracEt(Etm,Etme,Etmh);
+  ledaup->Reset();
+  ledalw->Reset();
+  // Fill calorimeter with module data
+  for (Int_t i=0; i<Nmod; i++)
+  {
+   if (Adcl[i] > 3) // Adc cut of 3 to remove noise
+   {
+    if (Irowl[i] > 0) ledaup->SetSignal(Irowl[i],Icoll[i],Adcl[i]);
+    if (Irowl[i] < 0) ledalw->SetSignal(-Irowl[i],Icoll[i],Adcl[i]);
+   }
+  }
+
+  // Store associated CPV signals
+  for (Int_t j=0; j<Ncluv; j++)
+  {
+   s.Reset();
+   s.SetSignal(Iadccv[j]);
+   pos[1]=Thetacv[j]*pi/180.;
+   pos[2]=Phicv[j]*pi/180.;
+   costh=cos(pos[1]);
+   pos[0]=0;
+   if (costh) pos[0]=2103./costh;
+   s.SetPosition(pos,"sph");
+   pos[0]=0.4;
+   pos[1]=2.2;
+   pos[2]=0;
+   s.SetPositionErrors(pos,"car");
+   if (Phicv[j]>=0. && Phicv[j]<=180.)
+   {
+    ledaup->AddVetoSignal(s);
+   }
+   else
+   {
+    ledalw->AddVetoSignal(s);
+   }
+  }
+
+  evt->AddDevice(ledaup);
+  evt->AddDevice(ledalw);
+
+  if (!(jentry%printfreq))
+  {
+//   cout << " Entry : " << jentry << " Run : " << Jrun << " Event : " << Jevt
+//        << " Itword : " << Itword << " Etm : " << Etm << endl;
+//   cout << " Jdate : " << Jdate << " Jtime : " << Jtime << endl; 
+   cout << " Itword : " << Itword << " Nmod : " << Nmod << " Ncluv : " << Ncluv << endl;
+   evt->HeaderData();
+  }
+
+  // Write the complete structure to the output Tree
+  otree->Fill();
+ }
+
+ if (evt) delete evt;
+ if (ledaup) delete ledaup;
+ if (ledalw) delete ledalw;
+}
+///////////////////////////////////////////////////////////////////////////
diff --git a/RALICE/wa98/Wa98Convert.h b/RALICE/wa98/Wa98Convert.h
new file mode 100644 (file)
index 0000000..81b8793
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef Wa98Convert_h
+#define Wa98Convert_h
+
+// $Id$
+
+#include "TObject.h"
+#include "TChain.h"
+#include "TFile.h"
+#include "THbookFile.h"
+
+#include "Wa98Event.h"
+
+class Wa98Convert : public TObject
+{
+ public :
+  Wa98Convert(TTree* tree=0);                                    // Constructor
+  virtual ~Wa98Convert();                                        // Destructor
+  void Loop(TTree* otree=0,Int_t nentries=-1,Int_t printfreq=1); // Perform the conversion
+
+ protected :
+   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
+
+   //Declaration of leaves types
+   Int_t           Jrun;
+   Int_t           Jevt;
+   Int_t           Jdate;
+   Int_t           Jtime;
+   Int_t           Jevid;
+   UInt_t          Jwscal;
+   UInt_t          Itword;
+   Float_t         Zdc;
+   Float_t         Emir;
+   Float_t         Emire;
+   Float_t         Emirh;
+   Float_t         Etm;
+   Float_t         Etme;
+   Float_t         Etmh;
+   Int_t           Nmod;
+   Int_t           Irowl[3000]; //[Nmod]
+   UInt_t          Icoll[3000]; //[Nmod]
+   Float_t         Adcl[3000];  //[Nmod]
+   Int_t           Nclu;
+   Int_t           Irowc[400];  //[Nclu]
+   UInt_t          Icolc[400];  //[Nclu]
+   Float_t         Adcc[400];   //[Nclu]
+   Int_t           Ncluv;
+   Int_t           Iadccv[1000];  //[Ncluv]
+   Float_t         Thetacv[1000]; //[Ncluv]
+   Float_t         Phicv[1000];   //[Ncluv]
+
+ ClassDef(Wa98Convert,1) // Conversion Wa98 ntuple data into Wa98Event physics event structures.
+};
+#endif
diff --git a/RALICE/wa98/Wa98Event.cxx b/RALICE/wa98/Wa98Event.cxx
new file mode 100644 (file)
index 0000000..80dbaf6
--- /dev/null
@@ -0,0 +1,385 @@
+// $Id$
+
+///////////////////////////////////////////////////////////////////////////
+// Class Wa98Event
+// Creation and investigation of a Wa98 physics event.
+// This event class is derived from AliEvent and has some Wa98 specific
+// extensions like e.g. the information from the trigger calorimeters
+// and some LEDA specific functions.
+//
+//--- Author: Nick van Eijndhoven 24-apr-2002 UU-SAP Utrecht
+//- Modified: NvE $Date$ UU-SAP Utrecht
+///////////////////////////////////////////////////////////////////////////
+
+#include "Wa98Event.h"
+#include "Riostream.h"
+ClassImp(Wa98Event) // Class implementation to enable ROOT I/O
+Wa98Event::Wa98Event() : AliEvent()
+{
+// Default constructor.
+// All variables initialised to default values.
+ Reset();
+}
+///////////////////////////////////////////////////////////////////////////
+Wa98Event::Wa98Event(Int_t n) : AliEvent(n)
+{
+// Create an event to hold initially a maximum of n tracks
+// All variables initialised to default values
+ Reset();
+}
+///////////////////////////////////////////////////////////////////////////
+Wa98Event::~Wa98Event()
+{
+// Default destructor
+}
+///////////////////////////////////////////////////////////////////////////
+Wa98Event::Wa98Event(Wa98Event& evt) : AliEvent(evt)
+{
+// Copy constructor.
+ fTrig=evt.fTrig;
+ fWeight=evt.fWeight;
+ fZdc=evt.fZdc;
+ fEmir=evt.fEmir;
+ fEmire=evt.fEmire;
+ fEmirh=evt.fEmirh;
+ fEtm=evt.fEtm;
+ fEtme=evt.fEtme;
+ fEtmh=evt.fEtmh;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::Reset()
+{
+// Reset all variables to default values
+// The max. number of tracks is set to the initial value again
+// The max. number of vertices is set to the default value again
+ fTrig=0;
+ fWeight=0;
+ fZdc=0;
+ fEmir=0;
+ fEmire=0;
+ fEmirh=0;
+ fEtm=0;
+ fEtme=0;
+ fEtmh=0;
+
+ AliEvent::Reset();
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetTrig(Int_t trig)
+{
+// Set the trigger class.
+// Trigger classes : 1=nsc 3=cen 5=per 6=mbias 7=beam 8=inbeam ped
+ fTrig=trig;
+}
+///////////////////////////////////////////////////////////////////////////
+Int_t Wa98Event::GetTrig()
+{
+// Provide the trigger class.
+// Trigger classes : 1=nsc 3=cen 5=per 6=mbias 7=beam 8=inbeam ped
+ return fTrig;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetWeight(Int_t w)
+{
+// Set the event weight to account for the downscale factor.
+ fWeight=w;
+}
+///////////////////////////////////////////////////////////////////////////
+Int_t Wa98Event::GetWeight()
+{
+// Provide the event weight factor to account for the DAQ downscaling.
+ return fWeight;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetZdc(Float_t zdc)
+{
+// Set the ZDC signal in GeV.
+ fZdc=zdc;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetZdc()
+{
+// Provide the ZDC signal in GeV.
+ return fZdc;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetMiracE(Float_t tot,Float_t em,Float_t had)
+{
+// Set the total, EM and hadronic signals for MIRAC in GeV.
+ fEmir=tot;
+ fEmire=em;
+ fEmirh=had;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEmir()
+{
+// Provide the total MIRAC signal in GeV.
+ return fEmir;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEmire()
+{
+// Provide the MIRAC EM signal in GeV.
+ return fEmire;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEmirh()
+{
+// Provide the MIRAC hadronic signal in GeV.
+ return fEmirh;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetMiracEt(Float_t tot,Float_t em,Float_t had)
+{
+// Set the total, EM and hadronic Et signals for MIRAC in GeV.
+ fEtm=tot;
+ fEtme=em;
+ fEtmh=had;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEtm()
+{
+// Provide the total MIRAC Et signal in GeV.
+ return fEtm;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEtme()
+{
+// Provide the MIRAC EM Et signal in GeV.
+ return fEtme;
+}
+///////////////////////////////////////////////////////////////////////////
+Float_t Wa98Event::GetEtmh()
+{
+// Provide the MIRAC hadronic Et signal in GeV.
+ return fEtmh;
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::InitLeda(AliCalorimeter* cal)
+{
+// Set module positions and flag bad modules for this LEDA part. 
+ if (cal)
+ {
+  Int_t nrows=cal->GetNrows();
+  if (nrows==40)
+  {
+   SetPositionsLedalw(cal);
+   SetBadModulesLedalw(cal);
+  } 
+  if (nrows==44)
+  {
+   SetPositionsLedaup(cal);
+   SetBadModulesLedaup(cal);
+  } 
+  if (nrows!=40 && nrows!=44)
+  {
+   cout << " *Wa98Event::InitLeda* Not a LEDA configuration. nrows = " << nrows << endl;
+  } 
+ }
+ else
+ {
+  cout << " *Wa98Event::InitLeda* Calorimeter pointer was zero. " << endl;
+ }
+}
+///////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetBadModulesLedaup(AliCalorimeter* cal)
+{
+// Marking of the bad modules the upper LEDA 
+
+ Int_t nr=cal->GetNrows();
+ Int_t nc=cal->GetNcolumns();
+
+// Declare the non-existing modules as dead
+ Int_t row0=0;
+ for (Int_t col=1; col<=nc; col++)
+ {
+  if (col<19 || col>126) row0=41;
+  if (col>36 && col<109) row0=41;
+  if (col<13 || col>132) row0=37;
+  if (col>42 && col<103) row0=37;
+  if (col< 7 || col>138) row0=33;
+  if (col>48 && col< 97) row0=33;
+
+  for (Int_t row=row0; row<=nr; row++)
+  {
+   cal->SetDead(row,col);
+  }
+ }
+
+ // The bad area as seen in the first 50 events of Pb96 run 9066
+ for (Int_t i=24; i<=33; i++)
+ {
+  for (Int_t j=1; j<=20; j++)
+  {
+   cal->SetDead(i,j);
+  }
+ }
+}
+//////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetBadModulesLedalw(AliCalorimeter* cal)
+{
+// Marking of the bad modules the lower LEDA 
+
+ Int_t nr=cal->GetNrows();
+ Int_t nc=cal->GetNcolumns();
+
+// Declare the non-existing modules as dead
+ Int_t row0=0;
+ for (Int_t col=1; col<=nc; col++)
+ {
+  if (col<19 || col>126) row0=37;
+  if (col>36 && col<109) row0=37;
+  if (col<13 || col>132) row0=33;
+  if (col>42 && col<103) row0=33;
+  if (col< 7 || col>138) row0=29;
+  if (col>48 && col< 97) row0=29;
+
+  for (Int_t row=row0; row<=nr; row++)
+  {
+   cal->SetDead(row,col);
+  }
+ }
+}
+//////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetPositionsLedaup(AliCalorimeter* cal)
+{
+// Determination of the lab. position of each module of the upper LEDA 
+
+ Float_t sx=4.105;  // X-dimension of a module in cm
+ Float_t sy=4.085;  // Y-dimension of a module in cm
+ Float_t tilt=8.31; // Tilt angle in degrees
+
+ Float_t pi=acos(-1.);
+ Float_t tiltr=tilt*pi/180.; // Tilt angle in radians
+
+ Float_t dx=sx;            // X-displacement skipping 1 module horizontal
+ Float_t dy=sy*cos(tiltr); // Y-displacement skipping 1 module vertical
+ Float_t dz=sy*sin(tiltr); // Z-displacement skipping 1 module vertical
+
+ // Position of the left upper module (1,1) looking downstream
+ Float_t x0=293.;  
+ Float_t y0=345.73;
+ Float_t z0=2180.12;
+
+ // Determine and store position of each module
+ Int_t nr=cal->GetNrows();
+ Int_t nc=cal->GetNcolumns();
+ Float_t pos[3];
+ for (Int_t i=1; i<=nr; i++)
+ {
+  for (Int_t j=1; j<=nc; j++)
+  {
+   pos[0]=x0-float(j-1)*dx;
+   pos[1]=y0-float(i-1)*dy;
+   pos[2]=z0+float(i-1)*dz;
+   cal->SetPosition(i,j,pos,"car");
+  }
+ }
+}
+//////////////////////////////////////////////////////////////////////////
+void Wa98Event::SetPositionsLedalw(AliCalorimeter* cal)
+{
+// Determination of the lab. position of each module of the lower LEDA 
+
+ Float_t sx=4.105;  // X-dimension of a module in cm
+ Float_t sy=4.085;  // Y-dimension of a module in cm
+ Float_t tilt=8.31; // Tilt angle in degrees
+
+ Float_t pi=acos(-1.);
+ Float_t tiltr=tilt*pi/180.; // Tilt angle in radians
+
+ Float_t dx=sx;            // X-displacement skipping 1 module horizontal
+ Float_t dy=sy*cos(tiltr); // Y-displacement skipping 1 module vertical
+ Float_t dz=sy*sin(tiltr); // Z-displacement skipping 1 module vertical
+
+ // Position of the left lower module (1,1) looking downstream
+ Float_t x0=291.91;  
+ Float_t y0=-331.14;
+ Float_t z0=2183.14;
+
+ // Determine and store position of each module
+ Int_t nr=cal->GetNrows();
+ Int_t nc=cal->GetNcolumns();
+ Float_t pos[3];
+ for (Int_t i=1; i<=nr; i++)
+ {
+  for (Int_t j=1; j<=nc; j++)
+  {
+   pos[0]=x0-float(j-1)*dx;
+   pos[1]=y0+float(i-1)*dy;
+   pos[2]=z0+float(i-1)*dz;
+   cal->SetPosition(i,j,pos,"car");
+  }
+ }
+}
+//////////////////////////////////////////////////////////////////////////
+void Wa98Event::ClusterLeda(AliCalorimeter* cal,Int_t n,Int_t mode)
+{
+// Group LEDA modules into clusters.
+// The parameter n indicates the number of rings for the grouping process
+// (default n=2) and the parameter mode indicates the sorting algorithm
+// (default mode=1). See AliCalorimeter::Group() for further details.
+// This function invokes AliCalorimeter::Group(n) and automatically
+// sets the uncertainties on the cluster positions. 
+// The precision of a cluster position in the X-Y plane has been seen
+// to be about half the size of a module, so dx=dy=2cm.
+
+ Float_t err[3]={2,2,0};
+ AliCalcluster* c=0;
+
+ if (cal)
+ {
+  cal->Group(n,mode);
+  for (Int_t i=1; i<=cal->GetNclusters(); i++)
+  {
+   c=cal->GetCluster(i);
+   if (c) c->SetPositionErrors(err,"car");
+  }
+ }
+ else
+ {
+  cout << " *Wa98Event::ClusterLeda* Calorimeter pointer was zero. " << endl;
+ }
+}
+//////////////////////////////////////////////////////////////////////////
+void Wa98Event::VetoLeda(AliCalorimeter* cal,Float_t dtheta,Float_t dphi)
+{
+// Perform LEDA-Veto cluster association.
+// An association is only made if the Veto signal appears into a small
+// cone around the LEDA cluster position.
+// The cone dimensions are given by the parameters "dtheta" and "dphi"
+// (in degrees) and the default values are dtheta=0.2 and dphi=1.
+// The automatic straight line extrapolation of the Veto signal position
+// onto the LEDA surface is used in the association procedure.
+
+ Float_t pi=acos(-1.);
+
+ AliCalcluster* c;
+ AliSignal* v;
+ Float_t posc[3],posv[3];
+ Float_t dth,dph;
+
+ Int_t nc=cal->GetNclusters();
+ Int_t nv=cal->GetNvetos();
+ if (nv)
+ {
+  for (Int_t i=1; i<=nc; i++)
+  {
+   c=cal->GetCluster(i);
+   c->GetPosition(posc,"sph");
+
+   for (Int_t j=1; j<=nv; j++)
+   {
+    v=cal->GetVetoSignal(j);
+    v->GetPosition(posv,"sph");
+    // Associate a close-by veto to this LEDA cluster
+    dth=(posc[1]-posv[1])*180./pi;
+    dph=(posc[2]-posv[2])*180./pi;
+    if (fabs(dth)<dtheta && fabs(dph)<dphi) c->AddVetoSignal(v);
+   }
+  }
+ }
+}
+///////////////////////////////////////////////////////////////////////////
diff --git a/RALICE/wa98/Wa98Event.h b/RALICE/wa98/Wa98Event.h
new file mode 100644 (file)
index 0000000..853a6eb
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef Wa98Event_h
+#define Wa98Event_h
+
+// $Id$
+#include "AliEvent.h"
+#include "AliCalorimeter.h"
+class Wa98Event : public AliEvent
+{
+ public:
+  Wa98Event();                                              // Default constructor
+  Wa98Event(Int_t n);                                       // Create an event to hold initially n tracks
+  virtual ~Wa98Event();                                     // Default destructor
+  Wa98Event(Wa98Event& evt);                                // Copy constructor
+  void Reset();                                             // Reset the complete event
+  void SetTrig(Int_t trig);                                 // Set the trigger class
+  Int_t GetTrig();                                          // Provide the trigger class
+  void SetWeight(Int_t w);                                  // Set the event weight factor
+  Int_t GetWeight();                                        // Provide the event weight factor
+  void SetZdc(Float_t zdc);                                 // Set ZDC signal
+  Float_t GetZdc();                                         // Provide ZDC signal
+  void SetMiracE(Float_t tot,Float_t em,Float_t had);       // Set the total, EM and hadr. MIRAC signals
+  Float_t GetEmir();                                        // Provide the total MIRAC signal
+  Float_t GetEmire();                                       // Provide the MIRAC EM signal
+  Float_t GetEmirh();                                       // Provide the MIRAC hadronic signal
+  void SetMiracEt(Float_t tot,Float_t em,Float_t had);      // Set the total, EM and hadr. MIRAC Et signals
+  Float_t GetEtm();                                         // Provide the total MIRAC Et signal
+  Float_t GetEtme();                                        // Provide the MIRAC EM Et signal
+  Float_t GetEtmh();                                        // Provide the MIRAC hadronic Et signal
+  void InitLeda(AliCalorimeter* cal);                       // Set positions and flag bad modules for LEDA part
+  void ClusterLeda(AliCalorimeter* cal,Int_t n=2,Int_t mode=1); // Group (n rings) modules into clusters for LEDA part
+  void VetoLeda(AliCalorimeter* cal,Float_t dtheta=0.2,Float_t dphi=1); // Associate veto hits with LEDA clusters
+
+ protected:
+  Int_t fTrig;        // The trigger class  1=nsc 3=cen 5=per 6=mbias 7=beam 8=inbeam ped
+  Int_t fWeight;      // The event weight to account for the downscaling factor
+  Float_t fZdc;       // The ZDC signal in GeV
+  Float_t fEmir;      // The total MIRAC signal in GeV
+  Float_t fEmire;     // The MIRAC EM signal in GeV
+  Float_t fEmirh;     // The MIRAC hadronic signal in GeV
+  Float_t fEtm;       // The total MIRAC Et signal in GeV
+  Float_t fEtme;      // The MIRAC EM Et signal in GeV
+  Float_t fEtmh;      // The MIRAC hadronic Et signal in GeV
+
+ private:
+  void SetPositionsLedaup(AliCalorimeter* cal);  // Set module positions for upper LEDA
+  void SetPositionsLedalw(AliCalorimeter* cal);  // Set module positions for lower LEDA
+  void SetBadModulesLedaup(AliCalorimeter* cal); // Flag bad modules for upper LEDA
+  void SetBadModulesLedalw(AliCalorimeter* cal); // Flag bad modules for lower LEDA
+
+ ClassDef(Wa98Event,4) // Creation and investigation of a Wa98 physics event.
+};
+#endif
diff --git a/RALICE/wa98/history.txt b/RALICE/wa98/history.txt
new file mode 100644 (file)
index 0000000..84fd290
--- /dev/null
@@ -0,0 +1,42 @@
+//////////////////////////////////////////////////////////////////////////////////////
+//                                History of updates                                //
+//////////////////////////////////////////////////////////////////////////////////////
+09-mar-1999 NvE First release of the package
+17-mar-1999 NvE Non-existing LEDA modules declared as dead in Wa98Filter
+                to obtain correct treatment of the edges.
+19-mar-1999 NvE Wa98Data updated to match new (reduced) data format.
+                Also Wa98Filter::Leda() modified to take UInt_t values
+                properly into account.
+23-mar-1999 NvE Wa98Filter::Select() updated to accept only physics events with
+                combined LEDA and CPV activity. Also beam triggers are accepted now.
+                Slight format modification in Wa98Filter::Print() and Wa98Filter::Glob()
+                removed. Also Glob() and Print() removed from Wa98Display.
+25-mar-1999 NvE ClusterLeda() of class Wa98Filter split in ClusterLeda() and VetoLeda().
+                Also confidence level histos removed from Wa98Filter; info will be
+                provided via the new Wa98Dst class.
+26-mar-1999 NvE Wa98Dst class introduced and several memberfunctions of Wa98Filter
+                declared virtual in view of base class functionality.
+21-apr-1999 NvE Wa98Dst memberfunctions SetLab() and SetCms() introduced and filling of
+                DST data updated accordingly.
+15-jul-1999 NvE TChain::GetEvent() calls replaced by TChain::GetEntry() in Wa98Filter
+                and Wa98Display to adopt new ROOT convention.
+28-oct-1999 NvE AliBoost::SetGamma() replaced by SetBeta() invokation in
+                Wa98Dst::SetCms since SetGamma() memberfunction has been removed.
+                Wa98Filter::SetCpv() added to enable CPV processing selection.  
+22-feb-2001 NvE File RWA98LinkDef.h updated to allow the automatic schema evolution
+                as introduced in ROOT 3.00/05. 
+25-jun-2002 NvE Class Wa98Event introduced.
+                This makes all the previously defined classes obsolete.
+18-feb-2003 NvE Date/time format changed and ShowCalorimeters() invoked in Wa98Event::HeaderData().
+06-mar-2003 NvE Copy ctor introduced for Wa98Event.
+25-oct-2003 NvE ShowCalorimeters() replaced by ShowDevices() in Wa98Event::HeaderData().
+26-oct-2003 NvE Memberfunctions HeaderData() and Data() removed from Wa98Event, since the
+                corresponding functions of AliEvent now use the ClassName in the printout.
+06-nov-2003 NvE Include of AliCalorimeter.h added in Wa98Event.h since AliEvent.h doesn't have
+                this include anymore.
+06-jul-2004 NvE New class Wa98Convert introduced and support for sorting mode introduced 
+                in Wa98Event::ClusterLeda().
+29-nov-2004 NvE Package containing the classes Wa98Event, Wa98Convert and the usual files
+                RWA98Headers.h, RWA98LinkDef.h, history.txt and the sub-directory /scripts
+                introduced as a sub-directory /wa98 in the Ralice repository at CERN. 
+