Class: Analysis_SR_Stage

Inherits:
Object
  • Object
show all
Defined in:
lib/analysis_sr_stage.rb

Overview

Information about a systematic review on specific stage

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sr, stage) ⇒ Analysis_SR_Stage

Returns a new instance of Analysis_SR_Stage.



35
36
37
38
# File 'lib/analysis_sr_stage.rb', line 35

def initialize(sr,stage)
  @sr=sr
  @stage=stage.to_sym
end

Instance Attribute Details

#srObject (readonly)

Returns the value of attribute sr.



33
34
35
# File 'lib/analysis_sr_stage.rb', line 33

def sr
  @sr
end

#stageObject (readonly)

Returns the value of attribute stage.



34
35
36
# File 'lib/analysis_sr_stage.rb', line 34

def stage
  @stage
end

Instance Method Details

#cd_accepted_idObject



111
112
113
# File 'lib/analysis_sr_stage.rb', line 111

def cd_accepted_id
  resolutions_by_cd.find_all {|v| v[1]=='yes'}.map {|v| v[0]}
end

#cd_id_assigned_by_user(user_id) ⇒ Object



63
64
65
66
# File 'lib/analysis_sr_stage.rb', line 63

def cd_id_assigned_by_user(user_id)
  cds=@sr.cd_id_by_stage(@stage)
  (AllocationCd.where(:systematic_review_id=>@sr.id, :stage=>@stage.to_s, :user_id=>user_id).map(:canonical_document_id)) & cds
end

#cd_rejected_idObject



108
109
110
# File 'lib/analysis_sr_stage.rb', line 108

def cd_rejected_id
  resolutions_by_cd.find_all {|v| v[1]=='no'}.map {|v| v[0]}
end

#cd_resolved_idObject



105
106
107
# File 'lib/analysis_sr_stage.rb', line 105

def cd_resolved_id
  resolutions_by_cd.find_all {|v| (v[1]=='no' or v[1]=='yes')}.map {|v| v[0]}
end

#cd_screened_idObject

Canonical document id for document screened on certain stage it should be noted that documents could be partially screened, not necessarily resolved



100
101
102
103
# File 'lib/analysis_sr_stage.rb', line 100

def cd_screened_id
  cds=@sr.cd_id_by_stage(@stage)
  Decision.where(:systematic_review_id=>@sr.id, :canonical_document_id=>cds, :user_id=>@sr.group_users.map {|u| u[:id]}, :stage=>@stage.to_s).group(:canonical_document_id).map(:canonical_document_id)
end

#cd_without_abstractObject



138
139
140
# File 'lib/analysis_sr_stage.rb', line 138

def cd_without_abstract
  CanonicalDocument.where(id:@sr.cd_id_by_stage(@stage)).where(Sequel.lit("abstract IS NULL OR abstract=''"))
end

#cd_without_allocationsObject

Check what Canonical documents aren’t assigned yet



68
69
70
71
72
# File 'lib/analysis_sr_stage.rb', line 68

def cd_without_allocations
  cds=@sr.cd_id_by_stage(@stage)
  assignations=AllocationCd.where(:systematic_review_id=>@sr.id, :stage=>@stage.to_s).group(:canonical_document_id, :user_id).map(:canonical_document_id).uniq
  CanonicalDocument.where(:id=>cds-assignations)
end

#decisions_by_cdObject

Number of decisions by cd



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/analysis_sr_stage.rb', line 115

def decisions_by_cd
  cds=@sr.cd_id_by_stage(@stage)

  decisions=Decision.where(:systematic_review_id=>@sr.id,
                           :canonical_document_id=>cds,
                           :user_id=>@sr.group_users.map {|u| u[:id]},
                           :stage=>@stage.to_s).group_and_count(:canonical_document_id, :decision).all
  n_jueces_por_cd=AllocationCd.where(:systematic_review_id=>@sr.id, :canonical_document_id=>cds, :stage=>@stage.to_s).group_and_count(:canonical_document_id).as_hash(:canonical_document_id)


#    n_jueces=@sr.group_users.count
  cds.inject({}) {|ac,v|
    ac[v]=empty_decisions_hash
    ac[v]=ac[v].merge decisions.find_all   {|dec|      dec[:canonical_document_id]==v }
                          .inject({}) {|ac1,v1|   ac1[v1[:decision]]=v1[:count]; ac1 }
    suma=ac[v].inject(0) {|ac1,v1| ac1+v1[1]}
    n_jueces=n_jueces_por_cd[v].nil? ? 0 : n_jueces_por_cd[v][:count]
    ac[v][Decision::NO_DECISION]=n_jueces-suma
    ac
  }
end

#empty_decisions_hashObject



94
95
96
# File 'lib/analysis_sr_stage.rb', line 94

def empty_decisions_hash
  Decision::N_EST.keys.inject({}) {|ac,v|  ac[v]=0;ac }
end

#incoming_citations(cd_id) ⇒ Object



40
41
42
43
44
# File 'lib/analysis_sr_stage.rb', line 40

def incoming_citations(cd_id)
  cd_stage=@sr.cd_id_by_stage(@stage)
  rec=@sr.references_bw_canonical.where(:cd_end=>cd_id).map(:cd_start)
  rec & cd_stage
end

#outcoming_citations(cd_id) ⇒ Object



45
46
47
48
49
# File 'lib/analysis_sr_stage.rb', line 45

def outcoming_citations(cd_id)
  cd_stage=@sr.cd_id_by_stage(@stage)
  rec=@sr.references_bw_canonical.where(:cd_start=>cd_id).map(:cd_end)
  rec & cd_stage
end

#resolutions_by_cdObject



74
75
76
77
78
79
80
81
82
# File 'lib/analysis_sr_stage.rb', line 74

def resolutions_by_cd
  cds=@sr.cd_id_by_stage(@stage)
  resolutions=Resolution.where(:systematic_review_id=>@sr.id, :canonical_document_id=>cds, :stage=>@stage.to_s).as_hash(:canonical_document_id)
  cds.inject({}) {|ac,v|
    val=resolutions[v].nil? ? Resolution::NO_RESOLUTION : resolutions[v][:resolution]
    ac[v]=val
    ac
  }
end

#resolutions_commentary_by_cdObject



84
85
86
87
88
89
90
91
92
# File 'lib/analysis_sr_stage.rb', line 84

def resolutions_commentary_by_cd
  cds=@sr.cd_id_by_stage(@stage)
  resolutions=Resolution.where(:systematic_review_id=>@sr.id, :canonical_document_id=>cds, :stage=>@stage.to_s).as_hash(:canonical_document_id)
  cds.inject({}) {|ac,v|
    val=resolutions[v].nil? ? nil : resolutions[v][:commentary]
    ac[v]=val
    ac
  }
end

#stage_complete?Boolean

Returns:

  • (Boolean)


50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/analysis_sr_stage.rb', line 50

def stage_complete?
  #$log.info(stage)
  if @stage==:search
    bds=@sr.searches_dataset
    bds.where(:valid=>nil).count==0 and bds.exclude(:valid=>nil).count>0

  elsif [:screening_title_abstract,:screening_references,:review_full_text].include? @stage
    res=resolutions_by_cd
    res.all? {|v| v[1]=='yes' or v[1]=='no'}
  else
    raise('Not defined yet')
  end
end