ROOT logo
/**
 * >> Testing Macro to read FlatESDEvent from output file <<
 **
 * Primary Authors : Sergey Gorbunov, Jochen Thaeder, Chiara Zampolli
 *
 * Usage:
 *  aliroot -b -l -q LoadLibs.C ReadFlatESD.C++
 *
 **************************************************************************/

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliESDEvent.h"
#include "AliESD.h"
#include "AliESDfriend.h"
#include <TFile.h>
#include <TTree.h>
#include <TSystem.h>
#include "./AliFlatESDEvent.h"
#include "./AliFlatESDTrack.h"
#include "./AliFlatTPCCluster.h"
#include "./AliFlatExternalTrackParam.h"
#include "./AliFlatESDTrigger.h"
#include "./AliFlatESDV0.h"
#include "Riostream.h"
#endif   

void ReadFlatESD(const char* filename="outFlatESD.dat", Int_t verbose=0) {

  ifstream is(filename, std::ifstream::binary | std::ifstream::in);
  if (is){
    std::cout << "ifstream available"<<endl;
    is.seekg (0, is.end);
    int length = is.tellg();
    is.seekg (0, is.beg);
    std::cout << "length "<<length<<endl;
    char * buffer = new char [length];
    
    std::cout << "Reading " << length << " characters... ";
    
    is.read (buffer,length);
    if (is)
      std::cout << "all characters read successfully." << endl;
    else
      std::cout << "error: only " << is.gcount() << " could be read";
    is.close();
    
    // ...buffer contains the entire file...
    
    char *curr = buffer;
    char *endBuff = buffer+length;
    int iEvent = 0;
    
    while( curr < endBuff ){
      cout<<endl<<"Reading event "<<iEvent<<":"<<endl;
 //   Printf("curr: %p \t endBuff: %p \t diff %p ", curr, endBuff, endBuff-curr);
      AliFlatESDEvent *flatEsd = reinterpret_cast<AliFlatESDEvent *>(curr);
			flatEsd->Reinitialize();

      
cout<<"vtx SPD: "<<(Bool_t) flatEsd->GetFlatPrimaryVertexSPD()
	  <<" vtx tracks: "<<(Bool_t) flatEsd->GetFlatPrimaryVertexTracks()	
	  <<" ntracks: "<<flatEsd->GetNumberOfTracks()
	  <<" nV0's: "<<flatEsd->GetNumberOfV0s()
	  <<endl;

// compare tracks
if(verbose){/*
	static const int nExt = 4;
	  AliFlatESDTrack *track = const_cast<AliFlatESDTrack*> ( flatEsd->GetTracks() );
	  //new (track)AliFlatESDTrack(1);
    for (Int_t idxTrack = 0; idxTrack < flatEsd->GetNumberOfTracks() && track; ++idxTrack) { 

	cout<<"track nr "<<idxTrack<<endl;

		const AliFlatExternalTrackParam* ext[nExt] ={
			
				track->GetFlatTrackParamRefitted(),
				track->GetFlatTrackParamIp(),
				track->GetFlatTrackParamTPCInner(),
				track->GetFlatTrackParamOp(),
		
		};
	
     	//Printf("  TEST: FlatTrack1 %d > FlatExternalTrackParam1 > %p %p %p %p", idxTrack, exp11, exp21, exp31, exp41);
     	//Printf("  TEST: FlatTrack2 %d > FlatExternalTrackParam2 > %p %p %p %p", idxTrack, exp12, exp22, exp32, exp42);


	for(int iExt=0; iExt<nExt; ++iExt){
cout<<endl<<iExt<<endl;		
		if(!ext[iExt]){
		//	cout<<"DIFFERENCE!: ";
	 		cout<<" ext"<<iExt<<" not set"<<endl;
		}	


		cout<<" alpha"<<iExt<<" :"  << (ext[iExt] ? ext[iExt]->GetAlpha() : -9999) <<endl;
cout<<" GetX"<<iExt<<" :"  << (ext[iExt] ? ext[iExt]->GetX(): -9999) <<endl;
	cout<<" 1/pt"<<iExt<<" :"  <<  (ext[iExt] ? ext[iExt]->GetSigned1Pt(): -9999)  <<endl;
			

}	
      track = const_cast<AliFlatESDTrack*> (track->GetNextTrack());
	  
	  
	  }
	  
*/
	  
	  
	  // compare triggers
	  
	  /*
		cout<<"------------------\ntriggers\n------------------\n";
    AliFlatESDTrigger * trigger =const_cast<AliFlatESDTrigger*>(flatEsd->GetTriggerClasses() ) ;
    for( Int_t i = 0; i < flatEsd->GetNumberOfTriggerClasses() ; i++ ){
      cout<<"\nnew trigger\n";
			cout<<"AliFlatESDTrigger::GetSize"<<trigger->GetSize()<<endl;
			cout<<"AliFlatESDTrigger::GetTriggerIndex"<<trigger->GetTriggerIndex()<<endl;
			cout<< "AliFlatESDTrigger::GetTriggerClassName"<<trigger->GetTriggerClassName()<<endl;
			
      trigger= trigger->GetNextTriggerNonConst();
    }
	  **/
	  
	  // compare v0s

	  
	if(flatEsd->GetNumberOfV0s()  ){
		cout<<"------------------\nv0s\n------------------\n";
		
    AliFlatESDV0 * v0 = const_cast<AliFlatESDV0*>(flatEsd->GetV0s() ) ;
    for( Int_t i = 0; i < flatEsd->GetNumberOfV0s(); i++ ){
      cout<<"\nnew v0\n";
			cout<<"AliFlatESDV0::GetSize "<<v0->GetSize()<<endl; 
			cout<<"AliFlatESDV0::GetNegTrackID "<<v0->GetNegTrackID()<<endl ; 
			cout<<"AliFlatESDV0::GetPosTrackID "<<v0->GetPosTrackID()<<endl; 
			
      v0 = v0->GetNextV0NonConst();
    }
	}
	  
	  
	  
	  
	  
}

  //  Printf("curr: %p \t + %d = %p , diff:%p", curr, flatEsd->GetSize() ,curr+ flatEsd->GetSize(), endBuff-(curr+ flatEsd->GetSize())   );
      curr=curr+ flatEsd->GetSize();
      iEvent++;
    }


    delete[] buffer;
  }
  else {
    cout << "File "<<filename<<" could not be read" << endl;
  }
  return;
}
 ReadFlatESD.C:1
 ReadFlatESD.C:2
 ReadFlatESD.C:3
 ReadFlatESD.C:4
 ReadFlatESD.C:5
 ReadFlatESD.C:6
 ReadFlatESD.C:7
 ReadFlatESD.C:8
 ReadFlatESD.C:9
 ReadFlatESD.C:10
 ReadFlatESD.C:11
 ReadFlatESD.C:12
 ReadFlatESD.C:13
 ReadFlatESD.C:14
 ReadFlatESD.C:15
 ReadFlatESD.C:16
 ReadFlatESD.C:17
 ReadFlatESD.C:18
 ReadFlatESD.C:19
 ReadFlatESD.C:20
 ReadFlatESD.C:21
 ReadFlatESD.C:22
 ReadFlatESD.C:23
 ReadFlatESD.C:24
 ReadFlatESD.C:25
 ReadFlatESD.C:26
 ReadFlatESD.C:27
 ReadFlatESD.C:28
 ReadFlatESD.C:29
 ReadFlatESD.C:30
 ReadFlatESD.C:31
 ReadFlatESD.C:32
 ReadFlatESD.C:33
 ReadFlatESD.C:34
 ReadFlatESD.C:35
 ReadFlatESD.C:36
 ReadFlatESD.C:37
 ReadFlatESD.C:38
 ReadFlatESD.C:39
 ReadFlatESD.C:40
 ReadFlatESD.C:41
 ReadFlatESD.C:42
 ReadFlatESD.C:43
 ReadFlatESD.C:44
 ReadFlatESD.C:45
 ReadFlatESD.C:46
 ReadFlatESD.C:47
 ReadFlatESD.C:48
 ReadFlatESD.C:49
 ReadFlatESD.C:50
 ReadFlatESD.C:51
 ReadFlatESD.C:52
 ReadFlatESD.C:53
 ReadFlatESD.C:54
 ReadFlatESD.C:55
 ReadFlatESD.C:56
 ReadFlatESD.C:57
 ReadFlatESD.C:58
 ReadFlatESD.C:59
 ReadFlatESD.C:60
 ReadFlatESD.C:61
 ReadFlatESD.C:62
 ReadFlatESD.C:63
 ReadFlatESD.C:64
 ReadFlatESD.C:65
 ReadFlatESD.C:66
 ReadFlatESD.C:67
 ReadFlatESD.C:68
 ReadFlatESD.C:69
 ReadFlatESD.C:70
 ReadFlatESD.C:71
 ReadFlatESD.C:72
 ReadFlatESD.C:73
 ReadFlatESD.C:74
 ReadFlatESD.C:75
 ReadFlatESD.C:76
 ReadFlatESD.C:77
 ReadFlatESD.C:78
 ReadFlatESD.C:79
 ReadFlatESD.C:80
 ReadFlatESD.C:81
 ReadFlatESD.C:82
 ReadFlatESD.C:83
 ReadFlatESD.C:84
 ReadFlatESD.C:85
 ReadFlatESD.C:86
 ReadFlatESD.C:87
 ReadFlatESD.C:88
 ReadFlatESD.C:89
 ReadFlatESD.C:90
 ReadFlatESD.C:91
 ReadFlatESD.C:92
 ReadFlatESD.C:93
 ReadFlatESD.C:94
 ReadFlatESD.C:95
 ReadFlatESD.C:96
 ReadFlatESD.C:97
 ReadFlatESD.C:98
 ReadFlatESD.C:99
 ReadFlatESD.C:100
 ReadFlatESD.C:101
 ReadFlatESD.C:102
 ReadFlatESD.C:103
 ReadFlatESD.C:104
 ReadFlatESD.C:105
 ReadFlatESD.C:106
 ReadFlatESD.C:107
 ReadFlatESD.C:108
 ReadFlatESD.C:109
 ReadFlatESD.C:110
 ReadFlatESD.C:111
 ReadFlatESD.C:112
 ReadFlatESD.C:113
 ReadFlatESD.C:114
 ReadFlatESD.C:115
 ReadFlatESD.C:116
 ReadFlatESD.C:117
 ReadFlatESD.C:118
 ReadFlatESD.C:119
 ReadFlatESD.C:120
 ReadFlatESD.C:121
 ReadFlatESD.C:122
 ReadFlatESD.C:123
 ReadFlatESD.C:124
 ReadFlatESD.C:125
 ReadFlatESD.C:126
 ReadFlatESD.C:127
 ReadFlatESD.C:128
 ReadFlatESD.C:129
 ReadFlatESD.C:130
 ReadFlatESD.C:131
 ReadFlatESD.C:132
 ReadFlatESD.C:133
 ReadFlatESD.C:134
 ReadFlatESD.C:135
 ReadFlatESD.C:136
 ReadFlatESD.C:137
 ReadFlatESD.C:138
 ReadFlatESD.C:139
 ReadFlatESD.C:140
 ReadFlatESD.C:141
 ReadFlatESD.C:142
 ReadFlatESD.C:143
 ReadFlatESD.C:144
 ReadFlatESD.C:145
 ReadFlatESD.C:146
 ReadFlatESD.C:147
 ReadFlatESD.C:148
 ReadFlatESD.C:149
 ReadFlatESD.C:150
 ReadFlatESD.C:151
 ReadFlatESD.C:152
 ReadFlatESD.C:153
 ReadFlatESD.C:154
 ReadFlatESD.C:155
 ReadFlatESD.C:156
 ReadFlatESD.C:157
 ReadFlatESD.C:158
 ReadFlatESD.C:159
 ReadFlatESD.C:160
 ReadFlatESD.C:161