LCOV - code coverage report
Current view: top level - TPC/TPCsim - AliTPCBuffer.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 41 71 57.7 %
Date: 2016-06-14 17:26:59 Functions: 7 12 58.3 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : /* $Id$ */
      16             : 
      17             : // Storing digits in a binary file
      18             : // according to the DDL mapping
      19             : // To be used in Alice Data Challenges
      20             : // This class is used by AliTPCDDL.C macro
      21             : // Author: D.Favretto
      22             : 
      23             : #include <Riostream.h>
      24             : #include <TObjArray.h>
      25             : #include "AliTPCBuffer.h"
      26             : #include "AliSimDigits.h"
      27             : 
      28             : //#include "TFile.h"
      29             : //#include "TTree.h"
      30             : 
      31             : using std::ios;
      32             : using std::ofstream;
      33             : using std::endl;
      34          12 : ClassImp(AliTPCBuffer)
      35             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
      36             : //___________________________________________________________
      37           0 :   AliTPCBuffer::AliTPCBuffer():TObject(),
      38           0 :     fVerbose(0),
      39           0 :     fNumberOfDigits(0),
      40           0 :     f()
      41           0 : {
      42             :   //
      43             :   // default
      44             :   //
      45           0 : }
      46             : //____________________________________________________________
      47           4 :   AliTPCBuffer::AliTPCBuffer(const char* fileName):TObject(),
      48           4 :     fVerbose(0),
      49           4 :     fNumberOfDigits(0),
      50           4 :     f()
      51          20 : {
      52             :   // Constructor
      53             : #ifndef __DECCXX
      54           4 :   f.open(fileName,ios::binary|ios::out);
      55             : #else
      56             :   f.open(fileName,ios::out);
      57             : #endif
      58             :   // fout=new TFile(fileName,"recreate");
      59             :   // tree=new TTree("tree","Values");
      60             : 
      61           4 :   remove("TPCdigits.txt");
      62           8 : }
      63             : 
      64             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
      65          24 : AliTPCBuffer::~AliTPCBuffer(){
      66             :   // The destructor closes the IO stream
      67           4 :   f.close();
      68             :   //delete tree;
      69             :   //delete fout;
      70          12 : }
      71             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
      72           0 : AliTPCBuffer::AliTPCBuffer(const AliTPCBuffer &source):TObject(source),
      73           0 :     fVerbose(0),
      74           0 :     fNumberOfDigits(0),
      75           0 :     f()
      76           0 : {
      77             :   // Copy Constructor
      78           0 :   this->fVerbose=source.fVerbose;
      79           0 :   return;
      80           0 : }
      81             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
      82             : AliTPCBuffer& AliTPCBuffer::operator=(const AliTPCBuffer &source){
      83             :   //Assigment operator
      84           0 :   if(this!=&source){
      85           0 :     this->fVerbose=source.fVerbose;
      86           0 :   }
      87           0 :   return *this;
      88             : }
      89             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
      90             : /*
      91             : 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){
      92             :   //flag=0 the whole row is written to the root file
      93             :   //flag=1 only value in the range [minPad,MaxPasd] are written to the root file
      94             :   //flag=2 complementary case of 1
      95             :   Int_t Pad;
      96             :   Int_t Dig;
      97             :   Int_t Time;
      98             :   tree->Branch("sec",&sec,"sec/I");
      99             :   tree->Branch("SubSec",&SubSec,"SubSec/I");
     100             :   tree->Branch("row",&row,"row/I");
     101             :   tree->Branch("Pad",&Pad,"Pad/I");
     102             :   tree->Branch("Dig",&Dig,"Dig/I");
     103             :   tree->Branch("Time",&Time,"Time/I");
     104             :   digrow->First();
     105             :   do{
     106             :     Dig=digrow->CurrentDigit(); //adc
     107             :     Time=digrow->CurrentRow(); //time
     108             :     Pad =digrow->CurrentColumn(); // pad 
     109             :     //    cout<<"Sec "<<sec<<" row "<<row<<" Pad "<<Pad<<" Dig "<<Dig<<" Time "<<Time<<endl; 
     110             :     if(Dig>eth){
     111             :       switch (flag){
     112             :       case 0:{
     113             :         tree->Fill();
     114             :         fNumberOfDigits++;
     115             :         break;
     116             :       }//end case 0
     117             :       case 1:{
     118             :           if((Pad>=minPad)&&(Pad<=maxPad)){
     119             :             tree->Fill();
     120             :             fNumberOfDigits++;
     121             :           }
     122             :         break;
     123             :       }//end case 1
     124             :       case 2:{
     125             :         if((Pad<minPad)||(Pad>maxPad)){
     126             :           tree->Fill();
     127             :           fNumberOfDigits++;
     128             :         }
     129             :         break;
     130             :       }//end case 2
     131             :       };//end switch
     132             :     }//end if
     133             :   }while (digrow->Next());
     134             :   tree->Write();
     135             :   return;
     136             : }
     137             : */
     138             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////
     139             : 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){
     140             :   //It writes TPC digits as par the flag specifications. Being called by AliTPCDDL.C
     141             :   //flag=0 the whole row is written into the file
     142             :   //flag=1 only value in the range [minPad,MaxPasd] are written into the file
     143             :   //flag=2 complementary case of 1
     144             : 
     145             :   struct DataPad{
     146             :     Int_t Sec;
     147             :     Int_t SubSec;
     148             :     Int_t Row;
     149             :     Int_t Pad;
     150             :     Int_t Dig;
     151             :     Int_t Time;
     152             :   };
     153       46656 :   DataPad data;
     154       23328 :   data.Sec=sec;
     155       23328 :   data.SubSec=SubSec;
     156       23328 :   data.Row=row;
     157       36532 :   if (!digrow->First()) return;
     158             :   Int_t padID=-1;
     159             :   Int_t ddlNumber=0;
     160       10124 :   ofstream ftxt;
     161       10124 :   if (fVerbose==2){
     162           0 :     ftxt.open("TPCdigits.txt",ios::app);
     163           0 :     if(sec<36)
     164           0 :       ddlNumber=sec*2+SubSec;
     165             :     else
     166           0 :       ddlNumber=72+(sec-36)*4+SubSec;
     167             :   }//end if
     168             :   do{
     169      938894 :     data.Dig=digrow->CurrentDigit();    //adc
     170      469447 :     data.Time=digrow->CurrentRow();     //time
     171      469447 :     data.Pad =digrow->CurrentColumn();  // pad 
     172      469447 :     if(fVerbose==2)
     173           0 :       if (padID!=data.Pad){
     174           0 :         ftxt<<"S:"<<data.Sec<<" DDL:"<<ddlNumber<<" R:"<<data.Row<<" P:"<<data.Pad<<endl;
     175           0 :         padID=data.Pad;
     176           0 :       }//end if
     177      469447 :     if(data.Dig>eth){
     178      514608 :       switch (flag){
     179             :       case 0:{
     180      379125 :         fNumberOfDigits++;
     181      379125 :         f.write((char*)(&data),sizeof(data));
     182      379125 :         if(fVerbose==2)
     183           0 :           ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
     184             :         break;
     185             :       }//end case 0
     186             :       case 1:{
     187       52331 :         if((data.Pad>=minPad)&&(data.Pad<=maxPad)){
     188        4852 :           f.write((char*)(&data),sizeof(data));
     189        4852 :           if(fVerbose==2)
     190           0 :             ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
     191        4852 :           fNumberOfDigits++;
     192        4852 :         }
     193             :         break;
     194             :       }//end case 1
     195             :       case 2:{
     196       52331 :         if((data.Pad<minPad)||(data.Pad>maxPad)){
     197       40309 :           f.write((char*)(&data),sizeof(data));
     198       40309 :           if(fVerbose==2)
     199           0 :             ftxt<<"A:"<<data.Dig<<" T:"<<data.Time<<endl; 
     200       40309 :           fNumberOfDigits++;
     201       40309 :         }
     202             :         break;
     203             :       }//end case 2
     204             :       };//end switch
     205             :     }//end if
     206      938894 :   }while (digrow->Next());
     207       10124 :   if (fVerbose==2)
     208           0 :     ftxt.close();
     209             :   return;
     210       33452 : }
     211             : //////////////////////////////////////////////////////////////////////////////////////////////////////////////

Generated by: LCOV version 1.11