]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/UPGRADE/AliITSUSDigit.cxx
Added classes for UPC analysis
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUSDigit.cxx
index 70ebb8de7f154ef57fe7f4199c39fbde83ad4bf5..67ce41d18b2bc771eb633d2410d04312358753b9 100644 (file)
 #include "AliITSUSDigit.h"
 ClassImp(AliITSUSDigit)
 
+using std::istream;
+using std::swap;
+using namespace TMath;
+
 // Addapted from ITS/AliITSpListItem, ruben.shahoyan@cern.ch
 
 //______________________________________________________________________
 AliITSUSDigit::AliITSUSDigit() 
-: fModule(0)
+: fChip(0)
   ,fNTracks(0)
+  ,fROCycle(0)
   ,fTsignal(0.0)
   ,fNoise(0.0)
   ,fSignalAfterElect(0.0)
 {
   // Default constructor
+  for (int i=kBuffSize;i--;) {
+    fTrack[i] = -2;
+    fHits[i] = -1;
+    fSignal[i] = 0;
+  }
 }
 
 //______________________________________________________________________
-AliITSUSDigit::AliITSUSDigit(UInt_t module,UInt_t index,Double_t noise) 
-  :fModule(module)
+AliITSUSDigit::AliITSUSDigit(UInt_t chip,UInt_t index,Double_t noise,Int_t roCycle) 
+  :fChip(chip)
   ,fNTracks(0)
+  ,fROCycle(roCycle)
   ,fTsignal(0.0)
   ,fNoise(noise)
   ,fSignalAfterElect(0.0)
@@ -48,9 +59,10 @@ AliITSUSDigit::AliITSUSDigit(UInt_t module,UInt_t index,Double_t noise)
 }
 
 //______________________________________________________________________
-AliITSUSDigit::AliITSUSDigit(Int_t track,Int_t hit,UInt_t module,UInt_t index,Double_t signal)
-  :fModule(module)
+AliITSUSDigit::AliITSUSDigit(Int_t track,Int_t hit,UInt_t chip,UInt_t index,Double_t signal,Int_t roCycle)
+  :fChip(chip)
   ,fNTracks(1)
+  ,fROCycle(roCycle)
   ,fTsignal(signal)
   ,fNoise(0.0)
   ,fSignalAfterElect(0.0)
@@ -59,9 +71,10 @@ AliITSUSDigit::AliITSUSDigit(Int_t track,Int_t hit,UInt_t module,UInt_t index,Do
   // Inputs:
   //    Int_t track     The track number which produced this signal
   //    Int_t hit       The hit number which produced this signal
-  //    Int_t module    The module where this signal occurred
+  //    Int_t chip    The chip where this signal occurred
   //    Int_t index     The cell index where this signal occurred
   //    Double_t signal The value of the signal (ionization)
+  //    Int_t roCycle   Read-Out cycle
   SetUniqueID(index);
   fTrack[0]  = track;
   fHits[0]   = hit;
@@ -88,8 +101,9 @@ AliITSUSDigit& AliITSUSDigit::operator=(const AliITSUSDigit &source)
 //______________________________________________________________________
 AliITSUSDigit::AliITSUSDigit(const AliITSUSDigit &source) 
   :TObject(source)
-  ,fModule(source.fModule)
+  ,fChip(source.fChip)
   ,fNTracks(source.fNTracks)
+  ,fROCycle(source.fROCycle)
   ,fTsignal(source.fTsignal)
   ,fNoise(source.fNoise)
   ,fSignalAfterElect(source.fSignalAfterElect)
@@ -110,17 +124,17 @@ void AliITSUSDigit::AddSignal(Int_t track,Int_t hit,Double_t signal)
   // Inputs:
   //    Int_t track     The track number which produced this signal
   //    Int_t hit       The hit number which produced this signal
-  //    Int_t module    The module where this signal occurred
+  //    Int_t chip    The chip where this signal occurred
   //    Int_t index     The cell index where this signal occurred
   //    Double_t signal The value of the signal (ionization)
   Int_t    i,j;
   Bool_t   flg=kFALSE;
   //
-  if (TMath::Abs(signal)>2147483647.0) {
+  if (Abs(signal)>2147483647.0) {
     //PH 2147483647 is the max. integer
     //PH This apparently is a problem which needs investigation
     AliWarning(Form("Too big or too small signal value %f",signal));
-    signal = TMath::Sign((Double_t)2147483647,signal);
+    signal = Sign((Double_t)2147483647,signal);
   }
   //
   fTsignal += signal; // Keep track of sum signal.
@@ -148,19 +162,20 @@ void AliITSUSDigit::AddSignal(Int_t track,Int_t hit,Double_t signal)
   }
   //
   // new entry add it in order.
-  // if this signal is <= smallest then don't add it.
-  if (fNTracks==(kBuffSize-1) && signal <= fSignal[kBuffSize-1]) return;
+  if (fNTracks==(kBuffSize-1) && signal<=fSignal[kBuffSize-1]) return;   // if this signal is <= smallest then don't add it.
   //
   for (i=fNTracks;i--;) {
-    if (signal > fSignal[i]) {
-      fSignal[i+1] = fSignal[i];
-      fTrack[i+1]  = fTrack[i];
-      fHits[i+1]   = fHits[i];
+    if (signal > fSignal[i]) { // shift smaller signals to the end of the list
+      if (i<kBuffSize-2) {     // (if there is a space...)
+       fSignal[i+1] = fSignal[i];
+       fTrack[i+1]  = fTrack[i];
+       fHits[i+1]   = fHits[i];
+      }
     } else {
       fSignal[i+1] = signal;
       fTrack[i+1]  = track;
       fHits[i+1]   = hit;
-      fNTracks++;
+      if (fNTracks<kBuffSize-1) fNTracks++;
       return; // put it in the right place, now exit.
     } //  end if
   } // end if; end for i
@@ -177,7 +192,7 @@ void AliITSUSDigit::AddSignal(Int_t track,Int_t hit,Double_t signal)
 void AliITSUSDigit::Add(const AliITSUSDigit *pl)
 {
   // Adds the contents of pl to this
-  // pl could come from different module and index 
+  // pl could come from different chip and index 
   Double_t sigT = 0.0;
   for(int i=pl->GetNTracks();i--;) {
     double sig = pl->GetSignal(i); 
@@ -225,7 +240,7 @@ Int_t AliITSUSDigit::Compare(const TObject* obj) const
 void AliITSUSDigit::Print(Option_t*) const 
 {
   // print itself
-  printf("Mod: %4d Index:%7d Ntr:%2d | TotSignal:%.2e Noise:%.2e |",
-        fModule,GetUniqueID(),fNTracks,fTsignal,fNoise);
+  printf("Mod: %4d Index:%7d Ntr:%2d | TotSignal:%.2e Noise:%.2e ROCycle: %d|",
+        fChip,GetUniqueID(),fNTracks,fTsignal,fNoise,fROCycle);
   for (int i=0;i<fNTracks;i++) printf("%d(%.2e) |",fTrack[i],fSignal[i]); printf("\n");
 }