void cNewO_NameManager::LoadHomFloats(cNewO_OneIm * anI1,cNewO_OneIm * anI2,std::vector<Pt2df> * aVP1,std::vector<Pt2df> * aVP2)
{
   if (anI1->Name() > anI2->Name())
   {
       ElSwap(anI1,anI2);
       ElSwap(aVP1,aVP2);
   }
   std::string aNameH = NameHomFloat(anI1,anI2);

   ELISE_fp aFile(aNameH.c_str(),ELISE_fp::READ,false);
   // FILE *  aFP = aFile.FP() ;
   int aRev = aFile.read_INT4();
   if (aRev>NumHgRev())
   {
   }
   int aNb = aFile.read_INT4();


   aVP1->reserve(aNb);
   aVP2->reserve(aNb);
   aVP1->resize(aNb);
   aVP2->resize(aNb);
   aFile.read(VData(*aVP1),sizeof((*aVP1)[0]),aNb);
   aFile.read(VData(*aVP2),sizeof((*aVP2)[0]),aNb);

   aFile.close();
}
bool cNewO_NameManager::LoadTriplet(cNewO_OneIm * anI1 ,cNewO_OneIm * anI2,cNewO_OneIm * anI3,std::vector<Pt2df> * aVP1,std::vector<Pt2df> * aVP2,std::vector<Pt2df> * aVP3)
{
   int aRnk[3] ;
   Rank3(aRnk,anI1->Name(),anI2->Name(),anI3->Name());

   tPtrNIm aVIm[3];
   aVIm[aRnk[0]] =  anI1;
   aVIm[aRnk[1]] =  anI2;
   aVIm[aRnk[2]] =  anI3;

   std::string aName3 = NameHomTriplet(aVIm[0],aVIm[1],aVIm[2]);
   if (! ELISE_fp::exist_file(aName3)) return false;

   tPtrVPt2df aVPt[3];
   aVPt[aRnk[0]] =  aVP1;
   aVPt[aRnk[1]] =  aVP2;
   aVPt[aRnk[2]] =  aVP3;



   ELISE_fp aFile(aName3.c_str(),ELISE_fp::READ,false);
   int aRev = aFile.read_INT4();
   if (aRev>NumHgRev())
   {
   }
   int aNb = aFile.read_INT4();
   for (int aK=0 ; aK<3 ; aK++)
   {
      aVPt[aK]->reserve(aNb);
      aVPt[aK]->resize(aNb);
      aFile.read(VData(*(aVPt[aK])),sizeof(Pt2df),aNb);
   }
   aFile.close();
   return true;
}
void Bench_Rank()
{
    std::cout << "Begin Bench Rank \n";
   
    for (int aTime=0 ; aTime<10000; aTime++)
    {
        int aNb = round_ni(1 + ElSquare(10*NRrandom3()));
        std::vector<double> aV;
        for (int aK=0 ; aK<aNb ; aK++)
           aV.push_back(NRrandC());

        for (int aK=0 ; aK < aNb ; aK++)
        {
            for (int aK2=0 ; aK2 < 3 ; aK2++)
                if (NRrandom3()<0.2)
                   aV.push_back(aV[aK]);

            for (int aK2=0 ; aK2 < int(aV.size()) ; aK2++)
                if (NRrandom3()<0.02)
                   aV[aK2] = aV[aK];
         }

        aNb = aV.size();

        std::vector<double>  aV2 = aV;
        std::vector<double>  aV3 = aV;

         int aRnk = NRrandom3(aNb);

         double aVK =KthVal(VData(aV),aNb,aRnk);

         std::sort(aV2.begin(),aV2.end());
         double aVK2 = aV2[aRnk];

         // std::cout << "Bench Rank " << aVK-aVK2 << "\n";
         ELISE_ASSERT(ElAbs(aVK-aVK2)<1e-10,"Bench rnk");

/*
   Ne marche pas : la valeur RrnK est n'importe ou

         SplitArrounKthValue(VData(aV3),aNb,aRnk);
         double aVK3 = aV3[aRnk];
         std::cout << "Bench Rank " << aVK-aVK2 << " " << aVK-aVK3<< "\n";
         ELISE_ASSERT(ElAbs(aVK-aVK2)<1e-10,"Bench rnk");
         ELISE_ASSERT(ElAbs(aVK-aVK3)<1e-10,"Bench rnk");
*/

    }
    std::cout << "OK BENCH RANK \n";
}
示例#4
0
void FillStat(cXml_StatVino & aStat,Flux_Pts aFlux,Fonc_Num aFonc)
{
   aFonc = Rconv(aFonc);
   int aNbCh = aFonc.dimf_out();
   aStat.Soms().resize(aNbCh,0.0);
   aStat.Soms2().resize(aNbCh,0.0);
   aStat.ECT().resize(aNbCh,0.0);
   aStat.VMax().resize(aNbCh,0.0);
   aStat.VMin().resize(aNbCh,0.0);
   Symb_FNum aSF(aFonc);

   ELISE_COPY
   (
        aFlux,
        Virgule(1.0,aSF,Square(aSF)),
        Virgule
        (
            sigma(aStat.Nb()),
            sigma(VData(aStat.Soms()),aNbCh)  | VMin(VData(aStat.VMin()),aNbCh) | VMax(VData(aStat.VMax()),aNbCh),
            sigma(VData(aStat.Soms2()),aNbCh)
        )
   );

   double aNb = aStat.Nb();
   aStat.IntervDyn() = Pt2dr(0,0);

   for (int aK=0 ; aK<aNbCh ; aK++)
   {
       aStat.Soms()[aK] /= aNb;
       aStat.Soms2()[aK] /= aNb;
       aStat.ECT()[aK] = sqrt(ElMax(0.0,aStat.Soms2()[aK]-ElSquare(aStat.Soms()[aK])));
       aStat.IntervDyn().x += aStat.VMin()[aK];
       aStat.IntervDyn().y += aStat.VMax()[aK];
   }
    aStat.IntervDyn() = aStat.IntervDyn() / aNbCh;
}
示例#5
0
std::vector<int> cAMD_Interf::DoRank(bool show) 
{
   Im2D_Bits<1> aM(1,1);
   if (show)
      aM = Im2D_Bits<1>(mNb,mNb,0);

   std::vector<int> Ap,Ai,P;
   Ap.push_back(0);
   for (int aK=0 ; aK<mNb ; aK++)
   {
       std::vector<int> & aVK = mV[aK];
       std::sort(aVK.begin(),aVK.end());
       aVK.erase(std::unique(aVK.begin(),aVK.end()),aVK.end());

      for (int aI=0;aI<int(aVK.size()) ; aI++)
      {
          Ai.push_back(aVK[aI]);
          if (show)
          {
              aM.set(aK,aVK[aI],1);
          }
          // std::cout << " " << aVK[aI] ;
      }
      Ap.push_back(Ap.back()+aVK.size());
      P.push_back(0);
      // std::cout << "\n";

   }



   double Control [AMD_CONTROL] , Info [AMD_INFO] ;

   amd_defaults (Control) ;
   // amd_control  (Control) ;

   int result;
   result = amd_order(mNb,VData(Ap),VData(Ai), VData(P),Control,Info);

   ELISE_ASSERT(result==0,"amd_order");
   //std::cout << "RES = "  << result << "\n";

   std::vector<int> aRes(mNb,-1);
   for (int aK=0 ; aK<mNb ; aK++)
   {
       aRes[P[aK]] = aK;
   }
   if (show)
   {
      for (int aK=0 ; aK<mNb ; aK++)
      {
   
      }
      std::cout << "\n";
   }
    // result = amd_order (n, Ap, Ai, P, Control, Info) ;

   if (show)
   {
       Im2D_Bits<1> aM2(mNb,mNb);
       for (int aX=0 ; aX<mNb ; aX++)
       {
           for (int aY=0 ; aY<mNb ; aY++)
           {
                 aM2.set(aRes[aX],aRes[aY],aM.get(aX,aY));
                // aM2.set(aX,aY,aM.get(P[aX],P[aY]));
           }
       }
       ShowMat(aM);
       std::cout << "\n";
       ShowMat(aM2);
   }
   return aRes;
}
示例#6
0
文件: smf.c 项目: keoni29/osc
/* Poll MIDI event.
 * Returns 1 on succes, SFM_event contains event and dt contains interval in ms.
 * Returns SMF_STOPPED on playback end.
 */
int SMF_PollEvent(struct SMF_event *e, uint32_t *dt)
{
	int result = SMF_NO_EVENTS;
	//int i;
	int a = 0; /* Todo implement for multiple tracks */
	uint32_t length;
	uint8_t type;

	uint8_t status = track[a].status;

	if (track->head >= track->length)
	{
		return SMF_STOPPED;
	}

	if (!(Peek(&track[a]) & 0x80))
	{
		/* Running byte! Do not change the state. */
	}
	else
	{
		status = Data(&track[a]);
		track[a].status = status;
	}

	if (status == 0xF0 || status == 0xF7)
	{
		/* System exclusive event */
		while (Data(&track[a]) != 0xF7)
		{
			;
		}
	}
	else if (status == 0xFF)
	{
		/* Meta event */
		type = Data(&track[a]);
		length = VData(&track[a]);

		if (type == 0x51 && length == 3)
		{
			usPerBeat = (Data(&track[a]) << 16) | (Data(&track[a]) << 8) | (Data(&track[a]) << 0);
			tick = usPerBeat / ticksPerBeat;
		}
		else
		{
			/* Unknown message */
			SkipData(&track[a], length);
		}
	}
	else
	{
		e->channel = (status & 0x0F) + 1;
		e->status = (status & 0x70) >> 4;
		/* MIDI event */
		switch (status & 0xF0)
		{
		case 0x80:
		case 0x90:
		case 0xA0:
		case 0xB0:
		case 0xE0:
			/* 2 parameters */
			e->p1 = Data(&track[a]);
			e->p2 = Data(&track[a]);
			result = SMF_EVENT_READY;
			break;
		case 0xC0:
		case 0xD0:
			/* 1 parameter */
			e->p1 = Data(&track[a]);
			result = SMF_EVENT_READY;
			break;
		case 0xF0:
		default:
			/* Todo: handle these unhandled events */
			break;
		}
	}

	/* Calculate delta time in us */
	track[a].dt = (VData(&track[a]) * tick) / 1000;

	/* Todo determine smallest dt */
	/* Whose first up? (Smallest delta time.) */
	/*uint32_t min = track[0];
	for (i = 0; i < trackCount; i++)
	{
		if (track[i] < min)
		{
			min = track[i];
		}
	}*/

	/* Calculate delta time in ms */
	//*dt = min / 1000;
	*dt = track[a].dt;

	return result;
}
示例#7
0
文件: smf.c 项目: keoni29/osc
/** Verify the track
 * 	Returns negative error code on failure, 1 when last event in track was not Meta "End of Track", 0 on success. */
static int VerifyTrack(struct SMF_track* t)
{
	uint8_t status, type;

	if (!_strcmpl("MTrk", t->str, 4))
	{
		return -1;
	}

	while (t->head < t->length)
	{
		uint32_t length;

		/* Skip over delta time field */
		VData(t);

		if (!(Peek(t) & 0x80))
		{
			/* Running byte! Do not change the state. */
		}
		else
		{
			status = Data(t);
		}

		if (status == 0xF0 || status == 0xF7)
		{
			/* System exclusive event */
			while (Data(t) != 0xF7)
			{
				;
			}
		}
		else if (status == 0xFF)
		{
			/* Meta event */
			type = Data(t);
			length = VData(t);
			SkipData(t, length);
		}
		else
		{
			/* MIDI event */
			switch (status & 0xF0)
			{
			case 0x80:
			case 0x90:
			case 0xA0:
			case 0xB0:
			case 0xE0:
				/* 2 parameters */
				SkipData(t, 2);
				break;
			case 0xC0:
			case 0xD0:
				/* 1 parameter */
				SkipData(t, 1);
				break;
			case 0xF0:
			default:
				/* Unhandled event */
				return -1;
				break;
			}
		}
	}

	if (!(status == 0xFF && type == 0x2F))
	{
		/* Last message was not META 0x2F (End of track) */
		return 1;
	}
	return 0;
}
示例#8
0
文件: smf.c 项目: keoni29/osc
/** Load standard midi file
 * 	Returns negative error code on failure, 0 on success.
 * 	Remember to call SMF_Free() before loading a new song. */
int SMF_Load(char* filename)
{
	struct SMF_header header;
	FILE *in = NULL;
	int i;

	in = fopen(filename, "r");
	if (in == NULL)
	{
		return SMF_ERROR_FILE;
	}

	/** Todo: handle errors */
	fread((void *)&header.str, sizeof(header.str), 1, in);
	fread((void *)&header.length, sizeof(header.length), 1, in);
	fread((void *)&header.format, sizeof(header.format), 1, in);
	fread((void *)&header.n, sizeof(header.n), 1, in);
	fread((void *)&header.division, sizeof(header.division), 1, in);

	if (!_strcmpl("MThd", header.str, 4))
	{
		return SMF_ERROR_INVALID;
	}

	ReverseInt32(&header.length);
	ReverseInt16(&header.format);
	ReverseInt16(&header.n);
	ReverseInt16(&header.division);

	if (header.n > SMF_MAX_TRACKS)
	{
		return SMF_ERROR_COMPLEX;
	}

	trackCount = header.n;

	ticksPerBeat = header.division;

	/* Load and verify all tracks */
	for (i = 0; i < header.n; i++)
	{
		/* Todo: handle errors */
		fread((void *)&track[i].str, sizeof(track[i].str), 1, in);
		fread((void *)&track[i].length, sizeof(track[i].length), 1, in);

		ReverseInt32(&track[i].length);

		track[i].data = (uint8_t *)malloc(track[i].length);
		if (track[i].data != NULL)
		{
			fread((void *)track[i].data, track[i].length, 1, in);
		}

		if (VerifyTrack(&track[i]) < 0)
		{
			return SMF_ERROR_INVALID;
		}

		/* Rewind head to start */
		track[i].head = 0;
		/* Todo Calculate initial delta time in ms */
		VData(&track[i]);
	}

	return SMF_SUCCESS;
}