]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Read data format and sampling frequency from CDH in SDD DAs (F. Prino)
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Jul 2009 17:23:07 +0000 (17:23 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Jul 2009 17:23:07 +0000 (17:23 +0000)
ITS/AliITSRawStreamSDD.h
ITS/AliITSRawStreamSDDCompressed.cxx
ITS/ITSSDDBASda.cxx
ITS/ITSSDDGAINda.cxx
ITS/ITSSDDINJda.cxx

index d8e30257e908ad8256175bc6443898f339f8de2a..d9ec48d8a5855a961b66492821bf9486eeb470d6 100644 (file)
@@ -25,6 +25,10 @@ class AliITSRawStreamSDD: public AliITSRawStream {
     virtual ~AliITSRawStreamSDD();
 
     static UChar_t ReadBlockAttributes(AliRawReader* rawReader);
+    static UInt_t  ReadAMSamplFreqFromCDH(UChar_t cdhAttr){
+      if(cdhAttr&0x10) return 40;
+      else return 20;
+    }
     static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader, UChar_t attributes);
     static AliITSRawStream* CreateRawStreamSDD(AliRawReader* rawReader);
 
index 00953c6f0a998b2708bb8c9f55268d1d9d9601ac..8cb84dbe0819ba048f3677ee59595a6559b02ffe 100644 (file)
@@ -188,7 +188,7 @@ Bool_t AliITSRawStreamSDDCompressed::Next()
       Int_t sig8bit;
       if(fADCEncoded){
        UInt_t code=fData&maskCode;
-       if (code < 2 || code > 7) AliError("Wrong ADC code value");
+       if (code < 2 || code > 7) AliError(Form("Wrong ADC code value %d",code));
        UInt_t adcmask=(1<<code)-1;
        sig8bit=((fData&(adcmask<<3))>>3) + (1<<code);
       }else{      
index f6325098485040108e484e07f7798012f98b656a..1107b5755e98c0c76ad55f93658abadd995a0bde 100644 (file)
@@ -81,29 +81,16 @@ int main(int argc, char **argv) {
   const Int_t kTotDDL=24;
   const Int_t kModPerDDL=12;
   const Int_t kSides=2;
-  Int_t adcSamplFreq=40;
-  Bool_t readfeeconf=kFALSE;
-  Int_t dataformat=1;
+  UInt_t amSamplFreq=40;
+
   gSystem->Exec("rm -f SDDbase_*.data");
   gSystem->Exec("rm -f  SDDbase_step2_LDC.tar");
-  if(gSystem->Getenv("DAQ_DETDB_LOCAL")!=NULL){
-    const char* dir=gSystem->Getenv("DAQ_DETDB_LOCAL");    
-    TString filnam=Form("%s/fee.conf",dir); 
-    FILE* feefil=fopen(filnam.Data(),"r"); 
-    if(feefil){
-      fscanf(feefil,"%d \n",&adcSamplFreq);
-      fscanf(feefil,"%d \n",&dataformat);
-      fclose(feefil);
-      readfeeconf=kTRUE;
-      printf("ADC sampling frequency = %d MHz dataformat code =%d \n",adcSamplFreq,dataformat);
-    }
-  }
-  if(!readfeeconf) printf("File fee.conf not found, sampling frequency set to 40 MHz and data format to 1\n");
   
   AliITSOnlineSDDBase **base=new AliITSOnlineSDDBase*[kTotDDL*kModPerDDL*kSides];
   AliITSOnlineSDDCMN **corr=new AliITSOnlineSDDCMN*[kTotDDL*kModPerDDL*kSides];
   TH2F **histo=new TH2F*[kTotDDL*kModPerDDL*kSides];
   Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
+  Bool_t writtenoutput=kFALSE;
 
   Char_t hisnam[20];
   for(Int_t iddl=0; iddl<kTotDDL;iddl++){
@@ -111,8 +98,6 @@ int main(int argc, char **argv) {
       for(Int_t isid=0;isid<kSides;isid++){
        Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
        base[index]=new AliITSOnlineSDDBase(iddl,imod,isid);
-       if(adcSamplFreq==20) base[index]->SetLastGoodTB(126);
-       else base[index]->SetLastGoodTB(254);
        sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
        histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
        isFilled[index]=0;
@@ -134,8 +119,6 @@ int main(int argc, char **argv) {
          for(Int_t isid=0;isid<kSides;isid++){
            Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
            corr[index]=new AliITSOnlineSDDCMN(iddl,imod,isid);
-           if(adcSamplFreq==20) corr[index]->SetLastGoodTB(126);
-           else corr[index]->SetLastGoodTB(254);
            isFilled[index]=0;
          }
        }
@@ -199,15 +182,16 @@ int main(int argc, char **argv) {
          printf(" event number = %i \n",iev);
          ievPed++; 
          AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-
-
-         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; 
+         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;
          }
 
-         rawReader->Reset();
+
          for(Int_t iddl=0; iddl<kTotDDL;iddl++){
            for(Int_t imod=0; imod<kModPerDDL;imod++){
              for(Int_t isid=0;isid<kSides;isid++){
@@ -216,13 +200,6 @@ int main(int argc, char **argv) {
              }
            }
          }
-         AliITSRawStream* s;
-         if(dataformat==0){
-           s=new AliITSRawStreamSDD(rawReader);
-         }else{
-           s=new AliITSRawStreamSDDCompressed(rawReader);
-           if(dataformat==1) s->SetADCEncoded(kTRUE);
-         }
 
          while(s->Next()){
            Int_t iDDL=rawReader->GetDDLID();
@@ -241,8 +218,16 @@ int main(int argc, char **argv) {
            for(Int_t imod=0; imod<kModPerDDL;imod++){
              for(Int_t isid=0;isid<kSides;isid++){
                Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
-               if(iStep==0) base[index]->AddEvent(histo[index]);
-               if(iStep==1) corr[index]->AddEvent(histo[index]);
+               if(iStep==0){
+                 if(amSamplFreq==20) base[index]->SetLastGoodTB(126);
+                 else base[index]->SetLastGoodTB(254);
+                 base[index]->AddEvent(histo[index]);
+               }
+               if(iStep==1){
+                 if(amSamplFreq==20) corr[index]->SetLastGoodTB(126);
+                 else corr[index]->SetLastGoodTB(254);
+                 corr[index]->AddEvent(histo[index]);
+               }
              }
            }
          }
index 36cb008136abd84f20292d99d103d6d2d2179af3..428af6181445fa4aab0c36042d5a9ae4874aecdd 100644 (file)
@@ -79,37 +79,21 @@ int main(int argc, char **argv) {
   const Int_t kTotDDL=24;
   const Int_t kModPerDDL=12;
   const Int_t kSides=2;
-  Int_t adcSamplFreq=40;
-  Bool_t readfeeconf=kFALSE;
-  Int_t dataformat=1;
+  UInt_t amSamplFreq=40;
+  UChar_t cdhAttr=0;
+
   gSystem->Exec("rm -f  SDDbase_LDC.tar");
-   if(gSystem->Getenv("DAQ_DETDB_LOCAL")!=NULL){
-    const char* dir=gSystem->Getenv("DAQ_DETDB_LOCAL");    
-    TString filnam=Form("%s/fee.conf",dir); 
-    FILE* feefil=fopen(filnam.Data(),"r"); 
-    if(feefil){
-      fscanf(feefil,"%d \n",&adcSamplFreq);
-      fscanf(feefil,"%d \n",&dataformat);
-      fclose(feefil);
-      TString shcomm=Form("tar -rf SDDbase_LDC.tar -C %s fee.conf",dir); 
-      gSystem->Exec(shcomm.Data());
-      readfeeconf=kTRUE;
-      printf("ADC sampling frequency = %d MHz dataformat code =%d \n",adcSamplFreq,dataformat);
-    }
-  }
-  if(!readfeeconf) printf("File fee.conf not found, sampling frequency set to 40 MHz and data format to 1\n");
 
   AliITSOnlineSDDTP **tpan=new AliITSOnlineSDDTP*[kTotDDL*kModPerDDL*kSides];
   TH2F **histo=new TH2F*[kTotDDL*kModPerDDL*kSides];
   Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
+  Bool_t writtenoutput=kFALSE;
   Char_t hisnam[20];
   for(Int_t iddl=0; iddl<kTotDDL;iddl++){
     for(Int_t imod=0; imod<kModPerDDL;imod++){
       for(Int_t isid=0;isid<kSides;isid++){
        Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
        tpan[index]=new AliITSOnlineSDDTP(iddl,imod,isid,100.);
-       if(adcSamplFreq==20) tpan[index]->SetLastGoodTB(126);
-       else tpan[index]->SetLastGoodTB(254);
        sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
        histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
        isFilled[index]=0;
@@ -176,14 +160,15 @@ int main(int argc, char **argv) {
       case PHYSICS_EVENT: // uncomment this line for test raw data
        printf(" event number = %i \n",iev);
        AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-
-       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; 
+       rawReader->Reset();
+       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;
        }
 
-       rawReader->Reset();
        for(Int_t iddl=0; iddl<kTotDDL;iddl++){
          for(Int_t imod=0; imod<kModPerDDL;imod++){
            for(Int_t isid=0;isid<kSides;isid++){
@@ -192,14 +177,7 @@ int main(int argc, char **argv) {
            }
          }
        }
-       AliITSRawStream* s;
-       if(dataformat==0){
-         s=new AliITSRawStreamSDD(rawReader);
-       }else{
-         s=new AliITSRawStreamSDDCompressed(rawReader);
-         if(dataformat==1) s->SetADCEncoded(kTRUE);
-       }
-       
+
        while(s->Next()){
          Int_t iDDL=rawReader->GetDDLID();
          Int_t iCarlos=s->GetCarlosId();
@@ -211,11 +189,14 @@ int main(int argc, char **argv) {
            isFilled[index]=1;
          }
        }
+       delete s;
        delete rawReader;
        for(Int_t iddl=0; iddl<kTotDDL;iddl++){
          for(Int_t imod=0; imod<kModPerDDL;imod++){
            for(Int_t isid=0;isid<kSides;isid++){
              Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
+             if(amSamplFreq==20) tpan[index]->SetLastGoodTB(126);
+             else tpan[index]->SetLastGoodTB(254);
              if(isFilled[index]) tpan[index]->AddEvent(histo[index]);    
            }
          }
@@ -248,6 +229,13 @@ int main(int argc, char **argv) {
   }
   fh->Close();
 
+  FILE *conffil=fopen("fee.conf","w");
+  fprintf(conffil,"%d\n",amSamplFreq);
+  fprintf(conffil,"%02X\n",cdhAttr);
+  fclose(conffil);
+  gSystem->Exec("tar -rf SDDbase_LDC.tar fee.conf");
+
+
   /* write report */
   printf("Run #%s, received %d calibration events\n",getenv("DATE_RUN_NUMBER"),iAnalyzedEv);
 
index 329f2b6d6c027da6649a04d3fe5f38d08408bf57..eb2f9ed0f8ed4d9b48587c5bdcc2ce91e0597ba5 100644 (file)
@@ -79,23 +79,10 @@ int main(int argc, char **argv) {
   const Int_t kTotDDL=24;
   const Int_t kModPerDDL=12;
   const Int_t kSides=2;
-  Int_t adcSamplFreq=40;
-  Bool_t readfeeconf=kFALSE;
-  Int_t dataformat=1;
+  Int_t amSamplFreq=40;
+
   gSystem->Exec("rm -f SDDinj_ddl*.data");
-  if(gSystem->Getenv("DAQ_DETDB_LOCAL")!=NULL){
-    const char* dir=gSystem->Getenv("DAQ_DETDB_LOCAL");    
-    TString filnam=Form("%s/fee.conf",dir);    
-    FILE* feefil=fopen(filnam.Data(),"r"); 
-    if(feefil){
-      fscanf(feefil,"%d \n",&adcSamplFreq);
-      fscanf(feefil,"%d \n",&dataformat);
-      fclose(feefil);
-      readfeeconf=kTRUE;
-      printf("ADC sampling frequency = %d MHz dataformat code =%d \n",adcSamplFreq,dataformat);
-    }
-  }
-  if(!readfeeconf) printf("File fee.conf not found, sampling frequency set to 40 MHz and data format to 1\n");
+  gSystem->Exec("rm -f  SDDinj_LDC.tar");
 
 
 
@@ -103,6 +90,7 @@ int main(int argc, char **argv) {
   TH2F **histo=new TH2F*[kTotDDL*kModPerDDL*kSides];
   Int_t nWrittenEv[kTotDDL*kModPerDDL*kSides];
   Bool_t isFilled[kTotDDL*kModPerDDL*kSides];
+  Bool_t writtenoutput=kFALSE;
 
   Char_t hisnam[20];
   for(Int_t iddl=0; iddl<kTotDDL;iddl++){
@@ -110,8 +98,6 @@ int main(int argc, char **argv) {
       for(Int_t isid=0;isid<kSides;isid++){
        Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
        injan[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
-       if(adcSamplFreq==20) injan[index]->Set20MHzConfig();
-       else injan[index]->Set40MHzConfig();
        sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
        histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
        nWrittenEv[index]=0;
@@ -179,16 +165,15 @@ int main(int argc, char **argv) {
        printf(" event number = %i \n",iev);
        ievInj++; 
        AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-
        UInt_t timeSt=rawReader->GetTimestamp();
-
-       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; 
-       }
-
        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; iddl<kTotDDL;iddl++){
          for(Int_t imod=0; imod<kModPerDDL;imod++){
            for(Int_t isid=0;isid<kSides;isid++){
@@ -197,14 +182,7 @@ int main(int argc, char **argv) {
            }
          }
        }
-       AliITSRawStream* s;
-       if(dataformat==0){
-         s=new AliITSRawStreamSDD(rawReader);
-       }else{
-         s=new AliITSRawStreamSDDCompressed(rawReader);
-         if(dataformat==1) s->SetADCEncoded(kTRUE);
-       }
-       
+
        while(s->Next()){
          Int_t iDDL=rawReader->GetDDLID();
          Int_t iCarlos=s->GetCarlosId();
@@ -216,12 +194,16 @@ int main(int argc, char **argv) {
            isFilled[index]=1;
          }
        }
+       delete s;
        delete rawReader;
+
        for(Int_t iddl=0; iddl<kTotDDL;iddl++){
          for(Int_t imod=0; imod<kModPerDDL;imod++){
            for(Int_t isid=0;isid<kSides;isid++){
              Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
              if(isFilled[index]){
+               if(amSamplFreq==20) injan[index]->Set20MHzConfig();
+               else injan[index]->Set40MHzConfig();
                injan[index]->Reset();
                injan[index]->AnalyzeEvent(histo[index]);    
                injan[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]);
@@ -240,7 +222,6 @@ int main(int argc, char **argv) {
   /* write report */
   printf("Run #%s, received %d injector events\n",getenv("DATE_RUN_NUMBER"),ievInj);
 
-  gSystem->Exec("rm -f  SDDinj_LDC.tar");
   Char_t filnam[100],command[120];
   TFile *fh=new TFile("SDDinjectHistos.root","RECREATE");
   for(Int_t iddl=0; iddl<kTotDDL;iddl++){