Hits -> Digits directly
authoralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 May 2002 10:07:05 +0000 (10:07 +0000)
committeralla <alla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 7 May 2002 10:07:05 +0000 (10:07 +0000)
FMD/AliFMD.cxx
FMD/AliFMD.h
FMD/AliFMDDigitizer.cxx
FMD/AliFMDDigitizer.h
FMD/FMDLinkDef.h
FMD/Makefile
FMD/libFMD.pkg

index b43bd81..5c0a724 100644 (file)
@@ -97,7 +97,7 @@ AliDetector (name, title)
   fIdSens3 = 0;
   fIdSens4 = 0;
   fIdSens5 = 0;
-  fMerger = 0;
+  //  fMerger = 0;
   SetMarkerColor (kRed);
 }
 
@@ -174,34 +174,34 @@ void AliFMD::BuildGeometry ()
   // FMD define the different volumes
   new TRotMatrix ("rot901", "rot901", 90, 0, 90, 90, 180, 0);
 
-  new TTUBE ("S_FMD0", "FMD  volume 0", "void", 3.5, 16.8, 1.5);
+  new TTUBE ("S_FMD0", "FMD  volume 0", "void", 4.2, 17.2, 1.5);
   top->cd ();
   node = new TNode ("FMD0", "FMD0", "S_FMD0", 0, 0, 62.8, "");
   node->SetLineColor (kColorFMD);
   fNodes->Add (node);
 
-  new TTUBE ("S_FMD1", "FMD  volume 1", "void", 22., 34.9, 1.5);
+  new TTUBE ("S_FMD1", "FMD  volume 1", "void", 15.4, 28.4, 1.5);
   top->cd ();
-  node = new TNode ("FMD1", "FMD1", "S_FMD1", 0, 0, 75.1, "");
+  node = new TNode ("FMD1", "FMD1", "S_FMD1", 0, 0, 75.2, "");
   node->SetLineColor (kColorFMD);
   fNodes->Add (node);
 
-  new TTUBE ("S_FMD2", "FMD  volume 2", "void", 3.5, 16.8, 1.5);
+  new TTUBE ("S_FMD2", "FMD  volume 2", "void", 4.2, 17.2, 1.5);
   top->cd ();
-  node = new TNode ("FMD2", "FMD2", "S_FMD2", 0, 0, -62.8, "");
+  node = new TNode ("FMD2", "FMD2", "S_FMD2", 0, 0, -83.2, "");
   node->SetLineColor (kColorFMD);
   fNodes->Add (node);
 
-  new TTUBE ("S_FMD3", "FMD  volume 3", "void", 22., 34.9, 1.5);
+  new TTUBE ("S_FMD3", "FMD  volume 3", "void", 15.4, 28.4, 1.5);
   top->cd ();
-  node = new TNode ("FMD3", "FMD3", "S_FMD3", 0, 0, -75.1, "");
+  node = new TNode ("FMD3", "FMD3", "S_FMD3", 0, 0, -75.2, "");
   node->SetLineColor (kColorFMD);
   fNodes->Add (node);
 
-  new TTUBE ("S_FMD4", "FMD  volume 4", "void", 3.5, 16.8, 1.5);
+  new TTUBE ("S_FMD4", "FMD  volume 4", "void", 4.2, 17.2, 1.5);
   top->cd ();
   //  node = new TNode("FMD4","FMD4","S_FMD4",0,0,-270,"");
-  node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -345, "");
+  node = new TNode ("FMD4", "FMD4", "S_FMD4", 0, 0, -340, "");
   node->SetLineColor (kColorFMD);
   fNodes->Add (node);
 }
@@ -287,6 +287,7 @@ void AliFMD::MakeBranch (Option_t * option, const char *file)
     MakeBranchInTree(gAlice->TreeD(), 
                     branchname,&fDigits, 
                     kBufferSize, file);
+    cout<<" tree "<<gAlice->TreeD()<<" "<<branchname<<" "<<&fDigits<<endl;
   }
   if (cR){
     MakeBranchInTree(gAlice->TreeR(), 
@@ -336,44 +337,47 @@ void AliFMD::SetTreeAddress ()
 
 //---------------------------------------------------------------------
 
-void AliFMD::SetRingsSi1(Int_t ringsSi1)
+void AliFMD::SetRingsSi1(Int_t ringsSi1=256)
 {
   //  fRingsSi1=ringsSi1;
   fRingsSi1=256;
 }
-void AliFMD::SetSectorsSi1(Int_t sectorsSi1)
+void AliFMD::SetSectorsSi1(Int_t sectorsSi1=20)
 {
   fSectorsSi1=20;
 }
-void AliFMD::SetRingsSi2(Int_t ringsSi2)
+void AliFMD::SetRingsSi2(Int_t ringsSi2=128)
 {
   fRingsSi2=128;
 }
-void AliFMD::SetSectorsSi2(Int_t sectorsSi2)
+void AliFMD::SetSectorsSi2(Int_t sectorsSi2=40)
 {
   fSectorsSi2=40;
 }
 
 //---------------------------------------------------------------------
-
+/*
 void AliFMD::SDigits2Digits() 
 {
   cout<<"AliFMD::SDigits2Digits"<<endl; 
     if (!fMerger) {
       fMerger = new AliFMDMerger();
     }
+    
     fMerger ->SetRingsSi1(fRingsSi1);
     fMerger->SetRingsSi2(fRingsSi2);
     fMerger ->SetSectorsSi1(fSectorsSi1);
     fMerger ->SetSectorsSi2(fSectorsSi2);
+     
     fMerger->Init();
     cout<<"AliFMD::SDigits2Digits Init"<<endl; 
     fMerger->Digitise();
     cout<<"AliFMD::SDigits2Digits Digitise() "<<endl; 
  
 
-}
-//---------------------------------------------------------------------
+    }
+
+    //---------------------------------------------------------------------
 void   AliFMD::SetMerger(AliFMDMerger* merger)
 {
 // Set pointer to merger
@@ -385,7 +389,7 @@ AliFMDMerger*  AliFMD::Merger()
 // Return pointer to merger
     return fMerger;
 }
-
+*/
 //---------------------------------------------------------------------
 
 
@@ -412,18 +416,16 @@ void AliFMD::Hits2SDigits ()
   cout<<"ALiFMD::Hits2SDigits> start...\n";
   //#endif
   
-  char * fileSDigits = 0 ;
+  char * fileSDigits = "FMD.SDigits.root";
   char * fileHeader = 0;
   AliFMDSDigitizer * sd = new AliFMDSDigitizer(fileHeader,fileSDigits) ;
   sd->SetRingsSi1(fRingsSi1);
   sd->SetRingsSi2(fRingsSi2);
   sd->SetSectorsSi1(fSectorsSi1);
   sd->SetSectorsSi2(fSectorsSi2);
-
-
+  //  sd->SetEventNumber(fEvNrSig);
   sd->Exec("") ;
-  sd->Print("");
-
+  
   delete sd ;
   
 }
@@ -439,5 +441,23 @@ void AliFMD::Digits2Reco()
   reconstruction->Exec("");
   delete  reconstruction;
 }
+//-----------------------------------------------------------------------
+
+void AliFMD::MakeBranchInTreeD(TTree *treeD, const char *file)
+{
+    //
+    // Create TreeD branches for the MUON.
+    //
 
+    const Int_t kBufferSize = 4000;
+    char branchname[20];
+    
+
+    sprintf(branchname,"%s",GetName());        
+    if(treeD){
+    MakeBranchInTree(treeD, 
+                    branchname,&fDigits, 
+                    kBufferSize, file);
+    }
+}
 
index 58f4d5e..98e4870 100644 (file)
@@ -9,11 +9,12 @@
  
 #include "AliDetector.h"
 #include "TString.h"
-#include "AliFMDMerger.h" 
+#include "TBranch.h"
+//#include "AliFMDMerger.h" 
 #include "AliFMDSDigitizer.h" 
  class TFile;
  class TTree;
- class AliFMDMerger;
+// class AliFMDMerger;
  class AliFMD : public AliDetector {
  
 public:
@@ -30,29 +31,27 @@ public:
   virtual Int_t  IsVersion() const =0;
   virtual void   Init();
   virtual void   MakeBranch(Option_t *opt=" ",const char *file=0);
+  virtual void   MakeBranchInTreeD(TTree *treeD, const char *file=0);
   virtual void   SetTreeAddress();
   virtual void   ResetHits();
   virtual void   ResetDigits();
   virtual void   DrawDetector()=0;
   virtual void   StepManager() {}
-  // Granularity
-  virtual void SetRingsSi1(Int_t ringsSi1);
-  virtual void SetSectorsSi1(Int_t sectorsSi1);
-  virtual void SetRingsSi2(Int_t ringsSi2);
-  virtual void SetSectorsSi2(Int_t sectorsSi2);
+   // Granularity
+  virtual void SetRingsSi1(Int_t ringsSi1=256);
+  virtual void SetSectorsSi1(Int_t sectorsSi1=20);
+  virtual void SetRingsSi2(Int_t ringsSi2=128);
+  virtual void SetSectorsSi2(Int_t sectorsSi2=40);
    
+  void SetEventNumber(Int_t i)     {fEvNrSig = i;}
   void  Eta2Radius(Float_t, Float_t, Float_t*);
   void Hits2SDigits();//
   void Digits2Reco(); 
-
+  virtual void SetHitsAddressBranch(TBranch *b){b->SetAddress(&fHits);}
+  
    // Digitisation
   TClonesArray *SDigits() const {return fSDigits;}
-//  virtual void   SDigits2Digits();
-  virtual void   SDigits2Digits();
-  virtual void   SetMerger(AliFMDMerger* merger);
-  virtual AliFMDMerger* Merger();
   TClonesArray *ReconParticles() const {return fReconParticles;}   
-  Int_t   fNevents ;        // Number of events to digitize
 
  protected:
   Int_t fIdSens1;     //Si sensetive volume
@@ -66,8 +65,10 @@ public:
   Int_t fRingsSi2;       // Number of rings
   Int_t fSectorsSi2;    // Number of sectors
 
+  Int_t   fNevents ;        // Number of events to digitize
+  Int_t fEvNrSig;                 // signal     event number
 
-  AliFMDMerger *fMerger;   // ! pointer to merger
+  //  AliFMDMerger *fMerger;   // ! pointer to merger
   TClonesArray *fSDigits      ; // List of summable digits
   TClonesArray *fReconParticles;
 
index 5326776..3b602ab 100644 (file)
@@ -55,18 +55,12 @@ AliFMDDigitizer::AliFMDDigitizer(AliRunDigitizer* manager)
  // if (GetDebug()>2)
   //  cerr<<"AliFMDDigitizer::AliFMDDigitizer"
    //     <<"(AliRunDigitizer* manager) was processed"<<endl;
-
 }
 
 //------------------------------------------------------------------------
 AliFMDDigitizer::~AliFMDDigitizer()
 {
 // Destructor
-  if(fSDigits)  {
-    fSDigits->Delete();
-    delete fSDigits ;
-    fSDigits = 0;
-  }
 }
 
  //------------------------------------------------------------------------
@@ -89,89 +83,100 @@ void AliFMDDigitizer::Exec(Option_t* option)
   cout<<"AliFMDDigitizer::>SDigits2Digits start...\n";
 #endif
 
-  AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ;
-  cout<<" FMD "<<FMD<<endl;
-  if (gAlice->TreeD () == 0)
-    gAlice->MakeTree ("D");
-  fDigits   = FMD->Digits();
-  
+  //  cout<<" FMD "<<FMD<<endl;
 
-  Int_t chargeSum[10][50][300];
+   Int_t volume, sector, ring, charge;
+  Float_t e;
+  Float_t de[10][50][300];
+  Int_t hit;
   Int_t digit[5];
   Int_t ivol, iSector, iRing;
   for (Int_t i=0; i<10; i++)
     for(Int_t j=0; j<50; j++)
       for(Int_t ij=0; ij<300; ij++)
-       chargeSum[i][j][ij]=0;
+       de[i][j][ij]=0;
   Int_t NumberOfRings[5]=
   {256,128,256,128,256};
   Int_t NumberOfSectors[5]=
   {20,40,20,40,20}; 
   
+  AliFMDhit *fmdHit=0;
+  TTree *TH=0;
+  TBranch *brHits=0;
+  // fHits = new TClonesArray ("AliFMDhit", 1000);
+
+  AliFMD * fFMD = (AliFMD *) gAlice->GetDetector("FMD") ;
 
 // Loop over files to digitize
 
-  for (Int_t inputFile=0; inputFile<fManager->GetNinputs();
+  Int_t nFiles=GetManager()->GetNinputs();
+  for (Int_t inputFile=0; inputFile<nFiles;
        inputFile++) {
 
-    ReadDigit( chargeSum, inputFile);
+    cout<<" event "<<fManager->GetOutputEventNr()<<endl;
+    if (fFMD)
+    {
+      TClonesArray *FMDhits = fFMD->Hits ();
+      TH = fManager->GetInputTreeH(inputFile);
+      brHits = TH->GetBranch("FMD");
+      if (brHits) {
+       fFMD->SetHitsAddressBranch(brHits);
+      }else{
+       cerr<<"EXEC Branch FMD hit not found"<<endl;
+       exit(111);
+      } 
+      Int_t ntracks    = (Int_t) TH->GetEntries();
+
+        for (Int_t track = 0; track < ntracks; track++)
+       {
+         brHits->GetEntry(track);
+         Int_t nhits = FMDhits->GetEntries ();
+
+         for (hit = 0; hit < nhits; hit++)
+           {
+             fmdHit = (AliFMDhit *) FMDhits->UncheckedAt (hit);
+             
+             volume = fmdHit->Volume ();
+             sector = fmdHit->NumberOfSector ();
+             ring = fmdHit->NumberOfRing ();
+             e = fmdHit->Edep ();
+             de[volume][sector][ring] += e;
+             
+           }           //hit loop
+       }                       //track loop
+    }                  //if FMD
 
-  }
   // Put noise and make ADC signal
-  for ( ivol=1; ivol<=5; ivol++){
+   Float_t I = 1.664 * 0.04 * 2.33 / 22400;    // = 0.69e-6;
+ for ( ivol=1; ivol<=5; ivol++){
     for ( iSector=1; iSector<=NumberOfSectors[ivol-1]; iSector++){
       for ( iRing=1; iRing<=NumberOfRings[ivol-1]; iRing++){
        digit[0]=ivol;
        digit[1]=iSector;
        digit[2]=iRing;
-       digit[3]=PutNoise(chargeSum[ivol][iSector][iRing]);
-       if(chargeSum[ivol][iSector][iRing] <= 500) digit[3]=500; 
+       charge = Int_t (de[ivol][iSector][iRing] / I);
+       digit[3]=PutNoise(charge);
+       if(digit[3]<= 500) digit[3]=500; 
     //dynamic range from MIP(0.155MeV) to 30MIP(4.65MeV)
     //1024 ADC channels 
        Float_t channelWidth=(22400*50)/1024;
        digit[4]=Int_t(digit[3]/channelWidth);
        if (digit[4]>1024) digit[4]=1024; 
-       FMD->AddDigit(digit);
-
+       fFMD->AddDigit(digit);
       } //ivol
     } //iSector
   } //iRing
+
   TTree* treeD = fManager->GetTreeD();
+  treeD->Clear();
   treeD->Reset();
-  FMD->MakeBranch("D");
+  fFMD->MakeBranchInTreeD(treeD);
   treeD->Fill();
  
   fManager->GetTreeD()->Write(0,TObject::kOverwrite);
   
   gAlice->ResetDigits();
-
-}
-
-//---------------------------------------------------------------------
-
-void AliFMDDigitizer::ReadDigit(Int_t chargeSum[][50][300], Int_t inputFile )
-{
-  cout<<" AliFMDDigitizer::ReadDigit "<<endl;
-  AliFMDdigit *fmddigit;
-  gAlice->GetEvent(0) ;
-   AliFMD * FMD = (AliFMD *) gAlice->GetDetector("FMD") ;
-  Int_t ndig, k;
-  gAlice->ResetDigits();
-  treeS->GetEvent(0);
-
-  treeS->GetEvent(0);
-  TClonesArray * FMDSdigits   = FMD->SDigits();
-  
-  ndig=FMDSdigits->GetEntries();
-
-
-  for (k=0; k<ndig; k++) {
-    fmddigit= (AliFMDdigit*) FMDSdigits->UncheckedAt(k);
-    Int_t iVolume=fmddigit->Volume();
-    Int_t iNumberOfSector =fmddigit->NumberOfSector();
-    Int_t iNumberOfRing=fmddigit->NumberOfRing();
-    chargeSum[iVolume][iNumberOfSector][iNumberOfRing]+=fmddigit->Charge();
   }
 }
 
-
index 0e7787f..a95f6ac 100644 (file)
@@ -6,7 +6,9 @@
 #include "AliDigitizer.h"
 
 class AliRunDigitizer;
-
+//class AliFMD;
+class AliFMDdigit;
+class AliFMDhit;
 class AliFMDDigitizer : public AliDigitizer {
  public:
   
@@ -14,24 +16,28 @@ class AliFMDDigitizer : public AliDigitizer {
   AliFMDDigitizer(AliRunDigitizer * manager);
   virtual ~AliFMDDigitizer();
   virtual Bool_t Init();
-    
+   
   
   // Do the main work
   void Exec(Option_t* option=0) ;
   Int_t PutNoise(Int_t charge){return (Int_t)(gRandom->Gaus(charge,500));}
-  TClonesArray *SDigits() const {return fSDigits;}
+  TClonesArray *Digits() const {return fDigits;}
+  TClonesArray *Hits() const {return fHits;}
  
 
-  void ReadDigit(Int_t a[][50][300], Int_t);
   
   enum {kBgTag = -1};
       
    
  private:
-    TClonesArray *fDigits;               // ! array with digits
-    TClonesArray *fSDigits      ; // List of summable digits
-     
+  TClonesArray *fDigits;               // ! array with digits
+  TClonesArray *fHits;                 // List of hits
+  AliRunDigitizer* GetManager(){return fManager;}
+         
     ClassDef(AliFMDDigitizer,0)
 };    
 #endif
 
+
+
+
index bd618b3..cd5fd35 100644 (file)
@@ -16,6 +16,6 @@
 #pragma link C++ class  AliFMDReconstruction+;
 #pragma link C++ class  AliFMDReconstParticles+;
 #pragma link C++ class  AliFMDMerger+;
-#pragma link C++ class  AliFMDSDigitizer+;
+#pragma link C++ class  AliFMDDigitizer+;
 
 #endif
index 1404e70..19e566a 100644 (file)
@@ -9,7 +9,7 @@ PACKAGE = FMD
 
 # C++ sources
 
-SRCS          = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx
+SRCS          = AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx  AliFMDDigitizer.cxx
 
 # C++ Headers
 
index fec4548..b8c2110 100644 (file)
@@ -1,4 +1,4 @@
-SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDSDigitizer.cxx
+SRCS= AliFMD.cxx AliFMDv0.cxx AliFMDv1.cxx AliFMDhit.cxx AliFMDdigit.cxx AliFMDMerger.cxx AliFMDReconstruction.cxx AliFMDReconstParticles.cxx AliFMDDigitizer.cxx
 
 
 HDRS= $(SRCS:.cxx=.h)