additional RecPoints implemented
authoralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 31 Mar 2006 12:21:19 +0000 (12:21 +0000)
committeralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 31 Mar 2006 12:21:19 +0000 (12:21 +0000)
START/AliSTARTDigitizer.cxx
START/AliSTARTParameters.cxx
START/AliSTARTParameters.h
START/AliSTARTRawData.cxx
START/AliSTARTRawData.h
START/AliSTARTRawReader.cxx
START/AliSTARTRawReader.h
START/AliSTARTRecPoint.cxx
START/AliSTARTRecPoint.h
START/AliSTARTReconstructor.cxx

index ac40fe8..3e428a7 100644 (file)
@@ -129,13 +129,12 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
   Int_t countE[24];
   Int_t volume, pmt, trCFD, trLED; 
   Float_t sl, qt;
-  Int_t  bestRightTDC, bestLeftTDC;
+  Int_t  bestRightTDC, bestLeftTDC, qtCh;
   Float_t time[24], besttime[24], timeGaus[24] ;
   //  Float_t channelWidth=25.; //ps
     //Q->T-> coefficients !!!! should be asked!!!
   Float_t gain[24],timeDelayCFD[24], timeDelayLED[24];
   Int_t threshold =50; //photoelectrons
-  Int_t qtThreshold=13, qtCh;
   Float_t zdetA, zdetC;
   TObjArray slewingLED;
   AliSTARTParameters* param = AliSTARTParameters::Instance();
@@ -176,7 +175,6 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
     fADC -> Reset();
     fADC0 -> Reset();
     ftimeLED ->Reset();
-    cout<<" before reading event "<<endl;
     for (Int_t i0=0; i0<24; i0++)
       {
        time[i0]=besttime[i0]=timeGaus[i0]=99999; countE[i0]=0;
@@ -226,12 +224,11 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
          } //photoelectron accept 
        } //hits loop
     } //track loop
-    cout<<" hits was read "<<endl;
     
     //spread time right&left by 25ps   && besttime
-     Float_t c = 0.0299792; // cm/ps
-
-   Float_t koef=(zdetA-zdetC)/c; //correction position difference by cable
+    Float_t c = 0.0299792; // cm/ps
+    
+    Float_t koef=(zdetA-zdetC)/c; //correction position difference by cable
     for (Int_t ipmt=0; ipmt<12; ipmt++){
       if(countE[ipmt] > threshold) {
        timeGaus[ipmt]=gRandom->Gaus(time[ipmt],25)+koef;
@@ -240,7 +237,6 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
          pmtBestLeft=ipmt;}
       }
     }
-    cout<<"left "<<besttimeleft<<" "<<pmtBestLeft<<" koef "<<koef<<endl;
     for ( Int_t ipmt=12; ipmt<24; ipmt++){
       if(countE[ipmt] > threshold) {
        timeGaus[ipmt]=gRandom->Gaus(time[ipmt],25); 
@@ -249,28 +245,21 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
          pmtBestRight=ipmt;}
       }        
     }
-    cout<<"right"<<besttimeright<<" "<<pmtBestRight<<endl;
   
    //folding with alignmentz position distribution  
 
-    //    Float_t koef=(zdetA-zdetC)/c;
-    //  Float_t  besttimeleftR= besttimeleft;
-    // besttimeleft=koef+besttimeleft;
-    cout<<"  besttimeleft "<< besttimeleft<<" delay "<< timeDelayCFD[pmtBestLeft]<<" channelWidth "<<channelWidth<<endl;
     bestLeftTDC=Int_t ((besttimeleft+1000*timeDelayCFD[pmtBestLeft])
                       /channelWidth);
-    cout<<" bestLeftTDC "<<bestLeftTDC<<" delay "<<timeDelayCFD[pmtBestLeft]<<endl;
     bestRightTDC=Int_t ((besttimeright+1000*timeDelayCFD[pmtBestLeft])
                        /channelWidth);
-    timeDiff=Int_t (((besttimeleft+1000*timeDelayCFD[pmtBestLeft])-
-                   (besttimeright+1000*timeDelayCFD[pmtBestLeft])
-                   )/channelWidth);
+    timeDiff=Int_t (((besttimeleft-besttimeright)+1000*timeDelayCFD[pmtBestRight])
+                   /channelWidth);
     meanTime=Int_t (((besttimeright+1000*timeDelayCFD[pmtBestLeft]+
                      besttimeleft+1000*timeDelayCFD[pmtBestLeft])/2.)
                    /channelWidth);
-    cout<<"bestLeftTDC"<<bestLeftTDC<<" bestRightTDC "<< bestRightTDC<<
-      " timeDiff "<<timeDiff<<" meanTime= "<<meanTime<<endl;   
-    AliDebug(2,Form(" time in ns %f ", besttimeleft));
+     AliDebug(2,Form(" time in ns %f %f  ",besttimeleft,besttimeright ));
     for (Int_t i=0; i<24; i++)
       {
                Float_t  al = countE[i]; 
@@ -292,8 +281,6 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
          ftimeCFD->AddAt(Int_t (trCFD),i);
          ftimeLED->AddAt(trLED,i); 
          sumMult += Int_t ((al*gain[i]/ph2Mip)*50) ;
-         cout<<al<<" "<<qt<<" trCFD "<<trCFD<<" sl "<<sl<<" trLED "<<trLED<<
-           " qtThreshold "<<qtThreshold<<"  qtCh "<< qtCh<<endl;
        }
       } //pmt loop
 
@@ -316,13 +303,10 @@ void AliSTARTDigitizer::Exec(Option_t* /*option*/)
     fSTART  = (AliSTART*)outRL ->GetAliRun()->GetDetector("START");
     // Make a branch in the tree 
     fSTART->MakeBranch("D");
-    //     treeD->Print();
      treeD->Fill();
-     cout<<"   treeD->Fill(); "<<endl;
   
      pOutStartLoader->WriteDigits("OVERWRITE");
      
-     cout<<"  pOutStartLoader->WriteDigits "<<endl;
      fSTART->ResetDigits();
      pOutStartLoader->UnloadDigits();
      
index c16d022..cdc6e6f 100644 (file)
@@ -67,6 +67,7 @@ AliSTARTParameters::AliSTARTParameters()
       SetVariableDelayLine(ipmt);
       SetSlewingLED(ipmt);
       SetPh2Mip();      
+      SetmV2Mip();      
       SetChannelWidth();
       SetmV2channel();
       SetGain();
@@ -87,7 +88,6 @@ AliSTARTParameters::Init()
   //  if (fIsInit) return;
   
   AliCDBManager* cdb      = AliCDBManager::Instance();
-  cout<<" AliSTARTParameters::Init() CDB "<<cdb<<endl;
   AliCDBStorage *stor = cdb->GetStorage("local://$ALICE_ROOT");
   fCalibentry  = stor->Get("START/Calib/Gain_TimeDelay_Slewing_Walk",1);
   if (fCalibentry){
@@ -99,7 +99,6 @@ AliSTARTParameters::Init()
    fgAlignData  = (AliSTARTAlignData*) fAlignentry->GetObject();
    cout<<" got align data "<<endl;
   }
-  cout<<" in INT :: calib "<<fCalibentry<<" align "<<fAlignentry<<endl;
 
   fIsInit = kTRUE;
 }
index 9a25e5c..8caf036 100644 (file)
@@ -30,6 +30,7 @@ public:
   void Init();  
   // Set various `Fixed' parameters 
   void SetPh2Mip(Int_t r=500)          { fPh2Mip = r; }
+  void SetmV2Mip(Int_t r=50)          { fmV2Mip = r; }
   void SetChannelWidth(Int_t s=25)   { fChannelWidth = s;}
   void SetmV2channel(Int_t size=320) { fmV2Channel = size; }
   void SetQTmin(Int_t qt=13) {fQTmin = qt;}
@@ -57,6 +58,7 @@ public:
 
   // Get `Fixed' various parameters
   Int_t GetPh2Mip()          const { return fPh2Mip; }
+  Int_t GetmV2Mip()          const { return fmV2Mip; }
   Int_t GetChannelWidth()     const { return fChannelWidth; }
   Int_t GetmV2channel()     const { return fmV2Channel; }
   Int_t GetQTmin() const {return fQTmin;}
@@ -96,6 +98,7 @@ protected:
   Bool_t fIsInit;               
   Float_t  fSTARTzPosition[2] ;  // z-position of the two STARTs
   Int_t   fPh2Mip;            // # photoelectrons per MIP in radiator
+  Int_t   fmV2Mip;            // # mV per MIP in radiator
   Int_t        fChannelWidth;          // channel width in ns   
   Int_t        fmV2Channel;     // ADC mv  2  channel # (200000ps/(25*25).
   Int_t fQTmin;                 //min  time for QTC
index 759c8ce..4c4494d 100644 (file)
@@ -116,7 +116,7 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
   UInt_t word;
   UInt_t baseWord=0;
   Int_t error=0;
-  AliBitPacking *pack ;
+
     // Get the digits array
 
   fDigits->GetTime(*fTimeCFD);
@@ -132,17 +132,16 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
      // DDL 1 0-5 -#PMT, 6-31 - empty
     //LED
      word=det;;
-     pack->PackWord(baseWord,word, 0, 5); 
+     PackWord(baseWord,word, 0, 8); 
      fIndex++;
      buf[fIndex]=baseWord;
 
      word=0;
      baseWord=0;
      word=error;
-     pack->PackWord(baseWord,word,0, 7); // Error flag
+     PackWord(baseWord,word,0, 7); // Error flag
      word=timeLED;
-     cout<<det<<" led "<<timeLED<<" "<<word<<" ";
-    pack->PackWord(baseWord,word,8,31); // time-of-flight
+     PackWord(baseWord,word,8,31); // time-of-flight
      fIndex++;
      buf[fIndex]=baseWord;
      word=0;
@@ -156,16 +155,15 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
      word=0;
      baseWord=0;
      word=det+24;
-     pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+     PackWord(baseWord,word, 0, 8); // number of PMT on the right side
      fIndex++;
      buf[fIndex]=baseWord;
      word=0;
      baseWord=0;
      word=error;
-    pack-> PackWord(baseWord,word,0, 7); // Error flag
+     PackWord(baseWord,word,0, 7); // Error flag
      word=timeCFD;
-     cout<<det<<" CFD "<<timeCFD<<" "<<word<<" ";
-     pack->PackWord(baseWord,word,8,31); // time-of-flight
+     PackWord(baseWord,word,8,31); // time-of-flight
      fIndex++;
      buf[fIndex]=baseWord;
      word=0;
@@ -176,15 +174,14 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
     //conver ADC to time (preliminary algorithm)
     Int_t qtc=fADC->At(det);
     word=det+48;
-    pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+     PackWord(baseWord,word, 0, 8); // number of PMT on the right side
     fIndex++;
     buf[fIndex]=baseWord;
     baseWord=0;
     word=error;
-    pack->PackWord(baseWord,word,0, 7); // Error flag
+    PackWord(baseWord,word,0, 7); // Error flag
     word=qtc;
-    cout<<det<<" "<<fIndex<<" adc1 "<<word<<" ";
-    pack->PackWord(baseWord,word,8,31); // Q->Time
+    PackWord(baseWord,word,8,31); // Q->Time
     fIndex++;
     buf[fIndex]=baseWord;
     word=0;
@@ -200,15 +197,14 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
      //Amplified  ADC -> TDC 
     
     word=det+72;
-    pack->PackWord(baseWord,word, 0, 5); // number of PMT on the right side
+    PackWord(baseWord,word, 0, 8); // number of PMT on the right side
     fIndex++;
     buf[fIndex]=baseWord;
     baseWord=0;
     word=error;
-    pack->PackWord(baseWord,word,0, 7); // Error flag
+    PackWord(baseWord,word,0, 7); // Error flag
     word=qtcAmp;
-    cout<<det<<" "<<fIndex<<" adc2 "<<word<<" ";
-    pack->PackWord(baseWord,word,8,31); // Q->T amplified
+    PackWord(baseWord,word,8,31); // Q->T amplified
     fIndex++;
     buf[fIndex]=baseWord;
     
@@ -221,83 +217,79 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
   baseWord=0;
   fIndex++;
   word=97;
-  pack->PackWord(baseWord,word, 0, 5); // ?????????????????
+  PackWord(baseWord,word, 0, 8); // ?????????????????
   buf[fIndex]=baseWord;
   baseWord=0;
   word=error;
-  pack->PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->MeanTime();
-  cout<<fIndex<<" "<<" mean "<< word<<endl;
-  pack->PackWord(baseWord,word,8,31); // MEANER
+  PackWord(baseWord,word,8,31); // MEANER
   fIndex++;
   buf[fIndex]=baseWord;
-    cout<<fIndex<<" meaner "<<word<<" ";
 
 
 
   // besttime right & left
   word=98;
- pack-> PackWord(baseWord,word, 0, 5); // T0-A sign
+  PackWord(baseWord,word, 0, 8); // T0-A sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
   word=error;
-  pack->PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeRight();
-  pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-A
+  PackWord(baseWord,word,8,31); // time-of-flight T0-A
   fIndex++;
   buf[fIndex]=baseWord;
-   cout<<fIndex<<" T0-A "<<word<<" ";
 
   word=99;
-   pack->PackWord(baseWord,word, 0, 5); // T0-C sign
+  PackWord(baseWord,word, 0, 8); // T0-C sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
-  pack->PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeLeft();
- pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-C 
+  PackWord(baseWord,word,8,31); // time-of-flight T0-C 
   fIndex++;
   buf[fIndex]=baseWord;
 
-   cout<<fIndex<<" T0-C "<<word<<" ";
   // time difference
   word=100;
- pack-> PackWord(baseWord,word, 0, 5); // TVDS sign
+  PackWord(baseWord,word, 0, 8); // TVDS sign
   word=fDigits->TimeDiff();
- pack-> PackWord(baseWord,word, 6, 31); // T0 vertex 
+  //  PackWord(baseWord,word, 6, 31); // T0 vertex 
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
-  pack->PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->TimeDiff();
-  pack->PackWord(baseWord,word,8,31); // T0verex
+  PackWord(baseWord,word,8,31); // T0verex
   fIndex++;
   buf[fIndex]=baseWord;
-  cout<<fIndex<<" diff "<<word<<endl;
 
   // multiplicity 
   
-   Int_t mult=fDigits->SumMult();
+  Int_t mult=fDigits->SumMult();
   word=100;
- pack-> PackWord(baseWord,word, 0, 5); 
+  PackWord(baseWord,word, 0, 8); 
   word=mult;
- pack-> PackWord(baseWord,word, 6, 31); // sum amplitude
+  PackWord(baseWord,word, 6, 31); // sum amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   
   baseWord=0;
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=mult;
- pack-> PackWord(baseWord,word,8,31); // time amplitude
+  PackWord(baseWord,word,8,31); // time amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   
@@ -306,67 +298,64 @@ void AliSTARTRawData::GetDigits(AliSTARTdigit *fDigits, UInt_t *buf)
   // trigger channels
    // besttime right & left
   word=101;
-  pack->PackWord(baseWord,word, 0, 5); // T0-A sign
+  PackWord(baseWord,word, 0, 8); // T0-A sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeRight();
- pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-A
+  PackWord(baseWord,word,8,31); // time-of-flight T0-A
   fIndex++;
   buf[fIndex]=baseWord;
-   cout<<fIndex<<" T0-A "<<word<<" ";
-
   word=102;
- pack-> PackWord(baseWord,word, 0, 5); // T0-C sign
+  PackWord(baseWord,word, 0, 8); // T0-C sign
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->BestTimeLeft();
- pack-> PackWord(baseWord,word,8,31); // time-of-flight T0-C 
+  PackWord(baseWord,word,8,31); // time-of-flight T0-C 
   fIndex++;
   buf[fIndex]=baseWord;
 
-   cout<<fIndex<<" T0-C "<<word<<" ";
   // time difference
   word=103;
- pack-> PackWord(baseWord,word, 0, 5); // TVDS sign
+  PackWord(baseWord,word, 0, 8); // TVDS sign
   word=fDigits->TimeDiff();
- pack-> PackWord(baseWord,word, 6, 31); // T0 vertex 
+   PackWord(baseWord,word, 6, 31); // T0 vertex 
   fIndex++;
   buf[fIndex]=baseWord;
 
   baseWord=0;
 
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=fDigits->TimeDiff();
- pack-> PackWord(baseWord,word,8,31); // T0verex
+  PackWord(baseWord,word,8,31); // T0verex
   fIndex++;
   buf[fIndex]=baseWord;
-  cout<<fIndex<<" diff "<<word<<endl;
 
   // multiplicity 
   
-   mult=fDigits->SumMult();
+  mult=fDigits->SumMult();
   word=104;
- pack-> PackWord(baseWord,word, 0, 5); 
+  PackWord(baseWord,word, 0, 8); 
   word=mult;
-pack->  PackWord(baseWord,word, 6, 31); // sum amplitude
+  PackWord(baseWord,word, 6, 31); // sum amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   
   baseWord=0;
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+ PackWord(baseWord,word,0, 7); // Error flag
   word=mult;
- pack-> PackWord(baseWord,word,8,31); // time amplitude
+ PackWord(baseWord,word,8,31); // time amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   
@@ -374,29 +363,27 @@ pack->  PackWord(baseWord,word, 6, 31); // sum amplitude
   
    mult=fDigits->SumMult();
   word=105;
- pack-> PackWord(baseWord,word, 0, 5); 
+  PackWord(baseWord,word, 0, 8); 
   word=mult;
- pack-> PackWord(baseWord,word, 6, 31); // sum amplitude
+  PackWord(baseWord,word, 6, 31); // sum amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   
   baseWord=0;
   word=error;
- pack-> PackWord(baseWord,word,0, 7); // Error flag
+  PackWord(baseWord,word,0, 7); // Error flag
   word=mult;
- pack-> PackWord(baseWord,word,8,31); // time amplitude
+  PackWord(baseWord,word,8,31); // time amplitude
   fIndex++;
   buf[fIndex]=baseWord;
   cout<<endl;
-
 }
 
-//-------------------------------------------------------------------------------------
-/*
+//-----------------------------------------------------------------------------------
+
 void AliSTARTRawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit)
 {
-  //This method packs a word into the Baseword buffer starting form the "StartBit" 
+  //This method packs a word into the Baseword buffer starting form the "StartBit"
   //and tacking StopBit-StartBit+1 bits
   UInt_t dummyWord,offSet;
   Int_t  length;
@@ -407,7 +394,7 @@ void AliSTARTRawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, In
 
   if(Word > sum){
     Error("PackWord", "Word to be filled is not within desired length\n"
-         "Word:%d Start bit:%d Stop Bit:%d",Word,StartBit,StopBit);
+          "Word:%d Start bit:%d Stop Bit:%d",Word,StartBit,StopBit);
     return;
   }
   offSet=sum;
@@ -422,10 +409,9 @@ void AliSTARTRawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, In
   dummyWord<<=StartBit;
   dummyWord+=sum;
   BaseWord=BaseWord&dummyWord;
-
   return;
 }
-*/
+
 //---------------------------------------------------------------------------------------
 
 Int_t AliSTARTRawData::RawDataSTART(AliSTARTdigit *fDigits)
index 68e4e0e..48db767 100644 (file)
@@ -33,7 +33,7 @@ class AliSTARTRawData : public TObject {
   void  GetDigits(AliSTARTdigit *fDigits, UInt_t *buf);
   //This method formats and stores in buf all the digits of a TOF module
 
-  // void  PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit);
+   void  PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit);
   //This method stores the value of the variable Word of StopBit-StartBit+1 bits 
   //in BaseWord, starting from the bit StartBit
 
index b4234ac..3f5c09d 100644 (file)
@@ -26,23 +26,8 @@ ClassImp(AliSTARTRawReader)
 {
   // 
 }
-//------------------------------------------------------------------------------------------------
 
-UInt_t AliSTARTRawReader::UnpackWord(UInt_t packedWord, Int_t startBit, Int_t stopBit)
-{
-  //This method unpacks a words of StopBit-StartBit+1 bits starting from "StopBits"  
-  UInt_t word;
-  UInt_t offSet;
-  Int_t length;
-  length=stopBit-startBit+1;
-  offSet=(UInt_t)TMath::Power(2,length)-1;
-  offSet<<=startBit;
-  word=packedWord&offSet;
-  word>>=startBit;
-  return word;
-}
-//---------------------------------------------------------------------------------------
-void AliSTARTRawReader::NextThing()
+Bool_t  AliSTARTRawReader::Next()
 {
 // read the next raw digit
 // returns kFALSE if there is no digit left
@@ -56,30 +41,31 @@ void AliSTARTRawReader::NextThing()
   TArrayI *chargeTDC2 = new TArrayI(24);
 
   fRawReader->Reset();
-  fRawReader->Select(13);
+  fRawReader->Select(13,0,1);
  
+  
   if (!fRawReader->ReadHeader()){
     Error("ReadSTARTRaw","Couldn't read header");
-    return;
+    return kFALSE;
   }
   AliSTARTdigit *fDigits = new AliSTARTdigit(); 
   fTree->Branch("START","AliSTARTdigit",&fDigits,400,1);
-
-  fRawReader->ReadNextInt(word);
+  if (!fRawReader->ReadNextInt(word)) return kFALSE;
+   
   for (Int_t i=0; i<24; i++) //time LED
     {
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=pack->UnpackWord(word,0,5);
+       unpackword=pack->UnpackWord(word,0,8);
       pmt=unpackword; 
+     
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
       unpackword=pack->UnpackWord(word,8,31);
       time=unpackword;
-      timeTDC1->AddAt(time,pmt);
-      cout<<i<<" Led "<<time<<" ";
+      timeTDC1->AddAt(time,i);
       word=0;
       unpackword=0;
     }
@@ -89,15 +75,14 @@ void AliSTARTRawReader::NextThing()
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=pack->UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,8);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
       unpackword=pack->UnpackWord(word,8,31);
       time=unpackword;
-      timeTDC2->AddAt(time,pmt);
-      cout<<i<<" CFD "<<time<<" ";
+      timeTDC2->AddAt(time,pmt-24);
       word=0;
       unpackword=0;
     } 
@@ -109,15 +94,14 @@ void AliSTARTRawReader::NextThing()
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
-      unpackword=pack->UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,8);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
       unpackword= pack->UnpackWord(word,8,31);
       adc=unpackword; //
-      chargeTDC1->AddAt(adc,pmt);
-      cout<<i<<" amp1 "<<adc<<" ";
+      chargeTDC1->AddAt(adc,pmt-48);
 
       word=0;
       unpackword=0;
@@ -130,15 +114,14 @@ void AliSTARTRawReader::NextThing()
       unpackword=0;
     
       fRawReader->ReadNextInt(word);
-      unpackword=pack->UnpackWord(word,0,5);
+      unpackword=pack->UnpackWord(word,0,8);
       pmt=unpackword;
       word=0;
       unpackword=0;
       fRawReader->ReadNextInt(word);
       unpackword= pack->UnpackWord(word,8,31);
       adc=unpackword;  
-      chargeTDC2->AddAt(adc,pmt);
-       cout<<i<<" amp amp "<<adc<<" ";
+      chargeTDC2->AddAt(adc,pmt-72);
      }
    cout<<endl;
    fDigits->SetTime(*timeTDC2);
@@ -151,7 +134,7 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
     
    fRawReader->ReadNextInt(word);
-   unpackword=pack->UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,8);
    pmt=unpackword;
 
    word=0;
@@ -167,7 +150,7 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=pack->UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,8);
    pmt=unpackword;
 
    word=0;
@@ -184,7 +167,7 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
      
    fRawReader->ReadNextInt(word);
-   unpackword=pack->UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,8);
    pmt=unpackword;
 
    word=0;
@@ -201,7 +184,7 @@ void AliSTARTRawReader::NextThing()
    unpackword=0;
    
    fRawReader->ReadNextInt(word);
-   unpackword=pack->UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,8);
    pmt=unpackword;
 
    word=0;
@@ -216,7 +199,7 @@ void AliSTARTRawReader::NextThing()
    word=0;
    unpackword=0;
    fRawReader->ReadNextInt(word);
-   unpackword=pack->UnpackWord(word,0,5);
+   unpackword=pack->UnpackWord(word,0,8);
    pmt=unpackword;
    word=0;
    unpackword=0;
@@ -224,8 +207,9 @@ void AliSTARTRawReader::NextThing()
    unpackword=pack->UnpackWord(word,8,31);
    time=unpackword;
    fDigits->SetSumMult(time);   
-   
+      
     fTree->Fill();
 
+    return kTRUE;
 }
  
index ee6dbfe..b9c9ebe 100644 (file)
@@ -16,7 +16,8 @@ class AliSTARTRawReader : public TTask {
 
 
   UInt_t UnpackWord(UInt_t PackedWord, Int_t StartBit, Int_t StopBit); // unpack packed words
-  void NextThing(); //read next raw digit
+  // void NextThing(); //read next raw digit
+  Bool_t  Next(); //read next raw digit
   
   protected :
 
index cf2ea5d..4716024 100644 (file)
@@ -34,7 +34,7 @@
 ClassImp(AliSTARTRecPoint)
 
 //------------------------------------
- AliSTARTRecPoint::AliSTARTRecPoint() : TObject()
+  AliSTARTRecPoint::AliSTARTRecPoint() : TObject()
 {
   //ctor
   fTimeAverage=99999;
@@ -43,5 +43,5 @@ ClassImp(AliSTARTRecPoint)
   fVertexPosition=99999;
   fMultA=0;
   fMultC=0;
-  fMult=0;
+  for (Int_t i=0; i<24; i++) { fTime[i]=0; fADC[i]=0; fADCLED[i]=0;}
 }
index 2e735c0..6b0fab4 100644 (file)
@@ -5,7 +5,7 @@
 
 /* $Id$ */
 #include <TObject.h>
-class TArrayI;
+
 
 //___________________________________________
 class AliSTARTRecPoint: public TObject  {
@@ -18,16 +18,22 @@ class AliSTARTRecPoint: public TObject  {
     Int_t  GetBestTimeLeft() {return fTimeBestLeft ;}
     Int_t GetMultC() {return fMultC;}
     Int_t GetMultA() {return fMultA;}
-    Int_t GetMult() {return fMult;}
     Float_t  GetVertex() {return fVertexPosition;}
 
+
     void SetMeanTime(Int_t time) {fTimeAverage=time;}
     void SetTimeBestRight( Int_t time) {fTimeBestRight = time;}
     void SetTimeBestLeft( Int_t time) {fTimeBestLeft = time;}
     void SetVertex( Float_t vertex) {fVertexPosition= vertex;}
     void SetMultC(Int_t mult) {fMultC = mult;}
     void SetMultA(Int_t mult) {fMultA = mult;}
-    void SetMult(Int_t mult) {fMult = mult;}
+
+    void SetTime (Int_t ipmt, Float_t time) { fTime[ipmt] = time;}
+    Float_t GetTime (Int_t ipmt) { return fTime[ipmt];}
+   void SetAmp (Int_t ipmt, Float_t adc) { fADC[ipmt] = adc;}
+    Float_t GetAmp (Int_t ipmt) { return fADC[ipmt];}
+   void SetAmpLED (Int_t ipmt, Float_t adc) { fADCLED[ipmt] = adc;}
+    Float_t AmpLED (Int_t ipmt) { return fADCLED[ipmt];}
 
   private: 
     //    Float_t fProcessKoef;  // for pp fProcessKoef=1 ; for Pb-Pb - 0.001
@@ -37,9 +43,13 @@ class AliSTARTRecPoint: public TObject  {
     Int_t fTimeBestLeft;    //TOF first particle on the left
     Int_t fMultC; // multiplicity on the 
     Int_t fMultA; // multiplicity on the 
-    Int_t fMult; // multiplicity A && C 
  
-    ClassDef(AliSTARTRecPoint,2)  //Digit (Header) object for set:START
+    Float_t fTime[24];    // array's TDC
+    Float_t fADC[24];    // array's ADC
+    Float_t fADCLED[24];    // array's ADC
+
+
+    ClassDef(AliSTARTRecPoint,3)  //Digit (Header) object for set:START
 };
 
 
index b52057e..8164ba4 100644 (file)
@@ -39,6 +39,7 @@
 #include "AliCDBEntry.h"
 
 #include <TArrayI.h>
+#include <TGraph.h>
 
 ClassImp(AliSTARTReconstructor)
 AliSTARTAlignData* AliSTARTReconstructor::fgAlignData = 0;
@@ -49,7 +50,9 @@ AliSTARTCalibData* AliSTARTReconstructor::fgCalibData = 0;
   //START raw data-> digits conversion
  // reconstruct time information from raw data
   AliSTARTRawReader myrawreader(rawReader,digitsTree);
-  myrawreader.NextThing();
+  // myrawreader.NextThing();
+   myrawreader.Next();
+   cout<<" AliSTARTReconstructor::ConvertDigits "<< myrawreader.Next()<<endl;
 }
   void AliSTARTReconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const
 {
@@ -66,22 +69,22 @@ AliSTARTCalibData* AliSTARTReconstructor::fgCalibData = 0;
   TArrayI * fTimeCFD = new TArrayI(24); 
   TArrayI * fADCLED = new TArrayI(24); 
   TArrayI * fTimeLED = new TArrayI(24); 
-  cout<<" fTimeCFD "<<fTimeCFD<<endl;
 
   AliSTARTParameters* param = AliSTARTParameters::Instance();
   param->Init();
-  Int_t ph2MIP = param->GetPh2Mip();     
+
+  Int_t mV2Mip = param->GetmV2Mip();     
   Int_t channelWidth = param->GetChannelWidth() ;  
   
-    for (Int_t i=0; i<24; i++){
-      timeDelayCFD[i] = param->GetTimeDelayCFD(i);
-      timeDelayLED[i] = param->GetTimeDelayLED(i);
-      gain[i] = param->GetGain(i);
-      slewingLED.AddAtAndExpand(param->GetSlew(i),i);
-     }
-    zdetC = param->GetZposition(0);
-    zdetA  = param->GetZposition(1);
-  
+  for (Int_t i=0; i<24; i++){
+    timeDelayCFD[i] = param->GetTimeDelayCFD(i);
+    timeDelayLED[i] = param->GetTimeDelayLED(i);
+    gain[i] = param->GetGain(i);
+    slewingLED.AddAtAndExpand(param->GetSlew(i),i);
+  }
+  zdetC = param->GetZposition(0);
+  zdetA  = param->GetZposition(1);
+    
   AliDebug(1,Form("Start DIGITS reconstruction "));
  
   TBranch *brDigits=digitsTree->GetBranch("START");
@@ -98,57 +101,58 @@ AliSTARTCalibData* AliSTARTReconstructor::fgCalibData = 0;
   fDigits->GetTimeAmp(*fTimeLED);
   fDigits->GetADCAmp(*fADCLED);
 
+  Float_t besttimeright=999999;
+  Float_t besttimeleft=999999;
+  Int_t pmtBestRight=99999;
+  Int_t pmtBestLeft=99999;
+  Float_t timeDiff=999999, meanTime=0;
+  
+  AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
+  clustersTree->Branch( "START", "AliSTARTRecPoint" ,&frecpoints, 405,1);
+
   Float_t time[24], adc[24];
   for (Int_t ipmt=0; ipmt<24; ipmt++)
     {
       
          if(fTimeCFD->At(ipmt)>0 ){
         time[ipmt] = channelWidth *( fTimeCFD->At(ipmt)) - 1000*timeDelayCFD[ipmt];
-        cout<<ipmt<<" "<<time[ipmt];
         Float_t adc_digPs = channelWidth * Float_t (fADC->At(ipmt)) ;
-        //      cout<<"  adc_digmV "<< adc_digPs<<endl;
         adc[ipmt] = TMath::Exp(adc_digPs/1000) /gain[ipmt];
-        //      cout<<" adc"<<adc[ipmt]<<" inMIP "<<adc[ipmt]/50<< endl;
-         }
+        AliDebug(1,Form(" time %f ps,  adc %f mv in MIP %i\n ",
+                        time[ipmt], adc[ipmt], Int_t (adc[ipmt]/mV2Mip +0.5)));
+        frecpoints->SetTime(ipmt,time[ipmt]);
+        frecpoints->SetAmp(ipmt,adc[ipmt]);
+        }
     }
-
-  Int_t besttimeright=channelWidth * (fDigits->BestTimeRight());
-  Int_t besttimeleft=channelWidth * (fDigits->BestTimeLeft());
-  //folding with experimental time distribution
-  //  Float_t c = 29.9792; // cm/ns
-  Float_t c = 0.0299792; // cm/ps
-  Float_t lenr=TMath::Sqrt(zdetA*zdetA + 6.5*6.5);
-  Float_t lenl=TMath::Sqrt(zdetC*zdetC + 6.5*6.5);
-  Float_t timeDiff=channelWidth * (fDigits->TimeDiff());
-  Int_t meanTime=channelWidth * (fDigits->MeanTime());
-  Float_t ds=(c*(timeDiff)-(lenr-lenl))/2;
-  AliDebug(2,Form(" timediff in ns %f  real point%f",timeDiff,ds));
-  
-  /*
-  fDigits->GetSumMult(*fSumMult);
-  Int_t multipl[4]; 
- for (Int_t i=0; i<4; i++)
-    {
-      Float_t  mult=Float_t (fSumMult->At(i));
-      Float_t   realMultmV=TMath::Exp(mult/mV2channel);
-      multipl[i]=Int_t ((realMultmV/ph2mV)/500+0.5);
+    for (Int_t ipmt=0; ipmt<12; ipmt++){
+      if(time[ipmt] > 1 ) {
+       if(time[ipmt]<besttimeleft){
+         besttimeleft=time[ipmt]; //timeleft
+         pmtBestLeft=ipmt;
+       }
+      }
     }
-  */
-
-  //  AliDebug(2,Form(" multiplicity Abs side %i  multiplicity non-Abs side %i",multipl[1],multipl[2]));
-
-  AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
-  clustersTree->Branch( "START", "AliSTARTRecPoint" ,&frecpoints, 405,1);
-  frecpoints->SetTimeBestRight(besttimeright);
-  frecpoints->SetTimeBestLeft(besttimeleft);
-  frecpoints->SetVertex(ds);
-  frecpoints->SetMeanTime(meanTime);
-  /*
-  frecpoints->SetMult(multipl[0]);
-  frecpoints->SetMultA(multipl[2]);
-  frecpoints->SetMultC(multipl[1]);
-  */
+     for ( Int_t ipmt=12; ipmt<24; ipmt++){
+      if(time[ipmt] > 1) {
+       if(time[ipmt]<besttimeright) {
+         besttimeright=time[ipmt]; //timeright
+        pmtBestRight=ipmt;}
+      }
+    }
+    if(besttimeright !=999999)  frecpoints->SetTimeBestRight(Int_t(besttimeright));
+    if( besttimeleft != 999999 ) frecpoints->SetTimeBestLeft(Int_t(besttimeleft));
+    AliDebug(1,Form(" besttimeright %f ps,  besttimeleft %f ps",besttimeright, besttimeleft));
+    Float_t c = 0.0299792; // cm/ps
+    Float_t vertex = 0;
+    if(besttimeright !=999999 && besttimeleft != 999999 ){
+      timeDiff = besttimeright - besttimeleft;
+      meanTime = (besttimeright + besttimeleft)/2.;
+      vertex = c*(timeDiff); //-(lenr-lenl))/2;
+      AliDebug(1,Form("  timeDiff %f ps,  meanTime %f ps, vertex %f cm",timeDiff, meanTime,vertex ));
+      frecpoints->SetVertex(vertex);
+      frecpoints->SetMeanTime(Int_t(meanTime));
+      
+  }
   clustersTree->Fill();
 }
 
@@ -160,8 +164,6 @@ void AliSTARTReconstructor::FillESD(AliRunLoader* runLoader, AliESD *pESD) const
   Resonstruct digits to vertex position
   ****************************************************/
   
-  //  Float_t c = 0.3;  //speed of light mm/ps
-  // Float_t Zposition=0;
   
   if (!runLoader) {
     AliError("Reconstruct >> No run loader");
@@ -173,8 +175,8 @@ void AliSTARTReconstructor::FillESD(AliRunLoader* runLoader, AliESD *pESD) const
   AliSTARTLoader* pStartLoader = (AliSTARTLoader*) runLoader->GetLoader("STARTLoader");
  
   pStartLoader->LoadRecPoints("READ");
-  
-    TTree *treeR = pStartLoader->TreeR();
+
+  TTree *treeR = pStartLoader->TreeR();
   
    AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
     if (!frecpoints) {
@@ -183,20 +185,21 @@ void AliSTARTReconstructor::FillESD(AliRunLoader* runLoader, AliESD *pESD) const
   }
   
   AliDebug(1,Form("Start FillESD START"));
-   TBranch *brRec = treeR->GetBranch("START");
-    if (brRec) {
-      brRec->SetAddress(&frecpoints);
-    }else{
-      cerr<<"EXEC Branch START rec not found"<<endl;
-      exit(111);
-    } 
+  TBranch *brRec = treeR->GetBranch("START");
+  if (brRec) {
+    brRec->SetAddress(&frecpoints);
+  }else{
+    cerr<<"EXEC Branch START rec not found"<<endl;
+    // exit(111);
+    return;
+  } 
+    
     brRec->GetEntry(0);
     Float_t Zposition=frecpoints->GetVertex();
-    
     pESD->SetT0zVertex(Zposition);
+    pESD->Dump();
     pStartLoader->UnloadRecPoints();
-    
+   
 } // vertex in 3 sigma