ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* Permission to use, copy, modify and distribute this software and its   *
//* documentation strictly for non-commercial purposes is hereby granted   *
//* without fee, provided that the above copyright notice appears in all   *
//* copies and that both the copyright notice and this permission notice   *
//* appear in the supporting documentation. The authors make no claims     *
//* about the suitability of this software for any purpose. It is          *
//* provided "as is" without express or implied warranty.                  *
//**************************************************************************

/** 
 * @file   dumpTPCDigits.C
 * @author Matthias.Richter@ift.uib.no
 * @date   
 * @brief  Convert TPC digit info to ascii and print to stdout.
 *
 * The macro reads the simulated TPC digits from the RunLoader and
 * prints the digit info to stout.
 *
 * aliroot -b -q dumpTPCDigits.C | tee digits.log
 *
 * The macro asumes the data to be already simulated.
 */

#ifndef __CINT__
#include "TSystem.h"
#include "TTree.h"
#include "AliRunLoader.h"
#include "AliSimDigits.h"
#endif //__CINT__

int dumpDigits(AliRunLoader* runloader, int event);

int dumpTPCDigits()
{
  const char* galice_file="galice.root";
  TString param=galice_file;
  param+="?filetype=raw";
  TFile file(param);
  if (file.IsZombie()) {
    cerr << "can not open file " << galice_name << ", skipping test" << endl;
    return 0;
  }

  AliRunLoader* rl=AliRunLoader::Open(galice_file);
  if (!rl) {
    cerr << "can not open RunLoader" << endl;
    return -1;
  }

  gSystem->Load("libAliHLTTPC.so");

  dumpDigits(rl, 0);

  return 0;
}

int dumpDigits(AliRunLoader* runloader, int event)
{
  int iResult=0;
  AliLoader* tpcLoader = runloader->GetLoader("TPCLoader");
  if(!tpcLoader){
    cerr << "error: can not get TPC loader" << endl;
    return -1;
  }

  runloader->GetEvent(event);
  tpcLoader->LoadDigits();

  TTree *digitsTree = tpcLoader->TreeD();
  if(!digitsTree) {
    cerr << "error: can not get digits tree for event no " << event << endl;
    return -1;
  }

  AliSimDigits *digits;
  digitsTree->GetBranch("Segment")->SetAddress(&digits);

  AliTPCParam *tpcParam;
  runloader->CdGAFile();
  tpcParam = (AliTPCParam*)gFile->Get("75x40_100x60_150x60");
  if(!tpcParam){
    cerr << "error: can not retrieve parameters" << endl;
  }

  Int_t iPrintedSlice=-1;
  Int_t iPrintedPart=-1;

  for(Int_t n=0; n<digitsTree->GetEntries(); n++) {
    Int_t sector, row; // coordinates of the simualted data
    Int_t lslice,lrow; // local coordinates
    digitsTree->GetEvent(n);
    tpcParam->AdjustSectorRow(digits->GetID(),sector,row);
    if(!AliHLTTPCTransform::Sector2Slice(lslice,lrow,sector,row)){
      cerr << "error: conversion of coordinates sector/row " << sector << "/" << row << "failed" << endl;
      return -1;
    }

    Int_t part=AliHLTTPCTransform::GetPatch(lrow);

    if (iPrintedSlice!=lslice || iPrintedPart!=part) {
      iPrintedSlice=lslice;
      iPrintedPart=part;
      cout << "====================================================================" << endl;
      cout << "    Slice: " << iPrintedSlice << "   Partition: " << iPrintedPart << "   digit tree entry " << n << endl;
    }

    cout << "--------------------------------------------------------------------" << endl;
    cout << "Row: " << lrow << endl;

    digits->First();
    Int_t lasttime=-1;
    Int_t lastpad=-1;
    do {
      Int_t time=digits->CurrentRow();
      Int_t pad=digits->CurrentColumn();
      Int_t dig = digits->GetDigit(time,pad);
      if (lastpad!=pad) {
	if (lastpad!=-1) cout << "        -> " << lasttime << endl;
	lastpad=pad;
	cout << "Row: " << lrow << "  Pad: " << lastpad << endl;
	lasttime=-1;
      }
      if (lasttime!=time+1 && lasttime!=time-1 ) {
	if (lasttime!=-1) cout << "        -> " << lasttime << endl;
	cout << "                     Time " << time << ":  ";
      }
      lasttime=time;
      cout << "  " << dig;
    } while (digits->Next());
    if (lasttime) cout << "        -> " << lasttime << endl;
  }
}
 dumpTPCDigits.C:1
 dumpTPCDigits.C:2
 dumpTPCDigits.C:3
 dumpTPCDigits.C:4
 dumpTPCDigits.C:5
 dumpTPCDigits.C:6
 dumpTPCDigits.C:7
 dumpTPCDigits.C:8
 dumpTPCDigits.C:9
 dumpTPCDigits.C:10
 dumpTPCDigits.C:11
 dumpTPCDigits.C:12
 dumpTPCDigits.C:13
 dumpTPCDigits.C:14
 dumpTPCDigits.C:15
 dumpTPCDigits.C:16
 dumpTPCDigits.C:17
 dumpTPCDigits.C:18
 dumpTPCDigits.C:19
 dumpTPCDigits.C:20
 dumpTPCDigits.C:21
 dumpTPCDigits.C:22
 dumpTPCDigits.C:23
 dumpTPCDigits.C:24
 dumpTPCDigits.C:25
 dumpTPCDigits.C:26
 dumpTPCDigits.C:27
 dumpTPCDigits.C:28
 dumpTPCDigits.C:29
 dumpTPCDigits.C:30
 dumpTPCDigits.C:31
 dumpTPCDigits.C:32
 dumpTPCDigits.C:33
 dumpTPCDigits.C:34
 dumpTPCDigits.C:35
 dumpTPCDigits.C:36
 dumpTPCDigits.C:37
 dumpTPCDigits.C:38
 dumpTPCDigits.C:39
 dumpTPCDigits.C:40
 dumpTPCDigits.C:41
 dumpTPCDigits.C:42
 dumpTPCDigits.C:43
 dumpTPCDigits.C:44
 dumpTPCDigits.C:45
 dumpTPCDigits.C:46
 dumpTPCDigits.C:47
 dumpTPCDigits.C:48
 dumpTPCDigits.C:49
 dumpTPCDigits.C:50
 dumpTPCDigits.C:51
 dumpTPCDigits.C:52
 dumpTPCDigits.C:53
 dumpTPCDigits.C:54
 dumpTPCDigits.C:55
 dumpTPCDigits.C:56
 dumpTPCDigits.C:57
 dumpTPCDigits.C:58
 dumpTPCDigits.C:59
 dumpTPCDigits.C:60
 dumpTPCDigits.C:61
 dumpTPCDigits.C:62
 dumpTPCDigits.C:63
 dumpTPCDigits.C:64
 dumpTPCDigits.C:65
 dumpTPCDigits.C:66
 dumpTPCDigits.C:67
 dumpTPCDigits.C:68
 dumpTPCDigits.C:69
 dumpTPCDigits.C:70
 dumpTPCDigits.C:71
 dumpTPCDigits.C:72
 dumpTPCDigits.C:73
 dumpTPCDigits.C:74
 dumpTPCDigits.C:75
 dumpTPCDigits.C:76
 dumpTPCDigits.C:77
 dumpTPCDigits.C:78
 dumpTPCDigits.C:79
 dumpTPCDigits.C:80
 dumpTPCDigits.C:81
 dumpTPCDigits.C:82
 dumpTPCDigits.C:83
 dumpTPCDigits.C:84
 dumpTPCDigits.C:85
 dumpTPCDigits.C:86
 dumpTPCDigits.C:87
 dumpTPCDigits.C:88
 dumpTPCDigits.C:89
 dumpTPCDigits.C:90
 dumpTPCDigits.C:91
 dumpTPCDigits.C:92
 dumpTPCDigits.C:93
 dumpTPCDigits.C:94
 dumpTPCDigits.C:95
 dumpTPCDigits.C:96
 dumpTPCDigits.C:97
 dumpTPCDigits.C:98
 dumpTPCDigits.C:99
 dumpTPCDigits.C:100
 dumpTPCDigits.C:101
 dumpTPCDigits.C:102
 dumpTPCDigits.C:103
 dumpTPCDigits.C:104
 dumpTPCDigits.C:105
 dumpTPCDigits.C:106
 dumpTPCDigits.C:107
 dumpTPCDigits.C:108
 dumpTPCDigits.C:109
 dumpTPCDigits.C:110
 dumpTPCDigits.C:111
 dumpTPCDigits.C:112
 dumpTPCDigits.C:113
 dumpTPCDigits.C:114
 dumpTPCDigits.C:115
 dumpTPCDigits.C:116
 dumpTPCDigits.C:117
 dumpTPCDigits.C:118
 dumpTPCDigits.C:119
 dumpTPCDigits.C:120
 dumpTPCDigits.C:121
 dumpTPCDigits.C:122
 dumpTPCDigits.C:123
 dumpTPCDigits.C:124
 dumpTPCDigits.C:125
 dumpTPCDigits.C:126
 dumpTPCDigits.C:127
 dumpTPCDigits.C:128
 dumpTPCDigits.C:129
 dumpTPCDigits.C:130
 dumpTPCDigits.C:131
 dumpTPCDigits.C:132
 dumpTPCDigits.C:133
 dumpTPCDigits.C:134
 dumpTPCDigits.C:135
 dumpTPCDigits.C:136
 dumpTPCDigits.C:137
 dumpTPCDigits.C:138
 dumpTPCDigits.C:139
 dumpTPCDigits.C:140
 dumpTPCDigits.C:141
 dumpTPCDigits.C:142