fTracks("AliESDtrack",15000),
fCaloTracks("AliESDCaloTrack",500),
fMuonTracks("AliESDMuonTrack",30),
+ fPmdTracks("AliESDPmdTrack",3000),
fV0s("AliESDv0",200),
fCascades("AliESDcascade",20)
{
printf(" charged %d\n",GetNumberOfTracks());
printf(" calo %d\n", GetNumberOfCaloTracks());
printf(" muon %d\n", GetNumberOfMuonTracks());
+ printf(" pmd %d\n", GetNumberOfPmdTracks());
printf(" v0 %d\n", GetNumberOfV0s());
printf(" cascades %d\n)", GetNumberOfCascades());
}
#include "TClonesArray.h"
#include "AliESDVertex.h"
#include "AliESDtrack.h"
-#include "AliESDMuonTrack.h"
#include "AliESDCaloTrack.h"
+#include "AliESDMuonTrack.h"
+#include "AliESDPmdTrack.h"
#include "AliESDv0.h"
#include "AliESDcascade.h"
fTracks.Delete();
fCaloTracks.Delete();
fMuonTracks.Delete();
+ fPmdTracks.Delete();
fV0s.Delete();
fCascades.Delete();
}
AliESDMuonTrack *GetMuonTrack(Int_t i) const {
return (AliESDMuonTrack *)fMuonTracks.UncheckedAt(i);
}
+ AliESDPmdTrack *GetPmdTrack(Int_t i) const {
+ return (AliESDPmdTrack *)fPmdTracks.UncheckedAt(i);
+ }
void AddTrack(const AliESDtrack *t) {
new(fTracks[fTracks.GetEntriesFast()]) AliESDtrack(*t);
void AddMuonTrack(const AliESDMuonTrack *t) {
new(fMuonTracks[fMuonTracks.GetEntriesFast()]) AliESDMuonTrack(*t);
}
+ void AddPmdTrack(const AliESDPmdTrack *t) {
+ new(fPmdTracks[fPmdTracks.GetEntriesFast()]) AliESDPmdTrack(*t);
+ }
AliESDv0 *GetV0(Int_t i) const {
return (AliESDv0 *)fV0s.UncheckedAt(i);
Int_t GetNumberOfTracks() const {return fTracks.GetEntriesFast();}
Int_t GetNumberOfCaloTracks() const {return fCaloTracks.GetEntriesFast();}
Int_t GetNumberOfMuonTracks() const {return fMuonTracks.GetEntriesFast();}
+ Int_t GetNumberOfPmdTracks() const {return fPmdTracks.GetEntriesFast();}
Int_t GetNumberOfV0s() const {return fV0s.GetEntriesFast();}
Int_t GetNumberOfCascades() const {return fCascades.GetEntriesFast();}
TClonesArray fTracks; // ESD tracks
TClonesArray fCaloTracks; // Calorimeters' ESD tracks
TClonesArray fMuonTracks; // MUON ESD tracks
+ TClonesArray fPmdTracks; // PMD ESD tracks
TClonesArray fV0s; // V0 vertices
TClonesArray fCascades; // Cascade vertices
--- /dev/null
+// ----------------------------------------------------//
+// //
+// This macro reads the PMD clusters, //
+// does photon/hadron discrimination //
+// and stores in the ESD //
+// //
+// ----------------------------------------------------//
+
+#include <Riostream.h>
+#include "TBranch.h"
+#include "TStopwatch.h"
+
+extern AliRun *gAlice;
+
+Int_t AliESDPmdTest(Int_t nevent = 1)
+{
+ if (gAlice)
+ {
+ delete gAlice->GetRunLoader();
+ delete gAlice;//if everything was OK here it is already NULL
+ gAlice = 0x0;
+ }
+
+ AliRunLoader *fRunLoader = AliRunLoader::Open("galice.root");
+ if (!fRunLoader)
+ {
+ cerr<<"Can't load RunLoader"<<endl;
+ return 1;
+ }
+ fRunLoader->LoadgAlice();
+ gAlice = fRunLoader->GetAliRun();
+
+ AliLoader *pmdloader = fRunLoader->GetLoader("PMDLoader");
+ // Int_t nevent = fRunLoader->GetNumberOfEvents();
+ cout << " ************ nevent = " << nevent << endl;
+
+ if (pmdloader == 0x0)
+ {
+ cerr<<" ===> Can not find PMD or PMDLoader <===\n";
+ delete fRunLoader;
+ return 2;
+ }
+ pmdloader->LoadRecPoints("READ");
+
+ TFile *bf=TFile::Open("AliESDcheck.root","RECREATE");
+ if (!bf || !bf->IsOpen()) {
+ cerr<<"Can't open AliESDcheck.root !\n"; return 1;
+ }
+
+ Char_t ename[100];
+
+ for (Int_t ievt = 0; ievt < nevent; ievt++)
+ {
+
+ AliESD *event=new AliESD();
+ Int_t run = 0;
+ event->SetRunNumber(run);
+ event->SetEventNumber(ievt);
+
+ fRunLoader->GetEvent(ievt);
+ TTree *treeR = pmdloader->TreeR();
+ if (treeR == 0x0)
+ {
+ cout << " Can not get TreeR" << endl;
+ return 3;
+ }
+ AliPMDtracker *pmdtracker = new AliPMDtracker();
+ pmdtracker->LoadClusters(treeR);
+ pmdtracker->Clusters2Tracks(event);
+
+ bf->cd();
+ sprintf(ename,"in%d",ievt);
+ event->Write(ename); bf->Flush();
+
+ delete pmdtracker;
+ delete event;
+ }
+ bf->Close();
+ return 0;
+}
+
--- /dev/null
+#include "AliESDPmdTrack.h"
+
+ClassImp(AliESDPmdTrack)
+
+AliESDPmdTrack::AliESDPmdTrack (const AliESDPmdTrack& PMDTrack):TObject(PMDTrack)
+{
+ // Constructor
+ fDet = PMDTrack.fDet;
+ fTheta = PMDTrack.fTheta;
+ fPhi = PMDTrack.fPhi;
+ fCluADC = PMDTrack.fCluADC;
+ fCluPID = PMDTrack.fCluPID;
+}
+//--------------------------------------------------------------------------//
+AliESDPmdTrack &AliESDPmdTrack::operator=(const AliESDPmdTrack& PMDTrack)
+{
+ // Copy constructor
+ if(&PMDTrack == this) return *this;
+ fDet = PMDTrack.fDet;
+ fTheta = PMDTrack.fTheta;
+ fPhi = PMDTrack.fPhi;
+ fCluADC = PMDTrack.fCluADC;
+ fCluPID = PMDTrack.fCluPID;
+ return *this;
+}
--- /dev/null
+#ifndef ALIESDPMDTRACK_H
+#define ALIESDPMDTRACK_H
+
+#include "TObject.h"
+
+class AliESDPmdTrack : public TObject {
+ public:
+ AliESDPmdTrack(){}
+ virtual ~AliESDPmdTrack(){}
+ AliESDPmdTrack (const AliESDPmdTrack &PMDTrack); // copy constructor
+ AliESDPmdTrack &operator=(const AliESDPmdTrack &PMDTrack); // assignment op
+
+ void SetDetector(Int_t idet) {fDet = idet;}
+ void SetTheta(Float_t theta) {fTheta = theta;}
+ void SetPhi(Float_t phi) {fPhi = phi;}
+ void SetClusterADC(Float_t cluadc) {fCluADC = cluadc;}
+ void SetClusterPID(Float_t clupid) {fCluPID = clupid;}
+
+ Int_t GetDetector() const {return fDet;}
+ Float_t GetTheta() const {return fTheta;}
+ Float_t GetPhi() const {return fPhi;}
+ Float_t GetClusterADC() const {return fCluADC;}
+ Float_t GetClusterPID() const {return fCluPID;}
+
+ protected:
+ Int_t fDet; // Detector, 0:PRE, 1:CPV
+ Float_t fTheta; // Theta of the Cluster in radian
+ Float_t fPhi; // Phi of the Cluster in radian
+ Float_t fCluADC; // Cluster Energy in ADC
+ Float_t fCluPID; // Cluster probability, 1: Photon, 0: Hadron
+
+ ClassDef(AliESDPmdTrack,1) //PMD ESD track class
+};
+
+#endif
#pragma link C++ class AliESDtrack+;
#pragma link C++ class AliESDCaloTrack+;
#pragma link C++ class AliESDMuonTrack+;
+#pragma link C++ class AliESDPmdTrack+;
+#pragma link C++ class AliReconstructor+;
#pragma link C++ class AliESDv0+;
#pragma link C++ class AliESDcascade+;
#pragma link C++ class AliESDVertex+;
#pragma link C++ class AliReconstruction+;
#pragma link C++ class AliVertexGenFile+;
#pragma link C++ class AliVertexer+;
-#pragma link C++ class AliReconstructor+;
#endif
AliGausCorr.cxx AliTrackReference.cxx AliESD.cxx \
AliTrackMap.cxx AliTrackMapper.cxx AliCollisionGeometry.cxx \
AliMemoryWatcher.cxx AliBarrelTrack.cxx \
-AliESDtrack.cxx AliESDCaloTrack.cxx AliESDMuonTrack.cxx AliESDv0.cxx AliESDcascade.cxx AliESDVertex.cxx AliESDpid.cxx \
+AliESDtrack.cxx AliESDCaloTrack.cxx AliESDMuonTrack.cxx AliESDPmdTrack.cxx AliESDv0.cxx AliESDcascade.cxx AliESDVertex.cxx AliESDpid.cxx \
AliVertexer.cxx \
AliMC.cxx AliSimulation.cxx AliReconstruction.cxx AliVertexGenFile.cxx \
AliReconstructor.cxx