]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ZDC/AliZDC.cxx
New&delete used for array with variable size
[u/mrichter/AliRoot.git] / ZDC / AliZDC.cxx
index 80af78be161ca4fbdb5576bed7dc02e57c82fc51..ba0d62cc3cd39bfa27721555538d99a3762166d7 100644 (file)
 
 /*
 $Log$
+Revision 1.22  2001/05/14 09:53:32  coppedis
+Adding functions ZMin and ZMax
+
+Revision 1.21  2001/04/20 10:05:02  coppedis
+Minor changes
+
+Revision 1.20  2001/03/26 13:39:20  coppedis
+Comment prints
+
+Revision 1.19  2001/03/26 09:10:23  coppedis
+Corrected bug in constructor (fIshunt has to be =1)
+
+Revision 1.18  2001/03/20 08:21:55  coppedis
+ZDC needs PIPE, ABSO, DIPO and SHIL
+
+Revision 1.17  2001/03/16 16:18:03  coppedis
+Correction for superposition of ZDC volumes with MUON arm one
+
+Revision 1.16  2001/03/15 16:01:11  coppedis
+Code review
+
+Revision 1.15  2001/01/26 19:56:27  hristov
+Major upgrade of AliRoot code
+
+Revision 1.14  2000/12/12 13:17:01  coppedis
+Minor corrections suggested by P. Hristov
+
 Revision 1.12  2000/12/01 08:19:01  coppedis
 Adding a message error if ZDC is constructed without DIPO
 
@@ -51,8 +78,9 @@ Introduction of the Copyright and cvs Log
 // --- ROOT system
 #include <TBRIK.h>
 #include <TNode.h>
-#include "TGeometry.h"
-#include "TTree.h"
+#include <TGeometry.h>
+#include <TFile.h>
+#include <TTree.h>
 
 // --- AliRoot header files
 #include "AliZDC.h"
@@ -76,11 +104,11 @@ AliZDC::AliZDC()
   fIshunt = 1;
 
   fNhits = 0;
-  fNStHits = 0;
-  
-  fStHits = new TClonesArray("AliZDCHit",1000);
-  
-  fNPrimaryHits = 0;
+
+//  fNStHits = 0;
+
+//  fNPrimaryHits = 0;
+  fNoShower   = 0;
 }
  
 //_____________________________________________________________________________
@@ -91,82 +119,19 @@ AliZDC::AliZDC(const char *name, const char *title)
   // Standard constructor for the Zero Degree Calorimeter base class
   //
 
-  // Check that DIPO is there (otherwise tracking is wrong!!!)
-  
-  AliModule* DIPO=gAlice->GetModule("DIPO");
-  if(!DIPO) {
-    Error("Constructor","ZDC needs DIPO!!!\n");
-    exit(1);
-  } 
-
   //
   // Allocate the array of hits
+  
+  fIshunt =  1;
 
   fHits   = new TClonesArray("AliZDCHit",1000);
   gAlice->AddHitList(fHits);
   
-  fStHits = new TClonesArray("AliZDCHit",1000);
+//  fStHits = new TClonesArray("AliZDCHit",1000);
+//  fNStHits = 0;
 
-  fNStHits = 0;
-
-  fNPrimaryHits = 0;
-  
-  fIshunt =  1;
-  
-  fDimZN[0] = 3.52;
-  fDimZN[1] = 3.52;
-  fDimZN[2] = 50.;
-  fDimZP[0] = 11.2;
-  fDimZP[1] = 6.;
-  fDimZP[2] = 75.;
-  fPosZN[0] = 0.;
-  fPosZN[1] = 0.;
-  fPosZN[2] = 11650.;
-  fPosZP[0] = -23.;
-  fPosZP[1] = 0.;
-  fPosZP[2] = 11600.;
-  fFibZN[0] = 0.;
-  fFibZN[1] = 0.01825;
-  fFibZN[2] = 50.;
-  fFibZP[0] = 0.;
-  fFibZP[1] = 0.0275;
-  fFibZP[2] = 75.;
-  fGrvZN[0] = 0.03;
-  fGrvZN[1] = 0.03;
-  fGrvZN[2] = 50.;
-  fGrvZP[0] = 0.04;
-  fGrvZP[1] = 0.04;
-  fGrvZP[2] = 75.;
-  fDivZN[0] = 11;
-  fDivZN[1] = 11;
-  fDivZN[2] = 0;
-  fDivZP[0] = 7;
-  fDivZP[1] = 15;
-  fDivZP[2] = 0;
-  fTowZN[0] = 2;
-  fTowZN[1] = 2;
-  fTowZP[0] = 4;
-  fTowZP[1] = 1;
-  
-  // EM Calorimeter
-  fDimZEMPb  = 0.15*(TMath::Sqrt(2.));
-  fDimZEMAir = 0.001;
-  fFibRadZEM = 0.0315;
-  fDivZEM[0] = 92;
-  fDivZEM[1] = 0;
-  fDivZEM[2] = 20;
-  fDimZEM[0] = 2*fDivZEM[2]*(fDimZEMPb+fDimZEMAir+fFibRadZEM*(TMath::Sqrt(2.)));
-  fDimZEM[1] = 3.5;
-  fDimZEM[2] = 3.5;
-  fDimZEM[3] = 45.;
-  fDimZEM[4] = 0.;
-  fDimZEM[5] = 0.;
-  fFibZEM[0] = 0.;
-  fFibZEM[1] = 0.0275;
-  fFibZEM[2] = fDimZEM[2]/TMath::Sin(fDimZEM[3]*kDegrad)-fFibRadZEM;
-  fPosZEM[0] = 0.;
-  fPosZEM[1] = 5.8;
-  fPosZEM[2] = 11600.;
+//  fNPrimaryHits = 0;
+  fNoShower   = 0;
 
 }
 //____________________________________________________________________________ 
@@ -177,6 +142,7 @@ AliZDC::~AliZDC()
   //
 
   fIshunt   = 0;
+
 //  delete fHits;
 //  if(fStHits){
 //    fStHits->Delete();
@@ -198,73 +164,89 @@ void AliZDC::AddHit(Int_t track, Int_t *vol, Float_t *hits)
   
   static Float_t primKinEn, xImpact, yImpact, sFlag;
 
-  TClonesArray &lsthits = *fStHits;
-
-
-  AliZDCHit *newquad, *curevquad, *curprimquad;
+  AliZDCHit *newquad, *curprimquad;
+//  AliZDCHit *curevquad;  
   newquad = new AliZDCHit(fIshunt, track, vol, hits);
 
+//  TClonesArray &lsthits = *fStHits;
   TClonesArray &lhits = *fHits;
-   
-  Int_t i,j,kStHit = 1;
-  for(i=0; i<fNStHits; i++){
-    // If the hits are equal (same track, same volume), sum them.
-     curevquad = (AliZDCHit*) lsthits[i];
-     kStHit = 1;
-     if(*curevquad == *newquad){
-        *curevquad = *curevquad+*newquad;
-        kStHit = 0;
-     } 
-  }
-
-  for(j=0; j<fNhits; j++){
-    // If the hits are equal (same track, same volume), sum them.
-     curprimquad = (AliZDCHit*) lhits[j];
-     if(*curprimquad == *newquad){
-        *curprimquad = *curprimquad+*newquad;
-       delete newquad;
-       return;
-     } 
-  }
   
   if(fNhits==0){
       // First hit -> setting flag for primary or secondary particle
       Int_t primary = gAlice->GetPrimary(track);     
       if(track != primary){
-        newquad->fSFlag = 1;  // Hit created by secondary particle entering the ZDC
+        newquad->fSFlag = 1;  // SECONDARY particle entering the ZDC
       }
       else if(track == primary){
-        newquad->fSFlag = 0;  // Hit created by PRIMARY particle entering the ZDC
+        newquad->fSFlag = 0;  // PRIMARY particle entering the ZDC
       }  
-      fNPrimaryHits = fNPrimaryHits + 1;
-      sFlag = newquad->fSFlag;
+//      fNPrimaryHits += 1;
+      sFlag    = newquad->fSFlag;
       primKinEn = newquad->fPrimKinEn;
-      xImpact = newquad->fXImpact;
-      yImpact = newquad->fYImpact;
+      xImpact  = newquad->fXImpact;
+      yImpact  = newquad->fYImpact;
    }
    else{       
       newquad->fPrimKinEn = primKinEn;
-      newquad->fXImpact = xImpact;
+      newquad->fXImpact        = xImpact;
       newquad->fYImpact = yImpact;
-      newquad->fSFlag = sFlag;
+      newquad->fSFlag  = sFlag;
    }
+  Int_t j;
+//  Int_t i,kStHit = 1;
+//  for(i=0; i<fNStHits; i++){
+//    // If hits are equal (same track, same volume), sum them.
+//     curevquad = (AliZDCHit*) lsthits[i];
+//     kStHit = 1;
+//     if(*curevquad == *newquad){
+//     *curevquad = *curevquad+*newquad;
+//     kStHit = 0;
+//     } 
+//     if(kStHit == 0) break;
+//  }
+
+  for(j=0; j<fNhits; j++){
+    // If hits are equal (same track, same volume), sum them.
+     curprimquad = (AliZDCHit*) lhits[j];
+     if(*curprimquad == *newquad){
+        *curprimquad = *curprimquad+*newquad;
+       delete newquad;
+       return;
+     } 
+  }
 
     //Otherwise create a new hit
     new(lhits[fNhits]) AliZDCHit(newquad);
     fNhits++;
     
-    if(kStHit){
-      new(lsthits[fNStHits]) AliZDCHit(newquad);
-      fNStHits++;
+//    if(kStHit){
+//      new(lsthits[fNStHits]) AliZDCHit(newquad);
+//      fNStHits++;
+//    }
+
+    if(fDebug == 1){ 
+      printf("\n  Primary Hits --------------------------------------------------------\n");
+      fHits->Print("");
+//      printf("\n  Event Hits --------------------------------------------------------\n");
+//      fStHits->Print("");
     }
-//    printf("\n  Primary Hits --------------------------------------------------------\n");
-//    fHits->Print("");
-//    printf("\n  Event Hits --------------------------------------------------------\n");
-//    fStHits->Print("");
 
     delete newquad;
   }
+//____________________________________________________________________________
+Float_t AliZDC::ZMin(void) const
+{
+  // Minimum dimension of the ZDC module in z
+  return 11600.;
+}
+
+//____________________________________________________________________________
+Float_t AliZDC::ZMax(void) const
+{
+  // Maximum dimension of the ZDC module in z
+  return  11750.;
+}
   
 //_____________________________________________________________________________
 void AliZDC::ResetDigits()