3 // Author: Anders Vestbo <mailto:vestbo$fi.uib.no>
4 //*-- Copyright © ASV
10 #include "AliL3Compress.h"
11 #include "AliL3TrackArray.h"
12 #include "AliL3ModelTrack.h"
15 ClassImp(AliL3Compress)
17 AliL3Compress::AliL3Compress()
22 AliL3Compress::~AliL3Compress()
28 void AliL3Compress::WriteFile(AliL3TrackArray *tracks,Char_t *filename)
30 FILE *file = fopen(filename,"w");
31 Short_t ntracks = tracks->GetNTracks();
32 //cout<<"Writing "<<ntracks<<" tracks to file"<<endl;
35 AliL3ClusterModel *clusters=0;
36 AliL3TrackModel *model=0;
37 for(Int_t i=0; i<ntracks; i++)
39 AliL3ModelTrack *track = (AliL3ModelTrack*)tracks->GetCheckedTrack(i);
41 model = track->GetModel();
42 if(model->fNClusters==0) continue;
43 clusters = track->GetClusters();
44 //cout<<"Writing "<<(int)model->fNClusters<<" clusters"<<endl;
45 if(fwrite(model,sizeof(AliL3TrackModel),1,file)!=1) break;
46 //cout<<"Writing "<<(int)model->fNClusters<<" clusters to file"<<endl;
47 if(fwrite(clusters,model->fNClusters*sizeof(AliL3ClusterModel),1,file)!=1) break;
50 cout<<"Wrote "<<count<<" tracks "<<endl;
54 void AliL3Compress::ReadFile(Char_t *filename)
56 FILE *file = fopen(filename,"r");
60 fTracks = new AliL3TrackArray("AliL3ModelTrack");
64 AliL3ModelTrack *track = (AliL3ModelTrack*)fTracks->NextTrack();
66 AliL3TrackModel *model = track->GetModel();
67 AliL3ClusterModel *clusters = track->GetClusters();
68 if(fread(model,sizeof(AliL3TrackModel),1,file)!=1) break;
69 if(fread(clusters,(model->fNClusters)*sizeof(AliL3ClusterModel),1,file)!=1) break;
72 cout<<"Read "<<fTracks->GetNTracks()<<" tracks from file"<<endl;
76 void AliL3Compress::CompressFile(Char_t *infile,Char_t *outfile)
79 BIT_FILE *output = OpenOutputBitFile(outfile);
80 FILE *input = fopen(infile,"r");
82 AliL3TrackModel track;
83 AliL3ClusterModel cluster;
88 if(fread(&track,sizeof(AliL3TrackModel),1,input)!=1) break;
90 if(output->mask != 0x80) //Write the current byte to file.
92 if(putc(output->rack,output->file )!=output->rack)
93 cerr<<"AliL3Compress::ComressFile : Error writing to bitfile"<<endl;
96 fwrite(&track,sizeof(AliL3TrackModel),1,output->file);
97 for(Int_t i=0; i<track.fNClusters; i++)
99 if(fread(&cluster,sizeof(AliL3ClusterModel),1,input)!=1) break;
100 Int_t flag = (Int_t)cluster.fPresent;
101 OutputBit(output,flag);
103 temp = (Int_t)cluster.fDTime;
108 OutputBits(output,abs(temp),8);
109 temp = (Int_t)cluster.fDPad;
114 OutputBits(output,abs(temp),8);
115 temp = (Int_t)cluster.fDCharge;
116 OutputBits(output,temp,10);
118 //Short_t temp=(Short_t)cluster.fDTime;
119 // cout<<"flag "<<(int)flag<<" dtime "<<(int)cluster.fDTime<<" dpad "<<(int)cluster.fDPad<<" charge "<<cluster.fDCharge<<endl;
125 CloseOutputBitFile(output);
128 void AliL3Compress::ExpandFile(Char_t *infile,Char_t *outfile)
130 BIT_FILE *input = OpenInputBitFile(infile);
131 FILE *output = fopen(outfile,"w");
133 AliL3TrackModel trackmodel;
134 AliL3ClusterModel *clusters=0;
136 while(!feof(input->file))
139 if(fread(&trackmodel,sizeof(AliL3TrackModel),1,input->file)!=1) break;
140 fwrite(&trackmodel,sizeof(AliL3TrackModel),1,output);
141 input->mask=0x80;//make sure we read a new byte from file.
142 clusters = new AliL3ClusterModel[(trackmodel.fNClusters)];
143 for(Int_t i=0; i<trackmodel.fNClusters; i++)
146 temp = InputBit(input);
149 clusters[i].fPresent=kFALSE;
152 clusters[i].fPresent=kTRUE;
153 sign=InputBit(input);
154 temp = InputBits(input,8);
157 clusters[i].fDTime = temp;
158 sign=InputBit(input);
159 temp = InputBits(input,8);
162 clusters[i].fDPad = temp;
163 temp=InputBits(input,10);
164 clusters[i].fDCharge = temp;
166 fwrite(clusters,(trackmodel.fNClusters)*sizeof(AliL3ClusterModel),1,output);
170 CloseInputBitFile(input);