Exemplo n.º 1
0
/*
 * RemoteSignalThread() -- Thread spawned to process remote signal.
 *
 *     Param must be the signal number.
 */
static DWORD WINAPI
RemoteSignalThread(LPVOID param)
{
    int signo = (int)(intptr_t)param;
    DWORD rc = 0;

    if (SignalIsDefined(signo)) {
	/* process signal */
	ProcessSignal(signo);
    } else if (signo != 0) {
	/* invalid signal value */
	rc = -1;
    }
    return rc;
}
Exemplo n.º 2
0
void ProcessUntilTime (int untilTime)
{
    DEBUG_printf ("ProcessUntilTime %d\n", untilTime);
    ASSERT (untilTime <= last_drawable_time);

    if (untilTime <= last_processed_time)
        return;

    char buf[10000];
    int ret1;
    char *ret2;

    FILE *hhh_file2 = fopen (hhh_filename, "r");

    last_processed_time++;
    do
    {
        long pos = positions[last_processed_time].position;

        if (pos)
        {
            ret1 = fseek (hhh_file2, pos, SEEK_SET);
            break;
        }

        last_processed_time++;
    }
    while (last_processed_time <= untilTime);

    if (last_processed_time > untilTime)
    {
        last_processed_time = untilTime;
        goto end;
    }

    if (ret1 == -1)
    {
        fprintf (stderr, "Strange error in ProcessUntilTime: ret1==-1\n");
        exit (-1);
    }

    while (1)
    {
        ret2 = fgets (buf, 10000, hhh_file2);
        if (ret2 == NULL)
        {
            fprintf (stderr, "Strange error in ProcessUntilTime: ret2==NULL\n");
            exit (-1);
        }

        int size = strlen (buf);

        if (!size || buf[size - 1] != '\n')
            break;

        //      printf("process %s\n", buf);
        if (BEGINS_WITH (buf, "time "))
        {
            int time = atoi (buf + 5);

            if (time > untilTime)
                goto end;
            last_processed_time = time;
        } else if (BEGINS_WITH (buf, "signal"))
        {
            ProcessSignal (buf);
        } else if (BEGINS_WITH (buf, "dataon "))
        {
            ProcessDataOn (buf);
        } else if (BEGINS_WITH (buf, "dataoff "))
        {
            ProcessDataOff (buf);
        } else if (BEGINS_WITH (buf, "new-thread"))
        {
            ProcessNewThread (buf);
        } else if (BEGINS_WITH (buf, "end-thread"))
        {
            ProcessEndThread (buf);
        } else if (BEGINS_WITH (buf, "end"))
        {
            last_processed_time = last_read_time;
            goto end;
        }
    }

  end:
    fclose (hhh_file2);
}
Exemplo n.º 3
0
int main(int argc,char * argv[])
{
  try
  {
  Signals::SignalSet signalset1("");
  Signals::SignalSet signalset2("");
  Signals::SignalSet signalset3("");
//  TApplication application("app",&argc,argv);
  Tools::ASCIIInStream f1("pion5GeV0.1cm.sigs");
  f1>>signalset1;
  f1.Close();
  Tools::ASCIIInStream f2("pion5GeV0.1cm.sigs");
  f2>>signalset2;
  f2.Close();
  Tools::ASCIIInStream f3("pion5GeV0.15cm.sigs");
  f3>>signalset3;
  f3.Close();

  TFile r("toht.root");
  if(!r.IsZombie())
  {
    lowdist=(TH1D*)r.Get("lowdist");
    highdist=(TH1D*)r.Get("highdist");
    lowdist->SetDirectory(0);
    highdist->SetDirectory(0);
    std::cout<<"READ PREVIOUS HISTOGRAMS"<<std::endl;
  }
  else
  {
    lowdist=new TH1D("lowdist","lowdist",19,0,19);
    highdist=new TH1D("highdist","highdist",19,0,19);
  }
  r.Close();

  unsigned int size1=signalset1.GetGroupCount();
  unsigned  int size2=signalset2.GetGroupCount();
  unsigned int size3=signalset3.GetGroupCount();

  for(unsigned int i=0;i<1000;++i)
  {
    int s1=rndm(3);
    int s2=rndm(3);
    std::cout<<"s1:"<<s1<<" s2:"<<s2<<std::endl;
    switch(s1)
    {
      case 0:
        signal=signalset1.GetSignal(rndm(size1),"signal");
        break;
      case 1:
        signal=signalset2.GetSignal(rndm(size2),"signal");
        break;
      case 2:
        signal=signalset3.GetSignal(rndm(size3),"signal");
        break;
    }
    switch(s2)
    {
      case 0:
        signal.Add(signalset1.GetSignal(rndm(size1),"signal"));
        break;
      case 1:
        signal.Add(signalset2.GetSignal(rndm(size2),"signal"));
        break;
      case 2:
        signal.Add(signalset3.GetSignal(rndm(size3),"signal"));
        break;
    }
    ProcessSignal();
  }
  
  TCanvas * canvas=new TCanvas;
  lowdist->GetXaxis()->SetTitle("ToT/3.125ns");
  lowdist->GetYaxis()->SetTitle("Entries");
  lowdist->Draw("");
  canvas->Update();
  canvas->Print("ToLTDist.pdf");
  highdist->GetXaxis()->SetTitle("ToT/3.125ns");
  highdist->GetYaxis()->SetTitle("Entries");
  highdist->Draw("");
  canvas->Update();
  canvas->Print("TOHTDist.pdf");
  
  TFile f("toht.root","recreate");
  lowdist->Write("lowdist");
  highdist->Write("highdist");
  f.Close();
  }
  catch(const char *e)
  {
    std::cout<<e<<std::endl;
    throw;
  }

  return 0;
}
Exemplo n.º 4
0
int main(int argc,char * argv[])
{
  try
  {
    InitRoot();
    gStyle->SetOptStat(0);
//    TApplication application("app",&argc,argv);
    Signals::Signal sig(3.125/SignalBinDiv);
    sig.SetSignalLength(3.125*SignalBins);
    sig.SetSignalUnit("fC/0.5ns");
    CreateLSSignal(sig,10,10,15,20,
                   40,8,-0.1);
    std::cout<<"Integral :"<<sig.IntegralAbove(0)*sig.GetSignalBinTime()<<std::endl;
    TGraph * graph=sig.Graph();
    canvas=new TCanvas;
    graph->Draw("AL");
    canvas->Update();
    canvas->Print("CustomSignal.pdf");
    TH2D * charge=new TH2D("charge","charge",10,0,100,10,0,100);
    charge->GetXaxis()->SetTitle("plateau time/ns");
    charge->GetXaxis()->SetTitleOffset(1.5);
    charge->GetYaxis()->SetTitle("plateau amplitude/(fC/0.5ns)");
    charge->GetYaxis()->SetTitleOffset(1.5);
    charge->GetZaxis()->SetTitle("-total charge/pC");
    charge->GetZaxis()->SetTitleOffset(1.2);
    TH2D * toht=new TH2D("toht","toht",10,0,100,10,0,100);
    toht->GetXaxis()->SetTitle("plateau time/ns");
    toht->GetXaxis()->SetTitleOffset(1.5);
    toht->GetYaxis()->SetTitle("plateau amplitude/(fC/0.5ns)");
    toht->GetYaxis()->SetTitleOffset(1.5);
    toht->GetZaxis()->SetTitle("first time over threshold/ns");
    toht->GetZaxis()->SetTitleOffset(1.2);
    TH2D * leading=new TH2D("leading","leading",10,0,100,10,0,100);
    leading->GetXaxis()->SetTitle("plateau time/ns");
    leading->GetXaxis()->SetTitleOffset(1.5);
    leading->GetYaxis()->SetTitle("plateau amplitude/(fC/0.5ns)");
    leading->GetYaxis()->SetTitleOffset(1.5);
    leading->GetZaxis()->SetTitle("Leading high treshold time/ns");
    leading->GetZaxis()->SetTitleOffset(1.2);
    TH2D * trailing=new TH2D("trailing","trailing",10,0,100,10,0,100);
    trailing->GetXaxis()->SetTitle("plateau time/ns");
    trailing->GetXaxis()->SetTitleOffset(1.5);
    trailing->GetYaxis()->SetTitle("plateau amplitude/(fC/0.5ns)");
    trailing->GetYaxis()->SetTitleOffset(1.5);
    trailing->GetZaxis()->SetTitle("trailing high threshold time/ns");
    trailing->GetZaxis()->SetTitleOffset(1.2);
    TH2D * ltoht=new TH2D("ltoht","ltoht",10,0,100,10,0,100);
    ltoht->GetXaxis()->SetTitle("plateau time/ns");
    ltoht->GetXaxis()->SetTitleOffset(1.5);
    ltoht->GetYaxis()->SetTitle("plateau amplitude/(fC/0.5ns)");
    ltoht->GetYaxis()->SetTitleOffset(1.5);
    ltoht->GetZaxis()->SetTitle("last time over threshold/ns");
    ltoht->GetZaxis()->SetTitleOffset(1.2);
    for(unsigned int time=0;time<100;time+=10)
    {
      for(unsigned int amplitude=10;amplitude<100;amplitude+=10)
      {
        CreateLSSignal(sig,10,10,time,20,amplitude,amplitude*0.2,-0.1);
        sig.Scale(-1);
        charge->SetBinContent(time/10+1,amplitude/10+1,-sig.IntegralBelow(0)*sig.GetSignalBinTime()*1E-3);
        unsigned int resulttoht=ProcessSignal(sig,IntToStr(time)+"x"+IntToStr(amplitude));
        std::cout<<"set"<<time<<":"<<amplitude<<":"<<resulttoht<<std::endl;
        toht->SetBinContent(time/10+1,amplitude/10+1,resulttoht);
        leading->SetBinContent(time/10+1,amplitude/10+1,leadingb);
        trailing->SetBinContent(time/10+1,amplitude/10+1,trailingb);
        ltoht->SetBinContent(time/10+1,amplitude/10+1,lastbinblock);
      }
    }
    charge->Draw("lego1");
    canvas->Update();
    canvas->Print("charge.pdf");
    toht->Draw("lego1");
    canvas->Update();
    canvas->Print("toht.pdf");
    leading->Draw("lego1");
    canvas->Update();
    canvas->Print("leading.pdf");
    trailing->Draw("lego1");
    canvas->Update();
    canvas->Print("trailing.pdf");
    ltoht->Draw("lego1");
    canvas->Update();
    canvas->Print("ltoht.pdf");
//    application.Run(kTRUE);
  }
  catch(const char *e)
  {
    std::cout<<e<<std::endl;
    throw;
  }

  return 0;
}