Exemplo n.º 1
0
KVUniqueNameList* KVDMS::GetFullListing(const Char_t* directory)
{
   // Create and fill TList with info (name, size, modification date)
   // on all files & containers in current directory
   // (default) or in given directory.
   // TList is filled with DMSFile_t objects which belong to the list, list must be deleted after use.

   longlist(directory);
   if (fout == "") {
      Error("GetListing", "Unknown directory %s", directory);
      return 0;
   }

   TObjArray* toks = fout.Tokenize("\n");
   KVUniqueNameList* list = new KVUniqueNameList(kTRUE);
   list->SetOwner(kTRUE);
   list->SetName(((TObjString*)(*toks)[0])->String().Remove(TString::kBoth, ' ').Data());
   for (int i = 1; i < toks->GetEntries(); i++) {
      TString tmp = ((TObjString*)(*toks)[i])->String().Remove(TString::kBoth, ' ');
      DMSFile_t* f = new DMSFile_t;
      if (IsContainer(tmp)) { // container
         f->SetName(gSystem->BaseName(tmp.Data()));
         f->SetIsContainer();
      } else {
         ExtractFileInfos(tmp, f);
      }
      list->Add(f);
   }
   delete toks;
   return list;
}
Exemplo n.º 2
0
void KVINDRAReconEvent::IdentifyEvent()
{
   // Performs event identification (see KVReconstructedEvent::IdentifyEvent), and then
   // particles stopping in first member of a telescope (GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) are
   // labelled with VEDA ID code kIDCode5 (Zmin)
	// 
	//   When CsI identification gives a gamma, we unset the 'analysed' state of all detectors
	// in front of the CsI and reanalyse the group in order to reconstruct and identify charged particles
	// stopping in them.
	//
   // Unidentified particles receive the general ID code for non-identified particles (kIDCode14)

   KVReconstructedEvent::IdentifyEvent();
   KVINDRAReconNuc *d=0;
	int mult = GetMult();
	KVUniqueNameList gammaGroups;//list of groups with gammas identified in CsI
	ResetGetNextParticle();
	
   while((d = GetNextParticle())){
      if (d->IsIdentified()&&d->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) {
         	d->SetIDCode( kIDCode5 ); // Zmin
		}
      else if (d->IsIdentified()&&d->GetCodes().TestIDCode(kIDCode0)){
				// gamma identified in CsI
				// reset analysed state of all detectors in front of CsI
			if(d->GetCsI()){
				if(d->GetCsI()->GetAlignedDetectors()){
					TIter next(d->GetCsI()->GetAlignedDetectors());
					KVDetector*det=(KVDetector*)next();//first detector = CsI
					while( (det = (KVDetector*)next()) ) det->SetAnalysed(kFALSE);
					gammaGroups.Add(d->GetGroup());
				}
				else
				{
					Error("IdentifyEvent", "particule id gamma, no aligned detectors???");
					d->Print();
				}	
			}
			else
			{
				Error("IdentifyEvent", "particule identified as gamma, has no CsI!!");
				d->Print();
			}
		}
   }
	
	// perform secondary reconstruction in groups with detected gammas
	int ngamG = gammaGroups.GetEntries();
        if(ngamG){
           for(int i=0; i<ngamG; i++){
              gIndra->AnalyseGroupAndReconstructEvent(this, (KVGroup*)gammaGroups.At(i));
           }
        }
        if(GetMult()>mult) {
		/*Info("IdentifyEvent", "Event#%d: Secondary reconstruction (gammas) -> %d new particles",
			GetNumber(), GetMult()-mult);*/

		// identify new particles generated in secondary reconstruction 
   	KVReconstructedEvent::IdentifyEvent();
		ResetGetNextParticle();
	
   	while((d = GetNextParticle())){
      	if (d->IsIdentified()&&d->GetStatus() == KVReconstructedNucleus::kStatusStopFirstStage) {
         	d->SetIDCode( kIDCode5 ); // Zmin
			}
      	else if(!d->IsIdentified()){
         	d->SetIDCode( kIDCode14 );
      	}
		}
		/*
		for(int i=mult+1; i<=GetMult(); i++){
			d = GetParticle(i);
			if(d->IsIdentified())
				printf("\t%2d: Ring %2d Module %2d Z=%2d  A=%3d  code=%d\n",i,d->GetRingNumber(),
						d->GetModuleNumber(),d->GetZ(),d->GetA(),d->GetCodes().GetVedaIDCode());
			else
				printf("\t%2d: Ring %2d Module %2d UNIDENTIFIED status=%d\n", i,d->GetRingNumber(),
						d->GetModuleNumber(), d->GetStatus());
		}
		*/
	}
}