ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * 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.                  *
 **************************************************************************/
/* $Id$ */

// Storing digits in a binary file
// according to the DDL mapping
// To be used in Alice Data Challenges
// This class is used by AliTPCDDL.C macro
// Author: D.Favretto

#include <Riostream.h>
#include <TObjArray.h>
#include "AliTPCBuffer.h"
#include "AliSimDigits.h"

//#include "TFile.h"
//#include "TTree.h"

using std::ios;
using std::ofstream;
using std::endl;
ClassImp(AliTPCBuffer)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//___________________________________________________________
  AliTPCBuffer::AliTPCBuffer():TObject(),
    fVerbose(0),
    fNumberOfDigits(0),
    f()
{
  //
  // default
  //
}
//____________________________________________________________
  AliTPCBuffer::AliTPCBuffer(const char* fileName):TObject(),
    fVerbose(0),
    fNumberOfDigits(0),
    f()
{
  // Constructor
#ifndef __DECCXX
  f.open(fileName,ios::binary|ios::out);
#else
  f.open(fileName,ios::out);
#endif
  // fout=new TFile(fileName,"recreate");
  // tree=new TTree("tree","Values");

  remove("TPCdigits.txt");
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
AliTPCBuffer::~AliTPCBuffer(){
  // The destructor closes the IO stream
  f.close();
  //delete tree;
  //delete fout;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
AliTPCBuffer::AliTPCBuffer(const AliTPCBuffer &source):TObject(source),
    fVerbose(0),
    fNumberOfDigits(0),
    f()
{
  // Copy Constructor
  this->fVerbose=source.fVerbose;
  return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
AliTPCBuffer& AliTPCBuffer::operator=(const AliTPCBuffer &source){
  //Assigment operator
  if(this!=&source){
    this->fVerbose=source.fVerbose;
  }
  return *this;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
void AliTPCBuffer::WriteRow(Int_t eth,AliSimDigits *digrow,Int_t minPad,Int_t maxPad,Int_t flag,Int_t sec,Int_t SubSec,Int_t row){
  //flag=0 the whole row is written to the root file
  //flag=1 only value in the range [minPad,MaxPasd] are written to the root file
  //flag=2 complementary case of 1
  Int_t Pad;
  Int_t Dig;
  Int_t Time;
  tree->Branch("sec",&sec,"sec/I");
  tree->Branch("SubSec",&SubSec,"SubSec/I");
  tree->Branch("row",&row,"row/I");
  tree->Branch("Pad",&Pad,"Pad/I");
  tree->Branch("Dig",&Dig,"Dig/I");
  tree->Branch("Time",&Time,"Time/I");
  digrow->First();
  do{
    Dig=digrow->CurrentDigit(); //adc
    Time=digrow->CurrentRow(); //time
    Pad =digrow->CurrentColumn(); // pad 
    //    cout<<"Sec "<<sec<<" row "<<row<<" Pad "<<Pad<<" Dig "<<Dig<<" Time "<<Time<<endl; 
    if(Dig>eth){
      switch (flag){
      case 0:{
	tree->Fill();
	fNumberOfDigits++;
      	break;
      }//end case 0
      case 1:{
	  if((Pad>=minPad)&&(Pad<=maxPad)){
	    tree->Fill();
	    fNumberOfDigits++;
	  }
	break;
      }//end case 1
      case 2:{
	if((Pad<minPad)||(Pad>maxPad)){
	  tree->Fill();
	  fNumberOfDigits++;
	}
	break;
      }//end case 2
      };//end switch
    }//end if
  }while (digrow->Next());
  tree->Write();
  return;
}
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
void AliTPCBuffer::WriteRowBinary(Int_t eth,AliSimDigits *digrow,Int_t minPad,Int_t maxPad,Int_t flag,Int_t sec,Int_t SubSec,Int_t row){
  //It writes TPC digits as par the flag specifications. Being called by AliTPCDDL.C
  //flag=0 the whole row is written into the file
  //flag=1 only value in the range [minPad,MaxPasd] are written into the file
  //flag=2 complementary case of 1

  struct DataPad{
    Int_t Sec;
    Int_t SubSec;
    Int_t Row;
    Int_t Pad;
    Int_t Dig;
    Int_t Time;
  };
  DataPad data;
  data.Sec=sec;
  data.SubSec=SubSec;
  data.Row=row;
  if (!digrow->First()) return;
  Int_t padID=-1;
  Int_t ddlNumber=0;
  ofstream ftxt;
  if (fVerbose==2){
    ftxt.open("TPCdigits.txt",ios::app);
    if(sec<36)
      ddlNumber=sec*2+SubSec;
    else
      ddlNumber=72+(sec-36)*4+SubSec;
  }//end if
  do{
    data.Dig=digrow->CurrentDigit();    //adc
    data.Time=digrow->CurrentRow();     //time
    data.Pad =digrow->CurrentColumn();  // pad 
    if(fVerbose==2)
      if (padID!=data.Pad){
	ftxt<<"S:"<<data.Sec<<" DDL:"<<ddlNumber<<" R:"<<data.Row<<" P:"<<data.Pad<<endl;
	padID=data.Pad;
      }//end if
    if(data.Dig>eth){
      switch (flag){
      case 0:{
	fNumberOfDigits++;
	f.write((char*)(&data),sizeof(data));
	if(fVerbose==2)
	  ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
	break;
      }//end case 0
      case 1:{
	if((data.Pad>=minPad)&&(data.Pad<=maxPad)){
	  f.write((char*)(&data),sizeof(data));
	  if(fVerbose==2)
	    ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
	  fNumberOfDigits++;
	}
	break;
      }//end case 1
      case 2:{
	if((data.Pad<minPad)||(data.Pad>maxPad)){
	  f.write((char*)(&data),sizeof(data));
	  if(fVerbose==2)
	    ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
	  fNumberOfDigits++;
	}
	break;
      }//end case 2
      };//end switch
    }//end if
  }while (digrow->Next());
  if (fVerbose==2)
    ftxt.close();
  return;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
 AliTPCBuffer.cxx:1
 AliTPCBuffer.cxx:2
 AliTPCBuffer.cxx:3
 AliTPCBuffer.cxx:4
 AliTPCBuffer.cxx:5
 AliTPCBuffer.cxx:6
 AliTPCBuffer.cxx:7
 AliTPCBuffer.cxx:8
 AliTPCBuffer.cxx:9
 AliTPCBuffer.cxx:10
 AliTPCBuffer.cxx:11
 AliTPCBuffer.cxx:12
 AliTPCBuffer.cxx:13
 AliTPCBuffer.cxx:14
 AliTPCBuffer.cxx:15
 AliTPCBuffer.cxx:16
 AliTPCBuffer.cxx:17
 AliTPCBuffer.cxx:18
 AliTPCBuffer.cxx:19
 AliTPCBuffer.cxx:20
 AliTPCBuffer.cxx:21
 AliTPCBuffer.cxx:22
 AliTPCBuffer.cxx:23
 AliTPCBuffer.cxx:24
 AliTPCBuffer.cxx:25
 AliTPCBuffer.cxx:26
 AliTPCBuffer.cxx:27
 AliTPCBuffer.cxx:28
 AliTPCBuffer.cxx:29
 AliTPCBuffer.cxx:30
 AliTPCBuffer.cxx:31
 AliTPCBuffer.cxx:32
 AliTPCBuffer.cxx:33
 AliTPCBuffer.cxx:34
 AliTPCBuffer.cxx:35
 AliTPCBuffer.cxx:36
 AliTPCBuffer.cxx:37
 AliTPCBuffer.cxx:38
 AliTPCBuffer.cxx:39
 AliTPCBuffer.cxx:40
 AliTPCBuffer.cxx:41
 AliTPCBuffer.cxx:42
 AliTPCBuffer.cxx:43
 AliTPCBuffer.cxx:44
 AliTPCBuffer.cxx:45
 AliTPCBuffer.cxx:46
 AliTPCBuffer.cxx:47
 AliTPCBuffer.cxx:48
 AliTPCBuffer.cxx:49
 AliTPCBuffer.cxx:50
 AliTPCBuffer.cxx:51
 AliTPCBuffer.cxx:52
 AliTPCBuffer.cxx:53
 AliTPCBuffer.cxx:54
 AliTPCBuffer.cxx:55
 AliTPCBuffer.cxx:56
 AliTPCBuffer.cxx:57
 AliTPCBuffer.cxx:58
 AliTPCBuffer.cxx:59
 AliTPCBuffer.cxx:60
 AliTPCBuffer.cxx:61
 AliTPCBuffer.cxx:62
 AliTPCBuffer.cxx:63
 AliTPCBuffer.cxx:64
 AliTPCBuffer.cxx:65
 AliTPCBuffer.cxx:66
 AliTPCBuffer.cxx:67
 AliTPCBuffer.cxx:68
 AliTPCBuffer.cxx:69
 AliTPCBuffer.cxx:70
 AliTPCBuffer.cxx:71
 AliTPCBuffer.cxx:72
 AliTPCBuffer.cxx:73
 AliTPCBuffer.cxx:74
 AliTPCBuffer.cxx:75
 AliTPCBuffer.cxx:76
 AliTPCBuffer.cxx:77
 AliTPCBuffer.cxx:78
 AliTPCBuffer.cxx:79
 AliTPCBuffer.cxx:80
 AliTPCBuffer.cxx:81
 AliTPCBuffer.cxx:82
 AliTPCBuffer.cxx:83
 AliTPCBuffer.cxx:84
 AliTPCBuffer.cxx:85
 AliTPCBuffer.cxx:86
 AliTPCBuffer.cxx:87
 AliTPCBuffer.cxx:88
 AliTPCBuffer.cxx:89
 AliTPCBuffer.cxx:90
 AliTPCBuffer.cxx:91
 AliTPCBuffer.cxx:92
 AliTPCBuffer.cxx:93
 AliTPCBuffer.cxx:94
 AliTPCBuffer.cxx:95
 AliTPCBuffer.cxx:96
 AliTPCBuffer.cxx:97
 AliTPCBuffer.cxx:98
 AliTPCBuffer.cxx:99
 AliTPCBuffer.cxx:100
 AliTPCBuffer.cxx:101
 AliTPCBuffer.cxx:102
 AliTPCBuffer.cxx:103
 AliTPCBuffer.cxx:104
 AliTPCBuffer.cxx:105
 AliTPCBuffer.cxx:106
 AliTPCBuffer.cxx:107
 AliTPCBuffer.cxx:108
 AliTPCBuffer.cxx:109
 AliTPCBuffer.cxx:110
 AliTPCBuffer.cxx:111
 AliTPCBuffer.cxx:112
 AliTPCBuffer.cxx:113
 AliTPCBuffer.cxx:114
 AliTPCBuffer.cxx:115
 AliTPCBuffer.cxx:116
 AliTPCBuffer.cxx:117
 AliTPCBuffer.cxx:118
 AliTPCBuffer.cxx:119
 AliTPCBuffer.cxx:120
 AliTPCBuffer.cxx:121
 AliTPCBuffer.cxx:122
 AliTPCBuffer.cxx:123
 AliTPCBuffer.cxx:124
 AliTPCBuffer.cxx:125
 AliTPCBuffer.cxx:126
 AliTPCBuffer.cxx:127
 AliTPCBuffer.cxx:128
 AliTPCBuffer.cxx:129
 AliTPCBuffer.cxx:130
 AliTPCBuffer.cxx:131
 AliTPCBuffer.cxx:132
 AliTPCBuffer.cxx:133
 AliTPCBuffer.cxx:134
 AliTPCBuffer.cxx:135
 AliTPCBuffer.cxx:136
 AliTPCBuffer.cxx:137
 AliTPCBuffer.cxx:138
 AliTPCBuffer.cxx:139
 AliTPCBuffer.cxx:140
 AliTPCBuffer.cxx:141
 AliTPCBuffer.cxx:142
 AliTPCBuffer.cxx:143
 AliTPCBuffer.cxx:144
 AliTPCBuffer.cxx:145
 AliTPCBuffer.cxx:146
 AliTPCBuffer.cxx:147
 AliTPCBuffer.cxx:148
 AliTPCBuffer.cxx:149
 AliTPCBuffer.cxx:150
 AliTPCBuffer.cxx:151
 AliTPCBuffer.cxx:152
 AliTPCBuffer.cxx:153
 AliTPCBuffer.cxx:154
 AliTPCBuffer.cxx:155
 AliTPCBuffer.cxx:156
 AliTPCBuffer.cxx:157
 AliTPCBuffer.cxx:158
 AliTPCBuffer.cxx:159
 AliTPCBuffer.cxx:160
 AliTPCBuffer.cxx:161
 AliTPCBuffer.cxx:162
 AliTPCBuffer.cxx:163
 AliTPCBuffer.cxx:164
 AliTPCBuffer.cxx:165
 AliTPCBuffer.cxx:166
 AliTPCBuffer.cxx:167
 AliTPCBuffer.cxx:168
 AliTPCBuffer.cxx:169
 AliTPCBuffer.cxx:170
 AliTPCBuffer.cxx:171
 AliTPCBuffer.cxx:172
 AliTPCBuffer.cxx:173
 AliTPCBuffer.cxx:174
 AliTPCBuffer.cxx:175
 AliTPCBuffer.cxx:176
 AliTPCBuffer.cxx:177
 AliTPCBuffer.cxx:178
 AliTPCBuffer.cxx:179
 AliTPCBuffer.cxx:180
 AliTPCBuffer.cxx:181
 AliTPCBuffer.cxx:182
 AliTPCBuffer.cxx:183
 AliTPCBuffer.cxx:184
 AliTPCBuffer.cxx:185
 AliTPCBuffer.cxx:186
 AliTPCBuffer.cxx:187
 AliTPCBuffer.cxx:188
 AliTPCBuffer.cxx:189
 AliTPCBuffer.cxx:190
 AliTPCBuffer.cxx:191
 AliTPCBuffer.cxx:192
 AliTPCBuffer.cxx:193
 AliTPCBuffer.cxx:194
 AliTPCBuffer.cxx:195
 AliTPCBuffer.cxx:196
 AliTPCBuffer.cxx:197
 AliTPCBuffer.cxx:198
 AliTPCBuffer.cxx:199
 AliTPCBuffer.cxx:200
 AliTPCBuffer.cxx:201
 AliTPCBuffer.cxx:202
 AliTPCBuffer.cxx:203
 AliTPCBuffer.cxx:204
 AliTPCBuffer.cxx:205
 AliTPCBuffer.cxx:206
 AliTPCBuffer.cxx:207
 AliTPCBuffer.cxx:208
 AliTPCBuffer.cxx:209
 AliTPCBuffer.cxx:210
 AliTPCBuffer.cxx:211