]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFDecoder.cxx
Do not get main runloader from gAlice
[u/mrichter/AliRoot.git] / TOF / AliTOFDecoder.cxx
index 0174b0449b8b6ffefdce9adc5d7726503404e357..ed08a1e305debd31232dc196e4b2054f7cc4fd6b 100644 (file)
 
 /*
 $Log$
+Revision 1.5  2007/11/24 14:58:34  zampolli
+New Method implemented (#DDL <-> TOF channels)
+
+Revision 1.4  2007/05/18 13:08:57  decaro
+Coding convention: RS1 violation -> suppression
+
+Revision 1.3  2007/05/08 11:56:05  arcelli
+improved verbosity in verbose mode (R.Preghenella)
+
+Revision 1.2  2007/05/03 11:34:43  decaro
+Coding convention: RS1 violation -> suppression
+
 Revision 1.1  2007/04/27 11:00:32  arcelli
 TOF Raw Data decoder
 
@@ -23,7 +35,7 @@ TOF Raw Data decoder
 
 
 //////////////////////////////////////////////////////////////////////
-//                                                                  /
+//                                                                  //
 //                                                                  //
 //   Class for raw data decoding                                    //
 //                                                                  //
@@ -34,7 +46,10 @@ TOF Raw Data decoder
 
 #include "AliLog.h"
 #include "AliTOFHitData.h"
+#include "AliTOFHitDataBuffer.h"
 #include "AliTOFDecoder.h"
+#include "AliTOFGeometry.h"
+#include "AliRawDataHeader.h"
 
 ClassImp(AliTOFDecoder)
 
@@ -89,42 +104,26 @@ AliTOFDecoder::AliTOFDecoder(AliTOFHitDataBuffer *DataBuffer, AliTOFHitDataBuffe
 //_________________________________________________________________
 
 AliTOFDecoder::AliTOFDecoder(const AliTOFDecoder &source) : 
-  TObject(),
-  fVerbose(0),
-  fV2718Patch(kFALSE),
-  fDataBuffer(0x0),
-  fPackedDataBuffer(0x0),
-  fTRMGlobalHeader(0x0),
-  fTRMGlobalTrailer(0x0),
-  fTRMChainHeader(0x0),
-  fTRMChainTrailer(0x0),
-  fTDCPackedHit(0x0),
-  fTDCUnpackedHit(0x0),
-  fTRMTDCError(0x0),
-  fTRMDiagnosticErrorWord1(0x0),
-  fTRMDiagnosticErrorWord2(0x0),
-  fSpiderCurrentSlotID(-1),
-  fSpiderCurrentChain(-1),
-  fSpiderCurrentTDC(-1)
+  TObject(source),
+  fVerbose(source.fVerbose),
+  fV2718Patch(source.fV2718Patch),
+  fDataBuffer(source.fDataBuffer),
+  fPackedDataBuffer(source.fPackedDataBuffer),
+  fTRMGlobalHeader(source.fTRMGlobalHeader),
+  fTRMGlobalTrailer(source.fTRMGlobalTrailer),
+  fTRMChainHeader(source.fTRMChainHeader),
+  fTRMChainTrailer(source.fTRMChainTrailer),
+  fTDCPackedHit(source.fTDCPackedHit),
+  fTDCUnpackedHit(source.fTDCUnpackedHit),
+  fTRMTDCError(source.fTRMTDCError),
+  fTRMDiagnosticErrorWord1(source.fTRMDiagnosticErrorWord1),
+  fTRMDiagnosticErrorWord2(source.fTRMDiagnosticErrorWord2),
+  fSpiderCurrentSlotID(source.fSpiderCurrentSlotID),
+  fSpiderCurrentChain(source.fSpiderCurrentChain),
+  fSpiderCurrentTDC(source.fSpiderCurrentTDC)
 {
   //copy constructor
   
-  this->fVerbose = source.fVerbose;
-  this->fV2718Patch = source.fV2718Patch;
-  this->fDataBuffer = source.fDataBuffer;
-  this->fPackedDataBuffer = source.fPackedDataBuffer;
-  this->fTRMGlobalHeader = source.fTRMGlobalHeader;
-  this->fTRMGlobalTrailer = source.fTRMGlobalTrailer;
-  this->fTRMChainHeader = source.fTRMChainHeader;
-  this->fTRMChainTrailer = source.fTRMChainTrailer;
-  this->fTDCPackedHit = source.fTDCPackedHit;
-  this->fTDCUnpackedHit = source.fTDCUnpackedHit;
-  this->fTRMTDCError = source.fTRMTDCError;
-  this->fTRMDiagnosticErrorWord1 = source.fTRMDiagnosticErrorWord1;
-  this->fTRMDiagnosticErrorWord2 = source.fTRMDiagnosticErrorWord2;
-  this->fSpiderCurrentSlotID = source.fSpiderCurrentSlotID;
-  this->fSpiderCurrentChain = source.fSpiderCurrentChain;
-  this->fSpiderCurrentTDC = source.fSpiderCurrentTDC;
 }
 
 //_________________________________________________________________
@@ -134,22 +133,26 @@ AliTOFDecoder::operator = (const AliTOFDecoder &source)
 {
   //operator =
 
-  this->fVerbose = source.fVerbose;
-  this->fV2718Patch = source.fV2718Patch;
-  this->fDataBuffer = source.fDataBuffer;
-  this->fPackedDataBuffer = source.fPackedDataBuffer;
-  this->fTRMGlobalHeader = source.fTRMGlobalHeader;
-  this->fTRMGlobalTrailer = source.fTRMGlobalTrailer;
-  this->fTRMChainHeader = source.fTRMChainHeader;
-  this->fTRMChainTrailer = source.fTRMChainTrailer;
-  this->fTDCPackedHit = source.fTDCPackedHit;
-  this->fTDCUnpackedHit = source.fTDCUnpackedHit;
-  this->fTRMTDCError = source.fTRMTDCError;
-  this->fTRMDiagnosticErrorWord1 = source.fTRMDiagnosticErrorWord1;
-  this->fTRMDiagnosticErrorWord2 = source.fTRMDiagnosticErrorWord2;
-  this->fSpiderCurrentSlotID = source.fSpiderCurrentSlotID;
-  this->fSpiderCurrentChain = source.fSpiderCurrentChain;
-  this->fSpiderCurrentTDC = source.fSpiderCurrentTDC;
+  if (this == &source)
+    return *this;
+
+  TObject::operator=(source);
+  fVerbose = source.fVerbose;
+  fV2718Patch = source.fV2718Patch;
+  fDataBuffer = source.fDataBuffer;
+  fPackedDataBuffer = source.fPackedDataBuffer;
+  fTRMGlobalHeader = source.fTRMGlobalHeader;
+  fTRMGlobalTrailer = source.fTRMGlobalTrailer;
+  fTRMChainHeader = source.fTRMChainHeader;
+  fTRMChainTrailer = source.fTRMChainTrailer;
+  fTDCPackedHit = source.fTDCPackedHit;
+  fTDCUnpackedHit = source.fTDCUnpackedHit;
+  fTRMTDCError = source.fTRMTDCError;
+  fTRMDiagnosticErrorWord1 = source.fTRMDiagnosticErrorWord1;
+  fTRMDiagnosticErrorWord2 = source.fTRMDiagnosticErrorWord2;
+  fSpiderCurrentSlotID = source.fSpiderCurrentSlotID;
+  fSpiderCurrentChain = source.fSpiderCurrentChain;
+  fSpiderCurrentTDC = source.fSpiderCurrentTDC;
   return *this;
 }
 
@@ -159,7 +162,7 @@ AliTOFDecoder::~AliTOFDecoder()
 //_________________________________________________________________
 
 Bool_t
-AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
+AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh)
 {
   /* main decoding routine.
    * it loops over nWords 32-bit words 
@@ -184,6 +187,11 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
   Short_t  currentACQ = -1;
   Short_t  currentChain = -1;
   Short_t  currentBunchID = -1;
+  Short_t  currentMiniEventID = cdh ? cdh->GetMiniEventID() : (Short_t)-1;
+  Short_t  currentEventID1 = cdh ? cdh->GetEventID1() : (Short_t)-1;
+  AliInfo(Form("EvID1 = %d, EvID2 = %d, currentMiniEventID = %d", currentEventID1, cdh->GetEventID2(), currentMiniEventID));
+  if (!cdh)
+    AliWarning("CDH not valid: deltaBunchID not reliable ");
 
   /*** V2718 patch ***/
   if (fV2718Patch){
@@ -277,8 +285,7 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
        break;
        
       default:
-       if (fVerbose)
-         AliError(Form("  %02x - 0x%08x [ERROR] Not valid slotID in global header",decodeStatus,*rawData));
+       AliError(Form("  %02x - 0x%08x [ERROR] Not valid slotID in global header",decodeStatus,*rawData));
        return kTRUE;
        break;
        
@@ -336,8 +343,7 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
        break; 
        
       default:
-       if (fVerbose)
-         AliError(Form("  %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer",decodeStatus,*rawData));
+       AliError(Form("  %02x - 0x%08x [ERROR] Not valid slotID/pattern in global trailer",decodeStatus,*rawData));
        return kTRUE;
        break;
       }
@@ -439,6 +445,7 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
        hitData.SetTimeBin(fTDCPackedHit->GetHitTime());
        hitData.SetTOT((float)fTDCPackedHit->GetTOTWidth() * TOT_BIN_WIDTH);
        hitData.SetTOTBin(fTDCPackedHit->GetTOTWidth());
+       hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
        //orphane leading hit
        if (hitData.GetPS()==LEADING_HIT_PS){
          hitData.SetTime((float)fTDCUnpackedHit->GetHitTime() * TIME_BIN_WIDTH);
@@ -532,6 +539,7 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
        hitData.SetTimeBin(fTDCUnpackedHit->GetHitTime());
        hitData.SetTOT(-1.);
        hitData.SetTOTBin(-1);
+       hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
        //push hit data in data buffer
          if (fDataBuffer != 0x0)
            fDataBuffer->Add(hitData);
@@ -568,6 +576,7 @@ AliTOFDecoder::Decode(UInt_t *rawData, Int_t nWords)
        hitData.SetTimeBin(fTDCUnpackedHit->GetHitTime());
        hitData.SetTOT(-1.);
        hitData.SetTOTBin(-1);
+       hitData.SetDeltaBunchID(currentBunchID - currentEventID1);
        //push hit data in data buffer
          if (fDataBuffer != 0x0)
            fDataBuffer->Add(hitData);
@@ -679,7 +688,7 @@ AliTOFDecoder::ResetSpider(){
 //_________________________________________________________________
 
 Bool_t 
-AliTOFDecoder::Spider(AliTOFHitData hitData){
+AliTOFDecoder::Spider(AliTOFHitData &hitData){
 
   /* main SPIDER routine.
      it receives, reads, stores and packs
@@ -774,3 +783,115 @@ AliTOFDecoder::Spider(AliTOFHitData hitData){
 
   return kFALSE;
 }
+//_____________________________________________________________________________
+void AliTOFDecoder::GetArrayDDL(Int_t* array, Int_t ddl){
+
+  // method that fills array with the
+  // TOF channels indexes corresponding
+  // to DDL iDDL
+
+  AliTOFGeometry *geom = new AliTOFGeometry();
+  Int_t indexDDL = ddl%4;
+  Int_t iSector = Int_t(ddl/4);
+  //AliInfo(Form(" Sector = %i, DDL within sector = %i",iSector, indexDDL));
+  if (fVerbose){
+    AliInfo(Form(" Sector = %i, DDL within sector = %i",iSector, indexDDL));
+  }
+  Int_t volume[5];
+  volume[0]=iSector;
+  Int_t minPlate=0, maxPlate=0, minStrip2=0, maxStrip2=0, minPadz=0, maxPadz=0, minPadx=0, maxPadx=0;
+
+  if (indexDDL==0){
+    minPlate=kMinPlate0;
+    maxPlate=kMaxPlate0;
+    minStrip2=kMinStrip0;
+    maxStrip2=kMaxStrip0;
+    minPadz=kMinPadz0;
+    maxPadz=kMaxPadz0;
+    minPadx=kMinPadx0;
+    maxPadx=kMaxPadx0;
+  }
+
+  else if (indexDDL==1){
+    minPlate=kMinPlate1;
+    maxPlate=kMaxPlate1;
+    minStrip2=kMinStrip1;
+    maxStrip2=kMaxStrip1;
+    minPadz=kMinPadz1;
+    maxPadz=kMaxPadz1;
+    minPadx=kMinPadx1;
+    maxPadx=kMaxPadx1;
+  }
+
+  else if (indexDDL==2){
+    minPlate=kMinPlate2;
+    maxPlate=kMaxPlate2;
+    minStrip2=kMinStrip2;
+    maxStrip2=kMaxStrip2;
+    minPadz=kMinPadz2;
+    maxPadz=kMaxPadz2;
+    minPadx=kMinPadx2;
+    maxPadx=kMaxPadx2;
+  }
+
+  else if (indexDDL==3){
+    minPlate=kMinPlate3;
+    maxPlate=kMaxPlate3;
+    minStrip2=kMinStrip3;
+    maxStrip2=kMaxStrip3;
+    minPadz=kMinPadz3;
+    maxPadz=kMaxPadz3;
+    minPadx=kMinPadx3;
+    maxPadx=kMaxPadx3;
+  }
+
+  Int_t ichTOF=0;
+
+  Int_t minStrip=0;
+  Int_t maxStrip=18;  
+  for (Int_t iPlate=minPlate;iPlate<=maxPlate;iPlate++){
+    if (iPlate==2) {
+      maxStrip = maxStrip2;
+      minStrip = minStrip2;
+    }
+    else {
+      maxStrip = 18;
+      minStrip = 0;
+    }
+    for (Int_t iStrip=minStrip;iStrip<=maxStrip;iStrip++){
+      for (Int_t iPadz=minPadz;iPadz<=maxPadz;iPadz++){
+       for (Int_t iPadx=minPadx;iPadx<=maxPadx;iPadx++){
+         volume[1]=iPlate;
+         volume[2]=iStrip;
+         volume[3]=iPadz;
+         volume[4]=iPadx;
+         if (fVerbose){
+           AliInfo(Form(" volume[0] = %i, volume[1] = %i, volume[2] = %i, volume[3] = %i, volume[4] = %i",volume[0],volume[1],volume[2],volume[3],volume[4]));
+         }
+         if (indexDDL==0 || indexDDL==2){
+           array[ichTOF]=geom->GetIndex(volume);
+           if (fVerbose){
+             AliInfo(Form(" ichTOF = %i, TOFChannel = %i",ichTOF,array[ichTOF]));
+           }
+         }
+         else {
+           array[ichTOF]=geom->GetIndex(volume);
+           if (fVerbose){
+             AliInfo(Form(" ichTOF = %i, TOFChannel = %i",ichTOF,array[ichTOF]));
+           }
+         }
+         ichTOF++;
+       }
+      }
+    }
+  }
+  //AliInfo(Form("ichTOF = %i",ichTOF));
+  if ((((indexDDL==0 || indexDDL==2)&ichTOF)!=2160) || (((indexDDL==1 || indexDDL==3)&ichTOF)!=2208)){
+    AliWarning(Form("Something strange occurred, number of entries in array different from expected! Please, check! ichTOF = %i",ichTOF));
+  }
+  return;
+}
+
+
+
+