ROOT logo
//////////////////////////////////////////////////////////////////
// Macro to check clusters in the 2 SPD layers                  //
// Provides:                                                    //
//  2 canvases with                                             //
//     - cluster loc and glob coordinates  (each layer)         //
//  1 canvas with                                               //
//      - cluster glob coordinates 2D and 3D                    //
//  1 canvas with                                               //
//      - correlations of #clusters for sectors                 //
//      - correlations of #clusters for half-sectors            //
//                                                              //
//  Maria.Nicassio@ba.infn.it                                   //
//  Domenico.Elia@ba.infn.it                                    //
//////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
                                                                                
#include <Riostream.h>
#include <TFile.h>
#include <TTree.h>
#include <TBranch.h>
#include <TCanvas.h>
#include <TClonesArray.h>
#include <TH1.h>
#include <TH2.h>
#include <TH3.h>
#include <TStyle.h>
#include <TProfile.h>
#include <TClassTable.h>
#include <TInterpreter.h> 
#include <TGraph2D.h>
#include <TGraph.h>
#include <TGeoManager.h>

#include "AliCDBManager.h"
#include "AliRunLoader.h"
#include "AliESD.h"
#include "AliRun.h"
#include "AliGeomManager.h"                                                                                
#include "AliITS.h"
#include "AliITSgeom.h"
#include "AliITSLoader.h"
#include <AliITSRecPoint.h>
#include <AliHeader.h>                                                                                
#include <AliITSDetTypeRec.h>                                                                                

#endif

/* $Id$ */

void ShowSPDRecPoints(Int_t RunStart, Int_t RunStop){

  // Set data directory
  Char_t str[256];
  Char_t* dir = "/data/alipix/PhysicsEvents/pp/ppProd/pdc07/oldgeom";        
 
  // Variables for histo booking and filling 
  Int_t modmin=0;
  Int_t modmax=240;
  Int_t totmod=modmax-modmin;
  
  Float_t xlim[2]={4.5,8.};   
  Float_t zlim[2]={15.,15.};

  Int_t nClusters[2];

  Float_t clustersXCoord[2][200];
  Float_t clustersYCoord[2][200];
  Float_t clustersZCoord[2][200];
 
  Float_t cluGlo[3]={0.,0.,0.};  
 
  Int_t nClustersPerLayerPerSector[2][10];
  Int_t nClustersPerLayerPerHalfSector[2][20];

  Int_t iSector=0;  
  Int_t iHalfSector=0;

  // Booking of histograms  
  gStyle->SetPalette(1,0);                                                                                                     
  TH1F* hlayer= new TH1F("hlayer","",6,0.,6.);
  TH1F** hmod = new TH1F*[2];
  TH1F** hxl  = new TH1F*[2];
  TH1F** hzl  = new TH1F*[2];
  TH1F** hxg  = new TH1F*[2];
  TH1F** hyg  = new TH1F*[2];
  TH1F** hzg  = new TH1F*[2];
  TH1F** hr   = new TH1F*[2];
  TH1F** hphi = new TH1F*[2];
  TH1F** hMultSPDcl = new TH1F*[2];
  TH1F** hType = new TH1F*[2];  // cluster type ?

  TH2F** hr_phi   = new TH2F*[2];
  TH2F** hx_y   = new TH2F*[2];
  TH3F** hx_y_z   = new TH3F*[2];

  TH2F** hnCl2_nCl1_Sec = new TH2F*[10];
  TProfile** hnCl2vsnCl1_Sec = new TProfile*[10];
  TH2F** hnCl2_nCl1_HSec = new TH2F*[20];
//  TProfile** hnCl2vsnCl1_HSec = new TProfile*[20];
  TH2F** hNy_Nz = new TH2F*[2];  // y and z length
  TH2F** hPhi_Z = new TH2F*[2];
   
  TH2F *hMultSPDcl2_MultSPDcl1 = 
            new TH2F("nCl2_nCl1","# SPD clusters on layer 2 vs # on layer 1",200,0.,200.,200,0.,200.);
  hMultSPDcl2_MultSPDcl1->GetXaxis()->SetTitle("# clusters (inner layer)");
  hMultSPDcl2_MultSPDcl1->GetYaxis()->SetTitle("# clusters (outer layer)");                                                                                                                         
  Char_t name[10];
  Char_t title[20];
  for (Int_t iLay=0;iLay<2;iLay++) {
    sprintf(name,"hmod%d",iLay+1);
    hmod[iLay]=new TH1F(name,"SPD clusters - Module number",totmod,modmin,modmax);
    hmod[iLay]->GetXaxis()->SetTitle("Module number");
    hmod[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hxloc%d",iLay+1);
    hxl[iLay]=new TH1F(name,"SPD clusters - Local x coordinate",100,-4.,4.);
    hxl[iLay]->GetXaxis()->SetTitle("Local x [cm]");
    hxl[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hzloc%d",iLay+1);
    hzl[iLay]=new TH1F(name,"SPD clusters - Local z coordinate",100,-4.,4.);
    hzl[iLay]->GetXaxis()->SetTitle("Local z [cm]");
    hzl[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hxgl%d",iLay+1);
    hxg[iLay]=new TH1F(name,"SPD clusters - Global x coordinate",100,-xlim[iLay],xlim[iLay]);
    hxg[iLay]->GetXaxis()->SetTitle("Global x [cm]");
    hxg[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hygl%d",iLay+1);
    hyg[iLay]=new TH1F(name,"SPD clusters - Global y coordinate",100,-xlim[iLay],xlim[iLay]);
    hyg[iLay]->GetXaxis()->SetTitle("Global y [cm]");
    hyg[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hzgl%d",iLay+1);
    hzg[iLay]=new TH1F(name,"SPD clusters - Global z coordinate",150,-zlim[iLay],zlim[iLay]);
    hzg[iLay]->GetXaxis()->SetTitle("Global z [cm]");
    hzg[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hr%d",iLay+1);
    hr[iLay]=new TH1F(name,"SPD clusters - r",100,0.,50.);
    hr[iLay]->GetXaxis()->SetTitle("r [cm]");
    hr[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hphi%d",iLay+1);
    hphi[iLay]=new TH1F(name,"SPD clusters - #phi",100,0.,2*TMath::Pi()); 
    hphi[iLay]->GetXaxis()->SetTitle("#phi [rad]");
    hphi[iLay]->GetYaxis()->SetTitle("Entries");
    sprintf(name,"hType%d",iLay+1);
    hType[iLay]=new TH1F(name,"SPD clusters - Type",100,0.,100.);
    hType[iLay]->GetXaxis()->SetTitle("Cluster type");
    hType[iLay]->GetYaxis()->SetTitle("Entries");

    sprintf(name,"hMultSPDcl%d",iLay+1);
    hMultSPDcl[iLay]=new TH1F(name,"Cluster multiplicity",200,0.,200.);
    hMultSPDcl[iLay]->GetXaxis()->SetTitle("Cluster multiplicity");
    hMultSPDcl[iLay]->GetYaxis()->SetTitle("Entries");

    sprintf(name,"hNy_Nz%d",iLay+1);
    hNy_Nz[iLay]=new TH2F(name,"SPD clusters - Length",100,0.,100.,100,0.,100.);
    hNy_Nz[iLay]->GetXaxis()->SetTitle("z length");
    hNy_Nz[iLay]->GetYaxis()->SetTitle("y length");
    sprintf(name,"hPhi_Z%d",iLay+1);
    hPhi_Z[iLay]=new TH2F(name,"SPD clusters - #phi vs z",150,-zlim[iLay],zlim[iLay],100,0.,2*TMath::Pi());
    hPhi_Z[iLay]->GetXaxis()->SetTitle("Global z [cm]");
    hPhi_Z[iLay]->GetYaxis()->SetTitle("#phi [rad]");
    sprintf(name,"hr_phi%d",iLay+1);
    hr_phi[iLay]=new TH2F(name,"SPD clusters - #phi_r",500,0.,50.,100,0.,2*TMath::Pi());
    hr_phi[iLay]->GetXaxis()->SetTitle("r [cm]");
    hr_phi[iLay]->GetYaxis()->SetTitle("#phi [rad]");
    sprintf(name,"hx_y%d",iLay+1);
    hx_y[iLay]=new TH2F(name,"SPD clusters - y_x",200,-10.,10.,200,-10.,10.);
    hx_y[iLay]->GetXaxis()->SetTitle("x [cm]");
    hx_y[iLay]->GetYaxis()->SetTitle("y [cm]");
    sprintf(name,"hx_y_z%d",iLay+1);
    hx_y_z[iLay]=new TH3F(name,"SPD clusters - y_x",200,-10.,10.,200,-10.,10.,150,-15.,15.);
    hx_y_z[iLay]->GetXaxis()->SetTitle("z [cm]");
    hx_y_z[iLay]->GetYaxis()->SetTitle("x [cm]");
    hx_y_z[iLay]->GetZaxis()->SetTitle("y [cm]");
  }
  for (Int_t iSec=0; iSec<10; iSec++) {
    sprintf(name,"hnCl2_nCl1_Sector%d",iSec);
    sprintf(title,"Sector %d",iSec+1);
    hnCl2_nCl1_Sec[iSec]=new TH2F(name,title,200,0.,200.,200,0.,200.);
    hnCl2_nCl1_Sec[iSec]->GetXaxis()->SetTitle("# clusters (inner layer)");
    hnCl2_nCl1_Sec[iSec]->GetYaxis()->SetTitle("# clusters (outer layer)");
    sprintf(name,"hnCl2vsnCl1_Sector%d",iSec);
    sprintf(title,"Sector %d",iSec+1);
    hnCl2vsnCl1_Sec[iSec]=new TProfile(name,title,200,0.,200.,0.,200.);
    hnCl2vsnCl1_Sec[iSec]->GetXaxis()->SetTitle("# clusters (inner layer)");
    hnCl2vsnCl1_Sec[iSec]->GetYaxis()->SetTitle("# clusters (outer layer)");
  }
  for (Int_t iHalfSec=0; iHalfSec<20; iHalfSec++) {
    sprintf(name,"hnCl2_nCl1_HalfSector%d",iHalfSec);
    sprintf(title,"Half-Sector %d",iHalfSec+1);
    hnCl2_nCl1_HSec[iHalfSec]=new TH2F(name,title,200,0.,200.,200,0.,200.);
    hnCl2_nCl1_HSec[iHalfSec]->GetXaxis()->SetTitle("# clusters (inner layer)");
    hnCl2_nCl1_HSec[iHalfSec]->GetYaxis()->SetTitle("# clusters (outer layer)");
  }

  // Loop over runs
  for (Int_t run=RunStart; run<RunStop+1; run++) {
                                                                                
    // setup galice and runloader
//    cout << "File nr --> " << run << endl;
 
    if (gClassTable->GetID("AliRun") < 0) {
      gInterpreter->ExecuteMacro("loadlibs.C");
    }
    else { 
      if (gAlice){                        
        delete AliRunLoader::Instance();   
        delete gAlice;                    
        gAlice=0;                        
      }                                  
    }

    // Set OfflineConditionsDataBase if needed
    AliCDBManager* man = AliCDBManager::Instance();
    if (!man->IsDefaultStorageSet()) {
      printf("Setting a local default storage and run number 0\n");
      man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
      man->SetRun(0);
    }
    else {
      printf("Using deafult storage \n");
    }
 
    // retrives geometry 
    if (!gGeoManager) {
      sprintf(str,"%s/ppMinBias%04d/geometry.root",dir,run);
      AliGeomManager::LoadGeometry(str);  
    }

    sprintf(str,"%s/ppMinBias%04d/galice.root",dir,run);
    AliRunLoader*  rl = AliRunLoader::Open(str);

    if (rl == 0x0){                                 
      cerr<<"Can not open session RL=NULL"<< endl;  
      return;                                    
    }                                               
    Int_t retval = rl->LoadgAlice();                
    if (retval){
      cerr<<"LoadgAlice returned error"<<endl;
      return;
    }
    gAlice=rl->GetAliRun();                          

    retval = rl->LoadHeader();                       
    if (retval){
      cerr<<"LoadHeader returned error"<<endl;
      return;
    }

    AliITSLoader* ITSloader =  (AliITSLoader*) rl->GetLoader("ITSLoader");  
    if (!ITSloader){							  
      cerr<<"ITS loader not found"<<endl;					  
      return;								  
    }
    ITSloader->LoadRecPoints("read");                                       

    AliITS *ITS  = (AliITS*)gAlice->GetModule("ITS");
    ITS->SetTreeAddress();
    AliITSgeom *geom = ITS->GetITSgeom();                                    
    if (!geom) {                                                             
      cout << " Can't get the ITS geometry!" << endl;                      
      return ;                                                             
    }                                                                      

    AliITSDetTypeRec* detTypeRec = new AliITSDetTypeRec(); 

    detTypeRec->SetITSgeom(ITSloader->GetITSgeom());
    detTypeRec->SetDefaults();
 
    Int_t nEvents=rl->GetNumberOfEvents();                      
    printf("Total Number of events = %d\n",nEvents);            

    for (Int_t iev=0;iev<nEvents;iev++){                         
      rl->GetEvent(iev);                                        

      TTree *TR = ITSloader->TreeR();                           
      TClonesArray* ITSClusters;
      ITSClusters  = detTypeRec->RecPoints();  
      TBranch *branch = 0;
      if (TR && ITSClusters) {
        branch = ITSloader->TreeR()->GetBranch("ITSRecPoints");
        if (branch) branch->SetAddress(&ITSClusters);
      }

//      Int_t nparticles = rl->GetHeader()->GetNtrack();
//      cout<<"Event # "<<iev<<"   #Particles="<<nparticles<<endl;

      // Reset cluster counters
      for (Int_t iLay=0; iLay<2; iLay++) {
        nClusters[iLay]=0;
        for (Int_t iSec=0; iSec<10; iSec++) {
          nClustersPerLayerPerSector[iLay][iSec]=0;
        }
        for (Int_t iHSec=0; iHSec<20; iHSec++) {
          nClustersPerLayerPerHalfSector[iLay][iHSec]=0;
        }
      }    
      for (Int_t subd=0;subd<1;subd++) {

        Int_t first = geom->GetStartDet(subd);
        Int_t last = geom->GetLastDet(subd);
        for (Int_t mod=first; mod<=last; mod++) {
          detTypeRec->ResetRecPoints();  
	  branch->GetEvent(mod);
	  Int_t nrecp = ITSClusters->GetEntries();     
          while (nrecp--) {
	  
            AliITSRecPoint *recp = (AliITSRecPoint*)ITSClusters->At(nrecp); 
            
	    Int_t lay=recp->GetLayer();
//            cout<<"lay"<<lay<<endl;
            recp->GetGlobalXYZ(cluGlo);

	    Float_t rad=TMath::Sqrt(cluGlo[0]*cluGlo[0]+cluGlo[1]*cluGlo[1]); 
	    Float_t phi= TMath::Pi() + TMath::ATan2(-cluGlo[1],-cluGlo[0]); 
            hlayer->Fill(lay);
	    hmod[lay]->Fill(mod);
	    hzl[lay]->Fill(recp->GetDetLocalZ());
	    hxl[lay]->Fill(recp->GetDetLocalX());
	    hzg[lay]->Fill(cluGlo[2]);
	    hyg[lay]->Fill(cluGlo[1]);
	    hxg[lay]->Fill(cluGlo[0]);
	    hr[lay]->Fill(rad);
	    hphi[lay]->Fill(phi);
            hPhi_Z[lay]->Fill(cluGlo[2],phi);       
            hr_phi[lay]->Fill(rad,phi);
            hx_y[lay]->Fill(cluGlo[0],cluGlo[1]);
            hx_y_z[lay]->Fill(cluGlo[2],cluGlo[0],cluGlo[1]);
            clustersXCoord[lay][nClusters[lay]]=cluGlo[0]; 
            clustersYCoord[lay][nClusters[lay]]=cluGlo[1];
            clustersZCoord[lay][nClusters[lay]]=cluGlo[2];
            nClusters[lay]++;
  
            hType[lay]->Fill(recp->GetType());
//            cout<<"Clusters type"<<recp->GetType()<<endl;
            hNy_Nz[lay]->Fill(recp->GetNz(),recp->GetNy());
            
            // Set Sector number and increase the counter
            if (lay==0) {
              for (Int_t nRange=0; nRange<10; nRange++) {
                if ((mod>=nRange*8) && (mod<=(nRange*8+7))) {
                  iSector = nRange;
                  nClustersPerLayerPerSector[lay][iSector]++;
                  break;
                }
              }
            }
            if (lay==1) {
              for (Int_t nRange=0; nRange<10; nRange++) {
                if ((mod>=80+nRange*16) && (mod<=(80+nRange*16+15))) {
                  iSector = nRange;
                  nClustersPerLayerPerSector[lay][iSector]++;
                  break;
                }
              }
            }
            // Set HalfSector number and increase the counter
            if (lay==0) {
              for (Int_t nRange=0; nRange<20; nRange++) {
                 if ((mod>=nRange*4) && (mod<=(nRange*4+3))) {
                   iHalfSector = nRange;
                   nClustersPerLayerPerHalfSector[lay][iHalfSector]++;
                   break;
                 }
              }
            } else {
              for (Int_t nRange=0; nRange<20; nRange++) {
                if ((mod>=80+nRange*4) && (mod<=(80+nRange*4+3))) {
                  iHalfSector = nRange;
                  nClustersPerLayerPerHalfSector[lay][iHalfSector]++;
                  break;
                }
              }
            }
          }
	}
      }

      for (Int_t iLay=0; iLay<2; iLay++)   hMultSPDcl[iLay]->Fill(nClusters[iLay]);
      for (Int_t iSec=0; iSec<10; iSec++) {
        hnCl2_nCl1_Sec[iSec]->Fill(nClustersPerLayerPerSector[0][iSec],nClustersPerLayerPerSector[1][iSec]);
        hnCl2vsnCl1_Sec[iSec]->Fill(nClustersPerLayerPerSector[0][iSec],nClustersPerLayerPerSector[1][iSec]);
      }
      for (Int_t iHSec=0; iHSec<20; iHSec++) {
        hnCl2_nCl1_HSec[iHSec]->Fill(nClustersPerLayerPerHalfSector[0][iHSec],nClustersPerLayerPerHalfSector[1][iHSec]);
      }   
      hMultSPDcl2_MultSPDcl1->Fill(nClusters[0],nClusters[1]);
    
    } //end loop over events
    rl->UnloadAll();
    delete rl;
                                                                                
  } //end loop over runs

  // Draw and Write histos

  TFile* fout = new TFile("out_ShowSPDRecPoints.root","RECREATE");
  
  hlayer->Write();
//  cev0->Write();
  
  TCanvas **c=new TCanvas*[2];
  Char_t ctit[30];
  for(Int_t iLay=0;iLay<2;iLay++){
    hNy_Nz[iLay]->Write();
    sprintf(name,"can%d",iLay+1);
    sprintf(ctit,"Layer %d",iLay+1);
    c[iLay]=new TCanvas(name,ctit,1200,900);
    c[iLay]->Divide(3,3);
    c[iLay]->cd(1);
    hmod[iLay]->Draw();
    hmod[iLay]->Write();
    c[iLay]->cd(2);
    hxl[iLay]->Draw();
    hxl[iLay]->Write();
    c[iLay]->cd(3);
    hzl[iLay]->Draw();
    hzl[iLay]->Write();
    c[iLay]->cd(4);
    hxg[iLay]->Draw();
    hxg[iLay]->Write();
    c[iLay]->cd(5);
    hyg[iLay]->Draw();
    hyg[iLay]->Write();
    c[iLay]->cd(6);
    hzg[iLay]->Draw();
    hzg[iLay]->Write();
    c[iLay]->cd(7);
    hr[iLay]->Draw();
    hr[iLay]->Write();
    c[iLay]->cd(8);
    hphi[iLay]->Draw();   
    hphi[iLay]->Write();
    c[iLay]->cd(9);
    hPhi_Z[iLay]->Draw("colz"); 
    hPhi_Z[iLay]->Write();
    hr_phi[iLay]->Write();
    hx_y[iLay]->Write();
    hx_y_z[iLay]->Write();
  }

  TCanvas *cCoord=new TCanvas("cCoord","Cluster coordinates",1200,900);
  cCoord->Divide(2,2);

  for (Int_t iLay=0;iLay<2;iLay++) {
    cCoord->cd(1);
    hx_y[iLay]->SetMarkerStyle(22);
    hx_y[iLay]->SetMarkerSize(0.3);
    hx_y[iLay]->SetMarkerColor(iLay+1);
    if (iLay==0) hx_y[iLay]->Draw("p");
    else hx_y[iLay]->Draw("p,same");
    cCoord->cd(2);
    hx_y_z[iLay]->SetMarkerStyle(23);
    hx_y_z[iLay]->SetMarkerSize(0.3);
    hx_y_z[iLay]->SetMarkerColor(iLay+1);
    hx_y_z[iLay]->Draw("p,same");
    cCoord->cd(3);
    hr_phi[iLay]->SetMarkerColor(iLay+1);
    hr_phi[iLay]->Draw("p,same");
  }
  TCanvas *cCorrelations_Sectors=new TCanvas("cCorrelations_S","SPD cluster correlations (Sectors)",1200,900);
  cCorrelations_Sectors->Divide(3,5);
  cCorrelations_Sectors->cd(1);
  hMultSPDcl2_MultSPDcl1->Draw();
  hMultSPDcl2_MultSPDcl1->Write();
  cCorrelations_Sectors->cd(2);
  hMultSPDcl[0]->Draw();
  hMultSPDcl[0]->Write();
  cCorrelations_Sectors->cd(3);
  hMultSPDcl[1]->Draw();
  hMultSPDcl[1]->Write();
  for (Int_t iS=0; iS<10; ++iS) { 
    cCorrelations_Sectors->cd(iS+4); 
    hnCl2_nCl1_Sec[iS]->Draw();
    hnCl2_nCl1_Sec[iS]->Write();
    hnCl2vsnCl1_Sec[iS]->Write();
  }
 
  TCanvas *cCorrelations_HSectors=new TCanvas("cCorrelations_HS","SPD cluster correlations (Half-Sectors)",1200,900);
  cCorrelations_HSectors->Divide(5,4);

  for (Int_t iHS=0; iHS<20; ++iHS) {
    cCorrelations_HSectors->cd(iHS+1);
    hnCl2_nCl1_HSec[iHS]->Write();
    hnCl2_nCl1_HSec[iHS]->Draw(); 
  }

  fout->Close();

}
 ShowSPDRecPoints.C:1
 ShowSPDRecPoints.C:2
 ShowSPDRecPoints.C:3
 ShowSPDRecPoints.C:4
 ShowSPDRecPoints.C:5
 ShowSPDRecPoints.C:6
 ShowSPDRecPoints.C:7
 ShowSPDRecPoints.C:8
 ShowSPDRecPoints.C:9
 ShowSPDRecPoints.C:10
 ShowSPDRecPoints.C:11
 ShowSPDRecPoints.C:12
 ShowSPDRecPoints.C:13
 ShowSPDRecPoints.C:14
 ShowSPDRecPoints.C:15
 ShowSPDRecPoints.C:16
 ShowSPDRecPoints.C:17
 ShowSPDRecPoints.C:18
 ShowSPDRecPoints.C:19
 ShowSPDRecPoints.C:20
 ShowSPDRecPoints.C:21
 ShowSPDRecPoints.C:22
 ShowSPDRecPoints.C:23
 ShowSPDRecPoints.C:24
 ShowSPDRecPoints.C:25
 ShowSPDRecPoints.C:26
 ShowSPDRecPoints.C:27
 ShowSPDRecPoints.C:28
 ShowSPDRecPoints.C:29
 ShowSPDRecPoints.C:30
 ShowSPDRecPoints.C:31
 ShowSPDRecPoints.C:32
 ShowSPDRecPoints.C:33
 ShowSPDRecPoints.C:34
 ShowSPDRecPoints.C:35
 ShowSPDRecPoints.C:36
 ShowSPDRecPoints.C:37
 ShowSPDRecPoints.C:38
 ShowSPDRecPoints.C:39
 ShowSPDRecPoints.C:40
 ShowSPDRecPoints.C:41
 ShowSPDRecPoints.C:42
 ShowSPDRecPoints.C:43
 ShowSPDRecPoints.C:44
 ShowSPDRecPoints.C:45
 ShowSPDRecPoints.C:46
 ShowSPDRecPoints.C:47
 ShowSPDRecPoints.C:48
 ShowSPDRecPoints.C:49
 ShowSPDRecPoints.C:50
 ShowSPDRecPoints.C:51
 ShowSPDRecPoints.C:52
 ShowSPDRecPoints.C:53
 ShowSPDRecPoints.C:54
 ShowSPDRecPoints.C:55
 ShowSPDRecPoints.C:56
 ShowSPDRecPoints.C:57
 ShowSPDRecPoints.C:58
 ShowSPDRecPoints.C:59
 ShowSPDRecPoints.C:60
 ShowSPDRecPoints.C:61
 ShowSPDRecPoints.C:62
 ShowSPDRecPoints.C:63
 ShowSPDRecPoints.C:64
 ShowSPDRecPoints.C:65
 ShowSPDRecPoints.C:66
 ShowSPDRecPoints.C:67
 ShowSPDRecPoints.C:68
 ShowSPDRecPoints.C:69
 ShowSPDRecPoints.C:70
 ShowSPDRecPoints.C:71
 ShowSPDRecPoints.C:72
 ShowSPDRecPoints.C:73
 ShowSPDRecPoints.C:74
 ShowSPDRecPoints.C:75
 ShowSPDRecPoints.C:76
 ShowSPDRecPoints.C:77
 ShowSPDRecPoints.C:78
 ShowSPDRecPoints.C:79
 ShowSPDRecPoints.C:80
 ShowSPDRecPoints.C:81
 ShowSPDRecPoints.C:82
 ShowSPDRecPoints.C:83
 ShowSPDRecPoints.C:84
 ShowSPDRecPoints.C:85
 ShowSPDRecPoints.C:86
 ShowSPDRecPoints.C:87
 ShowSPDRecPoints.C:88
 ShowSPDRecPoints.C:89
 ShowSPDRecPoints.C:90
 ShowSPDRecPoints.C:91
 ShowSPDRecPoints.C:92
 ShowSPDRecPoints.C:93
 ShowSPDRecPoints.C:94
 ShowSPDRecPoints.C:95
 ShowSPDRecPoints.C:96
 ShowSPDRecPoints.C:97
 ShowSPDRecPoints.C:98
 ShowSPDRecPoints.C:99
 ShowSPDRecPoints.C:100
 ShowSPDRecPoints.C:101
 ShowSPDRecPoints.C:102
 ShowSPDRecPoints.C:103
 ShowSPDRecPoints.C:104
 ShowSPDRecPoints.C:105
 ShowSPDRecPoints.C:106
 ShowSPDRecPoints.C:107
 ShowSPDRecPoints.C:108
 ShowSPDRecPoints.C:109
 ShowSPDRecPoints.C:110
 ShowSPDRecPoints.C:111
 ShowSPDRecPoints.C:112
 ShowSPDRecPoints.C:113
 ShowSPDRecPoints.C:114
 ShowSPDRecPoints.C:115
 ShowSPDRecPoints.C:116
 ShowSPDRecPoints.C:117
 ShowSPDRecPoints.C:118
 ShowSPDRecPoints.C:119
 ShowSPDRecPoints.C:120
 ShowSPDRecPoints.C:121
 ShowSPDRecPoints.C:122
 ShowSPDRecPoints.C:123
 ShowSPDRecPoints.C:124
 ShowSPDRecPoints.C:125
 ShowSPDRecPoints.C:126
 ShowSPDRecPoints.C:127
 ShowSPDRecPoints.C:128
 ShowSPDRecPoints.C:129
 ShowSPDRecPoints.C:130
 ShowSPDRecPoints.C:131
 ShowSPDRecPoints.C:132
 ShowSPDRecPoints.C:133
 ShowSPDRecPoints.C:134
 ShowSPDRecPoints.C:135
 ShowSPDRecPoints.C:136
 ShowSPDRecPoints.C:137
 ShowSPDRecPoints.C:138
 ShowSPDRecPoints.C:139
 ShowSPDRecPoints.C:140
 ShowSPDRecPoints.C:141
 ShowSPDRecPoints.C:142
 ShowSPDRecPoints.C:143
 ShowSPDRecPoints.C:144
 ShowSPDRecPoints.C:145
 ShowSPDRecPoints.C:146
 ShowSPDRecPoints.C:147
 ShowSPDRecPoints.C:148
 ShowSPDRecPoints.C:149
 ShowSPDRecPoints.C:150
 ShowSPDRecPoints.C:151
 ShowSPDRecPoints.C:152
 ShowSPDRecPoints.C:153
 ShowSPDRecPoints.C:154
 ShowSPDRecPoints.C:155
 ShowSPDRecPoints.C:156
 ShowSPDRecPoints.C:157
 ShowSPDRecPoints.C:158
 ShowSPDRecPoints.C:159
 ShowSPDRecPoints.C:160
 ShowSPDRecPoints.C:161
 ShowSPDRecPoints.C:162
 ShowSPDRecPoints.C:163
 ShowSPDRecPoints.C:164
 ShowSPDRecPoints.C:165
 ShowSPDRecPoints.C:166
 ShowSPDRecPoints.C:167
 ShowSPDRecPoints.C:168
 ShowSPDRecPoints.C:169
 ShowSPDRecPoints.C:170
 ShowSPDRecPoints.C:171
 ShowSPDRecPoints.C:172
 ShowSPDRecPoints.C:173
 ShowSPDRecPoints.C:174
 ShowSPDRecPoints.C:175
 ShowSPDRecPoints.C:176
 ShowSPDRecPoints.C:177
 ShowSPDRecPoints.C:178
 ShowSPDRecPoints.C:179
 ShowSPDRecPoints.C:180
 ShowSPDRecPoints.C:181
 ShowSPDRecPoints.C:182
 ShowSPDRecPoints.C:183
 ShowSPDRecPoints.C:184
 ShowSPDRecPoints.C:185
 ShowSPDRecPoints.C:186
 ShowSPDRecPoints.C:187
 ShowSPDRecPoints.C:188
 ShowSPDRecPoints.C:189
 ShowSPDRecPoints.C:190
 ShowSPDRecPoints.C:191
 ShowSPDRecPoints.C:192
 ShowSPDRecPoints.C:193
 ShowSPDRecPoints.C:194
 ShowSPDRecPoints.C:195
 ShowSPDRecPoints.C:196
 ShowSPDRecPoints.C:197
 ShowSPDRecPoints.C:198
 ShowSPDRecPoints.C:199
 ShowSPDRecPoints.C:200
 ShowSPDRecPoints.C:201
 ShowSPDRecPoints.C:202
 ShowSPDRecPoints.C:203
 ShowSPDRecPoints.C:204
 ShowSPDRecPoints.C:205
 ShowSPDRecPoints.C:206
 ShowSPDRecPoints.C:207
 ShowSPDRecPoints.C:208
 ShowSPDRecPoints.C:209
 ShowSPDRecPoints.C:210
 ShowSPDRecPoints.C:211
 ShowSPDRecPoints.C:212
 ShowSPDRecPoints.C:213
 ShowSPDRecPoints.C:214
 ShowSPDRecPoints.C:215
 ShowSPDRecPoints.C:216
 ShowSPDRecPoints.C:217
 ShowSPDRecPoints.C:218
 ShowSPDRecPoints.C:219
 ShowSPDRecPoints.C:220
 ShowSPDRecPoints.C:221
 ShowSPDRecPoints.C:222
 ShowSPDRecPoints.C:223
 ShowSPDRecPoints.C:224
 ShowSPDRecPoints.C:225
 ShowSPDRecPoints.C:226
 ShowSPDRecPoints.C:227
 ShowSPDRecPoints.C:228
 ShowSPDRecPoints.C:229
 ShowSPDRecPoints.C:230
 ShowSPDRecPoints.C:231
 ShowSPDRecPoints.C:232
 ShowSPDRecPoints.C:233
 ShowSPDRecPoints.C:234
 ShowSPDRecPoints.C:235
 ShowSPDRecPoints.C:236
 ShowSPDRecPoints.C:237
 ShowSPDRecPoints.C:238
 ShowSPDRecPoints.C:239
 ShowSPDRecPoints.C:240
 ShowSPDRecPoints.C:241
 ShowSPDRecPoints.C:242
 ShowSPDRecPoints.C:243
 ShowSPDRecPoints.C:244
 ShowSPDRecPoints.C:245
 ShowSPDRecPoints.C:246
 ShowSPDRecPoints.C:247
 ShowSPDRecPoints.C:248
 ShowSPDRecPoints.C:249
 ShowSPDRecPoints.C:250
 ShowSPDRecPoints.C:251
 ShowSPDRecPoints.C:252
 ShowSPDRecPoints.C:253
 ShowSPDRecPoints.C:254
 ShowSPDRecPoints.C:255
 ShowSPDRecPoints.C:256
 ShowSPDRecPoints.C:257
 ShowSPDRecPoints.C:258
 ShowSPDRecPoints.C:259
 ShowSPDRecPoints.C:260
 ShowSPDRecPoints.C:261
 ShowSPDRecPoints.C:262
 ShowSPDRecPoints.C:263
 ShowSPDRecPoints.C:264
 ShowSPDRecPoints.C:265
 ShowSPDRecPoints.C:266
 ShowSPDRecPoints.C:267
 ShowSPDRecPoints.C:268
 ShowSPDRecPoints.C:269
 ShowSPDRecPoints.C:270
 ShowSPDRecPoints.C:271
 ShowSPDRecPoints.C:272
 ShowSPDRecPoints.C:273
 ShowSPDRecPoints.C:274
 ShowSPDRecPoints.C:275
 ShowSPDRecPoints.C:276
 ShowSPDRecPoints.C:277
 ShowSPDRecPoints.C:278
 ShowSPDRecPoints.C:279
 ShowSPDRecPoints.C:280
 ShowSPDRecPoints.C:281
 ShowSPDRecPoints.C:282
 ShowSPDRecPoints.C:283
 ShowSPDRecPoints.C:284
 ShowSPDRecPoints.C:285
 ShowSPDRecPoints.C:286
 ShowSPDRecPoints.C:287
 ShowSPDRecPoints.C:288
 ShowSPDRecPoints.C:289
 ShowSPDRecPoints.C:290
 ShowSPDRecPoints.C:291
 ShowSPDRecPoints.C:292
 ShowSPDRecPoints.C:293
 ShowSPDRecPoints.C:294
 ShowSPDRecPoints.C:295
 ShowSPDRecPoints.C:296
 ShowSPDRecPoints.C:297
 ShowSPDRecPoints.C:298
 ShowSPDRecPoints.C:299
 ShowSPDRecPoints.C:300
 ShowSPDRecPoints.C:301
 ShowSPDRecPoints.C:302
 ShowSPDRecPoints.C:303
 ShowSPDRecPoints.C:304
 ShowSPDRecPoints.C:305
 ShowSPDRecPoints.C:306
 ShowSPDRecPoints.C:307
 ShowSPDRecPoints.C:308
 ShowSPDRecPoints.C:309
 ShowSPDRecPoints.C:310
 ShowSPDRecPoints.C:311
 ShowSPDRecPoints.C:312
 ShowSPDRecPoints.C:313
 ShowSPDRecPoints.C:314
 ShowSPDRecPoints.C:315
 ShowSPDRecPoints.C:316
 ShowSPDRecPoints.C:317
 ShowSPDRecPoints.C:318
 ShowSPDRecPoints.C:319
 ShowSPDRecPoints.C:320
 ShowSPDRecPoints.C:321
 ShowSPDRecPoints.C:322
 ShowSPDRecPoints.C:323
 ShowSPDRecPoints.C:324
 ShowSPDRecPoints.C:325
 ShowSPDRecPoints.C:326
 ShowSPDRecPoints.C:327
 ShowSPDRecPoints.C:328
 ShowSPDRecPoints.C:329
 ShowSPDRecPoints.C:330
 ShowSPDRecPoints.C:331
 ShowSPDRecPoints.C:332
 ShowSPDRecPoints.C:333
 ShowSPDRecPoints.C:334
 ShowSPDRecPoints.C:335
 ShowSPDRecPoints.C:336
 ShowSPDRecPoints.C:337
 ShowSPDRecPoints.C:338
 ShowSPDRecPoints.C:339
 ShowSPDRecPoints.C:340
 ShowSPDRecPoints.C:341
 ShowSPDRecPoints.C:342
 ShowSPDRecPoints.C:343
 ShowSPDRecPoints.C:344
 ShowSPDRecPoints.C:345
 ShowSPDRecPoints.C:346
 ShowSPDRecPoints.C:347
 ShowSPDRecPoints.C:348
 ShowSPDRecPoints.C:349
 ShowSPDRecPoints.C:350
 ShowSPDRecPoints.C:351
 ShowSPDRecPoints.C:352
 ShowSPDRecPoints.C:353
 ShowSPDRecPoints.C:354
 ShowSPDRecPoints.C:355
 ShowSPDRecPoints.C:356
 ShowSPDRecPoints.C:357
 ShowSPDRecPoints.C:358
 ShowSPDRecPoints.C:359
 ShowSPDRecPoints.C:360
 ShowSPDRecPoints.C:361
 ShowSPDRecPoints.C:362
 ShowSPDRecPoints.C:363
 ShowSPDRecPoints.C:364
 ShowSPDRecPoints.C:365
 ShowSPDRecPoints.C:366
 ShowSPDRecPoints.C:367
 ShowSPDRecPoints.C:368
 ShowSPDRecPoints.C:369
 ShowSPDRecPoints.C:370
 ShowSPDRecPoints.C:371
 ShowSPDRecPoints.C:372
 ShowSPDRecPoints.C:373
 ShowSPDRecPoints.C:374
 ShowSPDRecPoints.C:375
 ShowSPDRecPoints.C:376
 ShowSPDRecPoints.C:377
 ShowSPDRecPoints.C:378
 ShowSPDRecPoints.C:379
 ShowSPDRecPoints.C:380
 ShowSPDRecPoints.C:381
 ShowSPDRecPoints.C:382
 ShowSPDRecPoints.C:383
 ShowSPDRecPoints.C:384
 ShowSPDRecPoints.C:385
 ShowSPDRecPoints.C:386
 ShowSPDRecPoints.C:387
 ShowSPDRecPoints.C:388
 ShowSPDRecPoints.C:389
 ShowSPDRecPoints.C:390
 ShowSPDRecPoints.C:391
 ShowSPDRecPoints.C:392
 ShowSPDRecPoints.C:393
 ShowSPDRecPoints.C:394
 ShowSPDRecPoints.C:395
 ShowSPDRecPoints.C:396
 ShowSPDRecPoints.C:397
 ShowSPDRecPoints.C:398
 ShowSPDRecPoints.C:399
 ShowSPDRecPoints.C:400
 ShowSPDRecPoints.C:401
 ShowSPDRecPoints.C:402
 ShowSPDRecPoints.C:403
 ShowSPDRecPoints.C:404
 ShowSPDRecPoints.C:405
 ShowSPDRecPoints.C:406
 ShowSPDRecPoints.C:407
 ShowSPDRecPoints.C:408
 ShowSPDRecPoints.C:409
 ShowSPDRecPoints.C:410
 ShowSPDRecPoints.C:411
 ShowSPDRecPoints.C:412
 ShowSPDRecPoints.C:413
 ShowSPDRecPoints.C:414
 ShowSPDRecPoints.C:415
 ShowSPDRecPoints.C:416
 ShowSPDRecPoints.C:417
 ShowSPDRecPoints.C:418
 ShowSPDRecPoints.C:419
 ShowSPDRecPoints.C:420
 ShowSPDRecPoints.C:421
 ShowSPDRecPoints.C:422
 ShowSPDRecPoints.C:423
 ShowSPDRecPoints.C:424
 ShowSPDRecPoints.C:425
 ShowSPDRecPoints.C:426
 ShowSPDRecPoints.C:427
 ShowSPDRecPoints.C:428
 ShowSPDRecPoints.C:429
 ShowSPDRecPoints.C:430
 ShowSPDRecPoints.C:431
 ShowSPDRecPoints.C:432
 ShowSPDRecPoints.C:433
 ShowSPDRecPoints.C:434
 ShowSPDRecPoints.C:435
 ShowSPDRecPoints.C:436
 ShowSPDRecPoints.C:437
 ShowSPDRecPoints.C:438
 ShowSPDRecPoints.C:439
 ShowSPDRecPoints.C:440
 ShowSPDRecPoints.C:441
 ShowSPDRecPoints.C:442
 ShowSPDRecPoints.C:443
 ShowSPDRecPoints.C:444
 ShowSPDRecPoints.C:445
 ShowSPDRecPoints.C:446
 ShowSPDRecPoints.C:447
 ShowSPDRecPoints.C:448
 ShowSPDRecPoints.C:449
 ShowSPDRecPoints.C:450
 ShowSPDRecPoints.C:451
 ShowSPDRecPoints.C:452
 ShowSPDRecPoints.C:453
 ShowSPDRecPoints.C:454
 ShowSPDRecPoints.C:455
 ShowSPDRecPoints.C:456
 ShowSPDRecPoints.C:457
 ShowSPDRecPoints.C:458
 ShowSPDRecPoints.C:459
 ShowSPDRecPoints.C:460
 ShowSPDRecPoints.C:461
 ShowSPDRecPoints.C:462
 ShowSPDRecPoints.C:463
 ShowSPDRecPoints.C:464
 ShowSPDRecPoints.C:465
 ShowSPDRecPoints.C:466
 ShowSPDRecPoints.C:467
 ShowSPDRecPoints.C:468
 ShowSPDRecPoints.C:469
 ShowSPDRecPoints.C:470
 ShowSPDRecPoints.C:471
 ShowSPDRecPoints.C:472
 ShowSPDRecPoints.C:473
 ShowSPDRecPoints.C:474
 ShowSPDRecPoints.C:475
 ShowSPDRecPoints.C:476
 ShowSPDRecPoints.C:477
 ShowSPDRecPoints.C:478
 ShowSPDRecPoints.C:479
 ShowSPDRecPoints.C:480
 ShowSPDRecPoints.C:481
 ShowSPDRecPoints.C:482
 ShowSPDRecPoints.C:483
 ShowSPDRecPoints.C:484
 ShowSPDRecPoints.C:485
 ShowSPDRecPoints.C:486
 ShowSPDRecPoints.C:487
 ShowSPDRecPoints.C:488
 ShowSPDRecPoints.C:489
 ShowSPDRecPoints.C:490