ROOT logo
// ----------------------------------------------------//
//                                                     //
//       This macro reads the PMD clusters which       //
//       are stored in the file "PMD.RecPoints.root"   //
//                                                     //
// ----------------------------------------------------//

#include <Riostream.h>
#include "TBranch.h"
#include "TStopwatch.h"

extern AliRun *gAlice;

Int_t AliPMDRecpointRead(Int_t nevent = 1)
{
  if (gAlice)
    { 
      delete AliRunLoader::Instance();
      delete gAlice;//if everything was OK here it is already NULL
      gAlice = 0x0;
    }
  AliRunLoader *fRunLoader = AliRunLoader::Open("galice.root","Event","update");
  if (!fRunLoader)
    {
      cerr<<"Can't load RunLoader"<<endl;
      return 1;
    }
  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");


  AliCDBManager *man = AliCDBManager::Instance();
  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  man->SetRun(0);
  
  TClonesArray *fRecpoints;
  AliPMDUtility *cc = new AliPMDUtility();

  cc->ApplyAlignment();

  TH2F *h2 = new TH2F("h2"," ",100,-100.,100.,100,-100.,100.);

  FILE *fpw = fopen("junk_rec.dat","w");
  
  for (Int_t ievt = 0; ievt < nevent; ievt++)
    {
      fRunLoader->GetEvent(ievt);
      TTree *treeR = pmdloader->TreeR();
      if (treeR == 0x0)
	{
	  cout << " Can not get TreeR" << endl;
	  return 3;
	}

      AliPMDrecpoint1  *pmdrecpoint;
      TBranch *branch1 = treeR->GetBranch("PMDRecpoint");
      branch1->SetAddress(&fRecpoints);
      /**********************************************************************
       *    det   : Detector, 0: PRE & 1:CPV                                *
       *    smn   : Serial Module Number from 0 to 23 for both detector     *
       *    xpos  : x-position of the cluster                               *
       *    ypos  : y-position of the cluster                               *
       *            THESE xpos & ypos are not the true xpos and ypos        *
       *            for some of the unit modules. They are rotated.         *
       *    adc   : ADC contained in the cluster                            *
       *    ncell : Number of cells contained in the cluster                *
       *    rad   : radius of the cluster (1d fit)                          *
       *    xpad  : TRUE x-position of the cluster                          *
       *    ypad  : TRUE y-position of the cluster                          *
       **********************************************************************/

      Int_t   det,smn;
      Float_t xpos,ypos, xpad, ypad;
      Float_t adc, ncell, sigx, sigy;
      Float_t xx, yy;
      Int_t   nmodules = branch1->GetEntries();
      cout << " nmodules = " << nmodules << endl;
      for (Int_t imodule = 0; imodule < nmodules; imodule++)
	{
	  branch1->GetEntry(imodule); 
	  Int_t nentries = fRecpoints->GetLast();
	  for(Int_t ient = 0; ient < nentries+1; ient++)
	    {
	      pmdrecpoint = (AliPMDrecpoint1*)fRecpoints->UncheckedAt(ient);
	      det   = (Int_t) pmdrecpoint->GetDetector();
	      smn   = (Int_t) pmdrecpoint->GetSMNumber();
	      xpos  = pmdrecpoint->GetClusX();
	      ypos  = pmdrecpoint->GetClusY();
	      adc   = pmdrecpoint->GetClusADC();
	      ncell = pmdrecpoint->GetClusCells();
	      sigx  = pmdrecpoint->GetClusSigmaX();
	      sigy  = pmdrecpoint->GetClusSigmaY();

	      //
	      // User has to plug in his analysis code here
	      //

	      fprintf(fpw,"%d %d %d %d\n",
		      det,smn,xpos,ypos);
	      //
	      // Plot the cluster centroid to see the PMD geometry
	      // using the PMD Utility class
	      //
	      if (det == 1)
		{
		  // Draw only for PRE plane
		  cc->RectGeomCellPos(smn,xpos,ypos,xx,yy);
		  h2->Fill(xx,yy);
		}

	      //
	      // End of the User code
	      //
	    }
	}
      
    }

  h2->Draw();

  fclose(fpw);
  return 0;
}

 AliPMDRecpointRead.C:1
 AliPMDRecpointRead.C:2
 AliPMDRecpointRead.C:3
 AliPMDRecpointRead.C:4
 AliPMDRecpointRead.C:5
 AliPMDRecpointRead.C:6
 AliPMDRecpointRead.C:7
 AliPMDRecpointRead.C:8
 AliPMDRecpointRead.C:9
 AliPMDRecpointRead.C:10
 AliPMDRecpointRead.C:11
 AliPMDRecpointRead.C:12
 AliPMDRecpointRead.C:13
 AliPMDRecpointRead.C:14
 AliPMDRecpointRead.C:15
 AliPMDRecpointRead.C:16
 AliPMDRecpointRead.C:17
 AliPMDRecpointRead.C:18
 AliPMDRecpointRead.C:19
 AliPMDRecpointRead.C:20
 AliPMDRecpointRead.C:21
 AliPMDRecpointRead.C:22
 AliPMDRecpointRead.C:23
 AliPMDRecpointRead.C:24
 AliPMDRecpointRead.C:25
 AliPMDRecpointRead.C:26
 AliPMDRecpointRead.C:27
 AliPMDRecpointRead.C:28
 AliPMDRecpointRead.C:29
 AliPMDRecpointRead.C:30
 AliPMDRecpointRead.C:31
 AliPMDRecpointRead.C:32
 AliPMDRecpointRead.C:33
 AliPMDRecpointRead.C:34
 AliPMDRecpointRead.C:35
 AliPMDRecpointRead.C:36
 AliPMDRecpointRead.C:37
 AliPMDRecpointRead.C:38
 AliPMDRecpointRead.C:39
 AliPMDRecpointRead.C:40
 AliPMDRecpointRead.C:41
 AliPMDRecpointRead.C:42
 AliPMDRecpointRead.C:43
 AliPMDRecpointRead.C:44
 AliPMDRecpointRead.C:45
 AliPMDRecpointRead.C:46
 AliPMDRecpointRead.C:47
 AliPMDRecpointRead.C:48
 AliPMDRecpointRead.C:49
 AliPMDRecpointRead.C:50
 AliPMDRecpointRead.C:51
 AliPMDRecpointRead.C:52
 AliPMDRecpointRead.C:53
 AliPMDRecpointRead.C:54
 AliPMDRecpointRead.C:55
 AliPMDRecpointRead.C:56
 AliPMDRecpointRead.C:57
 AliPMDRecpointRead.C:58
 AliPMDRecpointRead.C:59
 AliPMDRecpointRead.C:60
 AliPMDRecpointRead.C:61
 AliPMDRecpointRead.C:62
 AliPMDRecpointRead.C:63
 AliPMDRecpointRead.C:64
 AliPMDRecpointRead.C:65
 AliPMDRecpointRead.C:66
 AliPMDRecpointRead.C:67
 AliPMDRecpointRead.C:68
 AliPMDRecpointRead.C:69
 AliPMDRecpointRead.C:70
 AliPMDRecpointRead.C:71
 AliPMDRecpointRead.C:72
 AliPMDRecpointRead.C:73
 AliPMDRecpointRead.C:74
 AliPMDRecpointRead.C:75
 AliPMDRecpointRead.C:76
 AliPMDRecpointRead.C:77
 AliPMDRecpointRead.C:78
 AliPMDRecpointRead.C:79
 AliPMDRecpointRead.C:80
 AliPMDRecpointRead.C:81
 AliPMDRecpointRead.C:82
 AliPMDRecpointRead.C:83
 AliPMDRecpointRead.C:84
 AliPMDRecpointRead.C:85
 AliPMDRecpointRead.C:86
 AliPMDRecpointRead.C:87
 AliPMDRecpointRead.C:88
 AliPMDRecpointRead.C:89
 AliPMDRecpointRead.C:90
 AliPMDRecpointRead.C:91
 AliPMDRecpointRead.C:92
 AliPMDRecpointRead.C:93
 AliPMDRecpointRead.C:94
 AliPMDRecpointRead.C:95
 AliPMDRecpointRead.C:96
 AliPMDRecpointRead.C:97
 AliPMDRecpointRead.C:98
 AliPMDRecpointRead.C:99
 AliPMDRecpointRead.C:100
 AliPMDRecpointRead.C:101
 AliPMDRecpointRead.C:102
 AliPMDRecpointRead.C:103
 AliPMDRecpointRead.C:104
 AliPMDRecpointRead.C:105
 AliPMDRecpointRead.C:106
 AliPMDRecpointRead.C:107
 AliPMDRecpointRead.C:108
 AliPMDRecpointRead.C:109
 AliPMDRecpointRead.C:110
 AliPMDRecpointRead.C:111
 AliPMDRecpointRead.C:112
 AliPMDRecpointRead.C:113
 AliPMDRecpointRead.C:114
 AliPMDRecpointRead.C:115
 AliPMDRecpointRead.C:116
 AliPMDRecpointRead.C:117
 AliPMDRecpointRead.C:118
 AliPMDRecpointRead.C:119
 AliPMDRecpointRead.C:120
 AliPMDRecpointRead.C:121
 AliPMDRecpointRead.C:122
 AliPMDRecpointRead.C:123
 AliPMDRecpointRead.C:124
 AliPMDRecpointRead.C:125
 AliPMDRecpointRead.C:126
 AliPMDRecpointRead.C:127
 AliPMDRecpointRead.C:128
 AliPMDRecpointRead.C:129
 AliPMDRecpointRead.C:130
 AliPMDRecpointRead.C:131
 AliPMDRecpointRead.C:132
 AliPMDRecpointRead.C:133
 AliPMDRecpointRead.C:134
 AliPMDRecpointRead.C:135