Digits-to-raw_data conversion: correction for a more real description (A.De Caro...
authordecaro <decaro@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Apr 2007 16:51:39 +0000 (16:51 +0000)
committerdecaro <decaro@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 23 Apr 2007 16:51:39 +0000 (16:51 +0000)
TOF/AliTOF.cxx
TOF/AliTOFClusterFinder.cxx
TOF/AliTOFDDLRawData.cxx
TOF/AliTOFDDLRawData.h
TOF/AliTOFRawDataRead.C

index 234515c..ded52e1 100644 (file)
@@ -46,6 +46,7 @@
 #include <TTask.h>
 #include <TTree.h>
 #include <TVirtualMC.h>
+#include <TStopwatch.h>
 
 #include "AliConst.h"
 #include "AliLoader.h"
@@ -689,6 +690,9 @@ void AliTOF::Digits2Raw()
 // Starting from the TOF digits, writes the Raw Data objects
 //
 
+  TStopwatch stopwatch;
+  stopwatch.Start();
+
   fLoader->LoadDigits();
 
   TTree* digits = fLoader->TreeD();
@@ -697,7 +701,6 @@ void AliTOF::Digits2Raw()
     return;
   }
   
-  //AliRunLoader *rl = AliRunLoader::Open("galice.root",AliConfig::GetDefaultEventFolderName(),"read");
   fRunLoader->CdGAFile();
   TFile *in=(TFile*)gFile;
   in->cd();
@@ -706,7 +709,12 @@ void AliTOF::Digits2Raw()
   AliTOFDDLRawData rawWriter(geometry);
   //AliTOFDDLRawData rawWriter;
   rawWriter.SetVerbose(0);
-  //rawWriter.SetAcquisitionMode(kFALSE);
+  //rawWriter.SetFakeOrphaneProduction(kTRUE);
+  //rawWriter.SetPackedAcquisitionMode(kFALSE);
+  if (rawWriter.GetPackedAcquisitionMode()) {
+    if(rawWriter.GetMatchingWindow()>8192)
+      AliWarning(Form("You are running in packing mode and the matching window is %, i.e. greater than 200. ns", rawWriter.GetMatchingWindow()));
+  }
   
   AliDebug(1,"Formatting raw data for TOF");
   digits->GetEvent(0);
@@ -714,6 +722,9 @@ void AliTOF::Digits2Raw()
 
   fLoader->UnloadDigits();
   
+  AliDebug(1, Form("Execution time to write TOF raw data : R:%.2fs C:%.2fs",
+                  stopwatch.RealTime(),stopwatch.CpuTime()));
+
 }
 
 //____________________________________________________________________________
index 70e4629..ef23880 100644 (file)
@@ -15,6 +15,9 @@
 
 /* 
 $Log$
+Revision 1.22  2007/04/19 17:26:32  arcelli
+Fix a bug (add some debug printout
+
 Revision 1.21  2007/04/18 17:28:12  arcelli
 Set the ToT bin width to the one actually used...
 
@@ -72,6 +75,7 @@ Revision 0.01  2005/07/25 A. De Caro
 
 #include "TClonesArray.h"
 //#include "TFile.h"
+#include "TStopwatch.h"
 #include "TTree.h"
 
 #include "AliDAQ.h"
@@ -202,6 +206,9 @@ void AliTOFClusterFinder::Digits2RecPoints(Int_t iEvent)
   // Converts digits to recpoints for TOF
   //
 
+  TStopwatch stopwatch;
+  stopwatch.Start();
+
   fRunLoader->GetEvent(iEvent);
 
   fTreeD = fTOFLoader->TreeD();
@@ -279,6 +286,9 @@ void AliTOFClusterFinder::Digits2RecPoints(Int_t iEvent)
   fTOFLoader = fRunLoader->GetLoader("TOFLoader");  
   fTOFLoader->WriteRecPoints("OVERWRITE");
 
+  AliInfo(Form("Execution time to read TOF digits and to write TOF clusters : R:%.4fs C:%.4fs",
+              stopwatch.RealTime(),stopwatch.CpuTime()));
+
 }
 //______________________________________________________________________________
 
@@ -289,6 +299,9 @@ void AliTOFClusterFinder::Digits2RecPoints(AliRawReader *rawReader,
   // Converts RAW data to recpoints for TOF
   //
 
+  TStopwatch stopwatch;
+  stopwatch.Start();
+
   //const Int_t kDDL = fTOFGeometry->NDDL()*fTOFGeometry->NSectors();
   const Int_t kDDL = AliDAQ::NumberOfDdls("TOF");
 
@@ -444,6 +457,9 @@ void AliTOFClusterFinder::Digits2RecPoints(AliRawReader *rawReader,
 
   ResetRecpoint();
 
+  AliDebug(1, Form("Execution time to read TOF raw data and to write TOF clusters : R:%.4fs C:%.4fs",
+                  stopwatch.RealTime(),stopwatch.CpuTime()));
+
 }
 //______________________________________________________________________________
 
@@ -453,6 +469,9 @@ void AliTOFClusterFinder::Digits2RecPoints(Int_t iEvent, AliRawReader *rawReader
   // Converts RAW data to recpoints for TOF
   //
 
+  TStopwatch stopwatch;
+  stopwatch.Start();
+
   //const Int_t kDDL = fTOFGeometry->NDDL()*fTOFGeometry->NSectors();
   const Int_t kDDL = AliDAQ::NumberOfDdls("TOF");
 
@@ -572,6 +591,9 @@ void AliTOFClusterFinder::Digits2RecPoints(Int_t iEvent, AliRawReader *rawReader
   fTOFLoader = fRunLoader->GetLoader("TOFLoader");
   fTOFLoader->WriteRecPoints("OVERWRITE");
   
+  AliDebug(1, Form("Execution time to read TOF raw data and to write TOF clusters : R:%.4fs C:%.4fs",
+              stopwatch.RealTime(),stopwatch.CpuTime()));
+
 }
 //______________________________________________________________________________
 
@@ -583,6 +605,9 @@ void AliTOFClusterFinder::Raw2Digits(Int_t iEvent, AliRawReader *rawReader)
   //             (temporary solution)
   //
 
+  TStopwatch stopwatch;
+  stopwatch.Start();
+
   //const Int_t kDDL = fTOFGeometry->NDDL()*fTOFGeometry->NSectors();
   const Int_t kDDL = fTOFGeometry->NDDL()*fTOFGeometry->NSectors();
 
@@ -655,6 +680,9 @@ void AliTOFClusterFinder::Raw2Digits(Int_t iEvent, AliRawReader *rawReader)
   fTOFLoader = fRunLoader->GetLoader("TOFLoader");
   fTOFLoader->WriteDigits("OVERWRITE");
   
+  AliDebug(1, Form("Execution time to read TOF raw data and to write TOF clusters : R:%.2fs C:%.2fs",
+                  stopwatch.RealTime(),stopwatch.CpuTime()));
+
 }
 //______________________________________________________________________________
 
index 949527b..34bcdc4 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.14  2007/03/28 10:50:33  decaro
+Rounding off problem in rawData coding/decoding: solved
+
 Revision 1.13  2007/02/20 15:57:00  decaro
 Raw data update: to read the TOF raw data defined in UNPACKED mode
 
@@ -78,6 +81,8 @@ AliTOFDDLRawData::AliTOFDDLRawData():
   fVerbose(0),
   fIndex(-1),
   fPackedAcquisition(kTRUE),
+  fFakeOrphaneProduction(kFALSE),
+  fMatchingWindow(8192),
   fTOFgeometry(0),
   fTOFdigitMap(new AliTOFDigitMap()),
   fTOFdigitArray(0x0),
@@ -91,6 +96,8 @@ AliTOFDDLRawData::AliTOFDDLRawData(AliTOFGeometry *tofGeom):
   fVerbose(0),
   fIndex(-1),
   fPackedAcquisition(kTRUE),
+  fFakeOrphaneProduction(kFALSE),
+  fMatchingWindow(8192),
   fTOFgeometry(tofGeom),
   fTOFdigitMap(new AliTOFDigitMap()),
   fTOFdigitArray(0x0),
@@ -106,6 +113,8 @@ AliTOFDDLRawData::AliTOFDDLRawData(const AliTOFDDLRawData &source) :
   fVerbose(0),
   fIndex(-1),
   fPackedAcquisition(kTRUE),
+  fFakeOrphaneProduction(kFALSE),
+  fMatchingWindow(8192),
   fTOFgeometry(0),
   fTOFdigitMap(new AliTOFDigitMap()),
   fTOFdigitArray(0x0),
@@ -115,6 +124,8 @@ AliTOFDDLRawData::AliTOFDDLRawData(const AliTOFDDLRawData &source) :
   this->fIndex=source.fIndex;
   this->fVerbose=source.fVerbose;
   this->fPackedAcquisition=source.fPackedAcquisition;
+  this->fFakeOrphaneProduction=source.fFakeOrphaneProduction;
+  this->fMatchingWindow=source.fMatchingWindow;
   this->fTOFgeometry=source.fTOFgeometry;
   this->fTOFdigitMap=source.fTOFdigitMap;
   this->fTOFdigitArray=source.fTOFdigitArray;
@@ -128,6 +139,8 @@ AliTOFDDLRawData& AliTOFDDLRawData::operator=(const AliTOFDDLRawData &source) {
   this->fIndex=source.fIndex;
   this->fVerbose=source.fVerbose;
   this->fPackedAcquisition=source.fPackedAcquisition;
+  this->fFakeOrphaneProduction=source.fFakeOrphaneProduction;
+  this->fMatchingWindow=source.fMatchingWindow;
   this->fTOFgeometry=source.fTOFgeometry;
   this->fTOFdigitMap=source.fTOFdigitMap;
   this->fTOFdigitArray=source.fTOFdigitArray;
@@ -892,6 +905,11 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
   Int_t nTDC = -1;
   Int_t iCH = -1;
 
+  Int_t numberOfMeasuresPerChannel = 0;
+  Int_t maxMeasuresPerChannelInTDC = 0;
+
+  Bool_t outOut = HeadOrTail();
+
   ofstream ftxt;
 
   if (fVerbose==2) ftxt.open("TOFdigits.txt",ios::app);
@@ -901,6 +919,8 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
   // loop on TDC number
   for (nTDC=AliTOFGeometry::NTdc()-1; nTDC>=0; nTDC--) {
 
+    maxMeasuresPerChannelInTDC = 0;
+
     // the DRM odd (i.e. left) slot number 3 doesn't contain TDC digit data
     // for TDC numbers 3-14
     if (iDDL%2==1 && nTRM==3 && (Int_t)(nTDC/3.)!=0) continue;
@@ -908,6 +928,11 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
     // loop on TDC channel number
     for (iCH=AliTOFGeometry::NCh()-1; iCH>=0; iCH--) {
 
+      if (numberOfMeasuresPerChannel) {
+       maxMeasuresPerChannelInTDC = numberOfMeasuresPerChannel;
+       numberOfMeasuresPerChannel = 0;
+      }
+
       fTOFrawStream->EquipmentId2VolumeId(nDDL, nTRM, iChain, nTDC, iCH, volume);
        
       if (volume[0]==-1 || volume[1]==-1 || volume[2]==-1 ||
@@ -919,17 +944,18 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
 
       if (indexDigit[0]<0) {
 
-       trailingSpurious = Int_t(8192*gRandom->Rndm()) + Int_t(Int_t(256*gRandom->Rndm())*AliTOFGeometry::ToTBinWidth()/AliTOFGeometry::TdcBinWidth());
-       leadingSpurious = Int_t(8192*gRandom->Rndm());
+       trailingSpurious = Int_t(2097152*gRandom->Rndm());
+       leadingSpurious = Int_t(2097152*gRandom->Rndm());
 
-       if ( ( fPackedAcquisition && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells)) ||
-            (!fPackedAcquisition && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells)) ) {
+       if ( fFakeOrphaneProduction &&
+            ( ( fPackedAcquisition && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) ) ||
+              (!fPackedAcquisition && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) )  )  ) {
 
          percentFilledCells+=kOneMoreFilledCell;
 
          Int_t dummyPS = 0;
 
-         if (HeadOrTail()) {
+         if (outOut) {
            word = trailingSpurious; // trailing edge measurement
            dummyPS = 2;
          }
@@ -955,12 +981,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
            ftxt << "  " << volume[4];
            if (volume[3]<10) ftxt << "  " << volume[3];
            else              ftxt << " " << volume[3];
-           ftxt << "       " << -1;
-           if (word<10)                     ftxt << "      " << word;// << endl;
-           else if (word>=10 && word<100)   ftxt << "     " << word;// << endl;
-           else if (word>=100 && word<1000) ftxt << "    " << word;// << endl;
-           else                             ftxt << "   " << word;// << endl;
-           ftxt << "       " << dummyPS << endl;
+           ftxt << "   " << -1;
+           if (word<10)                           ftxt << "        " << word;
+           else if (word>=10     && word<100)     ftxt << "       " << word;
+           else if (word>=100    && word<1000)    ftxt << "      " << word;
+           else if (word>=1000   && word<10000)   ftxt << "     " << word;
+           else if (word>=10000  && word<100000)  ftxt << "    " << word;
+           else if (word>=100000 && word<1000000) ftxt << "   " << word;
+           else                                   ftxt << "  " << word;
+           ftxt << "   " << dummyPS << endl;
          }
 
          AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -982,12 +1011,13 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          nWordsPerTRM++;
          baseWord=0;
 
-       } // if (fPackedAcquisition && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells))  or ...
-
+       } // if ( fFakeOrphaneProduction && ( ( fPackedAcquisition && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) ) or ... ) )
       } // if (indexDigit[0]<0)
 
       for (jj=0; jj<3;jj++) {
 
+       numberOfMeasuresPerChannel++;
+
        if (indexDigit[jj]<0) continue;
        digs = (AliTOFdigit*)fTOFdigitArray->UncheckedAt(indexDigit[jj]);
          
@@ -997,14 +1027,14 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
            digs->GetPadx()  !=volume[3] ||
            digs->GetPadz()  !=volume[4]) AliWarning(" --- ERROR --- ");
 
-       //timeOfFlight = (Int_t)(digs->GetTdc())%8192;
-       timeOfFlight = (Int_t)(digs->GetTdc());
-       if (timeOfFlight>=8192) timeOfFlight = 0;
+       timeOfFlight = (Int_t)(digs->GetTdc())%8192;
 
-       totCharge = (Int_t)(digs->GetToT());//digs->GetAdc();
+       if (timeOfFlight>fMatchingWindow) continue;
+
+       // totCharge = (Int_t)digs->GetAdc(); //Use realistic ToT, for Standard production with no miscalibration/Slewing it == fAdC in digit (see AliTOFDigitizer)
+       totCharge = (Int_t)(digs->GetToT());
        // temporary control
        if (totCharge<0) totCharge = 0;//TMath::Abs(totCharge);
-       if (totCharge>=256) totCharge = 255;
 
        if (fPackedAcquisition) {
 
@@ -1025,18 +1055,19 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          ftxt << "  " << volume[4];
          if (volume[3]<10) ftxt << "  " << volume[3];
          else              ftxt << " " << volume[3];
-         if (totCharge<10)                        ftxt << "        " << totCharge;
-         else if (totCharge>=10 && totCharge<100) ftxt << "       " << totCharge;
-         else                                     ftxt << "      " << totCharge;
-         if (timeOfFlight<10)                             ftxt << "      " << timeOfFlight << endl;
-         else if (timeOfFlight>=10 && timeOfFlight<100)   ftxt << "     " << timeOfFlight << endl;
-         else if (timeOfFlight>=100 && timeOfFlight<1000) ftxt << "    " << timeOfFlight << endl;
-         else                                             ftxt << "   " << timeOfFlight << endl;
+         if (totCharge<10)                        ftxt << "    " << totCharge;
+         else if (totCharge>=10 && totCharge<100) ftxt << "   " << totCharge;
+         else                                     ftxt << "  " << totCharge;
+         if (timeOfFlight<10)                             ftxt << "     " << timeOfFlight << endl;
+         else if (timeOfFlight>=10  && timeOfFlight<100)  ftxt << "    " << timeOfFlight << endl;
+         else if (timeOfFlight>=100 && timeOfFlight<1000) ftxt << "   " << timeOfFlight << endl;
+         else                                             ftxt << "  " << timeOfFlight << endl;
        }
 
-       word = timeOfFlight; // time-of-fligth measurement
+       word = timeOfFlight%8192; // time-of-fligth measurement
        AliBitPacking::PackWord(word,baseWord, 0,12);
 
+       if (totCharge>=256) totCharge = 255;
        word = totCharge; // time-over-threshould measurement
        AliBitPacking::PackWord(word,baseWord,13,20);
 
@@ -1057,16 +1088,17 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        nWordsPerTRM++;
        baseWord=0;
 
-       if (percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells)) {
+       if ( fFakeOrphaneProduction &&
+            percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) ) {
 
          percentFilledCells+=kOneMoreFilledCell;
 
-         trailingSpurious = Int_t(8192*gRandom->Rndm()) + Int_t(Int_t(256*gRandom->Rndm())*AliTOFGeometry::ToTBinWidth()/AliTOFGeometry::TdcBinWidth());
-         leadingSpurious = Int_t(8192*gRandom->Rndm());
+         trailingSpurious = Int_t(2097152*gRandom->Rndm());
+         leadingSpurious = Int_t(2097152*gRandom->Rndm());
 
          Int_t dummyPS = 0;
 
-         if (HeadOrTail()) {
+         if (outOut) {
            word = trailingSpurious; // trailing edge measurement
            dummyPS = 2;
          }
@@ -1092,12 +1124,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
            ftxt << "  " << volume[4];
            if (volume[3]<10) ftxt << "  " << volume[3];
            else              ftxt << " " << volume[3];
-           ftxt << "       " << -1;
-           if (word<10)                     ftxt << "      " << word;
-           else if (word>=10 && word<100)   ftxt << "     " << word;
-           else if (word>=100 && word<1000) ftxt << "    " << word;
-           else                             ftxt << "   " << word;
-           ftxt << "       " << dummyPS << endl;
+           ftxt << "   " << -1;
+           if (word<10)                           ftxt << "        " << word;
+           else if (word>=10     && word<100)     ftxt << "       " << word;
+           else if (word>=100    && word<1000)    ftxt << "      " << word;
+           else if (word>=1000   && word<10000)   ftxt << "     " << word;
+           else if (word>=10000  && word<100000)  ftxt << "    " << word;
+           else if (word>=100000 && word<1000000) ftxt << "   " << word;
+           else                                   ftxt << "  " << word;
+           ftxt << "   " << dummyPS << endl;
          }
 
          AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -1119,17 +1154,18 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          nWordsPerTRM++;
          baseWord=0;
 
-       } // if (percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells))
+       } // if ( fFakeOrphaneProduction && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) )
 
 
        } // if (fPackedAcquisition)
        else { // if (!fPackedAcquisition)
 
-       if (percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && HeadOrTail()) {
+       if ( fFakeOrphaneProduction &&
+            percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && outOut ) {
 
          percentFilledCells+=kOneMoreFilledCell;
 
-         trailingSpurious = Int_t(8192*gRandom->Rndm()) + Int_t(Int_t(256*gRandom->Rndm())*AliTOFGeometry::ToTBinWidth()/AliTOFGeometry::TdcBinWidth());
+         trailingSpurious = Int_t(2097152*gRandom->Rndm());
          word = trailingSpurious;
          Int_t dummyPS = 2;
 
@@ -1150,12 +1186,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
            ftxt << "  " << volume[4];
            if (volume[3]<10) ftxt << "  " << volume[3];
            else              ftxt << " " << volume[3];
-           ftxt << "       " << -1;
-           if (word<10)                     ftxt << "      " << word;
-           else if (word>=10 && word<100)   ftxt << "     " << word;
-           else if (word>=100 && word<1000) ftxt << "    " << word;
-           else                             ftxt << "   " << word;
-           ftxt << "       " << dummyPS << endl;
+           ftxt << "   " << -1;
+           if (word<10)                           ftxt << "        " << word;
+           else if (word>=10     && word<100)     ftxt << "       " << word;
+           else if (word>=100    && word<1000)    ftxt << "      " << word;
+           else if (word>=1000   && word<10000)   ftxt << "     " << word;
+           else if (word>=10000  && word<100000)  ftxt << "    " << word;
+           else if (word>=100000 && word<1000000) ftxt << "   " << word;
+           else                                   ftxt << "  " << word;
+           ftxt << "   " << dummyPS << endl;
          }
 
          AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -1177,10 +1216,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          nWordsPerTRM++;
          baseWord=0;
 
-       } // if (percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells))
+       } // if ( fFakeOrphaneProduction && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells)  && outOut )
 
 
-       word = timeOfFlight + Int_t(totCharge*AliTOFGeometry::ToTBinWidth()/AliTOFGeometry::TdcBinWidth()); // trailing edge measurement
+       word = (timeOfFlight + Int_t(totCharge*AliTOFGeometry::ToTBinWidth()/AliTOFGeometry::TdcBinWidth()))%2097152; // trailing edge measurement
 
        if (fVerbose==2) {
          if (nDDL<10) ftxt << "  " << nDDL;
@@ -1199,12 +1238,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          ftxt << "  " << volume[4];
          if (volume[3]<10) ftxt << "  " << volume[3];
          else              ftxt << " " << volume[3];
-         ftxt << "       " << -1;
-         if (word<10)                     ftxt << "      " << word;
-         else if (word>=10 && word<100)   ftxt << "     " << word;
-         else if (word>=100 && word<1000) ftxt << "    " << word;
-         else                             ftxt << "   " << word;
-         ftxt << "       " << 2 << endl;
+         ftxt << "   " << -1;
+         if (word<10)                           ftxt << "        " << word;
+         else if (word>=10     && word<100)     ftxt << "       " << word;
+         else if (word>=100    && word<1000)    ftxt << "      " << word;
+         else if (word>=1000   && word<10000)   ftxt << "     " << word;
+         else if (word>=10000  && word<100000)  ftxt << "    " << word;
+         else if (word>=100000 && word<1000000) ftxt << "   " << word;
+         else                                   ftxt << "  " << word;
+         ftxt << "   " << 2 << endl;
        }
 
        AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -1227,9 +1269,7 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        nWordsPerTRM++;
        baseWord=0;
 
-
-
-       word = timeOfFlight; // leading edge measurement
+       word = timeOfFlight%2097152; // leading edge measurement
 
        if (fVerbose==2) {
          if (nDDL<10) ftxt << "  " << nDDL;
@@ -1248,11 +1288,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          ftxt << "  " << volume[4];
          if (volume[3]<10) ftxt << "  " << volume[3];
          else              ftxt << " " << volume[3];
-         ftxt << "       " << -1;
-         if (word<10)                   ftxt << "      " << word;
-         else if (word>=10 && word<100) ftxt << "     " << word;
-         else                           ftxt << "    " << word;
-         ftxt << "       " << 1 << endl;
+         ftxt << "   " << -1;
+         if (word<10)                           ftxt << "        " << word;
+         else if (word>=10     && word<100)     ftxt << "       " << word;
+         else if (word>=100    && word<1000)    ftxt << "      " << word;
+         else if (word>=1000   && word<10000)   ftxt << "     " << word;
+         else if (word>=10000  && word<100000)  ftxt << "    " << word;
+         else if (word>=100000 && word<1000000) ftxt << "   " << word;
+         else                                   ftxt << "  " << word;
+         ftxt << "   " << 1 << endl;
        }
 
        AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -1276,11 +1320,12 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        baseWord=0;
 
 
-       if (percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && !HeadOrTail()) {
+       if ( fFakeOrphaneProduction &&
+            percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && !outOut ) {
 
          percentFilledCells+=kOneMoreFilledCell;
 
-         leadingSpurious = Int_t(8192*gRandom->Rndm());
+         leadingSpurious = Int_t(2097152*gRandom->Rndm());
          word = leadingSpurious;
          Int_t dummyPS = 1;
 
@@ -1301,12 +1346,15 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
            ftxt << "  " << volume[4];
            if (volume[3]<10) ftxt << "  " << volume[3];
            else              ftxt << " " << volume[3];
-           ftxt << "       " << -1;
-           if (word<10)                     ftxt << "      " << word;// << endl;
-           else if (word>=10 && word<100)   ftxt << "     " << word;// << endl;
-           else if (word>=100 && word<1000) ftxt << "    " << word;// << endl;
-           else                             ftxt << "   " << word;// << endl;
-           ftxt << "       " << dummyPS << endl;
+           ftxt << "   " << -1;
+           if (word<10)                           ftxt << "        " << word;
+           else if (word>=10     && word<100)     ftxt << "       " << word;
+           else if (word>=100    && word<1000)    ftxt << "      " << word;
+           else if (word>=1000   && word<10000)   ftxt << "     " << word;
+           else if (word>=10000  && word<100000)  ftxt << "    " << word;
+           else if (word>=100000 && word<1000000) ftxt << "   " << word;
+           else                                   ftxt << "  " << word;
+           ftxt << "   " << dummyPS << endl;
          }
 
          AliBitPacking::PackWord(word,baseWord, 0,20);
@@ -1328,7 +1376,7 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          nWordsPerTRM++;
          baseWord=0;
 
-       } // if (percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells))
+       } // if ( fFakeOrphaneProduction && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && !outOut )
 
 
        } // if (!fPackedAcquisition)
@@ -1337,32 +1385,60 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
 
     } // end loop on TDC channel number
 
-  } // end loop on TDC number
-
-  if (fPackedAcquisition) {
+    if (localIndex==-1) continue;
 
-    for (Int_t jj=0; jj<=localIndex; jj++) {
-      fIndex++;
-      buf[fIndex] = localBuffer[jj];
-    }
-
-  }
-  else {
+    if (fPackedAcquisition) {
 
-    for (Int_t jj=0; jj<=localIndex; jj++) {
-      if (psArray[jj]==2) {
-       fIndex++;
-       buf[fIndex] = localBuffer[jj];
-      }
-    }
-    for (Int_t jj=0; jj<=localIndex; jj++) {
-      if (psArray[jj]==1) {
+      for (Int_t jj=0; jj<=localIndex; jj++) {
        fIndex++;
        buf[fIndex] = localBuffer[jj];
+       localBuffer[jj] = 0;
+       psArray[jj] = -1;
       }
+
     }
+    else {
+
+      if (maxMeasuresPerChannelInTDC = 1) {
+
+       for (Int_t jj=0; jj<=localIndex; jj++) {
+         if (psArray[jj]==2) {
+           fIndex++;
+           buf[fIndex] = localBuffer[jj];
+           localBuffer[jj] = 0;
+           psArray[jj] = -1;
+         }
+       }
+       for (Int_t jj=0; jj<=localIndex; jj++) {
+         if (psArray[jj]==1) {
+           fIndex++;
+           buf[fIndex] = localBuffer[jj];
+           localBuffer[jj] = 0;
+           psArray[jj] = -1;
+         }
+       }
+
+      } // if (maxMeasuresPerChannelInTDC = 1)
+      else if (maxMeasuresPerChannelInTDC>1) {
+
+       AliInfo(Form(" In the TOF DDL %2i, TRM %2i, TDC %2i, chain %1i, there are %2i t.o.f. good measurements ",
+                    nDDL, nTRM, iChain, nTDC, iCH, maxMeasuresPerChannelInTDC));
+
+       for (Int_t jj=0; jj<=localIndex; jj++) {
+           fIndex++;
+           buf[fIndex] = localBuffer[jj];
+           localBuffer[jj] = 0;
+           psArray[jj] = -1;
+       }
+
+      } // else if (maxMeasuresPerChannelInTDC>1)
+
+    } // else (!fPackedAcquisition)
+
+    localIndex = -1;
+
+  } // end loop on TDC number
 
-  }
 
   if (fVerbose==2) ftxt.close();
 
index e14683b..5df3ddd 100644 (file)
@@ -33,7 +33,12 @@ class AliTOFDDLRawData:public TObject {
 
   Int_t RawDataTOF(TBranch* branch); 
 
-  void SetAcquisitionMode(Bool_t mode) {fPackedAcquisition=mode;};
+  void SetPackedAcquisitionMode(Bool_t mode) {fPackedAcquisition=mode;};
+  void SetFakeOrphaneProduction(Bool_t flag) {fFakeOrphaneProduction=flag;};
+  void SetMatchingWindow(Int_t matWin) {fMatchingWindow=matWin;}; // setter for fMatchingWindow [bin number]
+  Bool_t GetPackedAcquisitionMode() const {return fPackedAcquisition;};
+  Bool_t GetFakeOrphaneProduction() const {return fFakeOrphaneProduction;};
+  Int_t  GetMatchingWindow() const {return fMatchingWindow;}; // getter for fMatchingWindow [bin number]
 
  private:
 
@@ -53,13 +58,21 @@ class AliTOFDDLRawData:public TObject {
   void  MakeTRMchainTrailer(Int_t iChain, UInt_t *buf);
   void  MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain, UInt_t *buf, UInt_t &nWordsPerTRM);
 
-  UInt_t  MakeFiller();
+  UInt_t MakeFiller();
 
   Bool_t HeadOrTail() const;
 
-  Int_t fVerbose;                 //Verbose level (0:no msg, 1:msg, 2:digits in txt files)
-  Int_t fIndex;                   //number of 32-bit words to be stored into the output file
+  Int_t fVerbose;                 //Verbose level (0:no msg, 1:msg,
+                                 //2:digits in txt files)
+  Int_t fIndex;                   //number of 32-bit words to be
+                                 //stored into the output file
   Bool_t fPackedAcquisition;      //flag for packed/no packed acquisition
+  Bool_t fFakeOrphaneProduction;  //flag to insert fake orphane
+                                 //(leading or trailing) time
+                                 //measurements
+  Int_t fMatchingWindow;          //time window [bin number] where to
+                                 //search time-of-flight measurements
+                                 //for the current event
 
   AliTOFGeometry *fTOFgeometry;   //Pointer to the TOF geometry
 
index 94ed79f..a6efc12 100644 (file)
@@ -28,84 +28,35 @@ void AliTOFRawDataRead(Int_t iEvent)
   // To read TOF raw data
   //
 
-  TClonesArray *fTOFrawData = new TClonesArray("AliTOFrawData",1000);
+  TClonesArray *clonesRawData = new TClonesArray("AliTOFrawData",1000);
   Int_t fPackedDigits=0;
 
-  Int_t indexDDL = 0;
   Int_t detectorIndex[5] = {-1, -1, -1, -1, -1};
   Int_t dummy = -1;
 
-  AliRawReaderFile reader(iEvent);
-  reader.RewindEvents();
+  AliRawReader *reader = new AliRawReaderFile(iEvent);
+  reader->RewindEvents();
 
   ofstream ftxt;
   ftxt.open("TOFrawDataReading.txt",ios::app);
 
-  while (reader.NextEvent()) {
+  while (reader->NextEvent()) {
 
-    AliTOFRawMap *rawMap = new AliTOFRawMap(fTOFrawData);
+    AliTOFRawMap *rawMap = new AliTOFRawMap(clonesRawData);
 
     Int_t slot[4] = {-1, -1, -1, -1};
 
-   for (indexDDL = 0; indexDDL < AliDAQ::NumberOfDdls("TOF"); indexDDL++) {
+   for (Int_t indexDDL = 0; indexDDL < AliDAQ::NumberOfDdls("TOF"); indexDDL++) {
 
-     rawMap->Clear();
-     fTOFrawData->Clear();
-     fPackedDigits = 0;
+     reader->Reset();
+     AliTOFRawStream stream(reader);
+     stream.LoadRawData(indexDDL);
 
-     printf(" \n \n \n DRM number %2i \n \n \n ", indexDDL);
+     clonesRawData = (TClonesArray*)stream.GetRawData();
 
-     reader.Reset();
-     AliTOFRawStream stream(&reader);
+     for (Int_t iRawData = 0; iRawData<clonesRawData->GetEntriesFast(); iRawData++) {
 
-     reader.Select("TOF", indexDDL, indexDDL);
-     Bool_t signal = kFALSE;
-
-     while(stream.Next()) {
-
-       signal = (stream.GetSector()!=-1 &&
-                stream.GetPlate()!=-1 &&
-                stream.GetStrip()!=-1 &&
-                stream.GetPadZ()!=-1 &&
-                stream.GetPadX()!=-1);
-
-       if (signal) {
-        printf("  %2i  %1i  %2i  %1i  %2i  \n", stream.GetSector(), stream.GetPlate(), stream.GetStrip(), stream.GetPadZ(), stream.GetPadX());
-
-        slot[0] = stream.GetTRM();
-        slot[1] = stream.GetTRMchain();
-        slot[2] = stream.GetTDC();
-        slot[3] = stream.GetTDCchannel();
-
-        if (rawMap->TestHit(slot) != kEmpty) {
-
-          AliTOFrawData *rawDigit = static_cast<AliTOFrawData*>(rawMap->GetHit(slot));
-          rawDigit->Update(stream.GetTofBin(), stream.GetToTbin(), stream.GetLeadingEdge(), stream.GetTrailingEdge(), stream.GetPSbit(), stream.GetACQ(), stream.GetErrorFlag());
-
-        }
-        else {
-
-          TClonesArray &arrayTofRawData =  *fTOFrawData;
-          new (arrayTofRawData[fPackedDigits++]) AliTOFrawData(stream.GetTRM(), stream.GetTRMchain(), stream.GetTDC(), stream.GetTDCchannel(),
-                                                               stream.GetTofBin(), stream.GetToTbin(), stream.GetLeadingEdge(), stream.GetTrailingEdge(),
-                                                               stream.GetPSbit(), stream.GetACQ(), stream.GetErrorFlag());
-
-          rawMap->SetHit(slot);
-
-          printf("  %6i \n", rawMap->GetHitIndex(slot));
-
-        }
-
-       } // end if (signal)
-
-     } // closed loop on TOF raw data per current DDL file
-
-     printf("\n \n \n end of reading DRM number %2i\n", indexDDL);
-     printf("                                     packed data %5i\n \n \n ", fTOFrawData->GetEntriesFast());
-
-     for (Int_t iRawData = 0; iRawData<fTOFrawData->GetEntriesFast(); iRawData++) {
-
-       AliTOFrawData *tofRawDatum = (AliTOFrawData*)fTOFrawData->UncheckedAt(iRawData);
+       AliTOFrawData *tofRawDatum = (AliTOFrawData*)clonesRawData->UncheckedAt(iRawData);
 
        if (tofRawDatum->GetTOT()==-1 || tofRawDatum->GetTOF()==-1) continue;
 
@@ -133,13 +84,20 @@ void AliTOFRawDataRead(Int_t iEvent)
        if (detectorIndex[4]<10) ftxt << "  " << detectorIndex[4];
        else                     ftxt << " " << detectorIndex[4];
 
-       if (tofRawDatum->GetTOT()<10)                                    ftxt << "        " << tofRawDatum->GetTOT();
-       else if (tofRawDatum->GetTOT()>=10 && tofRawDatum->GetTOT()<100) ftxt << "       " << tofRawDatum->GetTOT();
-       else                                                             ftxt << "      " << tofRawDatum->GetTOT();
-       if (tofRawDatum->GetTOF()<10)                                      ftxt << "      " << tofRawDatum->GetTOF() << endl;
-       else if (tofRawDatum->GetTOF()>=10 && tofRawDatum->GetTOF()<100)   ftxt << "     " << tofRawDatum->GetTOF() << endl;
-       else if (tofRawDatum->GetTOF()>=100 && tofRawDatum->GetTOF()<1000) ftxt << "    " << tofRawDatum->GetTOF() << endl;
-       else                                                               ftxt << "   " << tofRawDatum->GetTOF() << endl;
+       if (tofRawDatum->GetTOT()<10)                                            ftxt << "        " << tofRawDatum->GetTOT();
+       else if (tofRawDatum->GetTOT()>=10 && tofRawDatum->GetTOT()<100)         ftxt << "       " << tofRawDatum->GetTOT();
+       else if (tofRawDatum->GetTOT()>=100 && tofRawDatum->GetTOT()<1000)       ftxt << "      " << tofRawDatum->GetTOT();
+       else if (tofRawDatum->GetTOT()>=1000 && tofRawDatum->GetTOT()<10000)     ftxt << "     " << tofRawDatum->GetTOT();
+       else if (tofRawDatum->GetTOT()>=10000 && tofRawDatum->GetTOT()<100000)   ftxt << "    " << tofRawDatum->GetTOT();
+       else if (tofRawDatum->GetTOT()>=100000 && tofRawDatum->GetTOT()<1000000) ftxt << "   " << tofRawDatum->GetTOT();
+       else                                                                     ftxt << "  " << tofRawDatum->GetTOT();
+       if (tofRawDatum->GetTOF()<10)                                            ftxt << "        " << tofRawDatum->GetTOF() << endl;
+       else if (tofRawDatum->GetTOF()>=10 && tofRawDatum->GetTOF()<100)         ftxt << "       " << tofRawDatum->GetTOF() << endl;
+       else if (tofRawDatum->GetTOF()>=100 && tofRawDatum->GetTOF()<1000)       ftxt << "      " << tofRawDatum->GetTOF() << endl;
+       else if (tofRawDatum->GetTOF()>=1000 && tofRawDatum->GetTOF()<10000)     ftxt << "     " << tofRawDatum->GetTOF() << endl;
+       else if (tofRawDatum->GetTOF()>=10000 && tofRawDatum->GetTOF()<100000)   ftxt << "    " << tofRawDatum->GetTOF() << endl;
+       else if (tofRawDatum->GetTOF()>=100000 && tofRawDatum->GetTOF()<1000000) ftxt << "   " << tofRawDatum->GetTOF() << endl;
+       else                                                                     ftxt << "  " << tofRawDatum->GetTOF() << endl;
 
      } // end loop
 
@@ -152,3 +110,4 @@ void AliTOFRawDataRead(Int_t iEvent)
   ftxt.close();
 
 }
+