X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FITSSDDINJda.cxx;h=59eb1b8b640e676fe528aa4a2b2ec9283813fee3;hb=97d1753003409fa2952f9a89a10f3e2a3c32f311;hp=43d556b71f73e67ee88fb46418f0e1001d8645d8;hpb=de075daec2fd6732b765586f5fb29a62b7843185;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/ITSSDDINJda.cxx b/ITS/ITSSDDINJda.cxx index 43d556b71f7..59eb1b8b640 100644 --- a/ITS/ITSSDDINJda.cxx +++ b/ITS/ITSSDDINJda.cxx @@ -1,9 +1,9 @@ /* - Contact: - prino@to.infn.it -- Link: - -- Run Type: - PHYSICS +- Link: - alien:///alice/data/2009/LHC09c_SDD/000079098/raw/09000079098024.10.root +- Run Type: - INJECTOR - DA Type: - LDC -- Number of events needed: +- Number of events needed: >20 - Input Files: - - Output Files: - SDDinj_ddl*c*_sid*.data - Trigger types used: @@ -42,17 +42,26 @@ extern "C" { #include #include #include +#include +#include +#include // AliRoot includes #include "AliRawReaderDate.h" #include "AliITSOnlineSDDInjectors.h" #include "AliITSRawStreamSDD.h" +#include "AliITSRawStreamSDDCompressed.h" + +#ifdef ALI_AMORE +#include +#endif + /* Main routine Arguments: list of DATE raw data files */ int main(int argc, char **argv) { - + // main - Arguments: list of DATE raw data files int status = 0; @@ -74,15 +83,23 @@ int main(int argc, char **argv) { } - Int_t maxNEvents=10; // maximum number of events to be analyzed + Int_t maxNEvents=20; // maximum number of events to be analyzed const Int_t kTotDDL=24; const Int_t kModPerDDL=12; const Int_t kSides=2; + Int_t amSamplFreq=40; + + gSystem->Exec("rm -f SDDinj_ddl*.data"); + gSystem->Exec("rm -f SDDinj_LDC.tar"); + + + AliITSOnlineSDDInjectors **injan=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides]; TH2F **histo=new TH2F*[kTotDDL*kModPerDDL*kSides]; Int_t nWrittenEv[kTotDDL*kModPerDDL*kSides]; Bool_t isFilled[kTotDDL*kModPerDDL*kSides]; - + Bool_t writtenoutput=kFALSE; + UInt_t timeSt=0; Char_t hisnam[20]; for(Int_t iddl=0; iddlmaxNEvents) break; /* use event - here, just write event id to result file */ eventT=event->eventType; @@ -154,18 +174,25 @@ int main(int argc, char **argv) { case CALIBRATION_EVENT: break; // uncomment this line for test raw data case PHYSICS_EVENT: // uncomment this line for test raw data - printf(" event number = %i \n",iev); - AliRawReader *rawReader = new AliRawReaderDate((void*)event); - - UInt_t timeSt=rawReader->GetTimestamp(); - //UInt_t timeSt=iev*5000+12; // fake timestamp for test - Int_t evtyp=0; - while(rawReader->ReadHeader()){ - const UInt_t *subev = rawReader->GetSubEventAttributes(); - if(subev[0]==0 && subev[1]==0 && subev[2]==0) evtyp=1; + printf(" Event number = %i ",iev); + ievInj++; + if(ievInj<=nEvToBeSkipped){ + printf(" -> SKIP\n"); + break; } - + printf(" -> Analyze\n"); + ievUsed++; + + AliRawReader *rawReader = new AliRawReaderDate((void*)event); + timeSt=rawReader->GetTimestamp(); rawReader->Reset(); + UChar_t cdhAttr=AliITSRawStreamSDD::ReadBlockAttributes(rawReader); + amSamplFreq=AliITSRawStreamSDD::ReadAMSamplFreqFromCDH(cdhAttr); + AliITSRawStream* s=AliITSRawStreamSDD::CreateRawStreamSDD(rawReader,cdhAttr); + if(!writtenoutput){ + printf("Use %s raw stream, sampling frequency %d MHz\n",s->ClassName(),amSamplFreq); + writtenoutput=kTRUE; + } for(Int_t iddl=0; iddlNext()){ Int_t iDDL=rawReader->GetDDLID(); - Int_t iCarlos=s.GetCarlosId(); - if(s.IsCompletedModule()) continue; - if(s.IsCompletedDDL()) continue; + Int_t iCarlos=s->GetCarlosId(); + if(s->IsCompletedModule()) continue; + if(s->IsCompletedDDL()) continue; if(iDDL>=0 && iDDLFill(s.GetCoord2(),s.GetCoord1(),s.GetSignal()); + Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s->GetChannel(); + histo[index]->Fill(s->GetCoord2(),s->GetCoord1(),s->GetSignal()); isFilled[index]=1; } } + delete s; delete rawReader; + for(Int_t iddl=0; iddlReset(); - injan[index]->AnalyzeEvent(histo[index]); - injan[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]); + if(amSamplFreq==20) injan[index]->Set20MHzConfig(); + else injan[index]->Set40MHzConfig(); + injan[index]->AddEvent(histo[index]); + // injan[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]); nWrittenEv[index]++; } } @@ -204,16 +233,30 @@ int main(int argc, char **argv) { /* free resources */ free(event); } + if(ievUsed>=maxNEvents) break; } - } - + + /* write report */ + TDatime time; + TObjString timeinfo(Form("%02d%02d%02d%02d%02d%02d",time.GetYear()-2000,time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond())); + printf("Run #%s, received %d calibration events, time %s\n",getenv("DATE_RUN_NUMBER"),ievUsed,timeinfo.GetString().Data()); + + /* report progress */ + daqDA_progressReport(90); + TObjArray* dspHistos=new TObjArray(); + + Char_t filnam[100],command[120]; for(Int_t iddl=0; iddl0){ + injan[index]->FitMeanDriftSpeedVsAnode(); + injan[index]->WriteToASCII(0,timeSt,0); + injan[index]->WriteInjectorStatusToASCII(); + dspHistos->AddLast(injan[index]->GetMeanDriftSpeedVsPadHisto()); sprintf(filnam,"SDDinj_ddl%02dc%02d_sid%d.data",iddl,imod,isid); sprintf(command,"tar -rf SDDinj_LDC.tar %s",filnam); gSystem->Exec(command); @@ -221,15 +264,26 @@ int main(int argc, char **argv) { } } } + status=daqDA_FES_storeFile("./SDDinj_LDC.tar","SDD_Injec"); - /* write report */ - printf("Run #%s, received %d injector events\n",getenv("DATE_RUN_NUMBER"),iev); - /* report progress */ - daqDA_progressReport(90); +#ifdef ALI_AMORE + amore::da::AmoreDA amoreDA(amore::da::AmoreDA::kSender); + Int_t statusamore =0; + statusamore += amoreDA.Send("TimeInfoInject",&timeinfo); + statusamore += amoreDA.Send("DriftSpeed",dspHistos); + if ( statusamore ) + printf("Warning: Failed to write Arrays in the AMORE database\n"); + else + printf("amoreDA.Send() OK\n"); +#else + printf("Warning: SDDINJ DA not compiled with AMORE support\n"); +#endif + TFile *fh=new TFile("SDDinjectHistos.root","RECREATE"); + dspHistos->Write(); + fh->Close(); - status=daqDA_FES_storeFile("./SDDinj_LDC.tar","SDD_Injec"); /* report progress */ daqDA_progressReport(100);