/* * 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; }
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); }
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; }
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; }