4 #include <TStopwatch.h>
11 #include "AliRawReader.h"
12 #include "AliRawReaderRoot.h"
14 #include "AliTPCRawStream.h"
15 #include "AliTPCRawStreamFast.h"
17 #include "AliAltroRawStream.h"
18 #include "AliAltroRawStreamFast.h"
20 #include "AliTPCCalPad.h"
21 #include "AliTPCCalROC.h"
24 .L testRawReaderFastTPC.C+
25 testRawReaderFastTPC()
29 AliTPCCalPad *testRawReaderFastTPC(const Char_t *file="/data.local/data/06000002142000.1A.root")
32 AliLog::SetGlobalDebugLevel(0) ;
33 AliLog::SetGlobalLogLevel(AliLog::kFatal);
34 // TString filename("/d/alice05/testtpc/raw/pulser/06000002142000.1A.root"); //nfs
35 // TString filename("root://lxfs35.gsi.de:1094//alice/testtpc/raw2006/06000001537001.001.root");
36 TString filename(file); //local
37 // on castor: /castor/cern.ch/alice/data/2006/09/18/15/06000002142000.1A.root
40 printf("File: %s\n", filename.Data());
42 AliRawReader *rawReader = new AliRawReaderRoot(filename);
43 if ( !rawReader ) return 0x0;
44 rawReader->RewindEvents();
46 AliTPCRawStreamFast *sf = new AliTPCRawStreamFast(rawReader);
47 AliTPCRawStream *s = new AliTPCRawStream(rawReader);
49 s->SetOldRCUFormat(kTRUE);
50 s->SetNoAltroMapping(kFALSE);
56 AliTPCCalPad *padOld = new AliTPCCalPad("old","old");
57 AliTPCCalPad *padNew = new AliTPCCalPad("new","new");
58 AliTPCCalPad *padSum = new AliTPCCalPad("sum","sum");
59 AliTPCCalPad *padhadd = new AliTPCCalPad("sum","sum");
61 for (Int_t sec=0; sec<72; sec++){
62 AliTPCCalROC *roc = padhadd->GetCalROC(sec);
63 for (UInt_t ch=0; ch<roc->GetNchannels(); ch++)
71 TCanvas *c1 = (TCanvas*)gROOT->FindObject("c1");
72 if ( !c1 ) c1 = new TCanvas("c1","c1");
77 while (rawReader->NextEvent()){
79 printf("\nevent: %d (%d)\n",ievent, ievent2);
83 // if ( ievent != 19 ) input=kTRUE;
85 timer1.Start();timer2.Start(kFALSE);
90 AliTPCCalROC *roc = padhadd->GetCalROC(s->GetSector());
92 //check if hwaddress gets overwritten
93 if ( roc->GetValue(s->GetRow(), s->GetPad()) == -1 )
94 roc->SetValue(s->GetRow(), s->GetPad(), s->GetHWAddress());
96 if ( roc->GetValue(s->GetRow(), s->GetPad()) != s->GetHWAddress()){
97 printf("#%.2d: %.2d.%.3d.%.2d,%.4d - old [%.4d] now[%.4d]",
98 ievent, s->GetSector(), s->GetRow(),s->GetPad(), s->GetTime(),
99 (Int_t)roc->GetValue(s->GetRow(), s->GetPad()), s->GetHWAddress());
103 Float_t val=padOld->GetCalROC(s->GetSector())->GetValue(s->GetRow(), s->GetPad());
104 padOld->GetCalROC(s->GetSector())->SetValue(s->GetRow(), s->GetPad(), s->GetSignal()+val);
106 /* if ( ievent == 19 && s->GetSector() == 25 && s->GetRow() == 00 && s->GetPad()==9 ){
107 printf("old | (%.2d.%.3d.%.2d.%.4d | %.3d ): %.3d\n",
108 s->GetSector(), s->GetRow(), s->GetPad(), s->GetTime(), s->GetHWAddress(), s->GetSignal());
109 sum1+=s->GetSignal();
116 timer1.Stop();timer2.Stop();
117 printf("old -- Time: %.4f (%.4f)\n", timer1.RealTime(), timer1.CpuTime());
122 timer1.Start();timer3.Start(kFALSE);
123 while ( sf->NextDDL() ){
124 while ( sf->NextChannel() ){
126 while ( sf->NextBunch() ){
127 for (UInt_t timebin=sf->GetStartTimeBin(); timebin<sf->GetEndTimeBin(); timebin++){
129 AliTPCCalROC *roc = padhadd->GetCalROC(sf->GetSector());
130 // if ( roc->GetValue(sf->GetRow(), sf->GetPad()) == -1 )
131 // roc->SetValue(sf->GetRow(), sf->GetPad(), sf->GetHWAddress());
133 if ( roc->GetValue(sf->GetRow(), sf->GetPad()) != sf->GetHWAddress()){
134 printf("#%.2d: %.2d.%.3d.%.2d,%.4d - old [%.4d] now[%.4d]",
135 ievent, sf->GetSector(), sf->GetRow(),sf->GetPad(), timebin+1,
136 (Int_t)roc->GetValue(sf->GetRow(), sf->GetPad()), sf->GetHWAddress());
139 Int_t sig = sf->GetSignals()[timebin-sf->GetStartTimeBin()];
140 if ( ievent == 19 && sf->GetSector() == 25 && sf->GetRow() == 00 && sf->GetPad()==9 ){
141 printf("new | (%.2d.%.3d.%.2d.%.4d | %.3d ): %.3d\n",
142 sf->GetSector(), sf->GetRow(), sf->GetPad(), timebin+1, sf->GetHWAddress(), sig );
146 signal+=sf->GetSignals()[timebin-sf->GetStartTimeBin()];
148 padNew->GetCalROC(sf->GetSector())->SetValue(sf->GetRow(),sf->GetPad(),signal);
152 timer1.Stop();timer3.Stop();
153 printf("new -- Time: %.4f (%.4f)\n", timer1.RealTime(), timer1.CpuTime());
155 printf("sum1: %d, sum2: %d, diff: %d\n",sum1,sum2,sum1-sum2);
157 AliTPCCalPad com(*padOld);
161 padOld->MakeHisto2D(1)->Draw("colz");
163 padNew->MakeHisto2D(1)->Draw("colz");
165 com.MakeHisto2D(1)->Draw("colz");
167 //loop over all sectors, rows, pads
168 for ( UInt_t iSec=0; iSec<72; iSec++ )
169 for ( UInt_t iRow=0; iRow<com.GetCalROC(iSec)->GetNrows(); iRow++ )
170 for ( UInt_t iPad=0; iPad<com.GetCalROC(iSec)->GetNPads(iRow); iPad++){
171 Float_t val = com.GetCalROC(iSec)->GetValue(iRow, iPad);
172 Float_t valo = padNew->GetCalROC(iSec)->GetValue(iRow, iPad);
173 Float_t valn = padOld->GetCalROC(iSec)->GetValue(iRow, iPad);
174 //check if values for old and new algorithm differ
176 if ( (Int_t)valo != (Int_t)valn ){
177 Float_t hadd = padhadd->GetCalROC(iSec)->GetValue(iRow,iPad);
178 printf("Event: %.2d | (%.2d.%.3d.%.2d | %f ): %.3f\n", ievent, iSec, iRow, iPad, hadd, val);
179 padSum->GetCalROC(iSec)->SetValue(iRow, iPad, padSum->GetCalROC(iSec)->GetValue(iRow, iPad)+1);
181 com.GetCalROC(iSec)->SetValue(iRow, iPad, 0);
182 padOld->GetCalROC(iSec)->SetValue(iRow, iPad, 0);
183 padNew->GetCalROC(iSec)->SetValue(iRow, iPad, 0);
188 padSum->MakeHisto2D(1)->Draw("colz");
196 TFile f("output.root","recreate");
201 printf("total old -- Time: %.4f (%.4f)\n", timer2.RealTime(), timer2.CpuTime());
202 printf("total new -- Time: %.4f (%.4f)\n", timer3.RealTime(), timer3.CpuTime());