Added a flag to disable storing at the channel level (hence starting
authorlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 3 Jul 2008 16:21:03 +0000 (16:21 +0000)
committerlaphecet <laphecet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 3 Jul 2008 16:21:03 +0000 (16:21 +0000)
at manu level only), in order to save disk space.

MUON/AliMUONTrackerData.cxx
MUON/AliMUONTrackerData.h
MUON/AliMUONVTrackerData.h

index cbadf79..56c7bf1 100644 (file)
@@ -74,7 +74,8 @@ fExternalDimension(dimension),
 fHistogramming(new Int_t[fExternalDimension]),
 fChannelHistos(0x0),
 fXmin(0.0),
-fXmax(0.0)
+fXmax(0.0),
+fIsChannelLevelEnabled(kTRUE)
 {  
   /// ctor
   memset(fHistogramming,0,sizeof(Int_t)); // histogramming is off by default. Use MakeHistogramForDimension to turn it on.
@@ -139,7 +140,7 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, Bool_t replace)
     NumberOfEventsChanged();
   }
   
-  if (!fChannelValues)
+  if (!fChamberValues)
   {
     Int_t numberOfBusPatches(0);
     Int_t numberOfDEs(0);
@@ -157,7 +158,10 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, Bool_t replace)
       deIt.Next();
     }
     
-    fChannelValues = new AliMUON2DMap(kTRUE);
+               if ( fIsChannelLevelEnabled ) 
+               {
+                       fChannelValues = new AliMUON2DMap(kTRUE);
+               }
     fManuValues = new AliMUON2DMap(kTRUE);
     fPCBValues = new AliMUON2DMap(kFALSE);
     fBusPatchValues = new AliMUON1DMap(numberOfBusPatches);
@@ -228,10 +232,13 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, Bool_t replace)
           
           for ( Int_t k = 0; k < nk; ++k ) 
           {
-            Double_t e = replace ? channel->ValueAsDoubleFast(i,ix+k) : 0.0;
+            Double_t e = ( replace && channel ) ? channel->ValueAsDoubleFast(i,ix+k) : 0.0;
             
-            channel->SetValueAsDoubleFast(i,ix+k,channel->ValueAsDoubleFast(i,ix+k)-e+value[k]);
-              
+                                               if ( channel ) 
+                                               {
+                                                       channel->SetValueAsDoubleFast(i,ix+k,channel->ValueAsDoubleFast(i,ix+k)-e+value[k]);
+                                               }
+                                               
             manu->SetValueAsDoubleFast(0,ix+k,manu->ValueAsDoubleFast(0,ix+k)-e+value[k]);            
             
             busPatch->SetValueAsDoubleFast(0,ix+k,busPatch->ValueAsDoubleFast(0,ix+k)-e+value[k]);
@@ -249,8 +256,12 @@ AliMUONTrackerData::InternalAdd(const AliMUONVStore& store, Bool_t replace)
         
         if ( validChannel && !replace )
         {
-          channel->SetValueAsDoubleFast(i,IndexOfOccupancyDimension(),
-                                        channel->ValueAsDoubleFast(i,IndexOfOccupancyDimension())+1.0);
+                                       if ( channel ) 
+                                       {
+                                               channel->SetValueAsDoubleFast(i,IndexOfOccupancyDimension(),
+                                                                                                                                                                       channel->ValueAsDoubleFast(i,IndexOfOccupancyDimension())+1.0);
+                                       }
+                                       
           manu->SetValueAsDoubleFast(0,IndexOfOccupancyDimension(),
                                                  manu->ValueAsDoubleFast(0,IndexOfOccupancyDimension())+1.0);        
           busPatch->SetValueAsDoubleFast(0,IndexOfOccupancyDimension(),
@@ -567,6 +578,17 @@ AliMUONTrackerData::DimensionName(Int_t dim) const
 }
 
 //_____________________________________________________________________________
+void 
+AliMUONTrackerData::DisableChannelLevel()
+{ 
+  /// Disable the storing of data at channel level
+  
+  delete fChannelValues;
+  fChannelValues = 0x0;
+  fIsChannelLevelEnabled = kFALSE; 
+}
+
+//_____________________________________________________________________________
 Int_t 
 AliMUONTrackerData::External2Internal(Int_t index) const 
 {
@@ -598,9 +620,11 @@ AliMUONTrackerData::FillChannel(Int_t detElemId, Int_t manuId, Int_t manuChannel
 {
   /// Fill histogram of a given channel
   
-  AliMUONSparseHisto* h = GetChannelSparseHisto(detElemId, manuId, manuChannel,dim);
-  h->Fill(static_cast<Int_t>(TMath::Nint(value)));
+       if ( fIsChannelLevelEnabled ) 
+       {
+               AliMUONSparseHisto* h = GetChannelSparseHisto(detElemId, manuId, manuChannel,dim);
+               h->Fill(static_cast<Int_t>(TMath::Nint(value)));
+       }
 }
 
 //_____________________________________________________________________________
@@ -896,6 +920,11 @@ AliMUONTrackerData::Print(Option_t* wildcard, Option_t* opt) const
     cout << " Nevents=" << fNevents << endl;
   }
 
+       if ( fIsChannelLevelEnabled ) 
+       {
+               cout << "Is storing (accumulated) data at the channel level" << endl;
+       }
+       
   for ( Int_t i = 0; i <= fExternalDimensionNames->GetLast(); ++i ) 
   {
     TObjString* name = static_cast<TObjString*>(fExternalDimensionNames->At(i));
index ccd6843..fac0d53 100644 (file)
@@ -98,6 +98,12 @@ public:
   virtual AliMUONSparseHisto* GetChannelSparseHisto(Int_t detElemId, Int_t manuId, 
                                                     Int_t manuChannel, Int_t dim=0) const;
 
+       /// Disable storing values at the channel level
+       virtual void DisableChannelLevel();
+       
+       /// Whether we store values at the channel level or not
+       virtual Bool_t IsChannelLevelEnabled() const { return fIsChannelLevelEnabled; }
+
 private:
     
   void FillChannel(Int_t detElemId, Int_t manuId, Int_t manuChannel,
@@ -190,8 +196,9 @@ private:
   Double_t fXmax; ///< max x value for histograms
   static const Int_t fgkExtraDimension; ///< to hold extra information
   static const Int_t fgkVirtualExtraDimension; ///< to give access to information not stored, but computed on the fly
-  
-  ClassDef(AliMUONTrackerData,4) // Implementation of AliMUONVTrackerData
+  Bool_t fIsChannelLevelEnabled; //< whether we allow storing of channel (fChannelValues) values
+       
+  ClassDef(AliMUONTrackerData,5) // Implementation of AliMUONVTrackerData
 };
 
 #endif
index 036464e..469822e 100644 (file)
@@ -140,6 +140,12 @@ public:
   /// To allow merging of different objects
   virtual Long64_t Merge(TCollection* list) = 0;
 
+       /// Disable recording of information at the channel level
+       virtual void DisableChannelLevel() = 0;
+       
+       /// Whether we store values at the channel level
+       virtual Bool_t IsChannelLevelEnabled() const = 0;
+       
 private:
   /// not implemented
   AliMUONVTrackerData(const AliMUONVTrackerData& rhs);