#include "AliPMDrecpoint1.h"
#include "AliPMDUtility.h"
#include "AliPMDDiscriminator.h"
+#include "AliPMDEmpDiscriminator.h"
#include "AliPMDtracker.h"
#include "AliESDPmdTrack.h"
#include "AliESD.h"
-
+#include "AliLog.h"
ClassImp(AliPMDtracker)
fRecpoints(new TClonesArray("AliPMDrecpoint1", 1000)),
fPMDcontin(new TObjArray()),
fPMDcontout(new TObjArray()),
- fPMDdiscriminator(new AliPMDDiscriminator()),
fPMDutil(new AliPMDUtility()),
fPMDrecpoint(0),
fPMDclin(0),
fPMDclout(0),
- fDebug(0),
fXvertex(0.),
fYvertex(0.),
fZvertex(0.),
// Default Constructor
//
}
+//--------------------------------------------------------------------//
+AliPMDtracker:: AliPMDtracker(const AliPMDtracker & /* tracker */):
+ TObject(/* tracker */)
+{
+ // copy constructor
+ AliError("Copy constructor not allowed");
+}
+
+//--------------------------------------------------------------------//
+AliPMDtracker& AliPMDtracker::operator=(const AliPMDtracker & /* tracker */)
+{
+ // assignment operator
+ AliError("Assignment operator not allowed");
+ return *this;
+}
+
//--------------------------------------------------------------------//
AliPMDtracker::~AliPMDtracker()
{
Int_t idet;
Int_t ismn;
- Float_t clusdata[5];
+ Float_t clusdata[6];
TBranch *branch = fTreeR->GetBranch("PMDRecpoint");
+ if (!branch)
+ {
+ AliError("PMDRecpoint branch not found");
+ return;
+ }
branch->SetAddress(&fRecpoints);
- Int_t nmodules = (Int_t) fTreeR->GetEntries();
- cout << " nmodules = " << nmodules << endl;
+ Int_t nmodules = (Int_t) branch->GetEntries();
+
+ AliDebug(1,Form("Number of modules filled in treeR = %d",nmodules));
for (Int_t imodule = 0; imodule < nmodules; imodule++)
{
- fTreeR->GetEntry(imodule);
+ branch->GetEntry(imodule);
Int_t nentries = fRecpoints->GetLast();
- // cout << " nentries = " << nentries << endl;
+ AliDebug(2,Form("Number of clusters per modules filled in treeR = %d"
+ ,nentries));
for(Int_t ient = 0; ient < nentries+1; ient++)
{
fPMDrecpoint = (AliPMDrecpoint1*)fRecpoints->UncheckedAt(ient);
clusdata[1] = fPMDrecpoint->GetClusY();
clusdata[2] = fPMDrecpoint->GetClusADC();
clusdata[3] = fPMDrecpoint->GetClusCells();
- clusdata[4] = fPMDrecpoint->GetClusRadius();
-
- fPMDclin = new AliPMDcluster(idet,ismn,clusdata);
+ clusdata[4] = fPMDrecpoint->GetClusSigmaX();
+ clusdata[5] = fPMDrecpoint->GetClusSigmaY();
+
+ fPMDclin = new AliPMDrecpoint1(idet,ismn,clusdata);
fPMDcontin->Add(fPMDclin);
}
}
- fPMDdiscriminator->Discrimination(fPMDcontin,fPMDcontout);
+ AliPMDDiscriminator *pmddiscriminator = new AliPMDEmpDiscriminator();
+ pmddiscriminator->Discrimination(fPMDcontin,fPMDcontout);
+
+ const Float_t kzpos = 361.5; // middle of the PMD
- const Float_t kzpos = 361.5;
- Int_t ism =0, ium=0;
Int_t det,smn;
Float_t xpos,ypos;
- Float_t xpad = 0, ypad = 0;
Float_t adc, ncell, rad;
- Float_t xglobal, yglobal;
+ Float_t xglobal = 0., yglobal = 0., zglobal = 0;
Float_t pid;
- Float_t zglobal = kzpos + (Float_t) fZvertex;
Int_t nentries2 = fPMDcontout->GetEntries();
- cout << " nentries2 = " << nentries2 << endl;
+ AliDebug(1,Form("Number of clusters coming after discrimination = %d"
+ ,nentries2));
for (Int_t ient1 = 0; ient1 < nentries2; ient1++)
{
fPMDclout = (AliPMDclupid*)fPMDcontout->UncheckedAt(ient1);
rad = fPMDclout->GetClusRadius();
pid = fPMDclout->GetClusPID();
- //
- // Now change the xpos and ypos to its original values
- // for the unit modules which are earlier changed.
- // xpad and ypad are the real positions.
//
/**********************************************************************
* det : Detector, 0: PRE & 1:CPV *
- * smn : Serial Module Number from which Super Module Number *
- * and Unit Module Numbers are extracted *
+ * smn : Serial Module Number 0 to 23 for each plane *
* xpos : x-position of the cluster *
* ypos : y-position of the cluster *
* THESE xpos & ypos are not the true xpos and ypos *
* adc : ADC contained in the cluster *
* ncell : Number of cells contained in the cluster *
* rad : radius of the cluster (1d fit) *
- * ism : Supermodule number extracted from smn *
- * ium : Unit module number extracted from smn *
- * xpad : TRUE x-position of the cluster *
- * ypad : TRUE y-position of the cluster *
**********************************************************************/
//
- if(det == 0 || det == 1)
+
+ fPMDutil->RectGeomCellPos(smn,xpos,ypos,xglobal,yglobal);
+
+ if (det == 0)
{
- if(smn < 12)
- {
- ism = smn/6;
- ium = smn - ism*6;
- xpad = ypos;
- ypad = xpos;
- }
- else if( smn >= 12 && smn < 24)
- {
- ism = smn/6;
- ium = smn - ism*6;
- xpad = xpos;
- ypad = ypos;
- }
+ zglobal = kzpos + 1.6; // PREshower plane
+ }
+ else if (det == 1)
+ {
+ zglobal = kzpos - 1.7; // CPV plane
}
-
- fPMDutil->RectGeomCellPos(ism,ium,xpad,ypad,xglobal,yglobal);
- fPMDutil->SetXYZ(xglobal,yglobal,zglobal);
- fPMDutil->CalculateEtaPhi();
- Float_t theta = fPMDutil->GetTheta();
- Float_t phi = fPMDutil->GetPhi();
// Fill ESD
AliESDPmdTrack *esdpmdtr = new AliESDPmdTrack();
esdpmdtr->SetDetector(det);
- esdpmdtr->SetTheta(theta);
- esdpmdtr->SetPhi(phi);
+ esdpmdtr->SetClusterX(xglobal);
+ esdpmdtr->SetClusterY(yglobal);
+ esdpmdtr->SetClusterZ(zglobal);
esdpmdtr->SetClusterADC(adc);
+ esdpmdtr->SetClusterCells(ncell);
esdpmdtr->SetClusterPID(pid);
event->AddPmdTrack(esdpmdtr);
}
-
}
//--------------------------------------------------------------------//
void AliPMDtracker::SetVertex(Double_t vtx[3], Double_t evtx[3])
fSigmaZ = evtx[2];
}
//--------------------------------------------------------------------//
-void AliPMDtracker::SetDebug(Int_t idebug)
-{
- fDebug = idebug;
-}
-//--------------------------------------------------------------------//
void AliPMDtracker::ResetClusters()
{
if (fRecpoints) fRecpoints->Clear();