]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSpList.cxx
Transition to NewIO
[u/mrichter/AliRoot.git] / ITS / AliITSpList.cxx
index 3059669be3b14005e165f81cd9e1f309e399c45f..0be10eff0b2eba26deef2ff67ebd24b3bd526a4c 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
+
 /* $Id$ */
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <iostream.h>
-#include <iomanip.h>
+#include <Riostream.h>
 #include <TObjArray.h>
 #include <TRandom.h>
 #include <TMath.h>
@@ -88,10 +88,12 @@ void AliITSpList::ClearMap(){
     //    A zeroed AliITSpList class.
 
     fa->Delete();
-//    for(Int_t i=0;i<GetMaxIndex();i++) if(fa->At(i)!=0){
-//        delete fa->At(i);
-//        fa->AddAt(0,i); // zero content
-//    } // end for i && if
+    /*
+    for(Int_t i=0;i<GetMaxIndex();i++) if(fa->At(i)!=0){
+        delete fa->At(i);
+        fa->AddAt(0,i); // zero content
+    } // end for i && if
+    */
     fEnteries = 0;
 }
 //______________________________________________________________________
@@ -168,7 +170,7 @@ void AliITSpList::AddItemTo(Int_t fileIndex, AliITSpListItem *pl) {
         fa->AddAt(new AliITSpListItem(-2,-1,pl->GetModule(),index,0.0),index);
     } // end if
  
-    ((AliITSpListItem*)(fa->At(index)))->AddTo(fileIndex,pl);
+    ((AliITSpListItem*)(fa->At(index)))->AddTo( fileIndex,pl);
     if(index>=fEnteries) fEnteries = index +1;
 }
 //______________________________________________________________________
@@ -190,7 +192,7 @@ void AliITSpList::AddSignal(Int_t i,Int_t j,Int_t trk,Int_t ht,Int_t mod,
     Int_t index = GetIndex(i,j);
 
     if(GetpListItem(index)==0){ // most create AliITSpListItem
-        fa->AddAt(new AliITSpListItem(trk,ht,mod,GetIndex(i,j),signal),index);
+        fa->AddAt(new AliITSpListItem(trk,ht,mod,index,signal),index);
     }else{ // AliITSpListItem exists, just add signal to it.
         GetpListItem(index)->AddSignal(trk,ht,mod,index,signal);
     } // end if
@@ -239,6 +241,7 @@ AliITSpListItem::AliITSpListItem(){
     } // end if i
     fTsignal = 0.0;
     fNoise   = 0.0;
+    fSignalAfterElect = 0.0;
 }
 //______________________________________________________________________
 AliITSpListItem::AliITSpListItem(Int_t module,Int_t index,Double_t noise){
@@ -260,6 +263,7 @@ AliITSpListItem::AliITSpListItem(Int_t module,Int_t index,Double_t noise){
         this->fHits[i]   = -1;
     } // end if i
     this->fTsignal = 0.0;
+    this->fSignalAfterElect = 0.0;
     this->fNoise   = noise;
 }
 //______________________________________________________________________
@@ -289,6 +293,7 @@ AliITSpListItem::AliITSpListItem(Int_t track,Int_t hit,Int_t module,
     } // end if i
     this->fTsignal = signal;
     this->fNoise   = 0.0;
+    this->fSignalAfterElect   = 0.0;
 }
 //______________________________________________________________________
 AliITSpListItem::~AliITSpListItem(){
@@ -299,17 +304,7 @@ AliITSpListItem::~AliITSpListItem(){
     //    none.
     // Return:
     //    A properly destroyed AliITSpListItem class.
-/*
-    this->fmodule = 0;
-    this->findex  = 0;
-    for(Int_t i=0;i<=this->GetNsignals();i++){
-        this->fTrack[i]  = 0;
-        this->fSignal[i] = 0.0;
-        this->fHits[i]   = 0;
-    } // end if i
-    this->fTsignal = 0.0;
-    this->fNoise   = 0.0;
-*/    
+
 }
 //______________________________________________________________________
 AliITSpListItem& AliITSpListItem::operator=(const AliITSpListItem &source){
@@ -320,19 +315,20 @@ AliITSpListItem& AliITSpListItem::operator=(const AliITSpListItem &source){
     //    none.
     // Return:
     //    A copied AliITSpListItem object
+    Int_t i;
 
     if(this == &source) return *this;
 
     this->fmodule = source.fmodule;
     this->findex  = source.findex;
-    for(Int_t i=0;i<this->fkSize;i++){
+    for(i=0;i<this->fkSize;i++){
         this->fTrack[i]  = source.fTrack[i];
         this->fSignal[i] = source.fSignal[i];
         this->fHits[i]   = source.fHits[i];
     } // end if i
     this->fTsignal = source.fTsignal;
     this->fNoise   = source.fNoise;
-
+    this->fSignalAfterElect   = source.fSignalAfterElect;
     return *this;
 }
 //______________________________________________________________________
@@ -369,10 +365,12 @@ void AliITSpListItem::AddSignal(Int_t track,Int_t hit,Int_t module,
         Warning("AddSignal","index=%d != findex=%d or module=%d != fmodule=%d",
                  index,findex,module,fmodule);
     fTsignal += signal; // Keep track of sum signal.
-    for(i=0;i<fkSize;i++) if( track==fTrack[i] && hit==fHits[i]){
+
+    for(i=0;i<fkSize;i++) if( track==fTrack[i] && hit==fHits[i] ){
         fSignal[i] += signal;
         flg = kTRUE;
     } // end for i & if.
+    //cout << "track="<<track<<endl;
     if(flg){ // resort arrays.  
         for(i=1;i<fkSize;i++){
             j = i;
@@ -386,6 +384,8 @@ void AliITSpListItem::AddSignal(Int_t track,Int_t hit,Int_t module,
                 fTrack[j]  = trk;
                 fHits[j]   = hts;
                 fSignal[j] = sig;
+               //cout << "#fTrack["<<j-1<<"]="<<fTrack[j-1]<< " fTrack["<<
+               // j<<"]="<<fTrack[j]<<endl;
                 j--;
             } // end while
         } // end if i
@@ -406,11 +406,17 @@ void AliITSpListItem::AddSignal(Int_t track,Int_t hit,Int_t module,
             fHits[i+1]   = hit;
             return; // put it in the right place, now exit.
         } //  end if
+       //cout << "$fTrack["<<i+1<<"]="<<fTrack[i+1]<< " fTrack["<<i<<"]="
+       //<<fTrack[i]<< " fHits["<<i+1<<"]="<<fHits[i+1]<< " fHits["<<i<<"]="
+       //<<fHits[i]<< " fSignal["<<i+1<<"]="<<fSignal[i+1]<< " fSignal["<<i
+       //<<"]="<<fSignal[i]<<endl;
     } // end if; end for i
     // Still haven't found the right place. Must be at top of list.
     fSignal[0] = signal;
     fTrack[0]  = track;
     fHits[0]   = hit;
+    //cout << "$fTrack["<<0<<"]="<<fTrack[0]<<" fHits["<<0<<"]="<<fHits[0]
+    //<<" fSignal["<<0<<"]="<<fSignal[0]<<endl;
     return;
 }
 //______________________________________________________________________
@@ -426,11 +432,52 @@ void AliITSpListItem::AddNoise(Int_t module,Int_t index,Double_t noise){
     //    none.
 
     if(findex!=index || fmodule!=module) 
-        Warning("AddSignal","index=%d != findex=%d or module=%d != fmodule=%d",
+        Warning("AddNoise","index=%d != findex=%d or module=%d != fmodule=%d",
             index,findex,module,fmodule);
     fNoise += noise; // Keep track of sum signal.
 }
 //______________________________________________________________________
+void AliITSpListItem::AddSignalAfterElect(Int_t module,Int_t index,Double_t signal){
+    // Adds signal after electronics to this existing list.
+    // Inputs:
+    //    Int_t module   The module where this noise occurred
+    //    Int_t index    The cell index where this noise occurred
+    //    Double_t signal The value of the signal.
+    // Outputs:
+    //    none.
+    // Return:
+    //    none.
+
+    if(findex!=index || fmodule!=module) 
+        Warning("AddSignalAfterElect","index=%d != findex=%d or module=%d "
+               "!= fmodule=%d",index,findex,module,fmodule);
+    fSignalAfterElect += signal; // Keep track of sum signal.
+}
+//______________________________________________________________________
+void AliITSpListItem::Add(AliITSpListItem *pl){
+    // Adds the contents of pl to this
+    // pl could come from different module and index 
+    // Inputs:
+    //    AliITSpListItem *pl  an AliITSpListItem to be added to this class.
+    // Outputs:
+    //    none.
+    // Return:
+    //    none.
+    Int_t i;
+    Double_t sig  = 0.0;
+    Double_t sigT = 0.0;
+
+    for(i=0;i<pl->GetNsignals();i++){
+        sig = pl->GetSignal(i); 
+        if( sig <= 0.0 ) break; // no more signals
+        AddSignal(pl->GetTrack(i),pl->GetHit(i),fmodule,findex,sig);
+        sigT += sig;
+    } // end for i
+    fTsignal += (pl->fTsignal - sigT);
+    fNoise   += pl->fNoise;
+    return;
+}
+//______________________________________________________________________
 void AliITSpListItem::AddTo(Int_t fileIndex,AliITSpListItem *pl){
     // Adds the contents of pl to this with track number off set given by
     // fileIndex.
@@ -442,16 +489,19 @@ void AliITSpListItem::AddTo(Int_t fileIndex,AliITSpListItem *pl){
     // Return:
     //    none.
     Int_t i,trk;
-    Double_t sig=0.0;
+    Double_t sig  = 0.0;
 
+    Int_t module = pl->GetModule();
+    Int_t index  = pl->GetIndex();
     for(i=0;i<pl->GetNsignals();i++){
+        sig = pl->GetSignal(i); 
+        if( sig <= 0.0 ) break; // no more signals
         trk = pl->GetTrack(i);
-        trk += fileIndex;
-        this->AddSignal(trk,pl->GetHit(i),pl->GetModule(),
-                           pl->GetIndex(),pl->GetSignal(i));
-        sig += pl->GetSignal(i);
+        trk += fileIndex; 
+        AddSignal(trk,pl->GetHit(i),module,index,sig);
     } // end for i
-    this->fNoise   += pl->fNoise;
+    fSignalAfterElect += (pl->fSignalAfterElect + pl->fNoise - fNoise);
+    fNoise = pl->fNoise;
     return;
 }
 //______________________________________________________________________
@@ -465,7 +515,7 @@ Int_t AliITSpListItem::ShiftIndex(Int_t in,Int_t trk){
     // Return:
     //    Int_t The track number with the file number in the upper bits.
     Int_t si = sizeof(Int_t) * 8;
-    UInt_t uin,utrk; // use UInt_t to avoid integer overflow-> goes negative.
+    UInt_t uin,utrk; // use UInt_t to avoid interger overflow-> goes negative.
 
     uin = in;
     utrk = trk;
@@ -490,7 +540,7 @@ void AliITSpListItem::Print(ostream *os){
     for(i=0;i<fkSize;i++) *os << fTrack[i] <<",";
     for(i=0;i<fkSize;i++) *os << fHits[i] <<",";
     for(i=0;i<fkSize;i++) *os << fSignal[i] <<",";
-    *os << fTsignal <<","<< fNoise;
+    *os << fTsignal <<","<< fNoise << "," << fSignalAfterElect;
 }
 //______________________________________________________________________
 void AliITSpListItem::Read(istream *is){
@@ -508,7 +558,7 @@ void AliITSpListItem::Read(istream *is){
     for(i=0;i<fkSize&&i<iss;i++) *is >> fTrack[i];
     for(i=0;i<fkSize&&i<iss;i++) *is >> fHits[i];
     for(i=0;i<fkSize&&i<iss;i++) *is >> fSignal[i];
-    *is >> fTsignal >> fNoise;
+    *is >> fTsignal >> fNoise >> fSignalAfterElect;
 }
 //______________________________________________________________________
 ostream &operator<<(ostream &os,AliITSpListItem &source){