Ejemplo n.º 1
0
void KVReconstructedEvent::IdentifyEvent()
{
   //All particles which have not been previously identified (IsIdentified=kFALSE), and which
   //may be identified independently of all other particles in their group according to the 1st
   //order coherency analysis (KVReconstructedNucleus::GetStatus=0), will be identified.
   //Particles stopping in first member of a telescope (KVReconstructedNucleus::GetStatus=3) will
   //have their Z estimated from the energy loss in the detector (if calibrated).

   KVReconstructedNucleus *d;
   while ((d = GetNextParticle())) {
      if (!d->IsIdentified()){
         if(d->GetStatus() == KVReconstructedNucleus::kStatusOK){
            // identifiable particles
            d->Identify();
         }
         else if(d->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) {
            // particles stopped in first member of a telescope
            // estimation of Z (minimum) from energy loss (if detector is calibrated)
            UInt_t zmin = d->GetStoppingDetector()->FindZmin(-1., d->GetMassFormula());
            if( zmin ){
               d->SetZ( zmin );
               d->SetIsIdentified();
               // "Identifying" telescope is taken from list of ID telescopes
               // to which stopping detector belongs
               d->SetIdentifyingTelescope( (KVIDTelescope*)d->GetStoppingDetector()->GetIDTelescopes()->At(0) );
            }
         }
      }
   }
}
Ejemplo n.º 2
0
void KVReconstructedEvent::CalibrateEvent()
{
   // Calculate and set energies of all identified particles in event.
	//
	// This will call the KVReconstructedNucleus::Calibrate() method of each
	// uncalibrated particle (those for which KVReconstructedNucleus::IsCalibrated()
	// returns kFALSE).
	//
	// In order to make sure that target energy loss corrections are correctly
	// calculated, we first set the state of the target in the current multidetector

	KVTarget* t = gMultiDetArray->GetTarget();
	if(t){
		t->SetIncoming(kFALSE); t->SetOutgoing(kTRUE);
	}

   KVReconstructedNucleus *d;

   while ((d = GetNextParticle())) {

      if (d->IsIdentified() && !d->IsCalibrated()){
            d->Calibrate();
      }

   }

}
bool KVINDRABackwardGroupReconstructor::DoCoherencyAnalysis(KVReconstructedNucleus& PART)
{
   // Coherency analysis for backward rings 10-17 of INDRA

   PART.SetParameter("UseFullChIoEnergyForCalib", !(theChio && theChio->GetNHits() > 1));
   bool ok = false;
   if (PART.GetStoppingDetector()->IsType("CSI")) {
      // particles stopping in CsI detectors
      // check coherency of CsI-R/L and Si-CsI identifications
      ok = CoherencyChIoCsI(PART);
   }
   else {
      // particle stopped in ChIo (=> Zmin)
      ok = PART.IsIdentified() && identifying_telescope;
   }

   return ok;
}