Inheritance from TObject. Automatic streamers.
[u/mrichter/AliRoot.git] / PHOS / AliPHOSvImpacts.cxx
index bbdcddc..80780d8 100644 (file)
 ClassImp(AliPHOSvImpacts)
 
 //____________________________________________________________________________
-AliPHOSvImpacts::AliPHOSvImpacts()
+AliPHOSvImpacts::AliPHOSvImpacts():AliPHOSv1()
 {
   // ctor
+  fEMCImpacts  = 0 ;
+  fPPSDImpacts = 0 ;
+  fCPVImpacts  = 0 ; 
 }
 
 //____________________________________________________________________________
@@ -53,9 +56,6 @@ AliPHOSvImpacts::AliPHOSvImpacts(const char *name, const char *title):
 AliPHOSv1(name,title) 
 {
   // ctor : title is used to identify the layout
-  //        GPS2 = 5 modules (EMC + PPSD)
-  //        IHEP = 5 modules (EMC + CPV )
-  //        MIXT = 4 modules (EMC + CPV ) and 1 module (EMC + PPSD)
   //
   // We store hits :
   //   - fHits (the "normal" one), which retains the hits associated with
@@ -64,34 +64,27 @@ AliPHOSv1(name,title)
   //     This part inherits from AliPHOSv1
   //
   // We store impacts :
-  //  - fEMCImpacts, fCPVImpacts, fPPSDImpacts which are
-  //    TList of EMC, CPV and PPSD modules respectively, each
+  //  - fEMCImpacts, fCPVImpacts which are
+  //    TList of EMC and CPV modules respectively, each
   //    modules contains TClonesArray of AliPHOSImpacts
   
   fEMCImpacts  = new TList();
   fCPVImpacts  = new TList();
-  fPPSDImpacts = new TList();
 
-  Int_t nPHOSModules = fGeom->GetNModules();
-  Int_t nCPVModules  = fGeom->GetNCPVModules();
-  Int_t nPPSDModules = fGeom->GetNPPSDModules();
+  Int_t nPHOSModules = GetGeometry()->GetNModules();
+  Int_t nCPVModules  = GetGeometry()->GetNModules();
 
   Int_t iPHOSModule;
   TClonesArray * impacts;
   for (iPHOSModule=0; iPHOSModule<nPHOSModules; iPHOSModule++) {
     fEMCImpacts->Add(new TClonesArray("AliPHOSImpact",200)) ;
     fNEMCImpacts[iPHOSModule] = 0;
-    impacts = (TClonesArray *)fEMCImpacts->At(iPHOSModule);
+    impacts = dynamic_cast<TClonesArray *>(fEMCImpacts->At(iPHOSModule));
   }
   for (iPHOSModule=0; iPHOSModule<nCPVModules; iPHOSModule++) {
     fCPVImpacts->Add(new TClonesArray("AliPHOSImpact",200)) ;
     fNCPVImpacts[iPHOSModule] = 0;
-    impacts = (TClonesArray *)fCPVImpacts->At(iPHOSModule);
-  }
-  for (iPHOSModule=0; iPHOSModule<nPPSDModules; iPHOSModule++) {
-    fPPSDImpacts->Add(new TClonesArray("AliPHOSImpact",200)) ;
-    fNPPSDImpacts[iPHOSModule] = 0;
-    impacts = (TClonesArray *)fPPSDImpacts->At(iPHOSModule);
+    impacts = dynamic_cast<TClonesArray *>(fCPVImpacts->At(iPHOSModule));
   }
 
 }
@@ -108,7 +101,7 @@ AliPHOSvImpacts::~AliPHOSvImpacts()
     fHits = 0 ; 
   }
 
-  // Delete impacts in EMC, CPV and PPSD
+  // Delete impacts in EMC, CPV
   if ( fEMCImpacts ) {
     fEMCImpacts->Delete() ; 
     delete fEMCImpacts ;
@@ -119,11 +112,6 @@ AliPHOSvImpacts::~AliPHOSvImpacts()
     delete fCPVImpacts ;
     fCPVImpacts = 0 ; 
   }
-  if ( fPPSDImpacts ) {
-    fPPSDImpacts->Delete() ; 
-    delete fPPSDImpacts ;
-    fPPSDImpacts = 0 ; 
-  }
 }
 
 //____________________________________________________________________________
@@ -136,26 +124,21 @@ void AliPHOSvImpacts::AddImpact( char* det, Int_t shunt, Int_t primary, Int_t tr
   Int_t         nImpacts = 0;
 
   if (strcmp(det,"EMC ")==0) {
-    impacts = (TClonesArray *)fEMCImpacts->At(module);
+    impacts = dynamic_cast<TClonesArray *>(fEMCImpacts->At(module));
     nImpacts= fNEMCImpacts[module];
     fNEMCImpacts[module]++ ;
   }
   else if (strcmp(det,"CPV ")==0) {
-    impacts = (TClonesArray *)fCPVImpacts->At(module);
+    impacts = dynamic_cast<TClonesArray *>(fCPVImpacts->At(module));
     nImpacts= fNCPVImpacts[module];
     fNCPVImpacts[module]++ ;
   }
-  else if (strcmp(det,"PPSD")==0) {
-    impacts = (TClonesArray *)fPPSDImpacts->At(module);
-    nImpacts= fNPPSDImpacts[module];
-    fNPPSDImpacts[module]++ ;
-  }
 
   new((*impacts)[nImpacts]) AliPHOSImpact(shunt,primary,track,pid,p,xyz) ;
 
   if (fDebug==1) {
     printf("Module %d %s: ",module,det);
-    ((AliPHOSImpact*)(impacts->At(nImpacts)))->Print();
+    (dynamic_cast<AliPHOSImpact*>((impacts->At(nImpacts))))->Print();
   }
 }
 
@@ -171,7 +154,6 @@ void AliPHOSvImpacts::MakeBranch(Option_t *opt, const char *file)
   Int_t splitlevel = 0 ;
   gAlice->TreeH()->Branch("PHOSEmcImpacts" , "TList", &fEMCImpacts , bufferSize, splitlevel);
   gAlice->TreeH()->Branch("PHOSCpvImpacts" , "TList", &fCPVImpacts , bufferSize, splitlevel);
-  gAlice->TreeH()->Branch("PHOSPpsdImpacts", "TList", &fPPSDImpacts, bufferSize, splitlevel);
   
 }
 
@@ -183,23 +165,14 @@ void AliPHOSvImpacts::ResetHits()
   AliDetector::ResetHits();
 
   Int_t i;
-  for (i=0; i<fGeom->GetNModules(); i++) {
-    ((TClonesArray*)fEMCImpacts->At(i)) -> Clear();
+  for (i=0; i<GetGeometry()->GetNModules(); i++) {
+    (dynamic_cast<TClonesArray*>(fEMCImpacts->At(i))) -> Clear();
     fNEMCImpacts[i] = 0 ;
   }
 
-  if ( strcmp(fGeom->GetName(),"IHEP") == 0 || strcmp(fGeom->GetName(),"MIXT") == 0 ) {
-    for (i=0; i<fGeom->GetNCPVModules(); i++) {
-      ((TClonesArray*)fCPVImpacts->At(i)) -> Clear();
-      fNCPVImpacts[i] = 0 ;
-    }
-  }
-
-  if ( strcmp(fGeom->GetName(),"GPS2") == 0 || strcmp(fGeom->GetName(),"MIXT") == 0 ) {
-    for (i=0; i<fGeom->GetNPPSDModules(); i++) {
-      ((TClonesArray*)fPPSDImpacts->At(i)) -> Clear();
-      fNPPSDImpacts[i] = 0 ;
-    }
+  for (i=0; i<GetGeometry()->GetNModules(); i++) {
+    (dynamic_cast<TClonesArray*>(fCPVImpacts->At(i))) -> Clear();
+    fNCPVImpacts[i] = 0 ;
   }
   
 }
@@ -207,7 +180,7 @@ void AliPHOSvImpacts::ResetHits()
 //_____________________________________________________________________________
 void AliPHOSvImpacts::StepManager(void)
 {
-  // Find impacts (tracks which enter the EMC, CPV or PPSD)
+  // Find impacts (tracks which enter the EMC, CPV)
   // and add them to to the impact lists
 
   AliPHOSv1::StepManager();
@@ -219,7 +192,7 @@ void AliPHOSvImpacts::StepManager(void)
 
   Int_t tracknumber =  gAlice->CurrentTrack() ; 
   Int_t primary     =  gAlice->GetPrimary( gAlice->CurrentTrack() ); 
-  TString name      =  fGeom->GetName() ; 
+  TString name      =  GetGeometry()->GetName() ; 
 
   // Add impact to EMC
 
@@ -239,13 +212,11 @@ void AliPHOSvImpacts::StepManager(void)
     gMC -> Gmtod (pm,   pd,   2);    // transform 3-momentum from master to daughter system
 
     // Select tracks coming to the crystal from up or down sides
-    if (pd[1]<0 && xyzd[1] >  fGeom->GetCrystalSize(1)/2-0.001 ||
-       pd[1]>0 && xyzd[1] < -fGeom->GetCrystalSize(1)/2+0.001) {
+    if (pd[1]<0 && xyzd[1] >  GetGeometry()->GetCrystalSize(1)/2-0.001 ||
+       pd[1]>0 && xyzd[1] < -GetGeometry()->GetCrystalSize(1)/2+0.001) {
       Int_t pid = gMC->TrackPid();
       Int_t module;
       gMC->CurrentVolOffID(10,module);
-      if ( name == "MIXT" && strcmp(gMC->CurrentVolOffName(10),"PHO1") == 0 )
-       module += fGeom->GetNModules() - fGeom->GetNPPSDModules();
       module--;
       AddImpact("EMC ",fIshunt, primary,tracknumber, module, pid, pmom, xyzm);
     }
@@ -253,8 +224,7 @@ void AliPHOSvImpacts::StepManager(void)
 
   // Add impact to CPV
 
-  if( (name == "IHEP" || name == "MIXT") &&
-      gMC->CurrentVolID(copy) == gMC->VolId("PCPQ") &&
+  if( gMC->CurrentVolID(copy) == gMC->VolId("PCPQ") &&
       gMC->IsTrackEntering() ) {
     gMC->TrackMomentum(pmom);
     gMC->TrackPosition(pos) ;
@@ -272,33 +242,5 @@ void AliPHOSvImpacts::StepManager(void)
     module--;
     AddImpact("CPV ",fIshunt, primary,tracknumber, module, pid, pmom, xyzm);
   }
-
-  // Add impact to PPSD
-
-  if( (name == "GPS2" || name == "MIXT") &&
-      gMC->CurrentVolID(copy) == gMC->VolId("PPCE") &&
-      gMC->IsTrackEntering() ) {
-    gMC->TrackMomentum(pmom);
-    gMC->TrackPosition(pos) ;
-
-    Int_t i;
-    for (i=0; i<3; i++) xyzm[i] = pos[i];
-
-    for (i=0; i<3; i++) {
-      xyzm[i] = pos[i] ;
-      pm[i]   = pmom[i];
-    }
-    gMC -> Gmtod (xyzm, xyzd, 1);    // transform coordinate from master to daughter system
-    gMC -> Gmtod (pm,   pd,   2);    // transform 3-momentum from master to daughter system
-
-    // Select tracks coming to the crystal from up or down sides
-    if (pd[1]<0 && xyzd[1] >  (fGeom->GetConversionGap() +  fGeom->GetAvalancheGap())/2-0.001 ||
-       pd[1]>0 && xyzd[1] < -(fGeom->GetConversionGap() +  fGeom->GetAvalancheGap())/2+0.001) {
-      Int_t pid = gMC->TrackPid();
-      Int_t module;
-      gMC->CurrentVolOffID(5,module);
-      module--;
-      AddImpact("PPSD",fIshunt, primary,tracknumber, module, pid, pmom, xyzm);
-    }
-  }
+  
 }