Bool_t KVIDHarpeeSiCsI_e503::Identify(KVIdentificationResult* idr, Double_t x,
                                      Double_t y)
{
   assert(idr);
   if (!kInitialised_) Init();

   if (x < 0.) x = GetIDMapX();
   if (y < 0.) y = GetIDMapY();

   if (x == 0.) return kFALSE;
   if (y == 0.) return kFALSE;

   idr->IDOK = kFALSE;
   idr->IDattempted = kTRUE;

   // Base class performs the preliminary identification routine. We do this
   // after the initialisation check as we require base_id_result_.
   assert(base_id_result_);
#if __cplusplus < 201103L
   KVIDHarpeeSiCsI::Identify(base_id_result_, x, y);
#else
   KVIDHarpeeSiCsI::Identify(base_id_result_.get(), x, y);
#endif

   // Set the idcode and type for this telescope
   idr->IDcode = fIDCode;
   idr->SetIDType(GetType());

   if (!base_id_result_->Zident) {
      idr->IDquality = kBaseIdentZFailed;
      return kFALSE;
   }

   idr->Z = base_id_result_->Z;
   idr->PID = base_id_result_->PID;

   assert((idr->Z > 0) && (idr->Z < 120));
   assert(idr->PID > 0.);

   // At this point Z should be well identified by the base class

   minimiser_->SetIDTelescope(GetName());
   idr->A = minimiser_->Minimise(idr->Z, y, x);

   if (idr->A > 0) {

      idr->Zident = kTRUE;
      idr->Aident = kTRUE;

      idr->IDOK = kTRUE;
      idr->IDquality = kIdentified;

      return kTRUE;
   }

   return kFALSE;

}
Bool_t KVIDSiLiCsI_camp5::Identify(KVIdentificationResult* IDR, Double_t x, Double_t y)
{
   //Particle identification and code setting using identification grids.

   //perform identification in SiLi(GG) - CsI(R) map
   IDR->SetIDType(GetType());
   IDR->IDattempted = kTRUE;

   Double_t sili = (y < 0. ? GetIDMapY("GG") : y);
   Double_t csir = (x < 0. ? GetIDMapX() : x);

   KVIDGrid* theIdentifyingGrid = 0;

   fGGgrid->Identify(csir, sili, IDR);
   theIdentifyingGrid = (KVIDGrid*)fGGgrid;

   if (fGGgrid->GetQualityCode() > KVIDZAGrid::kICODE6 && fPGgrid) { //we have to try PG grid (if there is one)

      // try Z & A identification in SiLi(PG)-CsI(R) map
      sili = (y < 0. ? GetIDMapY("PG") : y);
      fPGgrid->Identify(csir, sili, IDR);
      theIdentifyingGrid = (KVIDGrid*)fPGgrid;
   }


   if (theIdentifyingGrid->GetQualityCode() == KVIDZAGrid::kICODE8) {
      // only if the final quality code is kICODE8 do we consider that it is
      // worthwhile looking elsewhere. In all other cases, the particle has been
      // "identified", even if we still don't know its Z and/or A (in this case
      // we consider that we have established that they are unknowable).
      return kFALSE;
   }

   if (theIdentifyingGrid->GetQualityCode() == KVIDZAGrid::kICODE7) {
      // if the final quality code is kICODE7 (above last line in grid) then the estimated
      // Z is only a minimum value (Zmin)
      IDR->IDcode = kIDCode5;
      return kTRUE;
   }

   if (theIdentifyingGrid->GetQualityCode() > KVIDZAGrid::kICODE3 &&
         theIdentifyingGrid->GetQualityCode() < KVIDZAGrid::kICODE7) {
      // if the final quality code is kICODE4, kICODE5 or kICODE6 then this "nucleus"
      // corresponds to a point which is inbetween the lines, i.e. noise
      IDR->IDcode = kIDCode10;
      return kTRUE;
   }

   // set general ID code SiLi-CsI
   IDR->IDcode = kIDCode3;
   return kTRUE;
}
Beispiel #3
0
Bool_t KVIDChIoCorrCsI::Identify(KVIdentificationResult* idr, Double_t x, Double_t y) 
{
    idr->SetIDType(GetType());
    idr->IDattempted = kTRUE;

    Double_t chIoCorr = (y<0. ? GetIDMapY() : y);
    Double_t csiLight = (x<0. ? GetIDMapX() : x);

	if(fGrid->IsIdentifiable(csiLight,chIoCorr))
    	fGrid->Identify(csiLight, chIoCorr, idr);

    if(fGrid->GetQualityCode() == KVIDZAGrid::kICODE8){
        // only if the final quality code is kICODE8 do we consider that it is
        // worthwhile looking elsewhere. In all other cases, the particle has been
        // "identified", even if we still don't know its Z and/or A (in this case
        // we consider that we have established that they are unknowable).
		idr->IDcode = kIDCode15;
        return kFALSE;
    }

    if(fGrid->GetQualityCode() == KVIDZAGrid::kICODE7){
        // if the final quality code is kICODE7 (above last line in grid) then the estimated
        // Z is only a minimum value (Zmin)
        idr->IDcode = kIDCode5;
        return kTRUE;
    }

    if(fGrid->GetQualityCode() > KVIDZAGrid::kICODE3 && fGrid->GetQualityCode() < KVIDZAGrid::kICODE7){
        // if the final quality code is kICODE4, kICODE5 or kICODE6 then this "nucleus"
        // corresponds to a point which is inbetween the lines, i.e. noise
        idr->IDcode = kIDCode10;
        return kTRUE;
    }
    if(fGrid->GetQualityCode() == KVIDGChIoSi_e494s::k_BelowSeuilChIo){

		idr->IDcode = kIDCode15;
		return kTRUE;
	}

    // set general ID code ChIo-CsI
    idr->IDcode = kIDCode4;

    return kTRUE;
}
Beispiel #4
0
Bool_t KVIDCsI::Identify(KVIdentificationResult* IDR, Double_t x, Double_t y)
{
   //Particle identification and code setting using identification grid KVIDGCsI* fGrid.

		IDR->SetIDType( GetType() );
		IDR->IDattempted = kTRUE;
	
      //perform identification
      Double_t csir = (y<0. ? GetIDMapY() : y);
      Double_t csil = (x<0. ? GetIDMapX() : x);
      CsIGrid->Identify(csil, csir, IDR);

      // set general ID code
      IDR->IDcode = kIDCode2;

      // general ID code for gammas
      if (IDR->IDquality == KVIDGCsI::kICODE10)
         IDR->IDcode = kIDCode0;

      return kTRUE;

}
Bool_t KVIDChIoCsI_camp5::Identify(KVIdentificationResult* idr, Double_t x, Double_t y)
{
   //Particle identification and code setting using identification grids.

   //perform identification in ChIo(GG) - CsI(H) map

   idr->SetIDType(GetType());
   idr->IDattempted = kTRUE;

   Double_t cigg = (y < 0. ? GetIDMapY("GG") : y);
   Double_t lumtot = (x < 0. ? GetIDMapX() : x);

   KVIDZAGrid* theIdentifyingGrid = 0;

   fGGgrid->Identify(lumtot, cigg, idr);
   theIdentifyingGrid = (KVIDZAGrid*)fGGgrid;

   if (idr->IDOK && idr->Z == theIdentifyingGrid->GetZmax() && TMath::Nint(GetIDMapY("GG")) == 4095) {
      //Gestion des saturations GG
      //on teste l identification PG
      if (fPGgrid) {
         Double_t cipg = (y < 0. ? GetIDMapY("PG") : y);
         fPGgrid->Identify(lumtot, cipg, idr);
         //on garde l identification PG si celle ci renvoie un code
         //de 0 a 4 ou 7
         if (idr->Zident) {
            theIdentifyingGrid = (KVIDZAGrid*)fPGgrid;
         }
      }
   }
   if (theIdentifyingGrid == fGGgrid) {
      if (fGGgrid->GetQualityCode() > KVIDZAGrid::kICODE6 && fPGgrid) { //we have to try PG grid (if there is one)
         // try Z & A identification in ChIo(PG)-CsI(H) map
         Double_t cipg = (y < 0. ? GetIDMapY("PG") : y);
         fPGgrid->Identify(lumtot, cipg, idr);
         theIdentifyingGrid = (KVIDZAGrid*)fPGgrid;
      }
   }
   if (theIdentifyingGrid->GetQualityCode() == KVIDZAGrid::kICODE8) {
      // only if the final quality code is kICODE8 do we consider that it is
      // worthwhile looking elsewhere. In all other cases, the particle has been
      // "identified", even if we still don't know its Z and/or A (in this case
      // we consider that we have established that they are unknowable).
      return kFALSE;
   }

   if (theIdentifyingGrid->GetQualityCode() == KVIDZAGrid::kICODE7) {
      // if the final quality code is kICODE7 (above last line in grid) then the estimated
      // Z is only a minimum value (Zmin)
      idr->IDcode = kIDCode5;
      return kTRUE;
   }

   if (theIdentifyingGrid->GetQualityCode() > KVIDZAGrid::kICODE3 &&
         theIdentifyingGrid->GetQualityCode() < KVIDZAGrid::kICODE7) {
      // if the final quality code is kICODE4, kICODE5 or kICODE6 then this "nucleus"
      // corresponds to a point which is inbetween the lines, i.e. noise
      idr->IDcode = kIDCode10;
      return kTRUE;
   }

   // set general ID code ChIo-CsI
   idr->IDcode = kIDCode4;
   return kTRUE;
}