ROOT logo
// $Id$
// $MpId: testAnyPadIterators.C,v 1.17 2006/03/15 13:07:07 ivana Exp $
//
// Test macro for reading  sector, and iterate over it

#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 "AliMpMotifType.h"
#include "AliMpMotifMap.h"
#include "AliMpVMotif.h"
#include "AliMpVPadIterator.h"
#include "AliMpSectorPadIterator.h"
#include "AliMpMotifPositionPadIterator.h"
#include "AliMpConstants.h"
#include "AliMpEncodePair.h"

#include <Riostream.h>
#include <TCanvas.h>
#include <TMarker.h>
#include <TH2.h>

#endif

TCanvas* CreateTCanvas(const TString& name, const TString& title,
                       AliMq::Station12Type station, AliMp::PlaneType plane)
{
  TString newName(name);
  TString newTitle(title);
  TString unique = AliMq::Station12TypeName(station) + AliMp::PlaneTypeName(plane);
  newName += unique;
  newTitle += unique;
  return new TCanvas(newName.Data(), newTitle.Data());
}                     

class AliMpVPadIterator;
void MarkPads(AliMpVPadIterator& it,Int_t xmax,Int_t ymax,Bool_t print=kTRUE)
{
// This function works with pad iterator, no matter which kind of iterator
// it is. So it can be used for drawing all pad of the sector (AliMpSectorPadIterator)
// or all pad around a given pad (AliMpNeighboursPadIterator), as with pads
// of a given motif type (AliMpMotifTypePadIterator)

  Int_t num=0;

  for (it.First(); ! it.IsDone(); it.Next()){
    Long_t indices = it.CurrentItem().GetIndices();
    if (print) {
      cout<<"Iterator number "<< num << " at ";
      AliMp::PairPut(cout, indices) <<  endl;
    }  
    num++;
    TMarker* marker = new TMarker( (Double_t)AliMp::PairFirst(indices) /xmax,
                                   (Double_t)AliMp::PairSecond(indices)/ymax,
                                   2);
    marker->Draw();
  }
}

void testAnyPadIterators(AliMq::Station12Type station, AliMp::PlaneType plane)
{
  AliMpDataProcessor mp;
  AliMpDataMap* dataMap = mp.CreateDataMap("data");
  AliMpDataStreams dataStreams(dataMap);

  AliMpSectorReader r(dataStreams, station, plane);
  AliMpSector* sector = r.BuildSector();
  AliMpSectorSegmentation segmentation(sector);
    
  TCanvas* canv = CreateTCanvas("canv ", "", station, plane);
  canv->Divide(2,2);
  
  canv->cd(1);
  AliMpSectorPadIterator its(sector);
  MarkPads(its, 150, 250, kFALSE);
/*
  canv->cd(2);
  AliMpVMotif* motif = sector->FindMotif(30,3);
  if ( motif ) {
    AliMpMotifType* motifType = motif->GetMotifType();
    AliMpMotifTypePadIterator itm(motifType);
    MarkPads(itm,15,15);
    cout << "______________ MotifType "  << motifType->GetID() 
         << "__________________________" << endl;
  } 
  else 
    cout << "No motif found at given position..." << endl;
*/  
  canv->cd(4);
  Int_t motifPosId = 20 | AliMpConstants::ManuMask(plane); 
  if ( plane == AliMp::kNonBendingPlane ) motifPosId = 19;
  AliMpMotifPosition* motifPos = sector->GetMotifMap()->FindMotifPosition(motifPosId);
  if ( motifPos ){
    AliMpMotifPositionPadIterator itmp(motifPos);
    MarkPads(itmp,15,15);
    cout<<"_________________ MotifPosition _________________________"<<endl;
  }
}

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