]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Using the Getter in Raw2Digits. Added random number for roundup in digitization
authorschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Jul 2004 06:39:50 +0000 (06:39 +0000)
committerschutz <schutz@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 9 Jul 2004 06:39:50 +0000 (06:39 +0000)
PHOS/AliPHOS.cxx
PHOS/AliPHOS.h

index e49219de24021d4f6f936e39939b47b9f41a43b7..b72a77ab934da1cfd19501f87221971b9a376dc7 100644 (file)
@@ -30,13 +30,14 @@ class TFile;
 #include <TFolder.h> 
 #include <TTree.h>
 #include <TVirtualMC.h> 
+#include <TRandom.h> 
 
 // --- Standard library ---
 
 // --- AliRoot header files ---
 #include "AliMagF.h"
 #include "AliPHOS.h"
-#include "AliPHOSLoader.h"
+#include "AliPHOSGetter.h"
 #include "AliRun.h"
 #include "AliPHOSDigitizer.h"
 #include "AliPHOSSDigitizer.h"
@@ -52,6 +53,7 @@ AliPHOS:: AliPHOS() : AliDetector()
   fQATask = 0;
   fTreeQA = 0;
   fDebug  = 0; 
+  fRan    = new TRandom(123456) ; 
 }
 
 //____________________________________________________________________________
@@ -61,13 +63,14 @@ AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name, title)
   
   fQATask = 0;
   fTreeQA = 0;
-  fDebug =  0; 
+  fDebug  = 0; 
+  fRan    = new TRandom(123456) ; 
 }
 
 //____________________________________________________________________________
 AliPHOS::~AliPHOS() 
 {  
-  
+  delete fRan ; 
 }
 
 //____________________________________________________________________________
@@ -379,95 +382,29 @@ void AliPHOS::CreateMaterials()
 
 }
 
-//____________________________________________________________________________
-void AliPHOS::Hits2SDigits()  
-{ 
-// create summable digits
-
-  AliPHOSSDigitizer* phosDigitizer = 
-    new AliPHOSSDigitizer(fLoader->GetRunLoader()->GetFileName().Data()) ;
-  phosDigitizer->SetEventRange(0, -1) ; // do all the events
-  phosDigitizer->ExecuteTask("all") ;
-}
-
-//____________________________________________________________________________
-AliLoader* AliPHOS::MakeLoader(const char* topfoldername)
-{
-//different behaviour than standard (singleton getter)
-// --> to be discussed and made eventually coherent
- fLoader = new AliPHOSLoader(GetName(),topfoldername);
- return fLoader;
-}
-
-//____________________________________________________________________________
-void AliPHOS::SetTreeAddress()
-{ 
-  // Links Hits in the Tree to Hits array
-  TBranch *branch;
-  char branchname[20];
-  sprintf(branchname,"%s",GetName());
-  
-  // Branch address for hit tree
-  TTree *treeH = TreeH();
-  if (treeH) {
-    branch = treeH->GetBranch(branchname);
-    if (branch) 
-     { 
-       if (fHits == 0x0) fHits= new TClonesArray("AliPHOSHit",1000);
-       //Info("SetTreeAddress","<%s> Setting Hits Address",GetName());
-       branch->SetAddress(&fHits);
-     }
-  }
-}
-
-//____________________________________________________________________________
-void AliPHOS::WriteQA()
-{
-
-  // Make TreeQA in the output file. 
-
-  if(fTreeQA == 0)
-    fTreeQA = new TTree("TreeQA", "QA Alarms") ;    
-  // Create Alarms branches
-  Int_t bufferSize = 32000 ;    
-  Int_t splitlevel = 0 ; 
-
-  TFolder* topfold = GetLoader()->GetTopFolder(); //get top aliroot folder; skowron
-  TString phosqafn(AliConfig::Instance()->GetQAFolderName()+"/"); //get name of QAaut folder relative to top event; skowron
-  phosqafn+=GetName(); //hard wired string!!! add the detector name to the pathname; skowron 
-  TFolder * alarmsF = (TFolder*)topfold->FindObjectAny(phosqafn); //get the folder
-  if (alarmsF == 0x0)
-   {
-     Error("WriteQA","Can not find folder with qa alarms");
-     return;
-   }
-  TString branchName(alarmsF->GetName());
-  TBranch * alarmsBranch = fTreeQA->Branch(branchName,"TFolder", &alarmsF, bufferSize, splitlevel);
-  TString branchTitle = branchName + " QA alarms" ; 
-  alarmsBranch->SetTitle(branchTitle);
-  alarmsBranch->Fill() ; 
-
-  //fTreeQA->Fill() ; 
-}
-
 //____________________________________________________________________________
 void AliPHOS::Digits2Raw()
 {
 // convert digits of the current event to raw data
 
   // get the digits
-  ((AliPHOSLoader*) fLoader)->LoadDigits();
-  TClonesArray* digits = ((AliPHOSLoader*) fLoader)->Digits();
+  AliPHOSGetter * gime = AliPHOSGetter::Instance(AliRunLoader::GetGAliceName()) ; 
+  if (!gime) {
+    Error("Digits2Raw", "PHOS Getter not instantiated") ;
+    return ; 
+  }
+  gime->Event(gime->EventNumber(), "D") ; 
+  TClonesArray* digits = gime->Digits() ;
+
   if (!digits) {
-    Error("Digits2Raw", "no digits");
+    Error("Digits2Raw", "no digits found !");
     return;
   }
 
   // get the geometry
-  AliPHOSGeometry* geom = GetGeometry();
+  AliPHOSGeometry* geom = gime->PHOSGeometry();
   if (!geom) {
-    Error("Digits2Raw", "no geometry");
+    Error("Digits2Raw", "no geometry found !");
     return;
   }
 
@@ -488,12 +425,19 @@ void AliPHOS::Digits2Raw()
 
   // loop over digits (assume ordered digits)
   for (Int_t iDigit = 0; iDigit < digits->GetEntries(); iDigit++) {
-    AliPHOSDigit* digit = (AliPHOSDigit*) digits->At(iDigit);
-    if (digit->GetAmp() < kThreshold) continue;
+    AliPHOSDigit* digit = gime->Digit(iDigit);
+    if (digit->GetAmp() < kThreshold) 
+      continue;
     Int_t relId[4];
     geom->AbsToRelNumbering(digit->GetId(), relId);
     Int_t module = relId[0];
-    if (relId[1] != 0) continue;    // ignore digits from CPV
+   // Begin FIXME 
+    if (relId[1] != 0) 
+      continue;    // ignore digits from CPV
+   // End FIXME 
+
+    // PHOS EMCA has 4 DDL per module. Splitting is done based on the row number
     Int_t iDDL = 4 * (module - 1) + (4 * (relId[2] - 1)) / geom->GetNPhi();
 
     // new DDL
@@ -506,9 +450,10 @@ void AliPHOS::Digits2Raw()
       }
 
       // open new file and write dummy header
-      char fileName[256];
-      sprintf(fileName, "PHOS_%d.ddl", iDDL + kDDLOffset); 
-      buffer = new AliAltroBuffer(fileName, 1);
+      TString fileName("PHOS_") ;
+      fileName += (iDDL + kDDLOffset) ; 
+      fileName += ".ddl" ; 
+      buffer = new AliAltroBuffer(fileName.Data(), 1);
       buffer->WriteDataHeader(kTRUE, kFALSE);  //Dummy;
 
       prevDDL = iDDL;
@@ -525,22 +470,29 @@ void AliPHOS::Digits2Raw()
     } else {
       Bool_t highGain = kFALSE;
 
-      // fill time bin values
+      // fill time bin values :
+      // 1. the signal starts at the time given by the digit
+      // 2. the rise is linear and the maximum is reached kTimePeak after start
+      // 3. the decay is gaussian with a sigma of kTimeRes
+      // 4. the signal is binned into kTimeBins bins 
       for (Int_t iTime = 0; iTime < kTimeBins; iTime++) {
        Double_t time = iTime * kTimeMax/kTimeBins;
        Int_t signal = 0;
-       if (time < digit->GetTime() + kTimePeak) {
-         signal = Int_t(0.5 + digit->GetAmp() * 
+       if (time < digit->GetTime() + kTimePeak) {      // signal is rising
+         signal = static_cast<Int_t>(fRan->Rndm() + digit->GetAmp() * 
                         (time - digit->GetTime()) / kTimePeak);
-       } else {
-         signal = Int_t(0.5 + digit->GetAmp() * 
+       } else {                                        // signal is decaying
+         signal = static_cast<Int_t>(fRan->Rndm() + digit->GetAmp() * 
                  TMath::Gaus(time, digit->GetTime() + kTimePeak, kTimeRes));
        }
-       if (signal < 0) signal = 0;
+       if (signal < 0) 
+         signal = 0;
        adcValuesLow[iTime] = signal;
-       if (signal > 0x3FF) adcValuesLow[iTime] = 0x3FF;
+       if (signal > 0x3FF) // larger than 10 bits 
+         adcValuesLow[iTime] = 0x3FF;
        adcValuesHigh[iTime] = signal / kHighGainFactor;
-       if (adcValuesHigh[iTime] > 0) highGain = kTRUE;
+       if (adcValuesHigh[iTime] > 0) 
+         highGain = kTRUE;
       }
 
       // write low and eventually high gain channel
@@ -560,6 +512,78 @@ void AliPHOS::Digits2Raw()
     delete buffer;
   }
 
-  fLoader->UnloadDigits();
+  gime->PhosLoader()->UnloadDigits();
+}
+
+//____________________________________________________________________________
+void AliPHOS::Hits2SDigits()  
+{ 
+// create summable digits
+
+  AliPHOSSDigitizer* phosDigitizer = 
+    new AliPHOSSDigitizer(fLoader->GetRunLoader()->GetFileName().Data()) ;
+  phosDigitizer->SetEventRange(0, -1) ; // do all the events
+  phosDigitizer->ExecuteTask("all") ;
+}
+
+//____________________________________________________________________________
+AliLoader* AliPHOS::MakeLoader(const char* topfoldername)
+{
+//different behaviour than standard (singleton getter)
+// --> to be discussed and made eventually coherent
+ fLoader = new AliPHOSLoader(GetName(),topfoldername);
+ return fLoader;
+}
+
+//____________________________________________________________________________
+void AliPHOS::SetTreeAddress()
+{ 
+  // Links Hits in the Tree to Hits array
+  TBranch *branch;
+  char branchname[20];
+  sprintf(branchname,"%s",GetName());
+  
+  // Branch address for hit tree
+  TTree *treeH = TreeH();
+  if (treeH) {
+    branch = treeH->GetBranch(branchname);
+    if (branch) 
+     { 
+       if (fHits == 0x0) fHits= new TClonesArray("AliPHOSHit",1000);
+       //Info("SetTreeAddress","<%s> Setting Hits Address",GetName());
+       branch->SetAddress(&fHits);
+     }
+  }
+}
+
+//____________________________________________________________________________
+void AliPHOS::WriteQA()
+{
+
+  // Make TreeQA in the output file. 
+
+  if(fTreeQA == 0)
+    fTreeQA = new TTree("TreeQA", "QA Alarms") ;    
+  // Create Alarms branches
+  Int_t bufferSize = 32000 ;    
+  Int_t splitlevel = 0 ; 
+
+  TFolder* topfold = GetLoader()->GetTopFolder(); //get top aliroot folder; skowron
+  TString phosqafn(AliConfig::Instance()->GetQAFolderName()+"/"); //get name of QAaut folder relative to top event; skowron
+  phosqafn+=GetName(); //hard wired string!!! add the detector name to the pathname; skowron 
+  TFolder * alarmsF = (TFolder*)topfold->FindObjectAny(phosqafn); //get the folder
+  if (alarmsF == 0x0)
+   {
+     Error("WriteQA","Can not find folder with qa alarms");
+     return;
+   }
+  TString branchName(alarmsF->GetName());
+  TBranch * alarmsBranch = fTreeQA->Branch(branchName,"TFolder", &alarmsF, bufferSize, splitlevel);
+  TString branchTitle = branchName + " QA alarms" ; 
+  alarmsBranch->SetTitle(branchTitle);
+  alarmsBranch->Fill() ; 
+
+  //fTreeQA->Fill() ; 
 }
 
index 675e4d36bbc7e17f6c6176cdaefbf899c9d28914..a2b89d80ac5f52a30420ea6dc4df186bee6d89b3 100644 (file)
@@ -15,6 +15,7 @@ class TString ;
 class TTask ;
 class TFolder ;
 class TTree ; 
+class TRandom ; 
 
 // --- AliRoot header files ---
 #include "AliDetector.h" 
@@ -23,7 +24,7 @@ class AliPHOSQAChecker ;
 
 class AliPHOS : public AliDetector {
 
- public:
+public:
 
   AliPHOS() ;
   AliPHOS(const char* name, const char* title="") ;  
@@ -31,7 +32,6 @@ class AliPHOS : public AliDetector {
     Copy(*this) ; 
   }
   virtual ~AliPHOS() ; 
-  virtual void Copy(AliPHOS & phos) ; 
   virtual void   AddHit(Int_t, Int_t*, Float_t *) {
     // do not use this definition but the one below
     Fatal("AddHit(Int_t, Int_t*, Float_t *)", "do not use") ;
@@ -39,8 +39,10 @@ class AliPHOS : public AliDetector {
   }
   virtual void   AddHit( Int_t shunt, Int_t primary, Int_t track, 
                         Int_t id, Float_t *hits ) = 0 ;   
+  virtual void Copy(AliPHOS & phos) ; 
   virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const;
   virtual void  CreateMaterials() ;            
+  virtual void  Digits2Raw();
   virtual void  FinishRun() {WriteQA();}
   virtual AliPHOSGeometry * GetGeometry() const 
   {return AliPHOSGeometry::GetInstance(GetTitle(),"") ;  }
@@ -52,7 +54,6 @@ class AliPHOS : public AliDetector {
   virtual TTree * TreeQA() const {return fTreeQA; } 
   virtual const TString Version() const {return TString(" ") ; } 
   virtual void WriteQA() ; 
-  virtual void Digits2Raw();
   AliPHOS & operator = (const AliPHOS & /*rvalue*/)  {
     Fatal("operator =", "not implemented") ; return *this ; }
 
@@ -60,6 +61,8 @@ protected:
   
   AliPHOSQAChecker * fQATask ; //! PHOS checkers container
   TTree * fTreeQA ;            // the QA tree that contains the alarms
+  TRandom * fRan ;             //! random number generator
+
   ClassDef(AliPHOS,2) // Photon Spectrometer Detector (base class)
 
 } ;