ROOT logo
// $Id$
// $MpId: testExistingPads2.C,v 1.3 2005/08/24 08:53:27 ivana Exp $
//
// Extended testExistingPads macro for testing which pad is seen as 
// "existing" by AliMpSectorSegmentation or AliMpFastSegmentation.
// The loop over pads is performed in two ways:
// 1) via sector area pad iterator
// 2) via indices
// To run macro:
// root [0] .L testExistingPads2.C+
// root [1] testExistingPads2();


#if !defined(__CINT__) || defined(__MAKECINT__)

#include "AliMpStation12Type.h"
#include "AliMpPlaneType.h"
#include "AliMpDataProcessor.h"
#include "AliMpDataMap.h"
#include "AliMpDataStreams.h"
#include "AliMpSector.h"
#include "AliMpSectorReader.h"
#include "AliMpSectorSegmentation.h"
#include "AliMpFastSegmentation.h"
#include "AliMpArea.h"
#include "AliMpVPadIterator.h"

#include <Riostream.h>
#include <TString.h>

#endif

void testExistingPads2(AliMq::Station12Type station, AliMp::PlaneType plane,
                       Bool_t useFastSegmentation = kTRUE) 
{
  // Read data
  AliMpDataProcessor mp;
  AliMpDataMap* dataMap = mp.CreateDataMap("data");
  AliMpDataStreams dataStreams(dataMap);
  AliMpSectorReader r(dataStreams, station, plane);
  AliMpSector* sector = r.BuildSector();

  // Segmentation
  AliMpVSegmentation* segmentation;
  if ( useFastSegmentation)
    segmentation = new AliMpFastSegmentation(new AliMpSectorSegmentation(sector));
  else
    segmentation = new AliMpSectorSegmentation(sector);
    
  // Output files 
  TString outName = "testExistingPads.";
  outName += AliMq::Station12TypeName(station);
  outName += AliMp::PlaneTypeName(plane);
  TString out1Name = outName + ".ixiy.out";
  TString out2Name = outName + ".iter.out";

  ofstream out1(out1Name.Data(), ios::out);
  ofstream out2(out2Name.Data(), ios::out);
  
  // First loop over indices
  cout << "Iterating via indices ..." << endl;
  Int_t counter1 = 0;
  if ( sector->GetDirection() == AliMp::kX )
    for (Int_t i=1; i<segmentation->MaxPadIndexX()+1; i++) {
      for (Int_t j=1; j<segmentation->MaxPadIndexY()+1; j++) {
        if ( segmentation->HasPadByIndices(i,j) ) 
          out1 << std::setw(4) << ++counter1 << "  "
	       << segmentation->PadByIndices(i,j) << endl;;
      }
    }

  if ( sector->GetDirection() == AliMp::kY )
    for (Int_t j=1; j<segmentation->MaxPadIndexY()+1; j++) {
      for (Int_t i=1; i<segmentation->MaxPadIndexX()+1; i++) {
        if ( segmentation->HasPadByIndices(i,j) ) 
          out1 << std::setw(4) << ++counter1 << "  "
	       << segmentation->PadByIndices(i,j) << endl;;
      }
    }
  
  // Second loop via pad area iterator
  cout << "Iterating via iterator ..." << endl;
  AliMpArea area(60.,60.,60.,60.);
  AliMpVPadIterator* it = segmentation->CreateIterator(area);
  Int_t counter2 = 0;
  for (it->First(); ! it->IsDone(); it->Next()){
   
    out2 << std::setw(4) << ++counter2 << "  "
	 << it->CurrentItem() << endl;
  }  
  
  delete segmentation;
}

void testSt12ExistingPads2()
{
  AliMq::Station12Type  station[2] = { AliMq::kStation1, AliMq::kStation2 }; 
  AliMp::PlaneType      plane[2]   = { AliMp::kBendingPlane, AliMp::kNonBendingPlane };
  
  for ( Int_t is = 0; is < 2; is++ ) {
    for ( Int_t ip = 0; ip < 2; ip++ ) {
    
      cout << "Running testExistingPads2 for " 
           << AliMq::Station12TypeName(station[is]) << "  "
           << AliMp::PlaneTypeName(plane[ip])  << " ... " << endl;
       
      testExistingPads2(station[is], plane[ip]);
    
      cout << "... end running " << endl << endl;
    }  
  }   
}  
  
 testSt12ExistingPads2.C:1
 testSt12ExistingPads2.C:2
 testSt12ExistingPads2.C:3
 testSt12ExistingPads2.C:4
 testSt12ExistingPads2.C:5
 testSt12ExistingPads2.C:6
 testSt12ExistingPads2.C:7
 testSt12ExistingPads2.C:8
 testSt12ExistingPads2.C:9
 testSt12ExistingPads2.C:10
 testSt12ExistingPads2.C:11
 testSt12ExistingPads2.C:12
 testSt12ExistingPads2.C:13
 testSt12ExistingPads2.C:14
 testSt12ExistingPads2.C:15
 testSt12ExistingPads2.C:16
 testSt12ExistingPads2.C:17
 testSt12ExistingPads2.C:18
 testSt12ExistingPads2.C:19
 testSt12ExistingPads2.C:20
 testSt12ExistingPads2.C:21
 testSt12ExistingPads2.C:22
 testSt12ExistingPads2.C:23
 testSt12ExistingPads2.C:24
 testSt12ExistingPads2.C:25
 testSt12ExistingPads2.C:26
 testSt12ExistingPads2.C:27
 testSt12ExistingPads2.C:28
 testSt12ExistingPads2.C:29
 testSt12ExistingPads2.C:30
 testSt12ExistingPads2.C:31
 testSt12ExistingPads2.C:32
 testSt12ExistingPads2.C:33
 testSt12ExistingPads2.C:34
 testSt12ExistingPads2.C:35
 testSt12ExistingPads2.C:36
 testSt12ExistingPads2.C:37
 testSt12ExistingPads2.C:38
 testSt12ExistingPads2.C:39
 testSt12ExistingPads2.C:40
 testSt12ExistingPads2.C:41
 testSt12ExistingPads2.C:42
 testSt12ExistingPads2.C:43
 testSt12ExistingPads2.C:44
 testSt12ExistingPads2.C:45
 testSt12ExistingPads2.C:46
 testSt12ExistingPads2.C:47
 testSt12ExistingPads2.C:48
 testSt12ExistingPads2.C:49
 testSt12ExistingPads2.C:50
 testSt12ExistingPads2.C:51
 testSt12ExistingPads2.C:52
 testSt12ExistingPads2.C:53
 testSt12ExistingPads2.C:54
 testSt12ExistingPads2.C:55
 testSt12ExistingPads2.C:56
 testSt12ExistingPads2.C:57
 testSt12ExistingPads2.C:58
 testSt12ExistingPads2.C:59
 testSt12ExistingPads2.C:60
 testSt12ExistingPads2.C:61
 testSt12ExistingPads2.C:62
 testSt12ExistingPads2.C:63
 testSt12ExistingPads2.C:64
 testSt12ExistingPads2.C:65
 testSt12ExistingPads2.C:66
 testSt12ExistingPads2.C:67
 testSt12ExistingPads2.C:68
 testSt12ExistingPads2.C:69
 testSt12ExistingPads2.C:70
 testSt12ExistingPads2.C:71
 testSt12ExistingPads2.C:72
 testSt12ExistingPads2.C:73
 testSt12ExistingPads2.C:74
 testSt12ExistingPads2.C:75
 testSt12ExistingPads2.C:76
 testSt12ExistingPads2.C:77
 testSt12ExistingPads2.C:78
 testSt12ExistingPads2.C:79
 testSt12ExistingPads2.C:80
 testSt12ExistingPads2.C:81
 testSt12ExistingPads2.C:82
 testSt12ExistingPads2.C:83
 testSt12ExistingPads2.C:84
 testSt12ExistingPads2.C:85
 testSt12ExistingPads2.C:86
 testSt12ExistingPads2.C:87
 testSt12ExistingPads2.C:88
 testSt12ExistingPads2.C:89
 testSt12ExistingPads2.C:90
 testSt12ExistingPads2.C:91
 testSt12ExistingPads2.C:92
 testSt12ExistingPads2.C:93
 testSt12ExistingPads2.C:94
 testSt12ExistingPads2.C:95
 testSt12ExistingPads2.C:96
 testSt12ExistingPads2.C:97
 testSt12ExistingPads2.C:98
 testSt12ExistingPads2.C:99
 testSt12ExistingPads2.C:100
 testSt12ExistingPads2.C:101
 testSt12ExistingPads2.C:102
 testSt12ExistingPads2.C:103
 testSt12ExistingPads2.C:104
 testSt12ExistingPads2.C:105
 testSt12ExistingPads2.C:106
 testSt12ExistingPads2.C:107
 testSt12ExistingPads2.C:108
 testSt12ExistingPads2.C:109
 testSt12ExistingPads2.C:110
 testSt12ExistingPads2.C:111
 testSt12ExistingPads2.C:112
 testSt12ExistingPads2.C:113
 testSt12ExistingPads2.C:114